From d9782ed71a436acdd449614b21553a996709f2d3 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 29 May 2018 23:33:45 +1000 Subject: [PATCH 01/13] update opcodes --- src/common/Network/PacketDef/Ipcs.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 9eb847e3..0f6c5b69 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -86,12 +86,13 @@ namespace Packets { CountdownInitiate = 0x0111, // updated 4.3 CountdownCancel = 0x0112, // updated 4.3 - BlackList = 0x00FF, // updated 4.2 + BlackList = 0x0115, // updated 4.3 LogMessage = 0x00D0, - LinkshellList = 0x0106, // updated 4.2 - SetCharacterFCInfo = 0x0114, // updated 4.2 + LinkshellList = 0x011C, // updated 4.3 + SetCharaFCTag = 0x013B, // updated 4.3 + SetFreeCompanyInfo = 0x013D, // updated 4.3 StatusEffectList = 0x014E, // updated 4.3 Effect = 0x0151, // updated 4.3 @@ -199,6 +200,7 @@ namespace Packets { CFDutyInfoHandler = 0x0078, // updated 4.2 SocialReqSendHandler = 0x00AE, // updated 4.1 + CreateCrossWorldLS = 0x00AF, // updated 4.3 ChatHandler = 0x00D3, // updated 4.3 From 5afe39cf59ac99f6918a85552a36f1de141da95b Mon Sep 17 00:00:00 2001 From: Mordred Date: Tue, 29 May 2018 22:12:55 +0200 Subject: [PATCH 02/13] Removed unused functions --- src/servers/sapphire_zone/ServerZone.cpp | 17 ----------------- src/servers/sapphire_zone/ServerZone.h | 3 --- 2 files changed, 20 deletions(-) diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 46f635ef..25a6e323 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -335,15 +335,6 @@ void Core::ServerZone::removeSession( uint32_t sessionId ) m_sessionMapById.erase( sessionId ); } -void Core::ServerZone::updateSession( uint32_t id ) -{ - std::lock_guard< std::mutex > lock( m_sessionMutex ); - auto it = m_sessionMapById.find( id ); - - if( it != m_sessionMapById.end() ) - it->second->loadPlayer(); -} - Core::SessionPtr Core::ServerZone::getSession( uint32_t id ) { //std::lock_guard lock( m_sessionMutex ); @@ -373,14 +364,6 @@ void Core::ServerZone::removeSession( std::string playerName ) m_sessionMapByName.erase( playerName ); } -void Core::ServerZone::updateSession( std::string playerName ) -{ - std::lock_guard< std::mutex > lock( m_sessionMutex ); - auto it = m_sessionMapByName.find( playerName ); - - if( it != m_sessionMapByName.end() ) - it->second->loadPlayer(); -} bool Core::ServerZone::isRunning() const { diff --git a/src/servers/sapphire_zone/ServerZone.h b/src/servers/sapphire_zone/ServerZone.h index 4c728f9c..09230846 100644 --- a/src/servers/sapphire_zone/ServerZone.h +++ b/src/servers/sapphire_zone/ServerZone.h @@ -27,8 +27,6 @@ namespace Core { SessionPtr getSession( uint32_t id ); SessionPtr getSession( std::string playerName ); - void updateSession( uint32_t id ); - void updateSession( std::string playerName ); size_t getSessionCount() const; @@ -38,7 +36,6 @@ namespace Core { void printBanner() const; - private: uint16_t m_port; From 911bf39af81a375ea348b3901d08c7c0f6294015 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 13:38:00 +0200 Subject: [PATCH 03/13] Some cleanup and buildfix --- src/common/Network/PacketDef/Ipcs.h | 4 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 280 +++++++++--------- src/servers/sapphire_zone/Event/EventDefs.h | 6 - .../sapphire_zone/Inventory/Inventory.cpp | 4 +- .../sapphire_zone/Network/GameConnection.cpp | 2 + .../sapphire_zone/Network/GameConnection.h | 2 +- .../Network/Handlers/GMCommandHandlers.cpp | 7 - src/servers/sapphire_zone/ServerZone.cpp | 8 +- 8 files changed, 147 insertions(+), 166 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 0f6c5b69..7d1af019 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -1,7 +1,7 @@ #ifndef _CORE_NETWORK_PACKETS_IPCS_H #define _CORE_NETWORK_PACKETS_IPCS_H -#include +#include namespace Core { namespace Network { @@ -175,8 +175,6 @@ namespace Packets { }; - // TODO: Include structures for the individual packet segment types - /** * Client IPC Zone Type Codes. */ diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 1385202a..3baa1305 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -611,147 +611,147 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket { // plain C types for a bit until the packet is actually fixed. // makes conversion between different editors easier. - __int64 contentId; - 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 __int16 pvpWolfFoldWeeklyMatches; - unsigned __int16 pvpWolfFoldWeeklyVictories; - unsigned __int16 pvpStats[6]; - unsigned __int16 playerCommendations; - unsigned __int16 pvpStats1; - unsigned __int8 frontlineCampaigns[4]; - unsigned __int16 frontlineCampaignsWeekly; - unsigned __int8 currentRelic; - unsigned __int8 currentBook; - unsigned __int8 masterCrafterMask; - unsigned __int8 unknown69; - unsigned __int8 unknown6A; - unsigned __int8 unknown6B; - unsigned __int8 unknown6C[4]; - unsigned __int8 unknown50[34]; - unsigned __int16 unknown18; - unsigned __int8 maxLevel; - unsigned __int8 expansion; - unsigned __int8 unknown76; - unsigned __int8 race; - unsigned __int8 tribe; - unsigned __int8 gender; - unsigned __int8 currentJob; - unsigned __int8 currentClass; - unsigned __int8 deity; - unsigned __int8 namedayMonth; - unsigned __int8 namedayDay; - unsigned __int8 cityState; - unsigned __int8 homepoint; - unsigned __int8 unknown26; - unsigned __int8 petHotBar; - unsigned __int8 companionRank; - unsigned __int8 companionStars; - unsigned __int8 companionSp; - unsigned __int8 companionUnk2B; - unsigned __int8 companionColor; - unsigned __int8 companionFavoFeed; - unsigned __int8 companionUnk89; - unsigned __int8 companionUnk90[5]; - unsigned __int16 unknown90[7]; - unsigned __int16 unknown9E; - unsigned __int16 unknownA0; - unsigned int exp[25]; - unsigned __int8 unknown564[16]; - unsigned int pvpFrontlineOverall1st; - unsigned int pvpFrontlineOverall2nd; - unsigned int pvpFrontlineOverall3rd; - unsigned __int8 relicBookCompletion1[4]; - unsigned __int16 levels[25]; - unsigned __int16 levelsPadding; - unsigned __int16 unknown15C[8]; - unsigned __int16 fishingRecordsFish[26]; - unsigned __int16 fishingRecordsFishWeight[26]; - unsigned __int8 unknownMask554[44]; - unsigned __int8 companion_name[21]; - unsigned __int8 companionDefRank; - unsigned __int8 companionAttRank; - unsigned __int8 companionHealRank; - unsigned __int8 mountGuideMask[16]; + 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]; char name[32]; - unsigned __int8 unknownOword[16]; - unsigned __int8 unknown258; - unsigned __int8 unlockBitmask[64]; - unsigned __int8 aetheryte[17]; - unsigned __int8 discovery[421]; - unsigned __int8 howto[33]; - unsigned __int8 minions[38]; - unsigned __int8 chocoboTaxiMask[8]; - unsigned __int8 contentClearMask[111]; - unsigned __int8 contentClearPadding; - unsigned __int16 unknown428[8]; - unsigned __int8 companionBardingMask[8]; - unsigned __int8 companionEquippedHead; - unsigned __int8 companionEquippedBody; - unsigned __int8 companionEquippedFeet; - unsigned __int8 companionUnk4[4]; - unsigned __int8 companion_fields[11]; - unsigned __int8 fishingGuideMask[89]; - unsigned __int8 fishingSpotVisited[25]; - unsigned __int8 unknownMask4Padding; - unsigned __int8 rankAmalJaa; - unsigned __int8 rankSylph; - unsigned __int8 rankKobold; - unsigned __int8 rankSahagin; - unsigned __int8 rankIxal; - unsigned __int8 rankVanu; - unsigned __int8 rankVath; - unsigned __int8 rankMoogle; - unsigned __int8 rankKojin; - unsigned __int8 rankAnata; - unsigned __int16 expAmalJaa; - unsigned __int16 expSylph; - unsigned __int16 expKobold; - unsigned __int16 expSahagin; - unsigned __int16 expIxal; - unsigned __int16 expVanu; - unsigned __int16 expVath; - unsigned __int16 expMoogle; - unsigned __int16 expKojin; - unsigned __int16 expAnata; - unsigned __int8 unknown596[10]; - unsigned __int16 unknown5A0[5]; - unsigned __int8 unknownMask59E[5]; - unsigned __int8 unknown5A3[18]; - unsigned __int8 unknownMask5C1[28]; - unsigned __int8 unknown_03411; - unsigned int unknownDword5E0; - unsigned __int16 pvpFrontlineWeekly1st; - unsigned __int16 pvpFrontlineWeekly2nd; - unsigned __int16 pvpFrontlineWeekly3rd; - unsigned __int8 relicBookCompletion2[8]; - unsigned __int8 sightseeingMask[26]; - unsigned __int16 unknown_XXX; - unsigned __int8 unknown61E[20]; - unsigned __int8 unknown656[29]; - unsigned __int8 unknown63F[22]; - unsigned __int8 tripleTriadCards[28]; - unsigned __int8 unknown671[11]; - unsigned __int8 unknownMask67C[22]; - unsigned __int8 unknown692[3]; - unsigned __int8 orchestrionMask[40]; - unsigned __int8 hallOfNoviceCompleteMask[3]; - unsigned __int8 unknownMask6C0[11]; - unsigned __int8 unknownMask6CB[16]; - unsigned __int8 unknown6DB[14]; - unsigned __int8 unlockedRaids[28]; - unsigned __int8 unlockedDungeons[18]; - unsigned __int8 unlockedGuildhests[10]; - unsigned __int8 unlockedTrials[7]; - unsigned __int8 unlockedPvp[5]; - unsigned __int8 unknownMask72D[28]; + 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]; }; diff --git a/src/servers/sapphire_zone/Event/EventDefs.h b/src/servers/sapphire_zone/Event/EventDefs.h index b7c4afba..7f1a008f 100644 --- a/src/servers/sapphire_zone/Event/EventDefs.h +++ b/src/servers/sapphire_zone/Event/EventDefs.h @@ -69,12 +69,6 @@ namespace Core EVENT_TABLE_GAME = 24 }; - enum EventFinishState - { - UNLOCK = 1, - KEEPLOCK = 0 - }; - enum DamageType { STD_DAMAGE = 0X03, diff --git a/src/servers/sapphire_zone/Inventory/Inventory.cpp b/src/servers/sapphire_zone/Inventory/Inventory.cpp index b601dd81..2d475021 100644 --- a/src/servers/sapphire_zone/Inventory/Inventory.cpp +++ b/src/servers/sapphire_zone/Inventory/Inventory.cpp @@ -2,7 +2,7 @@ #include #include -#include + #include #include #include @@ -12,8 +12,6 @@ #include "Network/PacketWrappers/ServerNoticePacket.h" #include "Network/PacketWrappers/ActorControlPacket143.h" -#include "Forwards.h" -#include "Inventory.h" #include "ItemContainer.h" #include "Item.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index 31fc5062..a106481f 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -4,6 +4,8 @@ #include #include #include + +#include #include #include diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index e8a8af37..ec14ec94 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -2,7 +2,7 @@ #define GAMECONNECTION_H #include -#include + #include #include #include diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 7f1d99d0..110a1107 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -7,7 +7,6 @@ #include #include -#include #include "Network/GameConnection.h" @@ -18,7 +17,6 @@ #include "Zone/InstanceContent.h" #include "Zone/ZonePosition.h" -#include "Network/GameConnection.h" #include "Network/PacketWrappers/InitUIPacket.h" #include "Network/PacketWrappers/PingPacket.h" #include "Network/PacketWrappers/MoveActorPacket.h" @@ -33,16 +31,11 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - #include "Event/EventHelper.h" #include "Action/Action.h" #include "Action/ActionTeleport.h" -#include "Session.h" #include "ServerZone.h" #include "Forwards.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/ServerZone.cpp b/src/servers/sapphire_zone/ServerZone.cpp index 25a6e323..d1880965 100644 --- a/src/servers/sapphire_zone/ServerZone.cpp +++ b/src/servers/sapphire_zone/ServerZone.cpp @@ -3,7 +3,6 @@ #include #include #include -#include #include #include @@ -26,15 +25,12 @@ #include "Zone/TerritoryMgr.h" -#include "DebugCommand/DebugCommandHandler.h" - #include "Script/ScriptMgr.h" #include "Linkshell/LinkshellMgr.h" #include "Forwards.h" -#include + #include -#include #include #include "Framework.h" @@ -206,7 +202,7 @@ void Core::ServerZone::run( int32_t argc, char* argv[] ) void Core::ServerZone::printBanner() const { - auto pLog = g_fw.get< Core::Logger>(); + auto pLog = g_fw.get< Core::Logger >(); pLog->info("===========================================================" ); pLog->info( "Sapphire Server Project " ); From 738b09d5c524ce1147b272c5031f533d6f77e3f9 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 15:52:35 +0200 Subject: [PATCH 04/13] More cleanup yet --- src/servers/sapphire_zone/Action/ActionCollision.cpp | 1 - src/servers/sapphire_zone/Action/ActionCollision.h | 4 ++-- src/servers/sapphire_zone/Action/ActionMount.h | 2 +- src/servers/sapphire_zone/Action/ActionTeleport.h | 2 +- src/servers/sapphire_zone/Action/EventAction.cpp | 1 - src/servers/sapphire_zone/Action/EventAction.h | 2 +- src/servers/sapphire_zone/Action/EventItemAction.h | 2 +- src/servers/sapphire_zone/Actor/Actor.cpp | 10 +--------- src/servers/sapphire_zone/Actor/Chara.cpp | 1 - src/servers/sapphire_zone/Actor/EventObject.cpp | 1 - src/servers/sapphire_zone/Actor/EventObject.h | 7 ++++--- src/servers/sapphire_zone/Actor/Player.cpp | 5 ----- src/servers/sapphire_zone/Actor/PlayerEvent.cpp | 5 ----- src/servers/sapphire_zone/Actor/PlayerQuest.cpp | 2 -- src/servers/sapphire_zone/Actor/PlayerSql.cpp | 6 ------ .../sapphire_zone/DebugCommand/DebugCommandHandler.cpp | 3 --- src/servers/sapphire_zone/Event/EventHandler.h | 2 +- src/servers/sapphire_zone/Event/EventHelper.cpp | 6 ++++-- src/servers/sapphire_zone/Inventory/Inventory.h | 2 +- src/servers/sapphire_zone/Inventory/ItemContainer.h | 2 +- src/servers/sapphire_zone/Network/GameConnection.cpp | 3 +-- src/servers/sapphire_zone/Network/GameConnection.h | 6 ++++-- .../sapphire_zone/Network/Handlers/ActionHandler.cpp | 4 ---- .../sapphire_zone/Network/Handlers/CFHandlers.cpp | 3 --- .../sapphire_zone/Network/Handlers/EventHandlers.cpp | 4 +--- .../Network/Handlers/GMCommandHandlers.cpp | 9 --------- .../Network/Handlers/InventoryHandler.cpp | 3 +-- .../sapphire_zone/Network/Handlers/PacketHandlers.cpp | 7 ------- .../sapphire_zone/Network/Handlers/SkillHandler.cpp | 3 --- 29 files changed, 25 insertions(+), 83 deletions(-) diff --git a/src/servers/sapphire_zone/Action/ActionCollision.cpp b/src/servers/sapphire_zone/Action/ActionCollision.cpp index c81ceb36..90a18e43 100644 --- a/src/servers/sapphire_zone/Action/ActionCollision.cpp +++ b/src/servers/sapphire_zone/Action/ActionCollision.cpp @@ -9,7 +9,6 @@ #include "Actor/Player.h" #include -#include using namespace Core::Entity; using namespace Core::Common; diff --git a/src/servers/sapphire_zone/Action/ActionCollision.h b/src/servers/sapphire_zone/Action/ActionCollision.h index 7b845b51..89a3a99c 100644 --- a/src/servers/sapphire_zone/Action/ActionCollision.h +++ b/src/servers/sapphire_zone/Action/ActionCollision.h @@ -2,14 +2,14 @@ #define _ACTIONCOLLISION_H #include -#include "Action.h" - +#include "Forwards.h" namespace Core { namespace Data { struct Action; } + namespace Entity { enum class TargetFilter diff --git a/src/servers/sapphire_zone/Action/ActionMount.h b/src/servers/sapphire_zone/Action/ActionMount.h index 3450a2b2..23533c90 100644 --- a/src/servers/sapphire_zone/Action/ActionMount.h +++ b/src/servers/sapphire_zone/Action/ActionMount.h @@ -1,7 +1,7 @@ #ifndef _ACTIONMOUNT_H_ #define _ACTIONMOUNT_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/ActionTeleport.h b/src/servers/sapphire_zone/Action/ActionTeleport.h index fab98d06..4c42fc65 100644 --- a/src/servers/sapphire_zone/Action/ActionTeleport.h +++ b/src/servers/sapphire_zone/Action/ActionTeleport.h @@ -1,7 +1,7 @@ #ifndef _ACTIONTELEPORT_H_ #define _ACTIONTELEPORT_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/EventAction.cpp b/src/servers/sapphire_zone/Action/EventAction.cpp index e0578dce..a21400f0 100644 --- a/src/servers/sapphire_zone/Action/EventAction.cpp +++ b/src/servers/sapphire_zone/Action/EventAction.cpp @@ -6,7 +6,6 @@ #include "Network/PacketWrappers/ActorControlPacket143.h" #include "Actor/Player.h" -#include "Event/EventHandler.h" #include "EventAction.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Action/EventAction.h b/src/servers/sapphire_zone/Action/EventAction.h index 642513a2..346f0256 100644 --- a/src/servers/sapphire_zone/Action/EventAction.h +++ b/src/servers/sapphire_zone/Action/EventAction.h @@ -3,7 +3,7 @@ #include -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Action/EventItemAction.h b/src/servers/sapphire_zone/Action/EventItemAction.h index 6c69e1aa..69832263 100644 --- a/src/servers/sapphire_zone/Action/EventItemAction.h +++ b/src/servers/sapphire_zone/Action/EventItemAction.h @@ -1,7 +1,7 @@ #ifndef _EVENTITEMACTION_H_ #define _EVENTITEMACTION_H_ -#include "../Forwards.h" +#include "Forwards.h" #include "Action.h" namespace Core { diff --git a/src/servers/sapphire_zone/Actor/Actor.cpp b/src/servers/sapphire_zone/Actor/Actor.cpp index 0de580e6..dcbb812f 100644 --- a/src/servers/sapphire_zone/Actor/Actor.cpp +++ b/src/servers/sapphire_zone/Actor/Actor.cpp @@ -1,11 +1,10 @@ #include "Actor.h" #include -#include + #include #include -#include "Forwards.h" #include "Action/Action.h" #include "Action/ActionCollision.h" @@ -19,8 +18,6 @@ #include "ServerZone.h" #include "Session.h" -#include "Zone/Zone.h" - #include "Zone/TerritoryMgr.h" @@ -28,11 +25,6 @@ #include "Math/CalcBattle.h" -#include "ServerZone.h" -#include "Session.h" -#include "Actor.h" -#include "Player.h" - #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Actor/Chara.cpp b/src/servers/sapphire_zone/Actor/Chara.cpp index d905c341..841e75fa 100644 --- a/src/servers/sapphire_zone/Actor/Chara.cpp +++ b/src/servers/sapphire_zone/Actor/Chara.cpp @@ -2,7 +2,6 @@ #include #include #include -#include #include "Forwards.h" #include "Action/Action.h" diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index 64e59688..eac02744 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include diff --git a/src/servers/sapphire_zone/Actor/EventObject.h b/src/servers/sapphire_zone/Actor/EventObject.h index 363d5077..937ac0f3 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -10,10 +10,11 @@ namespace Entity class EventObject : public Actor { public: - EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - float rotation, const std::string& givenName = "none" ); + EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState, + Common::FFXIVARR_POSITION3 pos, float rotation, const std::string& givenName = "none" ); - using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, InstanceContentPtr, uint64_t ) >; + using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, + InstanceContentPtr, uint64_t ) >; uint32_t getGimmickId() const; void setGimmickId( uint32_t gimmickId ); diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index 9aed1649..dbc28283 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -30,11 +30,6 @@ #include "Script/ScriptMgr.h" -#include "Inventory/Item.h" -#include "Inventory/Inventory.h" - -#include "Event/EventHandler.h" - #include "Action/Action.h" #include "Action/ActionTeleport.h" #include "Action/EventAction.h" diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 80e3dbda..ec05b996 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -16,12 +16,7 @@ #include "Action/EventAction.h" #include "Action/EventItemAction.h" -#include "Event/EventHandler.h" - #include "Zone/Zone.h" - -#include "Player.h" -#include "Forwards.h" #include "ServerZone.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Actor/PlayerQuest.cpp b/src/servers/sapphire_zone/Actor/PlayerQuest.cpp index ebd89a1e..952d0bf8 100644 --- a/src/servers/sapphire_zone/Actor/PlayerQuest.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerQuest.cpp @@ -8,8 +8,6 @@ #include "Network/PacketWrappers/QuestMessagePacket.h" #include "Session.h" -#include "Inventory/Inventory.h" -#include "Player.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Actor/PlayerSql.cpp b/src/servers/sapphire_zone/Actor/PlayerSql.cpp index 2cb73926..7ced3f9a 100644 --- a/src/servers/sapphire_zone/Actor/PlayerSql.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerSql.cpp @@ -1,6 +1,4 @@ #include -#include -#include #include #include @@ -19,11 +17,7 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" -#include "Inventory/Inventory.h" - -#include "Player.h" #include "ServerZone.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 71d8d8fe..10a83b85 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -6,7 +6,6 @@ #include #include #include -#include #include #include #include @@ -25,7 +24,6 @@ #include "Script/ScriptMgr.h" #include "Script/NativeScriptMgr.h" -#include "Actor/Player.h" #include "Actor/EventObject.h" #include "Zone/Zone.h" @@ -34,7 +32,6 @@ #include "ServerZone.h" -#include "StatusEffect/StatusEffect.h" #include "Session.h" #include "Framework.h" diff --git a/src/servers/sapphire_zone/Event/EventHandler.h b/src/servers/sapphire_zone/Event/EventHandler.h index acdaf592..87a29c8d 100644 --- a/src/servers/sapphire_zone/Event/EventHandler.h +++ b/src/servers/sapphire_zone/Event/EventHandler.h @@ -1,7 +1,7 @@ #ifndef _EVENT_H #define _EVENT_H -#include "../Forwards.h" +#include "Forwards.h" namespace Core { namespace Event { diff --git a/src/servers/sapphire_zone/Event/EventHelper.cpp b/src/servers/sapphire_zone/Event/EventHelper.cpp index 4a389965..1b4c34b6 100644 --- a/src/servers/sapphire_zone/Event/EventHelper.cpp +++ b/src/servers/sapphire_zone/Event/EventHelper.cpp @@ -1,10 +1,12 @@ #include #include +#include +#include + #include "Framework.h" #include "EventHelper.h" #include "EventHandler.h" -#include -#include + extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Inventory/Inventory.h b/src/servers/sapphire_zone/Inventory/Inventory.h index dacfa514..997e840c 100644 --- a/src/servers/sapphire_zone/Inventory/Inventory.h +++ b/src/servers/sapphire_zone/Inventory/Inventory.h @@ -2,7 +2,7 @@ #define INVENTORY_H_ #include #include -#include "../Forwards.h" +#include "Forwards.h" namespace Core { diff --git a/src/servers/sapphire_zone/Inventory/ItemContainer.h b/src/servers/sapphire_zone/Inventory/ItemContainer.h index 1d7147d5..223dd7ae 100644 --- a/src/servers/sapphire_zone/Inventory/ItemContainer.h +++ b/src/servers/sapphire_zone/Inventory/ItemContainer.h @@ -5,7 +5,7 @@ #include -#include "../Forwards.h" +#include "Forwards.h" namespace Core { diff --git a/src/servers/sapphire_zone/Network/GameConnection.cpp b/src/servers/sapphire_zone/Network/GameConnection.cpp index a106481f..e885a994 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.cpp +++ b/src/servers/sapphire_zone/Network/GameConnection.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "Zone/Zone.h" @@ -15,8 +16,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - #include "GameConnection.h" #include "ServerZone.h" #include "Session.h" diff --git a/src/servers/sapphire_zone/Network/GameConnection.h b/src/servers/sapphire_zone/Network/GameConnection.h index ec14ec94..07e17bc3 100644 --- a/src/servers/sapphire_zone/Network/GameConnection.h +++ b/src/servers/sapphire_zone/Network/GameConnection.h @@ -4,7 +4,7 @@ #include #include -#include +//#include #include #include "Forwards.h" @@ -13,7 +13,9 @@ namespace Core { namespace Network { - +namespace Packets { + class GamePacket; +} enum ConnectionType : uint8_t { Zone = 1, diff --git a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp index 6c37a645..50c81fb0 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp @@ -25,10 +25,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - #include "Event/EventHelper.h" #include "Action/Action.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp index 5e0b1bdf..683a966f 100644 --- a/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/CFHandlers.cpp @@ -15,9 +15,6 @@ #include "Network/PacketWrappers/ActorControlPacket144.h" #include "Network/PacketWrappers/PlayerStateFlagsPacket.h" -#include "Actor/Player.h" - -#include "Forwards.h" #include "Framework.h" #include "Session.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index f8a4763c..1e6913bb 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -19,14 +19,12 @@ #include "Script/ScriptMgr.h" -#include "Actor/Player.h" - #include "Event/EventHelper.h" #include "Zone/InstanceContent.h" #include "Session.h" -#include "Forwards.h" + #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp index 110a1107..35808521 100644 --- a/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/GMCommandHandlers.cpp @@ -15,7 +15,6 @@ #include "Zone/TerritoryMgr.h" #include "Zone/Zone.h" #include "Zone/InstanceContent.h" -#include "Zone/ZonePosition.h" #include "Network/PacketWrappers/InitUIPacket.h" #include "Network/PacketWrappers/PingPacket.h" @@ -29,15 +28,7 @@ #include "Network/PacketWrappers/EventFinishPacket.h" #include "Network/PacketWrappers/PlayerStateFlagsPacket.h" -#include "DebugCommand/DebugCommandHandler.h" - -#include "Event/EventHelper.h" - -#include "Action/Action.h" -#include "Action/ActionTeleport.h" - #include "ServerZone.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp index 00b57c72..63c09215 100644 --- a/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/InventoryHandler.cpp @@ -17,11 +17,10 @@ #include "DebugCommand/DebugCommandHandler.h" #include "Actor/Player.h" -#include "Inventory/Inventory.h" #include "Session.h" #include "ServerZone.h" -#include "Forwards.h" + #include "Framework.h" extern Core::Framework g_fw; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 1e23fd3a..49efc3de 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -7,10 +7,7 @@ #include #include #include -#include -#include -#include #include #include "Network/GameConnection.h" @@ -32,10 +29,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - -#include "Inventory/Inventory.h" - #include "Event/EventHelper.h" #include "Action/Action.h" diff --git a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp index f3ed84d3..aa068d79 100644 --- a/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/SkillHandler.cpp @@ -18,8 +18,6 @@ #include "DebugCommand/DebugCommandHandler.h" -#include "Actor/Player.h" - #include "Action/Action.h" #include "Action/ActionCast.h" #include "Action/ActionMount.h" @@ -27,7 +25,6 @@ #include "Script/ScriptMgr.h" #include "Session.h" -#include "Forwards.h" #include "Framework.h" extern Core::Framework g_fw; From f6375f326e40d761523867ba453a502537b5073c Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 2 Jun 2018 18:09:29 +0200 Subject: [PATCH 05/13] Reordered IPC list --- src/common/Network/PacketDef/Ipcs.h | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 7d1af019..0515d755 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -45,11 +45,10 @@ namespace Packets { enum ServerZoneIpcType : uint16_t { - // static opcode ( the ones that rarely if ever change ) + // static opcode ( the ones that rarely, if ever, change ) Ping = 0x0065, Init = 0x0066, - //ActorSpawn = 0x0190, // DEPRECATED ActorFreeSpawn = 0x0191, InitZone = 0x019A, @@ -74,6 +73,7 @@ namespace Packets { CFRegistered = 0x00B8, // updated 4.1 SocialRequestResponse = 0x00BB, // updated 4.1 CancelAllianceForming = 0x00C6, // updated 4.2 + Chat = 0x00F7, // updated 4.3 SocialList = 0x00FD, // updated 4.3 @@ -111,7 +111,8 @@ namespace Packets { ObjectSpawn = 0x017D, // updated 4.3 ObjectDespawn = 0x017E, // updated 4.3 - UpdateClassInfo = 0x018A, // updated 4.3 + + InventoryActionAck = 0x0180, // updated 4.2 ? InitUI = 0x0181, // updated 4.3 PlayerStats = 0x0182, // updated 4.3 @@ -120,13 +121,14 @@ namespace Packets { PlayerClassInfo = 0x0185, // updated 4.3 ModelEquip = 0x0186, // updated 4.3 + UpdateClassInfo = 0x018A, // updated 4.3 + ItemInfo = 0x0190, // updated 4.3 ContainerInfo = 0x0192, // updated 4.3 InventoryTransactionFinish = 0x0193, // updated 4.3 InventoryTransaction = 0x0194, // updated 4.3 CurrencyCrystalInfo = 0x0197, // updated 4.3 - InventoryActionAck = 0x0180, // updated 4.2 ? UpdateInventorySlot = 0x0198, // updated 4.3 EventPlay = 0x01A6, // updated 4.3 @@ -137,21 +139,24 @@ namespace Packets { EventLinkshell = 0x1169, - QuestMessage = 0x01CE, // updated 4.3 - QuestTracker = 0x01D3, // updated 4.3 + QuestActiveList = 0x01C3, // updated 4.3 + QuestUpdate = 0x01C4, // updated 4.3 + QuestCompleteList = 0x01C5, // updated 4.3 QuestFinish = 0x01C6, // updated 4.3 MSQTrackerComplete = 0x01C7, // updated 4.3 MSQTrackerProgress = 0x01C8, // updated 4.3 - QuestActiveList = 0x01C3, // updated 4.3 - QuestUpdate = 0x01C4, // updated 4.3 - QuestCompleteList = 0x01C5, // updated 4.3 + QuestMessage = 0x01CE, // updated 4.3 + + QuestTracker = 0x01D3, // updated 4.3 Mount = 0x01E3, // updated 4.3 DirectorVars = 0x01E5, // updated 4.3 + CFAvailableContents = 0x01FD, // updated 4.2 + WeatherChange = 0x0200, // updated 4.3 PlayerTitleList = 0x0201, // updated 4.3 Discovery = 0x0202, // updated 4.3 @@ -160,13 +165,13 @@ namespace Packets { EquipDisplayFlags = 0x0210, // updated 4.3 - CFAvailableContents = 0x01FD, // updated 4.2 + DuelChallenge = 0x0277, // 4.2; this is responsible for opening the ui + PerformNote = 0x0286, // updated 4.3 PrepareZoning = 0x0291, // updated 4.3 ActorGauge = 0x0292, // updated 4.3 - DuelChallenge = 0x0277, // 4.2; this is the responsible for opening an ui - PerformNote = 0x0286, // updated 4.3 + // Unknown IPC types that still need to be sent // TODO: figure all these out properly From 04671e2e24fb0175b1f5890bea7a766c1777a061 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 3 Jun 2018 19:31:03 +0200 Subject: [PATCH 06/13] Cleanup cleanup cleanup --- src/common/Network/CommonNetwork.h | 56 +++++------ src/common/Network/GamePacket.cpp | 2 +- src/common/Network/GamePacketNew.h | 28 +++--- src/common/Network/GamePacketParser.cpp | 96 +++++++------------ src/common/Network/PacketContainer.cpp | 4 +- src/common/Network/PacketContainer.h | 6 +- .../sapphire_zone/Actor/EventObject.cpp | 1 - .../Network/Handlers/PacketHandlers.cpp | 7 +- 8 files changed, 82 insertions(+), 118 deletions(-) diff --git a/src/common/Network/CommonNetwork.h b/src/common/Network/CommonNetwork.h index b52c7d5b..c5d4dc90 100644 --- a/src/common/Network/CommonNetwork.h +++ b/src/common/Network/CommonNetwork.h @@ -1,6 +1,3 @@ -/** -* Structural definitions common to all FFXIV:ARR packets. -*/ #ifndef _CORE_NETWORK_PACKETS_COMMON_H #define _CORE_NETWORK_PACKETS_COMMON_H @@ -25,7 +22,7 @@ namespace Packets { * * std::stringstream buf; * buf << pkt_hdr; -* for (int i = 0; i < n; i++) +* for( int i = 0; i < n; i++ ) * { * buf << pkt_seg_hdr[i]; * buf << {pkt_seg_data[i]}; @@ -46,6 +43,8 @@ namespace Packets { * * 0 4 8 12 14 16 * +-------------------------------+---------------+-------+-------+ +* | unknown_0 | unknown_8 | +* +-------------------------------+---------------+-------+-------+ * | timestamp | size | cType | count | * +---+---+-------+---------------+---------------+-------+-------+ * | ? |CMP| ? | ? | @@ -54,13 +53,10 @@ namespace Packets { */ struct FFXIVARR_PACKET_HEADER { - + /** Unknown data, no actual use has been determined */ uint64_t unknown_0; uint64_t unknown_8; - /** - * Represents the number of milliseconds since epoch that the packet was - * sent. - */ + /** Represents the number of milliseconds since epoch that the packet was sent. */ uint64_t timestamp; /** The size of the packet header and its payload */ uint32_t size; @@ -74,14 +70,14 @@ struct FFXIVARR_PACKET_HEADER uint32_t unknown_24; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_PACKET_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } /** @@ -92,7 +88,7 @@ inline istream& operator>>(istream& is, FFXIVARR_PACKET_HEADER& hdr) * * 0 4 8 12 16 * +---------------+---------------+---------------+-------+-------+ -* | size | source_actor | target_actor | type | ? | +* | size | source_actor | target_actor | type | pad | * +---------------+---------------+---------------+-------+-------+ * | | * : type-specific data of length, size, follows : @@ -109,22 +105,20 @@ struct FFXIVARR_PACKET_SEGMENT_HEADER uint32_t target_actor; /** The segment type. (1, 2, 3, 7, 8, 9, 10) */ uint16_t type; - uint16_t _reserved_E; + uint16_t padding; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_PACKET_SEGMENT_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } -// TODO: Include structures for the individual packet segment types - -template struct FFXIVIpcBasePacket +template < int T > struct FFXIVIpcBasePacket { /** Creates a constant representing the IPC type */ enum { _ServerIpcType = T }; @@ -133,7 +127,7 @@ template struct FFXIVIpcBasePacket struct FFXIVARR_PACKET_RAW { FFXIVARR_PACKET_SEGMENT_HEADER segHdr; - std::vector data; + std::vector< uint8_t > data; }; /** @@ -142,7 +136,7 @@ struct FFXIVARR_PACKET_RAW * * 0 4 6 8 12 16 * +-------+-------+------+----------+---------------+---------------+ -* | 14 00 | type | ?? | serverId | timestamp | ??? | +* | 14 00 | type | pad | serverId | timestamp | pad1 | * +-------+-------+------+----------+---------------+---------------+ * | | * : data : @@ -153,24 +147,22 @@ struct FFXIVARR_IPC_HEADER { uint16_t reserved; uint16_t type; - uint16_t unknown_2; + uint16_t padding; uint16_t serverId; uint32_t timestamp; - uint32_t unknown_C; + uint32_t padding1; }; -inline ostream& operator<<(ostream& os, const FFXIVARR_IPC_HEADER& hdr) +inline ostream& operator << ( ostream& os, const FFXIVARR_IPC_HEADER& hdr ) { - return os.write(reinterpret_cast(&hdr), sizeof hdr); + return os.write( reinterpret_cast< const char* >( &hdr ), sizeof hdr ); } -inline istream& operator>>(istream& is, FFXIVARR_IPC_HEADER& hdr) +inline istream& operator >> ( istream& is, FFXIVARR_IPC_HEADER& hdr ) { - return is.read(reinterpret_cast(&hdr), sizeof hdr); + return is.read( reinterpret_cast< char* >( &hdr ), sizeof hdr ); } - - } /* Packets */ } /* Network */ } /* Core */ diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index 15e9d0f9..b5072b8f 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -88,7 +88,7 @@ Core::Network::Packets::GamePacket::~GamePacket() void Core::Network::Packets::GamePacket::savePacket() { char filename[20]; - sprintf( filename, "dump_0x%x.dat", m_subType ); + sprintf( filename, "dump_0x%x_%i.dat", m_subType, Util::getTimeMs() ); FILE * fp = nullptr; fp = fopen( filename, "wb" ); fwrite( &m_dataBuf[0], 1, m_segHdr.size, fp ); diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index b59a0cdf..451c4eee 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -16,11 +16,11 @@ namespace Packets { // Must forward define these in order to enable the compiler to produce the // correct template functions. -template +template < typename T, typename T1 > class GamePacketNew; -template -std::ostream& operator<< ( std::ostream& os, const GamePacketNew& packet ); +template < typename T, typename T1 > +std::ostream& operator<< ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); template< class T > using ZoneChannelPacket = GamePacketNew< T, ServerZoneIpcType >; @@ -31,11 +31,11 @@ using ChatChannelPacket = GamePacketNew< T, ServerChatIpcType >; /** * The base implementation of a game packet. Needed for parsing packets. */ -template -class GamePacketNewBase +template < typename T1 > +class FFXIVPacketBase { public: - virtual ~GamePacketNewBase() = default; + virtual ~FFXIVPacketBase() = default; /** * @brief Gets the IPC type of this packet. (Useful for determining the * type of a parsed packet.) @@ -49,8 +49,8 @@ public: * type that represents just the IPC data portion (the bytes after the initial * 32 byte header information.) */ -template -class GamePacketNew : public GamePacketNewBase +template < typename T, typename T1 > +class GamePacketNew : public FFXIVPacketBase< T1 > { public: /** @@ -58,7 +58,7 @@ public: * @param sourceActorId The source actor id. * @param targetActorId The target actor id. */ - GamePacketNew( uint32_t sourceActorId, uint32_t targetActorId ) + GamePacketNew< T, T1 >( uint32_t sourceActorId, uint32_t targetActorId ) { initialize(); m_segHdr.source_actor = sourceActorId; @@ -69,7 +69,7 @@ public: * @brief Constructs a new game packet with the specified actors. * @param sourceActorId The source and target actor id. */ - GamePacketNew( uint32_t bothActorId ) + GamePacketNew< T, T1 >( uint32_t bothActorId ) { initialize(); m_segHdr.source_actor = bothActorId; @@ -109,7 +109,7 @@ public: * @param actorId The source actor id. * @return This IPC packet object (can be used for chaining). */ - GamePacketNew sourceActor( uint32_t actorId ) + GamePacketNew< T, T1 > sourceActor( uint32_t actorId ) { m_segHdr.source_actor = actorId; return this; @@ -129,7 +129,7 @@ public: * @param actorId The target actor id. * @return This IPC packet object (can be used for chaining). */ - GamePacketNew targetActor( uint32_t actorId ) + GamePacketNew< T, T1 > targetActor( uint32_t actorId ) { m_segHdr.target_actor = actorId; return this; @@ -144,7 +144,7 @@ public: return m_segHdr.target_actor; }; - friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew& packet ); + friend std::ostream& operator<< <> ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); friend class GamePacketFactory; @@ -205,7 +205,7 @@ private: }; }; -template +template < typename T, typename T1 > std::ostream& operator<<( std::ostream& os, const GamePacketNew& packet ) { #if 0 diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp index d80da93b..4a9fd067 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -11,80 +11,67 @@ namespace Core { namespace Packets { - 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 ) { const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); // Check if we have enough bytes in the buffer. auto remainingBytes = buffer.size() - offset; - if ( remainingBytes < headerSize ) - { + if( remainingBytes < headerSize ) return Incomplete; - } // Copy packet header. memcpy( &header, buffer.data() + offset, headerSize ); - if ( !checkHeader(header) ) - { + if( !checkHeader(header) ) return Malformed; - } return Success; } - 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 ) { const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); // Check if we have enough bytes in the buffer. auto remainingBytes = buffer.size() - offset; - if (remainingBytes < headerSize) - { + if( remainingBytes < headerSize ) return Incomplete; - } // Copy segment header - memcpy(&header, buffer.data() + offset, headerSize); + memcpy( &header, buffer.data() + offset, headerSize ); return Success; } - PacketParseResult getPackets( - const std::vector< uint8_t > &buffer, - const uint32_t offset, - const FFXIVARR_PACKET_HEADER &packetHeader, - std::vector< FFXIVARR_PACKET_RAW > &packets) + PacketParseResult getPackets( const std::vector< uint8_t > &buffer, + const uint32_t offset, + const FFXIVARR_PACKET_HEADER &packetHeader, + std::vector< FFXIVARR_PACKET_RAW > &packets ) { // sanity check: check there's enough bytes in the buffer - const auto bytesExpected = packetHeader.size - sizeof(struct FFXIVARR_PACKET_HEADER); - if ( buffer.size() - offset < bytesExpected ) - { + const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER ); + if( buffer.size() - offset < bytesExpected ) return Incomplete; - } // Loop each message uint32_t count = 0; uint32_t bytesProcessed = 0; - while ( count < packetHeader.count ) + while( count < packetHeader.count ) { FFXIVARR_PACKET_RAW rawPacket; // Copy ipc packet message - const auto packetResult = getPacket(buffer, offset + bytesProcessed, rawPacket); - if ( packetResult != Success ) - { + const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket ); + if( packetResult != Success ) return packetResult; - } - + // NOTE: isn't rawPacket is allocated on stack? - // why is okay to do this? + // why is okay to do this? packets.push_back( rawPacket ); // Add message size and count @@ -94,34 +81,25 @@ namespace Core // sanity check: check if we processed all bytes. // this check can fail if size of messages don't add up to size reported from packet header. - if ( bytesExpected != bytesProcessed ) - { + if( bytesExpected != bytesProcessed ) return Malformed; - } return Success; } - 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 ) { // Copy segment header - const auto headerResult = getSegmentHeader(buffer, offset, packet.segHdr); - if ( headerResult != Success ) - { + const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); + if( headerResult != Success ) return headerResult; - } // Check header sanity and it's size - if ( !checkSegmentHeader( packet.segHdr ) ) - { + if( !checkSegmentHeader( packet.segHdr ) ) return Malformed; - } - const auto dataOffset = offset + sizeof(struct FFXIVARR_PACKET_SEGMENT_HEADER); + const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER ); const auto dataSize = packet.segHdr.size; // Allocate data buffer and copy @@ -131,30 +109,24 @@ namespace Core return Success; } - bool checkHeader(const FFXIVARR_PACKET_HEADER &header) + bool checkHeader( const FFXIVARR_PACKET_HEADER &header ) { // Max size of the packet is capped at 1MB for now. - if ( header.size > 1 * 1024 * 1024 ) - { + if( header.size > 1 * 1024 * 1024 ) return false; - } // Max number of message is capped at 255 for now. - if ( header.count > 255 ) - { + if( header.count > 255 ) return false; - } return true; } - - bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header) + + bool checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header ) { // Max size of individual message is capped at 256KB for now. - if ( header.size > 256 * 1024 ) - { + if( header.size > 256 * 1024 ) return false; - } return true; } diff --git a/src/common/Network/PacketContainer.cpp b/src/common/Network/PacketContainer.cpp index a0b6037f..d0074938 100644 --- a/src/common/Network/PacketContainer.cpp +++ b/src/common/Network/PacketContainer.cpp @@ -7,14 +7,14 @@ #include -Core::Network::Packets::PacketContainer::PacketContainer( void ) +Core::Network::Packets::PacketContainer::PacketContainer() { memset( &m_ipcHdr, 0, sizeof( FFXIVARR_PACKET_HEADER ) ); m_ipcHdr.size = sizeof( FFXIVARR_PACKET_HEADER ); m_ipcHdr.count = 0; } -Core::Network::Packets::PacketContainer::~PacketContainer( void ) +Core::Network::Packets::PacketContainer::~PacketContainer() { m_entryList.clear(); } diff --git a/src/common/Network/PacketContainer.h b/src/common/Network/PacketContainer.h index a00e0b88..494fe64b 100644 --- a/src/common/Network/PacketContainer.h +++ b/src/common/Network/PacketContainer.h @@ -16,14 +16,14 @@ class GamePacket; class PacketContainer { public: - PacketContainer( void ); - ~PacketContainer( void ); + PacketContainer(); + ~PacketContainer(); void addPacket( GamePacket pEntry ); FFXIVARR_PACKET_HEADER m_ipcHdr; - std::vector m_entryList; + std::vector< GamePacket > m_entryList; std::string toString(); diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index eac02744..79244193 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -7,7 +7,6 @@ #include #include #include -#include #include using namespace Core::Common; diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 49efc3de..a0b55b65 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -48,9 +48,10 @@ using namespace Core::Network::Packets::Server; void Core::Network::GameConnection::fcInfoReqHandler( const Packets::GamePacket& inPacket, Entity::Player& player ) { - GamePacketPtr pPe( new GamePacket( 0xDD, 0x78, player.getId(), player.getId() ) ); - pPe->setValAt< uint8_t >( 0x48, 0x01 ); - queueOutPacket( pPe ); + // TODO: use new packet struct for this + //GamePacketPtr pPe( new GamePacket( 0xDD, 0x78, player.getId(), player.getId() ) ); + //pPe->setValAt< uint8_t >( 0x48, 0x01 ); + //queueOutPacket( pPe ); } void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePacket& inPacket, From dc64bcf9e6e24973f71d180c04aed1fbaa160176 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sun, 3 Jun 2018 19:50:21 +0200 Subject: [PATCH 07/13] Buildfix --- src/common/Network/GamePacket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index b5072b8f..c4d61f81 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -23,7 +23,7 @@ void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type m_segHdr.type = type; m_segHdr.source_actor = id1; m_segHdr.target_actor = id2; - m_segHdr._reserved_E = 0x00; + //m_segHdr._reserved_E = 0x00; m_subType = subType; m_timeStamp = static_cast< uint32_t >( time( nullptr ) ); From 6ec54f3f27394a7cbab214a3d8a6420c3963a0fe Mon Sep 17 00:00:00 2001 From: goaaats <16760685+goaaats@users.noreply.github.com> Date: Sun, 3 Jun 2018 20:47:22 +0200 Subject: [PATCH 08/13] Update README.md --- README.md | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/README.md b/README.md index 0b3dc99a..27928167 100644 --- a/README.md +++ b/README.md @@ -17,25 +17,7 @@ Sapphire requires the following software: | Boost 1.63.0 | [Win32 precompiled binaries](https://sourceforge.net/projects/boost/files/boost-binaries/1.63.0/boost_1_63_0-msvc-14.0-32.exe/download) | Boost libraries from your distribution's package manager | | MySQL Server 5.7 | [Official Site](https://dev.mysql.com/downloads/mysql/) | MySQL server from your distribution's package manager | -**Windows** -Set the environment variables ``BOOST_ROOT_DIR`` and ``BOOST_LIB_DIR`` to ``[boost main folder]`` and ``[boost main folder]/lib32-msvc-14.0`` respectively **or** copy your boost installation into the project's ``src/lib`` folder. - -Visual Studio 2017 users: open `Visual Studio Installer` and ensure `Individual Components > SDKs, libraries, and frameworks > Windows Universal C Runtime` is installed. You may also need to install `Individual Components > Compilers, build tools, and runtimes > VC++ 2015.3 v140 toolset for desktop (x86, 64)`. - -To enable [Edit and Continue](https://msdn.microsoft.com/en-us/library/esaeyddf.aspx) ensure you define `-DCMAKE_BUILD_TYPE="Debug"` when generating with CMake. - -If you installed CMake outside of Visual Studio and have it in your `PATH` environment variable, navigate to Sapphire folder and `cmake -DCMAKE_BUILD_TYPE="Debug" && cmake --build .`. - -Otherwise: -* In *Visual Studio 2017*: Open the project via ``File`` > ``Open`` > ``Folder`` and wait, till CMake automatically finishes cache generation. Right click any CMakeLists.txt and select build to build a application. -To configure debug startup parameters, select ``Debug and Launch settings``, the application you want to set up parameters for, and add a ``args`` json array containing your launch parameters in ``configurations``. -If Visual Studio fails to generate a CMake Cache or does not show options to build, make sure that the newest version of it is installed and all environment variables are set correctly. Keep in mind that generating a cache can take a while on some machines. - -The solution `Sapphire.sln` is also generated in the main Sapphire folder. - -**Linux** -`cmake . -DSAPPHIRE_BOOST_VER="your.boost.ver" && make -j JOBS` where `JOBS` is number of cores on your system. -`-j JOBS` can be omitted if your system lacks resources (spoiler: your system probably lacks resources if running on 1GB RAM or lower, or if the build fails due to being out of memory) +Please check the [wiki](https://github.com/SapphireMordred/Sapphire/wiki) for detailed installation/build instructions for your OS. ## Links From 2eb148a7b32732a1b210fadb8694bc33d1002ac6 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 5 Jun 2018 20:16:35 +1000 Subject: [PATCH 09/13] add new ultimate instance script --- .../raids/TheWeaponsRefrainUltimate.cpp | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp new file mode 100644 index 00000000..49780ca0 --- /dev/null +++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp @@ -0,0 +1,37 @@ +#include +#include + +class TheWeaponsRefrainUltimate : public InstanceContentScript +{ +public: + TheWeaponsRefrainUltimate() : InstanceContentScript( 30067 ) + { } + + void onInit( InstanceContentPtr instance ) override + { + instance->registerEObj( "unknown_0", 2009480, 0, 4, { 94.011192f, 0.000000f, 107.700996f }, 1.000000f, 0.000000f ); + instance->registerEObj( "sgvf_w1fz_b1432", 2007457, 7372735, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_1", 2007457, 7373056, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_2", 2009481, 0, 4, { 101.695602f, 0.000000f, 101.959396f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_3", 2007457, 7237754, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_4", 2007457, 7237753, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_5", 2007457, 7237756, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_6", 2007457, 7237755, 4, { 100.000000f, 0.000000f, 100.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "Entrance", 2007457, 7343478, 5, { 100.000000f, 0.000000f, 116.000000f }, 1.000000f, 0.000000f ); + // States -> vf_lock_on vf_lock_of + instance->registerEObj( "Exit", 2000139, 0, 4, { 100.000000f, 0.000000f, 85.000000f }, 1.000000f, 0.000000f ); + instance->registerEObj( "unknown_7", 2007457, 7538258, 4, { 100.160004f, 0.000000f, 101.443398f }, 1.000000f, 0.000000f ); + } + + void onUpdate( InstanceContentPtr instance, uint32_t currTime ) override + { + + } + + void onEnterTerritory( boost::shared_ptr instance, Core::Entity::Player& player, + unsigned int eventId, unsigned short param1, unsigned short param2 ) override + { + + } + +}; \ No newline at end of file From 2ac01971f9af66e9ca5d114ba8fd558b22c2db40 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 5 Jun 2018 20:22:05 +1000 Subject: [PATCH 10/13] fix incorrect type usage --- .../Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp index 49780ca0..96204fbf 100644 --- a/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp +++ b/src/servers/Scripts/instances/raids/TheWeaponsRefrainUltimate.cpp @@ -28,8 +28,7 @@ public: } - void onEnterTerritory( boost::shared_ptr instance, Core::Entity::Player& player, - unsigned int eventId, unsigned short param1, unsigned short param2 ) override + void onEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { } From 1bde2bd80292ead07f8b86420d683757dbde394f Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 7 Jun 2018 20:32:02 +0200 Subject: [PATCH 11/13] Fixed initui packet -> equipping gear fixed --- .../Network/PacketDef/Zone/ServerZoneDef.h | 284 +++++++++--------- 1 file changed, 145 insertions(+), 139 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 3baa1305..d8a628a8 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -612,146 +612,152 @@ struct FFXIVIpcInitUI : FFXIVIpcBasePacket // 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]; }; From f29671911e3b9c4604a7bbbb362c896380c09a60 Mon Sep 17 00:00:00 2001 From: Mordred Date: Thu, 7 Jun 2018 20:33:06 +0200 Subject: [PATCH 12/13] Cleanup --- src/common/Network/GamePacket.cpp | 20 +- src/common/Network/GamePacketNew.h | 12 +- src/common/Network/GamePacketParser.cpp | 235 ++++++++++++------------ src/common/Network/GamePacketParser.h | 85 ++++----- 4 files changed, 167 insertions(+), 185 deletions(-) diff --git a/src/common/Network/GamePacket.cpp b/src/common/Network/GamePacket.cpp index c4d61f81..bc142ab5 100644 --- a/src/common/Network/GamePacket.cpp +++ b/src/common/Network/GamePacket.cpp @@ -7,16 +7,17 @@ #include #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( size ); + 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; @@ -40,7 +41,7 @@ void Core::Network::Packets::GamePacket::setHeader( uint16_t size, uint16_t type Core::Network::Packets::GamePacket::GamePacket( char * pData, uint16_t size, bool bWriteStamp ) { - m_dataBuf = std::vector( size ); + m_dataBuf = std::vector< uint8_t >( size ); memcpy( &m_dataBuf[0], pData, size ); m_unknown2 = 0; @@ -65,9 +66,12 @@ Core::Network::Packets::GamePacket::GamePacket( const Packets::FFXIVARR_PACKET_R { m_segHdr = packetData.segHdr; - m_dataBuf = std::vector( m_segHdr.size ); + 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 ); @@ -98,5 +102,5 @@ void Core::Network::Packets::GamePacket::savePacket() std::string Core::Network::Packets::GamePacket::toString() const { - return Core::Util::binaryToHexDump( const_cast( &m_dataBuf[0] ), getSize() ); + return Core::Util::binaryToHexDump( const_cast< uint8_t* >( &m_dataBuf[0] ), getSize() ); } diff --git a/src/common/Network/GamePacketNew.h b/src/common/Network/GamePacketNew.h index 451c4eee..595b8222 100644 --- a/src/common/Network/GamePacketNew.h +++ b/src/common/Network/GamePacketNew.h @@ -20,7 +20,7 @@ template < typename T, typename T1 > class GamePacketNew; template < typename T, typename T1 > -std::ostream& operator<< ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); +std::ostream& operator << ( std::ostream& os, const GamePacketNew< T, T1 >& packet ); template< class T > using ZoneChannelPacket = GamePacketNew< T, ServerZoneIpcType >; @@ -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 ); }; diff --git a/src/common/Network/GamePacketParser.cpp b/src/common/Network/GamePacketParser.cpp index 4a9fd067..52cfe1a3 100644 --- a/src/common/Network/GamePacketParser.cpp +++ b/src/common/Network/GamePacketParser.cpp @@ -5,131 +5,122 @@ using namespace Core::Network::Packets; -namespace Core +PacketParseResult Core::Network::Packets::getHeader( const std::vector< uint8_t > &buffer, + const uint32_t offset, + FFXIVARR_PACKET_HEADER &header ) { - namespace Network - { - namespace Packets - { - PacketParseResult getHeader( const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_HEADER &header ) - { - const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); + const auto headerSize = sizeof( FFXIVARR_PACKET_HEADER ); - // Check if we have enough bytes in the buffer. - auto remainingBytes = buffer.size() - offset; - if( remainingBytes < headerSize ) - return Incomplete; + // Check if we have enough bytes in the buffer. + auto remainingBytes = buffer.size() - offset; + if( remainingBytes < headerSize ) + return Incomplete; - // Copy packet header. - memcpy( &header, buffer.data() + offset, headerSize ); + // Copy packet header. + memcpy( &header, buffer.data() + offset, headerSize ); - if( !checkHeader(header) ) - return Malformed; + if( !checkHeader(header) ) + return Malformed; - return Success; - } - - PacketParseResult getSegmentHeader( const std::vector< uint8_t > &buffer, - const uint32_t offset, - FFXIVARR_PACKET_SEGMENT_HEADER &header ) - { - const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); - - // Check if we have enough bytes in the buffer. - auto remainingBytes = buffer.size() - offset; - if( remainingBytes < headerSize ) - return Incomplete; - - // Copy segment header - memcpy( &header, buffer.data() + offset, headerSize ); - - return Success; - } - - PacketParseResult getPackets( const std::vector< uint8_t > &buffer, - const uint32_t offset, - const FFXIVARR_PACKET_HEADER &packetHeader, - std::vector< FFXIVARR_PACKET_RAW > &packets ) - { - // sanity check: check there's enough bytes in the buffer - const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER ); - if( buffer.size() - offset < bytesExpected ) - return Incomplete; - - // Loop each message - uint32_t count = 0; - uint32_t bytesProcessed = 0; - while( count < packetHeader.count ) - { - FFXIVARR_PACKET_RAW rawPacket; - - // Copy ipc packet message - const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket ); - if( packetResult != Success ) - return packetResult; - - // NOTE: isn't rawPacket is allocated on stack? - // why is okay to do this? - packets.push_back( rawPacket ); - - // Add message size and count - bytesProcessed += rawPacket.segHdr.size; - count += 1; - } - - // sanity check: check if we processed all bytes. - // this check can fail if size of messages don't add up to size reported from packet header. - if( bytesExpected != bytesProcessed ) - return Malformed; - - return Success; - } - - PacketParseResult getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, - FFXIVARR_PACKET_RAW &packet ) - { - // Copy segment header - const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); - if( headerResult != Success ) - return headerResult; - - // Check header sanity and it's size - if( !checkSegmentHeader( packet.segHdr ) ) - return Malformed; - - const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER ); - const auto dataSize = packet.segHdr.size; - - // Allocate data buffer and copy - packet.data.resize( dataSize ); - memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize ); - - return Success; - } - - bool checkHeader( const FFXIVARR_PACKET_HEADER &header ) - { - // Max size of the packet is capped at 1MB for now. - if( header.size > 1 * 1024 * 1024 ) - return false; - - // Max number of message is capped at 255 for now. - if( header.count > 255 ) - return false; - - return true; - } - - bool checkSegmentHeader( const FFXIVARR_PACKET_SEGMENT_HEADER &header ) - { - // Max size of individual message is capped at 256KB for now. - if( header.size > 256 * 1024 ) - return false; - - return true; - } - } - } + return Success; +} + +PacketParseResult Core::Network::Packets::getSegmentHeader( const std::vector< uint8_t > &buffer, + const uint32_t offset, + FFXIVARR_PACKET_SEGMENT_HEADER &header ) +{ + const auto headerSize = sizeof( FFXIVARR_PACKET_SEGMENT_HEADER ); + + // Check if we have enough bytes in the buffer. + auto remainingBytes = buffer.size() - offset; + if( remainingBytes < headerSize ) + return Incomplete; + + // Copy segment header + memcpy( &header, buffer.data() + offset, headerSize ); + + return Success; +} + +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 ) +{ + // sanity check: check there's enough bytes in the buffer + const auto bytesExpected = packetHeader.size - sizeof( struct FFXIVARR_PACKET_HEADER ); + if( buffer.size() - offset < bytesExpected ) + return Incomplete; + + // Loop each message + uint32_t count = 0; + uint32_t bytesProcessed = 0; + while( count < packetHeader.count ) + { + FFXIVARR_PACKET_RAW rawPacket; + + // Copy ipc packet message + const auto packetResult = getPacket( buffer, offset + bytesProcessed, rawPacket ); + if( packetResult != Success ) + return packetResult; + + // NOTE: isn't rawPacket is allocated on stack? + // why is okay to do this? + packets.push_back( rawPacket ); + + // Add message size and count + bytesProcessed += rawPacket.segHdr.size; + count += 1; + } + + // sanity check: check if we processed all bytes. + // this check can fail if size of messages don't add up to size reported from packet header. + if( bytesExpected != bytesProcessed ) + return Malformed; + + return Success; +} + +PacketParseResult Core::Network::Packets::getPacket( const std::vector< uint8_t > &buffer, const uint32_t offset, + FFXIVARR_PACKET_RAW &packet ) +{ + // Copy segment header + const auto headerResult = getSegmentHeader( buffer, offset, packet.segHdr ); + if( headerResult != Success ) + return headerResult; + + // Check header sanity and it's size + if( !checkSegmentHeader( packet.segHdr ) ) + return Malformed; + + const auto dataOffset = offset + sizeof( struct FFXIVARR_PACKET_SEGMENT_HEADER ); + const auto dataSize = packet.segHdr.size; + + // Allocate data buffer and copy + packet.data.resize( dataSize ); + memcpy( packet.data.data(), buffer.data() + dataOffset, dataSize ); + + return Success; +} + +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 ) + return false; + + // Max number of message is capped at 255 for now. + if( header.count > 255 ) + return false; + + return true; +} + +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 ) + return false; + + return true; } diff --git a/src/common/Network/GamePacketParser.h b/src/common/Network/GamePacketParser.h index 1ffda893..6f870bd2 100644 --- a/src/common/Network/GamePacketParser.h +++ b/src/common/Network/GamePacketParser.h @@ -2,62 +2,49 @@ #define _GAMEPACKETPARSER_H #include "CommonNetwork.h" -namespace Core -{ - namespace Network +namespace Core { +namespace Network { +namespace Packets { + + enum PacketParseResult { - namespace Packets - { - enum PacketParseResult - { - /// Dissected game packet successfully - Success, + /// Dissected game packet successfully + Success, - /// Buffer is too short to dissect a message. - Incomplete, - - /// Invalid data detected. - Malformed - }; + /// Buffer is too short to dissect a message. + Incomplete, - /// 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 - ); + /// Invalid data detected. + Malformed + }; - /// 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 - ); + /// 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 ); - /// 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, - 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 - ); + /// 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 ); - bool checkHeader(const FFXIVARR_PACKET_HEADER &header); - bool checkSegmentHeader(const 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, + 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 ); + + bool checkHeader(const FFXIVARR_PACKET_HEADER &header); + bool checkSegmentHeader(const FFXIVARR_PACKET_SEGMENT_HEADER &header); + +} +} } From 3cb88883f803a99988014dc666845ab49556993b Mon Sep 17 00:00:00 2001 From: Perize Date: Sun, 10 Jun 2018 13:26:43 +0900 Subject: [PATCH 13/13] opcode --- src/common/Common.h | 2 ++ src/common/Network/PacketDef/Ipcs.h | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/common/Common.h b/src/common/Common.h index a1214d01..18f2cce8 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -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, diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 0515d755..56f8e6a0 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -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