mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-26 14:37:44 +00:00
Merge pull request #782 from Skyliegirl33/feature-impl
[3.x] Fix director events and incorrect msg IDs, improvements to EventLogMessage
This commit is contained in:
commit
175b0ab2d3
6 changed files with 154 additions and 55 deletions
|
@ -1452,6 +1452,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
uint8_t __padding2;
|
||||
uint8_t __padding3;
|
||||
uint32_t args[ArgCount];
|
||||
uint32_t unknown_1;
|
||||
};
|
||||
|
||||
struct FFXIVIpcEventLogMessageHeader :
|
||||
|
|
|
@ -213,7 +213,7 @@ public:
|
|||
{
|
||||
eobj.setState( 1 );
|
||||
instance.setCustomVar( ObtainedKey, true );
|
||||
instance.sendEventLogMessage( player, instance, 2031, { 34432 } );
|
||||
instance.sendEventLogMessage( player, instance, 2031, { 2000512 } );
|
||||
},
|
||||
nullptr, getId() );
|
||||
}
|
||||
|
@ -226,7 +226,7 @@ public:
|
|||
{
|
||||
eobj.setState( 1 );
|
||||
instance.setVar( 0, Seq4 );
|
||||
instance.sendEventLogMessage( player, instance, 2031, { 34433 } );
|
||||
instance.sendEventLogMessage( player, instance, 2031, { 2000513 } );
|
||||
denn = instance.createBNpcFromInstanceId( 3978771, 1000, Common::BNpcType::Enemy );
|
||||
},
|
||||
nullptr, getId() );
|
||||
|
|
|
@ -2,13 +2,12 @@
|
|||
|
||||
#include <Territory/InstanceContent.h>
|
||||
|
||||
#include <Network/PacketDef/ServerIpcs.h>
|
||||
#include <Network/PacketWrappers/EventLogMessagePacket.h>
|
||||
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
||||
#include <Network/CommonActorControl.h>
|
||||
|
||||
#include "Actor/Player.h"
|
||||
|
||||
#include "Network/PacketDef/Zone/ServerZoneDef.h"
|
||||
#include "Network/PacketWrappers/ActorControlPacket.h"
|
||||
#include "Network/PacketWrappers/ActorControlSelfPacket.h"
|
||||
#include <Logging/Logger.h>
|
||||
|
@ -20,7 +19,6 @@
|
|||
|
||||
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;
|
||||
|
||||
|
@ -49,67 +47,38 @@ 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
|
||||
void Sapphire::Event::Director::sendEventLogMessage( Sapphire::Entity::Player& player, Sapphire::InstanceContent& instance, uint32_t msgId, std::initializer_list< uint32_t > args ) const
|
||||
{
|
||||
FFXIVPacketBasePtr packet = nullptr;
|
||||
|
||||
assert( args.size() <= 32 );
|
||||
|
||||
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 );
|
||||
packet = std::move( std::make_shared< class EventLogMessageHeader >( player, instance.getDirectorId(), msgId ) );
|
||||
}
|
||||
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() ) )
|
||||
);
|
||||
packet = std::move( std::make_shared< class EventLogMessage2 >( player, instance.getDirectorId(), msgId, args ) );
|
||||
}
|
||||
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 );
|
||||
packet = std::move( std::make_shared< class EventLogMessage4 >( player, instance.getDirectorId(), msgId, args ) );
|
||||
}
|
||||
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 );
|
||||
packet = std::move( std::make_shared< class EventLogMessage8 >( player, instance.getDirectorId(), msgId, args ) );
|
||||
}
|
||||
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 );
|
||||
packet = std::move( std::make_shared< class EventLogMessage16 >( player, instance.getDirectorId(), msgId, args ) );
|
||||
}
|
||||
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 );
|
||||
packet = std::move( std::make_shared< class EventLogMessage32 >( player, instance.getDirectorId(), msgId, args ) );
|
||||
}
|
||||
|
||||
instance.queuePacketForZone( player, packet, true );
|
||||
}
|
||||
|
||||
void Sapphire::Event::Director::sendDirectorClear( Sapphire::Entity::Player& player ) const
|
||||
|
|
|
@ -77,7 +77,7 @@ 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 sendEventLogMessage( Sapphire::Entity::Player& player, Sapphire::InstanceContent& instance, uint32_t msgId, const std::initializer_list< uint32_t > args = {} ) const;
|
||||
|
||||
void sendDirectorClear( Entity::Player& player ) const;
|
||||
|
||||
|
|
128
src/world/Network/PacketWrappers/EventLogMessagePacket.h
Normal file
128
src/world/Network/PacketWrappers/EventLogMessagePacket.h
Normal file
|
@ -0,0 +1,128 @@
|
|||
#ifndef _EVENTLOGMESSAGE_H
|
||||
#define _EVENTLOGMESSAGE_H
|
||||
|
||||
#include <Network/GamePacket.h>
|
||||
#include <Network/PacketDef/Zone/ServerZoneDef.h>
|
||||
#include <Actor/Player.h>
|
||||
#include "Forwards.h"
|
||||
|
||||
namespace Sapphire::Network::Packets::WorldPackets::Server
|
||||
{
|
||||
|
||||
/**
|
||||
* @brief The packet sent for event log messages.
|
||||
*/
|
||||
class EventLogMessageHeader : public ZoneChannelPacket< FFXIVIpcEventLogMessageHeader >
|
||||
{
|
||||
public:
|
||||
EventLogMessageHeader( const Entity::Player& player,
|
||||
uint32_t directorId,
|
||||
uint32_t msgId ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessageHeader >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player,
|
||||
uint32_t directorId,
|
||||
uint32_t msgId )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = 0;
|
||||
};
|
||||
};
|
||||
class EventLogMessage2 : public ZoneChannelPacket< FFXIVIpcEventLogMessage2 >
|
||||
{
|
||||
public:
|
||||
EventLogMessage2( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessage2 >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId, args );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
class EventLogMessage4 : public ZoneChannelPacket< FFXIVIpcEventLogMessage4 >
|
||||
{
|
||||
public:
|
||||
EventLogMessage4( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessage4 >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId, args );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
class EventLogMessage8 : public ZoneChannelPacket< FFXIVIpcEventLogMessage8 >
|
||||
{
|
||||
public:
|
||||
EventLogMessage8( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessage8 >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId, args );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
class EventLogMessage16 : public ZoneChannelPacket< FFXIVIpcEventLogMessage16 >
|
||||
{
|
||||
public:
|
||||
EventLogMessage16( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessage16 >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId, args );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
class EventLogMessage32 : public ZoneChannelPacket< FFXIVIpcEventLogMessage32 >
|
||||
{
|
||||
public:
|
||||
EventLogMessage32( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args ) :
|
||||
ZoneChannelPacket< FFXIVIpcEventLogMessage32 >( player.getId() )
|
||||
{
|
||||
initialize( player, directorId, msgId, args );
|
||||
};
|
||||
|
||||
private:
|
||||
void initialize( const Entity::Player& player, uint32_t directorId, uint32_t msgId, const std::initializer_list< uint32_t > args )
|
||||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
#endif /*_EVENTLOGMESSAGE_H*/
|
|
@ -40,17 +40,18 @@ namespace Sapphire
|
|||
DutyCommence = 0x40000001,
|
||||
DutyComplete = 0x40000002,
|
||||
SetStringendoMode = 0x40000003,
|
||||
BattleGroundMusic = 0x40000004,
|
||||
InvalidateTodoList = 0x40000005,
|
||||
LoadingScreen = 0x40000007,
|
||||
Forward = 0x40000008,
|
||||
SetDutyTime = 0x40000004,
|
||||
LoadingScreen = 0x40000005,
|
||||
Forward = 0x40000006,
|
||||
BattleGroundMusic = 0x40000007,
|
||||
InvalidateTodoList = 0x40000008,
|
||||
VoteState = 0x40000009,
|
||||
VoteStart = 0x4000000A,
|
||||
VoteResult = 0x4000000B,
|
||||
VoteFinish = 0x4000000C,
|
||||
TreasureVoteRefresh = 0x4000000D,
|
||||
SetSharedGroupId = 0x4000000E,
|
||||
FirstTimeNotify = 0x4000000F
|
||||
FirstTimeNotify = 0x4000000D,
|
||||
TreasureVoteRefresh = 0x4000000E,
|
||||
SetSharedGroupId = 0x4000000F,
|
||||
};
|
||||
|
||||
enum EventHandlerOrderId : uint32_t
|
||||
|
|
Loading…
Add table
Reference in a new issue