the bank is the reference's own window, and far sight freezes your body
- the bank window is the reference's own `BankFrame.xml` run off the player's chain — our 890-line copy is deleted whole; putting bags into the bank's bag slots works (the two verbs its buttons are wired to now exist), the purse is a real `SmallMoneyFrameTemplate` splitting 987654321 copper into three coin buttons instead of one string, `BANKFRAME_OPENED` loses the argument the real client never fires, and the bank stops auto-opening your bags while the vendor and mailbox keep doing it; the empty-slot click still plays the bag sound, because the reference's own line plays it on every click the cursor did not consume — named as faithful rather than quietly fixed - underneath it, the bank's inventory band is a VIEW over the container feed, not a second copy — inventory ids 40..69 had answered nil because the doll array stops at 24, so the stock file swapped in would have drawn an empty bank; the six bank bag slots become real inventory slots (64..=69) fed off the player descriptor, the three bag verbs are carved from the binary (`PutItemInBackpack` IS `PutItemInBag(0xFF)` through a ten-byte thunk, the occupied-by-an-ordinary-item leg auto-stores with no destination slot at all, and the return is the Lua number 1 or nil — the nil being the whole reason a plain left-click opens a bag), and the swap caught `BankButtonIDToInvSlotID`'s bag arm six slots wrong: it took a bag number 1..6 where the reference passes the button's own id, which is the container id - far sight freezes your own body while the view is out — the fifth conjunct of the movement predicates' shared precondition, joining the health term so the walk, the turn and the follow teardown go down together; both halves are load-bearing: the `IsActivePlayer` half is what keeps a Mind Control victim walking (possession rides the same PLAYER_FARSIGHT field), and the latch half is the RESOLVED engage rather than the raw field — and the camera is untouched, you still look around freely, which is the whole point of the spell - the reset offer no longer outlives the character that earned it — log out after walking out of the Deadmines and your next character was offered a reset the first one had earned — and the one lockout leg no probe can ever reach (vmangos writes a last-instance map only from raid binds, which the client's handler discards as not-a-party-dungeon) is now covered end to end through the real system, its module doc saying plainly: tested and never observed Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -176,7 +176,30 @@ pub struct ContainerMove {
|
||||
pub count: Option<u32>,
|
||||
}
|
||||
|
||||
/// One queued **auto-store into a bag** — `PutItemInBag`'s third leg and the whole of
|
||||
/// `PutItemInBackpack` (`crate::script::cursor::bag_verbs`): take the item at `(src_bag, src_slot)`
|
||||
/// and put it anywhere inside container `dst_bag`.
|
||||
///
|
||||
/// **There is no destination slot, and that is the finding, not an omission**: the reference's
|
||||
/// `CMSG_AUTOSTORE_BAG_ITEM 0x10B` carries `(srcbag, srcslot, dstbag)` and nothing else, and its
|
||||
/// split sibling `CMSG_SPLIT_ITEM 0x10E` carries the literal `0xFF` where a slot would go. The
|
||||
/// server picks. `count`: `None` = the whole stack (AUTOSTORE); `Some(n)` = a split carry, which
|
||||
/// the drain sends as SPLIT instead — the same fork the reference makes on `[0xb4b40c]`.
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
pub struct BagAutoStore {
|
||||
pub src_bag: i64,
|
||||
pub src_slot: u32,
|
||||
/// Live-API container id (0 = backpack, 1..=4 an equipped bag, 5..=10 a bank bag).
|
||||
pub dst_bag: i64,
|
||||
pub count: Option<u32>,
|
||||
}
|
||||
|
||||
impl super::UiScript {
|
||||
/// Drain the auto-stores `PutItemInBag`/`PutItemInBackpack` queued since the last call.
|
||||
pub fn take_bag_autostores(&mut self) -> Vec<BagAutoStore> {
|
||||
std::mem::take(&mut self.model_mut().bag_autostores)
|
||||
}
|
||||
|
||||
/// Push (or remove, with `None`) one bag's snapshot, keyed by live-API bag id (0 = backpack).
|
||||
/// Each slot's cooldown arrives with its absolute start already on the `GetTime` clock (ms) —
|
||||
/// storing is a pure unit conversion, the same seam shape as
|
||||
|
||||
Reference in New Issue
Block a user