1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-04 09:47:46 +00:00

Apply rotation properly when using zoneline / aetheryte

This commit is contained in:
Mordred 2019-10-27 08:26:48 +01:00
parent 79764da844
commit f87aa5d488
2 changed files with 17 additions and 61 deletions

View file

@ -3,6 +3,9 @@
#include <Util/UtilMath.h> #include <Util/UtilMath.h>
#include <Logging/Logger.h> #include <Logging/Logger.h>
#include <Exd/ExdDataGenerated.h> #include <Exd/ExdDataGenerated.h>
#include <datReader/DatCategories/bg/LgbTypes.h>
#include <datReader/DatCategories/bg/Lgb.h>
#include <Network/PacketContainer.h> #include <Network/PacketContainer.h>
#include <Network/CommonActorControl.h> #include <Network/CommonActorControl.h>
#include <Network/PacketWrappers/EffectPacket.h> #include <Network/PacketWrappers/EffectPacket.h>
@ -22,7 +25,6 @@
#include "Territory/InstanceObjectCache.h" #include "Territory/InstanceObjectCache.h"
#include "Territory/Land.h" #include "Territory/Land.h"
#include "Network/GameConnection.h" #include "Network/GameConnection.h"
#include "Network/PacketWrappers/ActorControlPacket.h" #include "Network/PacketWrappers/ActorControlPacket.h"
#include "Network/PacketWrappers/ActorControlSelfPacket.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 ); auto data = pExdData->get< Sapphire::Data::Aetheryte >( aetheryteId );
if( data == nullptr ) if( data == nullptr )
{
return; return;
}
setStateFlag( PlayerStateFlag::BetweenAreas ); setStateFlag( PlayerStateFlag::BetweenAreas );
auto pInstanceObjectCache = m_pFw->get< InstanceObjectCache >(); auto pInstanceObjectCache = m_pFw->get< InstanceObjectCache >();
auto targetPos = pTeriMgr->getTerritoryPosition( data->level.at( 0 ) );
auto pop = pInstanceObjectCache->getPopRange( data->territory, data->level[ 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; Common::FFXIVARR_POSITION3 pos;
pos.x = 0; pos.x = 0;
@ -379,10 +362,18 @@ void Sapphire::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type )
pos.z = 0; pos.z = 0;
float rot = 0; float rot = 0;
if( targetPos != nullptr ) if( pop )
{ {
pos = targetPos->getTargetPosition(); sendDebug( "Teleport: popRange {0} found!", data->level.at( 0 ) );
rot = targetPos->getTargetRotation();
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})", sendDebug( "Teleport: {0} {1} ({2})",

View file

@ -290,21 +290,16 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw,
Common::FFXIVARR_POSITION3 targetPos{}; Common::FFXIVARR_POSITION3 targetPos{};
uint32_t targetZone; uint32_t targetZone;
float rotation = 0.0f;
if( pExitRange ) 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, auto pPopRange = pInstanceObjectCache->getPopRange( pExitRange->data.destTerritoryType,
pExitRange->data.destInstanceObjectId ); pExitRange->data.destInstanceObjectId );
if( pPopRange ) if( pPopRange )
{ {
targetZone = pExitRange->data.destTerritoryType; targetZone = pExitRange->data.destTerritoryType;
player.sendDebug( "\tFound PopRange#{0}", pExitRange->data.destInstanceObjectId ); rotation = pPopRange->header.transform.rotation.y * -1.f;
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 );
targetPos = Common::FFXIVARR_POSITION3 { pPopRange->header.transform.translation.x, targetPos = Common::FFXIVARR_POSITION3 { pPopRange->header.transform.translation.x,
pPopRange->header.transform.translation.y, pPopRange->header.transform.translation.y,
pPopRange->header.transform.translation.z }; pPopRange->header.transform.translation.z };
@ -314,8 +309,6 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw,
auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( player.getId() ); auto preparePacket = makeZonePacket< FFXIVIpcPrepareZoning >( player.getId() );
preparePacket->data().targetZone = pExitRange->data.destTerritoryType; preparePacket->data().targetZone = pExitRange->data.destTerritoryType;
//ActorControlSelfPacket controlPacket( pPlayer, ActorControlType::DespawnZoneScreenMsg,
// 0x03, player.getId(), 0x01, targetZone );
player.queuePacket( preparePacket ); player.queuePacket( preparePacket );
} }
@ -323,34 +316,6 @@ void Sapphire::Network::GameConnection::zoneLineHandler( FrameworkPtr pFw,
player.sendDebug( "Walking ZoneLine#{0}", zoneLineId ); 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 ); player.performZoning( targetZone, targetPos, rotation );
} }