[M19-P4] 实装 1.13c 城镇 NPC 交互系统与服务逻辑 (交谈 / 交易 / 赌博 / 治疗 / 修理 / 凯恩鉴定) #484

Closed
opened 2026-09-26 04:22:14 +00:00 by troytt · 1 comment
Owner

背景与目标

基于 SUnitNpc.cpp 实装全 5 幕城镇 NPC 的完整服务会话与业务逻辑 (src/game/vendor-service.ts)。

1.13c Ground Truth 对标 (SUnitNpc.cpp)

  1. 购买与批量购买 (sub_6FCC88B0):
    • 校验玩家金币与背包空间;扣除金币。
    • 常驻物品 (bPermStore = true) 购买后克隆新实例放入玩家背包/腰带,原商店格物品保留;非常驻物品购买后从商店网格移除。
    • Shift + 右键批量购买 (bShiftBuy):
      • 药水:自动买满玩家腰带对应列空槽。
      • 回城卷轴 (tsc) / 辨识卷轴 (isc):自动补满玩家背包中的回城之书 (tbk) / 辨识之书 (ibk) 至 20 张上限。
      • 钥匙 (key):自动补满当前钥匙堆叠至 12 把上限。
  2. 出售与商店回购 (D2GAME_STORES_SellItem_6FCC7680):
    • 禁止出售任务物品或不可出售物品(如赫拉迪克方块等)。
    • 计算收购价并增加玩家金币(遵守角色背包金币携带上限 getInventoryGoldLimit(cLvl))。
    • 若该物品在商店对应分页 (10×10) 有空位且非消耗杂物,放入商店对应分页供玩家原价买回。
  3. 铁匠修理 (D2GAME_NPC_Repair_6FCC95B0):
    • 支持单件修理与“全身装备一键修理”(修复已穿戴装备的耐久度与聚气技能充能,跳过无形装备)。
  4. 医疗与凯恩鉴定 (D2GAME_NPC_Heal_6FCCB220 & D2GAME_NPC_IdentifyAllItems_6FCC9C90):
    • 与阿卡拉、法拉、奥玛斯、贾梅拉、马拉交谈时自动回满生命、法力、体力并清除中毒/冰冻/诅咒状态。
    • 凯恩支持一键鉴定玩家背包中所有未鉴定物品。
  5. 赌博系统 (D2GAME_STORES_FillGamble_6FCCA9F0):
    • 基德、艾尔吉斯、阿尔科、贾梅拉、安亚/尼拉塞克支持赌博面板,购买前显示未鉴定基底与一口价赌博费,购买入包瞬间按 1.13c 概率揭晓品质(Magic 89.85%、Rare 10%、Set 0.1%、Unique 0.05%)与扩展/精华底材升级。

验收标准

  • 实现 src/game/vendor-service.ts 并通过全部交易事务单元测试。
## 背景与目标 基于 `SUnitNpc.cpp` 实装全 5 幕城镇 NPC 的完整服务会话与业务逻辑 (`src/game/vendor-service.ts`)。 ## 1.13c Ground Truth 对标 (`SUnitNpc.cpp`) 1. **购买与批量购买 (`sub_6FCC88B0`)**: - 校验玩家金币与背包空间;扣除金币。 - 常驻物品 (`bPermStore = true`) 购买后克隆新实例放入玩家背包/腰带,原商店格物品保留;非常驻物品购买后从商店网格移除。 - **Shift + 右键批量购买 (`bShiftBuy`)**: - 药水:自动买满玩家腰带对应列空槽。 - 回城卷轴 (`tsc`) / 辨识卷轴 (`isc`):自动补满玩家背包中的回城之书 (`tbk`) / 辨识之书 (`ibk`) 至 20 张上限。 - 钥匙 (`key`):自动补满当前钥匙堆叠至 12 把上限。 2. **出售与商店回购 (`D2GAME_STORES_SellItem_6FCC7680`)**: - 禁止出售任务物品或不可出售物品(如赫拉迪克方块等)。 - 计算收购价并增加玩家金币(遵守角色背包金币携带上限 `getInventoryGoldLimit(cLvl)`)。 - 若该物品在商店对应分页 (10×10) 有空位且非消耗杂物,放入商店对应分页供玩家原价买回。 3. **铁匠修理 (`D2GAME_NPC_Repair_6FCC95B0`)**: - 支持单件修理与“全身装备一键修理”(修复已穿戴装备的耐久度与聚气技能充能,跳过无形装备)。 4. **医疗与凯恩鉴定 (`D2GAME_NPC_Heal_6FCCB220` & `D2GAME_NPC_IdentifyAllItems_6FCC9C90`)**: - 与阿卡拉、法拉、奥玛斯、贾梅拉、马拉交谈时自动回满生命、法力、体力并清除中毒/冰冻/诅咒状态。 - 凯恩支持一键鉴定玩家背包中所有未鉴定物品。 5. **赌博系统 (`D2GAME_STORES_FillGamble_6FCCA9F0`)**: - 基德、艾尔吉斯、阿尔科、贾梅拉、安亚/尼拉塞克支持赌博面板,购买前显示未鉴定基底与一口价赌博费,购买入包瞬间按 1.13c 概率揭晓品质(Magic 89.85%、Rare 10%、Set 0.1%、Unique 0.05%)与扩展/精华底材升级。 ## 验收标准 - [ ] 实现 `src/game/vendor-service.ts` 并通过全部交易事务单元测试。
troytt added this to the [M19] 原版商人 NPC 与交易经济系统 (1.13c Ground Truth) milestone 2026-09-26 04:22:14 +00:00
troytt changed title from [M15-P4] 实装 1.13c 城镇 NPC 交互系统与服务逻辑 (交谈 / 交易 / 赌博 / 治疗 / 修理 / 凯恩鉴定) to [M19-P4] 实装 1.13c 城镇 NPC 交互系统与服务逻辑 (交谈 / 交易 / 赌博 / 治疗 / 修理 / 凯恩鉴定) 2026-09-26 04:24:35 +00:00
Author
Owner

Implemented and verified in commit 3b993cf (tsc --noEmit 0 errors, vitest 17/17 passing, headless Chrome UI verification passing).

Implemented and verified in commit `3b993cf` (`tsc --noEmit` 0 errors, `vitest` 17/17 passing, headless Chrome UI verification passing).
Sign in to join this conversation.
No Label
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: troytt/diablo2-web#484
No description provided.