rodecomp/Source/Contents/RuneSystem/RuneSystem.cpp
ragnarok-clanker 0f561a5dca Maintenance: Source reorganisation, parts 2+3: Source/UI, Client, Render, Resource, Utility, Network, Archive, Interface and loose So
Batch #16644 by ragnarok-clanker: no function's compiled code changes; checked with 593 compiled unit(s), including every includer of Source/Client/Application/Registry.h, Source/Client/Application/RegistryKey.h, Source/Client/Application/Timer.h, Source/Client/Mode/ModeFade.h, Source/Client/Mode/ModeFadeOut.h, Source/Client/Mode/ModeScreenshot.h, Source/Client/Replay/Replay.h, Source/Client/Replay/ReplayRecordOption.h, Source/Client/Session/Session.h, Source/Contents/Actors/ActorPickNode.h, Source/Contents/Effects/Core/RagEffectState.h, Source/Contents/Effects/Particles/Particle.h, Source/Contents/Movies/BinkMovie.h, Source/Contents/Sprites/SpriteLayerDrawing.h, Source/File/NFileLog.h, Source/Network/NIPAddr.h, Source/Network/Packets/ActorNamePacket.h, Source/Network/Packets/ClientKeepalive.h, Source/Network/Packets/ClientOptionPacket.h, Source/Network/Packets/ExecutableDigestPacket.h, Source/Network/Packets/GameTickPacket.h, Source/Render/DX7/QueuedDrawingDX7.h, Source/Render/DX7/RendererDX7.h, Source/Render/DX9/RenderSystemDX9.h, Source/Render/Device/DeviceSelection.h, Source/Render/Device/Direct3DErrors.h, Source/Render/Device/DisplayMode.h, Source/Render/Device/RenderAdapter.h, Source/Render/Device/RenderBackends.h, Source/Render/Drawing/ActionSpriteDrawing.h, Source/Render/Drawing/BitmapDrawing.h, Source/Render/Drawing/BlendColor.h, Source/Render/Drawing/SpriteGeometry.h, Source/Render/Drawing/TextureStageModes.h, Source/Render/Primitives/AuxiliarySubmission.h, Source/Render/Primitives/SpriteQuad.h, Source/Render/Primitives/TextureQuad.h, Source/Render/Projection/ScreenGeometry.h, Source/Render/Projection/ScreenRectangle.h, Source/Resource/Audio/BinkRuntime.h, Source/Resource/Bitmap/EmblemResource.h, Source/Resource/Bitmap/GifLzw.h, Source/Resource/Bitmap/GifResource.h, Source/Resource/Bitmap/PaletteResource.h, Source/Resource/Bitmap/SkinPalette.h, Source/Resource/Bitmap/TextureNames.h, Source/Resource/Effects/EZeffectResource.h, Source/Resource/Json/JsonCppLoader.h, Source/Resource/Models/RmaResource.h, Source/Resource/Sprites/ImfResource.h, Source/Resource/Xml/XmlNode.h, Source/Security/FileSignatureVerifier.h, Source/Security/ProcessSecurity.h, Source/UI/Achievement/UIAchWnd.h, Source/UI/AdventureGuide/UIAdventureGuide.h, Source/UI/Buttons/UIBalloonOpenBtn.h, Source/UI/Buttons/UIMiniBtnWnd.h, Source/UI/Buttons/UISlotBitmap.h, Source/UI/Buttons/UIStaticBitmap.h, Source/UI/Buttons/UIStaticItem.h, Source/UI/Buttons/UIWindowCallBtnWnd.h, Source/UI/CashEmotion/UICashEmotionSprBtn.h, Source/UI/CashShop/UIMileageWnd.h, Source/UI/CashShop/UIPayConfirmWnd.h, Source/UI/Chat/UIChatRoomWnd.h, Source/UI/Dialogs/UIAccountLimitedToolWnd.h, Source/UI/Dialogs/UICntWnd.h, Source/UI/Dialogs/UILoadingWnd.h, Source/UI/Dialogs/UIMessageBox.h, Source/UI/Dialogs/UIMessageBoxAutoreturn.h, Source/UI/Dialogs/UINormalMB.h, Source/UI/Dialogs/UINoteWnd.h, Source/UI/Dialogs/UINoticeWnd.h, Source/UI/Dialogs/UIRPImageWnd.h, Source/UI/Dialogs/UIRPImageWnd2.h, Source/UI/Dialogs/UITalkboxTrapInputWnd.h, Source/UI/Dialogs/UITransMenuWnd.h, Source/UI/Dialogs/UIVideoWnd.h, Source/UI/Dialogs/UIWordDisplayWnd.h, Source/UI/Edit/UIItemTagCtrl.h, Source/UI/Enchant/EnchantUI.h, Source/UI/Events/UICheckAttendanceWnd.h, Source/UI/Events/UIOpenRoulletteWnd.h, Source/UI/Events/UIRoulletteWnd.h, Source/UI/Exchange/UIExchangeUI.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/GameSettings/UIBattleMsgOptionWnd.h, Source/UI/GameSettings/UIEscOptionWnd.h, Source/UI/GameSettings/UIHotKeyWnd.h, Source/UI/GameSettings/UIHotkeyGuideWnd.h, Source/UI/GameSettings/UIViewCameraInfoWnd.h, Source/UI/Gauges/UIBarGraph.h, Source/UI/Guild/UIEmblemWnd.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Items/UIChangeMaterialWnd.h, Source/UI/Items/UICollectionSystemWnd.h, Source/UI/Items/UIEquipmentPropertiesWnd.h, Source/UI/Items/UIGradeEnchantWnd.h, Source/UI/Items/UIIngredientInfoWnd.h, Source/UI/Items/UIItemBaseWnd.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemMoveInfo.h, Source/UI/Items/UIItemPurchaseWnd.h, Source/UI/Items/UIItemReformWnd.h, Source/UI/Items/UIItemSellWnd.h, Source/UI/Items/UIItemSellWnd2.h, Source/UI/Items/UIItemShopWnd.h, Source/UI/Items/UIItemShopWnd2.h, Source/UI/Items/UIItemStoreComboBox.h, Source/UI/Items/UIItemStoreFindWnd.h, Source/UI/Items/UIItemStoreSubWnd.h, Source/UI/Items/UIItemStoreWnd.h, Source/UI/Items/UIItemWnd.h, Source/UI/Items/UILapineScrollBar.h, Source/UI/Items/UILapineUpgradeBoxWnd.h, Source/UI/Items/UIMerchantItemLogWnd.h, Source/UI/Items/UIParaItemShopWnd.h, Source/UI/Items/UIPreviewEquipWnd.h, Source/UI/Items/UIRefiningWnd.h, Source/UI/Items/UISecondCostumeWnd.h, Source/UI/Items/UISelectCartWnd.h, Source/UI/Lists/UIComboBoxEx.h, Source/UI/Lists/UIScrollBarVariants.h, Source/UI/Lists/UIScrollWnd.h, Source/UI/Lists/UITagListBox.h, Source/UI/Login/FuncDrawWNDChar.h, Source/UI/Login/UIChangeNameWnd.h, Source/UI/Login/UIDescriptRace.h, Source/UI/Login/UIEmailAddressWnd.h, Source/UI/Login/UILoginOTPWnd.h, Source/UI/Login/UILoginWnd.h, Source/UI/Login/UIMakeCharWnd.h, Source/UI/Login/UINewMakeCharWnd.h, Source/UI/Login/UINewSelectCharWnd.h, Source/UI/Login/UIPasswordWnd.h, Source/UI/Login/UISecondPasswordEditWnd.h, Source/UI/Login/UISelCharForUServerWnd.h, Source/UI/Login/UISelectServerWnd.h, Source/UI/Login/UIWaitDBSaveWnd.h, Source/UI/Macro/UICaptchaPreviewWnd.h, Source/UI/Macro/UICaptchaRegisterWnd.h, Source/UI/Macro/UIMacroBlackListCheckWnd.h, Source/UI/Macro/UIMacroDetectorWnd.h, Source/UI/Macro/UIMacroReport.h, Source/UI/Macro/UIMacroUserInfoWnd.h, Source/UI/Monster/UIMonsterDisplayWnd.h, Source/UI/Monster/UIMonsterInfoWnd.h, Source/UI/Navigation/NavigationLink.h, Source/UI/Navigation/UIChooseWarpWnd.h, Source/UI/Navigation/UIListBoxNavi.h, Source/UI/Navigation/UIListBoxNaviSearch.h, Source/UI/Navigation/UIMemorialDunWnd.h, Source/UI/Navigation/UIMiniMapWnd.h, Source/UI/Navigation/UIMinimapZoomWnd.h, Source/UI/Navigation/UINavigationHelpWnd.h, Source/UI/Navigation/UINavigationWnd.h, Source/UI/Navigation/UIRoMapWnd.h, Source/UI/Navigation/UIScrollBarNavi.h, Source/UI/Navigation/UIShowWarpWnd.h, Source/UI/Party/MiniPartyGrid.h, Source/UI/Party/MiniPartyPlacement.h, Source/UI/Party/MiniPartyWndAreaMgr.h, Source/UI/Party/UIJobSlotButton.h, Source/UI/Party/UIPartyBookingHelpWnd.h, Source/UI/Party/UISeekPartyListWnd.h, Source/UI/Party/UISeekPartyMBWnd.h, Source/UI/Party/UISeekPartyWnd.h, Source/UI/ProbabilityTable/UIProbabilityTable.h, Source/UI/Quest/UINotifyQuestWnd.h, Source/UI/Quest/UIOngoingQuestInfo.h, Source/UI/Quest/UIRecommendedQuestInfo.h, Source/UI/Quest/UIRenewQuestUI.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Replay/UIReplayButton.h, Source/UI/Replay/UIReplayControlWnd.h, Source/UI/Replay/UIReplayListBox.h, Source/UI/Replay/UIReplayRECControlWnd.h, Source/UI/Replay/UISelectReplayDataWnd.h, Source/UI/Repute/UIReputeWnd.h, Source/UI/Rodex/UIOpenMailBoxWnd.h, Source/UI/Rodex/UIRodexContentsWnd.h, Source/UI/Rodex/UIRodexInboxWnd.h, Source/UI/RuneSystem/UIRuneSystemWindows.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/SelectPackageItemBox/SelectPackageItemBox.h, Source/UI/SelectPackageItemBox/UIPackageBoxNameList.h, Source/UI/Shop/PriceCommission.h, Source/UI/Shop/UIBank_NewWnd.h, Source/UI/Shop/UIBartermarketWnd.h, Source/UI/Shop/UIMerchantItemMyShopWnd.h, Source/UI/Shop/UIMerchantItemPurchaseWnd.h, Source/UI/Shop/UIMerchantItemShopWnd.h, Source/UI/Shop/UIMerchantItemWnd.h, Source/UI/Shop/UIMerchantMirrorItemWnd.h, Source/UI/Shop/UISerachStoreInfoWnd.h, Source/UI/Shop/UInCash_CallWnd.h, Source/UI/Skill/UIDebuffRemoveWnd.h, Source/UI/Skill/UIGraffiStrboxWnd.h, Source/UI/Skill/UINewSkillListWnd.h, Source/UI/SkillDelayInfo/SkillDelayInfo.h, Source/UI/Status/UIBasicInfoWnd.h, Source/UI/Status/UIHomunInfoWnd.h, Source/UI/Status/UIJobListWnd.h, Source/UI/Status/UIMerInfoWnd.h, Source/UI/Status/UIPetEvolutionWnd.h, Source/UI/Status/UIPetInfoWnd.h, Source/UI/Status/UIPetTamingDeceiveWnd.h, Source/UI/Status/UIRebirthWnd.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/TextTags.h, Source/UI/Text/UIBroadcastBalloon.h, Source/UI/Text/UIRoundBoxTooltipWnd.h, Source/UI/Window/FrameSkin.h, Source/UI/Window/UIBasicCtrl.h, Source/UI/Window/UIControl.h, Source/UI/Window/UIWindowMgr.inl, Source/Utility/Cipher/EncryptedName.h, Source/Utility/Hash/CRC32.h, Source/Utility/Hash/GGHash.h, Source/Utility/Hash/GGHashMgr.h, Source/Utility/Hash/Md5State.h, Source/Utility/Hash/SHA3.h, Source/Utility/Hash/XxHash3.h, Source/Utility/Text/GuidParse.h, Source/Utility/Text/Tokenizer.h, Source/Utility/Zlib.h, Source/ActorPickNode.h, Source/Client/ModeFade.h, Source/Client/ModeFadeOut.h, Source/Client/ModeScreenshot.h, Source/Client/Registry.h, Source/Client/Replay.h, Source/Client/ReplayRecordOption.h, Source/Client/Session.h, Source/Client/Timer.h, Source/Network/ActorNamePacket.h, Source/Network/ClientKeepalive.h, Source/Network/ClientOptionPacket.h, Source/Network/ExecutableDigestPacket.h, Source/Network/GameTickPacket.h, Source/Render/ActionSpriteDrawing.h, Source/Render/AuxiliarySubmission.h, Source/Render/BitmapDrawing.h, Source/Render/BlendColor.h, Source/Render/DeviceSelection.h, Source/Render/Direct3DErrors.h, Source/Render/DisplayMode.h, Source/Render/RenderAdapter.h, Source/Render/RenderBackends.h, Source/Render/RendererDX7.h, Source/Render/ScreenGeometry.h, Source/Render/ScreenRectangle.h, Source/Render/SpriteGeometry.h, Source/Render/SpriteQuad.h, Source/Render/TextureQuad.h, Source/Render/TextureStageModes.h, Source/Resource/BinkRuntime.h, Source/Resource/EZeffectResource.h, Source/Resource/EmblemResource.h, Source/Resource/GifLzw.h, Source/Resource/GifResource.h, Source/Resource/ImfResource.h, Source/Resource/PaletteResource.h, Source/Resource/RmaResource.h, Source/Resource/SkinPalette.h, Source/Resource/TextureNames.h, Source/Resource/XmlNode.h, Source/UI/Buttons/UICashEmotionSprBtn.h, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemMoveInfo.h, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UIReplayButton.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIPetTamingDeceiveWnd.h, Source/UI/Dialogs/UISecondPasswordEditWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UIWaitDBSaveWnd.h, Source/UI/FrameSkin.h, Source/UI/Item/UIEquipmentPropertiesWnd.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemPurchaseWnd.h, Source/UI/Item/UIItemSellWnd.h, Source/UI/Item/UIItemSellWnd2.h, Source/UI/Item/UIItemShopWnd.h, Source/UI/Item/UIItemShopWnd2.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Item/UIItemWnd.h, Source/UI/Item/UIMerchantItemLogWnd.h, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Lists/UIItemStoreComboBox.h, Source/UI/Lists/UIListBoxNavi.h, Source/UI/Lists/UIListBoxNaviSearch.h, Source/UI/Lists/UIPackageBoxNameList.h, Source/UI/Lists/UIReplayListBox.h, Source/UI/Lists/UIScrollBarNavi.h, Source/UI/MiniPartyGrid.h, Source/UI/MiniPartyPlacement.h, Source/UI/PriceCommission.h, Source/UI/Text/NavigationLink.h, Source/UI/Text/UIAchWnd.h, Source/UI/TextTags.h, Source/UI/UIBarGraph.h, Source/UI/UIBartermarketWnd.h, Source/UI/UIBasicCtrl.h, Source/UI/UIBroadcastBalloon.h, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.h, Source/UI/UIGradeEnchantWnd.h, Source/UI/UIHotkeyGuideWnd.h, Source/UI/UIIngredientInfoWnd.h, Source/UI/UIItemReformWnd.h, Source/UI/UILapineScrollBar.h, Source/UI/UILapineUpgradeBoxWnd.h, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroReport.h, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.h, Source/UI/UIScrollWnd.h, Source/UI/UISlotBitmap.h, Source/UI/UIStaticBitmap.h, Source/UI/UIStaticItem.h, Source/UI/Window/FuncDrawWNDChar.h, Source/UI/Window/MiniPartyWndAreaMgr.h, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBank_NewWnd.h, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChangeNameWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICntWnd.h, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIEmblemWnd.h, Source/UI/Window/UIEscOptionWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMessageBoxAutoreturn.h, Source/UI/Window/UIMileageWnd.h, Source/UI/Window/UIMiniBtnWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoteWnd.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIOpenMailBoxWnd.h, Source/UI/Window/UIOpenRoulletteWnd.h, Source/UI/Window/UIPartyBookingHelpWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetEvolutionWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRPImageWnd.h, Source/UI/Window/UIRPImageWnd2.h, Source/UI/Window/UIRebirthWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UIRoulletteWnd.h, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelCharForUServerWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIVideoWnd.h, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindowCallBtnWnd.h, Source/UI/Window/UIWordDisplayWnd.h, Source/Utility/CRC32.h, Source/Utility/Compression/Zlib.h, Source/Utility/EncryptedName.h, Source/Utility/FileSignatureVerifier.h, Source/Utility/GGHash.h, Source/Utility/GGHashMgr.h, Source/Utility/GuidParse.h, Source/Utility/JsonCppLoader.h, Source/Utility/Md5State.h, Source/Utility/NFileLog.h, Source/Utility/NIPAddr.h, Source/Utility/ProcessSecurity.h, Source/Utility/RegistryKey.h, Source/Utility/SHA3.h, Source/Utility/Tokenizer.h, Source/Utility/XxHash3.h.
Adds to the build: Source/Client/Application/ClientOptions.cpp, Source/Client/Application/Registry.cpp, Source/Client/Application/RegistryKey.cpp, Source/Client/Application/Timer.cpp, Source/Client/Mode/EntityInit.cpp, Source/Client/Mode/ModeBaseEvents.cpp, Source/Client/Mode/ModeCursorDrawing.cpp, Source/Client/Mode/ModeFade.cpp, Source/Client/Mode/ModeFadeOut.cpp, Source/Client/Mode/ModeScreenshot.cpp, Source/Client/Mode/ModeTransitions.cpp, Source/Client/Replay/Replay.cpp, Source/Client/Replay/ReplayControl.cpp, Source/Client/Replay/ReplayPacketRecorder.cpp, Source/Client/Session/Session.cpp, Source/Client/Session/SessionAchievements.cpp, Source/Client/Session/SessionParty.cpp, Source/Client/Session/SessionPredicates.cpp, Source/Client/Session/SessionState.cpp, Source/Contents/Actors/ActorPickNode.cpp, Source/File/NFileLog.cpp, Source/Network/NIPAddr.cpp, Source/Network/Packets/ActorNamePacket.cpp, Source/Network/Packets/ClientKeepalive.cpp, Source/Network/Packets/ClientOptionPacket.cpp, Source/Network/Packets/ExecutableDigestPacket.cpp, Source/Network/Packets/GameTickPacket.cpp, Source/Render/DX7/AlphaQueuesDX7.cpp, Source/Render/DX7/AuxiliaryQueuesDX7.cpp, Source/Render/DX7/OpaqueQueuesDX7.cpp, Source/Render/DX7/RendererDX7.cpp, Source/Render/DX9/DeviceCapabilitiesDX9.cpp, Source/Render/Device/DeviceSelection.cpp, Source/Render/Device/Direct3DErrors.cpp, Source/Render/Device/DisplayMode.cpp, Source/Render/Device/RenderAdapter.cpp, Source/Render/Device/RenderBackends.cpp, Source/Render/Drawing/ActionSpriteDrawing.cpp, Source/Render/Drawing/BitmapDrawing.cpp, Source/Render/Drawing/BlendColor.cpp, Source/Render/Drawing/SpriteGeometry.cpp, Source/Render/Primitives/AlphaRectangle.cpp, Source/Render/Primitives/AuxiliarySubmission.cpp, Source/Render/Primitives/SpriteQuad.cpp, Source/Render/Primitives/TextureQuad.cpp, Source/Render/Primitives/UIRPDataDrawing.cpp, Source/Render/Projection/ScreenGeometry.cpp, Source/Render/Projection/ScreenRectangle.cpp, Source/Render/Projection/ViewportProjection.cpp, Source/Resource/Bitmap/EmblemResource.cpp, Source/Resource/Bitmap/GifLzw.cpp, Source/Resource/Bitmap/GifResource.cpp, Source/Resource/Bitmap/PaletteResource.cpp, Source/Resource/Bitmap/SkinPalette.cpp, Source/Resource/Bitmap/TextureNames.cpp, Source/Resource/Effects/EZeffectResource.cpp, Source/Resource/Json/JsonCppLoader.cpp, Source/Resource/Models/RmaResource.cpp, Source/Resource/Sprites/ImfLayerIndex.cpp, Source/Resource/Sprites/ImfResource.cpp, Source/Resource/Xml/XmlNode.cpp, Source/Resource/Xml/XmlParsing.cpp, Source/Security/FileSignatureVerifier.cpp, Source/Security/ProcessSecurity.cpp, Source/Security/UnknownA68.cpp, Source/UI/Achievement/UIAchWnd.cpp, Source/UI/Buttons/UIBalloonOpenBtn.cpp, Source/UI/Buttons/UIMiniBtnWnd.cpp, Source/UI/Buttons/UISlotBitmap.cpp, Source/UI/Buttons/UIStaticBitmap.cpp, Source/UI/Buttons/UIStaticItem.cpp, Source/UI/CashShop/UIMileageWnd.cpp, Source/UI/Chat/UIZeroChatWnd.cpp, Source/UI/Dialogs/UIAccountLimitedToolWnd.cpp, Source/UI/Dialogs/UILocaleTextWnd.cpp, Source/UI/Dialogs/UIMessageBox.cpp, Source/UI/Dialogs/UINormalMB.cpp, Source/UI/Dialogs/UINoteWnd.cpp, Source/UI/Dialogs/UINoticeWnd.cpp, Source/UI/Dialogs/UIRPImageWnd.cpp, Source/UI/Dialogs/UIRPImageWnd2.cpp, Source/UI/Dialogs/UITransMenuWnd.cpp, Source/UI/Dialogs/UIVideoWnd.cpp, Source/UI/Dialogs/UIWordDisplayWnd.cpp, Source/UI/Events/UICheckAttendanceWnd.cpp, Source/UI/Events/UIOpenRoulletteWnd.cpp, Source/UI/Events/UIRoulletteWnd.cpp, Source/UI/GameSettings/UIBattleMsgOptionWnd.cpp, Source/UI/GameSettings/UIEscOptionWnd.cpp, Source/UI/GameSettings/UIHotKeyWnd.cpp, Source/UI/GameSettings/UIHotkeyGuideWnd.cpp, Source/UI/GameSettings/UIViewCameraInfoWnd.cpp, Source/UI/Gauges/UIBarGraph.cpp, Source/UI/Guild/UIEmblemWnd.cpp, Source/UI/Items/UIChangeMaterialWnd.cpp, Source/UI/Items/UICollectionSystemWnd.cpp, Source/UI/Items/UIEquipmentPropertiesWnd.cpp, Source/UI/Items/UIGradeEnchantWnd.cpp, Source/UI/Items/UIItemMoveInfo.cpp, Source/UI/Items/UIItemReformWnd.cpp, Source/UI/Items/UIItemStoreComboBox.cpp, Source/UI/Items/UIItemStoreWnd.cpp, Source/UI/Items/UILapineBoxWnd.cpp, Source/UI/Items/UILapineScrollBar.cpp, Source/UI/Items/UILapineUpgradeBoxWnd.cpp, Source/UI/Items/UIMerchantItemLogWnd.cpp, Source/UI/Items/UIParaItemShopWnd.cpp, Source/UI/Items/UIPreviewEquipWnd.cpp, Source/UI/Items/UIRefiningWnd.cpp, Source/UI/Items/UISecondCostumeWnd.cpp, Source/UI/Lists/UIScrollWnd.cpp, Source/UI/Login/FuncDrawWNDChar.cpp, Source/UI/Login/UIChangeNameWnd.cpp, Source/UI/Login/UIDescriptRace.cpp, Source/UI/Login/UIEmailAddressWnd.cpp, Source/UI/Login/UILoginWnd.cpp, Source/UI/Login/UINewMakeCharWnd.cpp, Source/UI/Login/UINewSelectCharWnd.cpp, Source/UI/Login/UIPasswordWnd.cpp, Source/UI/Login/UISelCharForUServerWnd.cpp, Source/UI/Login/UIWaitDBSaveWnd.cpp, Source/UI/Macro/UICaptchaPreviewWnd.cpp, Source/UI/Macro/UICaptchaRegisterWnd.cpp, Source/UI/Macro/UIMacroBlackListCheckWnd.cpp, Source/UI/Macro/UIMacroDetectorWnd.cpp, Source/UI/Macro/UIMacroReport.cpp, Source/UI/Macro/UIMacroUserInfoWnd.cpp, Source/UI/Navigation/NavigationLink.cpp, Source/UI/Navigation/UIListBoxNavi.cpp, Source/UI/Navigation/UIMinimapZoomWnd.cpp, Source/UI/Navigation/UINavigationHelpWnd.cpp, Source/UI/Navigation/UINavigationWnd.cpp, Source/UI/Navigation/UIRoMapWnd.cpp, Source/UI/Navigation/UIScrollBarNavi.cpp, Source/UI/Navigation/UIShowWarpWnd.cpp, Source/UI/Party/MiniPartyGrid.cpp, Source/UI/Party/MiniPartyManager.cpp, Source/UI/Party/MiniPartyPlacement.cpp, Source/UI/Party/MiniPartyUsableArea.cpp, Source/UI/Party/UIJobSlotButton.cpp, Source/UI/Party/UIPartyBookingHelpWnd.cpp, Source/UI/Party/UISeekPartyListWnd.cpp, Source/UI/Party/UISeekPartyMBWnd.cpp, Source/UI/Party/UISeekPartyWnd.cpp, Source/UI/Repute/UIReputeWnd.cpp, Source/UI/Rodex/UIOpenMailBoxWnd.cpp, Source/UI/Rodex/UIRodexContentsWnd.cpp, Source/UI/SelectPackageItemBox/UIPackageBoxNameList.cpp, Source/UI/Shop/PriceCommission.cpp, Source/UI/Shop/UIBartermarketWnd.cpp, Source/UI/Shop/UISerachStoreInfoWnd.cpp, Source/UI/Skill/UIDebuffRemoveWnd.cpp, Source/UI/Skill/UIGraffiStrboxWnd.cpp, Source/UI/Skill/UINewSkillListWnd.cpp, Source/UI/Skill/UINewSkillListWndHitTest.cpp, Source/UI/Status/UIBasicInfoWnd.cpp, Source/UI/Status/UIJobListWnd.cpp, Source/UI/Status/UIPetEvolutionWnd.cpp, Source/UI/Status/UIRebirthWnd.cpp, Source/UI/Text/TextTagExtraction.cpp, Source/UI/Text/TextTagRegistry.cpp, Source/UI/Text/UIBroadcastBalloon.cpp, Source/UI/Text/UIRoundBoxTooltipWnd.cpp, Source/UI/Window/FrameSkin.cpp, Source/UI/Window/UIBasicCtrl.cpp, Source/UI/Window/WindowBackground.cpp, Source/UI/Window/WindowLowerBorder.cpp, Source/UI/Window/WindowOverlay.cpp, Source/UI/Window/WindowSprite.cpp, Source/UI/Window/WindowTitlebar.cpp, Source/Utility/BoolStubs.cpp, Source/Utility/Hash/CRC32.cpp, Source/Utility/Hash/GGHash.cpp, Source/Utility/Hash/GGHashMgr.cpp, Source/Utility/Hash/Md5State.cpp, Source/Utility/Hash/SHA3.cpp, Source/Utility/Hash/XxHash3.cpp, Source/Utility/Lexicon/LexiconTrie.cpp, Source/Utility/Text/GuidParse.cpp, Source/Utility/Text/Tokenizer.cpp
Deletes: Source/ActorPickNode.cpp, Source/ActorPickNode.h, Source/Archive/UnknownA68.cpp, Source/Client/ClientOptions.cpp, Source/Client/ModeBaseEvents.cpp, Source/Client/ModeCursorDrawing.cpp, Source/Client/ModeFade.cpp, Source/Client/ModeFade.h, Source/Client/ModeFadeOut.cpp, Source/Client/ModeFadeOut.h, Source/Client/ModeScreenshot.cpp, Source/Client/ModeScreenshot.h, Source/Client/ModeTransitions.cpp, Source/Client/Registry.cpp, Source/Client/Registry.h, Source/Client/Replay.cpp, Source/Client/Replay.h, Source/Client/ReplayControl.cpp, Source/Client/ReplayPacketRecorder.cpp, Source/Client/ReplayRecordOption.h, Source/Client/Session.cpp, Source/Client/Session.h, Source/Client/SessionAchievements.cpp, Source/Client/SessionParty.cpp, Source/Client/SessionPredicates.cpp, Source/Client/SessionState.cpp, Source/Client/Timer.cpp, Source/Client/Timer.h, Source/EntityInit.cpp, Source/Interface/BoolStubs.cpp, Source/LexiconTrie.cpp, Source/Network/ActorNamePacket.cpp, Source/Network/ActorNamePacket.h, Source/Network/ClientKeepalive.cpp, Source/Network/ClientKeepalive.h, Source/Network/ClientOptionPacket.cpp, Source/Network/ClientOptionPacket.h, Source/Network/ExecutableDigestPacket.cpp, Source/Network/ExecutableDigestPacket.h, Source/Network/GameTickPacket.cpp, Source/Network/GameTickPacket.h, Source/Render/ActionSpriteDrawing.cpp, Source/Render/ActionSpriteDrawing.h, Source/Render/AlphaQueuesDX7.cpp, Source/Render/AlphaRectangle.cpp, Source/Render/AuxiliaryQueuesDX7.cpp, Source/Render/AuxiliarySubmission.cpp, Source/Render/AuxiliarySubmission.h, Source/Render/BitmapDrawing.cpp, Source/Render/BitmapDrawing.h, Source/Render/BlendColor.cpp, Source/Render/BlendColor.h, Source/Render/DeviceCapabilitiesDX9.cpp, Source/Render/DeviceSelection.cpp, Source/Render/DeviceSelection.h, Source/Render/Direct3DErrors.cpp, Source/Render/Direct3DErrors.h, Source/Render/DisplayMode.cpp, Source/Render/DisplayMode.h, Source/Render/OpaqueQueuesDX7.cpp, Source/Render/RenderAdapter.cpp, Source/Render/RenderAdapter.h, Source/Render/RenderBackends.cpp, Source/Render/RenderBackends.h, Source/Render/RendererDX7.cpp, Source/Render/RendererDX7.h, Source/Render/ScreenGeometry.cpp, Source/Render/ScreenGeometry.h, Source/Render/ScreenRectangle.cpp, Source/Render/ScreenRectangle.h, Source/Render/SpriteGeometry.cpp, Source/Render/SpriteGeometry.h, Source/Render/SpriteQuad.cpp, Source/Render/SpriteQuad.h, Source/Render/TextureQuad.cpp, Source/Render/TextureQuad.h, Source/Render/TextureStageModes.h, Source/Render/UIRPDataDrawing.cpp, Source/Render/ViewportProjection.cpp, Source/Resource/BinkRuntime.h, Source/Resource/EZeffectResource.cpp, Source/Resource/EZeffectResource.h, Source/Resource/EmblemResource.cpp, Source/Resource/EmblemResource.h, Source/Resource/GifLzw.cpp, Source/Resource/GifLzw.h, Source/Resource/GifResource.cpp, Source/Resource/GifResource.h, Source/Resource/ImfLayerIndex.cpp, Source/Resource/ImfResource.cpp, Source/Resource/ImfResource.h, Source/Resource/PaletteResource.cpp, Source/Resource/PaletteResource.h, Source/Resource/RmaResource.cpp, Source/Resource/RmaResource.h, Source/Resource/SkinPalette.cpp, Source/Resource/SkinPalette.h, Source/Resource/TextureNames.cpp, Source/Resource/TextureNames.h, Source/Resource/XmlNode.cpp, Source/Resource/XmlNode.h, Source/Resource/XmlParsing.cpp, Source/UI/Buttons/UICashEmotionSprBtn.h, Source/UI/Buttons/UIDescriptRace.cpp, Source/UI/Buttons/UIDescriptRace.h, Source/UI/Buttons/UIItemMoveInfo.cpp, Source/UI/Buttons/UIItemMoveInfo.h, Source/UI/Buttons/UIJobSlotButton.cpp, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UIReplayButton.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.cpp, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.cpp, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UIMinimapZoomWnd.cpp, Source/UI/Dialogs/UIMinimapZoomWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UIPasswordWnd.cpp, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIPetTamingDeceiveWnd.h, Source/UI/Dialogs/UISecondPasswordEditWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UIWaitDBSaveWnd.cpp, Source/UI/Dialogs/UIWaitDBSaveWnd.h, Source/UI/FrameSkin.cpp, Source/UI/FrameSkin.h, Source/UI/Item/UIEquipmentPropertiesWnd.cpp, Source/UI/Item/UIEquipmentPropertiesWnd.h, Source/UI/Item/UIItemBaseWnd.h, Source/UI/Item/UIItemPurchaseWnd.h, Source/UI/Item/UIItemSellWnd.h, Source/UI/Item/UIItemSellWnd2.h, Source/UI/Item/UIItemShopWnd.h, Source/UI/Item/UIItemShopWnd2.h, Source/UI/Item/UIItemStoreFindWnd.h, Source/UI/Item/UIItemStoreSubWnd.h, Source/UI/Item/UIItemStoreWnd.cpp, Source/UI/Item/UIItemStoreWnd.h, Source/UI/Item/UIItemWnd.h, Source/UI/Item/UIMerchantItemLogWnd.cpp, Source/UI/Item/UIMerchantItemLogWnd.h, Source/UI/Item/UIParaItemShopWnd.cpp, Source/UI/Item/UIParaItemShopWnd.h, Source/UI/Lists/UIItemStoreComboBox.cpp, Source/UI/Lists/UIItemStoreComboBox.h, Source/UI/Lists/UIListBoxNavi.cpp, Source/UI/Lists/UIListBoxNavi.h, Source/UI/Lists/UIListBoxNaviSearch.h, Source/UI/Lists/UIPackageBoxNameList.cpp, Source/UI/Lists/UIPackageBoxNameList.h, Source/UI/Lists/UIReplayListBox.h, Source/UI/Lists/UIScrollBarNavi.cpp, Source/UI/Lists/UIScrollBarNavi.h, Source/UI/MiniPartyGrid.cpp, Source/UI/MiniPartyGrid.h, Source/UI/MiniPartyManager.cpp, Source/UI/MiniPartyPlacement.cpp, Source/UI/MiniPartyPlacement.h, Source/UI/MiniPartyUsableArea.cpp, Source/UI/PriceCommission.cpp, Source/UI/PriceCommission.h, Source/UI/Text/NavigationLink.cpp, Source/UI/Text/NavigationLink.h, Source/UI/Text/UIAchWnd.cpp, Source/UI/Text/UIAchWnd.h, Source/UI/TextTagExtraction.cpp, Source/UI/TextTagRegistry.cpp, Source/UI/TextTags.h, Source/UI/UIBarGraph.cpp, Source/UI/UIBarGraph.h, Source/UI/UIBartermarketWnd.cpp, Source/UI/UIBartermarketWnd.h, Source/UI/UIBasicCtrl.cpp, Source/UI/UIBasicCtrl.h, Source/UI/UIBroadcastBalloon.cpp, Source/UI/UIBroadcastBalloon.h, Source/UI/UICaptchaPreviewWnd.cpp, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.cpp, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.cpp, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.cpp, Source/UI/UICheckAttendanceWnd.h, Source/UI/UIGradeEnchantWnd.cpp, Source/UI/UIGradeEnchantWnd.h, Source/UI/UIHotkeyGuideWnd.cpp, Source/UI/UIHotkeyGuideWnd.h, Source/UI/UIIngredientInfoWnd.h, Source/UI/UIItemReformWnd.cpp, Source/UI/UIItemReformWnd.h, Source/UI/UILapineBoxWnd.cpp, Source/UI/UILapineScrollBar.cpp, Source/UI/UILapineScrollBar.h, Source/UI/UILapineUpgradeBoxWnd.cpp, Source/UI/UILapineUpgradeBoxWnd.h, Source/UI/UIMacroBlackListCheckWnd.cpp, Source/UI/UIMacroBlackListCheckWnd.h, Source/UI/UIMacroDetectorWnd.cpp, Source/UI/UIMacroDetectorWnd.h, Source/UI/UIMacroReport.cpp, Source/UI/UIMacroReport.h, Source/UI/UIMacroUserInfoWnd.cpp, Source/UI/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.cpp, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.cpp, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.cpp, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.cpp, Source/UI/UIRoundBoxTooltipWnd.h, Source/UI/UIScrollWnd.cpp, Source/UI/UIScrollWnd.h, Source/UI/UISlotBitmap.cpp, Source/UI/UISlotBitmap.h, Source/UI/UIStaticBitmap.cpp, Source/UI/UIStaticBitmap.h, Source/UI/UIStaticItem.cpp, Source/UI/UIStaticItem.h, Source/UI/Window/FuncDrawWNDChar.cpp, Source/UI/Window/FuncDrawWNDChar.h, Source/UI/Window/MiniPartyWndAreaMgr.h, Source/UI/Window/UIAccountLimitedToolWnd.cpp, Source/UI/Window/UIAccountLimitedToolWnd.h, Source/UI/Window/UIBalloonOpenBtn.cpp, Source/UI/Window/UIBalloonOpenBtn.h, Source/UI/Window/UIBank_NewWnd.h, Source/UI/Window/UIBasicInfoWnd.cpp, Source/UI/Window/UIBasicInfoWnd.h, Source/UI/Window/UIBattleMsgOptionWnd.cpp, Source/UI/Window/UIBattleMsgOptionWnd.h, Source/UI/Window/UIChangeNameWnd.cpp, Source/UI/Window/UIChangeNameWnd.h, Source/UI/Window/UIChatRoomWnd.h, Source/UI/Window/UICntWnd.h, Source/UI/Window/UICollectionSystemWnd.cpp, Source/UI/Window/UICollectionSystemWnd.h, Source/UI/Window/UIDebuffRemoveWnd.cpp, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIEmblemWnd.cpp, Source/UI/Window/UIEmblemWnd.h, Source/UI/Window/UIEscOptionWnd.cpp, Source/UI/Window/UIEscOptionWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.cpp, Source/UI/Window/UIHotKeyWnd.h, Source/UI/Window/UIJobListWnd.cpp, Source/UI/Window/UIJobListWnd.h, Source/UI/Window/UILocaleTextWnd.cpp, Source/UI/Window/UILoginOTPWnd.h, Source/UI/Window/UILoginWnd.cpp, Source/UI/Window/UILoginWnd.h, Source/UI/Window/UIMakeCharWnd.h, Source/UI/Window/UIMerInfoWnd.h, Source/UI/Window/UIMessageBox.cpp, Source/UI/Window/UIMessageBox.h, Source/UI/Window/UIMessageBoxAutoreturn.h, Source/UI/Window/UIMileageWnd.cpp, Source/UI/Window/UIMileageWnd.h, Source/UI/Window/UIMiniBtnWnd.cpp, Source/UI/Window/UIMiniBtnWnd.h, Source/UI/Window/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINavigationHelpWnd.cpp, Source/UI/Window/UINavigationHelpWnd.h, Source/UI/Window/UINavigationWnd.cpp, Source/UI/Window/UINavigationWnd.h, Source/UI/Window/UINewMakeCharWnd.cpp, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINewSelectCharWnd.cpp, Source/UI/Window/UINewSelectCharWnd.h, Source/UI/Window/UINewSkillListWnd.cpp, Source/UI/Window/UINewSkillListWnd.h, Source/UI/Window/UINewSkillListWndHitTest.cpp, Source/UI/Window/UINormalMB.cpp, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoteWnd.cpp, Source/UI/Window/UINoteWnd.h, Source/UI/Window/UINoticeWnd.cpp, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIOpenMailBoxWnd.cpp, Source/UI/Window/UIOpenMailBoxWnd.h, Source/UI/Window/UIOpenRoulletteWnd.cpp, Source/UI/Window/UIOpenRoulletteWnd.h, Source/UI/Window/UIPartyBookingHelpWnd.cpp, Source/UI/Window/UIPartyBookingHelpWnd.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetEvolutionWnd.cpp, Source/UI/Window/UIPetEvolutionWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIRPImageWnd.cpp, Source/UI/Window/UIRPImageWnd.h, Source/UI/Window/UIRPImageWnd2.cpp, Source/UI/Window/UIRPImageWnd2.h, Source/UI/Window/UIRebirthWnd.cpp, Source/UI/Window/UIRebirthWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIRoMapWnd.cpp, Source/UI/Window/UIRoMapWnd.h, Source/UI/Window/UIRodexContentsWnd.cpp, Source/UI/Window/UIRodexContentsWnd.h, Source/UI/Window/UIRoulletteWnd.cpp, Source/UI/Window/UIRoulletteWnd.h, Source/UI/Window/UISecondCostumeWnd.cpp, Source/UI/Window/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyListWnd.cpp, Source/UI/Window/UISeekPartyListWnd.h, Source/UI/Window/UISeekPartyMBWnd.cpp, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISeekPartyWnd.cpp, Source/UI/Window/UISeekPartyWnd.h, Source/UI/Window/UISelCharForUServerWnd.cpp, Source/UI/Window/UISelCharForUServerWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UISerachStoreInfoWnd.cpp, Source/UI/Window/UISerachStoreInfoWnd.h, Source/UI/Window/UIShowWarpWnd.cpp, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.cpp, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIVideoWnd.cpp, Source/UI/Window/UIVideoWnd.h, Source/UI/Window/UIViewCameraInfoWnd.cpp, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindowCallBtnWnd.h, Source/UI/Window/UIWordDisplayWnd.cpp, Source/UI/Window/UIWordDisplayWnd.h, Source/UI/Window/UIZeroChatWnd.cpp, Source/UI/WindowBackground.cpp, Source/UI/WindowLowerBorder.cpp, Source/UI/WindowOverlay.cpp, Source/UI/WindowSprite.cpp, Source/UI/WindowTitlebar.cpp, Source/Utility/CRC32.cpp, Source/Utility/CRC32.h, Source/Utility/Compression/Zlib.h, Source/Utility/EncryptedName.h, Source/Utility/FileSignatureVerifier.cpp, Source/Utility/FileSignatureVerifier.h, Source/Utility/GGHash.cpp, Source/Utility/GGHash.h, Source/Utility/GGHashMgr.cpp, Source/Utility/GGHashMgr.h, Source/Utility/GuidParse.cpp, Source/Utility/GuidParse.h, Source/Utility/JsonCppLoader.cpp, Source/Utility/JsonCppLoader.h, Source/Utility/Md5State.cpp, Source/Utility/Md5State.h, Source/Utility/NFileLog.cpp, Source/Utility/NFileLog.h, Source/Utility/NIPAddr.cpp, Source/Utility/NIPAddr.h, Source/Utility/ProcessSecurity.cpp, Source/Utility/ProcessSecurity.h, Source/Utility/RegistryKey.cpp, Source/Utility/RegistryKey.h, Source/Utility/SHA3.cpp, Source/Utility/SHA3.h, Source/Utility/Tokenizer.cpp, Source/Utility/Tokenizer.h, Source/Utility/XxHash3.cpp, Source/Utility/XxHash3.h
2026-11-11 01:05:24 +00:00

