deleting a good item asks in the reference's words
- deleting a rare-or-better item forks to the reference's typed confirm — "Type \"DELETE\" into the field to confirm": Yes starts disabled, the box takes focus, the button enables only while the field spells DELETE, and a reflexive Enter over a half-typed word is inert; the missing engine piece was one hook, the edit box's on-text-changed; beside it, the loot bind-on-pickup confirm — bind-on-pickup AND uncommon-or-better, two conjuncts and no others, so a white BoP drop is taken with no dialog and a bind-on-equip blue never asks here — with the reference's one-pending-slot latch, and the take split into two verbs the way 1.12 actually has it: the row click stays C-side, and LootSlot is only the confirmation's continuation - the message frames get their justify quartet, read out of the binary's method tables (with the Button table re-derived as the control that lacks it); Frame:EnableDrawLayer/DisableDrawLayer and Region:GetDrawLayer land — the disabled layers are a five-bit mask on the frame, so re-enabling a layer restores exactly what was showing underneath; and the Skills tab's children take the reference's names, with SKILLS_TO_DISPLAY published — pfUI loops over it and got "'for' limit must be a number" - the README's roadmap line now names what is genuinely big — battlegrounds and meeting stones, both verified still missing — plus the long tail, because the old line named four features that have since landed and small features go stale on a roadmap within a week Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,7 @@ use crate::order::Strata;
|
||||
use crate::script::{event, Backdrop, Insets, Model};
|
||||
use crate::widget::FrameKind;
|
||||
|
||||
use super::{decode_id, frame_handle_of, frame_wrapper, strata_from_str};
|
||||
use super::{decode_id, draw_layer_from_str, frame_handle_of, frame_wrapper, strata_from_str};
|
||||
|
||||
/// Populate `m`'s visibility/hierarchy/strata/backdrop/mouse methods (see the module doc).
|
||||
pub(super) fn install(lua: &Lua, m: &Table) -> mlua::Result<()> {
|
||||
@@ -717,6 +717,38 @@ pub(super) fn install(lua: &Lua, m: &Table) -> mlua::Result<()> {
|
||||
// attribute, declare it on those 44 sites, then gate. Until then this is a disclosed superset
|
||||
// (1189's argument, pointed the other way), and the two corpus addons that stopped on the
|
||||
// missing *method* are unblocked either way.
|
||||
// EnableDrawLayer(layer) / DisableDrawLayer(layer) — Frame method table `0x878ec0`, entries
|
||||
// `0x7755b0` / `0x775680`, between `IsToplevel` and `Show`. See [`crate::widget::Frame`]'s
|
||||
// `disabled_layers` for what was read and why the mask lives on the frame.
|
||||
//
|
||||
// An unknown layer name is a NO-OP here rather than a raise. That is the honest state, not a
|
||||
// decision: `draw_layer_from_str` is the same parser `SetDrawLayer` and `CreateTexture` use,
|
||||
// and what the reference does with an unparseable name in THIS pair has not been read out of
|
||||
// the binary. Both corpus callers (pfUI, MoveAnything) pass literals from the five-name set.
|
||||
for (name, disable) in [("EnableDrawLayer", false), ("DisableDrawLayer", true)] {
|
||||
m.set(
|
||||
name,
|
||||
lua.create_function(move |lua, (this, layer): (Table, Value)| {
|
||||
let Some(l) = layer
|
||||
.as_string()
|
||||
.and_then(|s| s.to_str().ok().and_then(|s| draw_layer_from_str(&s)))
|
||||
else {
|
||||
return Ok(());
|
||||
};
|
||||
let h = frame_handle_of(lua, &this)?;
|
||||
let mut model = lua.app_data_mut::<Model>().expect("model");
|
||||
if let Some(frame) = model.arena.frame_mut(h) {
|
||||
let bit = 1u8 << l.index();
|
||||
if disable {
|
||||
frame.disabled_layers |= bit;
|
||||
} else {
|
||||
frame.disabled_layers &= !bit;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
})?,
|
||||
)?;
|
||||
}
|
||||
m.set(
|
||||
"EnableMouseWheel",
|
||||
lua.create_function(|lua, (this, enable): (Table, bool)| {
|
||||
|
||||
Reference in New Issue
Block a user