From c5df478c51aa356722eabef4751f5453cb08488f Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 2 Sep 2026 16:58:47 +0700 Subject: [PATCH] the buff bar goes stock, and gossip quests show their level MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - the buff bar is the reference's own `BuffFrame.xml`, and the swap found an engine defect: an empty `` in 1.12's XML is a BLANK that takes an inherited handler away again (seven such sites across four stock files), which our loader read as "none given" — so the two enchant slots would have painted the player's first buff in the corner and cancelled it on right-click; the first fix then had to be corrected at the bytes (`SetScript 0x7025c0` tests only NULL and empty, and nothing trims, so `↵` compiles to a valid empty function rather than storing nil, which any addon calling `GetScript` can observe); `SHOW_BUFF_DURATIONS` is applied once post-load because 1.12 leaves that to `UIOptionsFrame.lua`, which benilla does not build — without it the bar ships a 10px pitch error on every buff - gossip quests come through the reference's four verbs — `GetGossipAvailableQuests`/`GetGossipActiveQuests` returning (title, level) PAIRS, with the two `Select*` verbs indexing into that list — replacing three invented names that sat on the beyond-1.12 exception list; the quest LEVEL was on the wire, parsed and dropped because the invented verb had nowhere to put it, and the reference's order (available before active, whatever the packet interleaved) comes with them - eight more files off the chain as groundwork: `LocaleProperties.lua` (the gendered/plural `GetText` selector that eleven stock call sites read their words through — fifty lines of FrameXML that looked like an engine binding), `CinematicFrame.xml`, the UIMenu kit, the `UnitFrame.lua`/`CombatFeedback.lua` kits (the only two names blocking the stock player, party, target and pet frames), the money-input kit, and `ItemButtonTemplate.xml` — the base every bag, bank, merchant, loot, trade and mail slot inherits; `GetMerchantItemMaxStack` (on the wire the whole time, dropped) and the two trade item-link verbs join the engine - two instruments for the migration: a gap report that reads a stock window's call sites against a LOADED VM and says which engine verbs it still needs (28 windows need none, the rest name 1–5), and the readiness probe's documented false positive — loading a stock window on top of our same-named one leaves `getglobal(name)` pointing at ours while the stock handlers run against theirs, so a failure inside a colliding name is a question, not an answer Co-Authored-By: Claude Fable 5.1 --- crates/benilla-app/assets/ui/BuffFrame.xml | 829 ------------------ crates/benilla-app/assets/ui/ChatFrame.xml | 93 +- .../benilla-app/assets/ui/CinematicFrame.xml | 65 -- crates/benilla-app/assets/ui/GossipFrame.xml | 32 +- .../assets/ui/ItemButtonTemplate.xml | 256 ------ crates/benilla-app/assets/ui/OptionsFrame.xml | 20 + crates/benilla-app/assets/ui/UIParent.xml | 29 + crates/benilla-app/assets/ui/benilla.toc | 93 +- crates/benilla-app/src/capture/fixtures.rs | 2 +- crates/benilla-app/src/net/apply/npc.rs | 2 +- crates/benilla-app/src/ui_chat/tests.rs | 73 +- crates/benilla-app/src/ui_gossip.rs | 15 +- crates/benilla-app/src/ui_merchant.rs | 5 + .../benilla-app/src/ui_script/binder_tests.rs | 19 +- .../benilla-app/src/ui_script/buff_tests.rs | 144 ++- .../benilla-app/src/ui_script/cast_tests.rs | 1 + .../src/ui_script/chat_options_tests.rs | 1 + .../src/ui_script/chat_resize_tests.rs | 1 + .../benilla-app/src/ui_script/chat_tests.rs | 2 + .../src/ui_script/cinematic_tests.rs | 2 +- .../benilla-app/src/ui_script/death_tests.rs | 19 +- .../src/ui_script/dressup_tests.rs | 3 + .../benilla-app/src/ui_script/duel_tests.rs | 19 +- .../benilla-app/src/ui_script/escape_tests.rs | 1 + .../src/ui_script/group_loot_tests.rs | 20 +- .../src/ui_script/help_frame_tests.rs | 19 +- .../benilla-app/src/ui_script/loot_tests.rs | 21 +- crates/benilla-app/src/ui_script/manifest.rs | 24 + .../src/ui_script/merchant_tests.rs | 11 + .../src/ui_script/options_tests.rs | 24 +- .../benilla-app/src/ui_script/panel_tests.rs | 32 +- .../src/ui_script/petition_tests.rs | 1 + .../src/ui_script/quest_share_tests.rs | 19 +- .../benilla-app/src/ui_script/quest_tests.rs | 1 + .../src/ui_script/questlog_tests.rs | 2 + .../benilla-app/src/ui_script/reference_ui.rs | 226 ++++- .../src/ui_script/static_popup_tests.rs | 17 +- .../benilla-app/src/ui_script/summon_tests.rs | 19 +- .../src/ui_script/talent_wipe_tests.rs | 19 +- .../src/ui_script/target_aura_tests.rs | 2 +- crates/benilla-app/src/ui_script/test_ui.rs | 3 +- .../src/ui_script/tooltip_anchor_tests.rs | 6 +- .../src/ui_script/tot_frame_tests.rs | 2 +- .../src/ui_script/trainer_tests.rs | 19 +- crates/benilla-app/src/ui_trade.rs | 7 + crates/benilla-app/tests/character_stats.rs | 31 +- crates/benilla-app/tests/common/mod.rs | 55 ++ crates/benilla-app/tests/talent_frame.rs | 34 +- crates/benilla-app/tests/trade_frame.rs | 1 + crates/benilla-protocol/src/events.rs | 2 +- crates/benilla-protocol/src/events/decode.rs | 2 +- crates/benilla-ui/src/loader/scripts.rs | 47 +- crates/benilla-ui/src/script/gossip.rs | 192 +++- crates/benilla-ui/src/script/merchant.rs | 55 ++ .../src/script/tests/reference_surface.rs | 9 +- crates/benilla-ui/src/script/trade.rs | 95 ++ 56 files changed, 1105 insertions(+), 1638 deletions(-) delete mode 100644 crates/benilla-app/assets/ui/BuffFrame.xml delete mode 100644 crates/benilla-app/assets/ui/CinematicFrame.xml delete mode 100644 crates/benilla-app/assets/ui/ItemButtonTemplate.xml create mode 100644 crates/benilla-app/tests/common/mod.rs diff --git a/crates/benilla-app/assets/ui/BuffFrame.xml b/crates/benilla-app/assets/ui/BuffFrame.xml deleted file mode 100644 index 8b8fc159..00000000 --- a/crates/benilla-app/assets/ui/BuffFrame.xml +++ /dev/null @@ -1,829 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BuffFrame_OnLoad() - BuffFrame_OnUpdate(arg1) - - - - - - - - - - - - - - - - - - - - - - - - TempEnchant1Duration:SetPoint("TOP", "TempEnchant1", "BOTTOM", 0, 0) - TempEnchant2Duration:SetPoint("TOP", "TempEnchant2", "BOTTOM", 0, 0) - BuffButtons_UpdatePositions() - - BuffFrame_Enchant_OnUpdate(arg1) - - - diff --git a/crates/benilla-app/assets/ui/ChatFrame.xml b/crates/benilla-app/assets/ui/ChatFrame.xml index 563db094..dbc4139a 100644 --- a/crates/benilla-app/assets/ui/ChatFrame.xml +++ b/crates/benilla-app/assets/ui/ChatFrame.xml @@ -2107,94 +2107,11 @@ - - - - - - - - - - - - diff --git a/crates/benilla-app/assets/ui/OptionsFrame.xml b/crates/benilla-app/assets/ui/OptionsFrame.xml index 9c218bd4..49c8edb8 100644 --- a/crates/benilla-app/assets/ui/OptionsFrame.xml +++ b/crates/benilla-app/assets/ui/OptionsFrame.xml @@ -190,6 +190,26 @@