2017-08-08 13:53:47 +02:00
/**
* IPC Packet Definitions ( Server IPC Packets )
* Structural definitions for the various server IPC packet types .
* IMPORTANT NOTE : Do not use these for parsing IPC packets sent by the
* client . See the Client namespace for those types !
*/
2017-08-21 00:02:41 +02:00
# ifndef _CORE_NETWORK_PACKETS_ZONE_SERVER_IPC_H
# define _CORE_NETWORK_PACKETS_ZONE_SERVER_IPC_H
2017-08-08 13:53:47 +02:00
2018-03-06 22:22:19 +01:00
# include <Common.h>
# include <Network/CommonNetwork.h>
2017-08-08 13:53:47 +02:00
2018-11-29 16:55:48 +01:00
namespace Sapphire {
2017-08-08 13:53:47 +02:00
namespace Network {
namespace Packets {
namespace Server {
/**
* Structural representation of the packet sent by the server as response
* to a ping packet
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPing :
FFXIVIpcBasePacket < Ping >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint64_t timeInMilliseconds ;
/* 0008 */ uint8_t unknown_8 [ 0x38 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server as response
* to a ping packet
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcInit :
FFXIVIpcBasePacket < Init >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t unknown ;
uint32_t charId ;
uint32_t unknown1 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* carrying chat messages
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcChat :
FFXIVIpcBasePacket < Chat >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint8_t padding [ 14 ] ; //Maybe this is SubCode, or some kind of talker ID...
Common : : ChatType chatType ;
char name [ 32 ] ;
char msg [ 1012 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcChatBanned :
FFXIVIpcBasePacket < ChatBanned >
2017-09-10 14:02:16 +09:00
{
2018-08-29 21:40:59 +02:00
uint8_t padding [ 4 ] ; // I was not sure reinterpreting ZST is valid behavior in C++.
// client doesn't care about the data (zero sized) for this opcode anyway.
2017-09-10 14:02:16 +09:00
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* carrying chat messages
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcLogout :
FFXIVIpcBasePacket < Logout >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t flags1 ;
uint32_t flags2 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* sent to show the play time
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPlayTime :
FFXIVIpcBasePacket < Playtime >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t playTimeInMinutes ;
uint32_t padding ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* with a list of players ( party list | friend list | search results )
*/
2018-08-29 21:40:59 +02:00
struct PlayerEntry
{
uint64_t contentId ;
uint8_t bytes [ 12 ] ;
uint16_t zoneId ;
uint16_t zoneId1 ;
char bytes1 [ 8 ] ;
uint64_t onlineStatusMask ;
uint8_t classJob ;
uint8_t padding ;
uint8_t level ;
uint8_t padding1 ;
uint16_t padding2 ;
uint8_t one ;
char name [ 0x20 ] ;
char fcTag [ 9 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcSocialList :
FFXIVIpcBasePacket < SocialList >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t padding ;
uint32_t padding1 ;
uint32_t padding2 ;
uint8_t type ;
uint8_t sequence ;
uint16_t padding3 ;
2017-08-08 13:53:47 +02:00
2018-08-29 21:40:59 +02:00
PlayerEntry entries [ 10 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcSetSearchInfo :
FFXIVIpcBasePacket < UpdateSearchInfo >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t onlineStatusFlags ;
uint64_t unknown ;
uint32_t unknown1 ;
uint8_t padding ;
uint8_t selectRegion ;
char searchMessage [ 193 ] ;
uint8_t padding2 ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcInitSearchInfo :
FFXIVIpcBasePacket < InitSearchInfo >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t onlineStatusFlags ;
uint64_t unknown ;
uint8_t unknown1 ;
uint8_t selectRegion ;
char searchMessage [ 193 ] ;
char padding [ 5 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-09-10 14:34:24 +01:00
struct FFXIVIpcExamineSearchComment :
FFXIVIpcBasePacket < ExamineSearchComment >
{
uint32_t charId ;
// packet only has 196 bytes after the charid
// likely utf8
char searchComment [ 195 ] ;
char padding ;
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to display a server notice message
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcServerNotice :
FFXIVIpcBasePacket < ServerNotice >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint8_t padding ;
2019-01-09 23:57:49 +01:00
char message [ 775 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcSetOnlineStatus :
FFXIVIpcBasePacket < SetOnlineStatus >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t onlineStatusFlags ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcBlackList :
FFXIVIpcBasePacket < BlackList >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
struct BlEntry
{
uint64_t contentId ;
char name [ 32 ] ;
} entry [ 20 ] ;
uint8_t padding ;
uint8_t padding1 ;
uint16_t sequence ;
uint32_t padding2 ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcLogMessage :
FFXIVIpcBasePacket < LogMessage >
2017-08-28 18:36:51 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t field_0 ;
uint32_t field_4 ;
uint32_t field_8 ;
uint32_t field_12 ;
uint32_t category ;
uint32_t logMessage ;
uint8_t field_24 ;
uint8_t field_25 ;
uint8_t field_26 [ 32 ] ;
uint32_t field_58 ;
2017-08-28 18:36:51 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcLinkshellList :
FFXIVIpcBasePacket < LinkshellList >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
struct LsEntry
{
uint64_t lsId ;
uint64_t unknownId ;
uint8_t unknown ;
uint8_t rank ;
uint16_t padding ;
uint8_t lsName [ 20 ] ;
} entry [ 8 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-10-03 01:22:43 +10:00
/**
* Structural representation of the packet sent by the server
* to send a list of mail the player has
*/
struct FFXIVIpcReqMoogleMailList :
FFXIVIpcBasePacket < ReqMoogleMailList >
{
2018-10-05 19:22:12 +10:00
struct letterEntry
{
2018-10-03 01:22:43 +10:00
char unk [ 0x8 ] ;
uint32_t timeStamp ; // The time the mail was sent (this also seems to be used as a Id)
char unk1 [ 0x30 ] ; // This should be items, gil, etc for the letter
uint8_t read ; // 0 = false | 1 = true
uint8_t type ; // 0 = Friends | 1 = Rewards | 2 = GM
uint8_t unk2 ;
char senderName [ 0x20 ] ; // The name of the sender
char summary [ 0x3C ] ; // The start of the full letter text
char padding2 [ 0x5 ] ;
} letter [ 5 ] ;
char unk3 [ 0x08 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to show the mail delivery notification
*/
struct FFXIVIpcMailLetterNotificationt :
FFXIVIpcBasePacket < MailLetterNotification >
{
uint32_t sendbackCount ; // The amount of letters sent back since you ran out of room (moogle dialog changes based on this)
uint16_t friendLetters ; // The amount of letters in the friends section of the letterbox
uint16_t unreadCount ; // The amount of unreads in the letterbox (this is the number that shows up)
uint16_t rewardLetters ; // The amount of letters in the rewards section of the letterbox
uint8_t isGmLetter ; // Makes the letter notification flash red
uint8_t isSupportDesk ; // After setting this to 1 we can no longer update mail notifications (more research needed on the support desk)
char unk2 [ 0x4 ] ; // This has probs something to do with the support desk (inquiry id?)
} ;
2018-09-10 14:34:24 +01:00
struct FFXIVIpcExamineFreeCompanyInfo :
FFXIVIpcBasePacket < ExamineFreeCompanyInfo >
{
char unknown [ 0x20 ] ; // likely fc allegiance/icon/housing info etc
uint32_t charId ;
uint32_t fcTimeCreated ;
char unknown2 [ 0x10 ] ;
uint16_t unknown3 ;
char fcName [ 0x14 ] ; // 20 char limit
uint16_t padding ;
char fcTag [ 0x05 ] ; // 5 char tag limit
uint16_t padding2 ; // null terminator?
char fcLeader [ 0x20 ] ; // leader name (32 bytes)
char fcSlogan [ 192 ] ; // source: https://ffxiv.gamerescape.com/wiki/Free_Company (packet cap confirms this size also)
char padding3 ; // null terminator?
char fcEstateProfile [ 20 ] ; // todo: size needs confirmation
uint32_t padding4 ;
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcStatusEffectList :
FFXIVIpcBasePacket < StatusEffectList >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t classId ;
uint8_t level1 ;
uint16_t level ;
uint32_t current_hp ;
uint32_t max_hp ;
uint16_t current_mp ;
uint16_t max_mp ;
uint16_t currentTp ;
uint16_t unknown1 ;
Common : : StatusEffect effect [ 30 ] ;
uint32_t padding ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVGCAffiliation :
FFXIVIpcBasePacket < GCAffiliation >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t gcId ;
uint8_t gcRank [ 3 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* add a status effect
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcAddStatusEffect :
FFXIVIpcBasePacket < AddStatusEffect >
{
uint32_t unknown ;
uint32_t actor_id ;
uint8_t unknown1 ;
uint8_t unknown2 ;
uint16_t padding1 ;
uint32_t current_hp ;
uint16_t current_mp ;
uint16_t current_tp ;
uint32_t max_hp ;
uint16_t max_mp ;
uint16_t max_something ;
uint8_t effect_index ; // which position do i display this
uint8_t unknown3 ;
uint16_t effect_id ;
uint16_t param ;
uint16_t unknown5 ; // Sort this out (old right half of power/param property)
float duration ;
uint32_t actor_id1 ;
uint8_t unknown4 [ 52 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorControl142 :
FFXIVIpcBasePacket < ActorControl142 >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint16_t category ;
/* 0002 */ uint16_t padding ;
/* 0004 */ uint32_t param1 ;
/* 0008 */ uint32_t param2 ;
/* 000C */ uint32_t param3 ;
/* 0010 */ uint32_t param4 ;
/* 0014 */ uint32_t padding1 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorControl143 :
FFXIVIpcBasePacket < ActorControl143 >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint16_t category ;
/* 0002 */ uint16_t padding ;
/* 0004 */ uint32_t param1 ;
/* 0008 */ uint32_t param2 ;
/* 000C */ uint32_t param3 ;
/* 0010 */ uint32_t param4 ;
/* 0014 */ uint32_t param5 ;
/* 0018 */ uint32_t param6 ;
/* 0018 */ uint32_t padding1 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorControl144 :
FFXIVIpcBasePacket < ActorControl144 >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint16_t category ;
/* 0002 */ uint16_t padding ;
/* 0004 */ uint32_t param1 ;
/* 0008 */ uint32_t param2 ;
/* 000C */ uint32_t param3 ;
/* 0010 */ uint32_t param4 ;
/* 0014 */ uint32_t padding1 ;
/* 0018 */ uint64_t targetId ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update HP / MP / TP
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcUpdateHpMpTp :
FFXIVIpcBasePacket < UpdateHpMpTp >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint32_t hp ;
/* 0004 */ uint16_t mp ;
/* 0006 */ uint16_t tp ;
/* 0008 */ uint32_t unknown_8 ;
/* 000C */ uint32_t unknown_12 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
2017-08-14 17:10:19 +02:00
* for battle actions
2017-08-08 13:53:47 +02:00
*/
2018-07-21 23:32:10 +10:00
struct EffectEntry
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
Common : : ActionEffectType effectType ;
Common : : ActionHitSeverityType hitSeverity ;
uint8_t param ;
int8_t bonusPercent ; // shows an additional percentage in the battle log, will not change the damage number sent & shown
uint8_t valueMultiplier ; // This multiplies whatever value is in the 'value' param by 10. Possibly a workaround for big numbers
uint8_t flags ;
int16_t value ;
2017-08-08 13:53:47 +02:00
} ;
2018-07-22 16:54:23 +10:00
struct EffectHeader
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t animationTargetId ; // who the animation targets
uint32_t actionId ; // what the casting player casts, shown in battle log/ui
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint32_t globalEffectCounter ; // seems to only increment on retail?
float animationLockTime ; // maybe? doesn't seem to do anything
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint32_t someTargetId ; // always 00 00 00 E0, 0x0E000000 is the internal def for INVALID TARGET ID
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint16_t hiddenAnimation ; // if 0, always shows animation, otherwise hides it. counts up by 1 for each animation skipped on a caster
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint16_t rotation ;
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint16_t actionAnimationId ; // the animation that is played by the casting character
uint8_t unknown1E ; // can be 0,1,2 - maybe other values? - doesn't do anything?
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
Common : : ActionEffectDisplayType effectDisplayType ;
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint8_t unknown20 ; // is read by handler, runs code which gets the LODWORD of animationLockTime (wtf?)
uint8_t effectCount ; // ignores effects if 0, otherwise parses all of them
2018-07-21 15:39:58 +10:00
2018-08-29 21:40:59 +02:00
uint32_t padding_22 [ 2 ] ;
2018-07-22 16:54:23 +10:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEffect :
FFXIVIpcBasePacket < Effect >
2018-07-22 16:54:23 +10:00
{
2018-08-29 21:40:59 +02:00
EffectHeader header ;
2018-07-20 22:39:10 +02:00
2018-08-29 21:40:59 +02:00
EffectEntry effects [ 8 ] ;
2018-07-20 22:39:10 +02:00
2018-08-29 21:40:59 +02:00
uint16_t padding_6A [ 3 ] ;
2018-07-20 22:39:10 +02:00
2018-08-29 21:40:59 +02:00
uint32_t effectTargetId ; // who the effect targets
uint32_t effectFlags ; // nonzero = effects do nothing, no battle log, no ui text - only shows animations
2018-07-20 22:39:10 +02:00
2018-08-29 21:40:59 +02:00
uint32_t padding_78 ;
2017-08-08 13:53:47 +02:00
} ;
2018-07-21 23:48:14 +10:00
template < int size >
struct FFXIVIpcAoeEffect
{
2018-08-29 21:40:59 +02:00
EffectHeader header ;
2018-07-21 23:48:14 +10:00
2018-08-29 21:40:59 +02:00
EffectEntry effects [ size ] ;
2018-07-21 23:48:14 +10:00
2018-08-29 21:40:59 +02:00
uint16_t padding_6A [ 3 ] ;
2018-07-21 23:48:14 +10:00
2018-08-29 21:40:59 +02:00
uint32_t effectTargetId [ size ] ;
Common : : FFXIVARR_POSITION3 position ;
uint32_t effectFlags ;
2018-07-21 23:48:14 +10:00
2018-08-29 21:40:59 +02:00
uint32_t padding_78 ;
2018-07-21 23:48:14 +10:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcAoeEffect8 :
FFXIVIpcBasePacket < AoeEffect8 > , FFXIVIpcAoeEffect < 8 >
{
} ;
struct FFXIVIpcAoeEffect16 :
FFXIVIpcBasePacket < AoeEffect16 > , FFXIVIpcAoeEffect < 16 >
{
} ;
struct FFXIVIpcAoeEffect24 :
FFXIVIpcBasePacket < AoeEffect24 > , FFXIVIpcAoeEffect < 24 >
{
} ;
struct FFXIVIpcAoeEffect32 :
FFXIVIpcBasePacket < AoeEffect32 > , FFXIVIpcAoeEffect < 32 >
{
} ;
2018-07-21 23:48:14 +10:00
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to spawn an actor
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPlayerSpawn :
FFXIVIpcBasePacket < PlayerSpawn >
{
uint16_t title ;
uint16_t u1b ;
2019-01-10 17:34:22 +11:00
uint16_t currentWorldId ;
uint16_t homeWorldId ;
2018-08-29 21:40:59 +02:00
2018-09-19 22:25:14 +10:00
uint8_t gmRank ;
2018-08-29 21:40:59 +02:00
uint8_t u3c ;
2018-09-25 22:40:57 +10:00
uint8_t u4 ;
uint8_t onlineStatus ;
2018-08-29 21:40:59 +02:00
2018-09-25 22:40:57 +10:00
uint8_t pose ;
uint8_t u5a ;
uint8_t u5b ;
uint8_t u5c ;
2018-08-29 21:40:59 +02:00
uint64_t targetId ;
uint32_t u6 ;
uint32_t u7 ;
uint64_t mainWeaponModel ;
uint64_t secWeaponModel ;
uint64_t craftToolModel ;
uint32_t u14 ;
uint32_t u15 ;
uint32_t bNPCBase ;
uint32_t bNPCName ;
uint32_t u18 ;
uint32_t u19 ;
uint32_t directorId ;
uint32_t ownerId ;
uint32_t u22 ;
uint32_t hPMax ;
uint32_t hPCurr ;
uint32_t displayFlags ;
uint16_t fateID ;
uint16_t mPCurr ;
uint16_t tPCurr ;
uint16_t mPMax ;
uint16_t tPMax ;
uint16_t modelChara ;
uint16_t rotation ;
uint16_t activeMinion ;
uint8_t spawnIndex ;
uint8_t state ;
uint8_t persistentEmote ;
uint8_t modelType ;
uint8_t subtype ;
uint8_t voice ;
uint16_t u25c ;
uint8_t enemyType ;
uint8_t level ;
uint8_t classJob ;
uint8_t u26d ;
uint16_t u27a ;
uint8_t currentMount ;
uint8_t mountHead ;
uint8_t mountBody ;
uint8_t mountFeet ;
uint8_t mountColor ;
uint8_t scale ;
uint32_t u29b ;
uint32_t u30b ;
Common : : StatusEffect effect [ 30 ] ;
Common : : FFXIVARR_POSITION3 pos ;
uint32_t models [ 10 ] ;
char name [ 32 ] ;
uint8_t look [ 26 ] ;
char fcTag [ 6 ] ;
uint32_t unk30 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to spawn an actor
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcNpcSpawn :
FFXIVIpcBasePacket < NpcSpawn >
{
uint32_t gimmickId ; // needs to be existing in the map, mob will snap to it
uint8_t u2b ;
uint8_t u2ab ;
uint8_t gmRank ;
uint8_t u3b ;
uint8_t aggressionMode ; // 1 passive, 2 aggressive
uint8_t onlineStatus ;
uint8_t u3c ;
uint8_t pose ;
uint32_t u4 ;
uint64_t targetId ;
uint32_t u6 ;
uint32_t u7 ;
uint64_t mainWeaponModel ;
uint64_t secWeaponModel ;
uint64_t craftToolModel ;
uint32_t u14 ;
uint32_t u15 ;
uint32_t bNPCBase ;
uint32_t bNPCName ;
uint32_t u18 ;
uint32_t u19 ;
uint32_t directorId ;
uint32_t spawnerId ;
uint32_t parentActorId ;
uint32_t hPMax ;
uint32_t hPCurr ;
uint32_t displayFlags ;
uint16_t fateID ;
uint16_t mPCurr ;
uint16_t tPCurr ;
uint16_t mPMax ;
uint16_t tPMax ;
uint16_t modelChara ;
uint16_t rotation ;
uint16_t activeMinion ;
uint8_t spawnIndex ;
uint8_t state ;
uint8_t persistantEmote ;
uint8_t modelType ;
uint8_t subtype ;
uint8_t voice ;
uint16_t u25c ;
uint8_t enemyType ;
uint8_t level ;
uint8_t classJob ;
uint8_t u26d ;
uint16_t u27a ;
uint8_t currentMount ;
uint8_t mountHead ;
uint8_t mountBody ;
uint8_t mountFeet ;
uint8_t mountColor ;
uint8_t scale ;
uint32_t u29b ;
uint32_t u30b ;
Common : : StatusEffect effect [ 30 ] ;
Common : : FFXIVARR_POSITION3 pos ;
uint32_t models [ 10 ] ;
char name [ 32 ] ;
uint8_t look [ 26 ] ;
char fcTag [ 6 ] ;
uint32_t unk30 ;
uint32_t unk31 ;
uint8_t bNPCPartSlot ;
uint8_t unk32 ;
uint16_t unk33 ;
uint32_t unk34 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to show player movement
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorFreeSpawn :
FFXIVIpcBasePacket < ActorFreeSpawn >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t spawnId ;
uint32_t actorId ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to show player movement
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorMove :
FFXIVIpcBasePacket < ActorMove >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint8_t rotation ;
/* 0001 */ uint8_t unknown_1 ;
/* 0002 */ uint8_t unknown_2 ;
/* 0003 */ uint8_t unknown_3 ;
/* 0004 */ uint16_t unknown_4 ;
/* 0006 */ uint16_t posX ;
/* 0008 */ uint16_t posY ;
/* 000a */ uint16_t posZ ;
/* 000C */ uint32_t unknown_12 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to set an actors position
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorSetPos :
FFXIVIpcBasePacket < ActorSetPos >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint16_t r16 ;
uint8_t waitForLoad ;
uint8_t unknown1 ;
uint32_t unknown2 ;
float x ;
float y ;
float z ;
uint32_t unknown3 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to start an actors casting
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorCast :
FFXIVIpcBasePacket < ActorCast >
{
uint16_t action_id ;
Common : : SkillType skillType ;
uint8_t unknown ;
uint32_t unknown_1 ; // Also action id
float cast_time ;
uint32_t target_id ;
float rotation ; // In radians
uint32_t unknown_2 ;
uint16_t posX ;
uint16_t posY ;
uint16_t posZ ;
uint16_t unknown_3 ;
} ;
struct FFXIVIpcHateList :
FFXIVIpcBasePacket < HateList >
{
uint32_t numEntries ;
struct LsEntry
{
uint32_t actorId ;
uint8_t hatePercent ;
uint8_t unknown ;
uint16_t padding ;
} entry [ 32 ] ;
uint32_t padding ;
} ;
struct FFXIVIpcUpdateClassInfo :
FFXIVIpcBasePacket < UpdateClassInfo >
{
uint8_t classId ;
uint8_t level1 ;
uint16_t level ;
uint32_t nextLevelIndex ;
uint32_t currentExp ;
uint32_t restedExp ;
2017-08-08 13:53:47 +02:00
} ;
2017-10-08 15:53:00 -03:00
2017-10-06 20:40:27 -03:00
/**
* Structural representation of the packet sent by the server
* to send the titles available to the player
*/
2018-09-18 23:23:18 +02:00
struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket < PlayerTitleList >
2017-10-06 20:40:27 -03:00
{
2018-08-29 21:40:59 +02:00
uint8_t titleList [ 48 ] ;
2017-10-06 20:40:27 -03:00
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to initialize a zone for the player
*/
2018-09-18 23:23:18 +02:00
struct FFXIVIpcInitZone : FFXIVIpcBasePacket < InitZone >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint16_t serverId ;
uint16_t zoneId ;
uint16_t unknown1 ;
uint16_t unknown2 ;
uint32_t unknown3 ;
uint32_t unknown4 ;
uint8_t weatherId ;
2018-11-06 23:25:37 +01:00
uint8_t bitmask ;
uint8_t bitmask1 ;
2018-09-19 23:53:34 +10:00
uint8_t unknown5 ;
2018-08-29 21:40:59 +02:00
uint16_t festivalId ;
2018-09-01 20:55:28 +10:00
uint16_t additionalFestivalId ;
2018-08-29 21:40:59 +02:00
uint32_t unknown8 ;
2018-09-18 22:45:48 +02:00
uint32_t unknown9 ;
uint32_t unknown10 ;
uint32_t unknown11 ;
2019-01-08 21:49:31 +11:00
uint32_t unknown12 [ 4 ] ;
2018-08-29 21:40:59 +02:00
Common : : FFXIVARR_POSITION3 pos ;
2019-01-08 21:49:31 +11:00
uint32_t unknown13 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server to initialize
* the client UI upon initial connection .
*/
2018-09-18 23:23:18 +02:00
struct FFXIVIpcInitUI : FFXIVIpcBasePacket < InitUI >
2018-08-29 21:40:59 +02:00
{
// plain C types for a bit until the packet is actually fixed.
// makes conversion between different editors easier.
uint64_t contentId ;
unsigned int unknown8 ;
unsigned int unknownC ;
unsigned int charId ;
unsigned int restedExp ;
unsigned int companionCurrentExp ;
unsigned int unknown1C ;
unsigned int fishCaught ;
unsigned int useBaitCatalogId ;
unsigned int unknown28 ;
2019-01-12 10:47:45 +01:00
unsigned short unknownPvp2C ;
unsigned short unknown3 ;
2018-08-29 21:40:59 +02:00
unsigned int pvpFrontlineOverallCampaigns ;
unsigned int unknownTimestamp34 ;
unsigned int unknownTimestamp38 ;
unsigned int unknown3C ;
unsigned int unknown40 ;
unsigned int unknown44 ;
float companionTimePassed ;
unsigned int unknown4C ;
2019-01-12 10:47:45 +01:00
unsigned short unknown50 ;
unsigned short unknownPvp52 [ 4 ] ;
unsigned short playerCommendations ;
unsigned short unknown5C ;
unsigned short unknown5E ;
unsigned short pvpFrontlineWeeklyCampaigns ;
unsigned short enhancedAnimaGlassProgress ;
unsigned short unknown64 [ 4 ] ;
unsigned short pvpRivalWingsTotalMatches ;
unsigned short pvpRivalWingsTotalVictories ;
unsigned short pvpRivalWingsWeeklyMatches ;
unsigned short pvpRivalWingsWeeklyVictories ;
unsigned char maxLevel ;
unsigned char expansion ;
unsigned char unknown76 ;
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 unknown81 ;
unsigned char petHotBar ;
unsigned char companionRank ;
unsigned char companionStars ;
unsigned char companionSp ;
unsigned char companionUnk86 ;
unsigned char companionColor ;
unsigned char companionFavoFeed ;
unsigned char unknown89 ;
unsigned char unknown8A [ 4 ] ;
unsigned char hasRelicBook ;
unsigned char relicBookId ;
unsigned char unknown90 [ 4 ] ;
unsigned char craftingMasterMask ;
unsigned char unknown95 [ 10 ] ;
unsigned char unknown9F [ 2 ] ;
unsigned char unknownA1 [ 3 ] ;
2019-01-08 23:58:14 +01:00
unsigned int exp [ 26 ] ;
2018-08-29 21:40:59 +02:00
unsigned int unknown108 ;
unsigned int pvpTotalExp ;
unsigned int unknownPvp110 ;
unsigned int pvpExp ;
unsigned int pvpFrontlineOverallRanks [ 3 ] ;
2019-01-12 10:47:45 +01:00
unsigned short levels [ 26 ] ;
unsigned short unknown15C [ 9 ] ;
unsigned short u1 ;
unsigned short u2 ;
unsigned short unknown112 [ 23 ] ;
unsigned short fishingRecordsFish [ 26 ] ;
unsigned short beastExp [ 11 ] ;
unsigned short unknown1EA [ 5 ] ;
unsigned short pvpFrontlineWeeklyRanks [ 3 ] ;
unsigned short unknownMask1FA [ 4 ] ;
unsigned char companionName [ 21 ] ;
unsigned char companionDefRank ;
unsigned char companionAttRank ;
unsigned char companionHealRank ;
unsigned char unknown21A [ 19 ] ;
2018-08-29 21:40:59 +02:00
char name [ 32 ] ;
2019-01-12 10:47:45 +01:00
unsigned char unknownOword [ 16 ] ;
unsigned char unknownOw ;
unsigned char unlockBitmask [ 64 ] ;
unsigned char aetheryte [ 17 ] ;
unsigned char discovery [ 421 ] ;
unsigned char howto [ 34 ] ;
unsigned char minions [ 42 ] ;
unsigned char chocoboTaxiMask [ 8 ] ;
unsigned char watchedCutscenes [ 118 ] ;
unsigned char companionBardingMask [ 9 ] ;
unsigned char companionEquippedHead ;
unsigned char companionEquippedBody ;
unsigned char companionEquippedLegs ;
unsigned char unknown52A [ 4 ] ;
unsigned char unknownMask52E [ 11 ] ;
unsigned char fishingGuideMask [ 89 ] ;
unsigned char fishingSpotVisited [ 25 ] ;
unsigned char unknown59A [ 15 ] ;
unsigned char unknown5A9 [ 5 ] ;
unsigned char beastRank [ 11 ] ;
unsigned char unknownPvp5AB [ 11 ] ;
unsigned char unknown5B9 [ 5 ] ;
unsigned char unknown5B91 ;
unsigned char pose ;
unsigned char challengeLogComplete [ 9 ] ;
unsigned char weaponPose ;
unsigned char unknownMask673 [ 10 ] ;
unsigned char unknownMask5DD [ 28 ] ;
unsigned char relicCompletion [ 12 ] ;
unsigned char unknown694 [ 26 ] ;
unsigned char huntingMarkMask [ 55 ] ;
unsigned char tripleTriadCards [ 32 ] ;
unsigned char animaCompletion [ 11 ] ;
unsigned char u13 ;
unsigned char aetherCurrentMask [ 22 ] ;
unsigned char u10 [ 3 ] ;
unsigned char orchestrionMask [ 40 ] ;
unsigned char u11 [ 3 ] ;
unsigned char u12 [ 11 ] ;
unsigned char u14 [ 16 ] ;
unsigned char u15 [ 13 ] ;
unsigned char unlockedRaids [ 28 ] ;
unsigned char unlockedDungeons [ 18 ] ;
unsigned char unlockedGuildhests [ 10 ] ;
unsigned char unlockedTrials [ 8 ] ;
unsigned char unlockedPvp [ 5 ] ;
unsigned char clearedRaids [ 28 ] ;
unsigned char clearedDungeons [ 18 ] ;
unsigned char clearedGuildhests [ 10 ] ;
unsigned char clearedTrials [ 8 ] ;
unsigned char clearedPvp [ 5 ] ;
unsigned char mountGuideMask [ 17 ] ;
unsigned short fishingRecordsFishWeight [ 26 ] ;
2019-01-12 00:19:23 +01:00
unsigned int exploratoryMissionNextTimestamp ;
2019-01-12 10:47:45 +01:00
unsigned char pvpLevel ;
unsigned char sightseeingMask [ 26 ] ;
2017-08-08 13:53:47 +02:00
} ;
2019-01-12 00:19:23 +01:00
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to set a players stats
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPlayerStats :
FFXIVIpcBasePacket < PlayerStats >
{
uint32_t strength ;
uint32_t dexterity ;
uint32_t vitality ;
uint32_t intelligence ;
uint32_t mind ;
uint32_t piety ;
uint32_t hp ;
uint32_t mp ;
uint32_t tp ;
uint32_t unknown ;
uint32_t unknown_1 ;
uint32_t unknown_2 ;
uint32_t tenacity ;
uint32_t attack ;
uint32_t defense ;
uint32_t accuracy ;
uint32_t spellSpeed ;
uint32_t magicDefense ;
uint32_t criticalHitRate ;
uint32_t resistanceSlashing ;
uint32_t resistancePiercing ;
uint32_t resistanceBlunt ;
uint32_t attackMagicPotency ;
uint32_t healingMagicPotency ;
uint32_t fire ;
uint32_t ice ;
uint32_t wind ;
uint32_t earth ;
uint32_t lightning ;
uint32_t water ;
uint32_t determination ;
uint32_t skillSpeed ;
uint32_t spellSpeed1 ;
uint32_t spellSpeedMod ;
uint32_t unknown_6 ;
uint32_t craftsmanship ;
uint32_t control ;
uint32_t gathering ;
uint32_t perception ;
uint32_t resistanceSlow ;
uint32_t resistanceSilence ;
uint32_t resistanceBlind ;
uint32_t resistancePoison ;
uint32_t resistanceStun ;
uint32_t resistanceSleep ;
uint32_t resistanceBind ;
uint32_t resistanceHeavy ;
uint32_t unknown_7 [ 9 ] ; // possibly level sync stats.
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to set an actors current owner
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcActorOwner :
FFXIVIpcBasePacket < ActorOwner >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t type ;
uint8_t padding [ 7 ] ;
uint32_t actorId ;
uint32_t actorId2 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to set a players state
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPlayerStateFlags :
FFXIVIpcBasePacket < PlayerStateFlags >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t flags [ 12 ] ;
uint32_t padding ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* containing current class information
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPlayerClassInfo :
FFXIVIpcBasePacket < PlayerClassInfo >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint16_t classId ;
uint8_t unknown ;
uint8_t isSpecialist ;
2018-10-20 15:39:20 +03:00
uint16_t syncedLevel ; // Locks actions, equipment, prob more. Player's current level (synced).
uint16_t classLevel ; // Locks roles, prob more. Player's actual unsynced level.
2018-08-29 21:40:59 +02:00
uint32_t roleActions [ 10 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcModelEquip :
FFXIVIpcBasePacket < ModelEquip >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint64_t mainWeapon ;
/* 0008 */ uint64_t offWeapon ;
2018-10-18 20:46:55 +11:00
/* 0010 */ uint8_t unk1 ;
/* 0011 */ uint8_t classJobId ;
/* 0012 */ uint8_t level ;
/* 0013 */ uint8_t unk2 ;
2018-08-29 21:40:59 +02:00
/* 0014 */ uint32_t models [ 10 ] ;
/* 003C */ uint32_t padding2 ;
2017-08-08 13:53:47 +02:00
} ;
2018-09-10 14:34:24 +01:00
struct FFXIVIpcExamine :
FFXIVIpcBasePacket < Examine >
{
uint8_t unkFlag1 ;
uint8_t unkFlag2 ;
char classJob ;
char level ;
uint16_t padding ;
uint16_t titleId ;
2018-09-12 17:58:19 +10:00
char grandCompany ;
char grandCompanyRank ;
2018-09-10 14:34:24 +01:00
2018-09-12 17:58:19 +10:00
char unknown [ 6 ] ;
uint32_t u6_fromPSpawn ;
uint32_t u7_fromPSpawn ;
char padding1 [ 8 ] ;
uint64_t mainWeaponModel ;
uint64_t secWeaponModel ;
char unknown2 [ 16 ] ;
2018-09-10 14:34:24 +01:00
struct ItemData
{
uint32_t catalogId ;
uint32_t appearanceCatalogId ;
2018-09-11 17:46:04 +01:00
uint64_t crafterId ;
uint8_t quality ;
uint8_t unknown [ 3 ] ;
2018-09-10 14:34:24 +01:00
struct Materia
{
uint16_t materiaId ;
uint16_t tier ;
} materia [ 5 ] ;
} entries [ 14 ] ;
char name [ 32 ] ;
char padding2 ;
char unk3 [ 16 ] ;
char look [ 26 ] ;
char padding3 [ 5 ] ;
2018-09-11 17:46:04 +01:00
uint32_t models [ 10 ] ;
char unknown4 [ 200 ] ;
} ;
struct FFXIVIpcCharaNameReq :
FFXIVIpcBasePacket < CharaNameReq >
{
uint64_t contentId ;
char name [ 32 ] ;
2018-09-10 14:34:24 +01:00
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcItemInfo :
FFXIVIpcBasePacket < ItemInfo >
{
2018-12-18 22:59:01 +11:00
uint32_t containerSequence ;
2018-08-29 21:40:59 +02:00
uint32_t unknown ;
uint16_t containerId ;
uint16_t slot ;
uint32_t quantity ;
uint32_t catalogId ;
uint32_t reservedFlag ;
uint64_t signatureId ;
uint8_t hqFlag ;
uint8_t unknown2 ;
uint16_t condition ;
uint16_t spiritBond ;
2018-09-01 00:00:19 +10:00
uint16_t stain ;
2018-08-29 21:40:59 +02:00
uint32_t glamourCatalogId ;
uint16_t materia1 ;
uint16_t materia2 ;
uint16_t materia3 ;
uint16_t materia4 ;
uint16_t materia5 ;
uint8_t buffer1 ;
uint8_t buffer2 ;
uint8_t buffer3 ;
uint8_t buffer4 ;
uint8_t buffer5 ;
uint8_t padding ;
uint32_t unknown10 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcContainerInfo :
FFXIVIpcBasePacket < ContainerInfo >
2017-08-08 13:53:47 +02:00
{
2018-12-18 22:59:01 +11:00
uint32_t containerSequence ;
2018-08-29 21:40:59 +02:00
uint32_t numItems ;
uint32_t containerId ;
uint32_t unknown ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCurrencyCrystalInfo :
FFXIVIpcBasePacket < CurrencyCrystalInfo >
2017-08-08 13:53:47 +02:00
{
2018-12-18 22:59:01 +11:00
uint32_t containerSequence ;
2018-08-29 21:40:59 +02:00
uint16_t containerId ;
uint16_t slot ;
uint32_t quantity ;
uint32_t unknown ;
uint32_t catalogId ;
uint32_t unknown1 ;
uint32_t unknown2 ;
uint32_t unknown3 ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcInventoryTransactionFinish :
FFXIVIpcBasePacket < InventoryTransactionFinish >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t transactionId ;
uint32_t transactionId1 ;
uint64_t padding ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcInventoryTransaction :
FFXIVIpcBasePacket < InventoryTransaction >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t transactionId ;
uint8_t type ;
uint8_t padding ;
uint16_t padding1 ;
uint32_t ownerId ;
uint32_t storageId ;
uint16_t slotId ;
uint16_t padding2 ;
uint32_t stackSize ;
uint32_t catalogId ;
uint32_t someActorId ;
int32_t targetStorageId ;
uint32_t padding3 [ 3 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcInventoryActionAck :
FFXIVIpcBasePacket < InventoryActionAck >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t sequence ;
uint16_t type ;
uint16_t padding ;
uint32_t padding1 ;
uint32_t padding2 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update a slot in the inventory
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcUpdateInventorySlot :
FFXIVIpcBasePacket < UpdateInventorySlot >
{
uint32_t sequence ;
uint32_t unknown ;
uint16_t containerId ;
uint16_t slot ;
uint32_t quantity ;
uint32_t catalogId ;
uint32_t reservedFlag ;
uint64_t signatureId ;
uint16_t hqFlag ;
uint16_t condition ;
uint16_t spiritBond ;
uint16_t color ;
uint32_t glamourCatalogId ;
uint16_t materia1 ;
uint16_t materia2 ;
uint16_t materia3 ;
uint16_t materia4 ;
uint16_t materia5 ;
uint8_t buffer1 ;
uint8_t buffer2 ;
uint8_t buffer3 ;
uint8_t buffer4 ;
uint8_t buffer5 ;
uint8_t padding ;
uint32_t unknown10 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to start an event , not actually playing it , but registering
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEventStart :
FFXIVIpcBasePacket < EventStart >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint64_t actorId ;
/* 0008 */ uint32_t eventId ;
/* 000C */ uint8_t param1 ;
/* 000D */ uint8_t param2 ;
/* 000E */ uint16_t padding ;
/* 0010 */ uint32_t param3 ;
/* 0014 */ uint32_t padding1 ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to play an event
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEventPlay :
FFXIVIpcBasePacket < EventPlay >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint64_t actorId ;
uint32_t eventId ;
uint16_t scene ;
uint16_t padding ;
uint32_t flags ;
uint32_t param3 ;
uint8_t param4 ;
uint8_t padding1 [ 3 ] ;
uint32_t param5 ;
uint8_t unknown [ 8 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
/**
2018-03-05 23:01:55 +01:00
* Structural representation of the packet sent by the server
* to play an event
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcDirectorPlayScene :
FFXIVIpcBasePacket < DirectorPlayScene >
{
uint64_t actorId ;
uint32_t eventId ;
uint16_t scene ;
uint16_t padding ;
uint32_t flags ;
uint32_t param3 ;
uint8_t param4 ;
uint8_t padding1 [ 3 ] ;
uint32_t param5 ;
uint8_t unknown8 [ 0x08 ] ;
uint8_t unknown [ 0x38 ] ;
2018-03-05 23:01:55 +01:00
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to finish an event
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEventFinish :
FFXIVIpcBasePacket < EventFinish >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint32_t eventId ;
/* 0004 */ uint8_t param1 ;
/* 0005 */ uint8_t param2 ;
/* 0006 */ uint16_t padding ;
/* 0008 */ uint32_t param3 ;
/* 000C */ uint32_t padding1 ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEventOpenGilShop :
FFXIVIpcBasePacket < EventOpenGilShop >
2018-07-22 22:11:03 +10:00
{
2018-08-29 21:40:59 +02:00
uint64_t actorId ;
uint32_t eventId ;
uint16_t scene ;
uint16_t padding ;
uint32_t sceneFlags ;
2018-07-22 22:11:03 +10:00
2018-08-29 21:40:59 +02:00
uint32_t unknown_wtf [ 0x101 ] ;
2018-07-22 22:11:03 +10:00
} ;
2017-08-27 02:03:27 +02:00
/**
* Structural representation of the packet sent by the server
* to respond to a linkshell creation event
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEventLinkshell :
FFXIVIpcBasePacket < EventLinkshell >
2017-08-27 02:03:27 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t eventId ;
uint8_t scene ;
uint8_t param1 ;
uint8_t param2 ;
uint8_t param3 ;
uint32_t unknown1 ;
uint32_t unknown2 ;
uint32_t unknown3 ;
uint32_t unknown4 ;
2017-08-27 02:03:27 +02:00
} ;
2017-08-08 13:53:47 +02:00
/**
* Structural representation of the packet sent by the server
* to send the active quests
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestActiveList :
FFXIVIpcBasePacket < QuestActiveList >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
Common : : QuestActive activeQuests [ 30 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to send update a quest slot
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestUpdate :
FFXIVIpcBasePacket < QuestUpdate >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint16_t slot ;
uint16_t padding ;
Common : : QuestActive questInfo ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to send the completed quests mask
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestCompleteList :
FFXIVIpcBasePacket < QuestCompleteList >
2017-08-08 13:53:47 +02:00
{
2018-11-06 23:25:37 +01:00
uint8_t questCompleteMask [ 480 ] ;
2018-08-29 21:40:59 +02:00
uint8_t unknownCompleteMask [ 32 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to finish a quest
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestFinish :
FFXIVIpcBasePacket < QuestFinish >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint16_t questId ;
uint8_t flag1 ;
uint8_t flag2 ;
uint32_t padding ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to send a quest message
* type 0 default
* type 1 icon
* type 5 status
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestMessage :
FFXIVIpcBasePacket < QuestMessage >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint32_t questId ;
/* 0000 */ uint8_t msgId ;
/* 0000 */ uint8_t type ;
/* 0000 */ uint16_t padding1 ;
/* 0000 */ uint32_t var1 ;
/* 0000 */ uint32_t var2 ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcQuestTracker :
FFXIVIpcBasePacket < QuestTracker >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
struct TrackerEntry
{
uint8_t active ;
uint8_t questIndex ;
} entry [ 5 ] ;
uint16_t padding [ 3 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcWeatherChange :
FFXIVIpcBasePacket < WeatherChange >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t weatherId ;
float delay ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to send a unviel a map
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcDiscovery :
FFXIVIpcBasePacket < Discovery >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint32_t map_part_id ;
/* 0004 */ uint32_t map_id ;
2017-08-08 13:53:47 +02:00
} ;
/**
* UNKOWN TYPE
*/
2018-08-29 21:40:59 +02:00
struct FFXIVARR_IPC_UNK322 :
FFXIVIpcBasePacket < IPCTYPE_UNK_322 >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint8_t unk [ 8 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* UNKOWN TYPE
*/
2018-08-29 21:40:59 +02:00
struct FFXIVARR_IPC_UNK320 :
FFXIVIpcBasePacket < IPCTYPE_UNK_320 >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
/* 0000 */ uint8_t unk [ 0x38 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* prepare zoning , showing screenmessage
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcPrepareZoning :
FFXIVIpcBasePacket < PrepareZoning >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t logMessage ;
uint16_t targetZone ;
uint16_t animation ;
uint8_t param4 ;
uint8_t hideChar ;
uint8_t fadeOut ;
uint8_t param7 ;
uint8_t fadeOutTime ;
2019-01-06 16:32:06 +01:00
uint8_t unknown ; // this changes whether or not the destination zone's name displays during the loading screen. Seems to always be 9 (=hidden) when going to an instance and certain zones, 0 otherwise.
2018-08-29 21:40:59 +02:00
uint16_t padding ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to trigger content finder events
*
* See https : //gist.github.com/Minoost/c35843c4c8a7a931f31fdaac9bce64c2
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFNotify :
FFXIVIpcBasePacket < CFNotify >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t state1 ; // 3 = cancelled, 4 = duty ready
uint32_t state2 ; // if state1 == 3, state2 is cancelled reason
2017-08-08 13:53:47 +02:00
2018-08-29 21:40:59 +02:00
uint32_t param1 ; // usually classJobId
uint32_t param2 ; // usually flag
uint32_t param3 ; // usually languages, sometimes join in progress timestamp
2017-09-10 14:02:16 +09:00
2018-08-29 21:40:59 +02:00
uint16_t param4 ; // usually roulette id
uint16_t contents [ 5 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update contents available in duty finder or raid finder
*
* Do note that this packet has to come early in login phase ( around initui packet )
* or it won ' t be applied until you reconnect
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFAvailableContents :
FFXIVIpcBasePacket < CFAvailableContents >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t contents [ 0x48 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update adventure in needs in duty roulette
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFPlayerInNeed :
FFXIVIpcBasePacket < CFPlayerInNeed >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
// Ordered by roulette id
uint8_t inNeeds [ 0x10 ] ;
2017-08-08 13:53:47 +02:00
} ;
/**
* Structural representation of the packet sent by the server
* to update duty info in general
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFDutyInfo :
FFXIVIpcBasePacket < CFDutyInfo >
2017-08-08 13:53:47 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t penaltyTime ;
uint8_t unknown [ 7 ] ;
2017-08-08 13:53:47 +02:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFRegisterDuty :
FFXIVIpcBasePacket < CFRegisterDuty >
2017-08-09 23:15:55 +09:00
{
2018-08-29 21:40:59 +02:00
uint32_t unknown0 ; // 0x301
uint8_t rouletteId ; // if it's a daily roulette
uint8_t unknown1 ; // 0xDB
uint16_t contentId ;
2017-08-09 23:15:55 +09:00
} ;
2017-08-08 13:53:47 +02:00
2018-08-29 21:40:59 +02:00
struct FFXIVIpcCFMemberStatus :
FFXIVIpcBasePacket < CFMemberStatus >
2017-08-10 11:35:05 +09:00
{
2018-08-29 21:40:59 +02:00
uint16_t contentId ;
uint16_t unknown1 ;
uint8_t status ;
uint8_t currentTank ;
uint8_t currentDps ;
uint8_t currentHealer ;
uint8_t estimatedTime ;
uint8_t unknown2 [ 3 ] ;
uint32_t unknown3 ;
2017-08-10 11:35:05 +09:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEorzeaTimeOffset :
FFXIVIpcBasePacket < EorzeaTimeOffset >
2017-09-22 22:03:57 +09:00
{
2018-08-29 21:40:59 +02:00
uint64_t timestamp ;
2017-09-22 22:03:57 +09:00
} ;
2017-10-05 20:24:58 +02:00
/**
* Structural representation of the packet sent by the server
* to set the gear show / hide status of a character
*/
2018-08-29 21:40:59 +02:00
struct FFXIVIpcEquipDisplayFlags :
FFXIVIpcBasePacket < EquipDisplayFlags >
2017-10-05 20:24:58 +02:00
{
2018-08-29 21:40:59 +02:00
uint8_t bitmask ;
2017-10-05 20:24:58 +02:00
} ;
2017-08-10 11:35:05 +09:00
2017-10-17 21:31:00 +02:00
/**
* Structural representation of the packet sent by the server
* to mount a player
*/
2018-11-01 23:56:43 +01:00
struct FFXIVIpcMount : FFXIVIpcBasePacket < Mount >
2017-10-17 21:31:00 +02:00
{
2018-08-29 21:40:59 +02:00
uint32_t id ;
2017-10-17 21:31:00 +02:00
} ;
2018-02-07 00:00:48 +01:00
/**
* Structural representation of the packet sent by the server
* to mount a player
*/
2018-11-01 23:56:43 +01:00
struct FFXIVIpcDirectorVars : FFXIVIpcBasePacket < DirectorVars >
2018-08-29 21:40:59 +02:00
{
/*! DirectorType | ContentId */
uint32_t m_directorId ;
/*! currect sequence */
uint8_t m_sequence ;
/*! current branch */
uint8_t m_branch ;
/*! raw storage for flags/vars */
uint8_t m_unionData [ 10 ] ;
} ;
2018-11-01 23:56:43 +01:00
struct FFXIVIpcActorGauge : FFXIVIpcBasePacket < ActorGauge >
2018-08-29 21:40:59 +02:00
{
uint8_t classJobId ;
uint8_t data [ 15 ] ; // depends on classJobId
} ;
2018-11-01 23:56:43 +01:00
struct FFXIVIpcPerformNote : FFXIVIpcBasePacket < PerformNote >
2018-08-29 21:40:59 +02:00
{
uint8_t data [ 32 ] ;
} ;
2018-11-28 23:29:55 +11:00
struct FFXIVIpcHousingUpdateLandFlagsSlot : FFXIVIpcBasePacket < HousingUpdateLandFlagsSlot >
2018-11-11 23:55:34 +01:00
{
uint32_t type ;
uint32_t unknown ;
2018-11-28 23:29:55 +11:00
Common : : LandFlagSet flagSet ;
2018-11-11 23:55:34 +01:00
} ;
2018-11-28 23:29:55 +11:00
struct FFXIVIpcHousingLandFlags : FFXIVIpcBasePacket < HousingLandFlags >
2018-11-01 00:18:19 +01:00
{
2018-11-27 23:12:26 +11:00
Common : : LandFlagSet freeCompanyHouse ; // 00
2018-11-01 00:18:19 +01:00
uint64_t unkown1 ;
2018-11-27 23:12:26 +11:00
Common : : LandFlagSet privateHouse ; // 24
2018-11-01 00:18:19 +01:00
uint64_t unkown2 ;
2018-11-27 23:12:26 +11:00
Common : : LandFlagSet apartment ; // 48
2018-11-01 00:18:19 +01:00
uint64_t unkown3 ;
2018-11-27 23:12:26 +11:00
Common : : LandFlagSet sharedHouse [ 2 ] ; //72
2018-11-01 00:18:19 +01:00
uint64_t unkown4 ;
2018-11-27 23:12:26 +11:00
Common : : LandFlagSet unkownHouse ;
2018-11-01 00:18:19 +01:00
uint64_t unkown5 ;
} ;
2018-11-14 10:00:16 +01:00
//Structs
struct LandStruct
{
uint8_t plotSize ; //0
uint8_t houseState ; // 2
2018-11-30 00:11:18 +01:00
uint8_t flags ; // bit1 -> hasPublicAccess; bit2 -> isPersonalHouse
2018-11-14 10:00:16 +01:00
uint8_t iconAddIcon ; // 6
uint32_t fcId ; //8
uint32_t fcIcon ; // 12
uint32_t fcIconColor ; // 16
uint16_t housePart [ 8 ] ; // 34
2018-11-26 17:56:29 +11:00
uint8_t houseColour [ 8 ] ; // 36
2018-11-14 10:00:16 +01:00
} ;
2018-11-01 23:56:43 +01:00
struct FFXIVIpcLandUpdate : FFXIVIpcBasePacket < LandUpdate >
2018-11-01 00:18:19 +01:00
{
2018-11-26 23:15:42 +01:00
Common : : LandIdent landIdent ;
2018-11-14 10:00:16 +01:00
LandStruct land ;
2018-11-01 00:18:19 +01:00
} ;
2018-11-01 23:56:43 +01:00
struct FFXIVIpcLandPriceUpdate : FFXIVIpcBasePacket < LandPriceUpdate >
2018-11-01 00:18:19 +01:00
{
uint32_t price ;
uint32_t timeLeft ;
} ;
2018-11-11 14:27:39 +01:00
struct FFXIVIpcLandInfoSign : FFXIVIpcBasePacket < LandInfoSign >
{
2018-11-26 23:15:42 +01:00
Common : : LandIdent landIdent ;
2018-11-13 00:03:09 +01:00
uint64_t ownerId ; // ither contentId or fcId
uint32_t unknow1 ;
2018-11-11 14:27:39 +01:00
uint8_t houseIconAdd ;
uint8_t houseSize ;
2018-11-13 00:03:09 +01:00
uint8_t houseType ;
char estateName [ 23 ] ;
char estateGreeting [ 193 ] ;
2018-11-11 14:27:39 +01:00
char ownerName [ 31 ] ;
char fcTag [ 7 ] ;
uint8_t tag [ 3 ] ;
} ;
2018-11-12 09:32:20 +01:00
struct FFXIVIpcLandRename : FFXIVIpcBasePacket < LandRename >
2018-11-11 14:27:39 +01:00
{
2018-11-26 23:15:42 +01:00
Common : : LandIdent landIdent ;
2018-11-28 00:05:57 +11:00
char houseName [ 20 ] ;
2018-11-11 14:27:39 +01:00
uint32_t padding ;
} ;
2018-11-28 00:05:57 +11:00
struct FFXIVIpcLandUpdateHouseName : FFXIVIpcBasePacket < LandUpdateHouseName >
{
uint32_t unknown [ 3 ] ;
char houseName [ 20 ] ;
uint32_t unknown2 [ 2 ] ;
} ;
2018-11-06 23:25:37 +01:00
struct FFXIVIpcLandSetMap : FFXIVIpcBasePacket < LandSetMap >
2018-11-01 00:18:19 +01:00
{
2018-11-06 23:25:37 +01:00
uint8_t u1 ;
uint8_t subdivision ;
uint8_t u3 ;
2018-11-01 00:18:19 +01:00
struct
{
2018-11-06 23:25:37 +01:00
uint8_t status ;
uint8_t size ;
uint8_t isPrivate ;
} landInfo [ 30 ] ;
uint8_t padding [ 3 ] ;
2018-11-01 00:18:19 +01:00
} ;
2018-11-01 23:56:43 +01:00
struct FFXIVIpcLandSetInitialize : FFXIVIpcBasePacket < LandSetInitialize >
2018-08-29 21:40:59 +02:00
{
2018-11-26 23:15:42 +01:00
Common : : LandIdent landIdent ;
2018-08-29 21:40:59 +02:00
uint8_t unknown1 ;
uint8_t subInstance ; // (default : 1/2)
uint8_t unknown3 ;
uint8_t unknown4 ;
uint8_t unknown5 ;
uint8_t unknown6 ;
uint8_t unknown7 ;
uint8_t unknown8 ;
2018-11-14 10:00:16 +01:00
LandStruct land [ 30 ] ;
2018-11-01 00:18:19 +01:00
} ;
2018-12-27 22:28:31 +11:00
struct FFXIVIpcYardObjectSpawn : FFXIVIpcBasePacket < YardObjectSpawn >
2018-11-01 00:18:19 +01:00
{
2018-12-26 22:39:00 +11:00
uint8_t landId ;
2018-11-01 00:18:19 +01:00
uint8_t objectArray ;
uint16_t unknown1 ;
2018-12-27 22:28:31 +11:00
Common : : HousingObject object ;
2018-11-01 00:18:19 +01:00
} ;
2018-12-28 22:50:46 +11:00
struct FFXIVIpcHousingObjectMove : FFXIVIpcBasePacket < HousingObjectMove >
2018-11-01 00:18:19 +01:00
{
uint16_t itemRotation ;
uint8_t objectArray ;
2018-12-27 22:28:31 +11:00
uint8_t landId ;
2019-01-10 15:03:25 +11:00
Common : : FFXIVARR_POSITION3 pos ;
2018-11-01 00:18:19 +01:00
uint16_t unknown1 ;
uint16_t unknown2 ;
uint16_t unknown3 ;
} ;
2018-12-01 21:40:30 +01:00
struct FFXIVIpcHousingObjectInitialize : FFXIVIpcBasePacket < HousingObjectInitialize >
2018-11-01 00:18:19 +01:00
{
2018-12-01 21:40:30 +01:00
Common : : LandIdent landIdent ;
2018-12-30 23:25:52 +11:00
/*!
* when this is 2 , actrl 0x400 will hide the additional quarters door
* if it ' s any other value , it will stay there regardless
*/
2018-12-01 21:40:30 +01:00
int8_t u1 ; //Outdoor -1 / Indoor 0 - probably indicator
2018-08-29 21:40:59 +02:00
uint8_t packetNum ;
2018-12-01 21:40:30 +01:00
uint8_t packetTotal ;
uint8_t u2 ; //Outdoor 0 / Indoor 100(?)
2018-12-27 22:28:31 +11:00
Common : : HousingObject object [ 100 ] ;
2018-11-01 00:18:19 +01:00
uint32_t unknown4 ; //unused
2018-08-29 21:40:59 +02:00
} ;
2018-12-27 00:36:47 +11:00
struct FFXIVIpcHousingInternalObjectSpawn : FFXIVIpcBasePacket < HousingInternalObjectSpawn >
{
uint16_t containerId ;
uint8_t containerOffset ;
uint8_t pad1 ;
uint16_t itemId ;
uint8_t unk2 ;
uint8_t pad2 ;
uint16_t rotation ;
2019-01-10 15:03:25 +11:00
Common : : FFXIVARR_POSITION3 pos ;
2018-12-27 00:36:47 +11:00
} ;
2018-12-01 21:40:30 +01:00
struct FFXIVIpcHousingIndoorInitialize : FFXIVIpcBasePacket < HousingIndoorInitialize >
{
uint16_t u1 ;
uint16_t u2 ;
uint16_t u3 ;
uint16_t u4 ;
uint32_t indoorItems [ 10 ] ;
} ;
2018-11-20 22:52:57 +11:00
struct FFXIVIpcHousingWardInfo : FFXIVIpcBasePacket < HousingWardInfo >
{
2018-11-26 23:15:42 +01:00
Common : : LandIdent landIdent ;
2018-11-20 22:52:57 +11:00
struct HouseInfoEntry
{
uint32_t housePrice ;
uint8_t infoFlags ;
Common : : HousingAppeal houseAppeal [ 3 ] ;
char estateOwnerName [ 30 ] ;
} houseInfoEntry [ 60 ] ;
} ;
2018-11-22 15:34:17 +11:00
struct FFXIVIpcHousingEstateGreeting : FFXIVIpcBasePacket < HousingEstateGreeting >
{
2018-11-28 00:36:45 +11:00
Common : : LandIdent landIdent ;
2018-11-22 15:34:17 +11:00
char message [ 200 ] ;
} ;
2018-11-29 00:19:37 +11:00
struct FFXIVIpcHousingShowEstateGuestAccess :
FFXIVIpcBasePacket < HousingShowEstateGuestAccess >
{
uint32_t unknown [ 2 ] ;
Common : : LandIdent ident ;
} ;
2018-09-26 03:22:30 +10:00
/**
* Structural representation of the packet sent by the server
2018-09-26 03:23:31 +10:00
* to show the current shared estate settings
2018-09-26 03:22:30 +10:00
*/
2018-10-11 16:09:53 +11:00
struct FFXIVIpcSharedEstateSettingsResponse :
2018-09-26 03:22:30 +10:00
FFXIVIpcBasePacket < SharedEstateSettingsResponse >
{
2018-10-11 17:15:52 +11:00
struct playerEntry
{
2018-10-11 15:44:15 +11:00
uint64_t contentId ;
uint8_t permissions ;
char name [ 0x20 ] ;
char padding [ 0x7 ] ;
} entry [ 3 ] ;
2018-09-26 03:22:30 +10:00
} ;
2018-08-29 21:40:59 +02:00
struct FFXIVIpcMSQTrackerProgress :
FFXIVIpcBasePacket < MSQTrackerProgress >
{
uint32_t id ;
uint32_t padding ;
} ;
struct FFXIVIpcMSQTrackerComplete :
FFXIVIpcBasePacket < MSQTrackerComplete >
{
uint32_t id ;
uint32_t padding1 ;
uint64_t padding2 ;
uint64_t padding3 ;
uint64_t padding4 ; // last 4 bytes is uint32_t but who cares
} ;
struct FFXIVIpcObjectSpawn :
FFXIVIpcBasePacket < ObjectSpawn >
{
uint8_t spawnIndex ;
uint8_t objKind ;
uint8_t state ;
uint8_t unknown3 ;
uint32_t objId ;
uint32_t actorId ;
uint32_t levelId ;
uint32_t unknown10 ;
uint32_t someActorId14 ;
uint32_t gimmickId ;
float scale ;
int16_t unknown20a ;
uint16_t rotation ;
int16_t unknown24a ;
int16_t unknown24b ;
uint16_t unknown28a ;
int16_t unknown28c ;
2018-11-30 22:52:08 +11:00
uint32_t housingLink ;
2018-08-29 21:40:59 +02:00
Common : : FFXIVARR_POSITION3 position ;
int16_t unknown3C ;
int16_t unknown3E ;
} ;
struct FFXIVIpcObjectDespawn :
FFXIVIpcBasePacket < ObjectDespawn >
{
uint8_t spawnIndex ;
uint8_t padding [ 7 ] ;
} ;
struct FFXIVIpcDuelChallenge :
FFXIVIpcBasePacket < DuelChallenge >
{
uint8_t otherClassJobId ;
uint8_t otherLevel ; // class job level
uint8_t challengeByYou ; // 0 if the other challenges you, 1 if you challenges the other.
uint8_t otherItemLevel ;
uint32_t otherActorId ;
char otherName [ 32 ] ;
2018-03-18 17:40:00 +09:00
} ;
2018-12-03 00:11:26 +11:00
struct FFXIVIpcMarketBoardSearchResult :
FFXIVIpcBasePacket < MarketBoardSearchResult >
2018-12-02 23:26:21 +11:00
{
2018-12-02 23:40:18 +11:00
struct MarketBoardItem
2018-12-02 23:26:21 +11:00
{
2018-12-02 23:40:18 +11:00
uint32_t itemCatalogId ;
2019-01-01 11:51:48 +11:00
uint16_t quantity ;
uint16_t demand ;
2018-12-02 23:26:21 +11:00
} items [ 20 ] ;
uint32_t itemIndexEnd ;
uint32_t padding1 ;
uint32_t itemIndexStart ;
2019-01-01 11:51:48 +11:00
uint32_t requestId ;
2018-12-02 23:26:21 +11:00
} ;
2018-12-03 00:11:26 +11:00
struct FFFXIVIpcMarketBoardItemListingCount :
FFXIVIpcBasePacket < MarketBoardItemListingCount >
2018-12-02 23:40:18 +11:00
{
2019-01-01 17:29:06 +11:00
uint32_t itemCatalogId ;
uint32_t unknown1 ; // does some shit if nonzero
uint16_t requestId ;
uint16_t quantity ; // high/low u8s read separately?
uint32_t unknown3 ;
2018-12-02 23:40:18 +11:00
} ;
2018-12-03 00:11:26 +11:00
struct FFXIVIpcMarketBoardItemListingHistory :
FFXIVIpcBasePacket < MarketBoardItemListingHistory >
{
uint32_t itemCatalogId ;
uint32_t itemCatalogId2 ;
struct MarketListing
{
uint32_t salePrice ;
2019-01-01 23:37:32 +11:00
uint32_t purchaseTime ;
2018-12-03 00:11:26 +11:00
uint32_t quantity ;
2019-01-01 23:37:32 +11:00
uint8_t isHq ;
uint8_t padding ;
uint8_t onMannequin ;
2018-12-03 00:11:26 +11:00
2019-01-01 23:37:32 +11:00
char buyerName [ 33 ] ;
2018-12-03 00:11:26 +11:00
uint32_t itemCatalogId ;
} listing [ 20 ] ;
} ;
2017-11-22 00:29:42 +09:00
2017-08-08 13:53:47 +02:00
} /* Server */
} /* Packets */
} /* Network */
2018-11-29 16:55:48 +01:00
} /* Sapphire */
2017-08-08 13:53:47 +02:00
# endif /*_CORE_NETWORK_PACKETS_SERVER_IPC_H*/