sapphire

package
v0.0.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 30, 2021 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const CLASSJOB_SLOTS uint8 = 28
View Source
const CLASSJOB_TOTAL uint8 = 38
View Source
const CURRENT_EXPANSION_ID uint8 = 3
View Source
const INVALID_GAME_OBJECT_ID uint32 = 0xE0000000
View Source
const INVALID_GAME_OBJECT_ID64 uint64 = 0xE0000000
View Source
const MAX_DISPLAYED_ACTORS uint8 = 99
View Source
const MAX_DISPLAYED_EOBJS uint8 = 40
View Source
const MAX_PLAYER_LEVEL uint16 = 80
View Source
const TOWN_COUNT uint8 = 6

Variables

View Source
var ActorControlType = map[string]uint16{}/* 161 elements not displayed */

ActorControlType - Actor control category map.

View Source
var ActorControlTypeReverse = ReverseMap16(ActorControlType)

ActorControlTypeReverse contains opcodes for actor controls, by value.

View Source
var ClientTriggerType = map[string]uint16{
	"ToggleSheathe":    0x01,
	"ToggleAutoAttack": 0x02,
	"ChangeTarget":     0x03,

	"DismountReq":        0x65,
	"SpawnCompanionReq":  0x66,
	"RemoveStatusEffect": 0x68,
	"CastCancel":         0x69,

	"Return":       0xC8,
	"FinishZoning": 0xC9,
	"Teleport":     0xCA,

	"Examine":     0x12C,
	"MarkPlayer":  0x12D,
	"SetTitleReq": 0x12E,
	"TitleList":   0x12F,

	"UpdatedSeenHowTos": 0x133,
	"AllotAttribute":    0x135,

	"ClearFieldMarkers": 0x13A,
	"CameraMode":        0x13B,
	"CharaNameReq":      0x13D,
	"HuntingLogDetails": 0x194,

	"Timers": 0x1AB,

	"DyeItem": 0x1B5,

	"RequestChocoboInventory": 0x1C4,

	"EmoteReq":              0x1F4,
	"EmoteCancel":           0x1F6,
	"PersistentEmoteCancel": 0x1F7,

	"PoseChange":  0x1F9,
	"PoseReapply": 0x1FA,
	"PoseCancel":  0x1FB,

	"AchievementCrit":    0x202,
	"AchievementComp":    0x203,
	"AchievementCatChat": 0x206,

	"RequestEventBattle": 0x232C,

	"QuestJournalUpdateQuestVisibility": 0x2BE,
	"QuestJournalClosed":                0x2BF,

	"AbandonQuest": 0x320,

	"DirectorInitFinish": 0x321,

	"DirectorSync": 0x328,

	"EnterTerritoryEventFinished": 0x330,
	"RequestInstanceLeave":        0x333,

	"AchievementCritReq": 0x3E8,
	"AchievementList":    0x3E9,

	"SetEstateLightingLevel":               0x40B,
	"RequestHousingBuildPreset":            0x44C,
	"RequestEstateExteriorRemodel":         0x044D,
	"RequestEstateInteriorRemodel":         0x44E,
	"RequestEstateHallRemoval":             0x44F,
	"RequestBuildPreset":                   0x450,
	"RequestLandSignFree":                  0x451,
	"RequestLandSignOwned":                 0x452,
	"RequestWardLandInfo":                  0x453,
	"RequestLandRelinquish":                0x454,
	"RequestLandInventory":                 0x0458,
	"RequestHousingItemRemove":             0x0459,
	"RequestEstateRename":                  0x45A,
	"RequestEstateEditGreeting":            0x45B,
	"RequestEstateGreeting":                0x45C,
	"RequestEstateEditGuestAccessSettings": 0x45D,
	"UpdateEstateGuestAccess":              0x45E,
	"RequestEstateTagSettings":             0x45F,
	"RequestEstateInventory":               0x0461,
	"RequestHousingItemUI":                 0x463,
	"RequestSharedEstateSettings":          0x46F,
	"UpdateEstateLightingLevel":            0x471,
	"HousingItemSelectedInUI":              0x47E,

	"CompanionAction":       0x6A4,
	"CompanionSetBarding":   0x6A5,
	"CompanionActionUnlock": 0x6A6,

	"OpenPerformInstrumentUI": 0x71C,

	"StartReplay": 0x7BC,
	"EndReplay":   0x7BD,

	"OpenDuelUI":        0x898,
	"DuelRequestResult": 0x899,
}

ClientTriggerType - Client trigger category map.

View Source
var ClientTriggerTypeReverse = ReverseMap16(ClientTriggerType)

ClientTriggerTypeReverse contains opcodes for actor controls, by value.

Functions

func GetFile added in v0.0.3

func GetFile(filename string, url string) (io.Reader, error)

GetFile downloads a file from the specified URL and caches it, or loads the cached version.

func LoadConstants added in v0.0.8

func LoadConstants(region string, dataPath string)

LoadConstants loads constants from the source URL.

func LoadOpcodes

func LoadOpcodes(region string, dataPath string)

LoadOpcodes loads opcodes from the source URL.

func PollForUpdates added in v0.0.3

func PollForUpdates(path string, url string)

PollForUpdates polls the provided URL for updates, and saves the updated data to the specified path if there's an update

func ReverseMap16

func ReverseMap16(m map[string]uint16) map[uint16]string

func ReverseMap32

func ReverseMap32(m map[string]uint32) map[uint32]string

func WatchFile added in v0.0.3

func WatchFile(path string, fnUpdate func(io.Reader))

WatchFile watches the provided file path for updates, running the provided function with the updated data if an update occurs.

Types

type ActorControl

type ActorControl struct {
	Category uint16 `json:"category"`
	Padding  uint16 `json:"padding"`
	Param1   uint32 `json:"param1"`
	Param2   uint32 `json:"param2"`
	Param3   uint32 `json:"param3"`
	Param4   uint32 `json:"param4"`
	Padding1 uint32 `json:"padding1"`
}

ActorControl - Structural representation of the packet sent by the server to update certain player details / status

type ActorControlSelf

