任务面板(Quest Log)任务说明与阶段目标严格读取原版 .tbl 字符串规范 #381

Closed
opened 2026-09-22 09:06:36 +00:00 by troytt · 0 comments
Owner

问题背景与现状

在当前的客户端任务日志面板(快捷键 Q,见用户反馈截图 media_1790066555532.png)中:

  1. 任务描述文本硬编码:src/ui/world-panels.ts 中的 ACT_QUESTS 常量使用了 27 个现代大白话编写的固定摘要字符串(例如邪恶洞窟写为 "阿卡拉委托你肃清鲜血荒地地下的邪恶洞窟。任务已完成,奖励 +1 技能点。"),完全脱离了暗黑 2 经典的 MPQ .tbl 文本数据系统。
  2. 缺乏阶段性目标(Quest Objectives / Stages):暗黑 2 原版的任务在进行中会随着剧情推进刷新阶段提示(例如:进入荒野寻找洞穴 -> 肃清洞窟中的所有怪物 -> 剩余怪物数量统计 -> 返回营地向阿卡拉领赏),且完成的任务在重新打开面板时应显示经典结语(如 qstsprevious:“你在先前的遊戲之中完成這個任務了。” 或对应 NPC 的回报对话)。
  3. 任务面板 Tab 栏未对齐原版切页:任务日志顶部的 Act I ~ Act V 切换标签目前为 Canvas 纯色矩形绘制,未采用原版 data\global\ui\MENU\expquesttabs.dc6(已切图就绪于 public/ui/quest-tabs.png,尺寸 63x31,包含 10 帧罗马数字雕刻凹凸按压与激活态)。

原版 1.13c Ground Truth(任务 TBL 键名规范)

在 Diablo II 1.13c 中,全五幕共 27 个任务在 string.tbl、expansionstring.tbl 与 patchstring.tbl 中具有极其严谨的键值命名结构:

1. 任务标题(Quest Title)

统一规则:qstsa<act>q<quest>

  • Act 1: qstsa1q1 ("邪惡洞穴"), qstsa1q2 ("修女埋骨之所"), qstsa1q3 ("尋找凱恩"), qstsa1q4 ("遺忘之塔"), qstsa1q5 ("交易的工具"), qstsa1q6 ("屠殺的修女")
  • Act 2: qstsa2q1 ("羅達門特的巢穴"), qstsa2q2 ("赫拉迪克之杖"), qstsa2q3 ("污染的太陽"), qstsa2q4 ("神秘避難所"), qstsa2q5 ("召喚者"), qstsa2q6 ("七個古墓")
  • Act 3: qstsa3q1 ("黃金鳥"), qstsa3q2 ("古代宗教之刃"), qstsa3q3 ("克林姆的意志"), qstsa3q4 ("藍·森的古書"), qstsa3q5 ("黑暗的神廟"), qstsa3q6 ("守護者")
  • Act 4: qstsa4q1 ("墮落的天使"), qstsa4q2 ("地獄熔爐"), qstsa4q3 ("恐怖的結局")
  • Act 5: qstsa5q1 ("哈洛加斯圍攻戰"), qstsa5q2 ("亞瑞特山上的救援行動"), qstsa5q3 ("冰之牢"), qstsa5q4 ("背叛的先驅"), qstsa5q5 ("通過祭典"), qstsa5q6 ("毀滅的終結")

2. 任务阶段说明(Quest Stages & Objectives)

统一规则:qstsa<act>q<quest><stage>
以 Act 1 Quest 1(邪恶洞穴)为例:

  • qstsa1q11: "在蘿格營地外面的荒野中,找尋一個洞穴。"
  • qstsa1q12: "殺死所有盤踞在洞穴中的怪物。"
  • qstsa1q14: "剩下的怪物:%d" (动态插值)
  • qstsa1q15: "回去找阿卡拉領賞。"

以 Act 1 Quest 2(修女埋骨之所)为例:

  • qstsa1q21: "在埋骨之地中消滅血鳥。"
  • qstsa1q22: "在蘿格營地附近的埋骨之地中消滅血鳥。"
  • qstsa1q23: "消滅血鳥之後,回去找卡夏領賞。"

3. 任务完成与历史状态提示

  • qstsprevious: "你在先前的遊戲之中完成這個任務了。"(当任务已在以往游戏中达成时,任务说明区展示此通用原版说明)

改造与验收标准

  1. 废弃硬编码文本:
    • 彻底移除 ACT_QUESTS 中的手写硬编码中文描述,改为根据任务 ID(如 a1q1)和当前任务状态(未接取/进行中阶段/已完成)动态查询 tbl 数据管理器。
  2. 多语言与 TBL 本地化:
    • 接入现有的 TBL 语言表加载系统(支持繁中/简中/英文等),确保语言切换时任务标题与阶段任务描述自动无缝切换。
  3. 支持阶段性目标显示:
    • 任务说明区根据任务系统当前记录的 stage 渲染对应的阶段目标文字(若任务已完成,显示原版完成文本或 qstsprevious)。
  4. Act 1~5 切页资产对齐:
    • 任务面板顶部的 Act 切页从硬编码方块重构为复刻原版 expquesttabs.dc6(public/ui/quest-tabs.png),偶数帧为打开态,奇数帧为关闭态。
  5. 单元测试与类型安全:
    • 编写针对 27 个任务的 tbl key 映射自动化测试,确保所有任务均能精准解析出原版 1.13c 文本,无 undefined 或缺损。
