/**
* Ashita - Copyright ( c ) 2014 - 2021 atom0s [ atom0s @ live . com ]
*
* This work is licensed under the Creative Commons Attribution - NonCommercial - NoDerivatives 4.0 International License .
* To view a copy of this license , visit http : //creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to
* Creative Commons , PO Box 1866 , Mountain View , CA 94042 , USA .
*
* By using Ashita , you agree to the above license and its terms .
*
* Attribution - You must give appropriate credit , provide a link to the license and indicate if changes were
* made . You must do so in any reasonable manner , but not in any way that suggests the licensor
* endorses you or your use .
*
* Non - Commercial - You may not use the material ( Ashita ) for commercial purposes .
*
* No - Derivatives - If you remix , transform , or build upon the material ( Ashita ) , you may not distribute the
* modified material . You are , however , allowed to submit the modified works back to the original
* Ashita project in attempt to have it added to the original project .
*
* You may not apply legal terms or technological measures that legally restrict others
* from doing anything the license permits .
*
* No warranties are given .
*/
# ifndef __ASHITA_AS_FFXI_ENTITY_H_INCLUDED__
# define __ASHITA_AS_FFXI_ENTITY_H_INCLUDED__
# if defined (_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
# endif
namespace Ashita
{
namespace FFXI
{
struct position_t
{
float X ;
float Y ;
float Z ;
float Unknown0000 ;
float Roll ;
float Yaw ; // Heading
float Pitch ;
bool operator = = ( const position_t & pos ) const
{
return ( ( this - > X = = pos . X ) & & ( this - > Y = = pos . Y ) & & ( this - > Z = = pos . Z ) ) ;
}
bool operator ! = ( const position_t & pos ) const
{
return ! ( this = = & pos ) ;
}
} ;
struct move_t
{
float X ;
float Y ;
float Z ;
float Unknown0000 ;
bool operator = = ( const move_t & pos ) const
{
return ( ( this - > X = = pos . X ) & & ( this - > Y = = pos . Y ) & & ( this - > Z = = pos . Z ) ) ;
}
bool operator ! = ( const move_t & pos ) const
{
return ! ( this = = & pos ) ;
}
} ;
struct movement_t
{
position_t LocalPosition ;
float Unknown0000 ;
position_t LastPosition ;
uint32_t Unknown0001 ;
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)
} ;
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)
} ;
struct animation_t
{
uint8_t Animations [ 0x28 ] ;
} ;
# pragma pack(push, 1)
struct ffxi_entity_t
{
uintptr_t CYyObjectVtable ; // CYyObject
movement_t Movement ;
uint8_t Unknown0000 [ 28 ] ;
uintptr_t Unknown0001 ; // Unknown Vtable pointer.
uint32_t TargetIndex ;
uint32_t ServerId ;
int8_t Name [ 28 ] ;
float Speed ;
float AnimationSpeed ;
uintptr_t WarpPointer ; // Pointer to the entities editable movement information.
uint32_t Unknown0002 [ 13 ] ;
float Distance ;
uint32_t Unknown0003 ; // Usually 0x64.
uint32_t Unknown0004 ; // Usually 0x64.
float Heading ; // Yaw
uintptr_t PetOwnerId ;
uint8_t HealthPercent ;
uint8_t ManaPercent ; // Pet only.
uint8_t EntityType ;
uint8_t Race ;
uint32_t Unknown0005 ;
uint16_t ModelFade ; // Used to force-refresh the entity model.
uint8_t Unknown0006 [ 6 ] ;
look_t Look ;
uint8_t Unknown0007 [ 14 ] ;
uint16_t ActionTimer1 ;
uint16_t ActionTimer2 ;
render_t Render ;
uint32_t Padding0000 ;
float Unknown0008 ; // Fishing related.
uint32_t Unknown0009 ; // Fade-in effect. (Valid values: 3 / 6)
uint16_t Unknown0010 ; // Fade-in misc. (-1 gets reset to 0)
uint32_t Unknown0011 ;
uint16_t NpcSpeechLoop ;
uint16_t NpcSpeechFrame ;
uint8_t Unknown0012 [ 18 ] ;
float Speed2 ; // Editable movement speed.
uint16_t NpcWalkPosition1 ;
uint16_t NpcWalkPosition2 ;
uint16_t NpcWalkMode ;
uint16_t CostumeId ;
uint8_t mou4 [ 4 ] ; // Always 'mou4'.
uint32_t Status ;
uint32_t StatusServer ;
uint32_t StatusNpcChat ; // Used while talking with an npc.
uint32_t Unknown0013 ;
uint32_t Unknown0014 ;
uint32_t Unknown0015 ;
uint32_t Unknown0016 ;
uint32_t ClaimServerId ; // The entities server id that has claim (or last claimed) the entity.
uint32_t Unknown0017 ; // Inventory related.
animation_t Animations ; // The entities animation strings. (idl, sil, wlk, etc.)
uint16_t AnimationTick ; // Current ticks of the active animation.
uint16_t AnimationStep ; // Current step of the active animation.
uint8_t AnimationPlay ; // Current animation playing. (6 = Stand>Sit, 12 = Play current emote.)
uint8_t Unknown0018 ; // Animation related.
uint16_t EmoteTargetIndex ; // The target index the emote is being performed on.
uint16_t EmoteId ; // The id of the emote.
uint16_t Unknown0019 ;
uint32_t EmoteIdString ; // The string id of emote.
uintptr_t EmoteTargetWarpPointer ; // The emote target entities warp pointer.
uint32_t Unknown0020 ;
uint32_t SpawnFlags ; // 0x01 = PC, 0x02 = NPC, 0x10 = Mob, 0x0D = Self
uint32_t LinkshellColor ; // ARGB style color code.
uint16_t NameColor ; // Numerical code to pre-defined colors.
uint16_t CampaignNameFlag ; // Normally 0x4000, low-byte sets the flag.
uint16_t FishingTimer ; // Counts down from when you click 'fish' til you either make a catch or reel-in.
uint16_t FishingCastTimer ; // Counts down from when you click 'fish' til your bait hits the water.
uint32_t FishingUnknown0000 ; // Fishing related.
uint32_t FishingUnknown0001 ; // Fishing related.
uint16_t FishingUnknown0002 ; // Fishing related.
uint8_t Unknown0021 [ 14 ] ;
uint16_t TargetedIndex ; // The entities targeted index. (Does not always populate. Does not populate for local player.)
uint16_t PetTargetIndex ; // The entities pet target index.
uint16_t Unknown0022 ; // Npc talking countdown timer. (After done talking with npc.)
uint8_t Unknown0023 ; // Flag set after talking with an npc.
uint8_t BallistaScoreFlag ; // Ballista / PvP related.
uint8_t PankrationEnabled ;
uint8_t PankrationFlagFlip ;
uint16_t Unknown0024 ;
float ModelSize ;
uint8_t Unknown0025 [ 8 ] ;
uint16_t MonstrosityFlag ; // The entities monstrosity flags.
uint16_t MonstrosityNameId ; // The entities monstrosity name id.
int8_t MonstrosityName [ 36 ] ; // The entities monstrosity name.
} ;
# pragma pack(pop)
} ; // namespace FFXI
} ; // namespace Ashita
# endif // __ASHITA_AS_FFXI_ENTITY_H_INCLUDED__