From ff88c136b2e8590f6a2a0a72254ffc75257721ef Mon Sep 17 00:00:00 2001 From: Rushi <44952533+Skyliegirl33@users.noreply.github.com> Date: Wed, 16 Feb 2022 05:29:08 +0100 Subject: [PATCH] Add sendEventLogMessage to director --- src/world/Event/Director.cpp | 67 ++++++++++++++++++++++++++++++++++++ src/world/Event/Director.h | 2 ++ 2 files changed, 69 insertions(+) diff --git a/src/world/Event/Director.cpp b/src/world/Event/Director.cpp index 24fc89d3..07906b01 100644 --- a/src/world/Event/Director.cpp +++ b/src/world/Event/Director.cpp @@ -1,11 +1,14 @@ #include "Director.h" +#include + #include #include #include #include "Actor/Player.h" +#include "Network/PacketDef/Zone/ServerZoneDef.h" #include "Network/PacketWrappers/ActorControlPacket.h" #include "Network/PacketWrappers/ActorControlSelfPacket.h" #include @@ -17,6 +20,7 @@ using namespace Sapphire::Common; using namespace Sapphire::Network::Packets; +using namespace Sapphire::Network::Packets::WorldPackets; using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::ActorControl; @@ -45,6 +49,69 @@ uint8_t Sapphire::Event::Director::getSequence() const return m_sequence; } +void Sapphire::Event::Director::sendEventLogMessage( Sapphire::Entity::Player& player, Sapphire::InstanceContent& instance, uint32_t msgId, std::vector< uint32_t > args ) const +{ + if( args.size() == 0 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessageHeader >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + instance.queuePacketForZone( player, packet, true ); + } + else if( args.size() <= 2 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessage2 >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + std::copy( args.begin(), args.end(), packet->data().args ); + instance.queuePacketForZone( player, packet, true ); + Logger::debug( "arg size: {}", packet->data().numOfArgs ); + Logger::debug( + "Dump:\n{0}", + Util::binaryToHexDump( const_cast< uint8_t* >( &packet->getContent()[ 0 ] ), + static_cast< uint16_t >( packet->getContentSize() ) ) + ); + } + else if( args.size() <= 4 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessage4 >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + std::copy( args.begin(), args.end(), packet->data().args ); + instance.queuePacketForZone( player, packet, true ); + } + else if( args.size() <= 8 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessage8 >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + std::copy( args.begin(), args.end(), packet->data().args ); + instance.queuePacketForZone( player, packet, true ); + } + else if( args.size() <= 16 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessage16 >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + std::copy( args.begin(), args.end(), packet->data().args ); + instance.queuePacketForZone( player, packet, true ); + } + else if( args.size() <= 32 ) + { + auto packet = makeZonePacket< Server::FFXIVIpcEventLogMessage32 >( player.getId() ); + packet->data().handlerId = instance.getDirectorId(); + packet->data().messageId = msgId; + packet->data().numOfArgs = args.size(); + std::copy( args.begin(), args.end(), packet->data().args ); + instance.queuePacketForZone( player, packet, true ); + } +} + void Sapphire::Event::Director::sendDirectorClear( Sapphire::Entity::Player& player ) const { auto& server = Common::Service< World::WorldServer >::ref(); diff --git a/src/world/Event/Director.h b/src/world/Event/Director.h index 9664c72b..9665ff25 100644 --- a/src/world/Event/Director.h +++ b/src/world/Event/Director.h @@ -77,6 +77,8 @@ namespace Sapphire::Event void sendDirectorInit( Entity::Player& player ) const; + void sendEventLogMessage( Sapphire::Entity::Player& player, Sapphire::InstanceContent& instance, uint32_t msgId, const std::vector< uint32_t > args = {} ) const; + void sendDirectorClear( Entity::Player& player ) const; void sendDirectorVars( Entity::Player& player ) const;