Batch #16351 by ragnarok-clanker: no function's compiled code changes; checked with 784 compiled unit(s), including every includer of Source/Archive/GPak.h, Source/Client/Browser/BrowserCommandTarget.h, Source/Client/Browser/BrowserDocumentUI.h, Source/Client/Browser/BrowserInPlace.h, Source/Client/Browser/WebBrowser.h, Source/Client/Input/Language.h, Source/Client/Input/LanguageTC.h, Source/Client/Input/Mouse.h, Source/Client/Mode/CGameMode.h, Source/Client/Mode/CLoginMode.h, Source/Client/Replay.h, Source/Client/Session.h, Source/Client/Stove/StovePCSDK.h, Source/Contents/AchievementMgr.h, Source/Contents/Actors/CharacterRender.h, Source/Contents/Actors/EffectActors.h, Source/Contents/Actors/GameActor.h, Source/Contents/Actors/GndRiser.h, Source/Contents/Actors/GrannyGameActor.h, Source/Contents/Actors/MousePointer.h, Source/Contents/Actors/Npc.h, Source/Contents/Actors/Pc.h, Source/Contents/Actors/RenderObjectState.h, Source/Contents/Actors/Skill.h, Source/Contents/AdventureGuideMgr.h, Source/Contents/CashEmotionMgr.h, Source/Contents/ClanInfo.h, Source/Contents/Configuration/GameSettingsMgr.h, Source/Contents/EffectResourceSwitcher.h, Source/Contents/Effects/AcidifiedThrow.h, Source/Contents/Effects/ArrowEffect.h, Source/Contents/Effects/AxeBoomerang.h, Source/Contents/Effects/BlastForge.h, Source/Contents/Effects/CharacterParticleBundle.h, Source/Contents/Effects/DummyEffectLauncher.h, Source/Contents/Effects/EZ2STREffectEx.h, Source/Contents/Effects/Effect.h, Source/Contents/Effects/EffectActor.h, Source/Contents/Effects/EffectEmitter.h, Source/Contents/Effects/EffectPrimitiveState.h, Source/Contents/Effects/EffectTypes.h, Source/Contents/Effects/ElectricEffect.h, Source/Contents/Effects/EmitterEffect.h, Source/Contents/Effects/FortuneKissEffect.h, Source/Contents/Effects/MagicFloorEffect.h, Source/Contents/Effects/MandraAttackEffect.h, Source/Contents/Effects/MonsterSkillEffects.h, Source/Contents/Effects/MsgEffect.h, Source/Contents/Effects/Particle.h, Source/Contents/Effects/RagEffectState.h, Source/Contents/Effects/RichManKim.h, Source/Contents/Effects/SpriteParticle.h, Source/Contents/Effects/StarEffect.h, Source/Contents/Effects/WhirlwindEffect.h, Source/Contents/EnchantMgr.h, Source/Contents/FlyingShipRouteInfo.h, Source/Contents/Ground/GroundSpatial.h, Source/Contents/GuildInfo.h, Source/Contents/Hotkeys/InterfaceHotkey.h, Source/Contents/Items/ItemInfo.h, Source/Contents/Items/RuneSystem.h, Source/Contents/MapSkyMgr.h, Source/Contents/Models/ModelActor.h, Source/Contents/Movies/BinkMovie.h, Source/Contents/NavigationManager.h, Source/Contents/Party/PartyBookingMgr.h, Source/Contents/PetEvolutionMgr.h, Source/Contents/RenewQuestMgr.h, Source/Contents/RodexMailStore.h, Source/Contents/Schedule/Schedule.h, Source/Contents/Schedule/ShutDownSchedule.h, Source/Contents/SignBoard/SignBoard.h, Source/Contents/Skills/PlayerSkillBundle.h, Source/Contents/Sound/SoundMgr.h, Source/Contents/SpriteLayerDrawing.h, Source/Contents/Store/MCStoreInfoBackupAsyncWork.h, Source/Contents/UserData/AccountLinkedUserDataLoadAsyncWork.h, Source/Contents/UserData/NormalItemSlots.h, Source/Contents/WorldView/WorldViewData.h, Source/Network/Connection/Connection.h, Source/Render/DX7/DeviceOwnerDX7.h, Source/Render/DX7/DirectDrawEnumeration.h, Source/Render/DX9/DeviceOwnerDX9.h, Source/Render/Primitives/LightmappedPrimitive.h, Source/Render/Primitives/RenderPrimitive.h, Source/Render/Renderer.h, Source/Render/RendererDX7.h, Source/Render/Text/EmbedFont.h, Source/Render/Text/TextContext.h, Source/Render/Textures/Texture.h, Source/Resource/BinkRuntime.h, Source/Resource/GifResource.h, Source/Resource/Models/AnimatedModelResource.h, Source/Resource/Models/GrannyModelResource.h, Source/Resource/Models/ModelMesh.h, Source/Resource/ResourceMgr.h, Source/Resource/World/GroundResource.h, Source/Resource/World/WorldResource.h, Source/Security/NProtectGameGuardMgr.h, Source/Security/ReassemblyPacketMgr.h, Source/UI/Buttons/UIBmpRadioBtn.h, Source/UI/Buttons/UIBmpTextButton2.h, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemTagButton.h, Source/UI/Buttons/UITVTextButton.h, Source/UI/Buttons/UITextureButton.h, Source/UI/Chat/UINewChatWnd.h, Source/UI/Chat/UISubChatHisWnd.h, Source/UI/Dialogs/UILoadingWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIRestartWnd.h, Source/UI/Dialogs/UISayDialogWnd.h, Source/UI/Edit/UIEditCtrl.h, Source/UI/Enchant/EnchantUI.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Items/UIEquipWnd.h, Source/UI/Items/UIExchangeWnd.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemRepairWnd.h, Source/UI/Items/UISwapEquipmentWnd.h, Source/UI/Lists/TableBox.h, Source/UI/Lists/UIListBox.h, Source/UI/Lists/UIListBoxEx.h, Source/UI/Lists/UIListBoxID.h, Source/UI/Lists/UIListBoxTemplate.h, Source/UI/Lists/UITabControl.h, Source/UI/Lists/UITreeView.h, Source/UI/Lists/UIVScrollBar.h, Source/UI/Navigation/UINavigationV4Wnd.h, Source/UI/Navigation/UIPrivateAirplaneWnd.h, Source/UI/Party/UIAdvenPartyBoardWnd.h, Source/UI/Party/UIRequestJoinPartyWnd.h, Source/UI/ProbabilityTable/UIProbabilityTable.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Rodex/UIRodexComposeWnd.h, Source/UI/RuneSystem/UIRuneSystemWindows.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/Shop/UIMerchantItemMyShopWnd.h, Source/UI/Shop/UIMerchantShopMakeWnd.h, Source/UI/Shop/UIMerchantShopTitle.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/CreateLineInfo.h, Source/UI/Text/TextMarkup.h, Source/UI/Text/UIString.h, Source/UI/Text/UITextViewer.h, Source/UI/Text/UITransBalloonText.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroUserInfoWnd.h, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIControl.h, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIWindow.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/WindowId.h, Source/Utility/Async/NAsyncWork.h, Source/Utility/Async/NRecycleObjectPoolMgr.h, Source/Utility/JsonCppLoader.h, Source/Utility/Lexicon/LexiconSerializer.h, Source/Utility/NFileLog.h, Source/Utility/Threading/NThread.h.
207 lines
6 KiB
C++
207 lines
6 KiB
C++
#ifndef RAGNAROK_SOURCE_CONTENTS_ITEMS_RUNESYSTEM_H
|
|
#define RAGNAROK_SOURCE_CONTENTS_ITEMS_RUNESYSTEM_H
|
|
|
|
#include <cstdint>
|
|
#include <cstring>
|
|
#include <map>
|
|
#include <string>
|
|
#include <utility>
|
|
#include <vector>
|
|
|
|
struct lua_State;
|
|
|
|
// VTABLE: vt_00501
|
|
class Decom_ItemInfo {
|
|
public:
|
|
Decom_ItemInfo(int itemId, int minCount, int maxCount, int percent) : m_itemId(itemId), m_minCount(minCount), m_maxCount(maxCount), m_percent(percent) {
|
|
}
|
|
|
|
/* 0004 */ int m_itemId;
|
|
/* 0008 */ int m_minCount;
|
|
/* 000C */ int m_maxCount;
|
|
/* 0010 */ int m_percent;
|
|
|
|
virtual ~Decom_ItemInfo();
|
|
};
|
|
|
|
// VTABLE: vt_00499
|
|
class RuneData {
|
|
public:
|
|
/* 0008 */ int m_kind;
|
|
/* 000C */ std::uint8_t m_active;
|
|
/* 0010 */ std::int64_t m_id;
|
|
/* 0018 */ std::string m_name;
|
|
/* 0030 */ std::string m_resName;
|
|
/* 0048 */ int m_tagId;
|
|
/* 004C */ int m_activeType;
|
|
|
|
RuneData();
|
|
|
|
virtual ~RuneData() {
|
|
}
|
|
|
|
bool IsSame(const RuneData& other) const;
|
|
std::int64_t GetId() const;
|
|
bool IsActive() const;
|
|
const char* GetName() const;
|
|
const char* GetResName() const;
|
|
int GetTagId() const;
|
|
int GetActiveType() const;
|
|
};
|
|
|
|
#pragma pack(push, 1)
|
|
struct RuneSetReward {
|
|
/* 0000 */ std::int64_t values[7];
|
|
/* 0038 */ bool received;
|
|
};
|
|
#pragma pack(pop)
|
|
|
|
// VTABLE: vt_00500
|
|
class RuneSetData : public RuneData {
|
|
public:
|
|
/* 0050 */ std::vector<RuneData*> m_slots;
|
|
/* 005C */ std::vector<std::string> m_descriptions[6];
|
|
/* 00A4 */ int padding_00A4;
|
|
/* 00A8 */ int m_gradeList[15];
|
|
/* 00E4 */ int m_grade;
|
|
/* 00E8 */ int m_gradeLevel;
|
|
/* 00EC */ int m_gradeType;
|
|
/* 00F0 */ int m_gradeFailType;
|
|
/* 00F4 */ int m_rewardStep;
|
|
/* 00F8 */ RuneSetReward m_reward;
|
|
|
|
RuneSetData() : m_grade(0), m_gradeLevel(0), m_gradeType(0), m_gradeFailType(0), m_rewardStep(0) {
|
|
this->m_kind = 0;
|
|
std::memset(this->m_gradeList, 0, sizeof(this->m_gradeList));
|
|
std::memset(&this->m_reward, 0, sizeof(this->m_reward));
|
|
}
|
|
|
|
~RuneSetData() override {
|
|
}
|
|
|
|
int FindLastReward(int count) const;
|
|
int CountSlots() const;
|
|
int CountActiveSlots() const;
|
|
int GetGradeValue() const;
|
|
bool IsRewardStep(int step) const;
|
|
};
|
|
|
|
// VTABLE: vt_00502
|
|
class CTagData {
|
|
public:
|
|
/* 0004 */ int m_id;
|
|
/* 0008 */ std::string m_name;
|
|
/* 0020 */ bool m_locked;
|
|
/* 0024 */ int m_activeCount[2];
|
|
/* 002C */ std::vector<RuneData*> m_runes[2];
|
|
|
|
CTagData(int id, std::string name) {
|
|
this->m_id = id;
|
|
this->m_name = name;
|
|
this->m_locked = false;
|
|
this->m_activeCount[1] = 0;
|
|
this->m_activeCount[0] = 0;
|
|
}
|
|
|
|
virtual ~CTagData() {
|
|
for (int type = 0; type < 2; ++type) {
|
|
for (RuneData* rune : this->m_runes[type]) {
|
|
if (rune) {
|
|
delete rune;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void UpdateActiveCount(int type);
|
|
int GetRuneCount(int type) const;
|
|
RuneData* FindRune(int type, std::int64_t id, unsigned int* index);
|
|
};
|
|
|
|
// VTABLE: vt_00503
|
|
class CRuneSystemMgr {
|
|
public:
|
|
static bool Create();
|
|
static void Destroy();
|
|
|
|
/* 0004 */ std::pair<int, int> m_emptyItem;
|
|
/* 000C */ bool m_initialized;
|
|
/* 000D */ bool m_requestPending;
|
|
/* 0010 */ int m_selectTag;
|
|
/* 0014 */ RuneSetData* m_curRuneSet;
|
|
/* 0018 */ int m_curSlotCount;
|
|
/* 001C */ std::vector<CTagData*> m_tags;
|
|
/* 0028 */ std::map<int, std::vector<int>> m_gradeTypes;
|
|
/* 0030 */ std::map<int, std::vector<int>> m_gradeFailTypes;
|
|
/* 0038 */ std::map<int, std::vector<std::pair<int, int>>> m_itemLists;
|
|
/* 0040 */ std::vector<int> m_decomItems;
|
|
/* 004C */ std::map<int, std::vector<Decom_ItemInfo>> m_decomTypes;
|
|
/* 0054 */ std::map<int, std::pair<int, int>> m_itemDecoms;
|
|
/* 005C */ std::vector<int> m_ownedDecomItems;
|
|
|
|
CRuneSystemMgr();
|
|
|
|
virtual ~CRuneSystemMgr();
|
|
|
|
void AddRune(int tagId, int type, std::int64_t id, const std::string& resName, int activeType);
|
|
int GetTagCount() const;
|
|
int GetOwnedDecomItemCount() const;
|
|
bool IsInitialized() const;
|
|
CTagData* GetTag(int tagId);
|
|
CTagData* GetTagByIndex(int index);
|
|
int GetDecomItem(unsigned int index) const;
|
|
int GetOwnedDecomItem(unsigned int index) const;
|
|
RuneSetData* GetCurRuneSet() const;
|
|
int GetCurSlotCount() const;
|
|
int GetGradeFailValue(RuneSetData* runeSet);
|
|
const std::pair<int, int>& GetItemListEntry(int listId, unsigned int index);
|
|
int GetItemListCount(int listId);
|
|
RuneData* GetCurrentRune(int type, int index);
|
|
int GetGradeValue(RuneSetData* runeSet);
|
|
__declspec(noinline) RuneData* FindRune(int tagId, int type, std::int64_t id, unsigned int* index);
|
|
int GetSelectTag() const;
|
|
std::vector<Decom_ItemInfo>* GetDecomList(int itemId, int which);
|
|
bool IsRequestPending() const;
|
|
bool LoadScripts();
|
|
void Reset();
|
|
void ClearCurRuneSet();
|
|
void LoadDefaultTag();
|
|
__declspec(noinline) bool HasRequiredItems(int listId);
|
|
int SendRequest(int packetId, RuneData* rune, int value);
|
|
int UpdateOwnedDecomItems();
|
|
void SetCurRuneSet(int tagId, int runeSetId, int grade, int slotCount);
|
|
void SetCurSlotCount(const int& count);
|
|
__declspec(noinline) void SetSelectTag(int tagId);
|
|
void SetRequestPending(bool pending);
|
|
int SetRuneGrade(int tagId, int type, std::int64_t id, int grade, int gradeLevel);
|
|
bool SetRewardStep(int tagId, std::int64_t id, int step);
|
|
};
|
|
|
|
extern CRuneSystemMgr* g_runeSystemMgr;
|
|
|
|
int AddGradeType(lua_State* state);
|
|
int AddGradeTypeFail(lua_State* state);
|
|
int AddItemListTableType(lua_State* state);
|
|
int AddRuneData(lua_State* state);
|
|
int AddRuneSetReward(lua_State* state);
|
|
int AddRuneDescription(lua_State* state);
|
|
int AddRuneGradeList(lua_State* state);
|
|
int AddRuneSlotCollectionList(lua_State* state);
|
|
int AddTag(lua_State* state);
|
|
int AddDecomItemNum(lua_State* state);
|
|
int AddItemDecom(lua_State* state);
|
|
int AddItemDecomType(lua_State* state);
|
|
int SetRuneDisplayName(lua_State* state);
|
|
int SetRuneUpGradeTable(lua_State* state);
|
|
int SetRuneSystemInfo(lua_State* state);
|
|
|
|
#if defined(_WIN32) && !defined(_WIN64)
|
|
static_assert(sizeof(Decom_ItemInfo) == 0x14);
|
|
static_assert(sizeof(RuneData) == 0x50);
|
|
static_assert(sizeof(RuneSetReward) == 0x39);
|
|
static_assert(sizeof(RuneSetData) == 0x138);
|
|
static_assert(sizeof(CTagData) == 0x44);
|
|
static_assert(sizeof(CRuneSystemMgr) == 0x68);
|
|
#endif
|
|
|
|
#endif
|