fix(items): dispatch carried use without world approach
This commit is contained in:
parent
f71f947475
commit
19e8863f4e
7 changed files with 99 additions and 18 deletions
|
|
@ -10,6 +10,7 @@ Date: 2026-07-23
|
|||
- `PublicWeenieDesc::UnPack @ 0x005AD470`
|
||||
- `ItemHolder::DetermineUseResult @ 0x00588460`
|
||||
- `ItemHolder::UseObject @ 0x00588A80`
|
||||
- `CPlayerSystem::UsingItem @ 0x00562F70`
|
||||
- `CPlayerSystem::AutoWearIsLegal @ 0x0055EF40`
|
||||
- `CPlayerSystem::AutoWear @ 0x005601C0`
|
||||
- `ACCWeenieObject::GetObjectAtLocation @ 0x0058CE00`
|
||||
|
|
@ -52,6 +53,14 @@ when the optional useability word is present. Consequently an absent wire word
|
|||
and an explicitly packed zero both have retail `USEABLE_UNDEF` value zero and
|
||||
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.
|
||||
|
||||
```text
|
||||
AutoWearIsLegal(itemId, out alreadyWorn, silent):
|
||||
alreadyWorn = false
|
||||
|
|
@ -101,8 +110,12 @@ AutoWear(itemId, out alreadyWorn, silent):
|
|||
rule. Toolbar enablement, item activation, and world interaction consume it.
|
||||
- `ItemInteractionController` remains the shared double-click and toolbar-hand
|
||||
path. A zero-valued carried gem such as Blackmoor's Favor therefore emits the
|
||||
ordinary Use request; ACE remains authoritative for its spell and
|
||||
consumption outcome.
|
||||
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.
|
||||
- `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.
|
||||
|
|
|
|||
|
|
@ -58,7 +58,16 @@ BeginAcceptedUse(object):
|
|||
RequestUse(object, reservation)
|
||||
|
||||
RequestUse(object, reservation):
|
||||
if session/identity/approach is invalid:
|
||||
if session is invalid:
|
||||
reservation.CancelBeforeDispatch()
|
||||
return
|
||||
|
||||
if object is carried or equipped by the player:
|
||||
send Use immediately
|
||||
transfer reservation to UseDone
|
||||
return
|
||||
|
||||
if world identity/approach is invalid:
|
||||
reservation.CancelBeforeDispatch()
|
||||
return
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue