mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-04 01:37:47 +00:00
Apply rotation properly when using zoneline / aetheryte
This commit is contained in:
parent
79764da844
commit
f87aa5d488
2 changed files with 17 additions and 61 deletions
|
@ -3,6 +3,9 @@
|
|||
#include <Util/UtilMath.h>
|
||||
#include <Logging/Logger.h>
|
||||
#include <Exd/ExdDataGenerated.h>
|
||||
#include <datReader/DatCategories/bg/LgbTypes.h>
|
||||
#include <datReader/DatCategories/bg/Lgb.h>
|
||||
|
||||
#include <Network/PacketContainer.h>
|
||||
#include <Network/CommonActorControl.h>
|
||||
#include <Network/PacketWrappers/EffectPacket.h>
|
||||
|
@ -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})",
|
||||
|
|
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue