Batch #15141 by ragnarok-clanker: no function's compiled code changes; checked with 537 compiled unit(s), including every includer of Source/Client/Input/LanguageTC.h, Source/Client/Mode/CGameMode.h, Source/Client/Mode/CLoginMode.h, Source/Client/Replay.h, Source/Client/Session.h, Source/Contents/AchievementMgr.h, Source/Contents/Actors/CharacterRender.h, Source/Contents/Actors/EffectActors.h, Source/Contents/Actors/GameActor.h, Source/Contents/Actors/Pc.h, Source/Contents/EnchantMgr.h, Source/Contents/GuildInfo.h, Source/Contents/Messenger/MessengerWindows.h, Source/Contents/Schedule/TimeScheduler.h, Source/Contents/Sound/SoundMgr.h, Source/Contents/SpriteLayerDrawing.h, Source/Contents/TableMng.h, Source/Contents/World/SkyBox.h, Source/UI/Chat/UINewChatWnd.h, Source/UI/Text/CreateLineInfo.h, Source/UI/UIGradeEnchantWnd.h, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/UIWindowMgr.inl.
1420 lines
62 KiB
C++
1420 lines
62 KiB
C++
#ifndef RAGNAROK_SOURCE_CLIENT_SESSION_H
|
|
#define RAGNAROK_SOURCE_CLIENT_SESSION_H
|
|
#include "Render/Renderer.h"
|
|
|
|
#include "Contents/InstantVar.h"
|
|
#include "Contents/Hotkeys/EmotionHotkeys.h"
|
|
#include "Contents/Items/ItemInfo.h"
|
|
#include "Contents/Messenger/MessengerMember.h"
|
|
#include "Contents/Party/PartyBookingMgr.h"
|
|
#include "Contents/Skills/AutomaticSkills.h"
|
|
#include "Contents/Skills/PlayerSkillBundle.h"
|
|
#include "Contents/Store/MCStoreInfoBackup.h"
|
|
#include "Contents/UserData/NormalItemSlots.h"
|
|
#include "Resource/XmlNode.h"
|
|
#include "UI/Cooldowns/CooldownState.h"
|
|
#include "UI/Shortcuts/ShortcutCooldowns.h"
|
|
|
|
#include <windows.h>
|
|
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
#include <ctime>
|
|
#include <list>
|
|
#include <map>
|
|
#include <new>
|
|
#include <set>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
class UIWindowMgr;
|
|
class CActRes;
|
|
class CFile;
|
|
class CGameActor;
|
|
class CRenderObject;
|
|
class LuaScript;
|
|
struct ActionFrame;
|
|
struct vector3d;
|
|
|
|
struct EquipSlots {
|
|
/* 0000 */ int values[3];
|
|
};
|
|
|
|
struct SessionRecord6144 {
|
|
/* 0000 */ std::uint16_t completionFlags = 0;
|
|
/* 0004 */ std::uint32_t objectives[10] = {};
|
|
/* 002C */ int completedAt = 0;
|
|
/* 0030 */ std::uint8_t rewarded = 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 MapPosRect {
|
|
/* 0000 */ int left;
|
|
/* 0004 */ int top;
|
|
/* 0008 */ int right;
|
|
/* 000C */ int bottom;
|
|
};
|
|
|
|
struct MapPosEntry {
|
|
/* 0000 */ MapPosRect rect;
|
|
/* 0010 */ int valid;
|
|
};
|
|
|
|
struct SessionRecord6178Entry {
|
|
// INLINED
|
|
SessionRecord6178Entry(const std::string& text, bool completed) : text(text), completed(completed) {
|
|
}
|
|
|
|
/* 0000 */ std::string text;
|
|
/* 0018 */ bool completed;
|
|
};
|
|
|
|
struct SessionRecord6178 {
|
|
/* 0000 */ unsigned char unknown_0000 = 0;
|
|
/* 0001 */ unsigned char completed = 0;
|
|
/* 0004 */ int id = -1;
|
|
/* 0008 */ std::string title;
|
|
/* 0020 */ std::vector<SessionRecord6178Entry> objectives;
|
|
};
|
|
|
|
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 SessionRecord0734 {
|
|
/* 0000 */ std::uint32_t active = 0;
|
|
/* 0004 */ int id;
|
|
/* 0008 */ std::uint32_t cell;
|
|
};
|
|
|
|
struct SessionShop {
|
|
/* 0000 */ unsigned char flag;
|
|
/* 0004 */ std::vector<std::map<int, std::pair<int, int>>> items;
|
|
};
|
|
|
|
struct SessionParameterNameLess {
|
|
bool operator()(const std::pair<std::string, std::vector<std::string>>& left, const std::pair<std::string, std::vector<std::string>>& right) const {
|
|
return std::strcmp(left.first.c_str(), right.first.c_str()) < 0;
|
|
}
|
|
};
|
|
|
|
struct SessionEntry5BD4 {
|
|
SessionEntry5BD4() : item() {}
|
|
SessionEntry5BD4(const SessionEntry5BD4& other) {
|
|
std::memcpy(this->storeIdentity, other.storeIdentity, sizeof(this->storeIdentity));
|
|
std::memcpy(this->storeName, other.storeName, sizeof(this->storeName));
|
|
this->price = other.price;
|
|
this->quantity = other.quantity;
|
|
new (&this->item) ITEM_INFO(other.item);
|
|
}
|
|
~SessionEntry5BD4() {
|
|
this->item.displayName.~basic_string();
|
|
this->item.itemId.~basic_string();
|
|
}
|
|
|
|
/* 0000 */ unsigned char storeIdentity[8];
|
|
/* 0008 */ char storeName[80];
|
|
/* 0058 */ int price;
|
|
/* 005C */ std::uint16_t quantity;
|
|
union {
|
|
/* 0060 */ ITEM_INFO item;
|
|
};
|
|
};
|
|
|
|
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;
|
|
};
|
|
|
|
struct SessionEntry00A4 {
|
|
/* 0000 */ std::string name;
|
|
/* 0018 */ unsigned char skillIdPositionAndMaxLevel[0x0C];
|
|
/* 0024 */ std::vector<int> values;
|
|
};
|
|
|
|
struct SessionTraits {
|
|
SessionTraits();
|
|
|
|
/* 0000 */ std::map<int, int> stats;
|
|
/* 0008 */ int bonus[6];
|
|
/* 0020 */ std::int64_t points[6];
|
|
};
|
|
static_assert(sizeof(SessionTraits) == 0x50);
|
|
|
|
class CSession {
|
|
public:
|
|
void IconPath(char* output, const char* id, int identified);
|
|
const char* ItemDragResource(const char* id, int identified);
|
|
/* 0000 */ std::uint32_t mapPropertyId;
|
|
/* 0004 */ std::list<CSkillInfo> m_additionalSkills;
|
|
/* 000C */ CPlayerSkillBundle m_skillBundle;
|
|
/* 0084 */ std::list<CSkillInfo> m_homunSkills;
|
|
/* 008C */ std::list<CSkillInfo> m_mercSkills;
|
|
/* 0094 */ std::list<ShortcutCooldownIcon> m_mainCooldownIcons;
|
|
/* 009C */ std::list<ShortcutCooldownIcon> m_alternateCooldownIcons;
|
|
/* 00A4 */ std::map<std::string, SessionEntry00A4> m_skillTreePositions;
|
|
/* 00AC */ std::map<std::string, std::string> m_jobInheritance;
|
|
/* 00B4 */ int m_simplifiedSkillList;
|
|
/* 00B8 */ int m_showSkillDescription;
|
|
/* 00BC */ unsigned char m_hotkeyPage;
|
|
/* 00BD */ unsigned char unknown_00BD[3];
|
|
/* 00C0 */ std::string m_hotkeyDescriptions[36];
|
|
/* 0420 */ std::uint32_t hotkeySkillLevels[36];
|
|
/* 04B0 */ NormalItemSlot m_shortcutSlots[36];
|
|
/* 05AC */ NormalItemSlot m_secondaryShortcutSlots[36];
|
|
/* 06A8 */ int alternateShortcutRow;
|
|
/* 06AC */ NormalItemSlot m_normalItemSlots[9];
|
|
/* 06EB */ NormalItemSlot quickSlot;
|
|
/* 06F2 */ NormalItemSlot alternateQuickSlot;
|
|
/* 06F9 */ unsigned char unknown_06F9[0x03];
|
|
/* 06FC */ int mainShortcutRow;
|
|
/* 0700 */ std::map<int, int> skillFollowEffects;
|
|
/* 0708 */ std::map<int, int> skillEffectIds;
|
|
/* 0710 */ std::vector<int> extendedSkillLevels;
|
|
/* 071C */ std::vector<int> m_homunSkillLevels;
|
|
/* 0728 */ std::vector<int> m_mercSkillLevels;
|
|
/* 0734 */ std::list<SessionRecord0734> miniPartyRecords;
|
|
/* 073C */ std::map<int, SubChatWndInfo> m_noSubChatWnds;
|
|
/* 0744 */ std::map<int, SubChatWndInfo> m_subChatWnds;
|
|
/* 074C */ bool m_canDragWnd;
|
|
/* 074D */ unsigned char unknown_074D[0x03];
|
|
/* 0750 */ std::uint32_t m_prohibitionTarget;
|
|
/* 0754 */ std::vector<ProhibitionLogEntry> m_prohibitionLog;
|
|
/* 0760 */ std::string m_accountName;
|
|
/* 0778 */ std::vector<std::pair<int, int>> keyValues;
|
|
/* 0784 */ std::map<std::int64_t, std::int64_t> summonHp;
|
|
/* 078C */ std::map<std::int64_t, std::int64_t> summonMaxHp;
|
|
/* 0794 */ std::uint32_t m_serverTimeOffset;
|
|
/* 0798 */ int m_serverTimeAdjustCount;
|
|
/* 079C */ unsigned char timeAttackMode[0x04];
|
|
/* 07A0 */ std::uint32_t m_averagePing;
|
|
union {
|
|
/* 07A4 */ unsigned char timeAttackState[0x10];
|
|
struct {
|
|
/* 07A4 */ std::uint32_t m_timeAttackCountdown;
|
|
/* 07A8 */ std::uint32_t m_timeAttackStart;
|
|
/* 07AC */ int m_timeAttackVisible;
|
|
/* 07B0 */ unsigned char unknown_07B0[4];
|
|
};
|
|
};
|
|
/* 07B4 */ unsigned char m_playerNameKey[0x40];
|
|
/* 07F4 */ unsigned char characterSelectionData[0x6A0];
|
|
/* 0E94 */ int characterCount;
|
|
/* 0E98 */ int cachedSex;
|
|
/* 0E9C */ int m_sex;
|
|
/* 0EA0 */ unsigned char characterLoginData[0x38];
|
|
/* 0ED8 */ int m_head;
|
|
/* 0EDC */ unsigned char weaponAppearance[0x10];
|
|
/* 0EEC */ int m_bodyStyle;
|
|
/* 0EF0 */ int m_headPalette;
|
|
/* 0EF4 */ unsigned char accessoryAppearance[0x0C];
|
|
/* 0F00 */ int m_robe;
|
|
/* 0F04 */ bool m_newRobeDrawOnTop;
|
|
/* 0F05 */ unsigned char unknown_0F05[0x03];
|
|
/* 0F08 */ int m_bodyCostume;
|
|
/* 0F0C */ unsigned char statusLevelEffects[0x08];
|
|
/* 0F14 */ std::uint32_t m_jobFlags;
|
|
/* 0F18 */ int m_playerX;
|
|
/* 0F1C */ int m_playerY;
|
|
/* 0F20 */ int m_playerDir;
|
|
/* 0F24 */ unsigned char playerTeam[0x04];
|
|
/* 0F28 */ int m_score1;
|
|
/* 0F2C */ int m_score2;
|
|
/* 0F30 */ unsigned char chatFont[0x04];
|
|
/* 0F34 */ int cartCount;
|
|
/* 0F38 */ int cartMaxCount;
|
|
/* 0F3C */ int cartWeight;
|
|
/* 0F40 */ int cartMaxWeight;
|
|
union {
|
|
/* 0F44 */ unsigned char storeSlotCounts[8];
|
|
struct {
|
|
/* 0F44 */ int m_vendingSlotCount;
|
|
/* 0F48 */ int m_buyingStoreSlotCount;
|
|
};
|
|
};
|
|
/* 0F4C */ int storeItemLimit;
|
|
/* 0F50 */ int selectedCharacterSlot;
|
|
/* 0F54 */ unsigned char guildTargetCharacter[0x04];
|
|
/* 0F58 */ int m_autoOpenWhisperWindow;
|
|
/* 0F5C */ int m_whisperOpenSound;
|
|
/* 0F60 */ int m_autoOpenFriendWhisperWindow;
|
|
/* 0F64 */ unsigned char whisperOptions[0x08];
|
|
/* 0F6C */ const char* const* m_humanMaleHeadNames;
|
|
/* 0F70 */ unsigned char m_humanMaleHeadNamesEndAndCapacity[0x08];
|
|
/* 0F78 */ const char* const* m_humanFemaleHeadNames;
|
|
/* 0F7C */ unsigned char m_humanFemaleHeadNamesEndAndCapacity[0x08];
|
|
/* 0F84 */ const char* const* m_imfNames;
|
|
/* 0F88 */ unsigned char additionalSpriteNames[0x14];
|
|
/* 0F9C */ const char* const* m_shieldJobNames;
|
|
/* 0FA0 */ unsigned char m_shieldJobNamesEndAndCapacity[0x08];
|
|
/* 0FA8 */ std::vector<const char*> m_jobNameTable;
|
|
/* 0FB4 */ std::map<unsigned, const char*> m_jobNameTableWoman;
|
|
/* 0FBC */ std::map<unsigned, const char*> m_jobNameTableMan;
|
|
/* 0FC4 */ std::map<unsigned, const char*> unknown_0FC4;
|
|
/* 0FCC */ std::vector<const char*> m_sexLabels;
|
|
/* 0FD8 */ std::vector<const char*> m_jobKeyNames;
|
|
/* 0FE4 */ std::list<std::uint32_t> m_pingSamples;
|
|
/* 0FEC */ std::vector<const char*> m_palJobNames;
|
|
/* 0FF8 */ EmotionHotkeys m_emotionHotkeys;
|
|
/* 1010 */ std::uint32_t petGid;
|
|
/* 1014 */ unsigned char petNameModified[4];
|
|
/* 1018 */ char petName[0x20];
|
|
/* 1038 */ int petAccessory;
|
|
/* 103C */ int petJob;
|
|
/* 1040 */ int petLevel;
|
|
/* 1044 */ int petHunger;
|
|
/* 1048 */ unsigned char petMaxHunger[4];
|
|
/* 104C */ int m_petFriendly;
|
|
/* 1050 */ int petEggIndex;
|
|
/* 1054 */ int petPreviousHunger;
|
|
/* 1058 */ int m_petActionTable[5][5][7];
|
|
/* 1314 */ std::string m_petTalkStrings[25];
|
|
/* 156C */ XmlDocument m_petTalkTable;
|
|
/* 159C */ XmlDocument m_monsterSkillInfo;
|
|
/* 15CC */ XmlDocument m_monsterTalkTable;
|
|
/* 15FC */ unsigned char monsterTalkState[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 playerExperienceState[0x24];
|
|
/* 1650 */ int m_level;
|
|
/* 1654 */ unsigned char statusPoints[0x04];
|
|
/* 1658 */ int m_jobLevel;
|
|
/* 165C */ int m_skillPoint;
|
|
/* 1660 */ int m_guildSkillPoint;
|
|
/* 1664 */ unsigned char companionSkillPoints[8];
|
|
/* 166C */ int strengthBonus;
|
|
/* 1670 */ int agilityBonus;
|
|
/* 1674 */ int vitalityBonus;
|
|
/* 1678 */ int intelligenceBonus;
|
|
/* 167C */ int dexterityBonus;
|
|
/* 1680 */ int luckBonus;
|
|
/* 1684 */ int m_standardStats[6];
|
|
/* 169C */ unsigned char combatStats[0x50];
|
|
/* 16EC */ std::uint32_t equippedArrowIndex;
|
|
/* 16F0 */ int m_zeny;
|
|
/* 16F4 */ unsigned char healthPoints[0x8];
|
|
/* 16FC */ int m_maxWeight;
|
|
/* 1700 */ int m_weight;
|
|
/* 1704 */ unsigned char optionFlags[0x4];
|
|
/* 1708 */ int monsterInfoEnabled;
|
|
/* 170C */ unsigned char clientTimeOffset[0x4];
|
|
/* 1710 */ std::list<ITEM_INFO> m_inventoryItems;
|
|
/* 1718 */ std::list<ITEM_INFO> shopItems;
|
|
/* 1720 */ std::list<ITEM_INFO> purchaseItems;
|
|
/* 1728 */ std::list<ITEM_INFO> sellItems;
|
|
/* 1730 */ std::list<ITEM_INFO> storageItems;
|
|
/* 1738 */ std::list<ITEM_INFO> cartItems;
|
|
/* 1740 */ std::list<ITEM_INFO> merchantShopItems;
|
|
/* 1748 */ std::list<ITEM_INFO> merchantMirrorItems;
|
|
/* 1750 */ std::list<ITEM_INFO> merchantMyShopItems;
|
|
/* 1758 */ std::list<ITEM_INFO> merchantPurchaseItems;
|
|
/* 1760 */ std::list<ITEM_INFO> merchantHopeToSellItems;
|
|
/* 1768 */ std::list<ITEM_INFO> merchantPurchaseSavedItems;
|
|
/* 1770 */ std::list<ITEM_INFO> filteredInventoryItems;
|
|
/* 1778 */ std::vector<int> inventoryFilterIds;
|
|
/* 1784 */ std::list<ITEM_INFO> inventoryCategories[11];
|
|
/* 17DC */ std::list<MessengerMember> m_partyMembers;
|
|
/* 17E4 */ std::list<MessengerMember> m_friends;
|
|
/* 17EC */ unsigned char unknown_17EC[0x04];
|
|
/* 17F0 */ ITEM_INFO equippedItems[10];
|
|
/* 21A0 */ ITEM_INFO alternateEquippedItems[10];
|
|
/* 2B50 */ ITEM_INFO costumeItems[10];
|
|
/* 3500 */ ITEM_INFO alternateCostumeItems[10];
|
|
/* 3EB0 */ ITEM_INFO m_exchangeItems[10];
|
|
/* 4860 */ ITEM_INFO m_itemSlots[10];
|
|
/* 5210 */ int exchangeMoney;
|
|
/* 5214 */ int otherExchangeMoney;
|
|
/* 5218 */ std::vector<std::pair<const char*, int>> m_commandIds;
|
|
/* 5224 */ std::vector<std::pair<const char*, const char*>> m_bgmFileNames;
|
|
/* 5230 */ std::vector<std::pair<std::string, std::vector<std::string>>> m_fogParameters;
|
|
/* 523C */ std::vector<std::pair<std::string, std::vector<std::string>>> m_mapViewParameters;
|
|
/* 5248 */ std::vector<char*> m_indoorRswNames;
|
|
/* 5254 */ std::map<int, float> m_npcLocationRadius;
|
|
/* 525C */ unsigned char weaponSoundTables[0x24];
|
|
/* 5280 */ std::list<int> unknown_5280;
|
|
/* 5288 */ unsigned char unknown_5288[0x0C];
|
|
/* 5294 */ const char* const* m_bodyJobNames;
|
|
/* 5298 */ unsigned char m_bodyJobNamesEndAndCapacity[0x08];
|
|
/* 52A0 */ const char* const* m_sexNames;
|
|
/* 52A4 */ unsigned char m_sexNamesEndAndCapacity[0x08];
|
|
/* 52AC */ const char* const* m_weaponNamesBegin;
|
|
/* 52B0 */ const char* const* m_weaponNamesEnd;
|
|
/* 52B4 */ unsigned char m_weaponNamesCapacityEnd[0x04];
|
|
/* 52B8 */ std::vector<const char*> m_accessoryNames;
|
|
/* 52C4 */ std::vector<const char*> m_robeNames;
|
|
/* 52D0 */ std::vector<std::string> m_navigationForbiddenMaps;
|
|
/* 52DC */ std::vector<std::pair<const char*, int>> m_commandOptions;
|
|
/* 52E8 */ unsigned char commandTables[0x28];
|
|
/* 5310 */ std::map<std::string, MapPosEntry> m_mapPositions;
|
|
/* 5318 */ std::map<std::string, MapPosEntry>* m_mapPosLists;
|
|
/* 531C */ std::map<int, MapPosEntry> m_mapPosBounds;
|
|
/* 5324 */ int mapPositionsScaled;
|
|
/* 5328 */ int m_mapPosListCount;
|
|
/* 532C */ int randomStatIndexA;
|
|
/* 5330 */ int randomStatIndexB;
|
|
/* 5334 */ int randomStatIndexC;
|
|
/* 5338 */ int randomStatIndexD;
|
|
/* 533C */ int randomStatIndexE;
|
|
/* 5340 */ int randomStatValues[12];
|
|
/* 5370 */ unsigned char replayStatValuesA[0x30];
|
|
/* 53A0 */ unsigned char replayStatValuesB[0x30];
|
|
/* 53D0 */ unsigned char replayStatValuesC[0x30];
|
|
/* 5400 */ unsigned char minimapTokenStorage[0x40];
|
|
/* 5440 */ std::list<ShortcutCooldownRecord> m_requestTimers;
|
|
/* 5448 */ int showTimer;
|
|
/* 544C */ unsigned char mapTransitionFlag[0x04];
|
|
/* 5450 */ int guildLeader;
|
|
/* 5454 */ unsigned char interactionFlags[0x0C];
|
|
/* 5460 */ int partyBlocked;
|
|
/* 5464 */ int partyLeader;
|
|
/* 5468 */ int adoptionSkillAvailable;
|
|
/* 546C */ unsigned char showEffects[0x04];
|
|
/* 5470 */ int lowMemory;
|
|
/* 5474 */ int performanceWarningEnabled;
|
|
/* 5478 */ unsigned char loginOptions[8];
|
|
/* 5480 */ int quitBlocked;
|
|
/* 5484 */ int battleChat;
|
|
/* 5488 */ int quitAllowed;
|
|
/* 548C */ int sessionFlag;
|
|
/* 5490 */ unsigned char itemSendState[0x10];
|
|
/* 54A0 */ int partyExpShare;
|
|
/* 54A4 */ int partyItemCollect;
|
|
/* 54A8 */ int partyItemDistribute;
|
|
/* 54AC */ std::string partyRequestName;
|
|
/* 54C4 */ std::string partyName;
|
|
/* 54DC */ std::string accountAddress;
|
|
/* 54F4 */ std::string registrationUrl;
|
|
/* 550C */ std::string storeTitle;
|
|
/* 5524 */ std::string accountPort;
|
|
/* 553C */ std::string m_serverName;
|
|
union {
|
|
/* 5554 */ unsigned char whisperRecordStorage[4];
|
|
/* 5554 */ int m_whisperRecord;
|
|
};
|
|
/* 5558 */ int currentSex;
|
|
/* 555C */ unsigned char playerStatusFlags[0xC];
|
|
/* 5568 */ int hp;
|
|
/* 556C */ int maxHp;
|
|
/* 5570 */ unsigned char spAndHomunculusStats[0x4C];
|
|
/* 55BC */ int m_homunJob;
|
|
/* 55C0 */ unsigned char homunLevel[0x04];
|
|
/* 55C4 */ int m_homunHp;
|
|
/* 55C8 */ unsigned char homunMaxHp[0x04];
|
|
/* 55CC */ int m_homunSp;
|
|
/* 55D0 */ int homunMaxSp;
|
|
/* 55D4 */ int homunFriendly;
|
|
/* 55D8 */ int homunAccessory;
|
|
/* 55DC */ unsigned char unknown_55DC[4];
|
|
/* 55E0 */ std::int64_t m_homunExp;
|
|
/* 55E8 */ std::int64_t m_homunMaxExp;
|
|
/* 55F0 */ int homunHunger;
|
|
/* 55F4 */ int homunMaxHunger;
|
|
/* 55F8 */ int homunNameModified;
|
|
/* 55FC */ int homunEnemyGid;
|
|
/* 5600 */ int homunEnemyX;
|
|
/* 5604 */ int homunEnemyY;
|
|
/* 5608 */ int moveHomunEnemy;
|
|
/* 560C */ int selectHomunEnemy;
|
|
/* 5610 */ int attackHomunEnemy;
|
|
/* 5614 */ int homunAlive;
|
|
/* 5618 */ int m_traceAi;
|
|
/* 561C */ int m_homunActionState;
|
|
/* 5620 */ unsigned char companionTargetState[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 mercenaryAttackRange[4];
|
|
/* 5694 */ __time32_t m_mercenaryExpiration;
|
|
/* 5698 */ int mercenaryEnemyGid;
|
|
/* 569C */ int mercenaryEnemyX;
|
|
/* 56A0 */ int mercenaryEnemyY;
|
|
/* 56A4 */ int moveMercenaryEnemy;
|
|
/* 56A8 */ int selectMercenaryEnemy;
|
|
/* 56AC */ int attackMercenaryEnemy;
|
|
/* 56B0 */ int mercenaryAlive;
|
|
/* 56B4 */ int m_mercenaryActionState;
|
|
/* 56B8 */ unsigned char autoReplyState[0x1C];
|
|
/* 56D4 */ int m_storePasswordMode;
|
|
/* 56D8 */ bool m_passwordInputAlternate;
|
|
/* 56D9 */ unsigned char unknown_56D9[0x7];
|
|
/* 56E0 */ int m_passwordWndMode;
|
|
/* 56E4 */ std::uint32_t m_loginAccountId;
|
|
/* 56E8 */ std::int32_t m_passwordWndAccountId;
|
|
/* 56EC */ bool m_launchAccountEnabled;
|
|
/* 56ED */ char m_loginErrorText[500];
|
|
/* 58E1 */ unsigned char unknown_58E1[0x19];
|
|
/* 58FA */ char clientVersion[0x18];
|
|
/* 5912 */ unsigned char characterRenameEnabled;
|
|
/* 5913 */ unsigned char characterRenameData[0x25];
|
|
/* 5938 */ int replaySessionFlag;
|
|
/* 593C */ int memorialWindowOpen;
|
|
/* 5940 */ int memorialWindowX;
|
|
/* 5944 */ int memorialWindowY;
|
|
/* 5948 */ int memorialDungeonState;
|
|
/* 594C */ int memorialReplayValue;
|
|
/* 5950 */ std::string memorialDungeonName;
|
|
/* 5968 */ int memorialQueuePosition;
|
|
/* 596C */ int memorialCreationTime;
|
|
/* 5970 */ int memorialExpirationTime;
|
|
/* 5974 */ unsigned char equipmentViewState[0x48];
|
|
/* 59BC */ int characterSlotState;
|
|
/* 59C0 */ int m_normalSlotCount;
|
|
/* 59C4 */ int m_premiumSlotCount;
|
|
/* 59C8 */ int m_billingSlotCount;
|
|
/* 59CC */ int m_producibleSlotCount;
|
|
/* 59D0 */ int blockedCharacterCount;
|
|
/* 59D4 */ int m_validSlotCount;
|
|
/* 59D8 */ LuaScript* m_hotkeyScript;
|
|
union {
|
|
/* 59DC */ unsigned char mouseAndChannelOptions[0x19C];
|
|
struct {
|
|
/* 59DC */ unsigned char unknown_59DC_0000[0x194];
|
|
/* 5B70 */ bool m_lockMouse;
|
|
/* 5B71 */ unsigned char unknown_5B71[3];
|
|
/* 5B74 */ int m_channelCopId;
|
|
};
|
|
};
|
|
/* 5B78 */ PartyBookingMgr m_partyBooking;
|
|
/* 5BBC */ int m_partyBookingLevelLimit;
|
|
/* 5BC0 */ int elementalGid;
|
|
/* 5BC4 */ int elementalHp;
|
|
/* 5BC8 */ int elementalSp;
|
|
/* 5BCC */ int elementalMaxHp;
|
|
/* 5BD0 */ int elementalMaxSp;
|
|
/* 5BD4 */ std::vector<SessionEntry5BD4> storeSearchResults;
|
|
/* 5BE0 */ int storeSearchCount;
|
|
/* 5BE4 */ int storeSearchPageFlags;
|
|
/* 5BE8 */ int storeSearchX;
|
|
/* 5BEC */ int storeSearchY;
|
|
/* 5BF0 */ std::uint32_t storeSearchOwnerAid;
|
|
/* 5BF4 */ int m_pairValues[3];
|
|
union {
|
|
/* 5C00 */ unsigned char itemDropOptions[0x1C];
|
|
struct {
|
|
/* 5C00 */ bool m_lockItemDrop;
|
|
/* 5C01 */ bool m_skipPriceWarning;
|
|
/* 5C02 */ unsigned char itemDropState[0x12];
|
|
/* 5C14 */ bool m_muteSellSound;
|
|
/* 5C15 */ unsigned char sellSoundState[7];
|
|
};
|
|
};
|
|
/* 5C1C */ int replayPacketMode;
|
|
/* 5C20 */ long long m_bankBalance;
|
|
/* 5C28 */ std::map<int, int> actorEffectStates;
|
|
/* 5C30 */ unsigned char itemSelectionState[0x38];
|
|
/* 5C68 */ ITEM_INFO selectionItems[5];
|
|
/* 6140 */ std::uint16_t achievementResult;
|
|
/* 6144 */ std::map<int, SessionRecord6144> achievements;
|
|
/* 614C */ int achievementScore;
|
|
/* 6150 */ std::int16_t achievementLevel;
|
|
/* 6154 */ int achievementCompleted;
|
|
/* 6158 */ int achievementTotal;
|
|
/* 615C */ int jobTitle;
|
|
/* 6160 */ std::vector<int> jobTitles;
|
|
/* 616C */ std::vector<int> achievementIds;
|
|
/* 6178 */ std::vector<SessionRecord6178> trackedAchievements;
|
|
/* 6184 */ int playerAppearanceState;
|
|
/* 6188 */ int m_lastIntervalTime;
|
|
/* 618C */ const char* const* m_doramMaleHeadNames;
|
|
/* 6190 */ unsigned char m_doramMaleHeadNamesEndAndCapacity[0x08];
|
|
/* 6198 */ const char* const* m_doramFemaleHeadNames;
|
|
/* 619C */ unsigned char m_doramFemaleHeadNamesEndAndCapacity[0x08];
|
|
/* 61A4 */ int automaticSkillHotkey;
|
|
union {
|
|
/* 61A8 */ unsigned char hotkeyAndSortOptions[0x10];
|
|
struct {
|
|
/* 61A8 */ int m_currentHotkey;
|
|
/* 61AC */ int m_localMapMove;
|
|
/* 61B0 */ bool m_guildMemberListSort;
|
|
/* 61B1 */ unsigned char showCameraInfo;
|
|
/* 61B2 */ bool m_blockPrivateTab;
|
|
/* 61B3 */ bool m_itemDefaultSort;
|
|
/* 61B4 */ bool m_itemAscendingOrder;
|
|
/* 61B5 */ bool m_itemDescendingOrder;
|
|
/* 61B6 */ unsigned char unknown_61B6[2];
|
|
};
|
|
};
|
|
/* 61B8 */ ITEM_INFO swapCostumeItems[10];
|
|
/* 6B68 */ ITEM_INFO swapEquippedItems[10];
|
|
/* 7518 */ ITEM_INFO unknown_7518[10];
|
|
/* 7EC8 */ std::uint32_t swapArrowIndex;
|
|
/* 7ECC */ unsigned char swapEquipmentFlag[0x04];
|
|
/* 7ED0 */ int minimumNameLength;
|
|
/* 7ED4 */ std::uint32_t nameValidationTick;
|
|
/* 7ED8 */ int m_swapEquipmentMode = 0;
|
|
/* 7EDC */ bool m_showMenuIcon;
|
|
/* 7EDD */ unsigned char unknown_7EDD[3];
|
|
/* 7EE0 */ std::map<int, RobeAlpha> m_robeAlpha;
|
|
/* 7EE8 */ unsigned char maxBaseLevel[4];
|
|
/* 7EEC */ int m_maxLevel;
|
|
/* 7EF0 */ unsigned char jobLevelLimits[0x7C];
|
|
/* 7F6C */ int m_maxLevelEffect4th;
|
|
/* 7F70 */ int m_maxLevelEffect4thSub;
|
|
/* 7F74 */ unsigned char raceCreationOptions[8];
|
|
/* 7F7C */ bool m_homunculusAutoFeed;
|
|
union {
|
|
/* 7F7D */ unsigned char homunculusFeedOptions[0x0F];
|
|
struct {
|
|
/* 7F7D */ unsigned char unknown_7F7D_0000[0x0B];
|
|
/* 7F88 */ bool m_loginModeFlag;
|
|
};
|
|
};
|
|
/* 7F8C */ int m_priorityClass;
|
|
/* 7F90 */ int m_showRankingSchedule;
|
|
/* 7F94 */ std::set<std::uint32_t> pendingActorNames;
|
|
/* 7F9C */ int m_pingLiveSchedule;
|
|
/* 7FA0 */ std::uint32_t m_lastReceiveTick;
|
|
/* 7FA4 */ std::uint32_t m_lastSendTick;
|
|
/* 7FA8 */ CInstantVar m_options;
|
|
/* 7FB4 */ AutomaticSkills m_automaticSkills;
|
|
/* 7FBC */ int extraInventorySlots;
|
|
/* 7FC0 */ SessionTraits m_traits;
|
|
/* 8010 */ CMCStoreInfoBackup m_storeInfoBackup;
|
|
/* 8074 */ int madogearType;
|
|
/* 8078 */ const char* const* m_jobSpriteNames;
|
|
/* 807C */ unsigned char webServiceLoginData[0x20];
|
|
/* 809C */ std::vector<std::string> characterNames;
|
|
/* 80A8 */ std::vector<std::string> skyMapNames;
|
|
/* 80B4 */ std::map<std::string, int> m_nameToId;
|
|
/* 80BC */ std::map<int, SessionShop> m_shops;
|
|
/* 80C4 */ int m_damageSkinIndex;
|
|
/* 80C8 */ int damageSkinCount;
|
|
/* 80CC */ int m_damageSkinMode;
|
|
/* 80D0 */ int m_damageMillionUnit;
|
|
/* 80D4 */ std::string m_damageResourceName;
|
|
/* 80EC */ std::string damageSpriteName;
|
|
/* 8104 */ std::string damageSkinAuxiliaryName;
|
|
/* 811C */ std::vector<ITEM_INFO> m_cardItems;
|
|
/* 8128 */ unsigned char feedOptions[0x08];
|
|
/* 8130 */ int restrictedCharacterSlots;
|
|
/* 8134 */ int playerSkillMode;
|
|
/* 8138 */ std::int64_t m_startTimeTicks;
|
|
/* 8140 */ std::int64_t m_loginTimeTicks;
|
|
/* 8148 */ int sessionIndex;
|
|
|
|
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);
|
|
std::int32_t MemberColor(int index);
|
|
SessionShop* FindShop(const int& shopId);
|
|
CSkillInfo* FindGroupedSkill(std::uint32_t id);
|
|
void AddFriend(MessengerMember& member);
|
|
void AddPartyMember(MessengerMember& member);
|
|
void ClearFriends();
|
|
int FriendCount() const;
|
|
int PartyCount() const;
|
|
int OnlinePartyCount() const;
|
|
MessengerMember FriendAt(int index) const;
|
|
MessengerMember PartyAt(int index) const;
|
|
MessengerMember PartyByAccount(std::uint32_t accountId) const;
|
|
MessengerMember PartyByCharacter(std::uint32_t characterId) const;
|
|
MessengerMember PartyByName(const char* name) const;
|
|
void SetPartyDead(std::uint32_t accountId, int dead);
|
|
void SetPartyJobLevel(std::uint32_t accountId, std::uint16_t job, std::uint16_t level);
|
|
void SetPartyLeader(std::uint32_t accountId, int leader);
|
|
int RotateShortcut(int index, int bank) const;
|
|
void AssignShortcut(unsigned char type, std::uint32_t id, int level, int slot, int bank);
|
|
void AssignItemShortcut(std::uint32_t id, int slot);
|
|
void ClearAdditionalShortcutSkills();
|
|
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 SetPlayerSkillMode(int value);
|
|
void SetElementalGid(int value);
|
|
void UnflagInventoryItem(int id);
|
|
void UnflagMerchantShopItem(int id);
|
|
void UnflagCartItem(int id);
|
|
std::uint32_t SyncServerTime(std::uint32_t serverTime);
|
|
__declspec(noinline) int DefaultRenderBackend();
|
|
int RenderSystemResetPolicy();
|
|
void LoadOptionInfo();
|
|
void SaveOptionInfo();
|
|
void LoadNavigationScripts();
|
|
bool IsNavigationAllowed() const;
|
|
void LoadRobeAlpha();
|
|
void LoadDamageSkinSettings();
|
|
bool LoadExceptionMinimapNameTable();
|
|
bool LoadMapNameTable();
|
|
bool LoadMapPosTable();
|
|
bool ScaleMapPositions();
|
|
bool LoadFogParameters();
|
|
void SetCostumeItem(unsigned int index, const ITEM_INFO& item);
|
|
void SetEquippedItem(unsigned int index, const ITEM_INFO& item);
|
|
void ClearHomunStatus();
|
|
std::pair<int, int>* InsertPair(int key, int value);
|
|
int SetPairValue(int value, int slot);
|
|
void ClearPairValues(unsigned char clearThird, unsigned char clearSecond, unsigned char clearFirst);
|
|
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 GetSiegeMode() const;
|
|
int IsPlayerJobId(int job) const;
|
|
int GetBattleFieldMode() 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 HasTrackedAchievements() const;
|
|
bool HasTrackedAchievement(int id) const;
|
|
int IsBerserkActive() const;
|
|
int IsTrickDeadActive() const;
|
|
int HasActiveSkillEffect(int id) const;
|
|
void PlaySkillEffect(int skillId, int level, CGameActor* source, CGameActor* target);
|
|
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;
|
|
__declspec(noinline) int IsHomunculusSkill(unsigned id) const;
|
|
__declspec(noinline) int IsMercenarySkill(unsigned id) 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<NormalItemSlot*>(reinterpret_cast<unsigned char*>(this) + offsetof(CSession, quickSlot))[index];
|
|
}
|
|
void ResetCostumeItems();
|
|
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 AddAchievementJobTitle(int id);
|
|
bool ToggleTrackedAchievement(int id);
|
|
void RefreshTrackedAchievement(int id);
|
|
const char* GetPetTalkName(int job);
|
|
__declspec(noinline) const char* GetPetTalkActionName(int action);
|
|
void GetPetTalkText(int job, int hungerState, int action, char* text);
|
|
__declspec(noinline) 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 EquipInventoryItem(const ITEM_INFO& item, const char* name);
|
|
bool UnequipItem(int location, std::uint32_t identity);
|
|
bool OnItemEquipped(ITEM_INFO& item);
|
|
bool EquipCostumeItem(const ITEM_INFO& item, const char* name);
|
|
bool UnequipCostumeItem(int location);
|
|
bool EquipAlternateCostumeItem(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 ResetAlternateCostumeItems();
|
|
void RestoreSelectionItems();
|
|
void ClearQuickSlots();
|
|
void ClearShortcutSlots();
|
|
void ClearSecondaryShortcutSlots();
|
|
void ClearHotkeySkillLevels();
|
|
void EraseUnknownKey(std::int64_t key);
|
|
std::int64_t FindSummonHp(std::int64_t key) const;
|
|
std::int64_t FindSummonMaxHp(std::int64_t key) const;
|
|
SessionRecord6144 FindAchievementRecord(int key) const;
|
|
void UpdateAchievementRecord(const AchievementRecordPacket& packet);
|
|
void FindLatestCompletedAchievements(int* second, int* first);
|
|
int GetBeginEffectId(int skillId) const;
|
|
bool IsPartyMember(std::uint32_t aid, bool onlineOnly);
|
|
bool IsPvpMap();
|
|
ITEM_INFO GetCostumeItemAt(int index) const;
|
|
ITEM_INFO GetAlternateCostumeItemAt(int index) const;
|
|
ITEM_INFO GetSelectionItemAt(int index) const;
|
|
ITEM_INFO GetEquippedItemAt(int index) const;
|
|
ITEM_INFO GetSwapEquippedItem(int index) const;
|
|
ITEM_INFO GetSwapCostumeItem(int index) const;
|
|
ITEM_INFO FindItemByIdentity(std::uint32_t identity, int location);
|
|
unsigned char IsAllyActor(std::uint32_t aid, int job);
|
|
const char* GetDamageSkinAuxiliaryName() const;
|
|
const char* GetDamageSpriteName() const;
|
|
ITEM_INFO FindMerchantPurchaseSavedItem(std::uint32_t id) const;
|
|
ITEM_INFO GetItem1768At(int index) const;
|
|
int GetItem1768Quantity(std::uint32_t id) const;
|
|
ITEM_INFO FindMerchantShopItem(std::uint32_t id) const;
|
|
ITEM_INFO GetItem1740At(int index) const;
|
|
int GetItem1740Quantity(std::uint32_t id) const;
|
|
ITEM_INFO FindMerchantMyShopItem(std::uint32_t id) const;
|
|
ITEM_INFO GetItem1750At(int index) const;
|
|
int GetItem1750Quantity(std::uint32_t id) const;
|
|
ITEM_INFO FindMerchantPurchaseItem(std::uint32_t id) const;
|
|
ITEM_INFO FindItem1758ByItemId(int itemId) const;
|
|
ITEM_INFO GetItem1758At(int index) const;
|
|
ITEM_INFO FindMerchantHopeToSellItem(std::uint32_t id) const;
|
|
ITEM_INFO GetItem1760At(int index) const;
|
|
int GetItem1760Quantity(std::uint32_t id) const;
|
|
ITEM_INFO FindFilteredInventoryItem(std::uint32_t id) const;
|
|
ITEM_INFO FindItem1760ByItemId(const char* itemId) const;
|
|
int GetItem1760QuantityByItemId(const char* itemId) const;
|
|
SessionRecord0734 FindMiniPartyRecord(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 HasInventorySearchItem(int itemId) const;
|
|
int 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 IsIndoorMapName(const char* name) const;
|
|
bool IsKnownName(std::string name) const;
|
|
long long GetItem1760Total() const;
|
|
ITEM_INFO GetItem1748At(int index) const;
|
|
bool HasShopItemIdentity(std::uint32_t id) const;
|
|
bool HasExchangeItem(std::uint32_t id) const;
|
|
int CountSelectionItems() const;
|
|
int CountDistinctCostumeItems() const;
|
|
int CountDistinctEquippedItems() 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 FindActorSkillAnimationValue(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);
|
|
void AddProhibitionLog(std::uint32_t aid, std::uint32_t minutes);
|
|
void LoadProhibitionLog();
|
|
void ResetPetEggAndJob();
|
|
int ProcessEmotionShortcut(const char* text);
|
|
int IsAdminSubMode(int subMode);
|
|
void GetMonsterSkillInfo(const char* monster, int skill, int* action, int* loopType);
|
|
const char* DecodePlayerName() const;
|
|
bool HasSkillEffect(std::uint32_t id) const;
|
|
CSkillInfo LookupHomunSkill(std::uint32_t id) const;
|
|
CSkillInfo LookupMercSkill(std::uint32_t id) const;
|
|
CSkillInfo LookupAdditionalSkill(std::uint32_t id) const;
|
|
CSkillInfo LookupSkill(std::uint32_t id);
|
|
void NotifySkillWindows();
|
|
void RemoveSkill(std::uint32_t id);
|
|
bool UpdateSkill(const CSkillInfo& value, unsigned char notify, unsigned char updateType);
|
|
bool UpdateAdditionalSkill(const CSkillInfo& value, int unused);
|
|
int InheritedJob(int job);
|
|
void WriteOptionFloat(CFile& file, const char* key, float value);
|
|
void WriteOptionInteger(CFile& file, const char* key, int value);
|
|
void WriteOptionString(CFile& file, const char* key, const char* value);
|
|
void WriteOptionGuid(CFile& file, const char* key, const GUID& value);
|
|
void InitializeSkillTree();
|
|
void NotifyHomunSkillWindows();
|
|
void NotifyMercSkillWindows();
|
|
int GetPetActionNumber(int hungerLevel, int friendlyLevel, int action);
|
|
void InitPetActionTable();
|
|
void InitUnknownMapTables();
|
|
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 IsRestrictedCharacterSlot(int value) const;
|
|
bool ResetUnknownState();
|
|
__declspec(noinline) 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;
|
|
__declspec(noinline) int HomunSkillLevel(int skillId) const;
|
|
__declspec(noinline) int UseLevel(int id) const;
|
|
int SkillLevel(int id) const;
|
|
CRenderObject* FindGameActor(std::uint32_t aid) const;
|
|
int GetPetTargetAid() const;
|
|
const char* GetJobName(unsigned job, int sex);
|
|
void InitJobNameTable();
|
|
int GetCurrentSex();
|
|
void LoadXmlTables();
|
|
void LoadExternalSettings();
|
|
void ReloadLanguageTables();
|
|
bool AddInventoryItem(const ITEM_INFO& item, unsigned char refresh);
|
|
void AddShopItem(const RawItemBasic& item, int quantity, std::uint16_t unknown_006C);
|
|
void AddShopItem(const RawItemBasic& item, int mode);
|
|
bool AddMerchantPurchaseSavedItem(const ITEM_INFO& item, unsigned char alternate, unsigned char refresh);
|
|
bool AddMerchantShopItem(const ITEM_INFO& item);
|
|
bool AddMerchantMyShopItem(const ITEM_INFO& item, int type, unsigned char refresh);
|
|
void AddMerchantPurchaseItem(const ITEM_INFO& item);
|
|
void AddMerchantHopeToSellItem(const ITEM_INFO& item);
|
|
void AddMerchantMirrorItem(const ITEM_INFO& item);
|
|
bool Equip(const ITEM_INFO& item);
|
|
void AppendShopItem(const ITEM_INFO& item);
|
|
void MergeItem1718ByName(const ITEM_INFO& item);
|
|
void MergeItem1720ByName(const ITEM_INFO& item);
|
|
void MergePurchaseItem(const ITEM_INFO& item);
|
|
void AddStorageItem(const ITEM_INFO& item);
|
|
void MergeShopItem(const ITEM_INFO& item);
|
|
bool AddCartItem(const ITEM_INFO& item, unsigned char refresh);
|
|
void RemoveItem1758ByItemId(ITEM_INFO& item);
|
|
__declspec(noinline) void RemoveInventoryItem(std::uint32_t id, int quantity);
|
|
bool AddExchangeItem(ITEM_INFO item);
|
|
bool RemoveMerchantPurchaseSavedItem(const ITEM_INFO& item, unsigned char alternate);
|
|
bool RemoveMerchantShopItem(const ITEM_INFO& item);
|
|
bool RemoveMerchantMyShopItem(const ITEM_INFO& item, int type, unsigned char refresh);
|
|
void RemoveMerchantPurchaseItem(ITEM_INFO& item);
|
|
void RemoveMerchantHopeToSellItem(const ITEM_INFO& item);
|
|
void RemoveItem1718ByItemId(const ITEM_INFO& item);
|
|
void RemoveShopItem(const ITEM_INFO& item);
|
|
void RemoveItem1720ByName(const ITEM_INFO& item);
|
|
void RemovePurchaseItem(const ITEM_INFO& item);
|
|
void RemoveStorageItem(const ITEM_INFO& item);
|
|
void ReduceShopItemQuantity(const ITEM_INFO& item);
|
|
bool RemoveCartItem(const ITEM_INFO& item);
|
|
void ClearInventory();
|
|
void ClearItems1760And1748();
|
|
void ClearMerchantPurchaseSavedItems();
|
|
void ClearMerchantShopItems();
|
|
void ClearMerchantMyShopItems();
|
|
void SetMerchantMyShopItems(int count, const short* ids);
|
|
void ClearMerchantPurchaseItems();
|
|
void ClearMerchantHopeToSellItems();
|
|
void ClearMerchantMirrorItems();
|
|
void ClearInventoryCategoryItems(int index);
|
|
void ClearItemSlotQuantities();
|
|
void ResetEquipped();
|
|
void ClearPurchaseItems();
|
|
void ClearCartItems();
|
|
void CopyItems1740To1750();
|
|
void CopyItems1760To1770();
|
|
std::pair<bool, ITEM_INFO> FindMerchantMyShopItem(const ITEM_INFO& item, unsigned char unknown);
|
|
void ClearMiniPartyRecords();
|
|
void ResetStatBonuses();
|
|
void ResetHotkeyDescriptions();
|
|
int IsDifferentName(const char* name, const char* other);
|
|
int IsGuildMemberNameDifferent(const char* name);
|
|
int IsFriendNameDifferent(const char* name);
|
|
bool EquipSwapEquipmentItem(const ITEM_INFO& item);
|
|
void ClearAllInventoryCategories();
|
|
void UpdateRandomStats();
|
|
void ResetEquipment();
|
|
void ResetSlots();
|
|
void InitClientData();
|
|
void LoadSessionTables();
|
|
int GetList0Size() const;
|
|
int GetList1Size() const;
|
|
int GetList2Size() const;
|
|
int GetList4Size() const;
|
|
int GetList5Size() const;
|
|
int GetList6Size() const;
|
|
int GetList7Size() const;
|
|
int GetList8Size() const;
|
|
int GetList9Size() const;
|
|
int GetList10Size() const;
|
|
int GetList11Size() const;
|
|
int GetInventoryCategorySize(int index) const;
|
|
void KeepEquipment();
|
|
void ClearTradeItems();
|
|
void RemoveEquipment();
|
|
float GetOptionFloat(const char* key, float fallback);
|
|
// INLINED
|
|
bool& ItemSlotActive() {
|
|
return reinterpret_cast<bool&>(this->feedOptions[5]);
|
|
}
|
|
int GetOptionInteger(const char* key, int fallback);
|
|
std::string GetOptionString(const char* key, const char* fallback);
|
|
GUID GetOptionGuid(const char* key, const GUID& 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<unsigned char>& data);
|
|
std::uint32_t ReadReplayStats(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayCompanions(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayQuests(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayMessenger(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayItems(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayShops(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayExtra(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayShortcuts(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayReserved(const std::vector<unsigned char>& data);
|
|
std::uint32_t ReadReplayEntryQueue(const std::vector<unsigned char>& data);
|
|
std::vector<unsigned char> BuildShortcutReplayRecords();
|
|
std::vector<unsigned char> BuildCharacterReplayRecords();
|
|
std::vector<unsigned char> BuildReservedReplayRecords(); std::vector<unsigned char> BuildShopReplayRecords(); std::vector<unsigned char> BuildExtraReplayRecords(); std::vector<unsigned char> BuildStatsReplayRecords();
|
|
std::vector<unsigned char> BuildItemReplayRecords();
|
|
std::vector<unsigned char> BuildCompanionReplayRecords();
|
|
std::vector<unsigned char> BuildMessengerReplayRecords();
|
|
std::vector<unsigned char> BuildSkillListReplayPacket(short id);
|
|
void SetHomunculusAutoFeed(bool enabled);
|
|
void SetPetAutoFeed(bool enabled);
|
|
void SendClientOption(unsigned char value);
|
|
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 IsHirelingJob(unsigned id) const;
|
|
int IsCompanionJob(unsigned id) const;
|
|
bool IsMonsterClass(int job);
|
|
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 ClearStoreSearchResults();
|
|
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;
|
|
__declspec(noinline) 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<std::string>* GetMapViewParameters(const char* rswName, int* found);
|
|
void LoadLuaDataFiles();
|
|
bool LoadMapViewParameters();
|
|
void InitCommandTables();
|
|
void InitJobKeyNames();
|
|
void InitResourceNameTables();
|
|
void InitJobSpriteNames();
|
|
const char* GetEFSTImgFileName(int efstId, int type);
|
|
bool 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 GetHotkeySkillLevel(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 AreInventoryCategoriesEmpty() const;
|
|
bool HasItem1740Number(int value) const;
|
|
bool IsRobeDrawOnTop(int action, int frame, bool riding);
|
|
int GetPlayerSkillMode() const;
|
|
int FindSkillEffectId(int key) const;
|
|
int FindSkillFollowEffect(int key) const;
|
|
const char* GetEnemyHitWaveName(int element);
|
|
ITEM_INFO* GetEquippedItem(const ITEM_INFO* item);
|
|
ITEM_INFO FindCostumeItem(std::uint32_t id, int* index) const;
|
|
ITEM_INFO FindEquippedItem(std::uint32_t id, int* index) const;
|
|
ITEM_INFO GetExchangeItem(int index) const;
|
|
int HasSwapEquipmentItem(std::uint32_t id) const;
|
|
const std::vector<std::string>* GetFogParameters(const char* rswName, int* found);
|
|
std::string GetPlayerHeadSprName();
|
|
std::string GetImfName(int job);
|
|
std::uint16_t FindInventoryIndexByItemId(int itemId);
|
|
std::vector<int> FindInventoryIndicesByItemId(int itemId, unsigned char identifiedOnly);
|
|
std::vector<unsigned char> 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 AddInventoryCategoryItem(const ITEM_INFO& item, int list);
|
|
int GetCommandId(const char* name) const;
|
|
int GetTalkType(const char* text, int* talkType, std::string* parts);
|
|
int GetItem1728Count() const;
|
|
ITEM_INFO GetItemSlot(int index) const;
|
|
ITEM_INFO GetAlternateEquippedItemAt(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 FindStorageItem(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 FindCartItem(std::uint32_t id) const;
|
|
ITEM_INFO GetItem1738At(int index) const;
|
|
int GetItem1738Quantity(std::uint32_t id) const;
|
|
void AddPendingActorName(std::uint32_t id);
|
|
void SetShowRankingSchedule(bool show, const void* data);
|
|
void SetTraitStat(int type, int value);
|
|
int GetTraitStat(int type);
|
|
void EndSkillOption();
|
|
void ClearNormalItemSlots();
|
|
void ResetSwapEquippedItems();
|
|
void ResetSwapCostumeItems();
|
|
void FlagInventoryItem(std::uint32_t id);
|
|
void FlagMerchantShopItem(std::uint32_t id);
|
|
void FlagCartItem(std::uint32_t id);
|
|
void CollectFilteredMerchantMyShopItems();
|
|
void RefreshMerchantMyShopItems();
|
|
bool IsPartyRecommendTarget(std::uint32_t aid);
|
|
int GetBodyStyle(int job, int style, int renderJob);
|
|
int GetSessionIndex() const;
|
|
void RefreshMessengerGroupWindow();
|
|
void RefreshItem1740Window();
|
|
void RefreshItem1750Window(int type);
|
|
void RefreshItem1768Window(unsigned char alternate, int argument);
|
|
void UpdateMonsterInfoEnabled(int enabled);
|
|
void RefreshItem1738Window();
|
|
void RefreshHpSpWindows();
|
|
CSession();
|
|
void Init();
|
|
void ResetCharacterState();
|
|
void ClearItemContainers();
|
|
void RefreshHomunculusInfo();
|
|
void RefreshMercenaryInfo();
|
|
bool IsBlankString(const char* text) const;
|
|
void InvalidateWindowFrames();
|
|
void RefreshSkillTree();
|
|
void SetJob(int job);
|
|
void EraseMiniPartyRecord(int id);
|
|
void IgnoreText(std::string text);
|
|
void SaveMiniPartyInfo();
|
|
void LoadMiniPartyInfo();
|
|
void ClearPartyMembers();
|
|
void SetItem1768Quantity(int index, int quantity);
|
|
void SetReplayPacketMode(int value);
|
|
void UpdateFriendName(std::uint32_t characterId, const char* name);
|
|
void UnequipSwapEquippedItem(const ITEM_INFO& item);
|
|
void UnequipSwapCostumeItem(const ITEM_INFO& item);
|
|
bool EquipSwapCostumeItem(const ITEM_INFO& item);
|
|
void SetSwapArrowIndex(std::uint32_t value);
|
|
void ResolvePendingActorName(std::uint32_t id, const char* name);
|
|
void HiFriends(char* text);
|
|
void sub_DE4FF0();
|
|
std::pair<int, int> GetShopEntry(unsigned int index, int key);
|
|
bool HasCharacterName(std::string name);
|
|
void SetEquippedArrowIndex(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 AddMiniPartyRecord(int id, std::uint32_t value);
|
|
void SetExchangeMoney(int value);
|
|
void SetOtherExchangeMoney(int value);
|
|
void SetPlayerPosition(int x, int y, int direction);
|
|
void SetRecord0734Value(int id, std::uint32_t value);
|
|
void LoadSkillDelayList(int skillId, std::vector<std::map<int, int>>& delays, int& skillFlag);
|
|
int SetServiceFlags(int first, int second);
|
|
};
|
|
|
|
extern CSession g_session;
|
|
extern std::vector<int> g_adminAccountIds;
|
|
extern std::vector<int> g_monsterJobs;
|
|
|
|
bool IsAdminAccount(int aid);
|
|
bool IsMonsterJob(int job);
|
|
int MonsterJobColor(int job);
|
|
void SetMemberFlags(std::uint32_t* flags);
|
|
void ClearMemberFlags(std::uint32_t* flags);
|
|
std::vector<unsigned char> SerializeMessengerMembers(const std::list<MessengerMember>& members);
|
|
|
|
#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(sizeof(SessionEntry00A4) == 0x30);
|
|
static_assert(offsetof(SubChatWndInfo, x) == 0x34);
|
|
static_assert(offsetof(CSession, m_timeAttackCountdown) == 0x7A4);
|
|
static_assert(offsetof(CSession, m_timeAttackStart) == 0x7A8);
|
|
static_assert(offsetof(CSession, m_timeAttackVisible) == 0x7AC);
|
|
static_assert(offsetof(CSession, m_whisperRecord) == 0x5554);
|
|
static_assert(offsetof(CSession, m_noSubChatWnds) == 0x73C);
|
|
static_assert(offsetof(CSession, m_subChatWnds) == 0x744);
|
|
static_assert(offsetof(CSession, m_prohibitionLog) == 0x754);
|
|
static_assert(offsetof(CSession, m_mapPositions) == 0x5310);
|
|
static_assert(offsetof(CSession, m_mapPosListCount) == 0x5328);
|
|
static_assert(offsetof(SessionRecord6144, completedAt) == 0x2C);
|
|
static_assert(offsetof(SessionRecord6144, rewarded) == 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_vendingSlotCount) == 0xF44);
|
|
static_assert(offsetof(CSession, m_buyingStoreSlotCount) == 0xF48);
|
|
static_assert(offsetof(CSession, storeItemLimit) == 0xF4C);
|
|
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_showSkillDescription) == 0xB8);
|
|
static_assert(offsetof(CSession, m_autoOpenFriendWhisperWindow) == 0xF60);
|
|
static_assert(offsetof(CSession, m_channelCopId) == 0x5B74);
|
|
static_assert(offsetof(CSession, m_muteSellSound) == 0x5C14);
|
|
static_assert(offsetof(CSession, m_itemDescendingOrder) == 0x61B5);
|
|
static_assert(offsetof(CSession, m_showMenuIcon) == 0x7EDC);
|
|
static_assert(offsetof(CSession, m_priorityClass) == 0x7F8C);
|
|
static_assert(offsetof(CSession, m_launchAccountEnabled) == 0x56EC);
|
|
static_assert(offsetof(CSession, m_loginModeFlag) == 0x7F88);
|
|
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, cartItems) == 0x1738);
|
|
static_assert(offsetof(CSession, merchantShopItems) == 0x1740);
|
|
static_assert(offsetof(CSession, filteredInventoryItems) == 0x1770);
|
|
static_assert(offsetof(CSession, m_itemSlots) == 0x4860);
|
|
static_assert(offsetof(CSession, m_shops) == 0x80BC);
|
|
static_assert(offsetof(CSession, playerSkillMode) == 0x8134);
|
|
static_assert(offsetof(CSession, m_playerDir) == 0xF20);
|
|
static_assert(offsetof(CSession, monsterInfoEnabled) == 0x1708);
|
|
static_assert(offsetof(CSession, exchangeMoney) == 0x5210);
|
|
static_assert(offsetof(CSession, otherExchangeMoney) == 0x5214);
|
|
static_assert(offsetof(CSession, characterCount) == 0xE94);
|
|
static_assert(offsetof(CSession, petJob) == 0x103C);
|
|
static_assert(offsetof(CSession, guildLeader) == 0x5450);
|
|
static_assert(offsetof(CSession, partyName) == 0x54C4);
|
|
static_assert(offsetof(CSession, memorialDungeonName) == 0x5950);
|
|
static_assert(offsetof(CSession, memorialExpirationTime) == 0x5970);
|
|
static_assert(offsetof(CSession, characterSlotState) == 0x59BC);
|
|
static_assert(offsetof(CSession, m_hotkeyScript) == 0x59D8);
|
|
static_assert(offsetof(CSession, m_lastIntervalTime) == 0x6188);
|
|
static_assert(offsetof(CSession, restrictedCharacterSlots) == 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, hotkeySkillLevels) == 0x420);
|
|
static_assert(offsetof(CSession, m_shortcutSlots) == 0x4B0);
|
|
static_assert(offsetof(CSession, m_mainCooldownIcons) == 0x94);
|
|
static_assert(offsetof(CSession, m_alternateCooldownIcons) == 0x9C);
|
|
static_assert(offsetof(CSession, m_secondaryShortcutSlots) == 0x5AC);
|
|
static_assert(offsetof(CSession, quickSlot) == 0x6EB);
|
|
static_assert(offsetof(CSession, alternateQuickSlot) == 0x6F2);
|
|
static_assert(offsetof(CSession, m_homunSkillLevels) == 0x71C);
|
|
static_assert(offsetof(CSession, m_mercSkillLevels) == 0x728);
|
|
static_assert(offsetof(CSession, keyValues) == 0x778);
|
|
static_assert(offsetof(CSession, summonHp) == 0x784);
|
|
static_assert(offsetof(CSession, summonMaxHp) == 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, cachedSex) == 0xE98);
|
|
static_assert(offsetof(CSession, m_sex) == 0xE9C);
|
|
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, equippedArrowIndex) == 0x16EC);
|
|
static_assert(offsetof(CSession, storageItems) == 0x1730);
|
|
static_assert(offsetof(CSession, miniPartyRecords) == 0x734);
|
|
static_assert(offsetof(CSession, inventoryCategories) == 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, purchaseItems) == 0x1720);
|
|
static_assert(offsetof(CSession, sellItems) == 0x1728);
|
|
static_assert(offsetof(CSession, alternateEquippedItems) == 0x21A0);
|
|
static_assert(offsetof(CSession, m_commandIds) == 0x5218);
|
|
static_assert(offsetof(CSession, equippedItems) == 0x17F0);
|
|
static_assert(offsetof(CSession, costumeItems) == 0x2B50);
|
|
static_assert(offsetof(CSession, alternateCostumeItems) == 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, currentSex) == 0x5558);
|
|
static_assert(offsetof(CSession, m_hotkeyScript) == 0x59D8);
|
|
static_assert(offsetof(CSession, selectionItems) == 0x5C68);
|
|
static_assert(offsetof(CSession, achievementResult) == 0x6140);
|
|
static_assert(offsetof(CSession, achievements) == 0x6144);
|
|
static_assert(offsetof(CSession, jobTitles) == 0x6160);
|
|
static_assert(offsetof(CSession, achievementIds) == 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, skillFollowEffects) == 0x700);
|
|
static_assert(offsetof(CSession, skillEffectIds) == 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, adoptionSkillAvailable) == 0x5468);
|
|
static_assert(offsetof(CSession, m_partyBooking) == 0x5B78);
|
|
static_assert(offsetof(CSession, automaticSkillHotkey) == 0x61A4);
|
|
static_assert(offsetof(CSession, swapEquippedItems) == 0x6B68);
|
|
static_assert(offsetof(CSession, m_showRankingSchedule) == 0x7F90);
|
|
static_assert(offsetof(CSession, pendingActorNames) == 0x7F94);
|
|
static_assert(offsetof(CSession, sessionIndex) == 0x8148);
|
|
static_assert(offsetof(CSession, m_passwordWndMode) == 0x56E0);
|
|
static_assert(offsetof(CSession, m_loginAccountId) == 0x56E4);
|
|
static_assert(offsetof(CSession, m_passwordWndAccountId) == 0x56E8);
|
|
static_assert(offsetof(CSession, m_partyBookingLevelLimit) == 0x5BBC);
|
|
#endif
|
|
|
|
|
|
// INLINED
|
|
inline __declspec(noinline) void CSession::sub_DE4FF0() {
|
|
const float scaleX = static_cast<float>(g_renderer->viewport.width) / 1280.0f;
|
|
const float scaleY = static_cast<float>(g_renderer->viewport.height - 17) / 1024.0f;
|
|
|
|
for (int i = 0; i < this->m_mapPosListCount; ++i) {
|
|
for (std::pair<const std::string, MapPosEntry>& entry : this->m_mapPosLists[i]) {
|
|
entry.second.rect.left = static_cast<int>(static_cast<float>(entry.second.rect.left) * scaleX + 0.5);
|
|
entry.second.rect.top = static_cast<int>(static_cast<float>(entry.second.rect.top) * scaleY + 0.5) + 17;
|
|
entry.second.rect.right = static_cast<int>(static_cast<float>(entry.second.rect.right) * scaleX + 0.5);
|
|
entry.second.rect.bottom = static_cast<int>(static_cast<float>(entry.second.rect.bottom) * scaleY + 0.5) + 17;
|
|
}
|
|
}
|
|
|
|
for (std::pair<const int, MapPosEntry>& entry : this->m_mapPosBounds) {
|
|
entry.second.rect.left = static_cast<int>(static_cast<float>(entry.second.rect.left) * scaleX + 0.5);
|
|
entry.second.rect.top = static_cast<int>(static_cast<float>(entry.second.rect.top) * scaleY + 0.5) + 17;
|
|
entry.second.rect.right = static_cast<int>(static_cast<float>(entry.second.rect.right) * scaleX + 0.5);
|
|
entry.second.rect.bottom = static_cast<int>(static_cast<float>(entry.second.rect.bottom) * scaleY + 0.5) + 17;
|
|
}
|
|
}
|
|
|
|
#endif
|