From ef87b9b36dd065e6c33695c06ce395f61c5da4ba Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Tue, 25 Sep 2018 01:11:14 +1000 Subject: [PATCH 1/2] Examine works correctly again / Handles errors for GM's and diff zones --- src/common/Network/CommonActorControl.h | 2 ++ .../Network/Handlers/ClientTriggerHandler.cpp | 9 ++++++++- .../Network/Handlers/PacketHandlers.cpp | 4 ++++ .../Network/PacketWrappers/ExaminePacket.h | 20 +++++++++---------- 4 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/common/Network/CommonActorControl.h b/src/common/Network/CommonActorControl.h index acb94a39..8dc22704 100644 --- a/src/common/Network/CommonActorControl.h +++ b/src/common/Network/CommonActorControl.h @@ -200,6 +200,8 @@ enum ActorControlType : SetCharaGearParamUI = 0x260, ToggleWireframeRendering = 0x261, + ExamineError = 0x2BF, + GearSetEquipMsg = 0x321, SetFestival = 0x386, // param1: festival.exd index diff --git a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp index 374a6d64..9dbf9b60 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ClientTriggerHandler.cpp @@ -53,7 +53,14 @@ void examineHandler( Core::Entity::Player& player, uint32_t targetId ) auto pTarget = pSession->getPlayer(); if( pTarget ) { - player.queuePacket( boost::make_shared< ExaminePacket >( player, pTarget ) ); + if( pTarget->isActingAsGm() || pTarget->getZoneId() != player.getZoneId() ) + { + player.queuePacket( makeActorControl142( player.getId(), ActorControlType::ExamineError ) ); + } + else + { + player.queuePacket( boost::make_shared< ExaminePacket >( player, pTarget ) ); + } } } } diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 798e3d9a..6c95f65a 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -120,6 +120,8 @@ void Core::Network::GameConnection::reqExamineSearchCommentHandler( const Core:: if( pPlayer ) { + if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) return; + // retail sends the requester's id as both (isForSelf) auto searchInfoPacket = makeZonePacket< FFXIVIpcExamineSearchComment >( player.getId() ); searchInfoPacket->data().charId = targetId; @@ -144,6 +146,8 @@ void Core::Network::GameConnection::reqExamineFcInfo( const Core::Network::Packe if( pPlayer ) { + if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) return; + // retail sends the requester's id as both (isForSelf) auto examineFcInfoPacket = makeZonePacket< FFXIVIpcExamineFreeCompanyInfo >( player.getId() ); examineFcInfoPacket->data().charId = targetId; diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/ExaminePacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/ExaminePacket.h index 0907aa87..d60bda96 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/ExaminePacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/ExaminePacket.h @@ -50,16 +50,16 @@ private: memcpy( m_data.look, pTarget->getLookArray(), sizeof( m_data.look ) ); - m_data.models[ Common::GearModelSlot::ModelHead ] = player.getModelForSlot( Common::GearModelSlot::ModelHead ); - m_data.models[ Common::GearModelSlot::ModelBody ] = player.getModelForSlot( Common::GearModelSlot::ModelBody ); - m_data.models[ Common::GearModelSlot::ModelHands ] = player.getModelForSlot( Common::GearModelSlot::ModelHands ); - m_data.models[ Common::GearModelSlot::ModelLegs ] = player.getModelForSlot( Common::GearModelSlot::ModelLegs ); - m_data.models[ Common::GearModelSlot::ModelFeet ] = player.getModelForSlot( Common::GearModelSlot::ModelFeet ); - m_data.models[ Common::GearModelSlot::ModelNeck ] = player.getModelForSlot( Common::GearModelSlot::ModelNeck ); - m_data.models[ Common::GearModelSlot::ModelEar ] = player.getModelForSlot( Common::GearModelSlot::ModelEar ); - m_data.models[ Common::GearModelSlot::ModelRing1 ] = player.getModelForSlot( Common::GearModelSlot::ModelRing1 ); - m_data.models[ Common::GearModelSlot::ModelRing2 ] = player.getModelForSlot( Common::GearModelSlot::ModelRing2 ); - m_data.models[ Common::GearModelSlot::ModelWrist ] = player.getModelForSlot( Common::GearModelSlot::ModelWrist ); + m_data.models[ Common::GearModelSlot::ModelHead ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelHead ); + m_data.models[ Common::GearModelSlot::ModelBody ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelBody ); + m_data.models[ Common::GearModelSlot::ModelHands ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelHands ); + m_data.models[ Common::GearModelSlot::ModelLegs ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelLegs ); + m_data.models[ Common::GearModelSlot::ModelFeet ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelFeet ); + m_data.models[ Common::GearModelSlot::ModelNeck ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelNeck ); + m_data.models[ Common::GearModelSlot::ModelEar ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelEar ); + m_data.models[ Common::GearModelSlot::ModelRing1 ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelRing1 ); + m_data.models[ Common::GearModelSlot::ModelRing2 ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelRing2 ); + m_data.models[ Common::GearModelSlot::ModelWrist ] = pTarget->getModelForSlot( Common::GearModelSlot::ModelWrist ); // todo: main/sub/other stuff too From 30a47d3494006e03446c85a3cb8182a0c96d4f07 Mon Sep 17 00:00:00 2001 From: Biscuit Boy Date: Tue, 25 Sep 2018 01:24:50 +1000 Subject: [PATCH 2/2] style --- .../sapphire_zone/Network/Handlers/PacketHandlers.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 6c95f65a..877298c4 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -120,7 +120,8 @@ void Core::Network::GameConnection::reqExamineSearchCommentHandler( const Core:: if( pPlayer ) { - if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) return; + if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) + return; // retail sends the requester's id as both (isForSelf) auto searchInfoPacket = makeZonePacket< FFXIVIpcExamineSearchComment >( player.getId() ); @@ -146,7 +147,8 @@ void Core::Network::GameConnection::reqExamineFcInfo( const Core::Network::Packe if( pPlayer ) { - if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) return; + if( pPlayer->isActingAsGm() || pPlayer->getZoneId() != player.getZoneId() ) + return; // retail sends the requester's id as both (isForSelf) auto examineFcInfoPacket = makeZonePacket< FFXIVIpcExamineFreeCompanyInfo >( player.getId() );