1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-27 22:57:45 +00:00

Merge branch 'upstream/master'

This commit is contained in:
NotAdam 2018-06-10 11:37:39 +00:00
commit 11de5be42d
7 changed files with 317 additions and 324 deletions

View file

@ -553,6 +553,7 @@ namespace Common {
AetherReductionDlg = 0x17D,
Unk6 = 0x19C,
EObjAnimation = 0x19D,
SetTitle = 0x1F4,
@ -562,6 +563,7 @@ namespace Common {
SetFavorite = 0x1FC,
LearnTeleport = 0x1FD,
OpenRecommendationGuide = 0x200,
ArmoryErrorMsg = 0x201,
AchievementPopup = 0x203,

View file

@ -7,16 +7,17 @@
#include <boost/format.hpp>
#include "Util/Util.h"
Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size, uint32_t id1, uint32_t id2, uint16_t type )
Core::Network::Packets::GamePacket::GamePacket( uint16_t subType, uint16_t size,
uint32_t id1, uint32_t id2, uint16_t type )
{
m_dataBuf = std::vector< uint8_t >( size );
memset( &m_segHdr, 0, sizeof( m_segHdr ) );
setHeader( size, type, id1, id2, subType, 0x00 );
}
void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1, uint32_t id2, uint16_t subType, uint32_t unknown )
void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type, uint32_t id1,
uint32_t id2, uint16_t subType, uint32_t unknown )
{
m_segHdr.size = size;
@ -67,7 +68,10 @@ Core::Network::Packets::GamePacket::GamePacket( const Packets::FFXIVARR_PACKET_R
m_segHdr = packetData.segHdr;
m_dataBuf = std::vector< uint8_t >( m_segHdr.size );
memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ), &packetData.data[0], m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
memcpy( &m_dataBuf[0] + sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ),
&packetData.data[0],
m_segHdr.size - sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
memcpy( &m_dataBuf[0], &m_segHdr, sizeof( Packets::FFXIVARR_PACKET_SEGMENT_HEADER ) );
m_subType = *reinterpret_cast< uint16_t* >( &m_dataBuf[0] + 0x12 );

View file

@ -32,15 +32,15 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >;
* The base implementation of a game packet. Needed for parsing packets.
*/
template < typename T1 >
class FFXIVPacketBase
class FFXIVIpcPacketBase
{
public:
virtual ~FFXIVPacketBase() = default;
virtual ~FFXIVIpcPacketBase() = default;
/**
* @brief Gets the IPC type of this packet. (Useful for determining the
* type of a parsed packet.)
*/
virtual T1 ipcType( void ) = 0;
virtual T1 ipcType() = 0;
};
/**
@ -50,7 +50,7 @@ public:
* 32 byte header information.)
*/
template < typename T, typename T1 >
class GamePacketNew : public FFXIVPacketBase< T1 >
class GamePacketNew : public FFXIVIpcPacketBase< T1 >
{
public:
/**
@ -96,7 +96,7 @@ protected:
};
public:
virtual T1 ipcType( void )
virtual T1 ipcType()
{
return static_cast< T1 >( m_data._ServerIpcType );
};

View file

@ -5,13 +5,7 @@
using namespace Core::Network::Packets;
namespace Core
{
namespace Network
{
namespace Packets
{
PacketParseResult getHeader( const std::vector< uint8_t > &buffer,
PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t > &buffer,
const uint32_t offset,
FFXIVARR_PACKET_HEADER &header )
{
@ -31,7 +25,7 @@ namespace Core
return Success;
}
PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer,
PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t > &buffer,
const uint32_t offset,
FFXIVARR_PACKET_SEGMENT_HEADER &header )
{
@ -48,7 +42,7 @@ namespace Core
return Success;
}
PacketParseResult getPackets( const std::vector< uint8_t > &buffer,
PacketParseResult Core::Network::Packets::getPackets( const std::vector< uint8_t > &buffer,
const uint32_t offset,
const FFXIVARR_PACKET_HEADER &packetHeader,
std::vector< FFXIVARR_PACKET_RAW > &packets )
@ -87,7 +81,7 @@ namespace Core
return Success;
}
PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset,
PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset,
FFXIVARR_PACKET_RAW &packet )
{
// Copy segment header
@ -109,7 +103,7 @@ namespace Core
return Success;
}
bool checkHeader( const FFXIVARR_PACKET_HEADER &header )
bool Core::Network::Packets::checkHeader( const FFXIVARR_PACKET_HEADER &header )
{
// Max size of the packet is capped at 1MB for now.
if( header.size > 1 * 1024 * 1024 )
@ -122,7 +116,7 @@ namespace Core
return true;
}
bool checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header )
bool Core::Network::Packets::checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header )
{
// Max size of individual message is capped at 256KB for now.
if( header.size > 256 * 1024 )
@ -130,6 +124,3 @@ namespace Core
return true;
}
}
}
}

View file

@ -2,12 +2,10 @@
#define _GAMEPACKETPARSER_H
#include "CommonNetwork.h"
namespace Core
{
namespace Network
{
namespace Packets
{
namespace Core {
namespace Network {
namespace Packets {
enum PacketParseResult
{
/// Dissected game packet successfully
@ -22,36 +20,25 @@ namespace Core
/// Read packet header from buffer with given offset.
/// Buffer with given offset must be pointing to start of the new FFXIV packet.
PacketParseResult getHeader(
const std::vector< uint8_t > &buffer,
const uint32_t offset,
FFXIVARR_PACKET_HEADER &header
);
PacketParseResult getHeader( const std::vector< uint8_t > &buffer, const uint32_t offset,
FFXIVARR_PACKET_HEADER &header );
/// Read packet header from buffer with given offset.
/// Buffer with given offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
/// Keep in mind that this function does check for data validity. Call checkSegmentHeader() if that's needed.
PacketParseResult getSegmentHeader(
const std::vector< uint8_t > &buffer,
const uint32_t offset,
FFXIVARR_PACKET_SEGMENT_HEADER &header
);
PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, const uint32_t offset,
FFXIVARR_PACKET_SEGMENT_HEADER &header );
/// Read packets from the buffer with given offset.
/// Buffer with given offset must be pointing to end of FFXIVARR_PACKET_HEADER data.
PacketParseResult getPackets(
const std::vector< uint8_t > &buffer,
const uint32_t offset,
PacketParseResult getPackets( const std::vector< uint8_t > &buffer, const uint32_t offset,
const FFXIVARR_PACKET_HEADER &header,
std::vector< Packets::FFXIVARR_PACKET_RAW > &packets );
/// Read single packet from the buffer with given offset.
/// Buffer with an offset must be pointing to start of FFXIVARR_PACKET_SEGMENT_HEADER data.
PacketParseResult getPacket(
const std::vector< uint8_t > &buffer,
const uint32_t offset,
FFXIVARR_PACKET_RAW &packet
);
PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset,
FFXIVARR_PACKET_RAW &packet );
bool checkHeader(const FFXIVARR_PACKET_HEADER &header);
bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header);

View file

@ -107,11 +107,14 @@ namespace Packets {
ActorCast = 0x0178, // updated 4.3
PartyList = 0x017A, // updated 4.3
HateList = 0x017B, // updated 4.3
ObjectSpawn = 0x017D, // updated 4.3
ObjectDespawn = 0x017E, // updated 4.3
SetLevelSync = 0x017F, // updated 4.3
InventoryActionAck = 0x0180, // updated 4.2 ?
InitUI = 0x0181, // updated 4.3

View file

@ -612,146 +612,152 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket<InitUI>
// plain C types for a bit until the packet is actually fixed.
// makes conversion between different editors easier.
uint64_t contentId;
uint32_t unknown8;
uint32_t unknownC;
uint32_t charId;
uint32_t restedExp;
uint32_t companionCurrentExp;
uint32_t unknown3C;
uint32_t fishCaught;
uint32_t useBaitCatalogId;
uint32_t pvpWolfFoldMatches;
uint16_t pvpWolfFoldWeeklyMatches;
uint16_t pvpWolfFoldWeeklyVictories;
uint16_t pvpStats[6];
uint16_t playerCommendations;
uint16_t pvpStats1;
uint16_t frontlineCampaigns[4];
uint16_t frontlineCampaignsWeekly;
uint16_t currentRelic;
uint16_t currentBook;
uint16_t masterCrafterMask;
uint16_t unknown69;
uint16_t unknown6A;
uint16_t unknown6B;
uint16_t unknown6C[4];
uint16_t unknown50[34];
uint16_t unknown18;
uint16_t maxLevel;
uint16_t expansion;
uint16_t unknown76;
uint16_t race;
uint16_t tribe;
uint16_t gender;
uint16_t currentJob;
uint16_t currentClass;
uint16_t deity;
uint16_t namedayMonth;
uint16_t namedayDay;
uint16_t cityState;
uint16_t homepoint;
uint16_t unknown26;
uint16_t petHotBar;
uint16_t companionRank;
uint16_t companionStars;
uint16_t companionSp;
uint16_t companionUnk2B;
uint16_t companionColor;
uint16_t companionFavoFeed;
uint16_t companionUnk89;
uint16_t companionUnk90[5];
uint16_t unknown90[7];
uint16_t unknown9E;
uint16_t unknownA0;
uint32_t exp[25];
uint16_t unknown564[16];
uint32_t pvpFrontlineOverall1st;
uint32_t pvpFrontlineOverall2nd;
uint32_t pvpFrontlineOverall3rd;
uint16_t relicBookCompletion1[4];
uint16_t levels[25];
uint16_t levelsPadding;
uint16_t unknown15C[8];
uint16_t fishingRecordsFish[26];
uint16_t fishingRecordsFishWeight[26];
uint16_t unknownMask554[44];
uint16_t companion_name[21];
uint16_t companionDefRank;
uint16_t companionAttRank;
uint16_t companionHealRank;
uint16_t mountGuideMask[16];
unsigned int unknown8;
unsigned int unknownC;
unsigned int charId;
unsigned int restedExp;
unsigned int companionCurrentExp;
unsigned int unknown3C;
unsigned int fishCaught;
unsigned int useBaitCatalogId;
unsigned int pvpWolfFoldMatches;
unsigned short pvpWolfFoldWeeklyMatches;
unsigned short pvpWolfFoldWeeklyVictories;
unsigned short pvpStats[6];
unsigned short playerCommendations;
unsigned short pvpStats1;
unsigned char frontlineCampaigns[4];
unsigned short frontlineCampaignsWeekly;
unsigned char currentRelic;
unsigned char currentBook;
unsigned char masterCrafterMask;
unsigned char unknown69;
unsigned char unknown6A;
unsigned char unknown6B;
unsigned char unknown6C[4];
unsigned char unknown70[34];
unsigned short unknown18;
unsigned char maxLevel;
unsigned char expansion;
unsigned char unknown;
unsigned char race;
unsigned char tribe;
unsigned char gender;
unsigned char currentJob;
unsigned char currentClass;
unsigned char deity;
unsigned char namedayMonth;
unsigned char namedayDay;
unsigned char cityState;
unsigned char homepoint;
unsigned char unknown26;
unsigned char petHotBar;
unsigned char companionRank;
unsigned char companionStars;
unsigned char companionSp;
unsigned char companionUnk2B;
unsigned char companionColor;
unsigned char companionFavoFeed;
unsigned char companionUnk2E;
unsigned char companionTimePassed[4];
unsigned short unknown38[11];
unsigned int exp[25];
unsigned char unknown564[16];
unsigned int pvpFrontlineOverall1st;
unsigned int pvpFrontlineOverall2nd;
unsigned int pvpFrontlineOverall3rd;
unsigned char relicBookCompletion1[4];
unsigned short levels[25];
unsigned short levelsPadding;
unsigned char unknown__[16];
unsigned short fishingRecordsFish[26];
unsigned short fishingRecordsFishWeight[26];
unsigned char unknownMask554[44];
unsigned char companion_name[21];
unsigned char companionDefRank;
unsigned char companionAttRank;
unsigned char companionHealRank;
unsigned char mountGuideMask[16];
char name[32];
uint16_t unknownOword[16];
uint16_t unknown258;
uint16_t unlockBitmask[64];
uint16_t aetheryte[17];
uint16_t discovery[421];
uint16_t howto[33];
uint16_t minions[38];
uint16_t chocoboTaxiMask[8];
uint16_t contentClearMask[111];
uint16_t contentClearPadding;
uint16_t unknown428[8];
uint16_t companionBardingMask[8];
uint16_t companionEquippedHead;
uint16_t companionEquippedBody;
uint16_t companionEquippedFeet;
uint16_t companionUnk4[4];
uint16_t companion_fields[11];
uint16_t fishingGuideMask[89];
uint16_t fishingSpotVisited[25];
uint16_t unknownMask4Padding;
uint16_t rankAmalJaa;
uint16_t rankSylph;
uint16_t rankKobold;
uint16_t rankSahagin;
uint16_t rankIxal;
uint16_t rankVanu;
uint16_t rankVath;
uint16_t rankMoogle;
uint16_t rankKojin;
uint16_t rankAnata;
uint16_t expAmalJaa;
uint16_t expSylph;
uint16_t expKobold;
uint16_t expSahagin;
uint16_t expIxal;
uint16_t expVanu;
uint16_t expVath;
uint16_t expMoogle;
uint16_t expKojin;
uint16_t expAnata;
uint16_t unknown596[10];
uint16_t unknown5A0[5];
uint16_t unknownMask59E[5];
uint16_t unknown5A3[18];
uint16_t unknownMask5C1[28];
uint16_t unknown_03411;
uint32_t unknownDword5E0;
uint16_t pvpFrontlineWeekly1st;
uint16_t pvpFrontlineWeekly2nd;
uint16_t pvpFrontlineWeekly3rd;
uint16_t relicBookCompletion2[8];
uint16_t sightseeingMask[26];
uint16_t unknown_XXX;
uint16_t unknown61E[20];
uint16_t unknown656[29];
uint16_t unknown63F[22];
uint16_t tripleTriadCards[28];
uint16_t unknown671[11];
uint16_t unknownMask67C[22];
uint16_t unknown692[3];
uint16_t orchestrionMask[40];
uint16_t hallOfNoviceCompleteMask[3];
uint16_t unknownMask6C0[11];
uint16_t unknownMask6CB[16];
uint16_t unknown6DB[14];
uint16_t unlockedRaids[28];
uint16_t unlockedDungeons[18];
uint16_t unlockedGuildhests[10];
uint16_t unlockedTrials[7];
uint16_t unlockedPvp[5];
uint16_t unknownMask72D[28];
unsigned char unknownOword[16];
unsigned char unlockBitmask[64];
unsigned char aetheryte[17];
unsigned char discovery[421];
unsigned char howto[33];
unsigned char minions[38];
unsigned char chocoboTaxiMask[8];
unsigned char contentClearMask[111];
unsigned char contentClearPadding;
unsigned short unknown428[8];
unsigned char companionBardingMask[8];
unsigned char companionEquippedHead;
unsigned char companionEquippedBody;
unsigned char companionEquippedFeet;
unsigned char companionUnk4[4];
unsigned char companion_fields[11];
unsigned char fishingGuideMask[89];
unsigned char fishingSpotVisited[25];
unsigned char unknownMask4Padding;
unsigned char rankAmalJaa;
unsigned char rankSylph;
unsigned char rankKobold;
unsigned char rankSahagin;
unsigned char rankIxal;
unsigned char rankVanu;
unsigned char rankVath;
unsigned char rankMoogle;
unsigned char rankKojin;
unsigned char rankAnata;
unsigned short expAmalJaa;
unsigned short expSylph;
unsigned short expKobold;
unsigned short expSahagin;
unsigned short expIxal;
unsigned short expVanu;
unsigned short expVath;
unsigned short expMoogle;
unsigned short expKojin;
unsigned short expAnata;
unsigned char unknown596[10];
unsigned short unknown5A0[5];
unsigned char unknownMask59E[5];
unsigned char unknown5A3[18];
unsigned char unknownMask5C1[28];
unsigned char unknown_03411;
unsigned int unknownDword5E0;
unsigned short pvpFrontlineWeekly1st;
unsigned short pvpFrontlineWeekly2nd;
unsigned short pvpFrontlineWeekly3rd;
unsigned char relicBookCompletion2[8];
unsigned char sightseeingMask[26];
unsigned short unknown_XXX;
unsigned char unknown61E;
unsigned char unknown61F[32];
unsigned char unknown63F[22];
unsigned char tripleTriadCards[28];
unsigned char unknown671[11];
unsigned char unknownMask67C[22];
unsigned char unknown692[3];
unsigned char orchestrionMask[40];
unsigned char hallOfNoviceCompleteMask[3];
unsigned char unknownMask6C0[11];
unsigned char unknownMask6CB[16];
unsigned char unknown6DB[14];
unsigned char unlockedRaids[28];
unsigned char unlockedDungeons[18];
unsigned char unlockedGuildhests[10];
unsigned char unlockedTrials[7];
unsigned char unlockedPvp[5];
unsigned char unknownMask72D[28];
// unsigned char unknownMask749[18];
//unsigned char unknown749[13];
};