From 51b5d1999f4981d9b0da45ae37e471652a30a663 Mon Sep 17 00:00:00 2001 From: Mordred Date: Mon, 13 Dec 2021 00:44:42 +0100 Subject: [PATCH] Added yield event handlers --- src/world/Network/GameConnection.cpp | 10 ++ src/world/Network/GameConnection.h | 10 ++ src/world/Network/Handlers/EventHandlers.cpp | 108 +++++++++++++++++++ 3 files changed, 128 insertions(+) diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index 631bb5c4..c3c3c0ba 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -112,6 +112,16 @@ Sapphire::Network::GameConnection::GameConnection( Sapphire::Network::HivePtr pH setZoneHandler( ReturnEventScene128, "ReturnEventScene128", &GameConnection::returnEventScene128 ); setZoneHandler( ReturnEventScene255, "ReturnEventScene255", &GameConnection::returnEventScene255 ); + setZoneHandler( YieldEventSceneHeader, "YieldEventSceneHeader", &GameConnection::yieldEventSceneHeader ); + setZoneHandler( YieldEventScene2, "YieldEventScene2", &GameConnection::yieldEventScene2 ); + setZoneHandler( YieldEventScene4, "YieldEventScene4", &GameConnection::yieldEventScene4 ); + setZoneHandler( YieldEventScene8, "YieldEventScene8", &GameConnection::yieldEventScene8 ); + setZoneHandler( YieldEventScene16, "YieldEventScene16", &GameConnection::yieldEventScene16 ); + setZoneHandler( YieldEventScene32, "YieldEventScene32", &GameConnection::yieldEventScene32 ); + setZoneHandler( YieldEventScene64, "YieldEventScene64", &GameConnection::yieldEventScene64 ); + setZoneHandler( YieldEventScene128, "YieldEventScene128", &GameConnection::yieldEventScene128 ); + setZoneHandler( YieldEventScene255, "YieldEventScene255", &GameConnection::yieldEventScene255 ); + setZoneHandler( StartUIEvent, "StartUIEvent", &GameConnection::startUiEvent ); setZoneHandler( YieldEventSceneString8, "YieldEventSceneString8", &GameConnection::yieldEventString ); diff --git a/src/world/Network/GameConnection.h b/src/world/Network/GameConnection.h index cea4bfc7..e6b68cee 100644 --- a/src/world/Network/GameConnection.h +++ b/src/world/Network/GameConnection.h @@ -163,6 +163,16 @@ namespace Sapphire::Network DECLARE_HANDLER( returnEventScene128 ); DECLARE_HANDLER( returnEventScene255 ); + DECLARE_HANDLER( yieldEventSceneHeader ); + DECLARE_HANDLER( yieldEventScene2 ); + DECLARE_HANDLER( yieldEventScene4 ); + DECLARE_HANDLER( yieldEventScene8 ); + DECLARE_HANDLER( yieldEventScene16 ); + DECLARE_HANDLER( yieldEventScene32 ); + DECLARE_HANDLER( yieldEventScene64 ); + DECLARE_HANDLER( yieldEventScene128 ); + DECLARE_HANDLER( yieldEventScene255 ); + DECLARE_HANDLER( startUiEvent ); DECLARE_HANDLER( yieldEventString ); diff --git a/src/world/Network/Handlers/EventHandlers.cpp b/src/world/Network/Handlers/EventHandlers.cpp index 3fd7d7d6..b52d1e86 100644 --- a/src/world/Network/Handlers/EventHandlers.cpp +++ b/src/world/Network/Handlers/EventHandlers.cpp @@ -287,6 +287,114 @@ void Sapphire::Network::GameConnection::returnEventScene255( const Packets::FFXI eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.errorCode, data.numOfResults, results ); } +void Sapphire::Network::GameConnection::yieldEventSceneHeader( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventSceneHeader >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene2( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene2 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene4( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene4 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene8( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene8 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene16( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene16 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene32( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene32 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene64( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene64 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene128( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene128 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + +void Sapphire::Network::GameConnection::yieldEventScene255( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) +{ + auto& eventMgr = Common::Service< World::Manager::EventMgr >::ref(); + + const auto packet = ZoneChannelPacket< FFXIVIpcYieldEventScene255 >( inPacket ); + const auto& data = packet.data(); + + std::vector< uint32_t > results( std::begin( data.results ), std::end( data.results ) ); + + eventMgr.handleReturnEventScene( player, data.handlerId, data.sceneId, data.yieldId, data.numOfResults, results ); +} + void Sapphire::Network::GameConnection::yieldEventString( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) { auto& server = Common::Service< World::WorldServer >::ref();