rodecomp/Source/UI/Rodex/UIRodexInboxWnd.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

1214 lines
49 KiB
C++

#include "UI/Rodex/UIRodexInboxWnd.h"
#include "Client/Mode/ModeMessage.h"
#include "UI/Window/WindowId.h"
#include "UI/Window/UIEnums.h"
#include "Contents/Tables/MessageTable.h"
#include "Client/Mode/CGameMode.h"
#include "Client/Mode/ModeMgr.h"
#include "Network/Connection/Connection.h"
#include "Network/Packets/PacketId.h"
#include "Network/Packets/PacketLengths.h"
#include "Network/Packets/NoticeEnums.h"
#include "UI/Window/UIWindowMgr.h"
#include "Resource/Bitmap/BitmapResource.h"
#include "Resource/ResourceMgr.h"
#include "Resource/Bitmap/TextureNames.h"
#include "UI/Buttons/UIBasicButton.h"
#include "UI/Buttons/UIBitmapButton.h"
#include "UI/Buttons/UIBmpRadioBtn.h"
#include "UI/Buttons/UICheckBox.h"
#include "UI/Buttons/UIRadioBtn.h"
#include "UI/Buttons/UITextButton.h"
#include "UI/Navigation/NavigationLink.h"
#include "UI/Edit/UIEditCtrl.h"
#include "Contents/Map/MapSkyMgr.h"
#include "Utility/Text/FormatString.h"
#include "Resource/MSGSTRINGID.h"
#include <algorithm>
#include <cstring>
#include <list>
namespace {
#pragma pack(push, 1)
struct PACKET_CZ_OPEN_RODEXBOX {
std::int16_t packetType;
std::int64_t lastMailId0;
std::int64_t lastMailId2;
std::int64_t lastMailId1;
};
struct PACKET_CZ_REQ_REFRESH_RODEX {
std::int16_t packetType;
std::int64_t lastMailId0;
std::int64_t lastMailId2;
std::int64_t lastMailId1;
};
struct RodexMailRequestPacket {
std::int16_t id;
std::int64_t mailId;
std::uint8_t type;
};
struct PACKET_CZ_RODEX_RETURN {
std::int16_t packetType;
std::uint32_t mailId;
};
#pragma pack(pop)
}
// OFFSET: 0x00804D50
// FUNCTION: fn_10038
UIRodexInboxWnd::UIRodexInboxWnd()
: UIItemWnd(), mailTab(0), accountTab(0), returnTab(0), refreshButton(nullptr), writeButton(nullptr),
receiveButton(nullptr), deleteButton(nullptr), previousPageButton(nullptr), nextPageButton(nullptr), page(0), pageCount(0),
expired(0), searchEdit(nullptr), searchButton(0), searchTab(0), searchActive(0), searchResults(), mails0(), mails1(), mails2() {
std::memset(this->senderButtons, 0, sizeof(this->senderButtons));
std::memset(this->subjectButtons, 0, sizeof(this->subjectButtons));
std::memset(this->checks, 0, sizeof(this->checks));
std::memset(this->returnButtons, 0, sizeof(this->returnButtons));
g_rodexMailStore->isPageComplete = false;
PACKET_CZ_OPEN_RODEXBOX packet;
packet.packetType = ID_CZ_OPEN_ALL_RODEX;
packet.lastMailId0 = 0;
if (g_rodexMailStore->m_mails0.size() > 0) {
packet.lastMailId0 = g_rodexMailStore->m_mails0.rbegin()->first;
}
packet.lastMailId2 = 0;
if (g_rodexMailStore->m_mails2.size() > 0) {
packet.lastMailId2 = g_rodexMailStore->m_mails2.rbegin()->first;
}
packet.lastMailId1 = 0;
if (g_rodexMailStore->m_mails1.size() > 0) {
packet.lastMailId1 = g_rodexMailStore->m_mails1.rbegin()->first;
}
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packet.packetType), &packet);
}
// OFFSET: 0x00807640
// FUNCTION: fn_10049
void UIRodexInboxWnd::OnLBtnDown(int x, int y) {
if (y < 17) {
UIFrameWnd::OnLBtnDown(x, y);
}
}
// OFFSET: 0x00807660
// FUNCTION: fn_10050
void UIRodexInboxWnd::OnMouseHover(int, int) {}
// OFFSET: 0x00807670
// FUNCTION: fn_10051
void UIRodexInboxWnd::OnProcess() {}
// OFFSET: 0x00807680
// FUNCTION: fn_10052
void UIRodexInboxWnd::OnRBtnDown(int, int) {}
// OFFSET: 0x00805750
// FUNCTION: fn_10045
void UIRodexInboxWnd::DrawMailIcons(int row, unsigned char attachments, unsigned char read, unsigned char returned) {
const int y = row * 0x2C;
const char* status = returned == 1
? "유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_status_mail_returned.bmp"
: read != 0
? "유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_status_mail_read.bmp"
: "유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_status_mail_received.bmp";
this->DrawBitmap(0x24, y + 0x7C, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve(status))), true);
if ((attachments & 6) == 6) {
this->DrawBitmap(0xD8, y + 0x8B, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\shadow_item_on.bmp"))), true);
this->DrawBitmap(0xDB, y + 0x7F, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_zeny_n_item.bmp"))), true);
} else if ((attachments & 2) != 0) {
this->DrawBitmap(0xD8, y + 0x8B, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\shadow_item_on.bmp"))), true);
this->DrawBitmap(0xDB, y + 0x7F, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_zeny.bmp"))), true);
} else if ((attachments & 4) != 0) {
this->DrawBitmap(0xD8, y + 0x8B, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\shadow_item_on.bmp"))), true);
this->DrawBitmap(0xDB, y + 0x7F, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\icon_item.bmp"))), true);
}
}
// OFFSET: 0x008058B0
// FUNCTION: fn_10046
bool UIRodexInboxWnd::NeedsFrameRefresh() {
return true;
}
// OFFSET: 0x008058C0
// FUNCTION: fn_10047
void UIRodexInboxWnd::OnCreate(int width, int height) {
g_rodexMailStore->PurgeFlagged();
this->AddBaseButton();
this->AddCloseButton("", 0);
this->returnTab = new UIBmpRadioBtn();
this->returnTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_out.bmp", 0);
this->returnTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_over.bmp", 1);
this->returnTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_press.bmp", 2);
this->returnTab->SetLabel(LookupMessage(MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION));
{
const int textX = static_cast<int>(static_cast<float>(this->returnTab->geometry.width - this->TextWidth(LookupMessage(MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION), 0, 0, 12, 0, 0)) * g_depthAverageHalf);
const int textY = static_cast<int>(static_cast<float>(this->returnTab->geometry.height - this->TextHeight(LookupMessage(MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION), 0, 0, 12, 0, 0) - 3) * g_depthAverageHalf);
this->returnTab->AddText(0, 12, 0xCCB5AD, true, false, textX, textY);
this->returnTab->AddText(1, 12, 0x9C3E1F, true, false, textX, textY);
this->returnTab->AddText(2, 12, 0x9C3E1F, true, false, textX, textY);
}
this->returnTab->Move(0xCF, 0x46);
this->AddChild(this->returnTab);
this->returnTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->accountTab = new UIBmpRadioBtn();
this->accountTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_out.bmp", 0);
this->accountTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_over.bmp", 1);
this->accountTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_press.bmp", 2);
this->accountTab->SetLabel(LookupMessage(MSI_RODEX_TAB_SEARCH));
{
const int textX = static_cast<int>(static_cast<float>(this->accountTab->geometry.width - this->TextWidth(LookupMessage(MSI_RODEX_TAB_SEARCH), 0, 0, 12, 0, 0)) * g_depthAverageHalf);
const int textY = static_cast<int>(static_cast<float>(this->accountTab->geometry.height - this->TextHeight(LookupMessage(MSI_RODEX_TAB_SEARCH), 0, 0, 12, 0, 0) - 3) * g_depthAverageHalf);
this->accountTab->AddText(0, 12, 0xCCB5AD, true, false, textX, textY);
this->accountTab->AddText(1, 12, 0x9C3E1F, true, false, textX, textY);
this->accountTab->AddText(2, 12, 0x9C3E1F, true, false, textX, textY);
}
this->accountTab->Move(0x13, 0x46);
this->AddChild(this->accountTab);
this->accountTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->mailTab = new UIBmpRadioBtn();
this->mailTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_out.bmp", 0);
this->mailTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_over.bmp", 1);
this->mailTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_press.bmp", 2);
this->mailTab->SetLabel(LookupMessage(MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION));
{
const int textX = static_cast<int>(static_cast<float>(this->mailTab->geometry.width - this->TextWidth(LookupMessage(MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION), 0, 0, 12, 0, 0)) * g_depthAverageHalf);
const int textY = static_cast<int>(static_cast<float>(this->mailTab->geometry.height - this->TextHeight(LookupMessage(MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION), 0, 0, 12, 0, 0) - 3) * g_depthAverageHalf);
this->mailTab->AddText(0, 12, 0xCCB5AD, true, false, textX, textY);
this->mailTab->AddText(1, 12, 0x9C3E1F, true, false, textX, textY);
this->mailTab->AddText(2, 12, 0x9C3E1F, true, false, textX, textY);
}
this->mailTab->Move(0x71, 0x46);
this->AddChild(this->mailTab);
this->mailTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
switch (g_rodexMailStore->inboxType) {
case MAIL_INBOX_NORMAL:
this->mailTab->SendMsg(this, UM_SETSTATE, 1, 0, 0, 0);
break;
case MAIL_INBOX_ACCOUNT:
this->accountTab->SendMsg(this, UM_SETSTATE, 1, 0, 0, 0);
break;
case MAIL_INBOX_RETURNED:
this->returnTab->SendMsg(this, UM_SETSTATE, 1, 0, 0, 0);
break;
}
this->refreshButton = new UIBitmapButton();
this->refreshButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_refresh_out.bmp", 0, 0);
this->refreshButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_refresh_over.bmp", 1, 0);
this->refreshButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_refresh_press.bmp", 2, 0);
this->refreshButton->SetTooltip(LookupMessage(MSI_RODEX_DELETE_TIME_DAY));
this->refreshButton->SetSize(this->refreshButton->BitmapWidth(), this->refreshButton->BitmapHeight());
this->refreshButton->Move(0xEF, 0x14);
this->refreshButton->SetId(0x19F);
this->AddChild(this->refreshButton);
this->writeButton = new UIBitmapButton();
this->writeButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_write_out.bmp", 0, 0);
this->writeButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_write_over.bmp", 1, 0);
this->writeButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_write_press.bmp", 2, 0);
this->writeButton->SetTooltip(LookupMessage(MSI_MAIL_WRITE));
this->writeButton->SetSize(this->writeButton->BitmapWidth(), this->writeButton->BitmapHeight());
this->writeButton->Move(0x10C, 0x12);
this->writeButton->SetId(0x131);
this->AddChild(this->writeButton);
for (int y = 0x66, row = 0; y < 0x16E; y += 0x2C, ++row) {
this->checks[row] = new UICheckBox();
this->checks[row]->SetSize(14, 14);
this->checks[row]->SetBitmaps("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\checkbox_on.bmp", "유저인터페이스\\basic_interface\\rodexsystem\\renewal\\checkbox_off.bmp");
this->checks[row]->Move(0x11, y + 6);
this->checks[row]->SetChecked(0);
this->checks[row]->m_message = 0;
this->checks[row]->Show(0);
this->AddChild(this->checks[row]);
this->subjectButtons[row] = new UITextButton();
this->subjectButtons[row]->Configure("", 0, 0, 12, 0, 0);
this->subjectButtons[row]->m_hoverColor = 0x51417E;
this->subjectButtons[row]->Move(0x45, y);
this->subjectButtons[row]->SetId(0x143);
this->subjectButtons[row]->SetTooltip(LookupMessage(MSI_TAIWAN_CASH_MSG_2));
this->subjectButtons[row]->Enable(0);
this->AddChild(this->subjectButtons[row]);
this->senderButtons[row] = new UITextButton();
this->senderButtons[row]->Configure("", 0x844A42, 0, 11, 1, 0);
this->senderButtons[row]->m_hoverColor = 0x51417E;
this->senderButtons[row]->Move(0x47, y + 0x10);
this->senderButtons[row]->SetId(0x142);
this->senderButtons[row]->SetTooltip(LookupMessage(MSI_TAIWAN_CASH_MSG_1));
this->senderButtons[row]->Enable(0);
this->AddChild(this->senderButtons[row]);
this->returnButtons[row] = new UIBitmapButton();
this->returnButtons[row]->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_return_out.bmp", 0, 0);
this->returnButtons[row]->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_return_over.bmp", 1, 0);
this->returnButtons[row]->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_return_press.bmp", 2, 0);
this->returnButtons[row]->SetSize(this->returnButtons[row]->BitmapWidth(), this->returnButtons[row]->BitmapHeight());
this->returnButtons[row]->Move(0xBA, y + 0x1D);
this->returnButtons[row]->SetTooltip(LookupMessage(MSI_RODEX_DELETE_TIME_HOUR));
this->returnButtons[row]->SetId(0x136);
this->returnButtons[row]->Enable(0);
this->AddChild(this->returnButtons[row]);
}
UIBasicButton* button = new UIBasicButton();
this->receiveButton = button;
button->Configure(0x46, LookupMessage(MSI_RODEX_BUTTON_RECEIVE_ALL));
this->receiveButton->SetId(0x222);
this->receiveButton->Move(4, 0x178);
this->AddChild(this->receiveButton);
button = new UIBasicButton();
this->deleteButton = button;
button->Configure(0x46, LookupMessage(MSI_HOTKEYWND_SKILLBAR2));
this->deleteButton->Move(0x54, 0x188);
this->deleteButton->SetId(0x224);
this->AddChild(this->deleteButton);
this->previousPageButton = new UIBitmapButton();
this->previousPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_prev_out.bmp", 0, 0);
this->previousPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_prev_over.bmp", 1, 0);
this->previousPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_prev_press.bmp", 2, 0);
this->previousPageButton->SetTooltip(LookupMessage(MSI_BOOK_PREV));
this->previousPageButton->SetSize(this->previousPageButton->BitmapWidth(), this->previousPageButton->BitmapHeight());
this->previousPageButton->Move(0xF6, 0x176);
this->previousPageButton->SetId(0x13C);
this->AddChild(this->previousPageButton);
this->nextPageButton = new UIBitmapButton();
this->nextPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_next_out.bmp", 0, 0);
this->nextPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_next_over.bmp", 1, 0);
this->nextPageButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_next_press.bmp", 2, 0);
this->nextPageButton->SetTooltip(LookupMessage(MSI_BOOK_NEXT));
this->nextPageButton->SetSize(this->nextPageButton->BitmapWidth(), this->nextPageButton->BitmapHeight());
this->nextPageButton->Move(0x10E, 0x176);
this->nextPageButton->SetId(0x13D);
this->AddChild(this->nextPageButton);
const int searchTexts[2] = {0xC78, 0xC79};
for (int x = 0x16, index = 0; x < 0x7C; x += 0x33, ++index) {
this->searchModeButtons[index] = new UIRadioBtn();
this->searchModeButtons[index]->SetSize(0x33, 12);
this->searchModeButtons[index]->SetBitmaps("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\checkbox_search_on.bmp", "유저인터페이스\\basic_interface\\rodexsystem\\renewal\\checkbox_search_off.bmp");
this->searchModeButtons[index]->SetText(LookupMessage(searchTexts[index]));
this->searchModeButtons[index]->textColor = 0x654939;
this->searchModeButtons[index]->Move(x, 0x44);
this->searchModeButtons[index]->value = 0x141;
this->searchModeButtons[index]->SendMsg(this, UM_SETSTATE, 1 - index, 0, 0, 0);
this->AddChild(this->searchModeButtons[index]);
}
this->searchEdit = new UIEditCtrl();
this->searchEdit->SetSize(0x84, 0x12);
this->searchEdit->Move(0x85, 0x41);
this->searchEdit->maximum = 0x10;
this->searchEdit->flat = 0;
this->searchEdit->Border(0xAD, 0xAD, 0xAD);
this->searchEdit->preserveInput = 1;
this->AddChild(this->searchEdit);
this->searchButton = new UIBitmapButton();
this->searchButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_search_out.bmp", 0, 0);
this->searchButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_search_over.bmp", 1, 0);
this->searchButton->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_search_press.bmp", 2, 0);
this->searchButton->SetSize(this->searchButton->BitmapWidth(), this->searchButton->BitmapHeight());
this->searchButton->Move(0x108, 0x41);
this->searchButton->SetId(0x141);
this->AddChild(this->searchButton);
this->searchTab = new UIBmpRadioBtn();
this->searchTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_out.bmp", 0);
this->searchTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_over.bmp", 1);
this->searchTab->SetBitmap("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\btn_listtab_empty_press.bmp", 2);
this->searchTab->SetLabel(LookupMessage(MSI_MSI_INVENTORY_TABNAME_4));
{
const int textX = static_cast<int>(static_cast<float>(this->searchTab->geometry.width - this->TextWidth(LookupMessage(MSI_MSI_INVENTORY_TABNAME_4), 0, 0, 12, 0, 0)) * g_depthAverageHalf);
const int textY = static_cast<int>(static_cast<float>(this->searchTab->geometry.height - this->TextHeight(LookupMessage(MSI_MSI_INVENTORY_TABNAME_4), 0, 0, 12, 0, 0) - 3) * g_depthAverageHalf);
this->searchTab->AddText(0, 12, 0xCCB5AD, true, false, textX, textY);
this->searchTab->AddText(1, 12, 0x9C3E1F, true, false, textX, textY);
this->searchTab->AddText(2, 12, 0x9C3E1F, true, false, textX, textY);
}
this->searchTab->Move(0xDF, 0x56);
this->AddChild(this->searchTab);
this->searchTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->accountTab->Move(0x13, 0x56);
this->mailTab->Move(0x57, 0x56);
this->returnTab->Move(0x9B, 0x56);
this->refreshButton->Move(0xF8, 0x14);
this->writeButton->Move(0x115, 0x12);
for (int y = 0x79, row = 0; y < 0x181; y += 0x2C, ++row) {
this->checks[row]->Move(0x11, y + 7);
this->subjectButtons[row]->Move(0x45, y);
this->senderButtons[row]->Move(0x47, y + 0x14);
}
this->receiveButton->Move(4, 0x188);
this->previousPageButton->Move(0xFF, 0x186);
this->nextPageButton->Move(0x117, 0x186);
this->RefreshMailLists();
this->Invalidate();
}
// OFFSET: 0x00806D40
// FUNCTION: fn_10048
void UIRodexInboxWnd::Paint() {
this->ClearSurface(0xFF00FF);
this->DrawBitmap(0, 0, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\bg_rodex_list.bmp"))), false);
for (int i = 0; i < 6; ++i) {
this->returnButtons[i]->Enable(0);
}
if (!g_rodexMailStore->isPageComplete) {
this->DrawBitmap(0x1F, 0x9A, static_cast<CBitmapRes*>(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\basic_interface\\rodexsystem\\renewal\\img_notice.bmp"))), true);
this->DrawWrappedFormattedText(0x1F, 0xE5, std::string(LookupMessage(MSI_RODEX_SENDER)), 0xF8, 3, 6, 0, 12, 0, 0);
this->DrawCenteredText(0x1F, 0x10E, LookupMessage(MSI_CLOSE_SETUP), 0xF8, 0, 0x12, 0xC89482, 1);
return;
}
unsigned int index = this->page * 6;
if (this->searchActive == 1) {
for (int row = 0; row < 6; ++row, ++index) {
if (index < this->searchResults.size()) {
RodexMailMap* mails = RodexMailsOfType(this->searchResults[index].first);
if (mails) {
RodexMailMap::iterator it = mails->find(this->searchResults[index].second);
if (it != mails->end()) {
this->DrawMailIcons(row, it->second.type, it->second.isRead, this->searchResults[index].first == 2);
this->DrawExpireTime(row, it->second.sentAt, it->second.expiresAt, this->searchResults[index].first == 2);
if (this->expired == 1) {
this->expired = 0;
mails->erase(it);
} else {
this->SetMailRow(row, this->searchResults[index].second, it->second.sender, it->second.title, it->second.isRead,
it->second.isReturned, it->second.isKnownSender);
}
}
}
} else {
this->checks[row]->Show(0);
this->checks[row]->SetChecked(0);
this->checks[row]->m_message = 0;
this->senderButtons[row]->Enable(0);
this->subjectButtons[row]->Enable(0);
}
}
} else {
for (int row = 0; row < 6; ++row, ++index) {
this->checks[row]->Show(0);
this->senderButtons[row]->Enable(0);
this->subjectButtons[row]->Enable(0);
switch (g_rodexMailStore->inboxType) {
case MAIL_INBOX_ACCOUNT:
if (index < this->mails1.size()) {
RodexMailMap::iterator it = g_rodexMailStore->m_mails1.find(this->mails1[index].second);
if (it != g_rodexMailStore->m_mails1.end()) {
this->DrawMailIcons(row, it->second.type, it->second.isRead, 0);
this->DrawExpireTime(row, it->second.sentAt, it->second.expiresAt, 0);
if (this->expired == 1) {
this->expired = 0;
g_rodexMailStore->m_mails1.erase(it);
} else {
this->checks[row]->Show(1);
this->senderButtons[row]->Enable(1);
this->subjectButtons[row]->Enable(1);
this->SetMailRow(row, it->first, it->second.sender, it->second.title, it->second.isRead, it->second.isReturned, -1);
}
}
}
break;
case MAIL_INBOX_RETURNED:
if (index < this->mails2.size()) {
RodexMailMap::iterator it = g_rodexMailStore->m_mails2.find(this->mails2[index].second);
if (it != g_rodexMailStore->m_mails2.end()) {
this->DrawMailIcons(row, it->second.type, it->second.isRead, 0);
this->DrawExpireTime(row, it->second.sentAt, it->second.expiresAt, 0);
if (this->expired == 1) {
this->expired = 0;
g_rodexMailStore->m_mails2.erase(it);
} else {
this->checks[row]->Show(1);
this->senderButtons[row]->Enable(1);
this->subjectButtons[row]->Enable(1);
this->SetMailRow(row, it->first, it->second.sender, it->second.title, it->second.isRead, it->second.isReturned, -1);
}
}
}
break;
default:
this->senderButtons[row]->Enable(0);
this->subjectButtons[row]->Enable(0);
if (index < this->mails0.size()) {
RodexMailMap::iterator it = g_rodexMailStore->m_mails0.find(this->mails0[index].second);
if (it != g_rodexMailStore->m_mails0.end()) {
this->DrawMailIcons(row, it->second.type, it->second.isRead, 0);
this->DrawExpireTime(row, it->second.sentAt, it->second.expiresAt, 0);
if (this->expired == 1) {
this->expired = 0;
g_rodexMailStore->m_mails0.erase(it);
} else {
this->SetMailRow(row, it->first, it->second.sender, it->second.title, it->second.isRead, it->second.isReturned,
it->second.isKnownSender);
}
}
}
}
}
}
this->DrawRightAlignedText(0x111, 0x2E, FormatOwnedString("%d", g_rodexMailStore->dailySendCount).c_str(), 0, 0, 11, 0xC89482, 1);
this->DrawTextAt(0x111, 0x2E, LookupMessage(MSI_EMBLEM_CHANGE), 0, 0, 11, 0xC89482, 1, 0);
}
// OFFSET: 0x00808FD0
// FUNCTION: fn_10056
void UIRodexInboxWnd::SetButtonsDisabled(unsigned char disabled) {
UIButton* button = this->previousPageButton;
button->SetDisabled(disabled);
button->Invalidate();
this->previousPageButton->Invalidate();
button = this->nextPageButton;
button->SetDisabled(disabled);
button->Invalidate();
this->nextPageButton->Invalidate();
button = this->refreshButton;
button->SetDisabled(disabled);
button->Invalidate();
this->refreshButton->Invalidate();
button = this->receiveButton;
button->SetDisabled(disabled);
button->Invalidate();
this->receiveButton->Invalidate();
button = this->writeButton;
button->SetDisabled(disabled);
button->Invalidate();
this->writeButton->Invalidate();
button = this->deleteButton;
button->SetDisabled(disabled);
button->Invalidate();
this->deleteButton->Invalidate();
this->Invalidate();
}
// OFFSET: 0x008090C0
// FUNCTION: fn_10057
void UIRodexInboxWnd::SetMailRow(int row, std::int64_t mailId, std::string name, std::string subject, unsigned char read, unsigned char returned, int noAttachment) {
std::string nameText = name;
std::string subjectText = subject;
const std::pair<bool, std::string> stripped = GetNavigationLinkParser()->RemoveLineBreakTag(subjectText);
subjectText = stripped.second;
if (stripped.first == true) {
this->senderButtons[row]->SetTooltip("");
}
nameText = GetNavigationLinkParser()->ExpandMessages(nameText);
subjectText = GetNavigationLinkParser()->ExpandMessages(subjectText);
this->checks[row]->Show(1);
this->checks[row]->m_message = static_cast<int>(mailId);
this->senderButtons[row]->SetLabel(nameText.c_str());
this->senderButtons[row]->ResizeToTextClipped(0x8C, this->senderButtons[row]->geometry.height);
this->senderButtons[row]->m_value = static_cast<int>(mailId);
this->senderButtons[row]->Enable(1);
std::uint32_t color;
if (noAttachment == 0) {
this->returnButtons[row]->Enable(1);
this->returnButtons[row]->m_argument = static_cast<int>(mailId);
color = read == 1 ? 0xC8C8E6 : 0xFF;
} else {
color = read == 1 ? 0xC8C8C8 : 0;
}
this->subjectButtons[row]->m_color = color;
this->subjectButtons[row]->SetLabel(subjectText.c_str());
this->subjectButtons[row]->ResizeToTextClipped(0x8C, this->subjectButtons[row]->geometry.height);
this->subjectButtons[row]->m_value = static_cast<int>(mailId);
this->subjectButtons[row]->Enable(1);
if (returned == 1) {
this->checks[row]->m_message = -1;
this->senderButtons[row]->Enable(0);
this->subjectButtons[row]->m_color = 0xC8C8C8;
this->subjectButtons[row]->SetLabel(LookupMessage(MSI_THAI_PERSONALINFO_DROP));
this->subjectButtons[row]->ResizeToTextClipped(0x8C, this->subjectButtons[row]->geometry.height);
this->subjectButtons[row]->m_value = -1;
this->subjectButtons[row]->Enable(1);
}
}
// OFFSET: 0x00809670
// FUNCTION: fn_10058
void UIRodexInboxWnd::DrawExpireTime(int row, __time32_t sendTime, __time32_t expireTime, unsigned char returned) {
_difftime32(_time32(nullptr), sendTime);
int remaining = static_cast<int>(_difftime32(expireTime, _time32(nullptr)));
if (remaining <= 0) {
remaining = 0;
}
if (remaining == 0) {
this->expired = 1;
return;
}
std::string text;
if (remaining / 86400 > 0) {
const std::string formatted = FormatOwnedString(LookupMessage(MSI_MINIMAP_TIP_POS_ON), remaining / 86400);
text = formatted;
} else if (remaining / 3600 > 0) {
const std::string formatted = FormatOwnedString(LookupMessage(MSI_RODEX_DELETE_SELECT_MAIL), remaining / 3600);
text = formatted;
} else {
const std::string formatted = FormatOwnedString(LookupMessage(MSI_RODEX_RETURNED), remaining / 60);
text = formatted;
}
if (returned == 1) {
this->DrawCenteredText(0x104, row * 0x2C + 0x7D, LookupMessage(MSI_MINIMAP_TIP_ZOOM_IN), 0, 0, 11, 0x666673, 0);
this->DrawCenteredText(0x104, row * 0x2C + 0x8A, text.c_str(), 0, 0, 11, 0x666673, 0);
} else {
this->DrawCenteredText(0x104, row * 0x2C + 0x82, text.c_str(), 0, 0, 11, 0xA0AE9, 1);
}
}
// OFFSET: 0x008098D0
// FUNCTION: fn_10059
void UIRodexInboxWnd::ClearChecks() {
++this->page;
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
this->Invalidate();
}
// OFFSET: 0x00809990
// FUNCTION: fn_10061
void UIRodexInboxWnd::RefreshMailLists() {
this->mails0.clear();
this->mails2.clear();
this->mails1.clear();
for (RodexMailMap::iterator it = g_rodexMailStore->m_mails0.begin(); it != g_rodexMailStore->m_mails0.end(); ++it) {
this->mails0.push_back(RodexMailEntry(0, it->first));
}
std::sort(this->mails0.begin(), this->mails0.end(), RodexMailEntryLess());
for (RodexMailMap::iterator it = g_rodexMailStore->m_mails2.begin(); it != g_rodexMailStore->m_mails2.end(); ++it) {
this->mails2.push_back(RodexMailEntry(2, it->first));
}
std::sort(this->mails2.begin(), this->mails2.end(), RodexMailEntryLess());
for (RodexMailMap::iterator it = g_rodexMailStore->m_mails1.begin(); it != g_rodexMailStore->m_mails1.end(); ++it) {
this->mails1.push_back(RodexMailEntry(1, it->first));
}
std::sort(this->mails1.begin(), this->mails1.end(), RodexMailEntryLess());
}
// OFFSET: 0x00809B60
// FUNCTION: fn_10062
void UIRodexInboxWnd::RemoveInboxMail(int id) {
for (std::vector<RodexMailEntry>::iterator it = this->mails0.begin(); it != this->mails0.end(); ++it) {
if (id == it->second) {
this->mails0.erase(it);
return;
}
}
}
// OFFSET: 0x00809C80
// FUNCTION: fn_10067
void UIRodexInboxWnd::SearchBySender(const std::string keyword) {
this->searchResults.clear();
std::vector<RodexMailEntry>& results = this->searchResults;
std::for_each(g_rodexMailStore->m_mails0.begin(), g_rodexMailStore->m_mails0.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.sender.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(0, mail.first));
}
});
std::for_each(g_rodexMailStore->m_mails1.begin(), g_rodexMailStore->m_mails1.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.sender.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(1, mail.first));
}
});
std::for_each(g_rodexMailStore->m_mails2.begin(), g_rodexMailStore->m_mails2.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.sender.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(2, mail.first));
}
});
std::sort(this->searchResults.begin(), this->searchResults.end(), RodexMailEntryLess());
}
// OFFSET: 0x00809F70
// FUNCTION: fn_10068
void UIRodexInboxWnd::SearchByTitle(const std::string keyword) {
this->searchResults.clear();
std::vector<RodexMailEntry>& results = this->searchResults;
std::for_each(g_rodexMailStore->m_mails0.begin(), g_rodexMailStore->m_mails0.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.title.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(0, mail.first));
}
});
std::for_each(g_rodexMailStore->m_mails1.begin(), g_rodexMailStore->m_mails1.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.title.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(1, mail.first));
}
});
std::for_each(g_rodexMailStore->m_mails2.begin(), g_rodexMailStore->m_mails2.end(), [&results, keyword](const std::pair<const std::int64_t, RodexMail>& mail) {
if (mail.second.title.find(keyword, 0) != std::string::npos) {
results.push_back(RodexMailEntry(2, mail.first));
}
});
std::sort(this->searchResults.begin(), this->searchResults.end(), RodexMailEntryLess());
}
// OFFSET: 0x00807690
// FUNCTION: fn_10053
void UIRodexInboxWnd::RequestMailAttachments(int type, std::int64_t mailId) {
if (g_modeMgr.GetGameMode() != nullptr && static_cast<CGameMode*>(g_modeMgr.GetGameMode())->IsMenuWindowOpen() == true) {
return;
}
RodexMailMap* mails = RodexMailsOfType(type);
unsigned char flags = 0;
if (mails != nullptr) {
RodexMailMap::iterator mail = mails->find(mailId);
if (mail != mails->end()) {
flags = mail->second.type;
}
}
RodexMailRequestPacket packet;
if ((flags & 4) != 0) {
packet.id = ID_CZ_REQ_ITEM_FROM_RODEX;
packet.mailId = mailId;
packet.type = static_cast<std::uint8_t>(type);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packet.id), &packet);
}
if ((flags & 2) != 0) {
packet.id = ID_CZ_REQ_ZENY_FROM_RODEX;
packet.mailId = mailId;
packet.type = static_cast<std::uint8_t>(type);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packet.id), &packet);
}
}
// OFFSET: 0x008078E0
// FUNCTION: fn_10054
void UIRodexInboxWnd::InitializeMailActions() {
this->page = 0;
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
this->receiveButton->SetText(LookupMessage(MSI_RODEX_BUTTON_RECEIVE_ALL));
this->receiveButton->SetId(0x222);
this->deleteButton->SetText(LookupMessage(MSI_HOTKEYWND_SKILLBAR2));
this->deleteButton->SetId(0x224);
this->Invalidate();
}
// OFFSET: 0x00805350
// FUNCTION: fn_10041
bool RodexMailEntryLess::operator()(const RodexMailEntry& left, const RodexMailEntry& right) const {
RodexMailMap* leftMails = RodexMailsOfType(left.first);
if (!leftMails) {
return false;
}
RodexMailMap::iterator leftMail = leftMails->find(left.second);
if (leftMail == leftMails->end()) {
return false;
}
RodexMailMap* rightMails = RodexMailsOfType(right.first);
if (!rightMails) {
return false;
}
RodexMailMap::iterator rightMail = rightMails->find(right.second);
if (rightMail == rightMails->end()) {
return false;
}
if (leftMail->second.isRead == 0) {
if (rightMail->second.isRead == 1) {
return true;
}
} else if (rightMail->second.isRead == 0) {
return false;
}
return leftMail->second.sentAt > rightMail->second.sentAt;
}
// OFFSET: 0x008054D0
// FUNCTION: fn_10043
bool UIRodexInboxWnd::RequestMailAction(int type, std::int64_t mailId) {
RodexMailMap* mails = RodexMailsOfType(type);
if (mails == nullptr) {
return false;
}
RodexMailMap::iterator mail = mails->find(mailId);
if (mail == mails->end() || (mail->second.type & 6) != 0) {
return false;
}
g_modeMgr.GetGameMode()->SendMsg(MM_DELETE_MAIL, static_cast<int>(mailId), type, 0, 0);
if (g_windowMgr.rodexContentsWnd != 0) {
g_windowMgr.CloseWindow(WID_RODEXCONTENTSWND);
}
return true;
}
// OFFSET: 0x00805570
// FUNCTION: fn_10044
void UIRodexInboxWnd::RequestAllMailActions() {
int requested = 0;
int skipped = 0;
if (this->searchActive == 1) {
for (std::vector<RodexMailEntry>::iterator entry = this->searchResults.begin(); entry != this->searchResults.end(); ++entry) {
RodexMailMap* mails = RodexMailsOfType(entry->first);
if (mails == nullptr) {
continue;
}
RodexMailMap::iterator mail = mails->find(entry->second);
if (mail == mails->end()) {
continue;
}
if ((mail->second.type & 6) == 0) {
g_modeMgr.GetGameMode()->SendMsg(MM_DELETE_MAIL, static_cast<int>(entry->second), entry->first, 0, 0);
++requested;
} else {
++skipped;
}
}
} else {
int type = g_rodexMailStore->inboxType;
RodexMailMap* mails = RodexMailsOfType(type);
if (mails == nullptr) {
return;
}
for (RodexMailMap::iterator mail = mails->begin(); mail != mails->end(); ++mail) {
if ((mail->second.type & 6) == 0) {
g_modeMgr.GetGameMode()->SendMsg(MM_DELETE_MAIL, static_cast<int>(mail->first), type, 0, 0);
++requested;
} else {
++skipped;
}
}
}
if (requested > 0 && g_windowMgr.rodexContentsWnd != 0) {
g_windowMgr.CloseWindow(WID_RODEXCONTENTSWND);
}
if (skipped > 0) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(LookupMessage(MSI_FAILE_MAIL_RECIEVER_INFO)), 0x64FFFF, 0, 0, 0);
}
}
// OFFSET: 0x00807AA0
// FUNCTION: fn_10055
int UIRodexInboxWnd::SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) {
if (g_windowMgr.rodexComposeWnd != nullptr || g_windowMgr.rodexContentsWnd != nullptr) {
return 0;
}
CMode* mode = g_modeMgr.GetGameMode();
if (g_rodexMailStore->isPageComplete == false && !(message == UM_COMMAND && argument1 == ID_CLOSE)) {
return 0;
}
switch (message) {
case UM_COMMAND:
switch (argument1) {
case ID_RADIOBTN:
if (argument2 == 0x141) {
for (int i = 0; i < 2; ++i) {
UIRadioBtn* radio = this->searchModeButtons[i];
if (radio == sender) {
radio->SendMsg(this, UM_SETSTATE, 1, 0, 0, 0);
} else {
radio->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
}
}
this->Invalidate();
} else {
this->mailTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->accountTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->returnTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
this->searchTab->SendMsg(this, UM_SETSTATE, 0, 0, 0, 0);
sender->SendMsg(this, UM_SETSTATE, 1, 0, 0, 0);
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
this->page = 0;
if (this->mailTab == sender) {
g_rodexMailStore->inboxType = 0;
} else if (this->accountTab == sender) {
g_rodexMailStore->inboxType = 1;
} else if (this->returnTab == sender) {
g_rodexMailStore->inboxType = 2;
}
this->searchActive = this->searchTab == sender;
this->Invalidate();
}
break;
case ID_PREV_PAGE:
if (--this->page < 0) {
this->page = 0;
} else {
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
}
this->Invalidate();
break;
case ID_NEXT_PAGE: {
if (this->searchActive == 1) {
if (this->searchResults.size() > static_cast<std::size_t>((this->page + 1) * 6)) {
this->ClearChecks();
}
} else if (RodexMailsOfType(g_rodexMailStore->inboxType)->size() > static_cast<std::size_t>((this->page + 1) * 6)) {
this->ClearChecks();
}
break;
}
case 0x19F: {
g_rodexMailStore->PurgeFlagged();
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
PACKET_CZ_REQ_REFRESH_RODEX packet;
packet.packetType = ID_CZ_UPDATE_ALL_RODEX;
packet.lastMailId0 = 0;
if (g_rodexMailStore->m_mails0.size() > 0) {
packet.lastMailId0 = g_rodexMailStore->m_mails0.rbegin()->first;
}
packet.lastMailId2 = 0;
if (g_rodexMailStore->m_mails2.size() > 0) {
packet.lastMailId2 = g_rodexMailStore->m_mails2.rbegin()->first;
}
packet.lastMailId1 = 0;
if (g_rodexMailStore->m_mails1.size() > 0) {
packet.lastMailId1 = g_rodexMailStore->m_mails1.rbegin()->first;
}
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packet.packetType), &packet);
this->SetButtonsDisabled(1);
break;
}
case ID_SEND_MAIL:
if (g_windowMgr.HasNavigationBlocker() != true) {
mode->SendMsg(MM_OPEN_WRITE_RODEX, 0, 0, 0, 0);
}
break;
case ID_CLOSE:
g_windowMgr.CloseWindow(WID_RODEXINBOXWND);
break;
case ID_DELETE:
if (this->searchActive == 1) {
std::vector<RodexMailEntry> selected;
for (int i = 0; i < 6; ++i) {
UICheckBox* check = this->checks[i];
if (check->geometry.visible == 1 && check->geometry.state != 0 && check->m_message != -1) {
const RodexMailEntry entry = this->searchResults[this->page * 6 + i];
selected.push_back(entry);
}
}
if (selected.size() == 0) {
break;
}
if (g_windowMgr.Confirm(LookupMessage(MSI_MINIMAP_TIP_ZOOM_OUT), 2, false, false, 0, "Message", 280, 120, 0) != 0xBB) {
break;
}
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
bool success = true;
for (std::vector<RodexMailEntry>::iterator entry = selected.begin(); entry != selected.end(); ++entry) {
success &= this->RequestMailAction(entry->first, entry->second);
}
if (!success) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(LookupMessage(MSI_FAILE_MAIL_RECIEVER_INFO)), 0x64FFFF, 0, 0, 0);
}
} else {
std::list<int> selected;
for (int i = 0; i < 6; ++i) {
UICheckBox* check = this->checks[i];
if (check->geometry.visible == 1 && check->geometry.state != 0) {
const int id = check->m_message;
if (id != -1) {
selected.push_back(id);
}
}
}
if (selected.size() == 0) {
break;
}
if (g_windowMgr.Confirm(LookupMessage(MSI_MINIMAP_TIP_ZOOM_OUT), 2, false, false, 0, "Message", 280, 120, 0) != 0xBB) {
break;
}
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
bool success = true;
for (std::list<int>::iterator id = selected.begin(); id != selected.end(); ++id) {
success &= this->RequestMailAction(g_rodexMailStore->inboxType, *id);
}
if (!success) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(LookupMessage(MSI_FAILE_MAIL_RECIEVER_INFO)), 0x64FFFF, 0, 0, 0);
}
}
break;
case ID_SEARCH:
if (this->searchModeButtons[0]->geometry.state == 1) {
this->SearchByTitle(this->searchEdit->Text());
} else if (this->searchModeButtons[1]->geometry.state == 1) {
this->SearchBySender(this->searchEdit->Text());
}
this->SendMsg(this->searchTab, UM_COMMAND, ID_RADIOBTN, 0, 0, 0);
this->Invalidate();
break;
case ID_CHECK: {
int checked = 0;
for (int i = 0; i < 6; ++i) {
if (static_cast<int>(this->checks[i]->geometry.state) > 0) {
++checked;
}
}
if (checked != 0) {
this->receiveButton->SetText(LookupMessage(MSI_RODEX_BUTTON_RECEIVE_SELECTED));
this->receiveButton->SetId(0xD3);
this->deleteButton->SetText(LookupMessage(MSI_RODEX_MESSAGE_RECEIVE_ALL));
this->deleteButton->SetId(0x223);
} else {
this->receiveButton->SetText(LookupMessage(MSI_RODEX_BUTTON_RECEIVE_ALL));
this->receiveButton->SetId(0x222);
this->deleteButton->SetText(LookupMessage(MSI_HOTKEYWND_SKILLBAR2));
this->deleteButton->SetId(0x224);
}
break;
}
case 0x136:
if (g_rodexMailStore->inboxType == MAIL_INBOX_NORMAL) {
RodexMailMap::iterator mail = g_rodexMailStore->m_mails0.find(argument2);
if (mail != g_rodexMailStore->m_mails0.end()) {
PACKET_CZ_RODEX_RETURN packet;
packet.packetType = ID_CZ_RODEX_RETURN;
packet.mailId = static_cast<std::uint32_t>(mail->first);
GetRagConnection().Send(reinterpret_cast<const PacketLengths&>(GetRagConnection()).FixedLength(packet.packetType), &packet);
}
}
break;
case 0x222: {
std::string type;
if (this->searchActive == 1) {
type = LookupMessage(MSI_MSI_INVENTORY_TABNAME_4);
} else {
switch (g_rodexMailStore->inboxType) {
case MAIL_INBOX_NORMAL:
type = LookupMessage(MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION);
break;
case MAIL_INBOX_ACCOUNT:
type = LookupMessage(MSI_RODEX_TAB_SEARCH);
break;
case MAIL_INBOX_RETURNED:
type = LookupMessage(MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION);
break;
}
}
const std::string text = FormatOwnedString(LookupMessage(MSI_RODEX_MESSAGE_RECEIVE_SELECTED), type.c_str());
if (g_windowMgr.Confirm(text.c_str(), 2, false, false, 0, "Message", 280, 120, 0) == 0xBB) {
this->RequestAllMailActions();
}
break;
}
case 0x224: {
std::string type;
if (this->searchActive == 1) {
type = LookupMessage(MSI_MSI_INVENTORY_TABNAME_4);
} else {
switch (g_rodexMailStore->inboxType) {
case MAIL_INBOX_NORMAL:
type = LookupMessage(MSI_FAILED_PET_AUTO_FEEDING_BY_ITEMACTION);
break;
case MAIL_INBOX_ACCOUNT:
type = LookupMessage(MSI_RODEX_TAB_SEARCH);
break;
case MAIL_INBOX_RETURNED:
type = LookupMessage(MSI_FAILED_HOMUN_AUTO_FEEDING_BY_ITEMACTION);
break;
}
}
const std::string text = FormatOwnedString(LookupMessage(MSI_HOTKEYGUIDEWND_LEFT), type.c_str());
if (g_windowMgr.Confirm(text.c_str(), 2, false, false, 0, "Message", 280, 120, 0) == 0xBB) {
if (this->searchActive == 1) {
for (std::vector<RodexMailEntry>::iterator entry = this->searchResults.begin(); entry != this->searchResults.end(); ++entry) {
if (entry->first == 0) {
RodexMailMap::iterator mail = g_rodexMailStore->m_mails0.find(entry->second);
if (mail != g_rodexMailStore->m_mails0.end() && mail->second.isKnownSender <= 0) {
continue;
}
}
this->RequestMailAttachments(entry->first, entry->second);
}
} else {
const int mailType = g_rodexMailStore->inboxType;
RodexMailMap* mails = RodexMailsOfType(mailType);
if (mails != nullptr) {
for (RodexMailMap::iterator mail = mails->begin(); mail != mails->end(); ++mail) {
if (mail->second.isKnownSender > 0) {
this->RequestMailAttachments(mailType, mail->first);
}
}
}
}
}
break;
}
case 0x223: {
if (this->searchActive == 1) {
std::vector<RodexMailEntry> selected;
for (int i = 0; i < 6; ++i) {
UICheckBox* check = this->checks[i];
if (check->geometry.visible == 1 && check->geometry.state != 0 && check->m_message != -1) {
const RodexMailEntry entry = this->searchResults[this->page * 6 + i];
selected.push_back(entry);
}
}
if (selected.size() != 0 &&
g_windowMgr.Confirm(LookupMessage(MSI_CHANGE_SKILLBER), 2, false, false, 0, "Message", 280, 120, 0) == 0xBB) {
for (std::vector<RodexMailEntry>::iterator entry = selected.begin(); entry != selected.end(); ++entry) {
this->RequestMailAttachments(entry->first, entry->second);
}
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
}
} else {
std::vector<int> selected;
for (int i = 0; i < 6; ++i) {
UICheckBox* check = this->checks[i];
if (check->geometry.visible == 1 && check->geometry.state != 0) {
const int id = check->m_message;
if (id != -1) {
selected.push_back(id);
}
}
}
if (selected.size() != 0 &&
g_windowMgr.Confirm(LookupMessage(MSI_CHANGE_SKILLBER), 2, false, false, 0, "Message", 280, 120, 0) == 0xBB) {
for (std::vector<int>::iterator id = selected.begin(); id != selected.end(); ++id) {
this->RequestMailAttachments(g_rodexMailStore->inboxType, *id);
}
for (int i = 0; i < 6; ++i) {
this->checks[i]->SetChecked(0);
this->checks[i]->m_message = 0;
}
}
}
break;
}
}
break;
case UM_REFRESH:
this->Invalidate();
break;
case UM_TEXT_LBTN_UP:
switch (argument1) {
case 0x142:
if (g_rodexMailStore->inboxType == MAIL_INBOX_NORMAL) {
RodexMailMap::iterator mail = g_rodexMailStore->m_mails0.find(argument2);
if (mail != g_rodexMailStore->m_mails0.end() && (mail->second.type & 8) == 0 && mail->second.sender.size() != 0) {
const std::pair<bool, std::string> title = g_navigationLinkParser->RemoveLineBreakTag(mail->second.title);
if (title.first != true) {
mode->SendMsg(MM_OPEN_WRITE_RODEX, reinterpret_cast<int>(mail->second.sender.c_str()), 0, 0, 0);
}
}
}
break;
case 0x143: {
RodexMailMap::iterator mail = g_rodexMailStore->m_mails0.find(argument2);
if (mail != g_rodexMailStore->m_mails0.end() && mail->second.isKnownSender == 0) {
g_windowMgr.SendNotice(UIM_PUSHINTOCHATHISTORY, reinterpret_cast<std::intptr_t>(LookupMessage(MSI_GRADE_ENCHANT_SUCCESS_REFINING_LEVEL_DISAPPEAR)), 0xFF, 0, 0, 0);
if (g_windowMgr.Confirm(LookupMessage(MSI_GRADE_ENCHANT_SUCCESS_REFINING_LEVEL_DISAPPEAR), 2, false, false, 0, "Message", 280, 120, 0) == 0xBC) {
break;
}
}
mode->SendMsg(MM_OPEN_MAIL, argument2, g_rodexMailStore->inboxType, 0, 0);
break;
}
}
break;
case UM_REFRESHITEM:
this->RefreshMailLists();
this->InitializeMailActions();
this->SetButtonsDisabled(0);
this->Invalidate();
break;
case UM_DEFPUSH:
if (this->searchEdit == sender) {
this->SendMsg(this->searchButton, UM_COMMAND, ID_SEARCH, 0, 0, 0);
}
break;
default:
return UIFrameWnd::SendMsg(sender, message, argument1, argument2, argument3, argument4);
}
return 0;
}