feat(inventory): port retail item giving (#216)
Preserve SmartBox drag-release coordinates, route the picked 3-D target through the retail AttemptPlaceIn3D policy, and send authoritative GiveObject requests with the selected stack quantity. Honor PlayerDescription's player secure-trade option and document the remaining trade-system boundary. Co-Authored-By: Codex <noreply@openai.com>
This commit is contained in:
parent
a944e49b9c
commit
30d294506c
13 changed files with 421 additions and 10 deletions
|
|
@ -44,6 +44,41 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #216 — Inventory drags into the 3-D world could only drop items
|
||||
|
||||
**Status:** IN-PROGRESS
|
||||
**Severity:** HIGH
|
||||
**Filed:** 2026-07-13
|
||||
**Component:** retained UI / inventory / interaction / net
|
||||
|
||||
**Description:** Releasing a physical inventory item over an NPC always sent
|
||||
the ground-drop path. A starter-dungeon character therefore could not hand the
|
||||
exit token to the exit NPC and could not complete the dungeon.
|
||||
|
||||
**Root cause / status:** Implementation complete; connected live gate pending.
|
||||
The exact `AttemptPlaceIn3D` policy and the `0x00CD`
|
||||
packet builder already existed, but `GameWindow.OnUiDragReleasedOutside`
|
||||
discarded the release coordinates and always called `DropToWorld`, hard-coding
|
||||
`TargetId=0`. The release path now world-picks at the actual release point,
|
||||
the controller executes its existing `GiveToTarget` action without optimistic
|
||||
mutation, `WorldSession` sends the exact request, and PlayerDescription drives
|
||||
the retail player secure-trade preference.
|
||||
|
||||
**Files:** `src/AcDream.App/UI/ItemInteractionController.cs`;
|
||||
`src/AcDream.App/Rendering/GameWindow.cs`;
|
||||
`src/AcDream.Core.Net/WorldSession.cs`.
|
||||
|
||||
**Research:** `docs/research/2026-07-13-retail-give-item-pseudocode.md`;
|
||||
`ItemHolder::AttemptPlaceIn3D @ 0x00588600`;
|
||||
`ACCWeenieObject::UIAttemptGive @ 0x0058D620`;
|
||||
`CM_Inventory::Event_GiveObjectRequest @ 0x006ABB00`.
|
||||
|
||||
**Acceptance:** Drag the starter-dungeon exit token from the backpack onto the
|
||||
exit NPC. ACE accepts the token, the inventory removes/decrements it only from
|
||||
the authoritative server response, and the quest teleport exits the dungeon.
|
||||
|
||||
---
|
||||
|
||||
## #213 — Retail client commands were sent to ACE as chat text
|
||||
|
||||
**Status:** IN-PROGRESS — command-family gate passed except two corrective fixes, pending re-gate
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue