#ifndef RAGNAROK_SOURCE_CLIENT_SESSION_H #define RAGNAROK_SOURCE_CLIENT_SESSION_H #include "Contents/InstantVar.h" #include "Contents/Items/ItemInfo.h" #include "Contents/Messenger/MessengerMember.h" #include "Contents/Party/PartyBookingMgr.h" #include "Contents/Skills/PlayerSkillBundle.h" #include "Contents/UserData/NormalItemSlots.h" #include "Resource/XmlNode.h" #include #include #include #include #include #include #include #include #include class CActRes; class CGameActor; class CRenderObject; class LuaScript; struct JobNameInitialization; struct ActionFrame; struct WindowDialogs; struct vector3d; struct EquipSlots { /* 0000 */ int values[3]; }; struct SessionRecord6144 { /* 0000 */ std::uint16_t unknown_0000 = 0; /* 0004 */ std::uint32_t unknown_0004[10] = {}; /* 002C */ int unknown_002C = 0; /* 0030 */ std::uint8_t unknown_0030 = 0; /* 0031 */ std::uint8_t unknown_0031; /* 0032 */ std::int16_t year; /* 0034 */ std::int16_t month; /* 0036 */ std::int16_t day; }; #pragma pack(push, 1) struct AchievementRecordPacket { /* 0000 */ int id; /* 0004 */ unsigned char completed; /* 0005 */ std::uint32_t objectives[10]; /* 002D */ __time32_t completedAt; /* 0031 */ unsigned char rewarded; }; #pragma pack(pop) struct SessionRecord6178Entry { /* 0000 */ std::string unknown_0000; /* 0018 */ int unknown_0018; }; struct SessionRecord6178 { /* 0000 */ unsigned char unknown_0000; /* 0001 */ unsigned char unknown_0001; /* 0004 */ int id; /* 0008 */ std::string unknown_0008; /* 0020 */ std::vector unknown_0020; }; struct RobeAlpha { /* 0000 */ int from; /* 0004 */ int to; /* 0008 */ int period; }; struct ProhibitionLogEntry { /* 0000 */ std::uint32_t aid; /* 0004 */ std::uint32_t accountId; /* 0008 */ std::uint32_t minutes; /* 000C */ std::uint32_t date; /* 0010 */ std::uint32_t time; /* 0014 */ char name[32]; /* 0034 */ char ownerName[32]; }; struct SessionRequestTimer { /* 0000 */ int requestId; /* 0004 */ unsigned long readyTime; }; struct SessionRecord0734 { /* 0000 */ std::uint32_t unknown_0000 = 0; /* 0004 */ int id; /* 0008 */ std::uint32_t unknown_0008; }; struct SessionShop { /* 0000 */ unsigned char unknown_0000; /* 0004 */ std::vector>> unknown_0004; }; struct SessionEntry5BD4Detail { /* 0000 */ unsigned char unknown_0000[0x2C]; /* 002C */ std::string unknown_002C; /* 0044 */ std::string unknown_0044; /* 005C */ unsigned char unknown_005C[0x9C]; }; struct SessionEntry5BD4 { /* 0000 */ unsigned char unknown_0000[0x60]; /* 0060 */ SessionEntry5BD4Detail unknown_0060; }; static_assert(sizeof(SessionEntry5BD4) == 0x158); struct SubChatWndInfo { /* 0000 */ std::string name; /* 0018 */ bool options[25]; /* 0034 */ int x; /* 0038 */ int y; /* 003C */ int width; /* 0040 */ int height; }; class CSession { public: /* 0000 */ std::uint32_t unknown_0000; /* 0004 */ std::list m_additionalSkills; /* 000C */ CPlayerSkillBundle m_skillBundle; /* 0084 */ std::list m_homunSkills; /* 008C */ std::list m_mercSkills; /* 0094 */ unsigned char unknown_0094[0x28]; /* 00BC */ unsigned char m_hotkeyPage; /* 00BD */ unsigned char unknown_00BD[3]; /* 00C0 */ std::string m_hotkeyDescriptions[36]; /* 0420 */ std::uint32_t unknown_0420[36]; /* 04B0 */ NormalItemSlot m_shortcutSlots[36]; /* 05AC */ NormalItemSlot m_secondaryShortcutSlots[36]; /* 06A8 */ int unknown_06A8; /* 06AC */ NormalItemSlot m_normalItemSlots[9]; /* 06EB */ NormalItemSlot unknown_06EB; /* 06F2 */ NormalItemSlot unknown_06F2; /* 06F9 */ unsigned char unknown_06F9[0x03]; /* 06FC */ int unknown_06FC; /* 0700 */ std::map unknown_0700; /* 0708 */ std::map unknown_0708; /* 0710 */ unsigned char unknown_0710[0x0C]; /* 071C */ std::vector m_homunSkillLevels; /* 0728 */ std::vector m_mercSkillLevels; /* 0734 */ std::list unknown_0734; /* 073C */ std::map m_noSubChatWnds; /* 0744 */ std::map m_subChatWnds; /* 074C */ unsigned char unknown_074C[0x04]; /* 0750 */ std::uint32_t m_prohibitionTarget; /* 0754 */ std::vector m_prohibitionLog; /* 0760 */ std::string m_accountName; /* 0778 */ std::vector> unknown_0778; /* 0784 */ std::map unknown_0784; /* 078C */ std::map unknown_078C; /* 0794 */ std::uint32_t m_serverTimeOffset; /* 0798 */ int m_serverTimeAdjustCount; /* 079C */ unsigned char unknown_079C[0x04]; /* 07A0 */ std::uint32_t m_averagePing; /* 07A4 */ unsigned char unknown_07A4[0x10]; /* 07B4 */ unsigned char m_playerNameKey[0x40]; /* 07F4 */ unsigned char unknown_07F4[0x6A0]; /* 0E94 */ int unknown_0E94; /* 0E98 */ int unknown_0E98; /* 0E9C */ unsigned char unknown_0E9C[0x3C]; /* 0ED8 */ int m_head; /* 0EDC */ unsigned char unknown_0EDC[0x10]; /* 0EEC */ int m_bodyStyle; /* 0EF0 */ int m_headPalette; /* 0EF4 */ unsigned char unknown_0EF4[0x0C]; /* 0F00 */ int m_robe; /* 0F04 */ bool m_newRobeDrawOnTop; /* 0F05 */ unsigned char unknown_0F05[0x03]; /* 0F08 */ int m_bodyCostume; /* 0F0C */ unsigned char unknown_0F0C[0x08]; /* 0F14 */ std::uint32_t m_jobFlags; /* 0F18 */ int m_playerX; /* 0F1C */ int m_playerY; /* 0F20 */ int m_playerDir; /* 0F24 */ unsigned char unknown_0F24[0x04]; /* 0F28 */ int m_score1; /* 0F2C */ int m_score2; /* 0F30 */ unsigned char unknown_0F30[0x04]; /* 0F34 */ int cartCount; /* 0F38 */ int cartMaxCount; /* 0F3C */ int cartWeight; /* 0F40 */ int cartMaxWeight; /* 0F44 */ unsigned char unknown_0F44[8]; /* 0F4C */ int unknown_0F4C; /* 0F50 */ int unknown_0F50; /* 0F54 */ unsigned char unknown_0F54[0x18]; /* 0F6C */ const char* const* m_humanMaleHeadNames; /* 0F70 */ unsigned char unknown_0F70[0x08]; /* 0F78 */ const char* const* m_humanFemaleHeadNames; /* 0F7C */ unsigned char unknown_0F7C[0x08]; /* 0F84 */ const char* const* m_imfNames; /* 0F88 */ unsigned char unknown_0F88[0x14]; /* 0F9C */ const char* const* m_shieldJobNames; /* 0FA0 */ unsigned char unknown_0FA0[0x08]; /* 0FA8 */ std::vector m_jobNameTable; /* 0FB4 */ std::map m_jobNameTableWoman; /* 0FBC */ std::map m_jobNameTableMan; /* 0FC4 */ unsigned char unknown_0FC4[0x20]; /* 0FE4 */ std::list m_pingSamples; /* 0FEC */ std::vector m_palJobNames; /* 0FF8 */ unsigned char unknown_0FF8[0x18]; /* 1010 */ std::uint32_t unknown_1010; /* 1014 */ unsigned char unknown_1014[4]; /* 1018 */ char unknown_1018[0x20]; /* 1038 */ int unknown_1038; /* 103C */ int unknown_103C; /* 1040 */ int unknown_1040; /* 1044 */ int unknown_1044; /* 1048 */ unsigned char unknown_1048[4]; /* 104C */ int m_petFriendly; /* 1050 */ int unknown_1050; /* 1054 */ int unknown_1054; /* 1058 */ int m_petActionTable[5][5][7]; /* 1314 */ unsigned char unknown_1314[0x258]; /* 156C */ XmlDocument m_petTalkTable; /* 159C */ XmlDocument m_monsterSkillInfo; /* 15CC */ XmlDocument m_monsterTalkTable; /* 15FC */ unsigned char unknown_15FC[8]; /* 1604 */ std::uint32_t m_aid; /* 1608 */ std::uint32_t m_gid; /* 160C */ char m_navigationPlayerMap[0x1C]; /* 1628 */ int m_job; /* 162C */ unsigned char unknown_162C[0x24]; /* 1650 */ int m_level; /* 1654 */ unsigned char unknown_1654[0x04]; /* 1658 */ int m_jobLevel; /* 165C */ unsigned char unknown_165C[0x04]; /* 1660 */ int m_guildSkillPoint; /* 1664 */ unsigned char unknown_1664[8]; /* 166C */ int unknown_166C; /* 1670 */ int unknown_1670; /* 1674 */ int unknown_1674; /* 1678 */ int unknown_1678; /* 167C */ int unknown_167C; /* 1680 */ int unknown_1680; /* 1684 */ int m_standardStats[6]; /* 169C */ unsigned char unknown_169C[0x50]; /* 16EC */ std::uint32_t unknown_16EC; /* 16F0 */ int m_zeny; /* 16F4 */ unsigned char unknown_16F4[0x8]; /* 16FC */ int m_maxWeight; /* 1700 */ int m_weight; /* 1704 */ unsigned char unknown_1704[0x4]; /* 1708 */ int unknown_1708; /* 170C */ unsigned char unknown_170C[0x4]; /* 1710 */ std::list m_inventoryItems; /* 1718 */ std::list unknown_1718; /* 1720 */ std::list unknown_1720; /* 1728 */ std::list unknown_1728; /* 1730 */ std::list unknown_1730; /* 1738 */ std::list unknown_1738; /* 1740 */ std::list unknown_1740; /* 1748 */ std::list unknown_1748; /* 1750 */ std::list unknown_1750; /* 1758 */ std::list unknown_1758; /* 1760 */ std::list unknown_1760; /* 1768 */ std::list unknown_1768; /* 1770 */ std::list unknown_1770; /* 1778 */ std::vector unknown_1778; /* 1784 */ std::list unknown_1784[11]; /* 17DC */ std::list m_partyMembers; /* 17E4 */ std::list m_friends; /* 17EC */ unsigned char unknown_17EC[0x04]; /* 17F0 */ ITEM_INFO unknown_17F0[10]; /* 21A0 */ ITEM_INFO unknown_21A0[10]; /* 2B50 */ ITEM_INFO unknown_2B50[10]; /* 3500 */ ITEM_INFO unknown_3500[10]; /* 3EB0 */ ITEM_INFO m_exchangeItems[10]; /* 4860 */ ITEM_INFO m_itemSlots[10]; /* 5210 */ int unknown_5210; /* 5214 */ int unknown_5214; /* 5218 */ std::vector> m_commandIds; /* 5224 */ std::vector> m_bgmFileNames; /* 5230 */ std::vector>> m_fogParameters; /* 523C */ unsigned char unknown_523C[0x0C]; /* 5248 */ std::vector unknown_5248; /* 5254 */ std::map m_npcLocationRadius; /* 525C */ unsigned char unknown_525C[0x38]; /* 5294 */ const char* const* m_bodyJobNames; /* 5298 */ unsigned char unknown_5298[0x08]; /* 52A0 */ const char* const* m_sexNames; /* 52A4 */ unsigned char unknown_52A4[0x08]; /* 52AC */ const char* const* m_weaponNamesBegin; /* 52B0 */ const char* const* m_weaponNamesEnd; /* 52B4 */ unsigned char unknown_52B4[0x04]; /* 52B8 */ std::vector m_accessoryNames; /* 52C4 */ std::vector m_robeNames; /* 52D0 */ std::vector m_navigationForbiddenMaps; /* 52DC */ std::vector> m_commandOptions; /* 52E8 */ unsigned char unknown_52E8[0x44]; /* 532C */ int unknown_532C; /* 5330 */ int unknown_5330; /* 5334 */ int unknown_5334; /* 5338 */ int unknown_5338; /* 533C */ int unknown_533C; /* 5340 */ unsigned char unknown_5340[0x30]; /* 5370 */ unsigned char unknown_5370[0x30]; /* 53A0 */ unsigned char unknown_53A0[0x30]; /* 53D0 */ unsigned char unknown_53D0[0x30]; /* 5400 */ unsigned char unknown_5400[0x40]; /* 5440 */ std::list m_requestTimers; /* 5448 */ int unknown_5448; /* 544C */ unsigned char unknown_544C[0x04]; /* 5450 */ int unknown_5450; /* 5454 */ unsigned char unknown_5454[0x0C]; /* 5460 */ int unknown_5460; /* 5464 */ int unknown_5464; /* 5468 */ int unknown_5468; /* 546C */ unsigned char unknown_546C[0x04]; /* 5470 */ int unknown_5470; /* 5474 */ int unknown_5474; /* 5478 */ unsigned char unknown_5478[8]; /* 5480 */ int unknown_5480; /* 5484 */ int unknown_5484; /* 5488 */ int unknown_5488; /* 548C */ int unknown_548C; /* 5490 */ unsigned char unknown_5490[0x10]; /* 54A0 */ int unknown_54A0; /* 54A4 */ int unknown_54A4; /* 54A8 */ int unknown_54A8; /* 54AC */ std::string unknown_54AC; /* 54C4 */ std::string unknown_54C4; /* 54DC */ unsigned char unknown_54DC[0x30]; /* 550C */ std::string unknown_550C; /* 5524 */ unsigned char unknown_5524[0x18]; /* 553C */ std::string m_serverName; /* 5554 */ unsigned char unknown_5554[4]; /* 5558 */ int unknown_5558; /* 555C */ unsigned char unknown_555C[0xC]; /* 5568 */ int unknown_5568; /* 556C */ int unknown_556C; /* 5570 */ unsigned char unknown_5570[0x4C]; /* 55BC */ int m_homunJob; /* 55C0 */ unsigned char unknown_55C0[0x04]; /* 55C4 */ int m_homunHp; /* 55C8 */ unsigned char unknown_55C8[0x04]; /* 55CC */ int m_homunSp; /* 55D0 */ int unknown_55D0; /* 55D4 */ int unknown_55D4; /* 55D8 */ int unknown_55D8; /* 55DC */ unsigned char unknown_55DC[4]; /* 55E0 */ std::int64_t m_homunExp; /* 55E8 */ std::int64_t m_homunMaxExp; /* 55F0 */ int unknown_55F0; /* 55F4 */ int unknown_55F4; /* 55F8 */ int unknown_55F8; /* 55FC */ int unknown_55FC; /* 5600 */ int unknown_5600; /* 5604 */ int unknown_5604; /* 5608 */ int unknown_5608; /* 560C */ int unknown_560C; /* 5610 */ int unknown_5610; /* 5614 */ int unknown_5614; /* 5618 */ int m_traceAi; /* 561C */ int m_homunActionState; /* 5620 */ unsigned char unknown_5620[0xC]; /* 562C */ char m_mercenaryName[32]; /* 564C */ int m_mercenaryStats[8]; /* 566C */ int m_mercenaryHp; /* 5670 */ int m_mercenaryMaxHp; /* 5674 */ int m_mercenaryClass; /* 5678 */ int m_mercenaryLevel; /* 567C */ int m_mercenarySp; /* 5680 */ int m_mercenaryMaxSp; /* 5684 */ int m_mercenaryLoyalty; /* 5688 */ int m_mercenarySummons; /* 568C */ int m_mercenaryKills; /* 5690 */ unsigned char unknown_5690[4]; /* 5694 */ __time32_t m_mercenaryExpiration; /* 5698 */ int unknown_5698; /* 569C */ int unknown_569C; /* 56A0 */ int unknown_56A0; /* 56A4 */ int unknown_56A4; /* 56A8 */ int unknown_56A8; /* 56AC */ int unknown_56AC; /* 56B0 */ int unknown_56B0; /* 56B4 */ int m_mercenaryActionState; /* 56B8 */ unsigned char unknown_56B8[0x35]; /* 56ED */ char m_loginErrorText[500]; /* 58E1 */ unsigned char unknown_58E1[0x19]; /* 58FA */ char unknown_58FA[0x18]; /* 5912 */ unsigned char unknown_5912; /* 5913 */ unsigned char unknown_5913[0x25]; /* 5938 */ int unknown_5938; /* 593C */ int unknown_593C; /* 5940 */ int unknown_5940; /* 5944 */ int unknown_5944; /* 5948 */ int unknown_5948; /* 594C */ int unknown_594C; /* 5950 */ std::string unknown_5950; /* 5968 */ int unknown_5968; /* 596C */ int unknown_596C; /* 5970 */ int unknown_5970; /* 5974 */ unsigned char unknown_5974[0x48]; /* 59BC */ int unknown_59BC; /* 59C0 */ int unknown_59C0; /* 59C4 */ int unknown_59C4; /* 59C8 */ int unknown_59C8; /* 59CC */ int unknown_59CC; /* 59D0 */ int unknown_59D0; /* 59D4 */ int unknown_59D4; /* 59D8 */ LuaScript* m_hotkeyScript; /* 59DC */ unsigned char unknown_59DC[0x19C]; /* 5B78 */ PartyBookingMgr m_partyBooking; /* 5BBC */ unsigned char unknown_5BBC[0x04]; /* 5BC0 */ int unknown_5BC0; /* 5BC4 */ int unknown_5BC4; /* 5BC8 */ int unknown_5BC8; /* 5BCC */ int unknown_5BCC; /* 5BD0 */ int unknown_5BD0; /* 5BD4 */ std::vector unknown_5BD4; /* 5BE0 */ int unknown_5BE0; /* 5BE4 */ int unknown_5BE4; /* 5BE8 */ int unknown_5BE8; /* 5BEC */ int unknown_5BEC; /* 5BF0 */ std::uint32_t unknown_5BF0; /* 5BF4 */ int m_pairValues[3]; /* 5C00 */ unsigned char unknown_5C00[0x1C]; /* 5C1C */ int unknown_5C1C; /* 5C20 */ long long m_bankBalance; /* 5C28 */ unsigned char unknown_5C28[0x40]; /* 5C68 */ ITEM_INFO unknown_5C68[5]; /* 6140 */ std::uint16_t unknown_6140; /* 6144 */ std::map unknown_6144; /* 614C */ int unknown_614C; /* 6150 */ std::int16_t unknown_6150; /* 6154 */ int unknown_6154; /* 6158 */ int unknown_6158; /* 615C */ int unknown_615C; /* 6160 */ std::vector unknown_6160; /* 616C */ std::vector unknown_616C; /* 6178 */ std::vector unknown_6178; /* 6184 */ int unknown_6184; /* 6188 */ int m_lastIntervalTime; /* 618C */ const char* const* m_doramMaleHeadNames; /* 6190 */ unsigned char unknown_6190[0x08]; /* 6198 */ const char* const* m_doramFemaleHeadNames; /* 619C */ unsigned char unknown_619C[0x08]; /* 61A4 */ int unknown_61A4; /* 61A8 */ unsigned char unknown_61A8[0x10]; /* 61B8 */ ITEM_INFO unknown_61B8[10]; /* 6B68 */ ITEM_INFO unknown_6B68[10]; /* 7518 */ unsigned char unknown_7518[0x9B0]; /* 7EC8 */ std::uint32_t unknown_7EC8; /* 7ECC */ unsigned char unknown_7ECC[0x0C]; /* 7ED8 */ int m_swapEquipmentMode = 0; /* 7EDC */ unsigned char unknown_7EDC[4]; /* 7EE0 */ std::map m_robeAlpha; /* 7EE8 */ unsigned char unknown_7EE8[4]; /* 7EEC */ int m_maxLevel; /* 7EF0 */ unsigned char unknown_7EF0[0x7C]; /* 7F6C */ int m_maxLevelEffect4th; /* 7F70 */ int m_maxLevelEffect4thSub; /* 7F74 */ unsigned char unknown_7F74[8]; /* 7F7C */ bool m_homunculusAutoFeed; /* 7F7D */ unsigned char unknown_7F7D[0x13]; /* 7F90 */ int m_showRankingSchedule; /* 7F94 */ std::set unknown_7F94; /* 7F9C */ unsigned char unknown_7F9C[0x0C]; /* 7FA8 */ CInstantVar m_options; /* 7FB4 */ unsigned char unknown_7FB4[0x8]; /* 7FBC */ int unknown_7FBC; /* 7FC0 */ unsigned char unknown_7FC0[0xB4]; /* 8074 */ int unknown_8074; /* 8078 */ const char* const* m_jobSpriteNames; /* 807C */ unsigned char unknown_807C[0x20]; /* 809C */ std::vector unknown_809C; /* 80A8 */ unsigned char unknown_80A8[0x0C]; /* 80B4 */ std::map m_nameToId; /* 80BC */ std::map m_shops; /* 80C4 */ int m_damageSkinIndex; /* 80C8 */ int unknown_80C8; /* 80CC */ int m_damageSkinMode; /* 80D0 */ int m_damageMillionUnit; /* 80D4 */ std::string m_damageResourceName; /* 80EC */ std::string unknown_80EC; /* 8104 */ std::string unknown_8104; /* 811C */ std::vector m_cardItems; /* 8128 */ unsigned char unknown_8128[0x08]; /* 8130 */ int unknown_8130; /* 8134 */ int unknown_8134; /* 8138 */ std::int64_t m_startTimeTicks; /* 8140 */ std::int64_t m_loginTimeTicks; /* 8148 */ int unknown_8148; void ItemBitmapPath(const char* name, char* output); int GetOption(int id) const; void SetOption(int id, int value, int extra); std::uint32_t GetServerTime(); std::uint32_t AddPingSample(std::uint32_t sample); std::uint32_t SetServerTime(std::uint32_t serverTime); void SetHotkeyDescription(const char* description, int index); void SetHotkeyDescription(const char* description, std::uint32_t skillLevel, int index); void SetHotkeySkillLevel(std::uint32_t skillLevel, int index); bool IsPetAccessory(int itemId); void AddItemSlot(ITEM_INFO item); SessionShop* GetShop(int shopId); void SetShopFlag(int shopId, char flag); void SetShopItem(int shopId, unsigned int index, int itemId, int first, int second); bool AddShopName(std::string name, int shopId); int SetUnknown8134(int value); void SetUnknown5BC0(int value); void ClearUnknown1710(int id); void ClearUnknown1740(int id); void ClearUnknown1738(int id); std::uint32_t SyncServerTime(std::uint32_t serverTime); __declspec(noinline) int DefaultRenderBackend(); int RenderSystemResetPolicy(); void LoadNavigationScripts(); bool IsNavigationAllowed() const; void LoadRobeAlpha(); void LoadDamageSkinSettings(); bool LoadMapNameTable(); bool LoadFogParameters(); void ClearHomunStatus(); std::pair* InsertPair(int key, int value); int SetPairValue(int value, int slot); int GetPairValue() const; bool IsNpcJob(int job) const; bool HasJobShieldSprite(int job, int shield) const; bool IsJobWeaponTypeAllowed(int job, std::int64_t weaponType) const; int IsGuardianJob(int job) const; bool IsBabyJob(int job) const; int IsMercenaryJob(int job) const; int IsNewMercenaryJob(int job) const; bool IsSuperNovice2Job(int job) const; bool IsExpandedJob(int job) const; int GetMaxBaseLevel(int job) const; int GetMaxJobLevel(int job) const; bool IsCostumeJob(int job) const; int GetSceneUnknown004C() const; int IsPlayerJobId(int job) const; int WorldUnknown0050() const; bool IsShadowItemType(int type) const; bool IsConsumableItemType(int type) const; bool IsCostumeLocation(int location) const; int GetMapProperty07() const; int GetMapProperty08() const; int GetMapProperty09() const; int GetMapProperty0F() const; int GetMapProperty10() const; int GetMapProperty11() const; int GetMapProperty12() const; int GetMapProperty13() const; bool HasUnknown6178Records() const; bool HasUnknown6178Record(int id) const; int IsBerserkActive() const; int IsTrickDeadActive() const; int HasActiveSkillEffect(int id) const; bool PlaySkillTargetEffect(int skillId, int level, CGameActor* source, CGameActor* target); bool PlaySkillGroundEffect(int skillId, vector3d position); int IsState291To303(int state) const; int IsType0Or4(int type) const; int IsMonsterActor(CGameActor* actor) const; int IsLocalPlayerAid(std::uint32_t aid) const; bool IsHomunAid(std::uint32_t aid) const; bool IsMercenaryAid(std::uint32_t aid) const; int IsCompanionAid(std::uint32_t aid) const; bool IsPetAid(std::uint32_t aid) const; bool IsEquipItemType(int type) const; bool IsMiscItemType(int type) const; bool IsSuperNoviceJob(int job) const; bool IsSuperNoviceClass(int job) const; void ApplySaveDataOptions(); int SetHotkeyEntry(char enabled, int id, int value, int slot); int SetFlag(char value); void SetPlayerNameKey(const unsigned char* key); // INLINED NormalItemSlot& SkillHotkey(int index) { return reinterpret_cast(reinterpret_cast(this) + offsetof(CSession, unknown_06EB))[index]; } void ResetItems2B50(); void ResetMercenaryStats(); const char* GetPetAccActName(int id); int GetPetFood(int job); std::string GetMonsterActName(int job); std::string GetMonsterSprName(int job); void GetPetIllustName(int job, int, char* buffer); int GetPetJobByEggItem(int eggItemId); const char* GetPetString(int id); int AddUnknown6160(int id); const char* GetPetTalkName(int job); const char* GetPetTalkActionName(int action); void GetPetTalkText(int job, int hungerState, int action, char* text); const char* GetMonsterTalkEventName(int event); void GetMonsterTalkText(int job, int event, int skill, char* text, std::uint32_t aid); void FormatMonsterSpeech(char* text, char* output, std::uint32_t aid, int feminine); bool UpdateHomunSkill(const CSkillInfo& value, unsigned char notify); bool UpdateMercSkill(const CSkillInfo& value, unsigned char notify); void AddUnknownId(int id); EquipSlots GetEquipSlots(int location); bool EquipUnknown17F0(const ITEM_INFO& item, const char* name); bool EquipItem2B50(const ITEM_INFO& item, const char* name); bool EquipItem3500(const ITEM_INFO& item); void AddStackedItem(ITEM_INFO item); void ReturnStackedItem(int index, int count); void AddItemToFreeSlot(ITEM_INFO item); bool IsListedId(int id, int variant) const; void ClearItemQuantities(); void ResetItems3500(); void RestoreItems5C68(); void ClearSlots06EB(); void ClearShortcutSlots(); void ClearSecondaryShortcutSlots(); void ClearUnknown0420(); void EraseUnknownKey(std::int64_t key); std::int64_t FindUnknown0784(std::int64_t key) const; std::int64_t FindUnknown078C(std::int64_t key) const; SessionRecord6144 FindRecord6144(int key) const; void UpdateRecord6144(const AchievementRecordPacket& packet); void FindTopRecords6144(int* second, int* first); int GetBeginEffectId(int skillId) const; bool IsPartyMember(std::uint32_t aid, bool onlineOnly); bool IsPvpMap(); ITEM_INFO GetItem2B50(int index) const; ITEM_INFO GetItem3500(int index) const; ITEM_INFO GetItem5C68(int index) const; ITEM_INFO GetItem17F0(int index) const; ITEM_INFO GetItem6B68(int index) const; ITEM_INFO GetItem61B8(int index) const; ITEM_INFO FindItemByIdentity(std::uint32_t identity, int location); unsigned char IsAllyActor(std::uint32_t aid, int job); const char* Text8104() const; const char* Text80EC() const; ITEM_INFO FindItem1768(std::uint32_t id) const; ITEM_INFO GetItem1768At(int index) const; int GetItem1768Quantity(std::uint32_t id) const; ITEM_INFO FindItem1740(std::uint32_t id) const; ITEM_INFO GetItem1740At(int index) const; int GetItem1740Quantity(std::uint32_t id) const; ITEM_INFO FindItem1750(std::uint32_t id) const; ITEM_INFO GetItem1750At(int index) const; int GetItem1750Quantity(std::uint32_t id) const; ITEM_INFO FindItem1758(std::uint32_t id) const; ITEM_INFO FindItem1758ByItemId(int itemId) const; ITEM_INFO GetItem1758At(int index) const; ITEM_INFO FindItem1760(std::uint32_t id) const; ITEM_INFO GetItem1760At(int index) const; int GetItem1760Quantity(std::uint32_t id) const; ITEM_INFO FindItem1770(std::uint32_t id) const; ITEM_INFO FindItem1760ByItemId(const char* itemId) const; int GetItem1760QuantityByItemId(const char* itemId) const; SessionRecord0734 FindRecord0734(int id) const; const char* GatName2RswName(const char* gatName); const char* GetBgmFileName(const char* rswName); const char* GetMapDisplayName(const char* mapName); const char* GetPlayerMapDisplayName(); std::uint32_t GetPartyMemberAid(const char* name); bool HasItem17D4(int itemId) const; bool IsFriendName(const char* name) const; bool RemoveFriendByCharacterId(std::uint32_t characterId); void RemovePartyMemberByName(const char* name); bool IsGuildMemberAccount(std::uint32_t accountId) const; bool IsGuildMemberCharacter(std::uint32_t characterId) const; bool IsGuildMemberCharacter(int characterId, char* name) const; bool IsGuildMemberName(const char* name) const; bool IsUnknownName5248(const char* name) const; bool IsKnownName(std::string name) const; long long GetItem1760Total() const; ITEM_INFO GetItem1748At(int index) const; bool HasItem1718(std::uint32_t id) const; bool HasExchangeItem(std::uint32_t id) const; int CountItems5C68() const; int CountItems2B50() const; int CountItems17F0() const; void SplitDate(__time32_t time, std::uint16_t& year, std::uint16_t& month, std::uint16_t& day) const; int GetDefaultOptionValue(const char* name, int fallback) const; int FindUnknown0778(int key) const; CSkillInfo AdditionalSkillAt(int index) const; CSkillInfo HomunSkillAt(int index) const; CSkillInfo MercSkillAt(int index) const; int CountProhibitionLog(std::uint32_t aid); void DeleteProhibitionLog(std::uint32_t aid, std::uint32_t minutes, WindowDialogs& dialogs); void AddProhibitionLog(std::uint32_t aid, std::uint32_t minutes); void LoadProhibitionLog(); void ResetUnknown1050(); int ProcessEmotionShortcut(const char* text); int IsAdminSubMode(int subMode); void GetMonsterSkillInfo(const char* monster, int skill, int* action, int* loopType, WindowDialogs& dialogs); const char* DecodePlayerName() const; void NotifyHomunSkillWindows(); void NotifyMercSkillWindows(); int GetPetActionNumber(int hungerLevel, int friendlyLevel, int action); void InitPetActionTable(); int GetPetFriendlyState(int friendly); void GetPetFriendlyStateString(int friendly, char* buffer); int GetPetHungryState(int hunger); void GetPetHungryStateString(int hunger, char* buffer); int GetPetEmotionNumber(int job, int action, int hungerLevel); void ClearItemSelection(); bool IsDoramJob(int job) const; bool IsEffectRenderEnabled() const; bool CheckInterval(long long interval); bool IsPlayerPerformerJob(int job) const; bool IsSpecialMonsterJob(int job) const; bool IsWithinUnknown59C0(int value) const; bool ResetUnknownState(); bool IsSecondJob(int job); void UpdateBodyStyle(int job, int style, int renderJob); std::string GetBodyJobName(int job); char* ConvertTooltipText(const char* source, char* output) const; void StoreEmblem(const void* data, std::size_t size, std::uint32_t guildId, int version); int MercSkillLevel(int skillId) const; int HomunSkillLevel(int skillId) const; CRenderObject* FindGameActor(std::uint32_t aid) const; int GetPetTargetAid() const; bool sub_E1DE30(std::uint32_t aid); int sub_DDD2C0(const ITEM_INFO& item); const char* GetJobName(unsigned job, int sex); void InitJobNameTable(JobNameInitialization& context); int SyncUnknown0E98(); void LoadXmlTables(); void LoadExternalSettings(); float GetOptionFloat(const char* key, float fallback); std::string GetAccessoryName(int id); std::string GetWeaponName(int weapon); const char* GetWeaponClassName(int item); std::string GetWeaponActName(int job, int sex, int weapon, int weaponItem, int costume); std::string GetWeaponSprName(int job, int sex, int weapon, int weaponItem, int costume); std::string GetWeaponEffectActName(int job, int sex, int weapon, int weaponItem, int effect, int costume); std::string GetWeaponEffectSprName(int job, int sex, int weapon, int weaponItem, int effect, int costume); void CollectCardItems(); std::uint32_t ReadReplayCharacter(const std::vector& data); std::uint32_t ReadReplayStats(const std::vector& data); std::uint32_t ReadReplayCompanions(const std::vector& data); std::uint32_t ReadReplayQuests(const std::vector& data); std::uint32_t ReadReplayMessenger(const std::vector& data); std::uint32_t ReadReplayItems(const std::vector& data); std::uint32_t ReadReplayShops(const std::vector& data); std::uint32_t ReadReplayExtra(const std::vector& data); std::uint32_t ReadReplayShortcuts(const std::vector& data); std::uint32_t ReadReplayReserved(const std::vector& data); std::uint32_t ReadReplayEntryQueue(const std::vector& data); std::vector BuildShortcutReplayRecords(); std::vector BuildReservedReplayRecords(); std::vector BuildShopReplayRecords(); std::vector BuildExtraReplayRecords(); std::vector BuildStatsReplayRecords(); std::vector BuildSkillListReplayPacket(short id); void SetHomunculusAutoFeed(bool enabled); void SetPetAutoFeed(bool enabled); void SendHomunculusAutoFeedOption(unsigned char enabled); void SendPetAutoFeedOption(unsigned char enabled); int GetRobeAlpha(int robeId); bool IsTopLayerRobe(int robe); int IsExchangeItemListFull(); // INLINED int GetFilledExchangeItemList() { int count = 0; for (int i = 0; i < 10; ++i) { if (this->m_exchangeItems[i].quantity) { ++count; } } return count; } int IsSkillIdInRange6018(unsigned id) const; int IsSkillIdInRange6001(unsigned id) const; int IsPetEgg(int itemId) const; const ActionFrame* GetSyncedFrame(CActRes* baseAct, CActRes* act, unsigned action, int baseFrame, std::uint32_t startTime, int* frame); float GetNpcLocationRadius(int job, bool riding); void ClearEntryList5BD4(); int GetRidingJob(int job); void InitNpcLocationRadius(); int GetSpriteJob(int job, int costumeJob, bool spriteIndex); bool HasRequiredItems() const; bool IsSlotItemIdentity(std::uint32_t id) const; bool HasInventoryItem(std::uint32_t id) const; bool HasItemId(int itemId) const; bool HasItemCount(int itemId, int count) const; void NormalizeHead(int* head, int job); int GetDisplayJob(); const char* GetHitWaveName(int job); const char* GetWeaponHitWaveName(int weapon); void InitJobHitWaveNames(); void InitWeaponHitWaveNames(); const std::vector* GetMapViewParameters(const char* rswName, int* found); void InitJobKeyNames(); const char* GetEFSTImgFileName(int efstId, int type); int IsTreeGroupTwo(int job) const; bool IsTreeGroupThree(int job) const; bool IsThirdJobOrHigher(int job); std::string GetSexName(int sex); std::string GetHeadActName(int job, int sex, int* head); std::string GetPlayerHeadActName(); std::string GetHeadPalName(int head, int job, int sex, int palette); std::string GetPlayerHeadPalName(); std::string GetHeadSprName(int job, int sex, int* head); std::string GetAccessoryActName(int job, int sex, int head, int accessory); std::string GetAccessorySprName(int job, int sex, int head, int accessory); std::string GetShieldActName(int job, int sex, int shield, int costumeJob); std::string GetShieldSprName(int job, int sex, int shield, int costumeJob); std::string GetRobeActName(int job, int sex, int robe, bool riding, int unused, int costumeJob); std::string GetRobeSprName(int job, int sex, int robe, bool riding, int unused, int costumeJob); std::string GetRobeName(unsigned int robe); std::string GetBodyPalName(int job, int sex, int palette, int costumeJob, int costume, int unused); std::string GetBodySprName(int job, int sex, int costumeJob, int costume); std::string GetRaceBodyResourceName(int type, int raceJob, int job, int sex, int costumeJob); int GetItemDescription40(int id); std::uint32_t GetUnknown0420(int index); void GetSkillActionInfo(int skillId, int& effectId, int& motion, int variant, int level); void GetSkillActionInfo2(int skillId, int& effectId, int& motion); bool IsNumberWithCommas(char* text); bool HasNoUnknown1784Items() const; bool HasItem1740Number(int value) const; bool IsRobeDrawOnTop(int action, int frame, bool riding); int GetUnknown8134() const; int FindUnknown0708(int key) const; int FindUnknown0700(int key) const; const char* GetEnemyHitWaveName(int element); ITEM_INFO* GetEquippedItem(const ITEM_INFO* item); ITEM_INFO FindItem2B50(std::uint32_t id, int* index) const; ITEM_INFO FindItem17F0(std::uint32_t id, int* index) const; ITEM_INFO GetExchangeItem(int index) const; int HasItem61B8(std::uint32_t id) const; const std::vector* GetFogParameters(const char* rswName, int* found); std::string GetPlayerHeadSprName(); std::string GetImfName(int job); std::uint16_t FindInventoryIndexByItemId(int itemId); std::vector FindInventoryIndicesByItemId(int itemId, unsigned char identifiedOnly); std::vector BuildStatusReplayPacket(); __declspec(noinline) ITEM_INFO GetInventoryItemAt(int index) const; std::uint32_t GetItemNameColor(const ITEM_INFO& item) const; ITEM_INFO* FindInventoryItemByItemId(int itemId, bool identifiedOnly); int GetInventoryItemCount(int itemId) const; ITEM_INFO GetItem1784At(int list, int index) const; void AddItem1784(const ITEM_INFO& item, int list); int GetCommandId(const char* name) const; int GetItem1728Count() const; ITEM_INFO GetItemSlot(int index) const; ITEM_INFO GetItem21A0(int index) const; int GetItem1718QuantityByItemId(const ITEM_INFO& item) const; int GetItem1718QuantityOf(const ITEM_INFO& item) const; std::uint16_t GetItem1718Unknown006CByItemId(const ITEM_INFO& item) const; std::uint16_t GetItem1718Unknown006COf(const ITEM_INFO& item) const; std::uint16_t SumItem1720Unknown006CByItemId() const; std::uint16_t SumItem1720Unknown006C() const; ITEM_INFO FindItem1720ByItemId(const char* itemId) const; ITEM_INFO GetItem1720At(int index) const; int GetItem1720QuantityByItemId(const char* itemId) const; int GetItem1720Quantity(std::uint32_t id) const; int GetItem1720Total() const; const char* GetMonsterRmaName(int job) const; void ResetInventoryItems(); unsigned char GetShopType(int id); bool HasControlCharacter(std::string text); const char* GetMonsterW3dName(int job) const; ITEM_INFO FindItem1730(std::uint32_t id) const; ITEM_INFO GetItem1730At(int index) const; int GetItem1730Quantity(std::uint32_t id) const; ITEM_INFO GetItem1718At(int index) const; int GetItem1718Quantity(std::uint32_t id) const; const char* GetHotkeyDescription(int index) const; ITEM_INFO FindItem1738(std::uint32_t id) const; ITEM_INFO GetItem1738At(int index) const; int GetItem1738Quantity(std::uint32_t id) const; void AddUnknown7F94(std::uint32_t id); void SetShowRankingSchedule(bool show, const void* data); void SetTraitStat(int type, int value); void EndSkillOption(); void ClearNormalItemSlots(); void ResetItems6B68(); void ResetItems61B8(); void FlagInventoryItem(std::uint32_t id); void FlagItem1740(std::uint32_t id); void FlagItem1738(std::uint32_t id); void CollectItems1750(); void RefreshItems1750(); bool IsPartyRecommendTarget(std::uint32_t aid); int GetBodyStyle(int job, int style, int renderJob); int GetUnknown8148() const; void RefreshWindow02C8(); void RefreshItem1740Window(); void RefreshItem1750Window(int type); void RefreshItem1768Window(unsigned char alternate, int argument); void UpdateUnknown1708(int enabled); void RefreshItem1738Window(); void RefreshHpSpWindows(); void ResetCharacterState(); void ClearItemContainers(); void RefreshHomunculusInfo(); void RefreshMercenaryInfo(); bool IsBlankString(const char* text) const; void InvalidateWindowFrames(); void EraseRecord0734(int id); void IgnoreText(std::string text); void SaveMiniPartyInfo(); void LoadMiniPartyInfo(); void SetItem1768Quantity(int index, int quantity); void SetUnknown5C1C(int value); void UpdateFriendName(std::uint32_t characterId, const char* name); void UnequipItem6B68(const ITEM_INFO& item); void UnequipItem61B8(const ITEM_INFO& item); bool EquipItem61B8(const ITEM_INFO& item); void SetUnknown7EC8(std::uint32_t value); void NotifyUnknown7F94Name(std::uint32_t id, const char* name); void sub_DE3D90(char* text); std::pair GetShopEntry(unsigned int index, int key); bool HasUnknown809C(std::string name); void SetUnknown16EC(std::uint32_t value); bool IsRequestReady(int requestId); void ClearAchievements(); void SetNavigationPlayerMap(const char* name); int SetFriendOffline(std::uint32_t accountId, std::uint32_t characterId, unsigned char offline); void SetHomunSkillLevel(int skillId, int level); void UpdateInventoryItem(const ITEM_INFO& item, unsigned char refresh); void SetMercSkillLevel(int skillId, int level); void SetItem1768Unknown0014(int index, std::uint32_t value); void AddRecord0734(int id, std::uint32_t value); void SetUnknown5210(int value); void SetUnknown5214(int value); void SetPlayerPosition(int x, int y, int direction); void SetRecord0734Value(int id, std::uint32_t value); void LoadSkillDelayList(int skillId, std::vector>& delays, int& skillFlag); }; extern CSession g_session; extern std::vector g_adminAccountIds; extern std::vector g_monsterJobs; bool IsAdminAccount(int aid); bool IsMonsterJob(int job); int MonsterJobColor(int job); void SetMemberFlags(std::uint32_t* flags); #if defined(_WIN32) && !defined(_WIN64) static_assert(sizeof(SessionRecord6144) == 0x38); static_assert(sizeof(SessionRecord6178) == 0x2C); static_assert(sizeof(ProhibitionLogEntry) == 0x54); static_assert(sizeof(SubChatWndInfo) == 0x44); static_assert(offsetof(SubChatWndInfo, x) == 0x34); static_assert(offsetof(CSession, m_noSubChatWnds) == 0x73C); static_assert(offsetof(CSession, m_subChatWnds) == 0x744); static_assert(offsetof(CSession, m_prohibitionLog) == 0x754); static_assert(offsetof(SessionRecord6144, unknown_002C) == 0x2C); static_assert(offsetof(SessionRecord6144, unknown_0030) == 0x30); static_assert(offsetof(CSession, m_additionalSkills) == 0x4); static_assert(offsetof(CSession, m_maxLevelEffect4th) == 0x7F6C); static_assert(offsetof(CSession, m_homunculusAutoFeed) == 0x7F7C); static_assert(offsetof(CSession, m_options) == 0x7FA8); static_assert(offsetof(CSession, m_nameToId) == 0x80B4); static_assert(offsetof(CSession, m_level) == 0x1650); static_assert(offsetof(CSession, m_hotkeyPage) == 0xBC); static_assert(offsetof(CSession, m_pairValues) == 0x5BF4); static_assert(offsetof(CSession, m_zeny) == 0x16F0); static_assert(offsetof(CSession, m_weight) == 0x1700); static_assert(offsetof(CSession, m_bankBalance) == 0x5C20); static_assert(offsetof(CSession, m_mercenaryStats) == 0x564C); static_assert(offsetof(CSession, m_mercenaryExpiration) == 0x5694); static_assert(offsetof(CSession, m_homunJob) == 0x55BC); static_assert(offsetof(CSession, m_traceAi) == 0x5618); static_assert(offsetof(CSession, m_homunActionState) == 0x561C); static_assert(offsetof(CSession, m_mercenaryActionState) == 0x56B4); static_assert(offsetof(CSession, m_hotkeyDescriptions) == 0xC0); static_assert(offsetof(CSession, m_serverTimeOffset) == 0x794); static_assert(offsetof(CSession, m_serverTimeAdjustCount) == 0x798); static_assert(offsetof(CSession, m_averagePing) == 0x7A0); static_assert(offsetof(CSession, m_pingSamples) == 0xFE4); static_assert(offsetof(CSession, m_petTalkTable) == 0x156C); static_assert(offsetof(CSession, m_monsterTalkTable) == 0x15CC); static_assert(offsetof(CSession, m_navigationPlayerMap) == 0x160C); static_assert(offsetof(CSession, unknown_1738) == 0x1738); static_assert(offsetof(CSession, unknown_1740) == 0x1740); static_assert(offsetof(CSession, unknown_1770) == 0x1770); static_assert(offsetof(CSession, m_itemSlots) == 0x4860); static_assert(offsetof(CSession, m_shops) == 0x80BC); static_assert(offsetof(CSession, unknown_8134) == 0x8134); static_assert(offsetof(CSession, m_playerDir) == 0xF20); static_assert(offsetof(CSession, unknown_1708) == 0x1708); static_assert(offsetof(CSession, unknown_5210) == 0x5210); static_assert(offsetof(CSession, unknown_5214) == 0x5214); static_assert(offsetof(CSession, unknown_0E94) == 0xE94); static_assert(offsetof(CSession, unknown_103C) == 0x103C); static_assert(offsetof(CSession, unknown_5450) == 0x5450); static_assert(offsetof(CSession, unknown_54C4) == 0x54C4); static_assert(offsetof(CSession, unknown_5950) == 0x5950); static_assert(offsetof(CSession, unknown_5970) == 0x5970); static_assert(offsetof(CSession, unknown_59BC) == 0x59BC); static_assert(offsetof(CSession, m_hotkeyScript) == 0x59D8); static_assert(offsetof(CSession, m_lastIntervalTime) == 0x6188); static_assert(offsetof(CSession, unknown_8130) == 0x8130); static_assert(offsetof(CSession, m_skillBundle) == 0xC); static_assert(offsetof(CSession, m_homunSkills) == 0x84); static_assert(offsetof(CSession, m_mercSkills) == 0x8C); static_assert(offsetof(CSession, unknown_0420) == 0x420); static_assert(offsetof(CSession, m_shortcutSlots) == 0x4B0); static_assert(offsetof(CSession, m_secondaryShortcutSlots) == 0x5AC); static_assert(offsetof(CSession, unknown_06EB) == 0x6EB); static_assert(offsetof(CSession, unknown_06F2) == 0x6F2); static_assert(offsetof(CSession, m_homunSkillLevels) == 0x71C); static_assert(offsetof(CSession, m_mercSkillLevels) == 0x728); static_assert(offsetof(CSession, unknown_0778) == 0x778); static_assert(offsetof(CSession, unknown_0784) == 0x784); static_assert(offsetof(CSession, unknown_078C) == 0x78C); static_assert(offsetof(CSession, m_robe) == 0xF00); static_assert(offsetof(CSession, m_playerX) == 0xF18); static_assert(offsetof(CSession, m_playerY) == 0xF1C); static_assert(offsetof(CSession, m_score1) == 0xF28); static_assert(offsetof(CSession, m_score2) == 0xF2C); static_assert(offsetof(CSession, m_jobNameTable) == 0xFA8); static_assert(offsetof(CSession, m_jobNameTableWoman) == 0xFB4); static_assert(offsetof(CSession, m_jobNameTableMan) == 0xFBC); static_assert(offsetof(CSession, m_pingSamples) == 0xFE4); static_assert(offsetof(CSession, m_head) == 0xED8); static_assert(offsetof(CSession, m_headPalette) == 0xEF0); static_assert(offsetof(CSession, m_humanMaleHeadNames) == 0xF6C); static_assert(offsetof(CSession, m_humanFemaleHeadNames) == 0xF78); static_assert(offsetof(CSession, m_doramMaleHeadNames) == 0x618C); static_assert(offsetof(CSession, m_doramFemaleHeadNames) == 0x6198); static_assert(offsetof(CSession, unknown_0E98) == 0xE98); static_assert(offsetof(CSession, m_petActionTable) == 0x1058); static_assert(offsetof(CSession, m_job) == 0x1628); static_assert(offsetof(CSession, m_inventoryItems) == 0x1710); static_assert(offsetof(CSession, unknown_16EC) == 0x16EC); static_assert(offsetof(CSession, unknown_1730) == 0x1730); static_assert(offsetof(CSession, unknown_0734) == 0x734); static_assert(offsetof(CSession, unknown_1784) == 0x1784); static_assert(offsetof(CSession, m_partyMembers) == 0x17DC); static_assert(offsetof(CSession, m_friends) == 0x17E4); static_assert(offsetof(CSession, m_bgmFileNames) == 0x5224); static_assert(offsetof(CSession, unknown_1720) == 0x1720); static_assert(offsetof(CSession, unknown_1728) == 0x1728); static_assert(offsetof(CSession, unknown_21A0) == 0x21A0); static_assert(offsetof(CSession, m_commandIds) == 0x5218); static_assert(offsetof(CSession, unknown_17F0) == 0x17F0); static_assert(offsetof(CSession, unknown_2B50) == 0x2B50); static_assert(offsetof(CSession, unknown_3500) == 0x3500); static_assert(offsetof(CSession, m_accessoryNames) == 0x52B8); static_assert(offsetof(CSession, m_robeNames) == 0x52C4); static_assert(offsetof(CSession, m_navigationForbiddenMaps) == 0x52D0); static_assert(offsetof(CSession, m_commandOptions) == 0x52DC); static_assert(offsetof(CSession, unknown_5558) == 0x5558); static_assert(offsetof(CSession, m_hotkeyScript) == 0x59D8); static_assert(offsetof(CSession, unknown_5C68) == 0x5C68); static_assert(offsetof(CSession, unknown_6140) == 0x6140); static_assert(offsetof(CSession, unknown_6144) == 0x6144); static_assert(offsetof(CSession, unknown_6160) == 0x6160); static_assert(offsetof(CSession, unknown_616C) == 0x616C); static_assert(offsetof(CSession, m_swapEquipmentMode) == 0x7ED8); static_assert(offsetof(CSession, m_robeAlpha) == 0x7EE0); static_assert(offsetof(CSession, m_maxLevel) == 0x7EEC); static_assert(offsetof(CSession, m_cardItems) == 0x811C); static_assert(offsetof(CSession, m_startTimeTicks) == 0x8138); static_assert(offsetof(CSession, m_loginTimeTicks) == 0x8140); static_assert(offsetof(CSession, unknown_0700) == 0x700); static_assert(offsetof(CSession, unknown_0708) == 0x708); static_assert(offsetof(CSession, m_newRobeDrawOnTop) == 0xF04); static_assert(offsetof(CSession, m_imfNames) == 0xF84); static_assert(offsetof(CSession, m_fogParameters) == 0x5230); static_assert(offsetof(CSession, m_normalItemSlots) == 0x6AC); static_assert(offsetof(CSession, unknown_5468) == 0x5468); static_assert(offsetof(CSession, m_partyBooking) == 0x5B78); static_assert(offsetof(CSession, unknown_61A4) == 0x61A4); static_assert(offsetof(CSession, unknown_6B68) == 0x6B68); static_assert(offsetof(CSession, m_showRankingSchedule) == 0x7F90); static_assert(offsetof(CSession, unknown_7F94) == 0x7F94); static_assert(offsetof(CSession, unknown_8148) == 0x8148); #endif #endif