type ActorControlSelf struct {
	Category uint16 `json:"category"`
	Padding  uint16 `json:"padding"`
	Param1   uint32 `json:"param1"`
	Param2   uint32 `json:"param2"`
	Param3   uint32 `json:"param3"`
	Param4   uint32 `json:"param4"`
	Param5   uint32 `json:"param5"`
	Param6   uint32 `json:"param6"`
	Padding1 uint32 `json:"padding1"`
}

ActorControlSelf - Structural representation of the packet sent by the server to update certain player details / status

type Bimap16

type Bimap16 struct {
	ByKeys   map[string]uint16
	ByValues map[uint16]string
}

Bimap16 is a structure containing two maps, a by-key map and a by-value map

var ClientChatIpcType Bimap16

ClientChatIpcType contains opcode entries for commands executing in chat, from the client.

var ClientLobbyIpcType Bimap16

ClientLobbyIpcType contains opcode entries for commands executing in the lobby, from the client.

var ClientZoneIpcType Bimap16

ClientZoneIpcType contains opcode entries for commands executing in the currently-loaded zone, from the client.

var ServerChatIpcType Bimap16

ServerChatIpcType contains opcode entries for commands executing in chat, from the server.

var ServerLobbyIpcType Bimap16

ServerLobbyIpcType contains opcode entries for commands executing in the lobby, from the server.

var ServerZoneIpcType Bimap16

ServerZoneIpcType contains opcode entries for commands executing in the currently-loaded zone, from the server.

type Bimap32

type Bimap32 struct {
	ByKeys   map[string]uint32
	ByValues map[uint32]string
}

Bimap32 is a structure containing two maps, a by-key map and a by-value map

var Constants Bimap32

Constants is a Bimap containing constants that change from patch to patch.

type ClientTrigger added in v0.0.8

type ClientTrigger struct {
	CommandID uint16   `json:"commandId"`
	Unk2      [2]uint8 `json:"unk_2"`
	Param11   uint32   `json:"param11"` // Need to ask what this means; sometimes they're one uint64?
	Param12   uint32   `json:"param12"`
	Param2    uint32   `json:"param2"`
	Param3    uint32   `json:"param3"` // The output names here are inconsistent with Sapphire because someone messed up Sapphire's names
	Param4    uint32   `json:"param4"`
	Param5    uint64   `json:"param5"`
}

ClientTrigger -

type ConstantsJSON added in v0.0.8

type ConstantsJSON struct {
	Global map[string]uint32
	CN     map[string]uint32
	KR     map[string]uint32
}

ConstantsJSON is a representation of the constants downloaded from the server.

type CurrencyCrystalInfo

type CurrencyCrystalInfo struct {
	ContainerSequence uint32 `json:"containerSequence"`
	ContainerID       uint16 `json:"containerId"`
	Slot              uint16 `json:"slot"`
	Quantity          uint32 `json:"quantity"`
	Unknown           uint32 `json:"unknown"`
	CatalogID         uint32 `json:"catalogId"`
	Unknown1          uint32 `json:"unknown1"`
	Unknown2          uint32 `json:"unknown2"`
	Unknown3          uint32 `json:"unknown3"`
}

type EffectEntry

type EffectEntry struct {
	EffectType uint8
	Param0     uint8
	Param1     uint8
	/*!
	 * @Brief Shows an additional percentage in the battle log
	 *
	 * Has no effect on what is shown and stored in value
	 */
	Param2          uint8
	ValueMultiplier uint8 // This multiplies whatever value is in the 'value' param by 10. Possibly a workaround for big numbers
	Flags           uint8
	Value           int16
}

type EffectResult

type EffectResult struct {
	GlobalSequence   uint32 `json:"globalSequence"`
	ActorID          uint32 `json:"actor_id"`
	CurrentHp        uint32 `json:"current_hp"`
	MaxHp            uint32 `json:"max_hp"`
	CurrentMp        uint16 `json:"current_mp"`
	Unknown1         uint8  `json:"unknown1"`
	ClassID          uint8  `json:"classId"`
	ShieldPercentage uint8  `json:"shieldPercentage"`
	EntryCount       uint8  `json:"entryCount"`
	Unknown2         uint16 `json:"unknown2"`

	StatusEntries [4]struct {
		Index         uint8   `json:"index"` // which position do i display this
		Unknown3      uint8   `json:"unknown3"`
		ID            uint16  `json:"id"`
		Param         uint16  `json:"param"`
		Unknown4      uint16  `json:"unknown4"` // Sort this out (old right half of power/param property)
		Duration      float32 `json:"duration"`
		SourceActorID uint32  `json:"sourceActorId"`
	} `json:"statusEntries"`
}

EffectResult - Structural representation of the packet sent by the server to add a status effect

type EventFinish

type EventFinish struct {
	EventID  uint32 `json:"eventId"`
	Param1   uint8  `json:"param1"`
	Param2   uint8  `json:"param2"`
	Padding  uint16 `json:"padding"`
	Param3   uint32 `json:"param3"`
	Padding1 uint32 `json:"padding1"`
}

EventFinish - Structural representation of the packet sent by the server to finish an event

type EventPlay

type EventPlay struct {
	ActorID  uint64   `json:"actorId"`
	EventID  uint32   `json:"eventId"`
	Scene    uint16   `json:"scene"`
	Padding  uint16   `json:"padding"`
	Flags    uint32   `json:"flags"`
	Param3   uint32   `json:"param3"`
	Param4   uint8    `json:"param4"`
	Padding1 [3]uint8 `json:"padding1"`
	Param5   uint32   `json:"param5"`
	Unknown  [8]uint8 `json:"unknown"`
}

EventPlay - Structural representation of the packet sent by the server to play an event

type EventPlay4

type EventPlay4 struct {
	ActorID    uint64    `json:"actorId"`
	EventID    uint32    `json:"eventId"`
	Scene      uint16    `json:"scene"`
	Padding    uint16    `json:"padding"`
	SceneFlags uint32    `json:"sceneFlags"`
	ParamCount uint8     `json:"paramCount"`
	Padding2   [3]uint8  `json:"padding2"`
	Params     [4]uint32 `json:"params"`
}

EventPlay4 - Structural representation of the packet sent by the server to play an event

type EventStart

type EventStart struct {
	ActorID  uint64 `json:"actorId"`
	EventID  uint32 `json:"eventId"`
	Param1   uint8  `json:"param1"`
	Param2   uint8  `json:"param2"`
	Padding  uint16 `json:"padding"`
	Param3   uint32 `json:"param3"`
	Padding1 uint32 `json:"padding1"`
}

EventStart - Structural representation of the packet sent by the server to start an event, not actually playing it, but registering

type FFXIVARR_POSITION3

type FFXIVARR_POSITION3 struct {
	X float32
	Y float32
	Z float32
}

FFXIVARR_POSITION3 is a float representation of position in XIV 3D space.

type HousingObject

type HousingObject struct {
	ItemId   uint32
	Padding  uint32 // was itemrotation + unknown/pad, looks unused now
	Rotation float32
	Pos      FFXIVARR_POSITION3
}

type InitZone

type InitZone struct {
	ServerID                 uint16 `json:"serverId"`
	ZoneID                   uint16 `json:"zoneId"`
	Unknown1                 uint16 `json:"unknown1"`
	ContentfinderConditionID uint16 `json:"contentFinderConditionId"`
	Unknown3                 uint32 `json:"unknown3"`
	Unknown4                 uint32 `json:"unknown4"`
	WeatherID                uint8  `json:"weatherId"`
	Bitmask                  uint8  `json:"bitmask"`
	Bitmask1                 uint8  `json:"bitmask1"`

	Unknown5             uint8              `json:"unknown5"`
	Unknown8             uint32             `json:"unknown8"`
	FestivalID           uint16             `json:"festivalId"`
	AdditionalFestivalID uint16             `json:"additionalFestivalId"`
	Unknown9             uint32             `json:"unknown9"`
	Unknown10            uint32             `json:"unknown10"`
	Unknown11            uint32             `json:"unknown11"`
	Unknown12            [4]uint32          `json:"unknown12"`
	Unknown13            [3]uint32          `json:"unknown13"`
	Pos                  FFXIVARR_POSITION3 `json:"pos"`
	Unknown14            [3]uint32          `json:"unknown14"`
	Unknown15            uint32             `json:"unknown15"`
}

InitZone - Structural representation of the packet sent by the server to initialize a zone for the player

type InventoryModifyHandler

type InventoryModifyHandler struct {
	Seq           uint32
	Action        uint8
	Pad0006       [6]uint8
	FromContainer uint16
	Pad000E       [2]uint8
	FromSlot      uint8
	Pad0011       [15]uint8
	ToContainer   uint16
	Pad0022       [2]uint8
	ToSlot        uint8
	Pad0025       [3]uint8
	SplitCount    uint32
}

func (*InventoryModifyHandler) MarshalJSON

func (i *InventoryModifyHandler) MarshalJSON() ([]byte, error)

MarshalJSON override for InventoryModifyHandler

type InventoryTransaction

type InventoryTransaction struct {
	Sequence        uint32    `json:"sequence"`
	Type            uint16    `json:"type"`
	Padding1        uint16    `json:"padding1"`
	OwnerID         uint32    `json:"ownerId"`
	StorageID       uint32    `json:"storageId"`
	SlotID          uint16    `json:"slotId"`
	Padding2        uint16    `json:"padding2"`
	StackSize       uint32    `json:"stackSize"`
	CatalogID       uint32    `json:"catalogId"`
	SomeActorID     uint32    `json:"someActorId"`
	TargetStorageID int32     `json:"targetStorageId"`
	Padding3        [3]uint32 `json:"padding3"`
}

type ItemInfo

type ItemInfo struct {
	ContainerSequence uint32 `json:"containerSequence"`
	Unknown           uint32 `json:"unknown"`
	ContainerID       uint16 `json:"containerId"`
	Slot              uint16 `json:"slot"`
	Quantity          uint32 `json:"quantity"`
	CatalogID         uint32 `json:"catalogId"`
	ReservedFlag      uint32 `json:"reservedFlag"`
	SignatureID       uint64 `json:"signatureId"`
	HqFlag            uint8  `json:"hqFlag"`
	Unknown2          uint8  `json:"unknown2"`
	Condition         uint16 `json:"condition"`
	SpiritBond        uint16 `json:"spiritbond"`
	Stain             uint16 `json:"stain"`
	GlamourCatalogID  uint32 `json:"glamourCatalogId"`
	Materia1          uint16 `json:"materia1"`
	Materia2          uint16 `json:"materia2"`
	Materia3          uint16 `json:"materia3"`
	Materia4          uint16 `json:"materia4"`
	Materia5          uint16 `json:"materia5"`
	// Someone still needs to get around to PRing Sapphire with these
	Tier1     uint8  `json:"tier1"`
	Tier2     uint8  `json:"tier2"`
	Tier3     uint8  `json:"tier3"`
	Tier4     uint8  `json:"tier4"`
	Tier5     uint8  `json:"tier5"`
	Padding   uint8  `json:"padding"`
	Unknown10 uint32 `json:"unknown10"`
}

ItemInfo -

type LandFlagSet

type LandFlagSet struct {
	LandIdent LandIdent
	LandFlags uint32
	Unkown1   uint32
}

type LandIdent

type LandIdent struct {
	LandId          uint16
	WardNum         uint16
	TerritoryTypeId uint16
	WorldId         uint16
}

type LobbyRetainerList

type LobbyRetainerList struct {
	Padding [0x210]uint8 `json:"padding"`
}

type LobbyServerList

type LobbyServerList struct {
	Seq        uint64 `json:"seq"`
	Final      uint16 `json:"final"`
	Offset     uint16 `json:"offset"`
	NumServers uint32 `json:"numServers"`
	Padding    uint32 `json:"padding"`
	Padding1   uint32 `json:"padding1"`
	Server     struct {
		ID       uint16     `json:"id"`
		Index    uint16     `json:"index"`
		Flags    uint32     `json:"flags"`
		Padding1 uint32     `json:"padding1"`
		Icon     uint32     `json:"icon"`
		Padding2 uint32     `json:"padding2"`
		Name     [0x40]byte `json:"name"`
	} `json:"server"`
}

type LobbyServiceAccountList

type LobbyServiceAccountList struct {
	Seq                uint64 `json:"seq"`
	Padding            uint8  `json:"padding"`
	NumServiceAccounts uint8  `json:"numServiceAccounts"`
	U1                 uint8  `json:"u1"`
	U2                 uint8  `json:"u2"`
	Padding1           uint32 `json:"padding1"`
	ServiceAccount     [8]struct {
		ID      uint32     `json:"id"`
		Unknown uint32     `json:"unknown"`
		Index   uint32     `json:"index"`
		Name    [0x44]byte `json:"name"`
	} `json:"serviceAccount"`
}

type MarketBoardItemListing

type MarketBoardItemListing struct {
	Listing [10]struct {
		ListingID       uint64 `json:"listingId"`
		RetainerID      uint64 `json:"retainerId"`
		RetainerOwnerID uint64 `json:"retainerOwnerId"`
		ArtisanID       uint64 `json:"artisanId"`
		PricePerUnit    uint32 `json:"pricePerUnit"`
		TotalTax        uint32 `json:"totalTax"`
		ItemQuantity    uint32 `json:"itemQuantity"`
		ItemID          uint32 `json:"itemId"`
		LastReviewTime  uint16 `json:"lastReviewTime"`
		ContainerID     uint16 `json:"containerId"`
		SlotID          uint32 `json:"slotId"`
		Durability      uint16 `json:"durability"`
		SpiritBond      uint16 `json:"spiritBond"`
		/**
		 * auto materiaID = (i & 0xFF0) >> 4
		 * auto index = i & 0xF
		 * auto leftover = i >> 8
		 */
		MateriaValue [5]uint16 `json:"materiaValue"`
		Padding1     uint16    `json:"padding1"`
		Padding2     uint32    `json:"padding2"`
		RetainerName [32]byte  `json:"retainerName"`
		PlayerName   [32]byte  `json:"playerName"`
		Hq           bool      `json:"hq"`
		MateriaCount uint8     `json:"materiaCount"`
		OnMannequin  uint8     `json:"onMannequin"`
		MarketCity   uint8     `json:"marketCity"`
		DyeID        uint16    `json:"dyeID"`
		Padding3     uint16    `json:"padding3"`
		Padding4     uint32    `json:"padding4"`
	} `json:"listing"` // Multiple packets are sent if there are more than 10 search results.
	ListingIndexEnd   uint8    `json:"listingIndexEnd"`
	ListingIndexStart uint8    `json:"listingIndexStart"`
	RequestID         uint16   `json:"requestId"`
	Padding7          [16]byte `json:"padding7"`
	Unknown13         uint8    `json:"unknown13"`
	Padding8          uint16   `json:"padding8"`
	Unknown14         uint8    `json:"unknown14"`
	Padding9          uint64   `json:"padding9"`
	Unknown15         uint32   `json:"unknown15"`
	Padding10         uint32   `json:"padding10"`
}

type MarketBoardItemListingCount

type MarketBoardItemListingCount struct {
	ItemCatalogID uint32 `json:"itemCatalogId"`
	Unknown1      uint32 `json:"unknown1"` // does some shit if nonzero
	RequestID     uint16 `json:"requestId"`
	Quantity      uint16 `json:"quantity"` // high/low u8s read separately?
	Unknown3      uint32 `json:"unknown3"`
}

type MarketBoardItemListingHistory

type MarketBoardItemListingHistory struct {
	ItemCatalogID  uint32 `json:"itemCatalogId"`
	ItemCatalogID2 uint32 `json:"itemCatalogId2"`

	Listing [20]struct {
		SalePrice    uint32 `json:"salePrice"`
		PurchaseTime uint32 `json:"purchaseTime"`
		Quantity     uint32 `json:"quantity"`
		IsHq         uint8  `json:"isHq"`
		Padding      uint8  `json:"padding"`
		OnMannequin  uint8  `json:"onMannequin"`

		BuyerName [33]byte `json:"buyerName"`

		ItemCatalogID uint32 `json:"itemCatalogId"`
	} `json:"listing"`
}

type MarketBoardSearchResult

type MarketBoardSearchResult struct {
	Items [20]struct {
		ItemCatalogID uint32 `json:"itemCatalogId"`
		Quantity      uint16 `json:"quantity"`
		Demand        uint16 `json:"demand"`
	} `json:"items"`

	ListingIndexEnd   uint32 `json:"listingIndexEnd"`
	Padding1          uint32 `json:"padding1"`
	ListingIndexStart uint32 `json:"listingIndexStart"`
	RequestID         uint32 `json:"requestId"`
}

type MarketTaxRates

type MarketTaxRates struct {
	Unknown1 uint32             `json:"unknown1"`
	Padding1 uint16             `json:"padding1"`
	Unknown2 uint16             `json:"unknown2"`
	TaxRate  [TOWN_COUNT]uint32 // In the order of Common::Town
	Unknown3 uint64             `json:"unknown3"`
}

type NpcSpawn

type NpcSpawn struct {
	GimmickID uint32 `json:"gimmickId"`
	U2b       uint8  `json:"u2b"`
	U2ab      uint8  `json:"u2ab"`
	GmRank    uint8  `json:"gmRank"`
	U3b       uint8  `json:"u3b"`

	AggressionMode uint8 `json:"aggressionMode"`
	OnlineStatus   uint8 `json:"onlineStatus"`
	U3c            uint8 `json:"u3c"`
	Pose           uint8 `json:"pose"`

	U4 uint8 `json:"u4"`

	TargetID        uint64 `json:"targetId"`
	U6              uint32 `json:"u6"`
	U7              uint32 `json:"u7"`
	MainWeaponModel uint64 `json:"mainWeaponModel"`
	SecWeaponModel  uint64 `json:"secWeaponModel"`
	CraftToolModel  uint64 `json:"craftToolModel"`

	U14             int32              `json:"u14"`
	U15             uint32             `json:"u15"`
	BNPCBase        uint32             `json:"bNPCBase"`
	BNPCName        uint32             `json:"bNPCName"`
	LevelID         uint32             `json:"levelId"`
	U19             uint32             `json:"u19"`
	DirectorID      uint32             `json:"directorId"`
	SpawnerID       uint32             `json:"spawnerId"`
	ParentActorID   uint32             `json:"parentActorId"`
	HPMax           uint32             `json:"hPMax"`
	HPCurr          uint32             `json:"hPCurr"`
	DisplayFlags    uint32             `json:"displayFlags"`
	FateID          uint16             `json:"fateID"`
	MPCurr          uint16             `json:"mPCurr"`
	Unknown1        uint16             `json:"unknown1"`
	Unknown2        uint16             `json:"unknown2"`
	ModelChara      uint16             `json:"modelChara"`
	Rotation        uint16             `json:"rotation"`
	ActiveMinion    uint16             `json:"activeMinion"`
	SpawnIndex      uint8              `json:"spawnIndex"`
	State           uint8              `json:"state"`
	PersistentEmote uint8              `json:"persistentEmote"`
	ModelType       uint8              `json:"modelType"`
	Subtype         uint8              `json:"subtype"`
	Voice           uint8              `json:"voice"`
	U25c            uint16             `json:"u25c"`
	EnemyType       uint8              `json:"enemyType"`
	Level           uint8              `json:"level"`
	ClassJob        uint8              `json:"classJob"`
	U26d            uint8              `json:"u26d"`
	U27a            uint16             `json:"u27a"`
	CurrentMount    uint8              `json:"currentMount"`
	MountHead       uint8              `json:"mountHead"`
	MountBody       uint8              `json:"mountBody"`
	MountFeet       uint8              `json:"mountFeet"`
	MountColor      uint8              `json:"mountColor"`
	Scale           uint8              `json:"scale"`
	ElementalLevel  uint16             `json:"elementalLevel"` // Eureka
	Element         uint16             `json:"element"`        // Eureka
	Effect          [30]StatusEffect   `json:"effect"`
	Pos             FFXIVARR_POSITION3 `json:"pos"`
	Models          [10]uint32         `json:"models"`
	Name            [32]byte           `json:"name"`
	Look            [26]uint8          `json:"look"`
	FcTag           [6]byte            `json:"fcTag"`
	Unk30           uint32             `json:"unk30"`
	Unk31           uint32             `json:"unk31"`
	BNPCPartSlot    uint8              `json:"bNPCPartSlot"`
	Unk32           uint8              `json:"unk32"`
	Unk33           uint16             `json:"unk33"`
	Unk34           uint32             `json:"unk34"`
}

type ObjectSpawn added in v0.0.8

type ObjectSpawn struct {
	SpawnIndex    uint8              `json:"spawnIndex"`
	ObjKind       uint8              `json:"objKind"`
	State         uint8              `json:"state"`
	Unknown3      uint8              `json:"unknown3"`
	ObjID         uint32             `json:"objId"`
	ActorID       uint32             `json:"actorId"`
	LevelID       uint32             `json:"levelId"`
	Unknown10     uint32             `json:"unknown10"`
	SomeActorID14 uint32             `json:"someActorId14"`
	GimmickID     uint32             `json:"gimmickId"`
	Scale         float32            `json:"scale"`
	Unknown20A    int16              `json:"unknown20a"`
	Rotation      uint16             `json:"rotation"`
	Unknown24A    int16              `json:"unknown24a"`
	Unknown24B    int16              `json:"unknown24b"`
	Unknown28A    uint16             `json:"unknown28a"`
	Unknown28C    int16              `json:"unknown28c"`
	HousingLink   uint32             `json:"housingLink"`
	Position      FFXIVARR_POSITION3 `json:"position"`
	Unknown3C     int16              `json:"unknown3C"`
	Unknown3E     int16              `json:"unknown3E"`
}

type OpcodeEntry

type OpcodeEntry struct {
	Name   string `json:"name"`
	Opcode uint16 `json:"opcode"`
}

OpcodeEntry has an opcode entry

type OpcodeLists

type OpcodeLists struct {
	ServerZoneIpcType  []OpcodeEntry
	ClientZoneIpcType  []OpcodeEntry
	ServerLobbyIpcType []OpcodeEntry
	ClientLobbyIpcType []OpcodeEntry
	ServerChatIpcType  []OpcodeEntry
	ClientChatIpcType  []OpcodeEntry
}

OpcodeLists has channel types

type OpcodeRegion

type OpcodeRegion struct {
	Region string      `json:"region"`
	Lists  OpcodeLists `json:"lists"`
}

OpcodeRegion has all opcodes for a region

type PlayerSetup

type PlayerSetup struct {
	// plain C types for a bit until the packet is actually fixed.
	// makes conversion between different editors easier.
	ContentID                       uint64                 `json:"contentId"`
	Unknown8                        uint32                 `json:"unknown8"`
	UnknownC                        uint32                 `json:"unknownC"`
	CharID                          uint32                 `json:"charId"`
	RestedExp                       uint32                 `json:"restedExp"`
	CompanionCurrentExp             uint32                 `json:"companionCurrentExp"`
	Unknown1C                       uint32                 `json:"unknown1C"`
	FishCaught                      uint32                 `json:"fishCaught"`
	UseBaitCatalogID                uint32                 `json:"useBaitCatalogId"`
	Unknown28                       uint32                 `json:"unknown28"`
	UnknownPvp2C                    uint16                 `json:"unknownPvp2C"`
	Unknown3                        uint16                 `json:"unknown3"`
	PvpFrontlineOverallCampaigns    uint32                 `json:"pvpFrontlineOverallCampaigns"`
	UnknownTimestamp34              uint32                 `json:"unknownTimestamp34"`
	UnknownTimestamp38              uint32                 `json:"unknownTimestamp38"`
	Unknown3C                       uint32                 `json:"unknown3C"`
	Unknown40                       uint32                 `json:"unknown40"`
	Unknown44                       uint32                 `json:"unknown44"`
	CompanionTimePassed             float32                `json:"companionTimePassed"`
	Unknown4C                       uint32                 `json:"unknown4C"`
	Unknown50                       uint16                 `json:"unknown50"`
	UnknownPvp52                    [4]uint16              `json:"unknownPvp52"`
	PlayerCommendations             uint16                 `json:"playerCommendations"`
	Unknown5C                       uint16                 `json:"unknown5C"`
	Unknown5E                       uint16                 `json:"unknown5E"`
	PvpFrontlineWeeklyCampaigns     uint16                 `json:"pvpFrontlineWeeklyCampaigns"`
	EnhancedAnimaGlassProgress      uint16                 `json:"enhancedAnimaGlassProgress"`
	Unknown64                       [4]uint16              `json:"unknown64"`
	PvpRivalWingsTotalMatches       uint16                 `json:"pvpRivalWingsTotalMatches"`
	PvpRivalWingsTotalVictories     uint16                 `json:"pvpRivalWingsTotalVictories"`
	PvpRivalWingsWeeklyMatches      uint16                 `json:"pvpRivalWingsWeeklyMatches"`
	PvpRivalWingsWeeklyVictories    uint16                 `json:"pvpRivalWingsWeeklyVictories"`
	MaxLevel                        uint8                  `json:"maxLevel"`
	Expansion                       uint8                  `json:"expansion"`
	Unknown76                       uint8                  `json:"unknown76"`
	Unknown77                       uint8                  `json:"unknown77"`
	Race                            uint8                  `json:"race"`
	Tribe                           uint8                  `json:"tribe"`
	Gender                          uint8                  `json:"gender"`
	CurrentJob                      uint8                  `json:"currentJob"`
	CurrentClass                    uint8                  `json:"currentClass"`
	Deity                           uint8                  `json:"deity"`
	NamedayMonth                    uint8                  `json:"namedayMonth"`
	NamedayDay                      uint8                  `json:"namedayDay"`
	CityState                       uint8                  `json:"cityState"`
	Homepoint                       uint8                  `json:"homepoint"`
	Unknown82                       uint8                  `json:"unknown82"`
	PetHotBar                       uint8                  `json:"petHotBar"`
	CompanionRank                   uint8                  `json:"companionRank"`
	CompanionStars                  uint8                  `json:"companionStars"`
	CompanionSp                     uint8                  `json:"companionSp"`
	CompanionUnk86                  uint8                  `json:"companionUnk86"`
	CompanionColor                  uint8                  `json:"companionColor"`
	CompanionFavoFeed               uint8                  `json:"companionFavoFeed"`
	Unknown89                       uint8                  `json:"unknown89"`
	Unknown8A                       [4]uint8               `json:"unknown8A"`
	HasRelicBook                    uint8                  `json:"hasRelicBook"`
	RelicBookID                     uint8                  `json:"relicBookId"`
	Unknown90                       [4]uint8               `json:"unknown90"`
	CraftingMasterMask              uint8                  `json:"craftingMasterMask"`
	Unknown95                       [9]uint8               `json:"unknown95"`
	Unknown9F                       [2]uint8               `json:"unknown9F"`
	UnknownA1                       [3]uint8               `json:"unknownA1"`
	Exp                             [CLASSJOB_SLOTS]uint32 `json:"exp"`
	Unknown108                      uint32                 `json:"unknown108"`
	PvpTotalExp                     uint32                 `json:"pvpTotalExp"`
	UnknownPvp110                   uint32                 `json:"unknownPvp110"`
	PvpExp                          uint32                 `json:"pvpExp"`
	PvpFrontlineOverallRanks        [3]uint32              `json:"pvpFrontlineOverallRanks"`
	Levels                          [CLASSJOB_SLOTS]uint16 `json:"levels"`
	Unknown15C                      [9]uint16              `json:"unknown15C"`
	U1                              uint16                 `json:"u1"`
	U2                              uint16                 `json:"u2"`
	Unknown112                      [23]uint16             `json:"unknown112"`
	FishingRecordsFish              [26]uint16             `json:"fishingRecordsFish"`
	BeastExp                        [11]uint16             `json:"beastExp"`
	Unknown1EA                      [5]uint16              `json:"unknown1EA"`
	PvpFrontlineWeeklyRanks         [3]uint16              `json:"pvpFrontlineWeeklyRanks"`
	UnknownMask1FA                  [4]uint16              `json:"unknownMask1FA"`
	CompanionName                   [21]uint8              `json:"companionName"`
	CompanionDefRank                uint8                  `json:"companionDefRank"`
	CompanionAttRank                uint8                  `json:"companionAttRank"`
	CompanionHealRank               uint8                  `json:"companionHealRank"`
	U19                             [8]uint8               `json:"u19"`
	MountGuideMask                  [22]uint8              `json:"mountGuideMask"`
	Name                            [32]byte               `json:"name"`
	UnknownOword                    [16]uint8              `json:"unknownOword"`
	UnknownOw                       uint8                  `json:"unknownOw"`
	UnlockBitmask                   [64]uint8              `json:"unlockBitmask"`
	Aetheryte                       [21]uint8              `json:"aetheryte"`
	Discovery                       [445]uint8             `json:"discovery"`
	Howto                           [34]uint8              `json:"howto"`
	Minions                         [45]uint8              `json:"minions"`
	ChocoboTaxiMask                 [10]uint8              `json:"chocoboTaxiMask"`
	WatchedCutscenes                [124]uint8             `json:"watchedCutscenes"`
	CompanionBardingMask            [10]uint8              `json:"companionBardingMask"`
	CompanionEquippedHead           uint8                  `json:"companionEquippedHead"`
	CompanionEquippedBody           uint8                  `json:"companionEquippedBody"`
	CompanionEquippedLegs           uint8                  `json:"companionEquippedLegs"`
	Unknown52A                      [4]uint8               `json:"unknown52A"`
	UnknownMask52E                  [11]uint8              `json:"unknownMask52E"`
	FishingGuideMask                [105]uint8             `json:"fishingGuideMask"`
	FishingSpotVisited              [31]uint8              `json:"fishingSpotVisited"`
	Unknown59A                      [27]uint8              `json:"unknown59A"`
	Unknown5A9                      [7]uint8               `json:"unknown5A9"`
	BeastRank                       [11]uint8              `json:"beastRank"`
	UnknownPvp5AB                   [11]uint8              `json:"unknownPvp5AB"`
	Unknown5B9                      [5]uint8               `json:"unknown5B9"`
	Pose                            uint8                  `json:"pose"`
	Unknown5B91                     uint8                  `json:"unknown5B91"`
	ChallengeLogComplete            [9]uint8               `json:"challengeLogComplete"`
	WeaponPose                      uint8                  `json:"weaponPose"`
	UnknownMask673                  [10]uint8              `json:"unknownMask673"`
	UnknownMask5DD                  [28]uint8              `json:"unknownMask5DD"`
	RelicCompletion                 [12]uint8              `json:"relicCompletion"`
	SightseeingMask                 [26]uint8              `json:"sightseeingMask"`
	HuntingMarkMask                 [55]uint8              `json:"huntingMarkMask"`
	TripleTriadCards                [32]uint8              `json:"tripleTriadCards"`
	U12                             [11]uint8              `json:"u12"`
	U13                             uint8                  `json:"u13"`
	AetherCurrentMask               [22]uint8              `json:"aetherCurrentMask"`
	U10                             [3]uint8               `json:"u10"`
	OrchestrionMask                 [40]uint8              `json:"orchestrionMask"`
	HallOfNoviceCompletion          [3]uint8               `json:"hallOfNoviceCompletion"`
	AnimaCompletion                 [11]uint8              `json:"animaCompletion"`
	U14                             [16]uint8              `json:"u14"`
	U15                             [13]uint8              `json:"u15"`
	UnlockedRaids                   [28]uint8              `json:"unlockedRaids"`
	UnlockedDungeons                [18]uint8              `json:"unlockedDungeons"`
	UnlockedGuildhests              [10]uint8              `json:"unlockedGuildhests"`
	UnlockedTrials                  [8]uint8               `json:"unlockedTrials"`
	UnlockedPvp                     [5]uint8               `json:"unlockedPvp"`
	ClearedRaids                    [28]uint8              `json:"clearedRaids"`
	ClearedDungeons                 [18]uint8              `json:"clearedDungeons"`
	ClearedGuildhests               [10]uint8              `json:"clearedGuildhests"`
	ClearedTrials                   [8]uint8               `json:"clearedTrials"`
	ClearedPvp                      [5]uint8               `json:"clearedPvp"`
	FishingRecordsFishWeight        [26]uint16             `json:"fishingRecordsFishWeight"`
	ExploratoryMissionNextTimestamp uint32                 `json:"exploratoryMissionNextTimestamp"`
	PvpLevel                        uint8                  `json:"pvpLevel"`
}

PlayerSetup - Structural representation of the packet sent by the server to initialize the client UI upon initial connection.

type PlayerSpawn

type PlayerSpawn struct {
	Title          uint16 `json:"title"`
	U1b            uint16 `json:"u1b"`
	CurrentWorldID uint16 `json:"currentWorldId"`
	HomeWorldID    uint16 `json:"homeWorldId"`

	GmRank       uint8 `json:"gmRank"`
	U3c          uint8 `json:"u3c"`
	U4           uint8 `json:"u4"`
	OnlineStatus uint8 `json:"onlineStatus"`

	Pose uint8 `json:"pose"`
	U5a  uint8 `json:"u5a"`
	U5b  uint8 `json:"u5b"`
	U5c  uint8 `json:"u5c"`

	TargetID        uint64 `json:"targetId"`
	U6              uint32 `json:"u6"`
	U7              uint32 `json:"u7"`
	MainWeaponModel uint64 `json:"mainWeaponModel"`
	SecWeaponModel  uint64 `json:"secWeaponModel"`
	CraftToolModel  uint64 `json:"craftToolModel"`

	U14             int32  `json:"u14"`
	U15             uint32 `json:"u15"`
	BNPCBase        uint32 `json:"bNPCBase"`
	BNPCName        uint32 `json:"bNPCName"`
	U18             uint32 `json:"u18"`
	U19             uint32 `json:"u19"`
	DirectorID      uint32 `json:"directorId"`
	OwnerID         uint32 `json:"ownerId"`
	U22             uint32 `json:"u22"`
	HPMax           uint32 `json:"hPMax"`
	HPCurr          uint32 `json:"hPCurr"`
	DisplayFlags    uint32 `json:"displayFlags"`
	FateID          uint16 `json:"fateID"`
	MPCurr          uint16 `json:"mPCurr"`
	MPMax           uint16 `json:"mPMax"`
	Unk             uint16 `json:"unk"` // == 0
	ModelChara      uint16 `json:"modelChara"`
	Rotation        uint16 `json:"rotation"`
	ActiveMinion    uint16 `json:"activeMinion"`
	SpawnIndex      uint8  `json:"spawnIndex"`
	State           uint8  `json:"state"`
	PersistentEmote uint8  `json:"persistentEmote"`
	ModelType       uint8  `json:"modelType"`
	Subtype         uint8  `json:"subtype"`
	Voice           uint8  `json:"voice"`
	U25c            uint16 `json:"u25c"`
	EnemyType       uint8  `json:"enemyType"`
	Level           uint8  `json:"level"`
	ClassJob        uint8  `json:"classJob"`
	U26d            uint8  `json:"u26d"`
	U27a            uint16 `json:"u27a"`
	CurrentMount    uint8  `json:"currentMount"`
	MountHead       uint8  `json:"mountHead"`
	MountBody       uint8  `json:"mountBody"`
	MountFeet       uint8  `json:"mountFeet"`
	MountColor      uint8  `json:"mountColor"`
	Scale           uint8  `json:"scale"`

	//uint32 elementalLevel one of these two field changed to 16bit
	//uint32 element
	ElementData [6]uint8 `json:"elementData"`

	Effect [30]StatusEffect   `json:"effect"`
	Pos    FFXIVARR_POSITION3 `json:"pos"`
	Models [10]uint32         `json:"models"`
	Name   [32]byte           `json:"name"`
	Look   [26]uint8          `json:"look"`
	FcTag  [6]byte            `json:"fcTag"`
	Unk30  uint32             `json:"unk30"`
}

PlayerSpawn - Structural representation of the packet sent by the server to spawn an actor

type PlayerStats

