From 3b068b15c259ee07f43056ed2d761453a289586a Mon Sep 17 00:00:00 2001 From: chairmanpow Date: Fri, 2 Oct 2026 18:38:56 +0100 Subject: [PATCH] worldport: re-claim our own body after a transfer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Leaving a battleground left the character unable to walk for the rest of the session. The `settle released` line named it: `WASD held by: control-lost`. vmangos takes control for the teleport (`SetClientControl(player, 0)`), so `Revoked` sets `control_lost` and parks the mover, and only a later `SMSG_CLIENT_CONTROL_UPDATE` with `allow_move = true` clears it. Nothing guarantees that packet, and nothing else clears the flag: the worldport arm replaces the pose and the settle releases, neither asks, and `seizing` at `wire_in.rs` wants `reseat`, which a worldport never sets. So the lock on the body we just left parked the body we came back as. A transfer is a mover change, so re-claim at the transfer's completion, with the ack, the way login does — the same teardown as the reference's `SetActiveMover` reset. `reseat` rides along so the existing seize path resets the outgoing mover's state. A possession is left alone: there the lock is the point. Compile-verified only — the live run is the test. --- crates/benilla-app/src/player/world_focus.rs | 27 +++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/crates/benilla-app/src/player/world_focus.rs b/crates/benilla-app/src/player/world_focus.rs index 4a2c62db..3dcc65af 100644 --- a/crates/benilla-app/src/player/world_focus.rs +++ b/crates/benilla-app/src/player/world_focus.rs @@ -105,6 +105,7 @@ pub(super) fn release_post_snap_hold( time: Res