fix(world): restore portal and distant use lifecycles

This commit is contained in:
Erik 2026-07-25 09:59:25 +02:00
parent c730632075
commit 1a14812c44
18 changed files with 401 additions and 196 deletions

View file

@ -55,11 +55,11 @@ both pass `IsUseable`.
For a direct-use item, `ItemHolder::UseObject` then sends
`CM_Inventory::Event_UseEvent`, increments the UI busy count, and calls
`CPlayerSystem::UsingItem`. That latter presentation function handles local
pickup/wield/container state; it does not require a carried source to have a
world position. Therefore an owned inventory object must cross the wire
directly. Only world objects participate in acdream's registered AD-27 local
approach compatibility seam.
`CPlayerSystem::UsingItem`. `Event_UseEvent` itself is the network send
(`0xF7B1/0x36`); the latter function handles local pickup/wield/container
presentation. Therefore neither an owned item nor a world object may be held
behind a client-side movement completion. ACE owns the authoritative approach
chain.
```text
AutoWearIsLegal(itemId, out alreadyWorn, silent):
@ -113,9 +113,10 @@ AutoWear(itemId, out alreadyWorn, silent):
ordinary Use request directly from its inventory identity; it is never sent
through the world-approach query. ACE remains authoritative for its spell
and consumption outcome.
- `SelectionInteractionController` keeps the AD-27 turn/approach seam only for
non-owned spatial objects. Owned self, equipped, and nested-container sources
have no live world pose and send immediately.
- `SelectionInteractionController` sends accepted ordinary Use immediately for
both owned and spatial objects. It does not install speculative local
TurnToObject/MoveToObject movement; ACE's authoritative movement packets use
the shared retail `MoveToManager`.
- `AutoWieldController` remains the shared inventory/paperdoll equip owner. It
resolves AutoWear blockers from `ClientObjectTable`'s retail-ordered
equipment projection and emits the retail literal through system chat.