idle sits you down and camps you, and the addons anchor, parse and draw

- five idle minutes sit you down and flag you AFK, thirty log you out through the ordinary countdown; holding a key is idle, moving the mouse is not, and a swimmer stays afloat (2092)
- a knockdown no longer wedges: the landing froze the clip that held the base-animation lock, leaving a knocked-down player on their back for the session (2098); the perf cost pill starts hidden (2099)
- Lua is exactly 1.12's 5.0 — no vararg expression, no #, no %, the remembered table size — so Cartographer loads without errors and Mik's Scrolling Battle Text shows its text, in its own shipped font now that addon TTFs load (2101, 2102, 2103)
- a widget name is a Lua global for SetPoint and its kin, so Bartender2's bars spread out; a button's NormalText disowns its justify, the raise renumbers hidden frames too, and a missing toc file warns instead of erroring (2105, 2100, 2104, 2107, 2106)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-09-08 16:35:03 +07:00
co-authored by Claude Fable 5.1
parent 1783660496
commit 99b5600e25
52 changed files with 3713 additions and 359 deletions
+14 -3
View File
@@ -163,15 +163,26 @@ pub(super) fn install(lua: &Lua) -> mlua::Result<()> {
m.set(
"SetScrollChild",
lua.create_function(|lua, (this, target): (Table, Value)| {
// `_G[name]` before the guard, no `$parent` — `0x790fa0`'s string arm calls `0x76c760`
// directly, the same narrow-Frame-tag resolver `SetParent` uses
// (`object::NamedTarget`).
let named = match &target {
Value::String(s) => s
.to_str()
.ok()
.map(|n| super::object::prefetch_named_target(lua, n.as_ref(), None)),
_ => None,
};
let new_child: Option<FrameHandle> = {
let model = lua.app_data_ref::<Model>().expect("model app_data");
match &target {
Value::Table(t) => decode_id(t)
.ok()
.and_then(|id| model.id_to_frame.get(&id).copied()),
Value::String(s) => {
s.to_str().ok().and_then(|n| model.arena.lookup(n.as_ref()))
}
Value::String(_) => named.as_ref().and_then(|nt| {
super::object::resolve_named_target(&model, nt)
.and_then(|id| model.id_to_frame.get(&id).copied())
}),
_ => None,
}
};