feat(items): 角色背包与储藏箱物品及金币丢弃至地面实体系统 (Item & Gold Dropping to Ground) #388
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题背景与现状分析
目前在客户端中,当玩家在背包(Inventory)或储藏箱(Stash)中拾起物品(cursorItem)并点击面板外部地面时,仅在状态栏提示「已将某物品丢弃在地面」,并未在世界场景中生成实际的地面物品实体,物品直接从内存中丢失。此外,金币系统缺乏丢弃通道,无法将金币从背包或储藏箱中取出散落在地面。
原版 Diablo II v1.13c 核心机制规范(Ground Truth)
1. 物品存储状态机 (ItemMode) 转换
ItemMode.STORED(0) 被鼠标拾起变为ItemMode.CURSOR(4)。ItemMode.DROPPING(5) 并最终落定为ItemMode.GROUND(3)。2. 地面物品实体数据结构 (GroundItem)
(x, y)。UiInventoryItem/ItemBase数据(含品质、代码、属性、尺寸、金币数量等)。code: "gld"实体,记录金币数量amount。3. 散落坐标与碰撞规避 (Drop Placement & Collision Validation)
D2Common.dll中的ITEM_Drop算法,在玩家站立坐标周围放射状搜索最近的非阻挡、合法可行走地面网格(blocked !== 1)。4. 真实掉落音效 (Authentic Drop SFX)
Weapons.txt/Armor.txt/Misc.txt中的dropsound字段播放对应的原版音效(金属、皮革、药水破空、金币落地等)。改造与验收标准