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 <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})",
|
||||||
|
|
|
@ -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 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue