Batch #10125 by ragnarok-clanker: forced by an admin (143 lower score(s), 416 changed function(s)); checked with 475 compiled unit(s), including every includer of Source/UI/Acceptance/UIJoinPartyAcceptWnd.h, Source/UI/CashShop/UICashShopWnd.h, Source/UI/Chat/UIChatRoomMakeWnd.h, Source/UI/Chat/UINewChatWnd.h, Source/UI/Chat/UISubChatHisWnd.h, Source/UI/Chat/UISubChatMiniWnd.h, Source/UI/Chat/UIWhisperWnd.h, Source/UI/Clan/UIClanWnd.h, Source/UI/Dialogs/UIBookWnd.h, Source/UI/Dialogs/UIChooseWarpWnd.h, Source/UI/Dialogs/UIChooseWnd.h, Source/UI/Dialogs/UIDisconnectedServerMsgWnd.h, Source/UI/Dialogs/UIEditctrlWnd.h, Source/UI/Dialogs/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UILoadingWnd.h, Source/UI/Dialogs/UIMemorialDunWnd.h, Source/UI/Dialogs/UIMenuWnd.h, Source/UI/Dialogs/UIMiniMapWnd.h, Source/UI/Dialogs/UINoticeConfirmWnd.h, Source/UI/Dialogs/UINotifyLevelUpWnd.h, Source/UI/Dialogs/UINotifyQuestWnd.h, Source/UI/Dialogs/UINpcEditDialogWnd.h, Source/UI/Dialogs/UIPasswordWnd.h, Source/UI/Dialogs/UIPetTamingDeceiveWnd.h, Source/UI/Dialogs/UIProhibitListWnd.h, Source/UI/Dialogs/UIQuitWnd.h, Source/UI/Dialogs/UIRestartWnd.h, Source/UI/Dialogs/UISayDialogWnd.h, Source/UI/Dialogs/UISelectCartWnd.h, Source/UI/Dialogs/UITipOfTheDayWnd.h, Source/UI/Dialogs/UITipboxWnd.h, Source/UI/Dialogs/UIToolTipWnd.h, Source/UI/Dialogs/UIWaitWnd.h, Source/UI/Edit/UICandidateWnd.h, Source/UI/EntryQueue/UIEntryQueueWnd.h, Source/UI/FrameSkin.h, Source/UI/Guild/UIGuildHelperWnd.h, Source/UI/Guild/UIGuildWnd.h, Source/UI/Guild/UIGuild_Storage_Log.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/Items/MergeItemWnd.h, Source/UI/Items/UICardItemIllustWnd.h, Source/UI/Items/UIEquipWnd.h, Source/UI/Items/UIIllustWnd.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemIdentifyWnd.h, Source/UI/Items/UIItemRepairWnd.h, Source/UI/Items/UIMakeTargetListWnd.h, Source/UI/Items/UIMakeTargetProcessWnd.h, Source/UI/Items/UIMakeTargetResultWnd.h, Source/UI/Items/UINotifyItemObtainWnd.h, Source/UI/Items/UISpellListWnd.h, Source/UI/Items/UISwapEquipmentWnd.h, Source/UI/Items/UIWeaponRefineWnd.h, Source/UI/Layout/SnapMgr.h, Source/UI/Lists/UIComboBoxWnd.h, Source/UI/Menu/UIMenuIconWnd.h, Source/UI/MiniPartyManager.h, Source/UI/Navigation/UINavigationV4Wnd.h, Source/UI/Navigation/UIPrivateAirplaneWnd.h, Source/UI/Party/UIAdvenPartyBoardWnd.h, Source/UI/Party/UIApplyForPartyWnd.h, Source/UI/Party/UIMiniPartyWnd.h, Source/UI/Party/UIPartySettingWnd.h, Source/UI/Party/UIRegisterPartyWnd.h, Source/UI/Party/UIRequestJoinPartyWnd.h, Source/UI/Quest/UIRenewQuestWnd.h, Source/UI/Rodex/UIRodexComposeWnd.h, Source/UI/RuneSystem/UIRuneSystemWnd.h, Source/UI/Shop/UIMerchantItemMyShopWnd.h, Source/UI/Shop/UIMerchantItemPurchaseMSGWnd.h, Source/UI/Shop/UIMerchantItemPurchaseWnd.h, Source/UI/Shop/UIMerchantItemShopWnd.h, Source/UI/Shop/UIMerchantItemWnd.h, Source/UI/Shop/UIMerchantMirrorItemWnd.h, Source/UI/Shop/UINoticeMessageBox_LockSellItem.h, Source/UI/Shop/UInCash_CallWnd.h, Source/UI/Shortcuts/UIQuickSlotWnd.h, Source/UI/Shortcuts/UIShortCutWnd.h, Source/UI/Skill/UISkillDescribeWnd.h, Source/UI/Skill/UISkillListWnd.h, Source/UI/Skill/UISkillNameChangeWnd.h, Source/UI/Status/UIStatusWnd.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/UIAchWnd.h, Source/UI/UIBartermarketWnd.h, Source/UI/UICaptchaPreviewWnd.h, Source/UI/UICaptchaRegisterWnd.h, Source/UI/UIChangeMaterialWnd.h, Source/UI/UICheckAttendanceWnd.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/UIMacroUserInfoWnd.h, Source/UI/UIPreviewEquipWnd.h, Source/UI/UIRefiningWnd.h, Source/UI/UIReputeWnd.h, Source/UI/UIRoundBoxTooltipWnd.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/UIEscOptionWnd.h, Source/UI/Window/UIFrameWnd.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/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/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/UISecondCostumeWnd.h, Source/UI/Window/UISeekPartyMBWnd.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UIShowWarpWnd.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UITransMenuWnd.h, Source/UI/Window/UIViewCameraInfoWnd.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/UIWordDisplayWnd.h, Source/UI/Window/WindowDialogs.h, Source/UI/Layout/WindowSnapping.h. Deletes: Source/UI/Layout/WindowSnapping.h
357 lines
8.3 KiB
C++
357 lines
8.3 KiB
C++
#include "Client/Application/ApplicationWindow.h"
|
|
#include "UI/Window/UIMessageBox.h"
|
|
#include "UI/Window/WindowDialogs.h"
|
|
#include "UI/Window/UIWindowMgr.h"
|
|
|
|
// GLOBAL: gl_24604
|
|
int g_dialogKeyboardEnabled;
|
|
|
|
// GLOBAL: gl_24605
|
|
int g_dialogKeyboardBlocked;
|
|
|
|
// OFFSET: 0x00A90950
|
|
// FUNCTION: fn_17154
|
|
bool UIWindowMgr::ProcessDialogKey(int, int key) {
|
|
if (g_dialogKeyboardEnabled == 0 || g_dialogKeyboardBlocked != 0) {
|
|
return false;
|
|
}
|
|
|
|
if (!this->window_01E8) {
|
|
return false;
|
|
}
|
|
|
|
switch (key) {
|
|
case 0x100001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 0, 1, 0, 0);
|
|
return false;
|
|
case 0x110001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 1, 1, 0, 0);
|
|
return false;
|
|
case 0x120001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 2, 1, 0, 0);
|
|
return false;
|
|
case 0x130001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 3, 1, 0, 0);
|
|
return false;
|
|
case 0x140001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 4, 1, 0, 0);
|
|
return false;
|
|
case 0x150001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 5, 1, 0, 0);
|
|
return false;
|
|
case 0x160001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 6, 1, 0, 0);
|
|
return false;
|
|
case 0x170001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 7, 1, 0, 0);
|
|
return false;
|
|
case 0x180001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 8, 1, 0, 0);
|
|
return false;
|
|
case 0x1E0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 0, 2, 0, 0);
|
|
return false;
|
|
case 0x1F0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 1, 2, 0, 0);
|
|
return false;
|
|
case 0x200001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 2, 2, 0, 0);
|
|
return false;
|
|
case 0x210001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 3, 2, 0, 0);
|
|
return false;
|
|
case 0x220001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 4, 2, 0, 0);
|
|
return false;
|
|
case 0x230001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 5, 2, 0, 0);
|
|
return false;
|
|
case 0x240001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 6, 2, 0, 0);
|
|
return false;
|
|
case 0x250001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 7, 2, 0, 0);
|
|
return false;
|
|
case 0x260001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 8, 2, 0, 0);
|
|
return false;
|
|
case 0x2C0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 0, 0, 0, 0);
|
|
return false;
|
|
case 0x2D0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 1, 0, 0, 0);
|
|
return false;
|
|
case 0x2E0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 2, 0, 0, 0);
|
|
return false;
|
|
case 0x2F0001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 3, 0, 0, 0);
|
|
return false;
|
|
case 0x300001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 4, 0, 0, 0);
|
|
return false;
|
|
case 0x310001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 5, 0, 0, 0);
|
|
return false;
|
|
case 0x320001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 6, 0, 0, 0);
|
|
return false;
|
|
case 0x330001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 7, 0, 0, 0);
|
|
return false;
|
|
case 0x340001:
|
|
this->window_01E8->SendMsg(nullptr, 41, 8, 0, 0, 0);
|
|
return false;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00A91450
|
|
// FUNCTION: fn_17160
|
|
UIWindow* WindowDialogs::Top() const {
|
|
return this->modal.empty() ? nullptr : this->modal.back();
|
|
}
|
|
|
|
// OFFSET: 0x00A91120
|
|
// FUNCTION: fn_17155
|
|
void WindowDialogs::RestoreInput() {
|
|
for (UIWindow* window : this->dialog.retirement.rendered) {
|
|
if (window->geometry.visible == 0) {
|
|
continue;
|
|
}
|
|
|
|
for (UIWindow* child : window->m_children) {
|
|
if (!child->Slot05() || child->geometry.x <= 0 || child->geometry.y <= 0) {
|
|
continue;
|
|
}
|
|
|
|
if (this->input) {
|
|
this->input->Slot24(child->Slot06() == this->input);
|
|
}
|
|
|
|
this->input = child->Slot06();
|
|
|
|
if (this->input) {
|
|
this->input->Slot23();
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
// OFFSET: 0x00A901E0
|
|
// FUNCTION: fn_17153
|
|
int WindowDialogs::Confirm(
|
|
const char* text, int type, bool defaultAccept, bool replace, int timeout, const char* caption, int width, int height, unsigned char protect
|
|
) {
|
|
if (this->suppressed) {
|
|
return 185;
|
|
}
|
|
|
|
if (UIWindow* active = this->Top()) {
|
|
if (active->SendMsg(nullptr, 158, 0, 0, 0, 0) == 0 && replace) {
|
|
active->SendMsg(nullptr, 57, reinterpret_cast<std::intptr_t>(text), 0, 0, 0);
|
|
}
|
|
|
|
return 185;
|
|
}
|
|
|
|
auto* box = new UIMessageBox(this->windows, this->dialog);
|
|
this->latest = box;
|
|
box->Configure(text, type, defaultAccept, timeout, caption, width, height, 1, nullptr);
|
|
|
|
if (protect == 1) {
|
|
box->SendMsg(nullptr, 157, 1, 0, 0, 0);
|
|
}
|
|
|
|
this->dialog.retirement.rendered.push_front(box);
|
|
|
|
if (this->capture) {
|
|
this->suspendedRoots.insert(this->capture->Root());
|
|
}
|
|
|
|
this->capture = nullptr;
|
|
|
|
if (this->input) {
|
|
this->input->Slot24(0);
|
|
}
|
|
|
|
this->input = nullptr;
|
|
this->alternateResult = 0;
|
|
this->modal.push_back(box);
|
|
int response = 184;
|
|
|
|
if (this->immediate == 0) {
|
|
ModalFramePump* pump = this->mode;
|
|
|
|
for (;;) {
|
|
if (this->result != 0) {
|
|
if (UIWindow* active = this->Top()) {
|
|
active->Show(0);
|
|
this->dialog.retirement.Schedule(active);
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
response = this->result;
|
|
|
|
if (this->modal.empty()) {
|
|
this->result = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (this->alternateResult != 0) {
|
|
if (UIWindow* active = this->Top()) {
|
|
active->Show(0);
|
|
this->dialog.retirement.Schedule(active);
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
response = this->alternateResult;
|
|
this->alternateResult = 0;
|
|
break;
|
|
}
|
|
|
|
if (pump) {
|
|
pump->Frame();
|
|
pump = this->mode;
|
|
}
|
|
|
|
const auto option = this->frameOptions.find(20);
|
|
|
|
if (option != this->frameOptions.end() && option->second > 0) {
|
|
this->result = 0;
|
|
this->alternateResult = 0;
|
|
|
|
while (!this->modal.empty()) {
|
|
this->dialog.retirement.Schedule(this->modal.back());
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (this->immediate != 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
this->RestoreInput();
|
|
return response;
|
|
}
|
|
|
|
// OFFSET: 0x00AA20F0
|
|
// FUNCTION: fn_17211
|
|
void WindowDialogs::AddMessageBox(
|
|
const char* text, int type, bool defaultAccept, int, int timeout, const char* caption, int width, int height, const char* icon, bool track
|
|
) {
|
|
std::vector<UIWindow*>& boxes = this->dialog.retirement.messageBoxes;
|
|
|
|
if (boxes.size() > 5) {
|
|
MessageBoxA(hWnd, "Max MessageBox Count", "ERROR", 0);
|
|
return;
|
|
}
|
|
|
|
auto* box = new UIMessageBox(this->windows, this->dialog);
|
|
box->Configure(text, type, defaultAccept, timeout, caption, width, height, 0, icon);
|
|
this->dialog.retirement.rendered.push_back(box);
|
|
|
|
if (track) {
|
|
boxes.push_back(box);
|
|
}
|
|
|
|
this->capture = nullptr;
|
|
|
|
if (this->input) {
|
|
this->input->Slot24(0);
|
|
}
|
|
|
|
this->input = nullptr;
|
|
}
|
|
|
|
// OFFSET: 0x00AA2230
|
|
// FUNCTION: fn_17212
|
|
int WindowDialogs::RunModal(UIWindow* window) {
|
|
if (!window) {
|
|
return 185;
|
|
}
|
|
|
|
if (this->capture) {
|
|
this->suspendedRoots.insert(this->capture->Root());
|
|
}
|
|
|
|
this->capture = nullptr;
|
|
|
|
if (this->input) {
|
|
this->input->Slot24(0);
|
|
}
|
|
|
|
this->input = nullptr;
|
|
this->alternateResult = 0;
|
|
this->modal.push_back(window);
|
|
int response = 184;
|
|
|
|
if (this->immediate == 0) {
|
|
ModalFramePump* pump = this->mode;
|
|
|
|
for (;;) {
|
|
if (this->result != 0) {
|
|
if (UIWindow* active = this->Top()) {
|
|
active->Show(0);
|
|
this->dialog.retirement.Schedule(active);
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
response = this->result;
|
|
|
|
if (this->modal.empty()) {
|
|
this->result = 0;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (this->alternateResult != 0) {
|
|
if (UIWindow* active = this->Top()) {
|
|
active->Show(0);
|
|
this->dialog.retirement.Schedule(active);
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
response = this->alternateResult;
|
|
this->alternateResult = 0;
|
|
break;
|
|
}
|
|
|
|
if (pump) {
|
|
pump->Frame();
|
|
pump = this->mode;
|
|
}
|
|
|
|
const auto option = this->frameOptions.find(20);
|
|
|
|
if (option != this->frameOptions.end() && option->second > 0) {
|
|
this->result = 0;
|
|
this->alternateResult = 0;
|
|
|
|
while (!this->modal.empty()) {
|
|
this->dialog.retirement.Schedule(this->modal.back());
|
|
this->modal.pop_back();
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
if (this->immediate != 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
this->RestoreInput();
|
|
return response;
|
|
}
|