diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 0f2a0e1c..8f0b0a84 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -3,6 +3,9 @@ #include #include #include +#include +#include + #include #include #include @@ -22,7 +25,6 @@ #include "Territory/InstanceObjectCache.h" #include "Territory/Land.h" - #include "Network/GameConnection.h" #include "Network/PacketWrappers/ActorControlPacket.h" #include "Network/PacketWrappers/ActorControlSelfPacket.h" @@ -347,31 +349,12 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) auto data = pExdData->get< Sapphire::Data::Aetheryte >( aetheryteId ); if( data == nullptr ) - { return; - } setStateFlag( PlayerStateFlag::BetweenAreas ); auto pInstanceObjectCache = m_pFw->get< InstanceObjectCache >(); - - auto targetPos = pTeriMgr->getTerritoryPosition( data->level.at( 0 ) ); - auto pop = pInstanceObjectCache->getPopRange( data->territory, data->level[ 0 ] ); - auto pop1 = pInstanceObjectCache->getPopRange( data->territory, data->level[ 1 ] ); - - if( pop ) - { - sendDebug( "Teleport: popRange {0} found!", data->level.at( 0 ) ); - } - else if( pop1 ) - { - sendDebug( "Teleport: popRange {0} found!", data->level.at( 1 ) ); - } - else - { - sendDebug( "Teleport: popRange {0} not found in {1}!", data->level[ 0 ], data->territory ); - } Common::FFXIVARR_POSITION3 pos; pos.x = 0; @@ -379,10 +362,18 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) pos.z = 0; float rot = 0; - if( targetPos != nullptr ) + if( pop ) { - pos = targetPos->getTargetPosition(); - rot = targetPos->getTargetRotation(); + sendDebug( "Teleport: popRange {0} found!", data->level.at( 0 ) ); + + pos.x = pop->header.transform.translation.x; + pos.y = pop->header.transform.translation.y; + pos.z = pop->header.transform.translation.z; + rot = pop->header.transform.rotation.y * -1; + } + else + { + sendDebug( "Teleport: popRange {0} not found in {1}!", data->level[ 0 ], data->territory ); } sendDebug( "Teleport: {0} {1} ({2})", diff --git a/src/world/Network/Handlers/PacketHandlers.cpp b/src/world/Network/Handlers/PacketHandlers.cpp index 6f55cf4a..2f6183dc 100644 --- a/src/world/Network/Handlers/PacketHandlers.cpp +++ b/src/world/Network/Handlers/PacketHandlers.cpp @@ -290,21 +290,16 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw, Common::FFXIVARR_POSITION3 targetPos{}; uint32_t targetZone; + float rotation = 0.0f; + if( pExitRange ) { - player.sendDebug( "Found ExitRange#{0}", zoneLineId ); - player.sendDebug( "destTerritoryType#{0}", pExitRange->data.destTerritoryType ); - player.sendDebug( "destInstanceObjectId#{0}", pExitRange->data.destInstanceObjectId ); - auto pPopRange = pInstanceObjectCache->getPopRange( pExitRange->data.destTerritoryType, pExitRange->data.destInstanceObjectId ); if( pPopRange ) { targetZone = pExitRange->data.destTerritoryType; - player.sendDebug( "\tFound PopRange#{0}", pExitRange->data.destInstanceObjectId ); - player.sendDebug( "\t{0}", pPopRange->header.transform.translation.x ); - player.sendDebug( "\t{0}", pPopRange->header.transform.translation.y ); - player.sendDebug( "\t{0}", pPopRange->header.transform.translation.z ); + rotation = pPopRange->header.transform.rotation.y * -1.f; targetPos = Common::FFXIVARR_POSITION3 { pPopRange->header.transform.translation.x, pPopRange->header.transform.translation.y, pPopRange->header.transform.translation.z }; @@ -314,8 +309,6 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw, auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( player.getId() ); preparePacket->data().targetZone = pExitRange->data.destTerritoryType; - //ActorControlSelfPacket controlPacket( pPlayer, ActorControlType::DespawnZoneScreenMsg, - // 0x03, player.getId(), 0x01, targetZone ); player.queuePacket( preparePacket ); } @@ -323,34 +316,6 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw, player.sendDebug( "Walking ZoneLine#{0}", zoneLineId ); - auto pZone = player.getCurrentTerritory(); - - float rotation = 0.0f; - -/* if( pLine != nullptr ) - { - player.sendDebug( "ZoneLine #{0} found.", zoneLineId ); - targetPos = pLine->getTargetPosition(); - targetZone = pLine->getTargetZoneId(); - rotation = pLine->getTargetRotation(); - - auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( player.getId() ); - preparePacket->data().targetZone = targetZone; - - //ActorControlSelfPacket controlPacket( pPlayer, ActorControlType::DespawnZoneScreenMsg, - // 0x03, player.getId(), 0x01, targetZone ); - player.queuePacket( preparePacket ); - } - else - { - // No zoneline found, revert to last zone - player.sendUrgent( "ZoneLine {0} not found.", zoneLineId ); - targetPos.x = 0; - targetPos.y = 0; - targetPos.z = 0; - targetZone = pZone->getTerritoryTypeId(); - }*/ - player.performZoning( targetZone, targetPos, rotation ); }