rodecomp/Source/UI/Party/UIApplyForPartyWnd.cpp
ragnarok-clanker 316d625be1 Maintenance: [forced, user-approved] Resubmit of #10124 (returned only for 143 changed peer-confirmed scores). Remove fabricated UIFr
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
2026-11-02 17:48:48 +00:00

231 lines
8.1 KiB
C++

#include "Contents/Party/AdventurerAgencyMgr.h"
#include "Contents/Party/AgencyRequestContext.h"
#include "Render/DeviceContext/DeviceContext.h"
#include "Render/Text/TextContext.h"
#include "Resource/Bitmap/BitmapResource.h"
#include "Resource/ResourceMgr.h"
#include "UI/Text/TextFitting.h"
#include "UI/Text/TextWrapping.h"
#include "UI/Party/UIApplyForPartyWnd.h"
#include "UI/Buttons/UIBasicButton.h"
#include "UI/Buttons/UIBitmapButton.h"
#include "UI/Party/UIPartyInfoWnd.h"
#include "UI/Text/UIStaticText.h"
#include "UI/Window/WindowManagerWindows.h"
#include <cstdio>
namespace {
constexpr char prefix[] = "유저인터페이스\\";
}
// OFFSET: 0x007BAD00
// FUNCTION: fn_09275
UIApplyForPartyWnd::UIApplyForPartyWnd(UIWindowContext& windows, UIApplyForPartyContext& application)
: UIFrameWnd(windows, 0), m_application(&application) {
}
// OFFSET: 0x007BB610
UIApplyForPartyWnd::~UIApplyForPartyWnd() = default;
// OFFSET: 0x007C2400
// FUNCTION: fn_09325
void UIApplyForPartyWnd::Slot11() {
if (this->saved) {
this->saved->width = this->geometry.width;
this->saved->height = this->geometry.height;
this->saved->x = this->geometry.x;
this->saved->y = this->geometry.y;
}
}
// OFFSET: 0x007BD970
// FUNCTION: fn_09299
void UIApplyForPartyWnd::Slot15(int, int) {
auto& controls = this->m_application->buttons;
const int messages[] = {3374, 3373, 3045};
const int ids[] = {381, 271, 201};
const int positions[] = {51, 108, 173};
for (int index = 0; index < 3; ++index) {
auto* button = new UIBasicButton(*this->m_context, controls);
const char* label = controls.services.MessageText(messages[index]);
const int width = this->TextWidth(label, 0, 0, 12, 0, 0);
button->Configure(width + 10, label);
button->Move(positions[index], 165);
button->SetId(ids[index]);
this->AddChild(button);
}
std::vector<std::string> lines;
WrapPlainText(controls.services.MessageText(3370), lines, 40, this->m_application->codePage);
int y = 136;
for (const auto& line : lines) {
auto* label = new UIStaticText(*this->m_context, controls);
label->SetSize(this->geometry.width - 18, 15);
label->Move(9, y);
label->SetText(line.c_str(), 0);
label->fontHeight = 11;
label->red = 255;
label->green = 0;
label->blue = 0;
this->AddChild(label);
y += 12;
}
auto* close = new UIBitmapButton(*this->m_context, controls);
const std::string off = std::string(prefix) + "basic_interface\\big_sys_close_off.bmp";
const std::string on = std::string(prefix) + "basic_interface\\big_sys_close_on.bmp";
close->SetBitmap(off.c_str(), 0, 0);
close->SetBitmap(on.c_str(), 1, 0);
close->SetBitmap(on.c_str(), 2, 0);
close->SetSize(close->BitmapWidth(), close->BitmapHeight());
close->Move(this->geometry.width - close->BitmapWidth(), 0);
close->SetId(201);
close->SetTooltip("");
this->AddChild(close);
}
// OFFSET: 0x007C1D10
// FUNCTION: fn_09319
void UIApplyForPartyWnd::SetInfo(CAdvenPartyInfo value) {
this->info = value;
this->Invalidate();
}
// OFFSET: 0x007BF5A0
// FUNCTION: fn_09303
void UIApplyForPartyWnd::Paint() {
auto& controls = this->m_application->buttons;
this->geometry.surface->Fill(nullptr, 0xFFFF00FFu);
const auto load = [&](const char* name) { return static_cast<CBitmapRes*>(controls.resources.Load((std::string(prefix) + name).c_str())); };
const auto* background = load("UIadventurerAgency\\bg_agency_register.bmp");
this->DrawBitmap(0, 0, background ? &background->image : nullptr, false);
int leftWidth = 0;
int rightWidth = 0;
int titleHeight = 0;
if (const auto* left = load("basic_interface\\titlebar_left.bmp")) {
this->DrawBitmap(0, 0, &left->image, false);
leftWidth = left->image.width;
}
if (const auto* right = load("basic_interface\\titlebar_right.bmp")) {
rightWidth = right->image.width;
this->DrawBitmap(this->geometry.width - rightWidth, 0, &right->image, false);
}
if (const auto* middle = load("basic_interface\\titlebar_mid.bmp")) {
titleHeight = middle->image.height;
const int extent = this->geometry.width - rightWidth - leftWidth;
const int tiles = extent / middle->image.width + (extent % middle->image.width != 0);
for (int index = 0; index < tiles; ++index) {
this->DrawBitmap(leftWidth, 0, &middle->image, false);
leftWidth += middle->image.width;
}
}
const char* caption = controls.services.MessageText(3368);
this->DrawTextAt(19, titleHeight - 13, caption, 0, 0, 12, 0xFFFFFF, 0, 0);
this->DrawTextAt(18, titleHeight - 14, caption, 0, 0, 12, 0, 0, 0);
const auto* base = load("basic_interface\\sys_base_off.bmp");
this->DrawBitmap(3, 3, base ? &base->image : nullptr, true);
const auto text = [&](int x, int y, const char* value) { this->DrawTextAt(x, y, value, 0, 0, 12, 0, 0, 0); };
text(10, 25, controls.services.MessageText(3415));
const std::string fitted = FitText(*this->geometry.surface, this->info.characterName, 119);
text(60, 25, fitted.c_str());
text(10, 49, controls.services.MessageText(408));
char levels[10] = {};
_snprintf_s(levels, sizeof(levels), _TRUNCATE, "%d~%d", this->info.minimumLevel, this->info.maximumLevel);
text(60, 49, levels);
text(10, 73, controls.services.MessageText(3369));
text(60, 73, UIPartyInfoWnd::TypeName(this->info.type, controls.services));
text(10, 97, controls.services.MessageText(504));
const char* jobs[] = {"def", "heal", "atk", "buf"};
const bool selected[] = {this->info.tanker, this->info.healer, this->info.dealer, this->info.assist};
for (int index = 0; index < 4; ++index) {
const std::string name = std::string("UIadventurerAgency\\btn_job_") + jobs[index] + (selected[index] ? "_on.bmp" : "_off.bmp");
const auto* icon = load(name.c_str());
this->DrawBitmap(60 + index * 18, 95, icon ? &icon->image : nullptr, false);
}
text(10, 121, controls.services.MessageText(3359));
text(60, 121, this->info.memo.c_str());
}
// OFFSET: 0x007BFCC0
// FUNCTION: fn_09309
void UIApplyForPartyWnd::Slot28(int x, int y) {
if (static_cast<unsigned>(y) - 95u > 16u) {
return;
}
const int positions[] = {60, 78, 96, 114};
const int messages[] = {3420, 3491, 3444, 3508};
for (int index = 0; index < 4; ++index) {
if (x > positions[index] && x < positions[index] + 16) {
const char* label = this->m_application->buttons.services.MessageText(messages[index]);
if (*label != '\0') {
int screenX = positions[index];
int screenY = 75;
this->ToScreen(screenX, screenY);
this->m_application->buttons.services.Tooltip(label, screenX, screenY, -1, false, true);
}
break;
}
}
}
// OFFSET: 0x007C11E0
// FUNCTION: fn_09313
int UIApplyForPartyWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a, std::intptr_t b, std::intptr_t c, std::intptr_t d) {
if (message == 6) {
auto& owner = *this->m_application;
switch (static_cast<int>(a)) {
case 201:
g_windowMgr.CloseWindow(345);
break;
case 271:
g_adventurerAgencyMgr->RequestInfo(this->info.accountId, owner.requests, owner.completion);
break;
case 381: {
const std::string name = this->info.characterName;
const char* relationship = owner.rows.services.IsFriend(name) ? owner.buttons.services.MessageText(102) : nullptr;
if (owner.rows.services.IsGuildMember(this->info.accountId)) {
relationship = "GuildMember";
}
const std::string code = owner.rows.services.CharacterCode(this->info.characterId);
owner.rows.services.ShowCharacter(name.c_str(), relationship, code.c_str());
break;
}
default:
break;
}
return 0;
}
if (message == 34) {
this->saved = reinterpret_cast<PartyBoardPlacement*>(a);
const auto& owner = *this->m_application;
if (this->saved->width <= 0 || this->saved->height <= 0 || this->saved->x < 0 || this->saved->x > owner.screenWidth - this->saved->width ||
this->saved->y < 0 || this->saved->y > owner.screenHeight - this->saved->height) {
*this->saved = {200, 200, 220, 190};
}
this->Move(this->saved->x, this->saved->y);
return 0;
}
return this->UIFrameWnd::SendMsg(sender, message, a, b, c, d);
}