typedef struct SPlayerTable
{
DWORD id;
char name[CHARACTER_NAME_MAX_LEN + 1];
char ip[IP_ADDRESS_LENGTH + 1];
WORD job;
BYTE voice;
BYTE level;
BYTE level_step;
short st, ht, dx, iq;
DWORD exp;
long long gold;
#ifdef UNLOCK_INVENTORY_WORLDARD
DWORD inventory_unlock[UNLOCK_INVENTORY_MAX];
#endif
#ifdef BATTLEPASS_WORLDARD
DWORD dwBattlePassEndTime;
#endif
BYTE dir;
INT x, y, z;
INT lMapIndex;
long lExitX, lExitY;
long lExitMapIndex;
// @fixme301
int hp;
int sp;
short sRandomHP;
short sRandomSP;
int playtime;
short stat_point;
short skill_point;
short sub_skill_point;
short horse_skill_point;
TPlayerSkill skills[SKILL_MAX_NUM];
TQuickslot quickslot[QUICKSLOT_MAX_NUM];
BYTE part_base;
WORD parts[PART_MAX_NUM];
#ifdef ENABLE_AUTOMATIC_PICK_UP_SYSTEM
DWORD dwPickUPMode;
DWORD dwRarityMode;
#endif
short stamina;
BYTE skill_group;
long lAlignment;
char szMobile[MOBILE_MAX_LEN + 1];
short stat_reset_count;
THorseInfo horse;
DWORD logoff_interval;
int aiPremiumTimes[PREMIUM_MAX_NUM];
#ifdef ENABLE_CONQUEROR_LEVEL
BYTE conquerorlevel;
BYTE conqueror_level_step;
short sungma_str, sungma_hp, sungma_move, sungma_inmune;
DWORD conqueror_exp;
short conqueror_point;
#endif
#ifdef ENABLE_OFFLINESHOP_SYSTEM
unsigned long long shopFlag;
#endif
#ifdef ENABLE_BATTLE_PASS
long long battlePassData[MISSION_MAX];
#endif
#ifdef ENABLE_NEW_DETAILS_GUI
long kill_log[KILL_MAX_NUM];
#endif
#ifdef ENABLE_ANTI_EXP
bool anti_exp;
#endif
#ifdef __GEM_SYSTEM__
int gem;
#endif
} TPlayerTable;