feat(ui): 掉落物转 UI 背包/装备模型桥接、中文化词缀 Tooltip 与拾取闭环 (Drop Item to UiInventoryItem Bridge, Bilingual Tooltip & Pickup Loop) #407
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?
问题背景与现状分析
目前在
src/game/drop-pipeline.ts与src/ui/inventory.ts之间存在核心数据契约断层:executeDropPipeline产出的对象是底层Item(来自src/game/items.ts):其quality是数字枚举1..9(如ItemQuality.MAGIC = 4),stats是Record<string, number>字典,且不包含invFile、nameZh、baseNameZh、allowedSlots等 UI 字段。act-scene.ts:2334this.hudManager.inventory.autoPlaceInGrid(item.item))直接把地面物品内部的item塞进了 UI 背包InventoryPanel!InventoryPanel渲染背包图标依赖item.invFile查找BAKED_UI_MANIFEST.itemRects,渲染悬浮窗 Tooltip 依赖item.stats为{ text, color }[]数组,装备穿戴依赖item.allowedSlots。若直接塞入原始Item,会导致捡起打怪掉落的装备后背包内无贴图显示、鼠标悬停崩溃或无词缀显示、且无法穿戴到角色装备栏!原版 Diablo II v1.13c 核心机制规范(Ground Truth)
1.
Item→UiInventoryItem全属性无损转换器invFile):根据物品code从Weapons.txt/Armor.txt/Misc.txt解析invfile(暗金/套装优先匹配uniqueinvfile/setinvfile并回退基础invfile),确保在BAKED_UI_MANIFEST.itemRects中 100% 命中原版 DC6 背包图标;地面翻转图标同步命中flippyfile。allowedSlots):根据ItemTypes.txt的BodyLoc1/BodyLoc2及类型继承树(weap,shld,tors,helm,glov,boot,belt,ring,amul)精确映射至EquipSlotId[](helm,amulet,weapon1,weapon2,armor,gloves,ring1,belt,ring2,boots)。formatItemTooltip&tooltip-i18n.ts):nameZh与baseNameZh。mindam~maxdam/ 双手伤害)、防具防御(defense)、耐久度(durability)、需求属性(reqStr,reqLevel)以及rolledProps魔法/稀有/暗金/套装词条完整格式化为带颜色码的UiInventoryItem.stats数组。2. 拾取分流与背包/腰带/金币闭环
hudManager.inventory.gold并移除地面实体。<= 48px)并将其转换为UiInventoryItem放入背包10×4网格;若背包空间不足,严格触发原版triggerFlippyBounce抛起弹跳动画与「包裹已满」反馈。改造与验收标准
itemToUiInventoryItem(item: Item, dropTables?: DropTables): UiInventoryItem桥接转换器。flippy图标与中文 Alt 标签。inv*.dc6物品贴图,鼠标悬停展示完整的暗黑 2 原版中文属性/词缀悬浮窗(Tooltip),且支持拖拽或右键穿戴到对应装备栏。Milestone M11.4 (Issue #407) Gate 1 Verification: 100% PASS
All 5 Gate subagents voted unanimously APPROVE / CLEAN:
itemToUiInventoryItembridge, 100%invFileresolution against baked manifest,allowedSlotsmapping via BodyLoc1/2, bilingual localized tooltips)act-scene.ts, gold clamping toPLAYER_GOLD_CAP, inventory full refusal feedback)TypeError, full 10x4 inventory refusal bounce)Merged to
mainat commitb5754c0and pushed toorigin/main.Worktree
.worktrees/issue-407pruned cleanly.