rodecomp/Source/Contents/Items/RuneSystem.h
ragnarok-clanker 5ad8e0c58c Maintenance: Resubmission of 16340 over main 047268c0 (conflict in UICashEmotionPack::GetPriceText resolved keeping main's new body).
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.
2026-11-10 17:38:25 +00:00

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