/**
* 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_PLAYER_H_INCLUDED
#define ASHITA_SDK_FFXI_PLAYER_H_INCLUDED
#if defined(_MSC_VER) && (_MSC_VER >= 1020)
#pragma once
#endif
// clang-format off
#include
namespace Ashita::FFXI
{
struct playerstats_t
{
int16_t Strength;
int16_t Dexterity;
int16_t Vitality;
int16_t Agility;
int16_t Intelligence;
int16_t Mind;
int16_t Charisma;
};
struct playerresists_t
{
int16_t Fire;
int16_t Ice;
int16_t Wind;
int16_t Earth;
int16_t Lightning;
int16_t Water;
int16_t Light;
int16_t Dark;
};
struct combatskill_t
{
uint16_t Raw;
uint16_t GetSkill(void) const { return (uint16_t)(this->Raw & 0x7FFF); }
bool IsCapped(void) const { return (this->Raw & 0x8000) == 0 ? false : true; }
};
struct craftskill_t
{
uint16_t Raw;
uint16_t GetSkill(void) const { return (this->Raw & 0x1FE0) >> 5; }
uint16_t GetRank(void) const { return (uint16_t)(this->Raw & 0x1F); }
bool IsCapped(void) const { return (this->Raw & 0x8000) >> 15 == 0 ? false : true; }
};
struct combatskills_t
{
combatskill_t Unknown;
combatskill_t HandToHand;
combatskill_t Dagger;
combatskill_t Sword;
combatskill_t GreatSword;
combatskill_t Axe;
combatskill_t GreatAxe;
combatskill_t Scythe;
combatskill_t Polearm;
combatskill_t Katana;
combatskill_t GreatKatana;
combatskill_t Club;
combatskill_t Staff;
combatskill_t Unused0000;
combatskill_t Unused0001;
combatskill_t Unused0002;
combatskill_t Unused0003;
combatskill_t Unused0004;
combatskill_t Unused0005;
combatskill_t Unused0006;
combatskill_t Unused0007;
combatskill_t Unused0008;
combatskill_t AutomatonMelee;
combatskill_t AutomatonRanged;
combatskill_t AutomatonMagic;
combatskill_t Archery;
combatskill_t Marksmanship;
combatskill_t Throwing;
combatskill_t Guarding;
combatskill_t Evasion;
combatskill_t Shield;
combatskill_t Parrying;
combatskill_t Divine;
combatskill_t Healing;
combatskill_t Enhancing;
combatskill_t Enfeebling;
combatskill_t Elemental;
combatskill_t Dark;
combatskill_t Summon;
combatskill_t Ninjutsu;
combatskill_t Singing;
combatskill_t String;
combatskill_t Wind;
combatskill_t BlueMagic;
combatskill_t Geomancy;
combatskill_t Handbell;
combatskill_t Unused0009;
combatskill_t Unused0010;
};
struct craftskills_t
{
craftskill_t Fishing;
craftskill_t Woodworking;
craftskill_t Smithing;
craftskill_t Goldsmithing;
craftskill_t Clothcraft;
craftskill_t Leathercraft;
craftskill_t Bonecraft;
craftskill_t Alchemy;
craftskill_t Cooking;
craftskill_t Synergy;
craftskill_t Riding;
craftskill_t Digging;
craftskill_t Unused0000;
craftskill_t Unused0001;
craftskill_t Unused0002;
craftskill_t Unused0003;
};
struct abilityrecast_t
{
uint16_t Recast; // The ability recast timer at the time of use.
uint8_t RecastCalc1; // Calculation related value when determining an abilities current charges and recast timer.
uint8_t TimerId; // The ability recast timer id.
int16_t RecastCalc2; // Calculation related value when determining an abilities current charges and recast timer.
int16_t Unknown0000; // Unknown
};
struct mountrecast_t
{
uint32_t Recast;
uint32_t TimerId;
};
union unityinfo_t
{
uint32_t Raw;
struct
{
uint32_t Faction : 4;
uint32_t Unknown : 6;
uint32_t Points : 22;
} Bits;
};
struct jobpointentry_t
{
uint16_t CapacityPoints;
uint16_t Points;
uint16_t PointsSpent;
};
struct jobpointsinfo_t
{
uint32_t Unknown0000;
jobpointentry_t Jobs[24];
};
struct statusoffset_t
{
float X;
float Z;
float Y;
float W;
};
struct player_t
{
uint32_t HPMax; // The players max health.
uint32_t MPMax; // The players max mana.
uint8_t MainJob; // The players main job id.
uint8_t MainJobLevel; // The players main job level.
uint8_t SubJob; // The players sub job id.
uint8_t SubJobLevel; // The players sub job level.
uint16_t ExpCurrent; // The players current experience points.
uint16_t ExpNeeded; // The players current experience points needed to level.
playerstats_t Stats; // The players base stats.
playerstats_t StatsModifiers; // The players stat modifiers.
int16_t Attack; // The players attack.
int16_t Defense; // The players defense.
playerresists_t Resists; // The players elemental resists.
uint16_t Title; // The players title id.
uint16_t Rank; // The players rank number.
uint16_t RankPoints; // The players rank points. [Two values packed.]
uint16_t Homepoint; // The players homepoint.
uint32_t Unknown0000; // Unknown (Set from 0x61 packet. Offset: 0x4C) [Potentially BindZoneNo.]
uint8_t Nation; // The players nation id.
uint8_t Residence; // The players residence id.
uint16_t SuLevel; // The players Superior Equipment level.
uint8_t HighestItemLevel; // The players highest equipped item level.
uint8_t ItemLevel; // The players item level. (1 = 100, increases from there. -1 from what the value is in memory.)
uint8_t MainHandItemLevel; // The players main hand item level.
uint8_t RangedItemLevel; // The players ranged weapon item level.
unityinfo_t UnityInfo; // The players unity faction and points.
uint16_t UnityPartialPersonalEvalutionPoints; // The players partial unity personal evaluation points.
uint16_t UnityPersonalEvaluationPoints; // The players personal unity evaluation points.
uint32_t UnityChatColorFlag; // Alters the color of the unity faction name when the chat bar is open for /unity chat.
uint8_t MasteryJob; // The players set Mastery job id.
uint8_t MasteryJobLevel; // The players current Mastery job level.
uint8_t MasteryFlags; // Flags that control how the Mastery system works and displays information.
uint8_t MasteryUnknown0000; // Unknown [Potentially padding.]
uint32_t MasteryExp; // The players current Mastery job experience points.
uint32_t MasteryExpNeeded; // The players current Mastery job experience points needed to level.
combatskills_t CombatSkills; // The players combat skills.
craftskills_t CraftSkills; // The players crafting skills.
abilityrecast_t AbilityInfo[31]; // The players ability recast information.
mountrecast_t MountRecast; // The players mount recast information.
uint8_t DataLoadedFlags; // Flags that control what player information has been populated. Controls text visiiblity in player menus, unity information, etc.
uint8_t Unknown0001; // Unknown [Potentially padding.]
uint16_t LimitPoints; // The players current limit points.
uint16_t MeritPoints: 7; // The players current merit points.
uint16_t AssimilationPoints: 6; // The players assimilation points.
uint16_t IsLimitBreaker: 1; // Flag if the player has unlocked earning merit points.
uint16_t IsExperiencePointsLocked: 1; // Flag if the player has max experience points. (Also set to 1 if limit mode is enabled.)
uint16_t IsLimitModeEnabled: 1; // Flag if the player has limit mode enabled.
uint8_t MeritPointsMax; // The players max merits.
uint8_t Unknown0002[3]; // Unknown [Set with MeritPointsMax, looks to be just junk.]
uint16_t Unknown0003; // Unknown
jobpointsinfo_t JobPoints; // The players current job point information.
uint8_t HomepointMasks[64]; // The players known homepoints. [Bitpacked masks.]
int16_t StatusIcons[32]; // The players status icons used for status timers.
uint32_t StatusTimers[32]; // The players status timers.
uint8_t Unknown0004[32]; // Unknown [Set from 0x63 packet, case 0x0A.]
uint32_t IsZoning; // Flag if the player is zoning and the client should send an 0x0C request.
statusoffset_t StatusOffset1; // Status based movement offsets.
statusoffset_t StatusOffset2; // Status based movement offsets.
statusoffset_t StatusOffset3; // Status based movement offsets.
statusoffset_t StatusOffset4; // Status based movement offsets.
uint32_t Unknown0005; // Unknown [Set from 0x10E packet, casted to a double later in usages.]
uint32_t Unknown0006; // Unknown
int16_t Buffs[32]; // The players current status effect icon ids.
};
constexpr auto pos_ = offsetof(player_t, Buffs);
} // namespace Ashita::FFXI
#endif // ASHITA_SDK_FFXI_PLAYER_H_INCLUDED