Batch #10217 by ragnarok-clanker: forced by an admin (236 lower score(s), 885 changed function(s)); checked with 558 compiled unit(s), including every includer of Source/Client/Mode/ModeTooltip.h, Source/Contents/SignBoard/SignBoard.h, Source/UI/Acceptance/UIJoinPartyAcceptWnd.h, Source/UI/AdventureGuide/UIAdventureGuide.h, Source/UI/Buttons/UIBasicButton.h, Source/UI/Buttons/UIBitmapButton.h, Source/UI/Buttons/UIBmpRadioBtn.h, Source/UI/Buttons/UIBmpTextButton.h, Source/UI/Buttons/UIBmpTextButton2.h, Source/UI/Buttons/UIButton.h, Source/UI/Buttons/UICashEmotionSprBtn.h, Source/UI/Buttons/UICheckBox.h, Source/UI/Buttons/UIItemMoveInfo.h, Source/UI/Buttons/UIItemTagButton.h, Source/UI/Buttons/UIJobSlotButton.h, Source/UI/Buttons/UINaviLinkButton.h, Source/UI/Buttons/UINoneVisibleButton.h, Source/UI/Buttons/UIRadioBtn.h, Source/UI/Buttons/UIRadioButton.h, Source/UI/Buttons/UIReplayButton.h, Source/UI/Buttons/UISlotBmpButton.h, Source/UI/Buttons/UISpriteButton.h, Source/UI/Buttons/UITVBitmapButton.h, Source/UI/Buttons/UITVTextButton.h, Source/UI/Buttons/UITagButton.h, Source/UI/Buttons/UITextButton.h, Source/UI/CashEmotion/UICashEmotionPack.h, Source/UI/CashEmotion/UICashEmotionPiece.h, Source/UI/CashShop/UICashShopWnd.h, Source/UI/Chat/UIChatRoomMakeWnd.h, Source/UI/Chat/UIChatRoomTitle.h, Source/UI/Chat/UISubChatHisWnd.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/UIEmailAddressWnd.h, Source/UI/Dialogs/UIGraffiStrboxWnd.h, Source/UI/Dialogs/UILoadingWnd.h, Source/UI/Dialogs/UIMenuWnd.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/UIWaitDBSaveWnd.h, Source/UI/Dialogs/UIWaitWnd.h, Source/UI/Edit/UICandidateWnd.h, Source/UI/Edit/UIEditBoxEx.h, Source/UI/Edit/UIEditCtrl.h, Source/UI/Edit/UIEditCtrl_Currency.h, Source/UI/Enchant/EnchantUI.h, Source/UI/EntryQueue/UIEntryQueueWnd.h, Source/UI/FrameSkin.h, Source/UI/GameSettings/GameSettingsUI.h, Source/UI/Guild/UIGuild_Storage_Log.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/Items/MergeItemWnd.h, Source/UI/Items/UICardItemIllustWnd.h, Source/UI/Items/UIEquipWnd.h, Source/UI/Items/UIGameItem.h, Source/UI/Items/UIIllustWnd.h, Source/UI/Items/UIItemCollectionWnd.h, Source/UI/Items/UIItemIdentifyWnd.h, Source/UI/Items/UINotifyItemObtainWnd.h, Source/UI/Items/UISpellListWnd.h, Source/UI/Items/UISwapEquipmentWnd.h, Source/UI/Lists/TableBox.h, Source/UI/Lists/UIChatHisBox.h, Source/UI/Lists/UIComboBox.h, Source/UI/Lists/UIComboBoxDefWnd.h, Source/UI/Lists/UIComboBoxEx.h, Source/UI/Lists/UIComboBoxV2Wnd.h, Source/UI/Lists/UIComboBoxWnd.h, Source/UI/Lists/UIDropDownBox.h, Source/UI/Lists/UIItemStoreComboBox.h, Source/UI/Lists/UIListBox.h, Source/UI/Lists/UIListBoxEx.h, Source/UI/Lists/UIListBoxNavi.h, Source/UI/Lists/UIListBoxNaviSearch.h, Source/UI/Lists/UIListBoxTemplate.h, Source/UI/Lists/UIMemberListBox.h, Source/UI/Lists/UIPackageBoxNameList.h, Source/UI/Lists/UIReplayListBox.h, Source/UI/Lists/UIScrollBar.h, Source/UI/Lists/UIScrollBarNavi.h, Source/UI/Lists/UIScrollBarVariants.h, Source/UI/Lists/UITabControl.h, Source/UI/Lists/UIThumb.h, Source/UI/Lists/UITreeView.h, Source/UI/Lists/UIVScrollBar.h, Source/UI/Menu/UIMenuIconWnd.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/UIPartyInfoWnd.h, Source/UI/Party/UIPartySettingWnd.h, Source/UI/Party/UIRegisterPartyWnd.h, Source/UI/Party/UIRequestJoinPartyWnd.h, Source/UI/Quest/UIOngoingQuestInfo.h, Source/UI/Quest/UIQuestDisplay.h, Source/UI/Quest/UIRecommendedQuestInfo.h, Source/UI/Quest/UIRenewQuestUI.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/UIMerchantShopTitle.h, Source/UI/Shop/UINoticeMessageBox_LockSellItem.h, Source/UI/Shop/UInCash_CallWnd.h, Source/UI/Shortcuts/UIQuickSlotWnd.h, Source/UI/Skill/UISkillDescribeWnd.h, Source/UI/Skill/UISkillListWnd.h, Source/UI/Skill/UISkillNameChangeWnd.h, Source/UI/SkillDelayInfo/SkillDelayInfo.h, Source/UI/Status/UIStatusWnd.h, Source/UI/StylingShop/UIStylingShopWnd.h, Source/UI/Text/UIAchWnd.h, Source/UI/Text/UIBalloonText.h, Source/UI/Text/UICharInfoBalloonText.h, Source/UI/Text/UINameBalloonText.h, Source/UI/Text/UIStaticText.h, Source/UI/Text/UIStaticTextControl.h, Source/UI/Text/UIStaticText_LF.h, Source/UI/Text/UIString.h, Source/UI/Text/UITagTextViewer.h, Source/UI/Text/UITextViewer.h, Source/UI/Text/UITextViewerControl.h, Source/UI/Text/UITransBalloonText.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/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/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/UIControl.h, Source/UI/Window/UIDebuffRemoveWnd.h, Source/UI/Window/UIFrameWnd.h, Source/UI/Window/UIHomunInfoWnd.h, Source/UI/Window/UIHotKeyWnd.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/UIMonsterDisplayWnd.h, Source/UI/Window/UIMonsterInfoWnd.h, Source/UI/Window/UINewMakeCharWnd.h, Source/UI/Window/UINormalMB.h, Source/UI/Window/UINoticeWnd.h, Source/UI/Window/UIPadding.h, Source/UI/Window/UIPayConfirmWnd.h, Source/UI/Window/UIPetInfoWnd.h, Source/UI/Window/UIReplayControlWnd.h, Source/UI/Window/UIReplayRECControlWnd.h, Source/UI/Window/UIResizer.h, Source/UI/Window/UISelectReplayDataWnd.h, Source/UI/Window/UISelectServerWnd.h, Source/UI/Window/UITab.h, Source/UI/Window/UITalkboxTrapInputWnd.h, Source/UI/Window/UIWindow.h, Source/UI/Window/UIWindowMgr.h, Source/UI/Window/UIWordDisplayWnd.h.
232 lines
7.8 KiB
C++
232 lines
7.8 KiB
C++
#include "Client/Session.h"
|
|
#include "Client/Mode/ModeTooltip.h"
|
|
#include "File/ShortcutFilename.h"
|
|
#include "Render/Renderer.h"
|
|
#include "UI/Window/UINewSelectCharWnd.h"
|
|
#include "Contents/MessageTable.h"
|
|
#include "UI/Window/UIWindowMgr.h"
|
|
#include "Contents/Party/AdventurerAgencyMgr.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()
|
|
: UIFrameWnd(0) {
|
|
}
|
|
|
|
// 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) {
|
|
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();
|
|
const char* label = LookupMessage(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(LookupMessage(3370), lines, 40);
|
|
int y = 136;
|
|
|
|
for (const auto& line : lines) {
|
|
auto* label = new UIStaticText();
|
|
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();
|
|
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() {
|
|
this->geometry.surface->Fill(nullptr, 0xFFFF00FFu);
|
|
const auto load = [&](const char* name) { return static_cast<CBitmapRes*>(ResourceMgr::Instance().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 = LookupMessage(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, LookupMessage(3415));
|
|
const std::string fitted = FitText(*this->geometry.surface, this->info.characterName, 119);
|
|
text(60, 25, fitted.c_str());
|
|
text(10, 49, LookupMessage(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, LookupMessage(3369));
|
|
text(60, 73, UIPartyInfoWnd::TypeName(this->info.type));
|
|
text(10, 97, LookupMessage(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, LookupMessage(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 = LookupMessage(messages[index]);
|
|
|
|
if (*label != '\0') {
|
|
int screenX = positions[index];
|
|
int screenY = 75;
|
|
this->ToScreen(screenX, screenY);
|
|
static_cast<ModeTooltip*>(g_charViewMode)->Show(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) {
|
|
switch (static_cast<int>(a)) {
|
|
case 201:
|
|
g_windowMgr.CloseWindow(345);
|
|
break;
|
|
case 271:
|
|
g_adventurerAgencyMgr->RequestInfo(this->info.accountId);
|
|
break;
|
|
case 381: {
|
|
const std::string name = this->info.characterName;
|
|
const char* relationship = g_windowMgr.IsFriend(name.c_str()) ? LookupMessage(102) : nullptr;
|
|
|
|
if (g_session.IsGuildMemberAccount(this->info.accountId)) {
|
|
relationship = "GuildMember";
|
|
}
|
|
|
|
const std::string code = ShortcutFilename(this->info.characterId);
|
|
g_windowMgr.SendNotice(14, reinterpret_cast<std::intptr_t>(name.c_str()), reinterpret_cast<std::intptr_t>(relationship), reinterpret_cast<std::intptr_t>(code.c_str()), 0, 0);
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
if (message == 34) {
|
|
this->saved = reinterpret_cast<PartyBoardPlacement*>(a);
|
|
|
|
if (this->saved->width <= 0 || this->saved->height <= 0 || this->saved->x < 0 || this->saved->x > g_renderer->viewport.width - this->saved->width ||
|
|
this->saved->y < 0 || this->saved->y > g_renderer->viewport.height - 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);
|
|
}
|