mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 06:27:45 +00:00
More Moveplayer work in preparation of warp overhaul
This commit is contained in:
parent
0f22bbde91
commit
92bd74cde2
4 changed files with 28 additions and 27 deletions
|
@ -465,25 +465,29 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
|
||||||
setZoningType( Common::ZoneingType::Return );
|
setZoningType( Common::ZoneingType::Return );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_queuedZoneing = std::make_shared< QueuedZoning >( data.TerritoryType, pos, Util::getTimeMs(), rot );
|
m_queuedZoneing = std::make_shared< QueuedZoning >( data.TerritoryType, 0, pos, Util::getTimeMs(), rot );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::forceZoneing( uint32_t zoneId )
|
void Sapphire::Entity::Player::forceZoneing( uint32_t zoneId )
|
||||||
{
|
{
|
||||||
m_queuedZoneing = std::make_shared< QueuedZoning >( zoneId, getPos(), Util::getTimeMs(), 0.f );
|
m_queuedZoneing = std::make_shared< QueuedZoning >( zoneId, 0, getPos(), Util::getTimeMs(), 0.f );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::performZoning( uint16_t zoneId, const Common::FFXIVARR_POSITION3& pos, float rotation )
|
void Sapphire::Entity::Player::performZoning( uint16_t territoryTypeId, uint32_t territoryId, const Common::FFXIVARR_POSITION3& pos, float rotation )
|
||||||
{
|
{
|
||||||
m_pos = pos;
|
m_pos = pos;
|
||||||
m_territoryTypeId = zoneId;
|
|
||||||
m_bMarkedForZoning = true;
|
m_bMarkedForZoning = true;
|
||||||
setRot( rotation );
|
setRot( rotation );
|
||||||
|
|
||||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||||
m_onEnterEventDone = false;
|
m_onEnterEventDone = false;
|
||||||
|
|
||||||
auto pZone = teriMgr.getZoneByTerritoryTypeId( zoneId );
|
TerritoryPtr pZone;
|
||||||
|
if( territoryId != 0 )
|
||||||
|
pZone = teriMgr.getTerritoryByGuId( territoryId );
|
||||||
|
else
|
||||||
|
pZone = teriMgr.getZoneByTerritoryTypeId( territoryTypeId );
|
||||||
|
|
||||||
if( !teriMgr.movePlayer( pZone, *this ) )
|
if( !teriMgr.movePlayer( pZone, *this ) )
|
||||||
{
|
{
|
||||||
// todo: this will require proper handling, for now just return the player to their previous area
|
// todo: this will require proper handling, for now just return the player to their previous area
|
||||||
|
@ -516,8 +520,7 @@ bool Sapphire::Entity::Player::setInstance( uint32_t territoryId, Common::FFXIVA
|
||||||
m_prevRot = m_rot;
|
m_prevRot = m_rot;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !teriMgr.movePlayer( instance, *this ) )
|
m_queuedZoneing = std::make_shared< QueuedZoning >( instance->getTerritoryTypeId(), territoryId, m_pos, Util::getTimeMs(), m_rot );
|
||||||
return false;
|
|
||||||
|
|
||||||
m_pos = pos;
|
m_pos = pos;
|
||||||
return true;
|
return true;
|
||||||
|
@ -531,17 +534,12 @@ bool Sapphire::Entity::Player::exitInstance()
|
||||||
resetHp();
|
resetHp();
|
||||||
resetMp();
|
resetMp();
|
||||||
|
|
||||||
TerritoryPtr pTeri = teriMgr.getTerritoryByGuId( m_prevTerritoryId );
|
|
||||||
|
|
||||||
if( !teriMgr.movePlayer( pTeri, *this ) )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
m_pos = m_prevPos;
|
m_pos = m_prevPos;
|
||||||
m_rot = m_prevRot;
|
m_rot = m_prevRot;
|
||||||
m_territoryTypeId = m_prevTerritoryTypeId;
|
m_territoryTypeId = m_prevTerritoryTypeId;
|
||||||
m_territoryId = m_prevTerritoryId;
|
m_territoryId = m_prevTerritoryId;
|
||||||
|
|
||||||
//m_queuedZoneing = std::make_shared< QueuedZoning >( m_territoryTypeId, m_pos, Util::getTimeMs(), m_rot );
|
m_queuedZoneing = std::make_shared< QueuedZoning >( m_territoryTypeId, getTerritoryId(), m_pos, Util::getTimeMs(), m_rot );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -696,7 +694,7 @@ void Sapphire::Entity::Player::resetDiscovery()
|
||||||
void Sapphire::Entity::Player::changePosition( float x, float y, float z, float o )
|
void Sapphire::Entity::Player::changePosition( float x, float y, float z, float o )
|
||||||
{
|
{
|
||||||
Common::FFXIVARR_POSITION3 pos{ x, y, z };
|
Common::FFXIVARR_POSITION3 pos{ x, y, z };
|
||||||
m_queuedZoneing = std::make_shared< QueuedZoning >( getTerritoryTypeId(), pos, Util::getTimeMs(), o );
|
m_queuedZoneing = std::make_shared< QueuedZoning >( getTerritoryTypeId(), 0, pos, Util::getTimeMs(), o );
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sapphire::Entity::Player::setSystemActionUnlocked( Common::UnlockEntry unlockId )
|
void Sapphire::Entity::Player::setSystemActionUnlocked( Common::UnlockEntry unlockId )
|
||||||
|
@ -1054,9 +1052,10 @@ void Sapphire::Entity::Player::update( uint64_t tickCount )
|
||||||
if( m_queuedZoneing && ( tickCount - m_queuedZoneing->m_queueTime ) > 800 )
|
if( m_queuedZoneing && ( tickCount - m_queuedZoneing->m_queueTime ) > 800 )
|
||||||
{
|
{
|
||||||
Common::FFXIVARR_POSITION3 targetPos = m_queuedZoneing->m_targetPosition;
|
Common::FFXIVARR_POSITION3 targetPos = m_queuedZoneing->m_targetPosition;
|
||||||
if( getTerritoryTypeId() != m_queuedZoneing->m_targetZone )
|
if( getTerritoryTypeId() != m_queuedZoneing->m_targetTerritoryTypeId )
|
||||||
{
|
{
|
||||||
performZoning( m_queuedZoneing->m_targetZone, targetPos, m_queuedZoneing->m_targetRotation );
|
Logger::debug( "{}_{}", m_queuedZoneing->m_targetTerritoryTypeId, m_queuedZoneing->m_targetTerritoryId );
|
||||||
|
performZoning( m_queuedZoneing->m_targetTerritoryTypeId, m_queuedZoneing->m_targetTerritoryId, targetPos, m_queuedZoneing->m_targetRotation );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,17 +20,19 @@ namespace Sapphire::Entity
|
||||||
|
|
||||||
struct QueuedZoning
|
struct QueuedZoning
|
||||||
{
|
{
|
||||||
uint16_t m_targetZone;
|
uint16_t m_targetTerritoryTypeId;
|
||||||
|
uint32_t m_targetTerritoryId;
|
||||||
Common::FFXIVARR_POSITION3 m_targetPosition;
|
Common::FFXIVARR_POSITION3 m_targetPosition;
|
||||||
float m_targetRotation;
|
float m_targetRotation;
|
||||||
uint64_t m_queueTime;
|
uint64_t m_queueTime;
|
||||||
|
|
||||||
QueuedZoning( uint16_t targetZone, const Common::FFXIVARR_POSITION3& targetPosition,
|
QueuedZoning( uint16_t targetZone, uint32_t targetTerritoryId, const Common::FFXIVARR_POSITION3& targetPosition,
|
||||||
uint64_t queuedTime, float targetRotation ) :
|
uint64_t queuedTime, float targetRotation ) :
|
||||||
m_targetZone( targetZone ),
|
m_targetTerritoryTypeId( targetZone ),
|
||||||
m_targetPosition( targetPosition ),
|
m_targetTerritoryId( targetTerritoryId ),
|
||||||
m_queueTime( queuedTime ),
|
m_targetPosition( targetPosition ),
|
||||||
m_targetRotation( targetRotation )
|
m_queueTime( queuedTime ),
|
||||||
|
m_targetRotation( targetRotation )
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -581,7 +583,7 @@ namespace Sapphire::Entity
|
||||||
void setLoadingComplete( bool bComplete );
|
void setLoadingComplete( bool bComplete );
|
||||||
|
|
||||||
/*! mark this player for zoning, notify worldserver */
|
/*! mark this player for zoning, notify worldserver */
|
||||||
void performZoning( uint16_t zoneId, const Common::FFXIVARR_POSITION3& pos, float rotation );
|
void performZoning( uint16_t territoryTypeId, uint32_t territoryId, const Common::FFXIVARR_POSITION3& pos, float rotation );
|
||||||
|
|
||||||
/*! return true if the player is marked for zoning */
|
/*! return true if the player is marked for zoning */
|
||||||
bool isMarkedForZoning() const;
|
bool isMarkedForZoning() const;
|
||||||
|
|
|
@ -194,7 +194,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
||||||
case GmCommand::Call:
|
case GmCommand::Call:
|
||||||
{
|
{
|
||||||
if( targetPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
if( targetPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
||||||
targetPlayer->performZoning( player.getTerritoryTypeId(), { player.getPos().x, player.getPos().y, player.getPos().z }, player.getRot() );
|
targetPlayer->performZoning( player.getTerritoryTypeId(), player.getTerritoryId(), { player.getPos().x, player.getPos().y, player.getPos().z }, player.getRot() );
|
||||||
else
|
else
|
||||||
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
|
targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() );
|
||||||
PlayerMgr::sendServerNotice( player, "Calling {0}", targetPlayer->getName() );
|
PlayerMgr::sendServerNotice( player, "Calling {0}", targetPlayer->getName() );
|
||||||
|
@ -486,7 +486,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//player.setInstance( param1, { 0, 0, 0 } );
|
player.setInstance( param1, { 0, 0, 0 } );
|
||||||
}
|
}
|
||||||
else if( !teriMgr.isValidTerritory( param1 ) )
|
else if( !teriMgr.isValidTerritory( param1 ) )
|
||||||
{
|
{
|
||||||
|
@ -533,7 +533,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
targetPlayer->setPos( targetPlayer->getPos() );
|
targetPlayer->setPos( targetPlayer->getPos() );
|
||||||
targetPlayer->performZoning( static_cast< uint16_t >( param1 ), targetPlayer->getPos(), 0 );
|
targetPlayer->performZoning( static_cast< uint16_t >( param1 ), targetPlayer->getTerritoryId(), targetPlayer->getPos(), 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerMgr::sendServerNotice( player, "{0} was warped to zone {1}", targetPlayer->getName(), param1, pZone->getName() );
|
PlayerMgr::sendServerNotice( player, "{0} was warped to zone {1}", targetPlayer->getName(), param1, pZone->getName() );
|
||||||
|
|
|
@ -359,7 +359,7 @@ void Sapphire::Network::GameConnection::zoneJumpHandler( const Packets::FFXIVARR
|
||||||
|
|
||||||
PlayerMgr::sendDebug( player, "Walking ZoneLine#{0}", exitBoxId );
|
PlayerMgr::sendDebug( player, "Walking ZoneLine#{0}", exitBoxId );
|
||||||
|
|
||||||
player.performZoning( targetZone, targetPos, rotation );
|
player.performZoning( targetZone, 0, targetPos, rotation );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue