/** * Ashita SDK - Copyright (c) 2023 Ashita Development Team * Contact: https://www.ashitaxi.com/ * Contact: https://discord.gg/Ashita * * This file is part of Ashita. * * Ashita is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Ashita is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Ashita. If not, see . */ #ifndef ASHITA_SDK_FFXI_ENTITY_H_INCLUDED #define ASHITA_SDK_FFXI_ENTITY_H_INCLUDED #if defined(_MSC_VER) && (_MSC_VER >= 1020) #pragma once #endif // clang-format off #include namespace Ashita::FFXI { struct position_t { float X; float Z; float Y; float W; float Roll; float Yaw; float Pitch; float Unknown0000; }; struct move_t { float X; float Z; float Y; float W; float DeltaX; // (LastPosition.X - LocalPosition.X) / LocalMoveCount float DeltaZ; // (LastPosition.Z - LocalPosition.Z) / LocalMoveCount float DeltaY; // (LastPosition.Y - LocalPosition.Y) / LocalMoveCount float DeltaW; float DeltaRoll; // (LastPosition.Roll - LocalPosition.Roll) * 0.0625 float DeltaYaw; // (LastPosition.Yaw - LocalPosition.Yaw) * 0.0625 float DeltaPitch; // (LastPosition.Pitch - LocalPosition.Pitch) * 0.0625 float Unknown0000; }; struct movement_t { position_t LocalPosition; position_t LastPosition; move_t Move; }; struct look_t { uint16_t Hair; // Hair Style uint16_t Head; // Head Armor (Starts at 0x1000) uint16_t Body; // Body Armor (Starts at 0x2000) uint16_t Hands; // Hands Armor (Starts at 0x3000) uint16_t Legs; // Legs Armor (Starts at 0x4000) uint16_t Feet; // Feet Armor (Starts at 0x5000) uint16_t Main; // Main Weapon (Starts at 0x6000) uint16_t Sub; // Sub Weapon (Starts at 0x7000) uint16_t Ranged; // Ranged Weapon (Starts at 0x8000) uint8_t Unknown0000[14]; // Unknown [Part of the entity look block based on the entity creation setup.] }; struct render_t { uint32_t Flags0; // Main Render Flags uint32_t Flags1; // Name Flags (Party, Away, Anon) uint32_t Flags2; // Name Flags (Bazaar, GM Icon, etc.) uint32_t Flags3; // Entity Flags (Shadow) uint32_t Flags4; // Name Flags (Name Visibility) uint32_t Flags5; // Geomancer Indi's uint32_t Flags6; // Unknown uint32_t Flags7; // Overhead Flags (Hi-word: Jump Emote, Model Visibility etc.) (Low-word: Job Mastery Stars, Party Seek Mastery Star, etc. [Low-Byte:] Timer of some sort.) uint32_t Flags8; // Overhead Flags (Job mastery party.) }; struct entity_t { uintptr_t VTablePointer; // The base CYyObject VTable pointer. movement_t Movement; // The entities various movement information. uint32_t TargetIndex; // The entities target index. uint32_t ServerId; // The entities server id. int8_t Name[28]; // The entities name. [Last 4 bytes are used as a flag for some entities.] float MovementSpeed; // The entities movement speed. float AnimationSpeed; // The entities animation speed. uintptr_t ActorPointer; // The entities actor pointer. uintptr_t Attachments[12]; // The entities attachments. [ie. CXiSkeletonActor - Used with things such as GEO Indi's.] uintptr_t EventPointer; // The entities event pointer. [Points to the XiEvent object that is being processed for the current event the entity is in.] float Distance; // The entities distance to the local player. uint32_t TurnSpeed; // The entities speed in which they will turn to talk to/interact with something. [Default: 0x64, Set in event VM opcode: 0x0059] uint32_t TurnSpeedHead; // The entities speed in which they will turn their head and look at something. [Default: 0x64, Set in event VM opcode: 0x0059] float Heading; // The entities heading direction. (Yaw) uintptr_t Next; // Set to the entity pointer you are closest to within 1.2 yalms. Used as a linked list if you are close to multiple entities. uint8_t HPPercent; // The entities health percent. uint8_t Unknown0000; // Unknown [Used to be pet mp percent, not used anymore.] uint8_t Type; // The entities object type. [0 = PC, 1 = NPC, 2 = NPC (Fixed Models), 3 = Doors etc.] uint8_t Race; // The entities race id. uint16_t LocalMoveCount; // The entities local movement counter used to handle delta movement calculations. uint16_t ActorLockFlag; // The entities lock flag. If set, the entity will ignore model updates from gear changes. uint16_t ModelUpdateFlags; // The entities update flags when the model is being refreshed. (ie. Gear swaps.) uint16_t Unknown0001; // Unknown [Some parts seem used, unsure what for. Trusts generally have the second byte as 255.] uint32_t DoorId; // The entities door id, if entity is a door. (ie. _6er) look_t Look; // The entities model appearance information. uint16_t ActionTimer1; // The entities action timer. [The action lock count.] uint16_t ActionTimer2; // The entities action timer. [The action lock timeout.] render_t Render; // The entities various render flags. uint8_t PopEffect; // The entities pop effect. [3 and 6 are valid values. Calls function with 'pop0' or 'pop1' effect.] uint8_t UpdateMask; // The entities last update mask sent in an 0x000D or 0x000E packet that updated this information. uint16_t InteractionTargetIndex; // The target index of the entities last interaction target. (When talking to an npc, it will set it to your local target index for them to look at you.) uint16_t NpcSpeechFrame; // The frame of the entities current speech event. (Usually set to 6 when first talking.) uint16_t LookAxisX; // The entities look axis X. (Direction their head is set to look at when Render.Flags3 has a specific flag set.) [Set in event VM opcode: 0x0079] uint16_t LookAxisY; // The entities look axis Y. (Direction their head is set to look at when Render.Flags3 has a specific flag set.) [Set in event VM opcode: 0x0079] uint16_t MouthCounter; // The entities mouth movement counter. uint16_t MouthWaitCounter; // The entities mouth movement wait counter. uint16_t CraftTimerUnknown; // Unknown timer based value that is converted to a float. (Updated from synthesis animation packet. Incoming 0x0030) uint32_t CraftServerId; // The server id of the parent entity causing this entity to synth. uint16_t CraftAnimationEffect; // The crafting animation effect. (If >= 100, -0x235B otherwise +0x1330 for the true id.) uint8_t CraftAnimationStep; // The crafting animation step. [Crystal Animation order: 0 (start), 10 (sit), 11, 1, 2 or 4, 3] uint8_t CraftParam; // The crafting animation parameter. [0 = NQ, 1 = Break, 2 = HQ, etc.] float MovementSpeed2; // The entities movement speed. (Editable) uint16_t NpcWalkPosition1; // The entities walk delta position. uint16_t NpcWalkPosition2; // The entities walk delta position. uint16_t NpcWalkMode; // The entities walk mode. uint16_t CostumeId; // The entities costume id. uint32_t Mou4; // Unknown animation fourcc. uint32_t StatusServer; // The entities status. (Updated from character update packet. Incoming 0x0037) uint32_t Status; // The entities status. (Synced from StatusServer, main status value used in the client for most validations.) uint32_t StatusEvent; // The entities status. (Used while talking to an npc / in an event.) uint32_t Unknown0002; // Unknown [PS2: Potentially ActorStatus] uint32_t Unknown0003; // Unknown [PS2: Potentially CliStatus] uint32_t ModelTime; // The entities model time. [ie. Used with elevators for their lift animations.] uint32_t ModelStartTime; // The entities model start time. [ie. Used with elevators for their lift animations.] uint32_t ClaimStatus; // The entities current claim information / last claimed info for dead entities. [Low-word holds the claimer server id. High-word is a 0/1 flag.] uint32_t ZoneId; // The entities zone id. (This is only set for the local player under certain conditions.) uint32_t Animations[10]; // The entities animations. uint16_t AnimationTime; // The current time/duration of the animation. (ie. Counts up while walking.) uint16_t AnimationStep; // The current step of the animation. [Set via: rand() % 600 + 600] uint8_t AnimationPlay; // Flag used to cause the entities set animation to play. [6 = Sit/Stand, 12 = Play Emote, 21 = Sit, etc.] uint8_t Unknown0004; // Unknown [Unlocks the players model from their mount, allowing them to move freely with the mount remaining where it was when this flag was enabled.] uint16_t EmoteTargetIndex; // The target index of the entity that is the target of the emote. uint16_t EmoteId; // The emote id of the emote the entity is performing. uint16_t Unknown0005; // Unknown [Potentially padding now for alignment. Does not appear to be used/referenced.] uint32_t EmoteIdString; // The string id of the emote. uintptr_t EmoteTargetActorPointer;// The target actor pointer of the entity that is the target of the emote. uint32_t Unknown0006; // Unknown [Emote related, set and read when an emote is used. Incremented or set to 0. Can be set to 150 or 151 directly as well.] uint32_t SpawnFlags; // The entities spawn flags. [0x01 = PC, 0x02 = NPC, 0x10 = Mob, 0x0D = Local Player] uint32_t LinkshellColor; // The entities linkshell color. [BGR format, alpha is ignored.] uint16_t NameColor; // The entities name color. [Predefined numerical codes are used.] uint8_t CampaignNameFlag; // The entities campaign name flag. [If enabled, shows the sword icon next to the entities name.] uint8_t MountId; // The entities mount id. [Used when status is 85.] int32_t FishingUnknown0000; // Unknown [Action countdown timer used to delay fishing action packets. Set via: rand() % 601 + 900, sends 0x66 packet if <= 0] [This works similar to FishingActionCountdown.] int32_t FishingUnknown0001; // Unknown [Used as two WORD timer values. LOWORD to 180 when fishing starts. HIWORD set to 1800 when FishingUnknown0000 <= 0. Sends 0x66 packet to finish fishing if <= 0 with stamina set to 201.] [This works similar to FishingRodCastTime.] int32_t FishingActionCountdown; // The countdown until a fish either bits or not. [Sends 0x110 packet if <= 0.] int16_t FishingRodCastTime; // The countdown until the rod cast animation finishes and the client tells the server you are fishing. [Sends 0x110 packet if <= 0.] int16_t FishingUnknown0002; // Unknown [Set to 1800 when FishingActionCountdown is <= 0. Sends 0x110 packet to finish fishing if <= 0 with stamina set to 201.] uint32_t LastActionId; // The entities last action id. [For example, talking to some NPCs will set this to tlk0. Set within the event VM opcode handlers.] uint32_t Unknown0007; // Unknown [Has one usage but seems unused otherwise, usage is not referenced either.] uintptr_t LastActionActorPointer; // The actor pointer used with LastActionId. uint16_t TargetedIndex; // The target index of the entities target. [Not always populated. Not populated for local player.] uint16_t PetTargetIndex; // The entities pet target index. uint16_t UpdateRequestDelay; // Timer used to delay 0x16 packet requests when IsDirty is set to true. uint8_t IsDirty; // Flag used to mark the entity dirty and requires a forced update. [Sends a 0x16 packet when set to 1 and UpdateRequestDelay hits 0.] uint8_t BallistaFlags; // The entities Ballista flags. [Handles setting the players name icon, name color, and displaying the game score.] uint8_t PankrationEnabled; // Flag used with Pankration. uint8_t PankrationFlagFlip; // Flag used with Pankration. uint16_t Unknown0008; // Unknown [Used with Attachments[1] as a timer when the entity uses an Indi spell.] float ModelSize; // The entities model size. [Generally -1 as default.] float ModelHitboxSize; // The entities model hitbox size. [Sent in packets: 0x0D, 0x0E, 0x37. Calculated as: (uint8_t)data * 0.10] uint32_t EnvironmentAreaId; // The entities environment area id. Used to override how the entity should be colored and how light affects the model. [Set in event VM opcode: 0x00AE] uint16_t MonstrosityFlag; // The entities monstrosity enabled flag. uint16_t MonstrosityNameId; // The entities monstrosity name id. [Used as two separate bytes. Each byte is used as a name prefix to be added to the main name.] int8_t MonstrosityName[32]; // The entities monstrosity name if enabled. uint8_t MonstrosityNameEnd; // The entities monstrosity name end. [Used as a null terminator in the event a name gets too long and overflows the buffer.] uint8_t MonstrosityNameAbbr[24];// The entities monstrosity name abbreviation. uint8_t MonstrosityNameAbbrEnd; // The entities monstrosity name abbreviation end. [Used as a null terminator in the event a name gets too long and overflows the buffer.] uint16_t Unknown0009; // Unknown [Potentially padding now for alignment.] uint8_t CustomProperties[44]; // The entities custom properties. [This can be used for various things such as chocobo look customizations. (color, feather changes, etc.)] uint8_t BallistaInfo[36]; // Ballista information that the entity has been sent. uint16_t FellowTargetIndex; // The target index of the entities adventuring fellow. uint16_t WarpTargetIndex; // The target index to follow or warp to. (If used on local player you will warp instantly to the target index. Use with caution!) uint16_t TrustOwnerTargetIndex; // The owner target index. [Trusts have this set to their owners target index.] uint16_t AreaDisplayTargetIndex; // The entities area display target index. [This is only set for the local player; used as the 'Area Display' target index to center the displayed circle around.] uint32_t Unknown0010; // Unknown [Appears to be unused now. Set to 0 when an entity is created, then no other uses found.] }; } // namespace Ashita::FFXI #endif // ASHITA_SDK_FFXI_ENTITY_H_INCLUDED