From cf69e1876a7dd6c37b541aa002230a822bd8f086 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 30 Jan 2022 16:26:44 +0100 Subject: [PATCH] Finish zoning converted aswell --- src/world/Actor/Player.cpp | 49 ------------------- src/world/Actor/Player.h | 4 -- src/world/Manager/WarpMgr.cpp | 31 ++++++++++++ .../Network/Handlers/GMCommandHandlers.cpp | 2 - .../Network/Handlers/PacketCommandHandler.cpp | 4 +- 5 files changed, 34 insertions(+), 56 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 730ce8df..2e31a2e1 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -1581,55 +1581,6 @@ void Sapphire::Entity::Player::sendTitleList() queuePacket( titleListPacket ); } -void Sapphire::Entity::Player::sendZoneInPackets( uint32_t param1, bool shouldSetStatus = false ) -{ - auto zoneInPacket = makeActorControlSelf( getId(), Appear, param1, 0, 0, 0 ); - auto SetStatusPacket = makeActorControl( getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ); - - if( !getGmInvis() ) - sendToInRangeSet( zoneInPacket ); - - if( shouldSetStatus ) - sendToInRangeSet( SetStatusPacket, true ); - - queuePacket( zoneInPacket ); - - setZoningType( Common::ZoneingType::None ); - unsetStateFlag( PlayerStateFlag::BetweenAreas ); -} - -void Sapphire::Entity::Player::finishZoning() -{ - switch( getZoningType() ) - { - case ZoneingType::None: - sendZoneInPackets( 0x01 ); - break; - - case ZoneingType::Teleport: - sendZoneInPackets( 0x01 ); - break; - - case ZoneingType::Return: - case ZoneingType::ReturnDead: - { - if( getStatus() == Common::ActorStatus::Dead ) - { - resetHp(); - resetMp(); - setStatus( Common::ActorStatus::Idle ); - sendZoneInPackets( 0x01, true ); - } - else - sendZoneInPackets( 0x01 ); - } - break; - - case ZoneingType::FadeIn: - break; - } -} - void Sapphire::Entity::Player::teleportQuery( uint16_t aetheryteId ) { auto& exdData = Common::Service< Data::ExdData >::ref(); diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index 2605b1c9..a69fa174 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -562,10 +562,6 @@ namespace Sapphire::Entity /*! set the loading complete bool */ void setLoadingComplete( bool bComplete ); - void sendZoneInPackets( uint32_t param1, bool pSetStatus ); - - void finishZoning(); - void sendZonePackets(); Common::ZoneingType getZoningType() const; diff --git a/src/world/Manager/WarpMgr.cpp b/src/world/Manager/WarpMgr.cpp index beca7fe3..79ce276a 100644 --- a/src/world/Manager/WarpMgr.cpp +++ b/src/world/Manager/WarpMgr.cpp @@ -61,6 +61,37 @@ void WarpMgr::requestMoveTerritory( Entity::Player& player, Common::WarpType war void WarpMgr::finishWarp( Entity::Player& player ) { + WarpType warpType = WarpType::WARP_TYPE_NORMAL; + auto it = m_entityIdToWarpInfoMap.find( player.getId() ); + if( it != m_entityIdToWarpInfoMap.end() ) + warpType = it->second.m_warpType; + + switch( warpType ) + { + case WarpType::WARP_TYPE_REISE: + case WarpType::WARP_TYPE_HOME_POINT: + { + if( player.getStatus() == Common::ActorStatus::Dead ) + { + player.resetHp(); + player.resetMp(); + player.setStatus( Common::ActorStatus::Idle ); + } + } + } + + auto zoneInPacket = makeActorControlSelf( player.getId(), Appear, warpType, 0, 0, 0 ); + auto SetStatusPacket = makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ); + + if( !player.getGmInvis() ) + player.sendToInRangeSet( zoneInPacket ); + + player.sendToInRangeSet( SetStatusPacket, true ); + + auto& server = Common::Service< WorldServer >::ref(); + server.queueForPlayer( player.getCharacterId(), zoneInPacket ); + + player.unsetStateFlag( PlayerStateFlag::BetweenAreas ); } diff --git a/src/world/Network/Handlers/GMCommandHandlers.cpp b/src/world/Network/Handlers/GMCommandHandlers.cpp index 06817399..22af9d88 100644 --- a/src/world/Network/Handlers/GMCommandHandlers.cpp +++ b/src/world/Network/Handlers/GMCommandHandlers.cpp @@ -648,8 +648,6 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX targetPlayer->resetHp(); targetPlayer->resetMp(); targetPlayer->setStatus( Common::ActorStatus::Idle ); - targetPlayer->sendZoneInPackets( 0x01, true ); - targetPlayer->sendToInRangeSet( makeActorControlSelf( player.getId(), Appear, 0x01, 0x01, 0, 113 ), true ); targetPlayer->sendToInRangeSet( makeActorControl( player.getId(), SetStatus, diff --git a/src/world/Network/Handlers/PacketCommandHandler.cpp b/src/world/Network/Handlers/PacketCommandHandler.cpp index 0d843b4b..ba2a98f1 100644 --- a/src/world/Network/Handlers/PacketCommandHandler.cpp +++ b/src/world/Network/Handlers/PacketCommandHandler.cpp @@ -9,6 +9,7 @@ #include "Territory/Territory.h" #include "Manager/HousingMgr.h" +#include "Manager/WarpMgr.h" #include "Network/GameConnection.h" @@ -587,7 +588,8 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_ } case PacketCommand::FINISH_LOADING: // Finish zoning { - player.finishZoning(); + auto& warpMgr = Service< WarpMgr >::ref(); + warpMgr.finishWarp( player ); player.setLoadingComplete( true ); if( player.isLogin() ) player.setIsLogin( false );