1415 lines
40 KiB
C++

#include "Contents/RuneSystem/RuneSystem.h"
#include "Client/Application/ApplicationWindow.h"
#include "Client/Session/Session.h"
#include "Contents/Items/ItemInfo.h"
#include "Network/Connection/Connection.h"
#include "Network/Packets/PacketLengths.h"
#include "Script/LuaFileOperations.h"
#include "Script/LuaScript.h"
#include "Script/NLuaState.h"
#include "Utility/Text/FormatString.h"
extern "C" {
#include <lauxlib.h>
#include <lua.h>
#include <lualib.h>
}
#include <algorithm>
#include <format>
#include <new>
#include <string>
#include <windows.h>
namespace EquipmentProperties {
class CEquipmentPropertiesMgr {
public:
static CEquipmentPropertiesMgr* GetInstance();
void RemoveExpansion(const int& kind, const int& itemId);
void AddExpansion(const int& kind, const int& itemId, bool notify);
};
}
// GLOBAL: gl_24845
CRuneSystemMgr* g_runeSystemMgr;
namespace {
struct RuneTagPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
};
struct RuneItemPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
/* 0004 */ int runeId;
};
struct RuneSelectPacket {
/* 0000 */ std::uint16_t id;
/* 0002 */ std::uint16_t tagId;
/* 0004 */ int runeId;
/* 0008 */ std::uint8_t value;
};
struct RuneIdPacket {
/* 0000 */ std::uint16_t id;
/* 0004 */ int runeId;
};
struct RuneHeaderPacket {
/* 0000 */ std::uint16_t id;
};
}
// OFFSET: 0x00764C30
// FUNCTION: fn_08098
CRuneSystemMgr::CRuneSystemMgr() : m_emptyItem(), m_requestPending(false), m_selectTag(0), m_curRuneSet(nullptr), m_curSlotCount(0) {
this->m_initialized = true;
}
// OFFSET: 0x00764DE0
// FUNCTION: fn_08099
RuneData::RuneData() : m_kind(1), m_active(false), m_id(0), m_name("NoName"), m_resName("NoData"), m_tagId(0), m_activeType(1) {
}
// OFFSET: 0x007657D0
// FUNCTION: fn_08104
CRuneSystemMgr::~CRuneSystemMgr() {
for (std::vector<CTagData*>::iterator it = this->m_tags.begin(); it != this->m_tags.end(); ++it) {
if (*it) {
delete *it;
}
*it = nullptr;
}
this->m_tags.clear();
}
// OFFSET: 0x007659C0
// FUNCTION: fn_08105
Decom_ItemInfo::~Decom_ItemInfo() {
}
// OFFSET: 0x00765B10
// FUNCTION: fn_08106
bool RuneData::IsSame(const RuneData& other) const {
return this->m_id == other.m_id && this->m_tagId == other.m_tagId;
}
// OFFSET: 0x007660C0
// FUNCTION: fn_08112
void CRuneSystemMgr::AddRune(int tagId, int type, std::int64_t id, const std::string& resName, int activeType) {
CTagData* tag = this->GetTag(tagId);
if (!tag) {
return;
}
RuneData* rune;
if (type == 1) {
rune = new RuneData();
} else {
rune = new RuneSetData();
}
rune->m_id = id;
rune->m_tagId = tagId;
rune->m_resName = resName;
rune->m_activeType = activeType;
tag->m_runes[type].push_back(rune);
}
// OFFSET: 0x00766920
// FUNCTION: fn_08113
void CTagData::UpdateActiveCount(int type) {
this->m_activeCount[type] = 0;
for (std::vector<RuneData*>::iterator it = this->m_runes[type].begin(); this->m_runes[type].end() != it; ++it) {
if (*it) {
this->m_activeCount[type] += (*it)->IsActive();
}
}
}
// OFFSET: 0x00766970
// FUNCTION: fn_08114
bool CRuneSystemMgr::Create() {
if (g_runeSystemMgr) {
return false;
}
g_runeSystemMgr = new (std::nothrow) CRuneSystemMgr();
if (!g_runeSystemMgr) {
return false;
}
if (!g_runeSystemMgr->m_initialized) {
delete g_runeSystemMgr;
g_runeSystemMgr = nullptr;
return false;
}
return true;
}
// OFFSET: 0x00766A10
// FUNCTION: fn_08115
void CRuneSystemMgr::Destroy() {
if (g_runeSystemMgr) {
delete g_runeSystemMgr;
g_runeSystemMgr = nullptr;
}
}
// OFFSET: 0x00766A30
// FUNCTION: fn_08116
int RuneSetData::FindLastReward(int count) const {
if (count <= 7) {
for (int step = count - 1; step > 0; --step) {
if (0 != this->m_reward.values[step]) {
return step;
}
}
}
return -1;
}
// OFFSET: 0x00766A70
// FUNCTION: fn_08117
int CRuneSystemMgr::GetTagCount() const {
return static_cast<int>(this->m_tags.size());
}
// OFFSET: 0x00766A80
// FUNCTION: fn_08118
int CRuneSystemMgr::GetOwnedDecomItemCount() const {
return static_cast<int>(this->m_ownedDecomItems.size());
}
// OFFSET: 0x00766B10
// FUNCTION: fn_08119
bool CRuneSystemMgr::IsInitialized() const {
return this->m_initialized;
}
// OFFSET: 0x00766B20
// FUNCTION: fn_08120
CTagData* CRuneSystemMgr::GetTag(int tagId) {
if (tagId == -1) {
tagId = this->m_selectTag;
}
if (tagId > 0) {
for (CTagData* tag : this->m_tags) {
if (tagId == tag->m_id) {
return tag;
}
}
}
return nullptr;
}
// OFFSET: 0x00766B60
// FUNCTION: fn_08121
CTagData* CRuneSystemMgr::GetTagByIndex(int index) {
if (index < 0 || this->m_tags.size() <= index) {
return nullptr;
}
return this->m_tags[index];
}
// OFFSET: 0x00766B90
// FUNCTION: fn_08122
int RuneSetData::CountSlots() const {
int count = 0;
for (RuneData* rune : this->m_slots) {
if (rune) {
++count;
}
}
return count;
}
// OFFSET: 0x00766C70
// FUNCTION: fn_08123
int RuneSetData::CountActiveSlots() const {
int count = 0;
for (RuneData* rune : this->m_slots) {
if (rune) {
count += rune->IsActive();
}
}
return count;
}
// OFFSET: 0x00766CA0
// FUNCTION: fn_08124
const char* RuneData::GetName() const {
return this->m_name.c_str();
}
// OFFSET: 0x00766CB0
// FUNCTION: fn_08125
int CRuneSystemMgr::GetDecomItem(unsigned int index) const {
if (this->m_decomItems.size() <= index) {
return 0;
}
return this->m_decomItems[index];
}
// OFFSET: 0x00766CE0
// FUNCTION: fn_08126
int CRuneSystemMgr::GetOwnedDecomItem(unsigned int index) const {
if (this->m_ownedDecomItems.size() <= index) {
return 0;
}
return this->m_ownedDecomItems[index];
}
// OFFSET: 0x00766DB0
// FUNCTION: fn_08127
RuneSetData* CRuneSystemMgr::GetCurRuneSet() const {
return this->m_curRuneSet;
}
// OFFSET: 0x00766DC0
// FUNCTION: fn_08128
int CRuneSystemMgr::GetCurSlotCount() const {
return this->m_curSlotCount;
}
// OFFSET: 0x00766DD0
// FUNCTION: fn_08129
int CRuneSystemMgr::GetGradeFailValue(RuneSetData* runeSet) {
if (runeSet) {
const auto found = this->m_gradeFailTypes.find(runeSet->m_gradeFailType);
if (this->m_gradeFailTypes.end() != found && found->second.size() > static_cast<unsigned int>(runeSet->m_grade)) {
return found->second[runeSet->m_grade];
}
}
return 0;
}
// OFFSET: 0x00766E40
// FUNCTION: fn_08130
std::int64_t RuneData::GetId() const {
return this->m_id;
}
// OFFSET: 0x00766E50
// FUNCTION: fn_08131
bool RuneData::IsActive() const {
return this->m_active != 0;
}
// OFFSET: 0x00766E60
// FUNCTION: fn_08132
const std::pair<int, int>& CRuneSystemMgr::GetItemListEntry(int listId, unsigned int index) {
const auto found = this->m_itemLists.find(listId);
if (this->m_itemLists.end() == found || index >= found->second.size()) {
return this->m_emptyItem;
}
return found->second[index];
}
// OFFSET: 0x00766EB0
// FUNCTION: fn_08133
int CRuneSystemMgr::GetItemListCount(int listId) {
const auto found = this->m_itemLists.find(listId);
if (this->m_itemLists.end() != found) {
return static_cast<int>(found->second.size());
}
return 0;
}
// OFFSET: 0x00766F00
// FUNCTION: fn_08134
RuneData* CRuneSystemMgr::GetCurrentRune(int type, int index) {
CTagData* tag = this->GetTag(-1);
if (!tag || index < 0) {
return nullptr;
}
if (static_cast<unsigned int>(index) < tag->m_runes[type].size()) {
return tag->m_runes[type][index];
}
return nullptr;
}
// OFFSET: 0x00766F60
// FUNCTION: fn_08135
int CTagData::GetRuneCount(int type) const {
return static_cast<int>(this->m_runes[type].size());
}
// OFFSET: 0x00766F80
// FUNCTION: fn_08136
int CRuneSystemMgr::GetGradeValue(RuneSetData* runeSet) {
if (runeSet) {
const auto found = this->m_gradeTypes.find(runeSet->m_gradeType);
if (found != this->m_gradeTypes.end()) {
const unsigned int grade = runeSet->m_grade;
if (found->second.size() > grade) {
int failValue = 0;
const auto fail = this->m_gradeFailTypes.find(runeSet->m_gradeFailType);
if (fail != this->m_gradeFailTypes.end() && fail->second.size() > grade) {
failValue = fail->second[grade];
}
return runeSet->m_gradeLevel * failValue + found->second[grade];
}
}
}
return 0;
}
// OFFSET: 0x00767070
// FUNCTION: fn_08137
RuneData* CRuneSystemMgr::FindRune(int tagId, int type, std::int64_t id, unsigned int* index) {
CTagData* tag = this->GetTag(tagId);
if (!tag) {
return nullptr;
}
return tag->FindRune(type, id, index);
}
// OFFSET: 0x007670C0
// FUNCTION: fn_08138
RuneData* CTagData::FindRune(int type, std::int64_t id, unsigned int* index) {
if (type == 0 || type == 1) {
const unsigned int count = static_cast<unsigned int>(this->m_runes[type].size());
for (unsigned int i = 0; i < count; ++i) {
if (this->m_runes[type][i] && id == this->m_runes[type][i]->m_id) {
if (index) {
*index = i;
}
return this->m_runes[type][i];
}
}
}
return nullptr;
}
// OFFSET: 0x00767130
// FUNCTION: fn_08139
int CRuneSystemMgr::GetSelectTag() const {
return this->m_selectTag;
}
// OFFSET: 0x00767140
// FUNCTION: fn_08140
int RuneData::GetTagId() const {
return this->m_tagId;
}
// OFFSET: 0x00767150
// FUNCTION: fn_08141
int RuneData::GetActiveType() const {
return this->m_activeType;
}
// OFFSET: 0x00767160
// FUNCTION: fn_08142
int RuneSetData::GetGradeValue() const {
if (this->m_grade < 15) {
return this->m_gradeList[this->m_grade];
}
return 0;
}
// OFFSET: 0x00767180
// FUNCTION: fn_08143
std::vector<Decom_ItemInfo>* CRuneSystemMgr::GetDecomList(int itemId, int which) {
const auto decom = this->m_itemDecoms.find(itemId);
const std::pair<int, int>* types = this->m_itemDecoms.end() == decom ? nullptr : &decom->second;
if (!types) {
return nullptr;
}
const int typeId = which == 0 ? types->first : types->second;
const auto found = this->m_decomTypes.find(typeId);
return this->m_decomTypes.end() == found ? nullptr : &found->second;
}
// OFFSET: 0x00767230
// FUNCTION: fn_08144
bool CRuneSystemMgr::IsRequestPending() const {
return this->m_requestPending;
}
// OFFSET: 0x00767240
// FUNCTION: fn_08145
const char* RuneData::GetResName() const {
return this->m_resName.c_str();
}
// OFFSET: 0x00767250
// FUNCTION: fn_08146
bool CRuneSystemMgr::LoadScripts() {
NLuaState lua;
if (!lua.IsValid()) {
return false;
}
luaL_openlibs(lua.GetState());
lua_register(lua.GetState(), "Add_Decom_ItemNum", AddDecomItemNum);
lua_register(lua.GetState(), "AdditemDecomType", AddItemDecomType);
lua_register(lua.GetState(), "AdditemDecom", AddItemDecom);
lua_register(lua.GetState(), "AddGradeType_Fail", AddGradeTypeFail);
lua_register(lua.GetState(), "AddGradeType", AddGradeType);
lua_register(lua.GetState(), "AddItemListTable_Type", AddItemListTableType);
lua_register(lua.GetState(), "AddTag", AddTag);
lua_register(lua.GetState(), "SetRuneSysteminfo", SetRuneSystemInfo);
lua_register(lua.GetState(), "AddRune", AddRuneData);
lua_register(lua.GetState(), "SetRune_UpGradeTable", SetRuneUpGradeTable);
lua_register(lua.GetState(), "AddRune_SlotCollectionList", AddRuneSlotCollectionList);
lua_register(lua.GetState(), "AddRune_GradeList", AddRuneGradeList);
lua_register(lua.GetState(), "SetRune_DisplayName", SetRuneDisplayName);
lua_register(lua.GetState(), "AddRune_Description", AddRuneDescription);
lua_register(lua.GetState(), "AddRuneSetReward", AddRuneSetReward);
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runeSystem_table.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\runeSystem_table.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\itemDecom.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\itemDecom.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runesystemid.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\runesystemid.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\rune_info.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\collection_info.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\rune_desc.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\collection_desc.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runeset_info.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\rune_info.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runeset_desc.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\rune_desc.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runesystem_f.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\runesystem_f.lub", 0);
return false;
}
if (!LoadLuaResource(lua.GetState(), "System\\Rune\\runeset_reward.lub", 0) || lua_pcall(lua.GetState(), 0, 0, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "System\\Rune\\runeset_reward.lub", 0);
return false;
}
lua_getglobal(lua.GetState(), "main_rune");
if (lua_pcall(lua.GetState(), 0, 2, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "CRuneSystemMgr main_rune X", 0);
return false;
}
lua_getglobal(lua.GetState(), "main_runeset_reward");
if (lua_pcall(lua.GetState(), 0, 2, 0) != 0) {
MessageBoxA(nullptr, lua_tostring(lua.GetState(), -1), "CRuneSystemMgr main_runeset_reward X", 0);
return false;
}
if (!lua_isstring(lua.GetState(), -1)) {
MessageBoxA(nullptr, "second return value is not string...", "CRuneSystemMgr", 0);
return false;
}
if (!lua_toboolean(lua.GetState(), -2)) {
std::string message = std::string("error found :") + lua_tostring(lua.GetState(), -1);
MessageBoxA(nullptr, message.c_str(), "CRuneSystemMgr", 0);
return false;
}
std::sort(this->m_tags.begin(), this->m_tags.end(), [](const CTagData* left, const CTagData* right) { return left->m_id < right->m_id; });
this->LoadDefaultTag();
return true;
}
// OFFSET: 0x00767D20
// FUNCTION: fn_08147
void CRuneSystemMgr::Reset() {
this->LoadDefaultTag();
for (std::vector<CTagData*>::iterator tagIt = this->m_tags.begin(); tagIt != this->m_tags.end(); ++tagIt) {
CTagData* tag = *tagIt;
tag->m_locked = false;
for (int type = 0; type < 2; ++type) {
for (std::vector<RuneData*>::iterator runeIt = tag->m_runes[type].begin(); tag->m_runes[type].end() != runeIt; ++runeIt) {
if (*runeIt) {
(*runeIt)->m_active = false;
if (type == 0) {
RuneSetData* runeSet = dynamic_cast<RuneSetData*>(*runeIt);
runeSet->m_grade = 0;
runeSet->m_gradeLevel = 0;
runeSet->m_rewardStep = 0;
}
}
}
}
}
this->m_curRuneSet = nullptr;
}
// OFFSET: 0x00767E60
// FUNCTION: fn_08148
void CRuneSystemMgr::ClearCurRuneSet() {
this->m_curRuneSet = nullptr;
}
// OFFSET: 0x00767E70
// FUNCTION: fn_08149
void CRuneSystemMgr::LoadDefaultTag() {
if (!this->m_tags.empty()) {
this->m_selectTag = this->m_tags.front()->m_id;
}
LuaScript script;
script.Open();
if (script.Load("System\\Rune\\runesystemInfo", false, true)) {
int tagId = 0;
if (script.Call("GetDefultTag", ">d", &tagId) && !this->m_tags.empty()) {
if (this->GetTag(tagId)) {
this->m_selectTag = tagId;
} else {
this->m_selectTag = this->m_tags.front()->m_id;
}
}
}
script.Close();
}
// OFFSET: 0x00767FA0
// FUNCTION: fn_08150
bool RuneSetData::IsRewardStep(int step) const {
if (step == 0) {
return this->m_rewardStep == 0;
}
return this->m_rewardStep == this->FindLastReward(step + 1);
}
// OFFSET: 0x00767FF0
// FUNCTION: fn_08151
__declspec(noinline) bool CRuneSystemMgr::HasRequiredItems(int listId) {
const auto found = this->m_itemLists.find(listId);
if (this->m_itemLists.end() == found) {
return false;
}
for (std::vector<std::pair<int, int>>::iterator it = found->second.begin(); it != found->second.end(); ++it) {
const ITEM_INFO item = LookupClientItem(g_session.m_inventoryItems, it->first, 0);
if (it->second > item.quantity) {
return false;
}
}
return true;
}
// OFFSET: 0x00768240
// FUNCTION: fn_08152
int CRuneSystemMgr::SendRequest(int packetId, RuneData* rune, int value) {
if (this->m_requestPending) {
return 0;
}
switch (packetId) {
case 0x0C16: {
RuneSelectPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
packet.tagId = static_cast<std::uint16_t>(rune->m_tagId);
packet.runeId = static_cast<int>(rune->m_id);
packet.value = static_cast<std::uint8_t>(value);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
break;
}
case 0x0BCB: {
CTagData* tag = this->GetTag(value);
if (!tag) {
return 4;
}
if (tag->m_locked) {
return 0;
}
RuneTagPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
packet.tagId = static_cast<std::uint16_t>(tag->m_id);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
break;
}
case 0x0BCE:
case 0x0BD0: {
if (!this->HasRequiredItems(rune->m_activeType)) {
return 0;
}
RuneItemPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
packet.tagId = static_cast<std::uint16_t>(rune->m_tagId);
packet.runeId = static_cast<int>(rune->m_id);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
this->m_requestPending = true;
break;
}
case 0x0BD2: {
if (!this->HasRequiredItems(static_cast<RuneSetData*>(rune)->GetGradeValue())) {
return 0;
}
RuneItemPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
packet.tagId = static_cast<std::uint16_t>(rune->m_tagId);
packet.runeId = static_cast<int>(rune->m_id);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
this->m_requestPending = true;
break;
}
case 0x0BD4: {
RuneHeaderPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
break;
}
case 0x0BD6: {
RuneIdPacket packet;
packet.id = static_cast<std::uint16_t>(packetId);
packet.runeId = static_cast<int>(rune->m_id);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packetId), &packet);
break;
}
}
return 1;
}
// OFFSET: 0x007684C0
// FUNCTION: fn_08153
int CRuneSystemMgr::UpdateOwnedDecomItems() {
this->m_ownedDecomItems.clear();
for (int i = 0; i < g_session.GetList0Size(); ++i) {
ITEM_INFO item = g_session.GetInventoryItemAt(i);
if (this->m_itemDecoms.find(std::atoi(item.itemId.c_str())) != this->m_itemDecoms.end()) {
this->m_ownedDecomItems.push_back(std::atoi(item.itemId.c_str()));
}
}
return static_cast<int>(this->m_ownedDecomItems.size());
}
// OFFSET: 0x00768780
// FUNCTION: fn_08154
void CRuneSystemMgr::SetCurSlotCount(const int& count) {
this->m_curSlotCount = count;
}
// OFFSET: 0x007687B0
// FUNCTION: fn_08155
void CRuneSystemMgr::SetCurRuneSet(int tagId, int runeSetId, int grade, int slotCount) {
int oldId = 0;
if (this->m_curRuneSet != nullptr) {
oldId = static_cast<int>(this->m_curRuneSet->m_id);
if (this->m_curRuneSet->m_id != runeSetId) {
EquipmentProperties::CEquipmentPropertiesMgr* mgr = EquipmentProperties::CEquipmentPropertiesMgr::GetInstance();
const int one = 1;
mgr->RemoveExpansion(one, oldId);
}
}
if (runeSetId == 0) {
this->m_curRuneSet = nullptr;
return;
}
RuneSetData* runeSet = static_cast<RuneSetData*>(this->FindRune(tagId, 0, runeSetId, nullptr));
this->m_curRuneSet = runeSet;
if (runeSet != nullptr) {
this->m_curSlotCount = runeSet->CountActiveSlots();
if (grade != -1) {
runeSet->m_grade = grade;
}
if (slotCount != -1) {
this->m_curSlotCount = slotCount;
}
if (oldId != runeSetId) {
EquipmentProperties::CEquipmentPropertiesMgr* mgr = EquipmentProperties::CEquipmentPropertiesMgr::GetInstance();
const int one = 1;
mgr->AddExpansion(one, runeSetId, false);
}
}
}
// OFFSET: 0x007688A0
// FUNCTION: fn_08156
void CRuneSystemMgr::SetSelectTag(int tagId) {
if (this->m_tags.empty()) {
return;
}
if (this->GetTag(tagId)) {
this->m_selectTag = tagId;
return;
}
this->m_selectTag = this->m_tags.front()->m_id;
}
// OFFSET: 0x00768920
// FUNCTION: fn_08159
void CRuneSystemMgr::SetRequestPending(bool pending) {
this->m_requestPending = pending;
}
// OFFSET: 0x00768960
// FUNCTION: fn_08160
int CRuneSystemMgr::SetRuneGrade(int tagId, int type, std::int64_t id, int grade, int gradeLevel) {
CTagData* tag = this->GetTag(tagId);
if (!tag) {
return -1;
}
RuneData* rune = tag->FindRune(type, id, nullptr);
if (!rune) {
return -1;
}
rune->m_active = true;
if (type == 0) {
RuneSetData* runeSet = static_cast<RuneSetData*>(rune);
const int oldGrade = runeSet->m_grade;
const int oldLevel = runeSet->m_gradeLevel;
runeSet->m_grade = grade;
runeSet->m_gradeLevel = gradeLevel;
if (oldGrade < grade) {
return 2;
}
if (oldLevel < gradeLevel) {
return 1;
}
}
return 0;
}
// OFFSET: 0x00768A00
// FUNCTION: fn_08161
bool CRuneSystemMgr::SetRewardStep(int tagId, std::int64_t id, int step) {
CTagData* tag = this->GetTag(tagId);
if (!tag) {
return false;
}
RuneSetData* runeSet = static_cast<RuneSetData*>(tag->FindRune(0, id, nullptr));
if (!runeSet) {
return false;
}
runeSet->m_rewardStep = step;
return true;
}
// OFFSET: 0x00769240
// FUNCTION: fn_08173
int AddGradeType(lua_State* state) {
const int gradeId = static_cast<int>(lua_tonumber(state, -3));
const double valueIndex = lua_tonumber(state, -2);
const double value = lua_tonumber(state, -1);
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable GradeID:%d", gradeId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable ValIndex:%d", static_cast<int>(valueIndex)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable GradeID:%d ValData %d", gradeId, static_cast<int>(value)).c_str());
return 2;
}
const int index = static_cast<int>(valueIndex) - 1;
std::map<int, std::vector<int>>& gradeTypes = g_runeSystemMgr->m_gradeTypes;
if (gradeTypes[gradeId].size() < 15) {
gradeTypes[gradeId].resize(15, 0);
}
if (index < 15) {
gradeTypes[gradeId][index] = static_cast<int>(value);
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x00769440
// FUNCTION: fn_08174
int AddGradeTypeFail(lua_State* state) {
const int gradeId = static_cast<int>(lua_tonumber(state, -3));
const double valueIndex = lua_tonumber(state, -2);
const double value = lua_tonumber(state, -1);
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable GradeID:%d", gradeId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable GradeID:%d", static_cast<int>(valueIndex)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable GradeID:%d ValData %d", gradeId, static_cast<int>(value)).c_str());
return 2;
}
const int index = static_cast<int>(valueIndex) - 1;
std::map<int, std::vector<int>>& gradeFailTypes = g_runeSystemMgr->m_gradeFailTypes;
if (gradeFailTypes[gradeId].size() < 15) {
gradeFailTypes[gradeId].resize(15, 0);
}
if (index < 15) {
gradeFailTypes[gradeId][index] = static_cast<int>(value);
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x00769640
// FUNCTION: fn_08175
int AddItemListTableType(lua_State* state) {
const int listId = static_cast<int>(lua_tonumber(state, -4));
const double listIndex = lua_tonumber(state, -3);
const double itemValue = lua_tonumber(state, -2);
const double countValue = lua_tonumber(state, -1);
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ListID:%d", listId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ListIndex:%d", static_cast<int>(listIndex)).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ListID:%d ItemID:%d", listId, static_cast<int>(itemValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ListID:%d Num%d", listId, static_cast<int>(countValue)).c_str());
return 2;
}
int itemId = static_cast<int>(itemValue);
int count = static_cast<int>(countValue);
g_runeSystemMgr->m_itemLists[listId].emplace_back(itemId, count);
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x007698F0
// FUNCTION: fn_08176
int AddRuneData(lua_State* state) {
const double tagValue = lua_tonumber(state, -5);
const double typeValue = lua_tonumber(state, -4);
const int runeSetId = static_cast<int>(lua_tonumber(state, -3));
const std::string resName(lua_tostring(state, -2));
const double activeType = lua_tonumber(state, -1);
if (!lua_isnumber(state, -5)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Tag:%d", static_cast<int>(tagValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneType:%d", static_cast<int>(typeValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d", runeSetId).c_str());
return 2;
}
if (!lua_isstring(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d ResName%s", runeSetId, resName.c_str()).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d ActiveType%d", runeSetId, static_cast<int>(activeType)).c_str());
return 2;
}
g_runeSystemMgr->AddRune(static_cast<int>(tagValue), static_cast<int>(typeValue) - 1, runeSetId, resName, static_cast<int>(activeType));
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x00769B80
// FUNCTION: fn_08177
int AddRuneSetReward(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -9));
const int runeSetId = static_cast<int>(lua_tonumber(state, -8));
if (!lua_isnumber(state, -9)) {
lua_pushboolean(state, 0);
lua_pushstring(state, std::format("TagID:{}", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -8)) {
lua_pushboolean(state, 0);
lua_pushstring(state, std::format("RuneSetID:{}", runeSetId).c_str());
return 2;
}
RuneData* rune = g_runeSystemMgr->FindRune(tagId, 0, runeSetId, nullptr);
RuneSetReward* reward = rune ? &static_cast<RuneSetData*>(rune)->m_reward : nullptr;
if (!reward) {
lua_pushboolean(state, 0);
lua_pushstring(state, std::format("ErrData TagID:{}RuneSetID:{}", tagId, runeSetId).c_str());
return 2;
}
reward->values[0] = 1;
for (int index = 0; index < 7; ++index) {
const int itemId = static_cast<int>(lua_tonumber(state, index - 7));
reward->values[index + 1] = itemId;
if (!lua_isnumber(state, index - 7)) {
lua_pushboolean(state, 0);
lua_pushstring(state, std::format("ErrData TagID:{} RuneSetID:{} itemID:{}", tagId, runeSetId, itemId).c_str());
return 2;
}
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x00769EE0
// FUNCTION: fn_08178
int AddRuneDescription(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -4));
const int runeSetId = static_cast<int>(lua_tonumber(state, -3));
const double indexValue = lua_tonumber(state, -2);
const std::string description(lua_tostring(state, -1));
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Description Tag:%d", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Description ID:%d", runeSetId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Description ID:%d itemID:%d", runeSetId, static_cast<int>(indexValue)).c_str());
return 2;
}
if (!lua_isstring(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Description ID:%d Description%s", runeSetId, description.c_str()).c_str());
return 2;
}
const std::string text = description;
RuneData* rune = g_runeSystemMgr->FindRune(tagId, 0, runeSetId, nullptr);
if (rune) {
const unsigned int index = static_cast<int>(indexValue) - 1;
if (index < 6) {
static_cast<RuneSetData*>(rune)->m_descriptions[index].push_back(text);
} else {
MessageBoxA(hWnd, FormatOwnedString("AddRune_Description 인댁스 오류 %d", index).c_str(), "LuaLoad", MB_OK);
}
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076A240
// FUNCTION: fn_08179
int AddRuneGradeList(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -4));
const int runeSetId = static_cast<int>(lua_tonumber(state, -3));
const double gradeValue = lua_tonumber(state, -2);
const double countValue = lua_tonumber(state, -1);
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("GradeList Tag:%d", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("GradeList ID:%d", runeSetId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("GradeList ID:%d itemID:%d", runeSetId, static_cast<int>(gradeValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("GradeList ID:%d itemNum:%d]", runeSetId, static_cast<int>(countValue)).c_str());
return 2;
}
RuneData* rune = g_runeSystemMgr->FindRune(tagId, 0, runeSetId, nullptr);
if (rune) {
const int grade = static_cast<int>(gradeValue) - 1;
if (grade < 15) {
static_cast<RuneSetData*>(rune)->m_gradeList[grade] = static_cast<int>(countValue);
}
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076A470
// FUNCTION: fn_08180
int AddRuneSlotCollectionList(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -3));
const double runeSetValue = lua_tonumber(state, -2);
const double runeValue = lua_tonumber(state, -1);
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SlotCollectionList Tag:%d", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SlotCollectionList ID:%d", static_cast<int>(runeSetValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SlotCollectionList ID:%d RuneID%d", static_cast<int>(runeSetValue), static_cast<int>(runeValue)).c_str());
return 2;
}
CTagData* tag = g_runeSystemMgr->GetTag(tagId);
if (tag) {
RuneData* runeSet = tag->FindRune(0, static_cast<int>(runeSetValue), nullptr);
if (runeSet) {
RuneData* rune = g_runeSystemMgr->FindRune(tagId, 1, static_cast<int>(runeValue), nullptr);
static_cast<RuneSetData*>(runeSet)->m_slots.push_back(rune);
}
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076A690
// FUNCTION: fn_08181
int AddTag(lua_State* state) {
const double tagValue = lua_tonumber(state, -2);
const std::string name(lua_tostring(state, -1));
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d", static_cast<int>(tagValue)).c_str());
return 2;
}
if (!lua_isstring(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d ResName%s", static_cast<int>(tagValue), name.c_str()).c_str());
return 2;
}
g_runeSystemMgr->m_tags.push_back(new CTagData(static_cast<int>(tagValue), name));
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076A940
// FUNCTION: fn_08182
int AddDecomItemNum(lua_State* state) {
const int itemId = static_cast<int>(lua_tonumber(state, -1));
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ItemID:%d persent:%d", itemId).c_str());
return 2;
}
g_runeSystemMgr->m_decomItems.push_back(itemId);
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076AA40
// FUNCTION: fn_08183
int AddItemDecom(lua_State* state) {
const int itemId = static_cast<int>(lua_tonumber(state, -3));
const double firstType = lua_tonumber(state, -2);
const double secondType = lua_tonumber(state, -1);
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable ItemID:%d", itemId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable ItemID:%d TypeID1 %d", itemId, static_cast<int>(firstType)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("gradetable ItemID:%d TypeID2 %d", itemId, static_cast<int>(secondType)).c_str());
return 2;
}
std::pair<int, int>& types = g_runeSystemMgr->m_itemDecoms[itemId];
types.first = static_cast<int>(firstType);
types.second = static_cast<int>(secondType);
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076AC70
// FUNCTION: fn_08184
int AddItemDecomType(lua_State* state) {
const double typeValue = lua_tonumber(state, -6);
const double subTypeValue = lua_tonumber(state, -5);
int itemId = static_cast<int>(lua_tonumber(state, -4));
int minCount = static_cast<int>(lua_tonumber(state, -3));
int maxCount = static_cast<int>(lua_tonumber(state, -2));
int percent = static_cast<int>(lua_tonumber(state, -1));
if (!lua_isnumber(state, -6)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("DecomTypeID:%d", static_cast<int>(typeValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -5)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("DecomTypeID:%d", static_cast<int>(subTypeValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ItemID:%d", itemId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ItemID:%d itemMin:%d", itemId, minCount).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ItemID:%d ItemMax:%d", itemId, maxCount).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("ItemID:%d persent:%d", itemId, percent).c_str());
return 2;
}
g_runeSystemMgr->m_decomTypes[static_cast<int>(typeValue)].emplace_back(itemId, minCount, maxCount, percent);
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076AFE0
// FUNCTION: fn_08185
int SetRuneDisplayName(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -4));
const double typeValue = lua_tonumber(state, -3) - 1.0;
const int runeId = static_cast<int>(lua_tonumber(state, -2));
const std::string name(lua_tostring(state, -1));
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SetRune_DisplayName Tag:%d", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SetRune_DisplayName Type:%d", static_cast<int>(typeValue)).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SetRune_DisplayName ID:%d", runeId).c_str());
return 2;
}
if (!lua_isstring(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("SetRune_DisplayName ID:%d ResName%s", runeId, name.c_str()).c_str());
return 2;
}
CTagData* tag = g_runeSystemMgr->GetTag(tagId);
if (tag) {
RuneData* rune = tag->FindRune(static_cast<int>(typeValue), runeId, nullptr);
if (rune) {
rune->m_name = name;
}
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076B280
// FUNCTION: fn_08186
int SetRuneUpGradeTable(lua_State* state) {
const int tagId = static_cast<int>(lua_tonumber(state, -4));
const int runeSetId = static_cast<int>(lua_tonumber(state, -3));
const double gradeType = lua_tonumber(state, -2);
const double gradeFailType = lua_tonumber(state, -1);
if (!lua_isnumber(state, -4)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("Tag:%d", tagId).c_str());
return 2;
}
if (!lua_isnumber(state, -3)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d", runeSetId).c_str());
return 2;
}
if (!lua_isnumber(state, -2)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d RuneGradeType%d", runeSetId, static_cast<int>(gradeType)).c_str());
return 2;
}
if (!lua_isnumber(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("RuneSetID:%d RuneGradeFailType%d", runeSetId, static_cast<int>(gradeFailType)).c_str());
return 2;
}
RuneData* rune = g_runeSystemMgr->FindRune(tagId, 0, runeSetId, nullptr);
if (rune) {
RuneSetData* runeSet = static_cast<RuneSetData*>(rune);
runeSet->m_gradeType = static_cast<int>(gradeType);
runeSet->m_gradeFailType = static_cast<int>(gradeFailType);
}
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}
// OFFSET: 0x0076B4B0
// FUNCTION: fn_08187
int SetRuneSystemInfo(lua_State* state) {
const double tagValue = lua_tonumber(state, -1);
if (!lua_isstring(state, -1)) {
lua_pushboolean(state, 0);
lua_pushstring(state, FormatOwnedString("defult Select Tag:%d", static_cast<int>(tagValue)).c_str());
return 2;
}
g_runeSystemMgr->SetSelectTag(static_cast<int>(tagValue));
lua_pushboolean(state, 1);
lua_pushstring(state, FormatOwnedString("good").c_str());
return 2;
}