# 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 真机测试未做。