From b13603600dd18cd79c2010eb7af281f4edcbb148 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Fri, 30 Oct 2026 17:53:16 +0000 Subject: [PATCH] Decompile 3 functions in Source/UI/Clan/UIClanWnd.cpp, Source/UI/Clan/UIClanWnd.h Batch #5929 by ragnarok-clanker: 0 byte-identical, 3 confirmed by peer review. - fn_10630 UIClanInfoManageWnd::Paint: logic confirmed by peer review - fn_10631 UIClanWnd::Paint: logic confirmed by peer review - fn_10633 UIClanInfoManageWnd::SendMsg: logic confirmed by peer review Peer-reviewed-by: superintelligence, KWDev, SapitoSucio Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- Source/UI/Clan/UIClanWnd.cpp | 139 +++++++++++++++++++++++++++++++++++ Source/UI/Clan/UIClanWnd.h | 2 + 2 files changed, 141 insertions(+) diff --git a/Source/UI/Clan/UIClanWnd.cpp b/Source/UI/Clan/UIClanWnd.cpp index 49f27824..d49c1cf0 100644 --- a/Source/UI/Clan/UIClanWnd.cpp +++ b/Source/UI/Clan/UIClanWnd.cpp @@ -1,5 +1,6 @@ #include "UI/Clan/UIClanWnd.h" #include "Contents/ClanInfo.h" +#include "Contents/MapInfoMgr.h" #include "Contents/MessageTable.h" #include "Contents/UserData/NormalItemSlots.h" #include "Resource/Bitmap/BitmapResource.h" @@ -8,6 +9,7 @@ #include "Resource/TextureNames.h" #include "UI/Buttons/UIButton.h" #include "UI/Text/UIStaticText.h" +#include "UI/Window/UIWindowMgr.h" #include #include @@ -41,7 +43,119 @@ void UIClanInfoManageWnd::Slot15(int width, int height) { this->LoadEmblem(); } +// OFFSET: 0x0084D0D0 +// FUNCTION: fn_10630 +void UIClanInfoManageWnd::Paint() { + UIClanWnd::Paint(); + auto& controls = *this->m_controls; + char text[1024]; + std::memset(text, 0, sizeof(text)); + std::sprintf(text, "%s : %s", LookupMessage(2357), g_clanInfo->m_clanName.c_str()); + this->DrawTextAt(controls.fonts, controls.locale, 8, 49, text, 0, 0, 12, 0, 0, 0); + std::sprintf(text, "%s : %d", LookupMessage(2356), g_clanInfo->unknown_0034); + this->DrawTextAt(controls.fonts, controls.locale, 8, 65, text, 0, 0, 12, 0, 0, 0); + std::sprintf(text, "%s : %s", LookupMessage(2362), g_clanInfo->m_masterName.c_str()); + this->DrawTextAt(controls.fonts, controls.locale, 8, 81, text, 0, 0, 12, 0, 0, 0); + std::sprintf(text, "%s : ", LookupMessage(2363)); + this->DrawTextAt(controls.fonts, controls.locale, 8, 97, text, 0, 0, 12, 0, 0, 0); + std::sprintf(text, "%s", "유저인터페이스\\basic_interface\\grp_online.bmp"); + CBitmapRes* bitmap = static_cast(ResourceMgr::Instance().Load(Resolve(text))); + this->DrawBitmap(128, 95, bitmap ? &bitmap->image : nullptr, true); + std::sprintf(text, " %d", g_clanInfo->m_connectedMembers); + this->DrawTextAt(controls.fonts, controls.locale, 138, 97, text, 0, 0, 12, 0, 0, 0); + + { + std::string map = g_clanInfo->m_mapName; + if (map.size() > 4) { + map.replace(map.find(".gat"), 4, ".rsw"); + } + map = g_mapInfoMgr->GetDisplayName(std::string(map.c_str())); + std::sprintf(text, "%s : %s", LookupMessage(2364), map.c_str()); + this->DrawTextAt(controls.fonts, controls.locale, 8, 113, text, 0, 0, 12, 0, 0, 0); + } + + if (g_clanInfo->m_clanId != 0) { + char path[256]; + std::memset(path, 0, sizeof(path)); + std::sprintf(path, "유저인터페이스\\clan_system\\clan_illust%02d.bmp", g_clanInfo->m_clanId); + bitmap = static_cast(ResourceMgr::Instance().Load(Resolve(path))); + if (!bitmap) { + bitmap = static_cast(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\illust\\펫_포포링.bmp"))); + } + this->DrawBitmap(8, 145, bitmap ? &bitmap->image : nullptr, true); + } else { + bitmap = static_cast(ResourceMgr::Instance().Load(Resolve("유저인터페이스\\illust\\펫_포포링.bmp"))); + this->DrawBitmap(50, 145, bitmap ? &bitmap->image : nullptr, true); + } + + std::sprintf(text, "%s", LookupMessage(2358)); + this->DrawTextAt(controls.fonts, controls.locale, 200, 65, text, 0, 0, 12, 0, 0, 0); + unsigned red, green, blue; + SkinPaletteChannels(ResourceMgr::Instance(), 6, 2, red, green, blue); + this->FillRegion(279, 64, 26, 26, RGB(red, green, blue)); + if (g_clanInfo->m_clanId != 0) { + this->DrawBitmap(280, 65, this->m_emblem ? &this->m_emblem->image : nullptr, true); + } + std::sprintf(text, "%s", LookupMessage(2359)); + this->DrawTextAt(controls.fonts, controls.locale, 200, 139, text, 0, 0, 12, 0, 0, 0); + std::sprintf(text, "%s", LookupMessage(2360)); + this->DrawTextAt(controls.fonts, controls.locale, 200, 213, text, 0, 0, 12, 0, 0, 0); + + SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, red, green, blue); + this->FillRegion(200, 155, 168, 48, RGB(red, green, blue)); + int row = 0; + int y = 157; + for (const auto& relation : g_clanInfo->m_relations) { + if (y >= 205) { + break; + } + if (relation.first == 0) { + if (row == this->unknown_00BC) { + SkinPaletteChannels(ResourceMgr::Instance(), 6, 2, red, green, blue); + this->FillRegion(204, y, 80, 16, RGB(red, green, blue)); + } + this->DrawTextAt(controls.fonts, controls.locale, 204, y, relation.second.c_str(), 0, 0, 12, 0, 0, 0); + ++row; + y += 16; + } + } + + SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, red, green, blue); + this->FillRegion(200, 229, 168, 48, RGB(red, green, blue)); + row = 0; + y = 231; + for (const auto& relation : g_clanInfo->m_relations) { + if (y >= 279) { + break; + } + if (relation.first == 1) { + if (row == this->unknown_00C0) { + SkinPaletteChannels(ResourceMgr::Instance(), 6, 2, red, green, blue); + this->FillRegion(204, y, 80, 16, RGB(red, green, blue)); + } + this->DrawTextAt(controls.fonts, controls.locale, 204, y, relation.second.c_str(), 0, 0, 12, 0, 0, 0); + ++row; + y += 16; + } + } +} + // OFFSET: 0x0084D8F0 +// FUNCTION: fn_10631 +void UIClanWnd::Paint() { + unsigned red, green, blue; + SkinPaletteChannels(ResourceMgr::Instance(), 10, 2, red, green, blue); + this->FillRegion(0, 17, this->geometry.width, 24, RGB(red, green, blue)); + SkinPaletteChannels(ResourceMgr::Instance(), 2, 2, red, green, blue); + this->FillRegion(1, 18, 64, 23, RGB(red, green, blue)); + auto& controls = *this->m_controls; + this->DrawTitleBar(controls.fonts, controls.locale, false, "", 0); + SkinPaletteChannels(ResourceMgr::Instance(), 14, 6, red, green, blue); + this->FillRegion(0, 41, this->geometry.width, this->geometry.height - 41, RGB(red, green, blue)); + SkinPaletteChannels(ResourceMgr::Instance(), 2, 2, red, green, blue); + this->FillRegion(1, 41, this->geometry.width - 2, this->geometry.height - 41, RGB(red, green, blue)); + this->DrawButtonBar(2, 0, 1); +} // OFFSET: 0x0084DA30 // FUNCTION: fn_10632 @@ -49,6 +163,31 @@ void UIClanInfoManageWnd::Slot25(int x, int y) { UIFrameWnd::Slot25(x, y); } +// OFFSET: 0x0084DA40 +// FUNCTION: fn_10633 +int UIClanInfoManageWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a1, std::intptr_t a2, std::intptr_t a3, std::intptr_t a4) { + if (message == 6) { + if (a1 == 201) { + g_windowMgr.CloseWindow(237); + } + return 0; + } + if (message == 60) { + this->LoadEmblem(); + this->InvalidateChildren(); + return 0; + } + if (message == 34) { + this->m_saved = reinterpret_cast(a1); + if (!this->m_saved->IsValid()) { + this->m_saved->Reset(); + } + this->Move(this->m_saved->x, this->m_saved->y); + return 0; + } + return UIFrameWnd::SendMsg(sender, message, a1, a2, a3, a4); +} + // OFFSET: 0x0084DAE0 // FUNCTION: fn_10634 int UIClanWnd::SendMsg(UIWindow* sender, int message, std::intptr_t a1, std::intptr_t a2, std::intptr_t a3, std::intptr_t a4) { diff --git a/Source/UI/Clan/UIClanWnd.h b/Source/UI/Clan/UIClanWnd.h index 40aea824..725c7509 100644 --- a/Source/UI/Clan/UIClanWnd.h +++ b/Source/UI/Clan/UIClanWnd.h @@ -24,6 +24,8 @@ class UIClanInfoManageWnd : public UIClanWnd { public: void Slot15(int width, int height) override; void Slot25(int x, int y) override; + void Paint() override; + int SendMsg(UIWindow* sender, int message, std::intptr_t argument1, std::intptr_t argument2, std::intptr_t argument3, std::intptr_t argument4) override; int Slot53() override; __declspec(noinline) void LoadEmblem();