the addon arc: the AddOns folder opens

- benilla loads real 1.12 addons from Interface/AddOns — TOC, XML and Lua through one loader, with per-addon saved variables, Bindings.xml and the lifecycle events addons expect
- both AddOns screens are in: the character-select list with per-addon enable state, and the ESC menu's in-game list
- the API surface is measured, not guessed — a corpus harness runs hundreds of real 1.12 addons and ranks exactly which globals, templates and verbs they demand
- the Lua dialect is the client's own, read off the binary — 5.0 semantics with the 1.12 additions, and UI source files are bytes, not UTF-8

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-11 18:18:31 +07:00
co-authored by Claude Fable 5
parent bfb3e3addc
commit 44ff435304
231 changed files with 31316 additions and 5594 deletions
@@ -28,7 +28,7 @@ fn load_xml(s: &UiScript, file: &str) {
}
/// The manifest order this file actually ships in: `UiPanels.xml` for `UIFrameFade`,
/// `UnitFrames.xml` for the `BenillaTargetFrame` the dots anchor to.
/// `UnitFrames.xml` for the `TargetFrame` the dots anchor to.
fn load_combo_frame() -> UiScript {
let mut s = UiScript::new().unwrap();
s.set_screen_size(1024.0, 768.0);
@@ -69,11 +69,11 @@ fn settle(s: &mut UiScript) {
}
fn shown(s: &mut UiScript) -> bool {
s.eval("return BenillaComboFrame:IsShown()").unwrap()
s.eval("return ComboFrame:IsShown()").unwrap()
}
fn highlight_alpha(s: &mut UiScript, i: u32) -> f64 {
s.eval(&format!("return BenillaComboPoint{i}Highlight:GetAlpha()"))
s.eval(&format!("return ComboPoint{i}Highlight:GetAlpha()"))
.unwrap()
}
@@ -111,7 +111,7 @@ fn combo_frame_follows_the_point_count() {
.eval(
r#"
for i = 1, MAX_COMBO_POINTS do
if getglobal("BenillaComboPoint" .. i .. "Highlight"):GetAlpha() < 0.99 then
if getglobal("ComboPoint" .. i .. "Highlight"):GetAlpha() < 0.99 then
return false
end
end
@@ -141,13 +141,13 @@ fn a_repaint_at_the_same_count_does_not_re_flare() {
settle(&mut s);
// Both settled: highlights up, shines burned out.
let shine: f64 = s.eval("return BenillaComboPoint2Shine:GetAlpha()").unwrap();
let shine: f64 = s.eval("return ComboPoint2Shine:GetAlpha()").unwrap();
assert_eq!(shine, 0.0, "the shine fades back out");
// A re-select of the SAME unit at the same count: no new fade is queued for either dot.
s.fire_event("PLAYER_TARGET_CHANGED", vec![]);
let fading: bool = s
.eval("return UIFrameIsFading(BenillaComboPoint1Highlight) ~= nil")
.eval("return UIFrameIsFading(ComboPoint1Highlight) ~= nil")
.unwrap();
assert!(!fading, "an unchanged count re-flares nothing");
assert!(