Add world boss window (AVA2 uitrack world-boss tab, read-only)

mt_boss lists the server's timed boss regens from the MTF1 "bosses"
query: alive/max, countdown, map-local position and period, paged by 8,
with per-boss spawn reminders that only fire on a fresh alive snapshot.
Teleport is left out.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
shenlei
2026-10-15 22:36:04 +09:00
co-authored by Claude Opus 5.5
parent 13a462b6fc
commit ffe097ec57
8 changed files with 468 additions and 8 deletions
+64
View File
@@ -0,0 +1,64 @@
# AVA2 世界 Boss 追踪进度(v1)
2026-10-15。参考 AVA2 `uitrack` 的世界 Boss 页,只读。服务端见 metin2-server `docs/FEATURE-BOSS-TRACK.md`。没有移植 AVA2 的传送按钮(它会改变游戏进程);副本页已经由 `mt_dungeons` 实现。
## 与 AVA2 的差异
| 项目 | AVA2 | 本实现 |
| --- | --- | --- |
| 数据来源 | 专用封包 | 原有 `/mt_features` 查询,种类 `bosses`(能力位 256) |
| 跨核心 | 不明(AVA2 服务端源码不在本机) | 每个核心用原 `HEADER_GG_RELAY` 广播自己的 Boss 刷新点,旧核心会忽略 |
| 传送 | 有 | 无 |
| 提醒 | 有 | 有:刷新后在聊天框提示,以服务器快照为准 |
## 窗口
- 入口:小地图左侧按钮列中的“Boss”(换线按钮下方)。
- 标题“世界Boss”,有“刷新”“上一页/下一页”按钮,每页 8 行。
- 每行显示:
- `[CHn]` 或 `[共享]`(频道 99)、Boss 名、地图名;
- 状态(存活 a/m、刷新倒计时、即将刷新、不再刷新)、坐标(地图内坐标 /100,`ANYWHERE` 显示“随机位置”)、刷新周期;
- “提醒:开/关”按钮,只能对未存活、有计时的 Boss 打开。
- 窗口打开时每 30 秒刷新一次。倒计时按服务器时间和本地经过时间计算。
- 名称:
- Boss 名取自 `nonplayer.GetMonsterName`;
- 地图名用服务端地图编号 → 地图目录(`MAPS`,取自服务端 `map/index`)在 `localeInfo.MINIMAP_ZONE_NAME_DICT` 中查找;
- 找不到时显示“地图N”。
## 提醒
- 提醒的键是 (vnum, 地图, 频道, x, y)。
- 窗口关闭时,提醒过的 Boss 计时到期 2 秒后,客户端会主动查询一次。
- 只有新快照显示它存活时,聊天框才提示“X 已在 Y 刷新”,然后清除这条提醒;只到计时不提示。
- 服务器不再列出的 Boss 会被移出提醒。
- 离开游戏(换线、换角色)时,清空快照和提醒。
## 客户端
- 模块 `mt_boss`(`src/platform/ScriptLib/BossScript.inc`),在 `PythonBoot.cpp` 中安装,挂接 `game.GameWindow.Open/Close`。
- `FeatureServiceScript.inc`:
- 新增 `bosses` 种类和 `boss` 行解析(13 项,X/Y 有符号);
- 校验 vnum/地图/周期非 0、频道 ≤ 255、alive ≤ max ≤ 255;
- 一次最多 128 行。
## 证据
- `tests/wiki/test_boss.py`(CTest:`port.boss`)共 5 项通过,覆盖:
- 入口位置、各状态文字、坐标、分页;
- 只在确认刷新后提示;
- 未启用和空列表的提示;
- 关闭时复位;
- 地图表。
- `tests/wiki/test_service.py` 新增 `boss` 行和旧服务端(cap 255)返回 unsupported 的测试。
- 2026-10-15 联机测试(203,macOS 原生客户端,账号 admin):
- 临时开了两个 channel5 核心:13040 放地图 1/21/41/68,13041 放地图 72/5。
- 从任一核心进入游戏,窗口都列出两个核心的 5 个 Boss(海盗 5001 ×2、2307、1192、5161),倒计时一致。
- 截图确认布局正常。测试后 channel5 已恢复原配置。
## 限制和未完成
- 只列出有定时刷新的 Boss 刷新点(regen 文件里 `time > 0`);由任务或事件刷出的 Boss 不在列表中。
- 共享频道(game99)的 Boss 要等 game99 换上新服务端才会出现。
- 副本内地图(如 5、72)在 `MINIMAP_ZONE_NAME_DICT` 中没有名称,显示“地图N”。
- macOS 桌面客户端没有中文字体,窗口文字显示为 `?`。
- Android 真机测试未做。
+1
View File
@@ -124,3 +124,4 @@
2026-10-15 显示开关(计划外追加,参考 AVA2 ENABLE_GRAPHIC_ON_OFF / HIDE_OBJECTS):仅客户端,5 档特效等级(挂载特效 Active/Deactive)、树木和云开关、名字和伤害数字快捷开关;macOS 客户端已在 203 测试核心联机验收,未做 Android 真机测试。不移植摆摊/宠物/坐骑显示范围。见 AVA2-DISPLAY.md。
2026-10-15 换线(计划外追加,参考 AVA2 ENABLE_CHANNEL_CHANGE):仅客户端,按原流程 /logout → 登录目标频道(serverInfo 频道表 + 保存的账号)→ isAutoSelect 进入同一角色,不做服务端传送;macOS 客户端已在 203 正式频道 CH1↔CH2 联机验收,未做 Android 真机测试。见 AVA2-CHANNEL.md。
2026-10-15 世界 Boss 追踪(AVA2 uitrack 世界 Boss 页,只读,不含传送):服务端各核心用原 HEADER_GG_RELAY(名字 #mt_boss)共享定时 Boss 刷新点,旧核心忽略;客户端 mt_boss 窗口 + 刷新提醒,查询种类 bosses(能力位 256);已在 203 两个 channel5 测试核心上做跨核心联机验收,正式核心尚未部署。见 AVA2-BOSS.md。