From 85eeed6fea1dcff022cd5f507ad472623c7a01b9 Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Fri, 30 Oct 2026 10:37:42 +0000 Subject: [PATCH] Decompile 6 functions in Source/Contents/UserData/NormalItemSlots.cpp, Source/UI/Navigation/UINavigationV4Wnd.h, ... Batch #5350 by eAthena: 1 byte-identical, 5 confirmed by peer review. - fn_13738 NavigationWindowInfo::Clamp: logic confirmed by peer review - fn_13745 UIParaResultWnd::AddItem: logic confirmed by peer review - fn_13746 UIParaResultWnd::AddItem: logic confirmed by peer review - fn_13747 UIParaItemPurchaseWnd::Slot10: logic confirmed by peer review - fn_13748 UIParaItemShopWnd::Slot10: logic confirmed by peer review - fn_13749 UIParaResultWnd::Slot10: byte-identical Peer-reviewed-by: meitogi, alisonrag, Snow Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). Adds to the build: Source/UI/Item/UIParaItemShopWnd.cpp --- Source/Contents/UserData/NormalItemSlots.cpp | 31 +++++++ Source/UI/Item/UIParaItemShopWnd.cpp | 90 ++++++++++++++++++++ Source/UI/Item/UIParaItemShopWnd.h | 29 +++++++ Source/UI/Navigation/UINavigationV4Wnd.h | 2 + data/compile.json | 1 + 5 files changed, 153 insertions(+) create mode 100644 Source/UI/Item/UIParaItemShopWnd.cpp create mode 100644 Source/UI/Item/UIParaItemShopWnd.h diff --git a/Source/Contents/UserData/NormalItemSlots.cpp b/Source/Contents/UserData/NormalItemSlots.cpp index 8695eec2..5b7748fc 100644 --- a/Source/Contents/UserData/NormalItemSlots.cpp +++ b/Source/Contents/UserData/NormalItemSlots.cpp @@ -2,6 +2,7 @@ #include "Client/Session.h" #include "Contents/MapSkyMgr.h" #include "Render/Renderer.h" +#include "UI/Navigation/UINavigationV4Wnd.h" #include @@ -1037,3 +1038,33 @@ void PreviewEquipWndInfo::Reset() { this->x = static_cast(static_cast(g_renderer->viewport.width - 280) * g_depthAverageHalf); this->y = static_cast(static_cast(g_renderer->viewport.height - 260) * g_depthAverageHalf); } + +// OFFSET: 0x009A7CA0 +// FUNCTION: fn_13738 +void NavigationWindowInfo::Clamp() { + if (this->height < 338 || this->height > 338) { + this->height = 338; + } + + if (this->expanded) { + if (this->width != 272) { + this->width = 272; + } + } else if (this->width != 228) { + this->width = 228; + } + + if (this->x < 0) { + this->x = 0; + } + if (this->x > g_renderer->viewport.width - this->width) { + this->x = g_renderer->viewport.width - this->width; + } + + if (this->y < 0) { + this->y = 0; + } + if (this->y > g_renderer->viewport.height - this->height) { + this->y = g_renderer->viewport.height - this->height; + } +} diff --git a/Source/UI/Item/UIParaItemShopWnd.cpp b/Source/UI/Item/UIParaItemShopWnd.cpp new file mode 100644 index 00000000..510888e9 --- /dev/null +++ b/Source/UI/Item/UIParaItemShopWnd.cpp @@ -0,0 +1,90 @@ +#include "UI/Item/UIParaItemShopWnd.h" + +#include "Client/Mode/CMode.h" +#include "Client/Mode/ModeDragState.h" +#include "Client/Mode/ModeMgr.h" +#include "UI/Dialogs/UIPasswordWnd.h" +#include "UI/Shortcuts/ShortcutVisibility.h" +#include "UI/Window/UIWindowMgr.h" + +#include + +// OFFSET: 0x009A80F0 +// FUNCTION: fn_13745 +void UIParaResultWnd::AddItem(const RawItemBasic& item, int quantity) { + ITEM_INFO info; + info.AssignBasic(item); + info.quantity = quantity; + info.unknown_0060 = 0; + info.unknown_005D = 0; + info.SetItemId(atoi(info.itemId.c_str())); + this->items.push_back(info); +} + +// OFFSET: 0x009A81E0 +// FUNCTION: fn_13746 +void UIParaResultWnd::AddItem(const ITEM_INFO& item) { + this->items.push_back(item); +} + +// OFFSET: 0x009A81F0 +// FUNCTION: fn_13747 +void UIParaItemPurchaseWnd::Slot10(int x, int y, std::intptr_t value) { + if (g_windowMgr.LookupWindow(10011)) { + UIWindow::Slot10(x, y, value); + return; + } + + CMode* mode = g_modeMgr.GetGameMode(); + const ModeDragState* drag = reinterpret_cast(value); + if (drag->source != 3) { + mode->SendMsg(18, 0, 0, 0, 0); + return; + } + + switch (drag->type) { + case 4: + case 5: + case 8: + case 9: + case 11: + case 12: + case 13: + case 14: + case 15: + this->SendMsg(nullptr, 38, 0, 0, 0, 0); + return; + default: + reinterpret_cast(g_windowMgr).Show(15, 1); + dynamic_cast(g_windowMgr.LookupWindow(15))->SendMsg(nullptr, 13, 21, 0, 0, 0); + return; + } +} + +// OFFSET: 0x009A82E0 +// FUNCTION: fn_13748 +void UIParaItemShopWnd::Slot10(int x, int y, std::intptr_t value) { + if (g_windowMgr.LookupWindow(10011)) { + UIWindow::Slot10(x, y, value); + return; + } + + const ModeDragState* drag = reinterpret_cast(value); + if (drag->source != 4) { + g_modeMgr.GetGameMode()->SendMsg(18, 0, 0, 0, 0); + return; + } + + if (drag->quantity == 1) { + this->SendMsg(nullptr, 38, 0, 0, 0, 0); + return; + } + + reinterpret_cast(g_windowMgr).Show(15, 1); + dynamic_cast(g_windowMgr.LookupWindow(15))->SendMsg(nullptr, 13, 22, 0, 0, 0); +} + +// OFFSET: 0x009A83B0 +// FUNCTION: fn_13749 +void UIParaResultWnd::Slot10(int x, int y, std::intptr_t value) { +} diff --git a/Source/UI/Item/UIParaItemShopWnd.h b/Source/UI/Item/UIParaItemShopWnd.h new file mode 100644 index 00000000..47c4d54b --- /dev/null +++ b/Source/UI/Item/UIParaItemShopWnd.h @@ -0,0 +1,29 @@ +#ifndef RAGNAROK_SOURCE_UI_ITEM_UIPARAITEMSHOPWND_H +#define RAGNAROK_SOURCE_UI_ITEM_UIPARAITEMSHOPWND_H + +#include "Contents/Items/ItemInfo.h" +#include "UI/Item/UIItemBaseWnd.h" +#include "UI/Item/UIItemPurchaseWnd.h" +#include "UI/Item/UIItemShopWnd.h" + +#include + +class UIParaItemPurchaseWnd : public UIItemPurchaseWnd { +public: + void Slot10(int x, int y, std::intptr_t value) override; +}; + +class UIParaItemShopWnd : public UIItemShopWnd { +public: + void Slot10(int x, int y, std::intptr_t value) override; +}; + +class UIParaResultWnd : public UIItemBaseWnd { +public: + void Slot10(int x, int y, std::intptr_t value) override; + + void AddItem(const RawItemBasic& item, int quantity); + void AddItem(const ITEM_INFO& item); +}; + +#endif diff --git a/Source/UI/Navigation/UINavigationV4Wnd.h b/Source/UI/Navigation/UINavigationV4Wnd.h index e7521386..d30f32fa 100644 --- a/Source/UI/Navigation/UINavigationV4Wnd.h +++ b/Source/UI/Navigation/UINavigationV4Wnd.h @@ -18,6 +18,8 @@ struct NavigationWindowInfo { /* 0008 */ int width; /* 000C */ int height; /* 0010 */ unsigned char expanded; + + void Clamp(); }; class UINavigationV4Wnd : public UIFrameWnd { diff --git a/data/compile.json b/data/compile.json index dd6ab130..295b4c1f 100644 --- a/data/compile.json +++ b/data/compile.json @@ -845,6 +845,7 @@ "Source/UI/Guild/UIGuild_Storage_Log.cpp": 2, "Source/UI/Item/UIEquipmentPropertiesWnd.cpp": 2, "Source/UI/Item/UIMerchantItemLogWnd.cpp": 2, + "Source/UI/Item/UIParaItemShopWnd.cpp": 2, "Source/UI/Items/MergeItemWnd.cpp": 2, "Source/UI/Items/UIGameItem.cpp": 2, "Source/UI/Items/UIIllustWnd.cpp": 2,