From 8767991e7a2cfe9d98e440612ee617da9188d787 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 15 Jan 2022 23:28:06 +0100 Subject: [PATCH] Removal of more territory move logic --- src/world/Actor/Player.cpp | 21 ----------- src/world/Actor/Player.h | 3 -- src/world/Manager/TerritoryMgr.cpp | 2 +- .../Network/Handlers/GMCommandHandlers.cpp | 37 +++++++++++-------- 4 files changed, 23 insertions(+), 40 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 726dbc7e..cfe2ba6a 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -499,27 +499,6 @@ void Sapphire::Entity::Player::setZone( uint32_t zoneId ) } } -bool Sapphire::Entity::Player::setInstance( const TerritoryPtr& instance ) -{ - m_onEnterEventDone = false; - if( !instance ) - return false; - - auto& teriMgr = Common::Service< TerritoryMgr >::ref(); - - // zoning within the same zone won't cause the prev data to be overwritten - if( instance->getTerritoryTypeId() != m_territoryTypeId ) - { - auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() ); - m_prevTerritoryTypeId = pZone->getTerritoryTypeId(); - m_prevTerritoryId = getTerritoryId(); - m_prevPos = m_pos; - m_prevRot = m_rot; - } - - return teriMgr.movePlayer( instance, *this ); -} - bool Sapphire::Entity::Player::setInstance( const TerritoryPtr& instance, Common::FFXIVARR_POSITION3 pos ) { m_onEnterEventDone = false; diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index 0f1d2a2c..d96d756b 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -305,9 +305,6 @@ namespace Sapphire::Entity /*! sets the players zone, initiating a zoning process */ void setZone( uint32_t zoneId ); - /*! sets the players instance & initiates zoning process */ - bool setInstance( const TerritoryPtr& instance ); - /*! sets the players instance & initiates zoning process */ bool setInstance( const Sapphire::TerritoryPtr& instance, Sapphire::Common::FFXIVARR_POSITION3 pos ); diff --git a/src/world/Manager/TerritoryMgr.cpp b/src/world/Manager/TerritoryMgr.cpp index 6dfcf9c0..a76ef480 100644 --- a/src/world/Manager/TerritoryMgr.cpp +++ b/src/world/Manager/TerritoryMgr.cpp @@ -731,7 +731,7 @@ void Sapphire::World::Manager::TerritoryMgr::createAndJoinQuestBattle( Entity::P if( !qb ) return; - player.setInstance( qb ); + player.setInstance( qb, { 0, 0, 0 } ); } diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index c4dc09ab..9e6c8bdd 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -486,7 +486,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR break; } - player.setInstance( instance ); + player.setInstance( instance, { 0, 0, 0 } ); } else if( !teriMgr.isValidTerritory( param1 ) ) { @@ -653,23 +653,26 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX } case GmCommand::Jump: { - if( pPlayerTerri->getAsInstanceContent() ) - { - player.exitInstance(); - } + if( targetPlayer->getTerritoryId() != player.getTerritoryId() ) { + if( pPlayerTerri->getAsInstanceContent() ) + player.exitInstance(); + // Checks if the target player is in an InstanceContent to avoid binding to a Territory or PublicContent auto pInstanceContent = pTargetActorTerri->getAsInstanceContent(); if( pInstanceContent ) { // Not sure if GMs actually get bound to an instance they jump to on retail. It's mostly here to avoid a crash for now pInstanceContent->bindPlayer( player.getId() ); - player.setInstance( pInstanceContent ); + player.setInstance( pInstanceContent, { targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z } ); } } - player.changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z, targetActor->getRot() ); - player.sendZoneInPackets( 0x00, false ); + else + { + player.changePosition( targetActor->getPos().x, targetActor->getPos().y, targetActor->getPos().z, targetActor->getRot() ); + player.sendZoneInPackets( 0x00, false ); + } PlayerMgr::sendServerNotice( player, "Jumping to {0}", targetPlayer->getName() ); break; } @@ -681,16 +684,20 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX PlayerMgr::sendUrgent( player, "You are unable to call a player while bound to a battle instance." ); return; } - if( pTargetActorTerri->getAsInstanceContent() ) - { - targetPlayer->exitInstance(); - } + if( targetPlayer->getTerritoryId() != player.getTerritoryId() ) { - targetPlayer->setInstance( pTargetActorTerri->getAsInstanceContent() ); + if( pTargetActorTerri->getAsInstanceContent() ) + targetPlayer->exitInstance(); + + targetPlayer->setInstance( pTargetActorTerri->getAsInstanceContent(), { player.getPos().x, player.getPos().y, player.getPos().z } ); } - targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() ); - targetPlayer->sendZoneInPackets( 0x00, false ); + else + { + targetPlayer->changePosition( player.getPos().x, player.getPos().y, player.getPos().z, player.getRot() ); + targetPlayer->sendZoneInPackets( 0x00, false ); + } + PlayerMgr::sendServerNotice( player, "Calling {0}", targetPlayer->getName() ); break; }