diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index dfa5178d..5b11f421 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -64,6 +64,7 @@ enum ServerZoneIpcType : /////////////////////////////////////////////////// ChatBanned = 0x006B, + Playtime = 0x006C, // updated 4.4 Logout = 0x0077, // updated 4.4 CFNotify = 0x0078, CFMemberStatus = 0x0079, @@ -78,7 +79,6 @@ enum ServerZoneIpcType : - Playtime = 0x00F5, // updated 4.3 Chat = 0x00F4, // updated 4.4 SocialList = 0x00FB, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index c5552526..f973bfa7 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -15,16 +15,22 @@ struct FFXIVIpcGmCommand1 : /* 0000 */ uint32_t commandId; /* 0004 */ uint32_t param1; /* 0008 */ uint32_t param2; - /* 000C */ uint8_t unknown_C[0xC]; - /* 0018 */ uint32_t param3; + /* 000C */ uint32_t param3; + /* 0010 */ uint32_t param4; + /* 0014 */ uint32_t unknown1; + /* 0018 */ uint32_t target; }; struct FFXIVIpcGmCommand2 : FFXIVIpcBasePacket< GMCommand2 > { /* 0000 */ uint32_t commandId; - /* 0004 */ char unk_4[0x10]; - /* 0014 */ char param1[0x20]; + /* 0004 */ uint32_t param1; + /* 0008 */ uint32_t param2; + /* 000C */ uint32_t param3; + /* 0010 */ uint32_t param4; + /* 0014 */ char target[0x20]; + /* 0034 */ uint32_t unknown1; }; struct FFXIVIpcClientTrigger : diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 9b15a373..601d2367 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -99,16 +99,19 @@ void Core::Network::GameConnection::gm1Handler( const Packets::FFXIVARR_PACKET_R const auto& param1 = packet.data().param1; const auto& param2 = packet.data().param2; const auto& param3 = packet.data().param3; + const auto& param4 = packet.data().param4; + const auto& target = packet.data().target; auto pLog = g_fw.get< Logger >(); pLog->debug( player.getName() + " used GM1 commandId: " + std::to_string( commandId ) + ", params: " + std::to_string( param1 ) + ", " + - std::to_string( param2 ) + ", " + std::to_string( param3 ) ); + std::to_string( param2 ) + ", " + std::to_string( param3 ) + ", " + std::to_string( param4 ) + + ", target: " + std::to_string( target ) ); Core::Entity::ActorPtr targetActor; - if( player.getId() == param3 ) + if( player.getId() == target ) { targetActor = player.getAsPlayer(); } @@ -117,7 +120,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::FFXIVARR_PACKET_R auto inRange = player.getInRangeActors(); for( auto& actor : inRange ) { - if( actor->getId() == param3 ) + if( actor->getId() == target ) targetActor = actor; } } @@ -540,11 +543,18 @@ void Core::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACKET_R const auto packet = ZoneChannelPacket< Client::FFXIVIpcGmCommand2 >( inPacket ); const auto& commandId = packet.data().commandId; - const auto& param1 = std::string( packet.data().param1 ); + const auto& param1 = packet.data().param1; + const auto& param2 = packet.data().param2; + const auto& param3 = packet.data().param3; + const auto& param4 = packet.data().param4; + const auto& target = std::string( packet.data().target ); - pLog->debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 ); + pLog->debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + + ", params: " + std::to_string( param1 ) + ", " + + std::to_string( param2 ) + ", " + std::to_string( param3 ) + ", " + std::to_string( param4 ) + + ", target: " + target ); - auto targetSession = pServerZone->getSession( param1 ); + auto targetSession = pServerZone->getSession( target ); Core::Entity::CharaPtr targetActor; if( targetSession != nullptr ) @@ -553,13 +563,13 @@ void Core::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACKET_R } else { - if( param1 == "self" ) + if( target == "self" ) { targetActor = player.getAsPlayer(); } else { - player.sendUrgent( "Player " + param1 + " not found on this server." ); + player.sendUrgent( "Player " + target + " not found on this server." ); return; } }