diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 829658ba..28fe961e 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -291,11 +291,13 @@ namespace Core::Network::Packets OutOfRangeEventHandler = 0x014E, // updated 4.4 EnterTeriEventHandler = 0x014F, // updated 4.4 + ShopEventHandler = 0x0151, // updated 4.4 + ReturnEventHandler = 0x0154, // updated 4.4 TradeReturnEventHandler = 0x0155, // updated 4.4 - LinkshellEventHandler = 0x0150, // updated 4.1 ?? - LinkshellEventHandler1 = 0x0151, // updated 4.1 ?? + LinkshellEventHandler = 0x1150, // updated 4.1 ?? + LinkshellEventHandler1 = 0x1151, // updated 4.1 ?? LandRenameHandler = 0x0171, // updated 4.4 diff --git a/src/common/Network/PacketDef/Zone/ClientZoneDef.h b/src/common/Network/PacketDef/Zone/ClientZoneDef.h index 7dae9236..88e6134e 100644 --- a/src/common/Network/PacketDef/Zone/ClientZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ClientZoneDef.h @@ -163,6 +163,13 @@ struct FFXIVIpcChatHandler : /* 001A */ char message[1012]; }; +struct FFXIVIpcShopEventHandler : + FFXIVIpcBasePacket< ShopEventHandler > +{ + /* 0000 */ uint32_t eventId; + /* 0004 */ uint32_t param; +}; + struct FFXIVIpcLinkshellEventHandler : FFXIVIpcBasePacket< LinkshellEventHandler > { diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 9d33124c..80d8210d 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -158,7 +158,7 @@ void Core::Entity::Player::playGilShop( uint32_t eventId, uint32_t flags, Core::Event::EventHandlerPtr Core::Entity::Player::bootstrapSceneEvent( uint32_t eventId, uint32_t flags ) { - + auto pEvent = getEvent( eventId ); if( !pEvent ) { diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index a358bc93..cb960315 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -98,8 +98,12 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive, setZoneHandler( ClientZoneIpcType::TradeReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandlerReturn ); + setZoneHandler( ClientZoneIpcType::ShopEventHandler, "ShopEventHandler", + &GameConnection::eventHandlerShop ); + setZoneHandler( ClientZoneIpcType::LinkshellEventHandler, "LinkshellEventHandler", &GameConnection::eventHandlerLinkshell ); + setZoneHandler( ClientZoneIpcType::LinkshellEventHandler1, "LinkshellEventHandler1", &GameConnection::eventHandlerLinkshell ); diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index 8ba31549..529bba6b 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -139,6 +139,8 @@ namespace Core::Network DECLARE_HANDLER( eventHandlerReturn ); + DECLARE_HANDLER( eventHandlerShop ); + DECLARE_HANDLER( eventHandlerLinkshell ); DECLARE_HANDLER( logoutHandler ); diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index 1fd26f15..985d8ea1 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -251,4 +252,30 @@ void Core::Network::GameConnection::eventHandlerLinkshell( const Packets::FFXIVA } +void Core::Network::GameConnection::eventHandlerShop( const Packets::FFXIVARR_PACKET_RAW& inPacket, + Entity::Player& player ) +{ + const auto packet = ZoneChannelPacket< Client::FFXIVIpcShopEventHandler >( inPacket ); + + auto pLog = g_fw.get< Logger >(); + auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >(); + auto pExdData = g_fw.get< Data::ExdDataGenerated >(); + + const auto eventId = packet.data().eventId; + + auto eventType = static_cast< uint16_t >( eventId >> 16 ); + + std::string eventName = "onShop"; + std::string objName = Event::getEventName( eventId ); + + player.sendDebug( "EventId: " + + std::to_string( eventId ) + + " (0x" + Util::intToHexString( static_cast< uint64_t >( eventId & 0xFFFFFFF ), 8 ) + ")" ); + + + player.sendDebug( "Calling: " + objName + "." + eventName ); + player.eventStart( 0, eventId, Event::EventHandler::UI, 0, 0 ); +} + +