## 问题背景与现状 在当前的客户端任务日志面板(快捷键 `Q`,见用户反馈截图 `media_1790066555532.png`)中: 1. **任务描述文本硬编码**:`src/ui/world-panels.ts` 中的 `ACT_QUESTS` 常量使用了 27 个现代大白话编写的固定摘要字符串(例如邪恶洞窟写为 `"阿卡拉委托你肃清鲜血荒地地下的邪恶洞窟。任务已完成,奖励 +1 技能点。"`),完全脱离了暗黑 2 经典的 MPQ `.tbl` 文本数据系统。 2. **缺乏阶段性目标(Quest Objectives / Stages)**:暗黑 2 原版的任务在进行中会随着剧情推进刷新阶段提示(例如:进入荒野寻找洞穴 -> 肃清洞窟中的所有怪物 -> 剩余怪物数量统计 -> 返回营地向阿卡拉领赏),且完成的任务在重新打开面板时应显示经典结语(如 `qstsprevious`:“你在先前的遊戲之中完成這個任務了。” 或对应 NPC 的回报对话)。 3. **任务面板 Tab 栏未对齐原版切页**:任务日志顶部的 Act I ~ Act V 切换标签目前为 Canvas 纯色矩形绘制,未采用原版 `data\global\ui\MENU\expquesttabs.dc6`(已切图就绪于 `public/ui/quest-tabs.png`,尺寸 63x31,包含 10 帧罗马数字雕刻凹凸按压与激活态)。 --- ## 原版 1.13c Ground Truth(任务 TBL 键名规范) 在 Diablo II 1.13c 中,全五幕共 27 个任务在 `string.tbl`、`expansionstring.tbl` 与 `patchstring.tbl` 中具有极其严谨的键值命名结构: ### 1. 任务标题(Quest Title) 统一规则:`qstsa<act>q<quest>` - Act 1: `qstsa1q1` ("邪惡洞穴"), `qstsa1q2` ("修女埋骨之所"), `qstsa1q3` ("尋找凱恩"), `qstsa1q4` ("遺忘之塔"), `qstsa1q5` ("交易的工具"), `qstsa1q6` ("屠殺的修女") - Act 2: `qstsa2q1` ("羅達門特的巢穴"), `qstsa2q2` ("赫拉迪克之杖"), `qstsa2q3` ("污染的太陽"), `qstsa2q4` ("神秘避難所"), `qstsa2q5` ("召喚者"), `qstsa2q6` ("七個古墓") - Act 3: `qstsa3q1` ("黃金鳥"), `qstsa3q2` ("古代宗教之刃"), `qstsa3q3` ("克林姆的意志"), `qstsa3q4` ("藍·森的古書"), `qstsa3q5` ("黑暗的神廟"), `qstsa3q6` ("守護者") - Act 4: `qstsa4q1` ("墮落的天使"), `qstsa4q2` ("地獄熔爐"), `qstsa4q3` ("恐怖的結局") - Act 5: `qstsa5q1` ("哈洛加斯圍攻戰"), `qstsa5q2` ("亞瑞特山上的救援行動"), `qstsa5q3` ("冰之牢"), `qstsa5q4` ("背叛的先驅"), `qstsa5q5` ("通過祭典"), `qstsa5q6` ("毀滅的終結") ### 2. 任务阶段说明(Quest Stages & Objectives) 统一规则:`qstsa<act>q<quest><stage>` 以 Act 1 Quest 1(邪恶洞穴)为例: - `qstsa1q11`: "在蘿格營地外面的荒野中,找尋一個洞穴。" - `qstsa1q12`: "殺死所有盤踞在洞穴中的怪物。" - `qstsa1q14`: "剩下的怪物:%d" (动态插值) - `qstsa1q15`: "回去找阿卡拉領賞。" 以 Act 1 Quest 2(修女埋骨之所)为例: - `qstsa1q21`: "在埋骨之地中消滅血鳥。" - `qstsa1q22`: "在蘿格營地附近的埋骨之地中消滅血鳥。" - `qstsa1q23`: "消滅血鳥之後,回去找卡夏領賞。" ### 3. 任务完成与历史状态提示 - `qstsprevious`: "你在先前的遊戲之中完成這個任務了。"(当任务已在以往游戏中达成时,任务说明区展示此通用原版说明) --- ## 改造与验收标准 1. **废弃硬编码文本**: - 彻底移除 `ACT_QUESTS` 中的手写硬编码中文描述,改为根据任务 ID(如 `a1q1`)和当前任务状态(未接取/进行中阶段/已完成)动态查询 `tbl` 数据管理器。 2. **多语言与 TBL 本地化**: - 接入现有的 TBL 语言表加载系统(支持繁中/简中/英文等),确保语言切换时任务标题与阶段任务描述自动无缝切换。 3. **支持阶段性目标显示**: - 任务说明区根据任务系统当前记录的 `stage` 渲染对应的阶段目标文字(若任务已完成,显示原版完成文本或 `qstsprevious`)。 4. **Act 1~5 切页资产对齐**: - 任务面板顶部的 Act 切页从硬编码方块重构为复刻原版 `expquesttabs.dc6`(`public/ui/quest-tabs.png`),偶数帧为打开态,奇数帧为关闭态。 5. **单元测试与类型安全**: - 编写针对 27 个任务的 tbl key 映射自动化测试,确保所有任务均能精准解析出原版 1.13c 文本,无 `undefined` 或缺损。
Sign in to join this conversation.
No Label
No Milestone
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#381
No description provided.