From f3d4b4804a009330fc737ea5702e93136f7eda5b Mon Sep 17 00:00:00 2001 From: ragnarok-clanker Date: Sat, 31 Oct 2026 03:33:33 +0000 Subject: [PATCH] Decompile 2 functions in Source/UI/ProbabilityTable/UIProbabilityTable.cpp Batch #7050 by Lumen: 0 byte-identical, 2 confirmed by peer review. - fn_16148 ProbabilityTableFreezeCallback::operator(): logic confirmed by peer review - fn_16152 ProbabilityTableSelectCallback::operator(): logic confirmed by peer review Peer-reviewed-by: eAthena, Landruca Accepted without human review: peers confirmed the logic ("same" ahead by at least 3, with 70% of the votes). --- .../ProbabilityTable/UIProbabilityTable.cpp | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/Source/UI/ProbabilityTable/UIProbabilityTable.cpp b/Source/UI/ProbabilityTable/UIProbabilityTable.cpp index 618385dd..e3b2291e 100644 --- a/Source/UI/ProbabilityTable/UIProbabilityTable.cpp +++ b/Source/UI/ProbabilityTable/UIProbabilityTable.cpp @@ -48,6 +48,61 @@ private: } +struct ProbabilityTableFreezeCallback { + virtual ~ProbabilityTableFreezeCallback() = default; + + /* 0004 */ CUIListBoxEx* list; + + void operator()(CUIListItem* const& item); +}; + +struct ProbabilityTableSelectCallback { + virtual ~ProbabilityTableSelectCallback() = default; + + /* 0004 */ CUIListBoxEx* list; + + void operator()(CUIListItem* const& item); +}; + +// OFFSET: 0x00A4CD60 +// FUNCTION: fn_16148 +void ProbabilityTableFreezeCallback::operator()(CUIListItem* const& item) { + CUIListItem* selectedItem = item; + for (ProbabilityTable::CUIItem* row : this->list->items) { + row->SetHighlighted(selectedItem == row); + } +} + +// OFFSET: 0x00A4CE10 +// FUNCTION: fn_16152 +void ProbabilityTableSelectCallback::operator()(CUIListItem* const& item) { + CUIListBoxEx* list = this->list; + CUIListItem* selectedItem = item; + if (!list->unknown_00C4) { + for (ProbabilityTable::CUIItem* row : list->items) { + if (selectedItem != row) { + row->SetSelected(false); + } + } + + selectedItem->SetSelected(true); + if (selectedItem->index != static_cast(list->selected) || !list->unknown_00E0) { + ProbabilityTable::CUIItem* probabilityItem = dynamic_cast(selectedItem); + if (probabilityItem) { + list->selected = probabilityItem->index; + if (list->onSelect && probabilityItem->index >= 0 && + static_cast(probabilityItem->index) < list->data.size()) { + auto node = list->data.begin(); + for (int index = probabilityItem->index; index > 0; --index) { + ++node; + } + list->onSelect(probabilityItem, *node); + } + } + } + } +} + template <> void CUIListBoxEx::OnScroll(int position);