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
2019-03-28 23:57:58 +01:00
namespace Sapphire : : Network : : Packets : : Server
2017-08-08 13:53:47 +02:00
{
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server as response
* to a ping packet
*/
struct FFXIVIpcPing : FFXIVIpcBasePacket < Ping >
{
/* 0000 */ uint64_t timeInMilliseconds ;
/* 0008 */ uint8_t unknown_8 [ 0x38 ] ;
} ;
/**
* Structural representation of the packet sent by the server as response
* to a ping packet
*/
struct FFXIVIpcInit : FFXIVIpcBasePacket < Init >
{
uint64_t unknown ;
uint32_t charId ;
uint32_t unknown1 ;
} ;
/**
* Structural representation of the packet sent by the server
* carrying chat messages
*/
struct FFXIVIpcChat : FFXIVIpcBasePacket < Chat >
{
/* 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
2019-03-28 23:57:58 +01:00
struct FFXIVIpcChatBanned : FFXIVIpcBasePacket < ChatBanned >
{
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.
} ;
2019-04-26 17:47:59 +10:00
/**
* Structural representation of the packet sent by the server
* to show a list of worlds for world visit
*/
struct FFXIVIpcWorldVisitList : FFXIVIpcBasePacket < WorldVisitList >
{
struct worldEntry
{
uint16_t id ; // this is the id of the world from lobby
uint16_t status ; // 1 = available (this is what retail sends) | 2+ = unavailable (this will need to be checked with retail if it's exactly 2 or not since it does not actually lock the option)
} world [ 16 ] ;
} ;
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* carrying chat messages
*/
struct FFXIVIpcLogout : FFXIVIpcBasePacket < Logout >
{
uint32_t flags1 ;
uint32_t flags2 ;
} ;
/**
* Structural representation of the packet sent by the server
* sent to show the play time
*/
struct FFXIVIpcPlayTime : FFXIVIpcBasePacket < Playtime >
{
uint32_t playTimeInMinutes ;
uint32_t padding ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* with a list of players ( party list | friend list | search results )
*/
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
2019-03-28 23:57:58 +01:00
struct FFXIVIpcSocialList : FFXIVIpcBasePacket < SocialList >
{
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
2019-03-28 23:57:58 +01:00
PlayerEntry entries [ 10 ] ;
} ;
2017-08-08 13:53:47 +02:00
2019-07-27 01:45:18 -07:00
struct FFXIVIpcExamineSearchInfo : FFXIVIpcBasePacket < ExamineSearchInfo >
{
2019-07-27 10:47:10 -07:00
uint32_t unknown ;
uint16_t unknown1 ;
uint16_t unknown2 ;
char padding [ 16 ] ;
uint32_t unknown3 ;
uint16_t unknown4 ;
uint16_t unknown5 ;
uint16_t unknown6 ;
uint8_t worldId ;
char searchMessage [ 193 ] ;
char fcName [ 24 ] ;
uint8_t unknown7 ;
uint16_t padding1 ;
2019-07-27 17:59:23 -07:00
struct ClassJobEntry
{
uint16_t id ;
uint16_t level ;
} levelEntries [ Common : : CLASSJOB_TOTAL ] ;
2019-07-27 01:45:18 -07:00
} ;
2018-09-10 14:34:24 +01:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcSetSearchInfo : FFXIVIpcBasePacket < UpdateSearchInfo >
{
uint64_t onlineStatusFlags ;
uint64_t unknown ;
uint32_t unknown1 ;
uint8_t padding ;
uint8_t selectRegion ;
char searchMessage [ 193 ] ;
uint8_t padding2 ;
} ;
struct FFXIVIpcInitSearchInfo : FFXIVIpcBasePacket < InitSearchInfo >
{
uint64_t onlineStatusFlags ;
uint64_t unknown ;
uint8_t unknown1 ;
uint8_t selectRegion ;
char searchMessage [ 193 ] ;
char padding [ 5 ] ;
} ;
struct FFXIVIpcExamineSearchComment : FFXIVIpcBasePacket < ExamineSearchComment >
{
uint32_t charId ;
// packet only has 196 bytes after the charid
// likely utf8
char searchComment [ 195 ] ;
char padding ;
} ;
2019-04-02 09:00:36 +02:00
/**
* Structural representation of the packet sent by the server
* to display a server notice message
*/
struct FFXIVIpcServerNoticeShort : FFXIVIpcBasePacket < ServerNoticeShort >
{
// these are actually display flags
/* 0000 */ uint8_t padding ;
// 0 = chat log
// 2 = nothing
// 4 = on screen message
// 5 = on screen message + chat log
char message [ 538 ] ;
} ;
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to display a server notice message
*/
struct FFXIVIpcServerNotice : FFXIVIpcBasePacket < ServerNotice >
{
2019-04-02 09:00:36 +02:00
// these are actually display flags
2019-03-28 23:57:58 +01:00
/* 0000 */ uint8_t padding ;
2019-04-02 09:00:36 +02:00
// 0 = chat log
// 2 = nothing
// 4 = on screen message
// 5 = on screen message + chat log
2019-03-28 23:57:58 +01:00
char message [ 775 ] ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcSetOnlineStatus : FFXIVIpcBasePacket < SetOnlineStatus >
{
uint64_t onlineStatusFlags ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcBlackList : FFXIVIpcBasePacket < BlackList >
2018-08-29 21:40:59 +02:00
{
2019-03-28 23:57:58 +01:00
struct BlEntry
{
uint64_t contentId ;
char name [ 32 ] ;
} entry [ 20 ] ;
uint8_t padding ;
uint8_t padding1 ;
uint16_t sequence ;
uint32_t padding2 ;
} ;
struct FFXIVIpcLogMessage : FFXIVIpcBasePacket < LogMessage >
2018-08-29 21:40:59 +02:00
{
2019-03-28 23:57:58 +01: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 ;
} ;
struct FFXIVIpcLinkshellList : FFXIVIpcBasePacket < LinkshellList >
{
struct LsEntry
{
uint64_t lsId ;
uint64_t unknownId ;
uint8_t unknown ;
uint8_t rank ;
uint16_t padding ;
uint8_t lsName [ 20 ] ;
2020-01-01 22:05:49 +09:00
uint8_t unk [ 16 ] ;
2019-03-28 23:57:58 +01:00
} entry [ 8 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to send a list of mail the player has
*/
struct FFXIVIpcReqMoogleMailList : FFXIVIpcBasePacket < ReqMoogleMailList >
{
struct letterEntry
{
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
*/
2019-08-09 19:01:09 -07:00
struct FFXIVIpcMailLetterNotification : FFXIVIpcBasePacket < MailLetterNotification >
2019-03-28 23:57:58 +01:00
{
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?)
} ;
2019-11-01 09:22:43 -07:00
struct FFFXIVIpcMarketTaxRates : FFXIVIpcBasePacket < MarketTaxRates >
{
uint32_t unknown1 ;
uint16_t padding1 ;
2019-11-01 09:25:35 -07:00
uint16_t unknown2 ;
2019-11-01 09:22:43 -07:00
uint32_t taxRate [ Common : : TOWN_COUNT ] ; // In the order of Common::Town
2019-11-01 09:25:35 -07:00
uint64_t unknown3 ;
2019-11-01 09:22:43 -07:00
} ;
2019-08-09 19:01:09 -07:00
struct FFFXIVIpcMarketBoardItemListingCount : FFXIVIpcBasePacket < MarketBoardItemListingCount >
{
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 ;
} ;
struct FFXIVIpcMarketBoardItemListing : FFXIVIpcBasePacket < MarketBoardItemListing >
{
2019-08-16 17:34:02 -07:00
struct ItemListing // 152 bytes each
2019-08-09 19:01:09 -07:00
{
2019-08-17 17:44:00 +08:00
uint64_t listingId ;
uint64_t retainerId ;
uint64_t retainerOwnerId ;
uint64_t artisanId ;
2019-08-09 19:01:09 -07:00
uint32_t pricePerUnit ;
2019-08-17 17:44:00 +08:00
uint32_t totalTax ;
2019-08-09 19:01:09 -07:00
uint32_t itemQuantity ;
2019-08-16 17:34:02 -07:00
uint32_t itemId ;
2019-08-17 17:44:00 +08:00
uint16_t lastReviewTime ;
uint16_t containerId ;
uint32_t slotId ;
2019-08-16 17:35:15 -07:00
uint16_t durability ;
2019-08-17 17:44:00 +08:00
uint16_t spiritBond ;
2019-08-16 17:34:02 -07:00
/**
* auto materiaId = ( i & 0xFF0 ) > > 4 ;
* auto index = i & 0xF ;
* auto leftover = i > > 8 ;
*/
2019-08-16 17:38:27 -07:00
uint16_t materiaValue [ 5 ] ;
2019-08-17 17:44:00 +08:00
uint16_t padding1 ;
uint32_t padding2 ;
char retainerName [ 32 ] ;
char playerName [ 32 ] ;
2019-08-09 19:01:09 -07:00
bool hq ;
2019-08-14 19:44:02 -07:00
uint8_t materiaCount ;
2019-08-17 17:44:00 +08:00
uint8_t onMannequin ;
2019-10-29 20:06:26 -07:00
Common : : Town marketCity ;
2019-08-17 17:44:00 +08:00
uint16_t dyeId ;
uint16_t padding3 ;
uint32_t padding4 ;
2019-08-09 19:01:09 -07:00
} listing [ 10 ] ; // Multiple packets are sent if there are more than 10 search results.
2019-08-17 17:44:00 +08:00
uint8_t listingIndexEnd ;
uint8_t listingIndexStart ;
uint16_t requestId ;
2019-08-16 14:19:39 -07:00
char padding7 [ 16 ] ;
uint8_t unknown13 ;
uint16_t padding8 ;
2019-08-09 19:01:09 -07:00
uint8_t unknown14 ;
2019-08-16 14:19:39 -07:00
uint64_t padding9 ;
uint32_t unknown15 ;
uint32_t padding10 ;
2019-08-09 19:01:09 -07:00
} ;
struct FFXIVIpcMarketBoardItemListingHistory : FFXIVIpcBasePacket < MarketBoardItemListingHistory >
{
uint32_t itemCatalogId ;
uint32_t itemCatalogId2 ;
struct MarketListing
{
uint32_t salePrice ;
uint32_t purchaseTime ;
uint32_t quantity ;
uint8_t isHq ;
uint8_t padding ;
uint8_t onMannequin ;
char buyerName [ 33 ] ;
uint32_t itemCatalogId ;
} listing [ 20 ] ;
} ;
struct FFXIVIpcMarketBoardSearchResult : FFXIVIpcBasePacket < MarketBoardSearchResult >
{
struct MarketBoardItem
{
uint32_t itemCatalogId ;
uint16_t quantity ;
uint16_t demand ;
} items [ 20 ] ;
uint32_t itemIndexEnd ;
uint32_t padding1 ;
uint32_t itemIndexStart ;
uint32_t requestId ;
} ;
2019-03-28 23:57:58 +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
2018-08-29 21:40:59 +02:00
uint16_t padding ;
2019-03-28 23:57:58 +01:00
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 ;
} ;
2019-07-28 17:27:57 -07:00
struct FFXIVIpcFreeCompanyUpdateShortMessage : FFXIVIpcBasePacket < FreeCompanyUpdateShortMessage >
{
uint32_t unknown ;
uint16_t unknown1 ;
uint16_t unknown2 ;
uint32_t unknown3 ;
uint32_t unknown5 ;
char shortMessage [ 104 ] ;
} ;
2019-03-28 23:57:58 +01:00
struct FFXIVIpcStatusEffectList : FFXIVIpcBasePacket < StatusEffectList >
{
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 ;
2020-01-19 21:20:01 +09:00
uint8_t shieldPercentage ;
uint8_t unknown1 ;
2020-02-18 23:05:24 +09:00
uint16_t unknown2 ;
2019-03-28 23:57:58 +01:00
Common : : StatusEffect effect [ 30 ] ;
uint32_t padding ;
} ;
struct FFXIVGCAffiliation : FFXIVIpcBasePacket < GCAffiliation >
{
uint8_t gcId ;
uint8_t gcRank [ 3 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* add a status effect
*/
2019-06-20 14:48:24 +10:00
struct FFXIVIpcEffectResult : FFXIVIpcBasePacket < EffectResult >
2019-03-28 23:57:58 +01:00
{
2020-01-19 21:20:01 +09:00
uint32_t globalSequence ;
2019-03-28 23:57:58 +01:00
uint32_t actor_id ;
uint32_t current_hp ;
uint32_t max_hp ;
2020-01-01 22:05:49 +09:00
uint16_t current_mp ;
2020-01-19 21:20:01 +09:00
uint8_t unknown1 ;
2020-01-01 22:05:49 +09:00
uint8_t classId ;
2020-01-19 21:20:01 +09:00
uint8_t shieldPercentage ;
uint8_t entryCount ;
uint16_t unknown2 ;
2019-07-21 17:44:29 +10:00
struct StatusEntry
{
uint8_t index ; // which position do i display this
uint8_t unknown3 ;
uint16_t id ;
uint16_t param ;
2020-01-19 21:20:01 +09:00
uint16_t unknown4 ; // Sort this out (old right half of power/param property)
2019-07-21 17:44:29 +10:00
float duration ;
uint32_t sourceActorId ;
} statusEntries [ 4 ] ;
2019-03-28 23:57:58 +01:00
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2019-10-09 18:14:53 +02:00
struct FFXIVIpcActorControl : FFXIVIpcBasePacket < ActorControl >
2019-03-28 23:57:58 +01: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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2019-10-09 18:14:53 +02:00
struct FFXIVIpcActorControlSelf : FFXIVIpcBasePacket < ActorControlSelf >
2019-03-28 23:57:58 +01: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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to update certain player details / status
*/
2019-10-09 18:14:53 +02:00
struct FFXIVIpcActorControlTarget : FFXIVIpcBasePacket < ActorControlTarget >
2019-03-28 23:57:58 +01: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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to update HP / MP / TP
*/
struct FFXIVIpcUpdateHpMpTp : FFXIVIpcBasePacket < UpdateHpMpTp >
{
/* 0000 */ uint32_t hp ;
/* 0004 */ uint16_t mp ;
/* 0006 */ uint16_t tp ;
2019-10-10 22:58:59 +02:00
/* 0008 */ uint16_t gp ;
/* 0010 */ uint16_t unknown_10 ;
/* 0012 */ uint32_t unknown_12 ;
2019-03-28 23:57:58 +01:00
} ;
struct FFXIVIpcEffect : FFXIVIpcBasePacket < Effect >
{
uint64_t animationTargetId ; // who the animation targets
2018-07-20 22:39:10 +02:00
2019-03-28 23:57:58 +01:00
uint32_t actionId ; // what the casting player casts, shown in battle log/ui
2019-08-05 15:20:25 +10:00
/*!
* @ brief Zone sequence for the effect . Used to link effects that are split across multiple packets as one
*/
uint32_t sequence ;
2018-07-20 22:39:10 +02:00
2019-03-28 23:57:58 +01:00
float animationLockTime ; // maybe? doesn't seem to do anything
2019-08-05 15:20:25 +10:00
uint32_t someTargetId ; // always 0x0E000000?
/*!
* @ brief The cast sequence from the originating player . Should only be sent to the source , 0 for every other player .
*
* This needs to match the sequence sent from the player in the action start packet otherwise you ' ll cancel the
* initial animation and start a new one once the packet arrives .
*/
uint16_t sourceSequence ;
2019-03-28 23:57:58 +01:00
uint16_t rotation ;
uint16_t actionAnimationId ; // the animation that is played by the casting character
uint8_t variation ; // variation in the animation
Common : : ActionEffectDisplayType effectDisplayType ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01: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
uint16_t padding_21 ;
2018-07-21 23:48:14 +10:00
2019-03-28 23:57:58 +01:00
uint16_t padding_22 [ 3 ] ;
2018-07-21 23:48:14 +10:00
2019-03-28 23:57:58 +01:00
uint8_t effects [ 8 * 8 ] ;
2018-07-21 23:48:14 +10:00
2019-03-28 23:57:58 +01:00
uint16_t padding_6A [ 3 ] ;
2018-07-21 23:48:14 +10:00
2019-03-28 23:57:58 +01: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-21 23:48:14 +10:00
2019-03-28 23:57:58 +01:00
uint32_t padding_78 ;
} ;
2018-07-21 23:48:14 +10:00
2019-03-28 23:57:58 +01:00
template < int size >
struct FFXIVIpcAoeEffect
{
2020-01-05 17:09:27 +09:00
uint64_t animationTargetId ; // who the animation targets
2017-08-08 13:53:47 +02:00
2020-01-05 17:09:27 +09:00
uint32_t actionId ; // what the casting player casts, shown in battle log/ui
uint32_t globalSequence ; // seems to only increment on retail?
2017-08-08 13:53:47 +02:00
2020-01-05 17:09:27 +09:00
float animationLockTime ; // maybe? doesn't seem to do anything
uint32_t someTargetId ; // always 00 00 00 E0, 0x0E000000 is the internal def for INVALID TARGET ID
uint16_t sourceSequence ; // if 0, always shows animation, otherwise hides it. counts up by 1 for each animation skipped on a caster
uint16_t rotation ;
uint16_t actionAnimationId ; // the animation that is played by the casting character
uint8_t variation ; // variation in the animation
Common : : ActionEffectDisplayType effectDisplayType ;
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
uint16_t padding_21 [ 3 ] ;
uint16_t padding ;
2017-08-08 13:53:47 +02:00
2020-01-05 17:09:27 +09:00
struct
{
Common : : EffectEntry entries [ 8 ] ;
} effects [ size ] ;
2017-08-08 13:53:47 +02:00
2020-01-05 17:09:27 +09:00
uint16_t padding_6A [ 3 ] ;
uint64_t effectTargetId [ size ] ;
uint16_t unkFlag [ 3 ] ; // all 0x7FFF
uint16_t unk [ 3 ] ;
2019-03-28 23:57:58 +01:00
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01: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 >
{
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to spawn an actor
*/
struct FFXIVIpcPlayerSpawn : FFXIVIpcBasePacket < PlayerSpawn >
{
uint16_t title ;
uint16_t u1b ;
uint16_t currentWorldId ;
uint16_t homeWorldId ;
uint8_t gmRank ;
uint8_t u3c ;
uint8_t u4 ;
uint8_t onlineStatus ;
uint8_t pose ;
uint8_t u5a ;
uint8_t u5b ;
uint8_t u5c ;
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 mPMax ;
2020-02-18 23:05:24 +09:00
uint16_t unk ; // == 0
2019-03-28 23:57:58 +01:00
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 ;
2020-02-18 23:05:24 +09:00
//uint32_t elementalLevel; one of these two field changed to 16bit
//uint32_t element;
uint8_t elementData [ 6 ] ;
2019-03-28 23:57:58 +01:00
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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to spawn an actor
*/
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 ;
2019-04-17 00:10:32 +02:00
uint32_t levelId ;
2019-03-28 23:57:58 +01:00
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 ;
2020-02-19 18:56:48 +09:00
uint16_t unknown1 ; // 0
uint16_t unknown2 ; // 0 or pretty big numbers > 30000
2019-03-28 23:57:58 +01:00
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 ;
2019-04-17 00:50:36 +02:00
uint16_t elementalLevel ; // Eureka
uint16_t element ; // Eureka
2019-03-28 23:57:58 +01:00
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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to show player movement
*/
struct FFXIVIpcActorFreeSpawn : FFXIVIpcBasePacket < ActorFreeSpawn >
{
uint32_t spawnId ;
uint32_t actorId ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to show player movement
*/
struct FFXIVIpcActorMove : FFXIVIpcBasePacket < ActorMove >
{
2019-07-14 18:14:14 +10:00
/* 0000 */ uint8_t headRotation ;
/* 0001 */ uint8_t rotation ;
2019-03-28 23:57:58 +01:00
/* 0002 */ uint8_t animationType ;
/* 0003 */ uint8_t animationState ;
/* 0004 */ uint8_t animationSpeed ;
/* 0005 */ uint8_t unknownRotation ;
/* 0006 */ uint16_t posX ;
/* 0008 */ uint16_t posY ;
/* 000a */ uint16_t posZ ;
/* 000C */ uint32_t unknown_12 ;
} ;
/**
* Structural representation of the packet sent by the server
* to set an actors position
*/
struct FFXIVIpcActorSetPos : FFXIVIpcBasePacket < ActorSetPos >
{
uint16_t r16 ;
uint8_t waitForLoad ;
uint8_t unknown1 ;
uint32_t unknown2 ;
float x ;
float y ;
float z ;
uint32_t unknown3 ;
} ;
/**
* Structural representation of the packet sent by the server
* to start an actors casting
*/
struct FFXIVIpcActorCast : FFXIVIpcBasePacket < ActorCast >
2018-08-29 21:40:59 +02:00
{
2019-03-28 23:57:58 +01:00
uint16_t action_id ;
Common : : SkillType skillType ;
uint8_t unknown ;
2020-01-23 22:36:01 +09:00
uint32_t unknown_1 ; // action id or mount id
2019-03-28 23:57:58 +01:00
float cast_time ;
uint32_t target_id ;
2020-01-23 22:36:01 +09:00
uint16_t rotation ;
uint16_t flag ; // 1 = interruptible blinking cast bar
2019-03-28 23:57:58 +01:00
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
{
uint32_t actorId ;
uint8_t hatePercent ;
uint8_t unknown ;
uint16_t padding ;
} entry [ 32 ] ;
uint32_t padding ;
} ;
2019-04-30 22:54:35 +02:00
struct FFXIVIpcHateRank : FFXIVIpcBasePacket < HateRank >
{
uint32_t numEntries ;
struct
{
uint32_t actorId ;
uint32_t hateAmount ;
} entry [ 32 ] ;
uint32_t padding ;
} ;
2019-03-28 23:57:58 +01:00
struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket < UpdateClassInfo >
{
uint8_t classId ;
uint8_t level1 ;
uint16_t level ;
uint32_t nextLevelIndex ;
uint32_t currentExp ;
uint32_t restedExp ;
} ;
/**
* Structural representation of the packet sent by the server
* to send the titles available to the player
*/
struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket < PlayerTitleList >
{
uint8_t titleList [ 48 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to initialize a zone for the player
*/
struct FFXIVIpcInitZone : FFXIVIpcBasePacket < InitZone >
{
uint16_t serverId ;
uint16_t zoneId ;
uint16_t unknown1 ;
2019-04-02 23:56:47 +02:00
uint16_t contentfinderConditionId ;
2019-03-28 23:57:58 +01:00
uint32_t unknown3 ;
uint32_t unknown4 ;
uint8_t weatherId ;
uint8_t bitmask ;
uint8_t bitmask1 ;
2019-04-02 23:56:47 +02:00
// bitmask1 findings
//0 = unknown ( 7B F8 69 )
//1 = show playguide window ( 7B 69 )
//2 = unknown ( 7B 69 )
//4 = disables record ready check ( 7B DF DF F8 F0 E4 110 (all sorts of social packets) )
//8 = hide server icon ( 7B 69 )
//16 = enable flight ( 7B F8 69 )
//32 = unknown ( 7B F8 69 )
//64 = unknown ( 7B F8 69 )
//128 = shows message "You are now in the instanced area XX A.
//Current instance can be confirmed at any time using the /instance text command." ( 7B F8 69 )
2019-03-28 23:57:58 +01:00
uint8_t unknown5 ;
2019-04-09 19:05:17 +10:00
uint32_t unknown8 ;
2019-03-28 23:57:58 +01:00
uint16_t festivalId ;
uint16_t additionalFestivalId ;
uint32_t unknown9 ;
uint32_t unknown10 ;
uint32_t unknown11 ;
uint32_t unknown12 [ 4 ] ;
2020-01-01 22:05:49 +09:00
uint32_t unknown13 [ 3 ] ;
2019-03-28 23:57:58 +01:00
Common : : FFXIVARR_POSITION3 pos ;
2020-01-01 22:05:49 +09:00
uint32_t unknown14 [ 3 ] ;
uint32_t unknown15 ;
2019-03-28 23:57:58 +01:00
} ;
/**
* Structural representation of the packet sent by the server to initialize
* the client UI upon initial connection .
*/
2019-06-20 14:48:24 +10:00
struct FFXIVIpcPlayerSetup : FFXIVIpcBasePacket < PlayerSetup >
2019-03-28 23:57:58 +01: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 ;
unsigned short unknownPvp2C ;
unsigned short unknown3 ;
unsigned int pvpFrontlineOverallCampaigns ;
unsigned int unknownTimestamp34 ;
unsigned int unknownTimestamp38 ;
unsigned int unknown3C ;
unsigned int unknown40 ;
unsigned int unknown44 ;
float companionTimePassed ;
unsigned int unknown4C ;
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 ;
2019-08-22 18:02:07 +10:00
unsigned char unknown77 ;
2020-02-26 08:10:42 +09:00
unsigned char very_unknown ;
2019-03-28 23:57:58 +01:00
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 ;
2019-06-30 18:32:44 +10:00
unsigned char unknown82 ;
2019-03-28 23:57:58 +01:00
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 ;
2019-06-30 18:32:44 +10:00
unsigned char unknown95 [ 9 ] ;
2019-03-28 23:57:58 +01:00
unsigned char unknown9F [ 2 ] ;
2020-02-26 08:10:42 +09:00
unsigned char unknownA1 [ 6 ] ;
2019-07-16 14:40:35 +10:00
unsigned int exp [ Common : : CLASSJOB_SLOTS ] ;
2019-03-28 23:57:58 +01:00
unsigned int unknown108 ;
unsigned int pvpTotalExp ;
unsigned int unknownPvp110 ;
unsigned int pvpExp ;
unsigned int pvpFrontlineOverallRanks [ 3 ] ;
2019-07-16 14:40:35 +10:00
unsigned short levels [ Common : : CLASSJOB_SLOTS ] ;
2019-03-28 23:57:58 +01:00
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 ;
2020-04-14 21:14:23 +09:00
unsigned char u19 [ 8 ] ;
2020-01-24 08:08:51 +09:00
unsigned char mountGuideMask [ 22 ] ;
2020-04-14 21:14:23 +09:00
unsigned char u19_2 ;
2019-03-28 23:57:58 +01:00
char name [ 32 ] ;
unsigned char unknownOword [ 16 ] ;
unsigned char unknownOw ;
unsigned char unlockBitmask [ 64 ] ;
2019-06-30 18:32:44 +10:00
unsigned char aetheryte [ 21 ] ;
unsigned char discovery [ 445 ] ;
2019-03-28 23:57:58 +01:00
unsigned char howto [ 34 ] ;
2019-06-30 18:32:44 +10:00
unsigned char minions [ 45 ] ;
unsigned char chocoboTaxiMask [ 10 ] ;
unsigned char watchedCutscenes [ 124 ] ;
2019-06-30 18:59:11 +10:00
unsigned char companionBardingMask [ 10 ] ;
2019-03-28 23:57:58 +01:00
unsigned char companionEquippedHead ;
unsigned char companionEquippedBody ;
unsigned char companionEquippedLegs ;
unsigned char unknown52A [ 4 ] ;
unsigned char unknownMask52E [ 11 ] ;
2019-06-30 18:59:11 +10:00
unsigned char fishingGuideMask [ 105 ] ;
unsigned char fishingSpotVisited [ 31 ] ;
unsigned char unknown59A [ 27 ] ;
unsigned char unknown5A9 [ 7 ] ;
2019-03-28 23:57:58 +01:00
unsigned char beastRank [ 11 ] ;
unsigned char unknownPvp5AB [ 11 ] ;
unsigned char unknown5B9 [ 5 ] ;
unsigned char pose ;
2019-06-30 18:59:11 +10:00
unsigned char unknown5B91 ;
2019-03-28 23:57:58 +01:00
unsigned char challengeLogComplete [ 9 ] ;
unsigned char weaponPose ;
unsigned char unknownMask673 [ 10 ] ;
unsigned char unknownMask5DD [ 28 ] ;
unsigned char relicCompletion [ 12 ] ;
unsigned char sightseeingMask [ 26 ] ;
unsigned char huntingMarkMask [ 55 ] ;
unsigned char tripleTriadCards [ 32 ] ;
unsigned char u12 [ 11 ] ;
unsigned char u13 ;
unsigned char aetherCurrentMask [ 22 ] ;
unsigned char u10 [ 3 ] ;
unsigned char orchestrionMask [ 40 ] ;
unsigned char hallOfNoviceCompletion [ 3 ] ;
unsigned char animaCompletion [ 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 short fishingRecordsFishWeight [ 26 ] ;
unsigned int exploratoryMissionNextTimestamp ;
unsigned char pvpLevel ;
} ;
/**
* Structural representation of the packet sent by the server
* to set a players stats
*/
struct FFXIVIpcPlayerStats : FFXIVIpcBasePacket < PlayerStats >
{
2019-07-25 23:21:42 +10:00
// order comes from baseparam order column
2019-03-28 23:57:58 +01:00
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 ;
2019-07-25 23:21:42 +10:00
uint32_t gp ;
2019-07-27 10:18:09 -07:00
uint32_t cp ;
2019-07-25 23:21:42 +10:00
uint32_t delay ;
2019-03-28 23:57:58 +01:00
uint32_t tenacity ;
2019-07-25 23:21:42 +10:00
uint32_t attackPower ;
2019-03-28 23:57:58 +01:00
uint32_t defense ;
2019-07-25 23:21:42 +10:00
uint32_t directHitRate ;
uint32_t evasion ;
2019-03-28 23:57:58 +01:00
uint32_t magicDefense ;
2019-07-25 23:21:42 +10:00
uint32_t criticalHit ;
2019-03-28 23:57:58 +01:00
uint32_t attackMagicPotency ;
uint32_t healingMagicPotency ;
2019-07-25 23:21:42 +10:00
uint32_t elementalBonus ;
2019-03-28 23:57:58 +01:00
uint32_t determination ;
uint32_t skillSpeed ;
2019-07-25 23:21:42 +10:00
uint32_t spellSpeed ;
uint32_t haste ;
2019-03-28 23:57:58 +01:00
uint32_t craftsmanship ;
uint32_t control ;
uint32_t gathering ;
uint32_t perception ;
2019-07-25 23:21:42 +10:00
// todo: what is here?
uint32_t unknown [ 26 ] ;
2019-03-28 23:57:58 +01:00
} ;
/**
* Structural representation of the packet sent by the server
* to set an actors current owner
*/
struct FFXIVIpcActorOwner : FFXIVIpcBasePacket < ActorOwner >
{
uint8_t type ;
uint8_t padding [ 7 ] ;
2018-08-29 21:40:59 +02:00
uint32_t actorId ;
2019-03-28 23:57:58 +01:00
uint32_t actorId2 ;
} ;
/**
* Structural representation of the packet sent by the server
* to set a players state
*/
struct FFXIVIpcPlayerStateFlags : FFXIVIpcBasePacket < PlayerStateFlags >
{
uint8_t flags [ 12 ] ;
uint32_t padding ;
} ;
/**
* Structural representation of the packet sent by the server
* containing current class information
*/
struct FFXIVIpcPlayerClassInfo : FFXIVIpcBasePacket < PlayerClassInfo >
{
uint16_t classId ;
2018-08-29 21:40:59 +02:00
uint8_t unknown ;
2019-03-28 23:57:58 +01:00
uint8_t isSpecialist ;
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.
uint32_t roleActions [ 10 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
struct FFXIVIpcModelEquip : FFXIVIpcBasePacket < ModelEquip >
{
/* 0000 */ uint64_t mainWeapon ;
/* 0008 */ uint64_t offWeapon ;
/* 0010 */ uint8_t unk1 ;
/* 0011 */ uint8_t classJobId ;
/* 0012 */ uint8_t level ;
/* 0013 */ uint8_t unk2 ;
/* 0014 */ uint32_t models [ 10 ] ;
/* 003C */ uint32_t padding2 ;
} ;
struct FFXIVIpcExamine : FFXIVIpcBasePacket < Examine >
{
uint8_t unkFlag1 ;
uint8_t unkFlag2 ;
char classJob ;
char level ;
2018-08-29 21:40:59 +02:00
uint16_t padding ;
2019-03-28 23:57:58 +01:00
uint16_t titleId ;
char grandCompany ;
char grandCompanyRank ;
char unknown [ 6 ] ;
uint32_t u6_fromPSpawn ;
uint32_t u7_fromPSpawn ;
char padding1 [ 8 ] ;
uint64_t mainWeaponModel ;
uint64_t secWeaponModel ;
2019-04-17 00:31:19 +02:00
uint8_t unknown2 ;
uint16_t worldId ;
char unknown3 [ 12 ] ;
2019-03-28 23:57:58 +01:00
struct ItemData
{
uint32_t catalogId ;
uint32_t appearanceCatalogId ;
uint64_t crafterId ;
uint8_t quality ;
2020-03-14 00:31:14 -07:00
uint8_t stain ;
uint8_t unknown [ 2 ] ;
2019-03-28 23:57:58 +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 ] ;
uint32_t models [ 10 ] ;
char unknown4 [ 200 ] ;
} ;
struct FFXIVIpcCharaNameReq : FFXIVIpcBasePacket < CharaNameReq >
{
uint64_t contentId ;
char name [ 32 ] ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
struct FFXIVIpcItemInfo : FFXIVIpcBasePacket < ItemInfo >
2018-09-10 14:34:24 +01:00
{
2019-03-28 23:57:58 +01:00
uint32_t containerSequence ;
uint32_t unknown ;
uint16_t containerId ;
uint16_t slot ;
uint32_t quantity ;
2018-09-10 14:34:24 +01:00
uint32_t catalogId ;
2019-03-28 23:57:58 +01:00
uint32_t reservedFlag ;
uint64_t signatureId ;
uint8_t hqFlag ;
uint8_t unknown2 ;
uint16_t condition ;
uint16_t spiritBond ;
uint16_t stain ;
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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
struct FFXIVIpcContainerInfo : FFXIVIpcBasePacket < ContainerInfo >
2018-08-29 21:40:59 +02:00
{
2019-03-28 23:57:58 +01:00
uint32_t containerSequence ;
uint32_t numItems ;
uint32_t containerId ;
uint32_t unknown ;
} ;
/**
* Structural representation of the packet sent by the server
* to update a players appearance
*/
struct FFXIVIpcCurrencyCrystalInfo : FFXIVIpcBasePacket < CurrencyCrystalInfo >
{
uint32_t containerSequence ;
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-09-10 14:02:16 +09:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcInventoryTransactionFinish : FFXIVIpcBasePacket < InventoryTransactionFinish >
{
uint32_t sequenceId ;
uint32_t sequenceId1 ;
uint64_t padding ;
} ;
2017-08-08 13:53:47 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcInventoryTransaction : FFXIVIpcBasePacket < InventoryTransaction >
{
uint32_t sequence ;
2020-02-24 18:23:43 +09:00
uint16_t type ;
2019-03-28 23:57:58 +01:00
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
2019-03-28 23:57:58 +01:00
struct FFXIVIpcInventoryActionAck : FFXIVIpcBasePacket < InventoryActionAck >
{
uint32_t sequence ;
uint16_t type ;
uint16_t padding ;
uint32_t padding1 ;
uint32_t padding2 ;
} ;
2017-08-08 13:53:47 +02:00
2017-08-09 23:15:55 +09:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to update a slot in the inventory
*/
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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to start an event , not actually playing it , but registering
*/
struct FFXIVIpcEventStart : FFXIVIpcBasePacket < EventStart >
{
/* 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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to fill a huntin log entry
*/
struct FFXIVIpcHuntingLogEntry : FFXIVIpcBasePacket < HuntingLogEntry >
{
int32_t u0 ; // -1 for all normal classes
uint8_t rank ; // starting from 0
uint8_t index ; // classes and gcs
uint8_t entries [ 10 ] [ 4 ] ;
uint16_t pad ;
uint64_t completeFlags ; // 4 bit for each potential entry and the 5th bit for completion of the section
uint64_t pad1 ;
} ;
/**
* Structural representation of the packet sent by the server
* to play an event
*/
struct FFXIVIpcEventPlay : FFXIVIpcBasePacket < EventPlay >
{
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 ] ;
} ;
2020-01-02 14:42:58 +11:00
template < int ArgCount >
struct FFXIVIpcEventPlayN
{
uint64_t actorId ;
uint32_t eventId ;
uint16_t scene ;
uint16_t padding ;
uint32_t sceneFlags ;
uint8_t paramCount ;
uint8_t padding2 [ 3 ] ;
uint32_t params [ ArgCount ] ;
} ;
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to play an event
*/
2020-01-02 14:42:58 +11:00
struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket < EventPlay32 >
2019-03-28 23:57:58 +01: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 unknown8 [ 0x08 ] ;
uint8_t unknown [ 0x38 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to finish an event
*/
struct FFXIVIpcEventFinish : FFXIVIpcBasePacket < EventFinish >
{
/* 0000 */ uint32_t eventId ;
/* 0004 */ uint8_t param1 ;
/* 0005 */ uint8_t param2 ;
/* 0006 */ uint16_t padding ;
/* 0008 */ uint32_t param3 ;
/* 000C */ uint32_t padding1 ;
} ;
2020-01-02 14:42:58 +11:00
struct FFXIVIpcEventPlay255 :
FFXIVIpcBasePacket < EventPlay255 > ,
FFXIVIpcEventPlayN < 255 >
2019-03-28 23:57:58 +01:00
{
} ;
2017-09-22 22:03:57 +09:00
2017-08-10 11:35:05 +09:00
2019-03-28 23:57:58 +01:00
/**
* Structural representation of the packet sent by the server
* to respond to a linkshell creation event
*/
struct FFXIVIpcEventLinkshell : FFXIVIpcBasePacket < EventLinkshell >
{
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 ;
} ;
/**
* Structural representation of the packet sent by the server
* to send the active quests
*/
struct FFXIVIpcQuestActiveList : FFXIVIpcBasePacket < QuestActiveList >
{
Common : : QuestActive activeQuests [ 30 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to send update a quest slot
*/
struct FFXIVIpcQuestUpdate : FFXIVIpcBasePacket < QuestUpdate >
{
uint16_t slot ;
uint16_t padding ;
Common : : QuestActive questInfo ;
} ;
/**
* Structural representation of the packet sent by the server
* to send the completed quests mask
*/
struct FFXIVIpcQuestCompleteList : FFXIVIpcBasePacket < QuestCompleteList >
{
uint8_t questCompleteMask [ 480 ] ;
2020-01-01 22:05:49 +09:00
uint8_t unknownCompleteMask [ 80 ] ;
2019-03-28 23:57:58 +01:00
} ;
/**
* Structural representation of the packet sent by the server
* to finish a quest
*/
struct FFXIVIpcQuestFinish : FFXIVIpcBasePacket < QuestFinish >
{
uint16_t questId ;
uint8_t flag1 ;
uint8_t flag2 ;
uint32_t padding ;
} ;
/**
* Structural representation of the packet sent by the server
* to send a quest message
* type 0 default
* type 1 icon
* type 5 status
*/
struct FFXIVIpcQuestMessage : FFXIVIpcBasePacket < QuestMessage >
{
/* 0000 */ uint32_t questId ;
/* 0000 */ uint8_t msgId ;
/* 0000 */ uint8_t type ;
/* 0000 */ uint16_t padding1 ;
/* 0000 */ uint32_t var1 ;
/* 0000 */ uint32_t var2 ;
} ;
struct FFXIVIpcQuestTracker : FFXIVIpcBasePacket < QuestTracker >
{
struct TrackerEntry
{
uint8_t active ;
uint8_t questIndex ;
} entry [ 5 ] ;
uint16_t padding [ 3 ] ;
} ;
2017-10-17 21:31:00 +02:00
2018-08-29 21:40:59 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcWeatherChange : FFXIVIpcBasePacket < WeatherChange >
{
uint32_t weatherId ;
float delay ;
} ;
/**
* Structural representation of the packet sent by the server
* to send a unviel a map
*/
struct FFXIVIpcDiscovery : FFXIVIpcBasePacket < Discovery >
{
2019-10-21 23:24:26 +02:00
/* 0000 */ uint32_t mapPartId ;
/* 0004 */ uint32_t mapId ;
2019-03-28 23:57:58 +01:00
} ;
2018-08-29 21:40:59 +02:00
2019-03-28 23:57:58 +01:00
/**
* UNKOWN TYPE
*/
2019-10-10 22:58:59 +02:00
struct FFXIVARR_IPC_UNK322 : FFXIVIpcBasePacket < DailyQuestRepeatFlags >
2019-03-28 23:57:58 +01:00
{
/* 0000 */ uint8_t unk [ 8 ] ;
} ;
2018-11-01 00:18:19 +01:00
2019-03-28 23:57:58 +01:00
/**
* UNKOWN TYPE
*/
2019-10-10 22:58:59 +02:00
struct FFXIVARR_IPC_UNK320 : FFXIVIpcBasePacket < DailyQuests >
2019-03-28 23:57:58 +01:00
{
/* 0000 */ uint8_t unk [ 0x38 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* prepare zoning , showing screenmessage
*/
struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket < PrepareZoning >
{
uint32_t logMessage ;
uint16_t targetZone ;
uint16_t animation ;
uint8_t param4 ;
uint8_t hideChar ;
uint8_t fadeOut ;
uint8_t param7 ;
uint8_t fadeOutTime ;
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.
uint16_t padding ;
} ;
/**
* Structural representation of the packet sent by the server
* to trigger content finder events
*
* See https : //gist.github.com/Minoost/c35843c4c8a7a931f31fdaac9bce64c2
*/
struct FFXIVIpcCFNotify : FFXIVIpcBasePacket < CFNotify >
{
uint32_t state1 ; // 3 = cancelled, 4 = duty ready
uint32_t state2 ; // if state1 == 3, state2 is cancelled reason
uint32_t param1 ; // usually classJobId
uint32_t param2 ; // usually flag
uint32_t param3 ; // usually languages, sometimes join in progress timestamp
uint16_t param4 ; // usually roulette id
uint16_t contents [ 5 ] ;
} ;
/**
* 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
*/
struct FFXIVIpcCFAvailableContents : FFXIVIpcBasePacket < CFAvailableContents >
{
uint8_t contents [ 0x48 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to update adventure in needs in duty roulette
*/
struct FFXIVIpcCFPlayerInNeed : FFXIVIpcBasePacket < CFPlayerInNeed >
{
// Ordered by roulette id
uint8_t inNeeds [ 0x10 ] ;
} ;
/**
* Structural representation of the packet sent by the server
* to update duty info in general
*/
struct FFXIVIpcCFDutyInfo : FFXIVIpcBasePacket < CFDutyInfo >
{
uint8_t penaltyTime ;
uint8_t unknown [ 7 ] ;
} ;
2018-11-01 00:18:19 +01:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcCFRegisterDuty : FFXIVIpcBasePacket < CFRegisterDuty >
{
uint32_t unknown0 ; // 0x301
uint8_t rouletteId ; // if it's a daily roulette
uint8_t unknown1 ; // 0xDB
uint16_t contentId ;
} ;
2018-11-11 14:27:39 +01:00
2018-11-28 00:05:57 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcCFMemberStatus : FFXIVIpcBasePacket < CFMemberStatus >
2018-11-01 00:18:19 +01:00
{
2019-03-28 23:57:58 +01:00
uint16_t contentId ;
uint16_t unknown1 ;
2018-11-06 23:25:37 +01:00
uint8_t status ;
2019-03-28 23:57:58 +01:00
uint8_t currentTank ;
uint8_t currentDps ;
uint8_t currentHealer ;
uint8_t estimatedTime ;
uint8_t unknown2 [ 3 ] ;
uint32_t unknown3 ;
} ;
struct FFXIVIpcEorzeaTimeOffset : FFXIVIpcBasePacket < EorzeaTimeOffset >
{
uint64_t timestamp ;
} ;
/**
* Structural representation of the packet sent by the server
* to set the gear show / hide status of a character
*/
struct FFXIVIpcEquipDisplayFlags : FFXIVIpcBasePacket < EquipDisplayFlags >
{
uint8_t bitmask ;
} ;
/**
* Structural representation of the packet sent by the server
* to mount a player
*/
struct FFXIVIpcMount : FFXIVIpcBasePacket < Mount >
{
uint32_t id ;
} ;
/**
* Structural representation of the packet sent by the server
* to mount a player
*/
struct FFXIVIpcDirectorVars : FFXIVIpcBasePacket < DirectorVars >
{
/*! 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 ] ;
/*! unknown */
uint16_t u20 ;
uint16_t u22 ;
uint16_t u24 ;
uint16_t u28 ;
} ;
2019-04-18 20:57:47 +10:00
struct FFXIVIpcDirectorPopUp : FFXIVIpcBasePacket < DirectorPopUp >
{
uint32_t directorId ;
uint16_t pad1 [ 2 ] ;
uint64_t sourceActorId ;
/*!
* 2 = green text in log
*/
uint8_t flags ;
uint8_t pad2 [ 3 ] ;
uint32_t bNPCName ;
uint32_t textId ;
uint32_t popupTimeMs ;
uint32_t pad3 [ 4 ] ;
} ;
2019-03-28 23:57:58 +01:00
struct FFXIVIpcActorGauge : FFXIVIpcBasePacket < ActorGauge >
{
uint8_t classJobId ;
uint8_t data [ 15 ] ; // depends on classJobId
} ;
2018-12-27 00:36:47 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcPerformNote : FFXIVIpcBasePacket < PerformNote >
{
uint8_t data [ 32 ] ;
} ;
2018-12-27 00:36:47 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingUpdateLandFlagsSlot : FFXIVIpcBasePacket < HousingUpdateLandFlagsSlot >
{
uint32_t type ;
uint32_t unknown ;
Common : : LandFlagSet flagSet ;
} ;
2018-12-01 21:40:30 +01:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingLandFlags : FFXIVIpcBasePacket < HousingLandFlags >
{
Common : : LandFlagSet freeCompanyHouse ; // 00
uint64_t unkown1 ;
Common : : LandFlagSet privateHouse ; // 24
uint64_t unkown2 ;
Common : : LandFlagSet apartment ; // 48
uint64_t unkown3 ;
Common : : LandFlagSet sharedHouse [ 2 ] ; //72
uint64_t unkown4 ;
Common : : LandFlagSet unkownHouse ;
uint64_t unkown5 ;
} ;
//Structs
struct LandStruct
{
uint8_t plotSize ; //0
uint8_t houseState ; // 2
uint8_t flags ; // bit1 -> hasPublicAccess; bit2 -> isPersonalHouse
uint8_t iconAddIcon ; // 6
uint32_t fcId ; //8
uint32_t fcIcon ; // 12
uint32_t fcIconColor ; // 16
uint16_t housePart [ 8 ] ; // 34
uint8_t houseColour [ 8 ] ; // 36
} ;
struct FFXIVIpcLandUpdate : FFXIVIpcBasePacket < LandUpdate >
{
Common : : LandIdent landIdent ;
LandStruct land ;
} ;
2018-12-01 21:40:30 +01:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcLandPriceUpdate : FFXIVIpcBasePacket < LandPriceUpdate >
{
uint32_t price ;
uint32_t timeLeft ;
} ;
2018-11-20 22:52:57 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcLandInfoSign : FFXIVIpcBasePacket < LandInfoSign >
2018-11-20 22:52:57 +11:00
{
2019-03-28 23:57:58 +01:00
Common : : LandIdent landIdent ;
uint64_t ownerId ; // ither contentId or fcId
uint32_t unknow1 ;
uint8_t houseIconAdd ;
uint8_t houseSize ;
uint8_t houseType ;
char estateName [ 23 ] ;
char estateGreeting [ 193 ] ;
char ownerName [ 31 ] ;
char fcTag [ 7 ] ;
uint8_t tag [ 3 ] ;
} ;
struct FFXIVIpcLandRename : FFXIVIpcBasePacket < LandRename >
{
Common : : LandIdent landIdent ;
char houseName [ 20 ] ;
uint32_t padding ;
} ;
2018-11-20 22:52:57 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcLandUpdateHouseName : FFXIVIpcBasePacket < LandUpdateHouseName >
{
uint32_t unknown [ 3 ] ;
char houseName [ 20 ] ;
uint32_t unknown2 [ 2 ] ;
} ;
2018-11-22 15:34:17 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcLandSetMap : FFXIVIpcBasePacket < LandSetMap >
{
uint8_t u1 ;
uint8_t subdivision ;
uint8_t u3 ;
struct
{
uint8_t status ;
uint8_t size ;
uint8_t isPrivate ;
} landInfo [ 30 ] ;
uint8_t padding [ 3 ] ;
} ;
struct FFXIVIpcLandSetInitialize : FFXIVIpcBasePacket < LandSetInitialize >
{
Common : : LandIdent landIdent ;
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 ;
LandStruct land [ 30 ] ;
} ;
struct FFXIVIpcYardObjectSpawn : FFXIVIpcBasePacket < YardObjectSpawn >
{
uint8_t landId ;
uint8_t objectArray ;
uint16_t unknown1 ;
Common : : HousingObject object ;
} ;
2018-11-29 00:19:37 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingObjectMove : FFXIVIpcBasePacket < HousingObjectMove >
2018-10-11 17:15:52 +11:00
{
2019-03-28 23:57:58 +01:00
uint16_t itemRotation ;
uint8_t objectArray ;
uint8_t landId ;
Common : : FFXIVARR_POSITION3 pos ;
uint16_t unknown1 ;
uint16_t unknown2 ;
uint16_t unknown3 ;
} ;
struct FFXIVIpcHousingObjectInitialize : FFXIVIpcBasePacket < HousingObjectInitialize >
{
Common : : LandIdent landIdent ;
/*!
* when this is 2 , actrl 0x400 will hide the additional quarters door
* if it ' s any other value , it will stay there regardless
*/
int8_t u1 ; //Outdoor -1 / Indoor 0 - probably indicator
uint8_t packetNum ;
uint8_t packetTotal ;
uint8_t u2 ; //Outdoor 0 / Indoor 100(?)
Common : : HousingObject object [ 100 ] ;
uint32_t unknown4 ; //unused
} ;
struct FFXIVIpcHousingInternalObjectSpawn : FFXIVIpcBasePacket < HousingInternalObjectSpawn >
{
uint16_t containerId ;
uint8_t containerOffset ;
uint8_t pad1 ;
2018-09-26 03:22:30 +10:00
2019-03-28 23:57:58 +01:00
Common : : HousingObject object ;
} ;
2018-08-29 21:40:59 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingIndoorInitialize : FFXIVIpcBasePacket < HousingIndoorInitialize >
{
uint16_t u1 ;
uint16_t u2 ;
uint16_t u3 ;
uint16_t u4 ;
uint32_t indoorItems [ 10 ] ;
} ;
2018-08-29 21:40:59 +02:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingWardInfo : FFXIVIpcBasePacket < HousingWardInfo >
{
Common : : LandIdent landIdent ;
2018-08-29 21:40:59 +02:00
2019-03-28 23:57:58 +01:00
struct HouseInfoEntry
{
uint32_t housePrice ;
uint8_t infoFlags ;
Common : : HousingAppeal houseAppeal [ 3 ] ;
char estateOwnerName [ 30 ] ;
} houseInfoEntry [ 60 ] ;
} ;
struct FFXIVIpcHousingEstateGreeting : FFXIVIpcBasePacket < HousingEstateGreeting >
{
Common : : LandIdent landIdent ;
char message [ 200 ] ;
} ;
2018-03-18 17:40:00 +09:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcHousingShowEstateGuestAccess : FFXIVIpcBasePacket < HousingShowEstateGuestAccess >
{
uint32_t unknown [ 2 ] ;
Common : : LandIdent ident ;
} ;
/**
* Structural representation of the packet sent by the server
* to show the current shared estate settings
*/
struct FFXIVIpcSharedEstateSettingsResponse : FFXIVIpcBasePacket < SharedEstateSettingsResponse >
{
struct playerEntry
2018-12-02 23:26:21 +11:00
{
2019-03-28 23:57:58 +01:00
uint64_t contentId ;
uint8_t permissions ;
char name [ 0x20 ] ;
char padding [ 0x7 ] ;
} entry [ 3 ] ;
} ;
struct FFXIVIpcMSQTrackerProgress : FFXIVIpcBasePacket < MSQTrackerProgress >
{
uint32_t id ;
uint32_t padding ;
} ;
2018-12-02 23:26:21 +11:00
2019-03-28 23:57:58 +01:00
struct FFXIVIpcMSQTrackerComplete : FFXIVIpcBasePacket < MSQTrackerComplete >
{
uint32_t id ;
2018-12-02 23:26:21 +11:00
uint32_t padding1 ;
2019-03-28 23:57:58 +01:00
uint64_t padding2 ;
uint64_t padding3 ;
uint64_t padding4 ; // last 4 bytes is uint32_t but who cares
} ;
2018-12-02 23:26:21 +11:00
2019-03-28 23:57:58 +01:00
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 ;
uint32_t housingLink ;
Common : : FFXIVARR_POSITION3 position ;
int16_t unknown3C ;
int16_t unknown3E ;
} ;
struct FFXIVIpcObjectDespawn : FFXIVIpcBasePacket < ObjectDespawn >
{
uint8_t spawnIndex ;
uint8_t padding [ 7 ] ;
} ;
2018-12-03 00:11:26 +11:00
2019-03-28 23:57:58 +01:00
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 ;
2018-12-03 00:11:26 +11:00
2019-03-28 23:57:58 +01:00
uint32_t otherActorId ;
2018-12-03 00:11:26 +11:00
2019-03-28 23:57:58 +01:00
char otherName [ 32 ] ;
} ;
2020-03-15 22:12:55 +09:00
struct FFXIVIpcCharaVisualEffect : FFXIVIpcBasePacket < CharaVisualEffect >
{
uint32_t id ;
uint32_t padding ;
} ;
2019-03-28 23:57:58 +01:00
}
2017-08-08 13:53:47 +02:00
# endif /*_CORE_NETWORK_PACKETS_SERVER_IPC_H*/