type PlayerStats struct {
	// order comes from baseparam order column
	Strength            uint32 `json:"strength"`
	Dexterity           uint32 `json:"dexterity"`
	Vitality            uint32 `json:"vitality"`
	Intelligence        uint32 `json:"intelligence"`
	Mind                uint32 `json:"mind"`
	Piety               uint32 `json:"piety"`
	Hp                  uint32 `json:"hp"`
	Mp                  uint32 `json:"mp"`
	Tp                  uint32 `json:"tp"`
	Gp                  uint32 `json:"gp"`
	Cp                  uint32 `json:"cp"`
	Delay               uint32 `json:"delay"`
	Tenacity            uint32 `json:"tenacity"`
	AttackPower         uint32 `json:"attackPower"`
	Defense             uint32 `json:"defense"`
	DirectHitRate       uint32 `json:"directHitRate"`
	Evasion             uint32 `json:"evasion"`
	MagicDefense        uint32 `json:"magicDefense"`
	CriticalHit         uint32 `json:"criticalHit"`
	AttackMagicPotency  uint32 `json:"attackMagicPotency"`
	HealingMagicPotency uint32 `json:"healingMagicPotency"`
	ElementalBonus      uint32 `json:"elementalBonus"`
	Determination       uint32 `json:"determination"`
	SkillSpeed          uint32 `json:"skillSpeed"`
	SpellSpeed          uint32 `json:"spellSpeed"`
	Haste               uint32 `json:"haste"`
	Craftsmanship       uint32 `json:"craftsmanship"`
	Control             uint32 `json:"control"`
	Gathering           uint32 `json:"gathering"`
	Perception          uint32 `json:"perception"`

	// todo: what is here?
	Unknown [26]uint32 `json:"unknown"`
}

PlayerStats - Structural representation of the packet sent by the server to set a players stats

type PrepareZoning added in v0.0.8

type PrepareZoning struct {
	LogMessage  uint32 `json:"logMessage"`
	TargetZone  uint16 `json:"targetZone"`
	Animation   uint16 `json:"animation"`
	Param4      uint8  `json:"param4"`
	HideChar    uint8  `json:"hideChar"`
	FadeOut     uint8  `json:"fadeOut"`
	Param7      uint8  `json:"param7"`
	FadeOutTime uint8  `json:"fadeOutTime"`
	Unknown     uint8  `json:"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.
	Padding     uint16 `json:"padding"`
}

type QuestActive

type QuestActive struct {
	QuestId   uint16
	Sequence  uint8
	Flags     uint8
	Padding   uint8
	BitFlag48 uint8
	BitFlag40 uint8
	BitFlag32 uint8
	BitFlag24 uint8
	BitFlag16 uint8
	BitFlag8  uint8
	Padding1  uint8
}

type RetainerInformation

type RetainerInformation struct {
	Unknown1         uint64   `json:"unknown1"`
	RetainerID       uint32   `json:"retainerID"`
	Unknown2         uint32   `json:"unknown2"`
	HireOrder        uint8    `json:"hireOrder"`
	ItemCount        uint8    `json:"itemCount"`
	Unknown3         uint16   `json:"unknown3"`
	Gil              uint32   `json:"gil"`
	ItemSellingCount uint8    `json:"itemSellingCount"`
	CityID           uint8    `json:"cityID"`
	ClassJobID       uint8    `json:"classJobID"`
	Level            uint32   `json:"level"`
	Unknown4         uint32   `json:"unknown4"`
	VentureID        uint32   `json:"ventureID"`
	VentureComplete  uint32   `json:"ventureComplete"`
	Padding          uint8    `json:"padding"`
	Name             [32]byte `json:"name"`
}

type SomeDirectorUnk4

type SomeDirectorUnk4 struct {
	EventID        uint32 `json:"eventId"`
	Param1         uint32 `json:"param1"`
	ActionTimeline uint32 `json:"actionTimeline"`
	Param3         uint32 `json:"param3"`
}

type StatusEffect

type StatusEffect struct {
	Effect_id     uint16
	Param         uint16
	Duration      float32
	SourceActorId uint32
}

type UpdateClassInfo

type UpdateClassInfo struct {
	ClassID        uint8  `json:"classId"`
	Level1         uint8  `json:"level1"`
	Level          uint16 `json:"level"`
	NextLevelIndex uint32 `json:"nextLevelIndex"`
	CurrentExp     uint32 `json:"currentExp"`
	RestedExp      uint32 `json:"restedExp"`
}

type UpdateInventorySlot

type UpdateInventorySlot struct {
	Sequence         uint32 `json:"sequence"`
	Unknown          uint32 `json:"unknown"`
	ContainerID      uint16 `json:"containerId"`
	Slot             uint16 `json:"slot"`
	Quantity         uint32 `json:"quantity"`
	CatalogID        uint32 `json:"catalogId"`
	ReservedFlag     uint32 `json:"reservedFlag"`
	SignatureID      uint64 `json:"signatureId"`
	HqFlag           uint8  `json:"hqFlag"`
	Condition        uint16 `json:"condition"`
	SpiritBond       uint16 `json:"spiritbond"`
	Color            uint16 `json:"color"`
	GlamourCatalogID uint32 `json:"glamourCatalogId"`
	Materia1         uint16 `json:"materia1"`
	Materia2         uint16 `json:"materia2"`
	Materia3         uint16 `json:"materia3"`
	Materia4         uint16 `json:"materia4"`
	Materia5         uint16 `json:"materia5"`
	Tier1            uint8  `json:"tier1"`
	Tier2            uint8  `json:"tier2"`
	Tier3            uint8  `json:"tier3"`
	Tier4            uint8  `json:"tier4"`
	Tier5            uint8  `json:"tier5"`
	Padding          uint8  `json:"padding"`
	Unknown10        uint32 `json:"unknown10"`
}

UpdateInventorySlot - Structural representation of the packet sent by the server to update a slot in the inventory

type UpdatePositionHandler added in v0.0.8

type UpdatePositionHandler struct {
	Rotation            float32            `json:"rotation"`
	AnimationType       uint8              `json:"animationType"`
	AnimationState      uint8              `json:"animationState"`
	ClientAnimationType uint8              `json:"clientAnimationType"`
	HeadPosition        uint8              `json:"headPosition"`
	Position            FFXIVARR_POSITION3 `json:"position"`
	Unk                 [4]uint8           `json:"unk"`
}

UpdatePositionHandler -

type UpdatePositionInstance added in v0.0.8

type UpdatePositionInstance struct {
	Rotation            float32            `json:"rotation"`
	InterpolateRotation float32            `json:"interpolateRotation"`
	Flags               uint32             `json:"flags"`
	Position            FFXIVARR_POSITION3 `json:"position"`
	InterpolatePosition FFXIVARR_POSITION3 `json:"interpolatePosition"`
	Unknown             uint32             `json:"unknown"`
}

UpdatePositionInstance -

type WeatherChange

type WeatherChange struct {
	WeatherID uint32  `json:"weatherId"`
	Delay     float32 `json:"delay"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL