the inspect and talent windows are the reference's own
- the inspect and talent windows are the reference's own: `Blizzard_InspectUI` and `Blizzard_TalentUI` are LoadOnDemand addons whose real `.xml`/`.lua` live inside `patch.MPQ` — the loose `Interface\AddOns` folder holds only a `.pub` signature, which three notes in this tree had read as "packed, no source to migrate from", one wrong inference that kept five windows on hand-written transcriptions; 2300 lines of ours out, no engine work needed, and three things our talent transcription had quietly invented fell out (there was no level-10 gate, every tree scrolled where a shallow one does not, and a nil `TalentMicroButton` threw out of OnShow before the window painted) - a nil unit token RAISES in 53 of 83 bindings: wow-re censused the registrar table at `0x850438` — `UnitName(nil)` raises and `UnitIsVisible(nil)` is quiet, one line apart in stock files, so there is no rule to derive, the table is the rule; ours answered a default and our own test had pinned it; both token positions of the seven two-token predicates are gated, `GetRaidTargetIndex` too, and `UnitIsAFK`/`UnitIsDND` are confirmed not to exist in 5875 at all (zero occurrences under a positive control) — we invented them, and they stay deliberately ungated - `EditBox:SetNumber` did not exist (the only chain file calling it is `MoneyInputFrame.lua`, on the chain since the money kit): it is byte-identical to `SetText`, formats through `%.14g` in MSVC's CRT (`1e+020`, `1.#INF`), and `OnTextChanged` never fires from an edit — it fires from the dirty-word drain inside the box's own OnUpdate, coalesced to one per box per frame, where ours fired synchronously and `MoneyInputFrame_SetCopper` raised on it; `PanelTemplates_TabResize`'s `tab` argument is optional as the reference's is (stock macro tabs call it with `0`) - the skull or star on your CURRENT target never appeared or cleared until you re-targeted — `RAID_TARGET_UPDATE` was never fired, and stock `TargetFrame.lua` hangs its repaint off it; a raid-to-party conversion now empties the mark board as `0x4ba550` does; and the group-loot roll popups were already on the chain inside stock `LootFrame.xml` — our 546-line `GroupLootFrame.xml` had been shadowing all four of them Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -45,6 +45,38 @@ pub(in crate::script) fn install(lua: &Lua) -> mlua::Result<()> {
|
||||
"GetText",
|
||||
lua.create_function(|lua, this: Table| with_editbox(lua, &this, |eb| eb.text.clone()))?,
|
||||
)?;
|
||||
// SetNumber(v) — **the same function as SetText**. `0x798690` and `0x7984c0` are byte-identical
|
||||
// (245 bytes each, zero differences after masking rel32 and absolute-VA operands; only the
|
||||
// usage string differs), so this does no numeric work of its own: it hands the argument to the
|
||||
// shared `lua_tostring` marshalling and sets the result as text. Decision 1831.
|
||||
//
|
||||
// The GATE is `lua_isstring 0x6f3510`, a pure type test over {number, string} — NOT
|
||||
// `lua_isnumber` and NOT `luaL_checknumber`. So a STRING is accepted and passed through
|
||||
// VERBATIM, never parsed: `SetNumber("abc")` sets the text "abc" and does not raise. Anything
|
||||
// else — nil, boolean, table, or an ABSENT argument — raises the usage string and abandons the
|
||||
// caller's statement.
|
||||
//
|
||||
// The live consumer is `MoneyInputFrame.lua:47/52/57`, on the chain since 1751, whose three
|
||||
// boxes are `numeric="true"`. Our numeric filter already models the reference's wholesale
|
||||
// abort, which matters here: on such a box `SetNumber(-5)` or `SetNumber(0.8)` leaves the box
|
||||
// EMPTY rather than partially filled, because the sign or the point fails the digit test after
|
||||
// the clear-all has already run. The money path only ever passes non-negative integers
|
||||
// (`floor`/`mod` results), so it never takes that branch.
|
||||
m.set(
|
||||
"SetNumber",
|
||||
lua.create_function(|lua, (this, v): (Table, Value)| {
|
||||
let text = match &v {
|
||||
Value::Integer(i) => crate::script::binding_abi::lua_number_text(*i as f64),
|
||||
Value::Number(n) => crate::script::binding_abi::lua_number_text(*n),
|
||||
// A string is not parsed — it is the text.
|
||||
Value::String(s) => s.to_str()?.to_string(),
|
||||
_ => return Err(mlua::Error::runtime("Usage: EditBox:SetNumber(number)")),
|
||||
};
|
||||
let h = frame_handle_of(lua, &this)?;
|
||||
set_text(lua, h, &text);
|
||||
Ok(())
|
||||
})?,
|
||||
)?;
|
||||
// GetNumber: atof of the real text (0 on failure), matching `0x798790`.
|
||||
m.set(
|
||||
"GetNumber",
|
||||
|
||||
Reference in New Issue
Block a user