Add feature queries, dungeon information and event calendar UI

This commit is contained in:
shen
2026-10-15 02:28:01 -07:00
parent 9d9993b007
commit 4e2d39b612
17 changed files with 1248 additions and 11 deletions
+34
View File
@@ -0,0 +1,34 @@
# AVA2 副本与活动日历适配进度
2026-10-15。修改 metin2-client 和 metin2-server;AVA2 只读参考。
## 已实现
百科顶部增加“副本信息”“活动日历”入口,沿用触屏按钮与可移动窗口,缩放时重新排版。
副本首批接入当前服实际安装的 `dragon_lair_access` 和 `dragon_lair_weekly`。服务端直接调用已加载任务的只读 settings 函数,读取当前冷却、加入窗口、门票及动态需求数量;读取当前角色 quest flags 和全服 event flags。保持 Lua 栈和当前任务/角色上下文,不调用 CHARACTER::GetQuestFlag(其内部 GetPC 会切换任务上下文),不设置任务状态、不创建物品、不传送、不消耗门票。
龙穴按任务原规则显示共享场次:加入窗口为闭区间,申请新场次要求冷却严格小于零,因此到期秒仍在等待。个人周任务冷却从接取任务开始,与共享龙穴计时分别显示;当前收集阶段从原任务状态读取。界面提供入口说明和登录期间的单个到期提醒,提醒必须经过一次新的服务端快照确认;场次延期不会按旧到期时间误报。休眠或时间跳变使旧快照失效,重连/换角色销毁提醒。
活动列表按 UTC 展示排期、频道/阵营范围、当前状态及开始/结束提醒。只适配当前服已有的月光宝箱和圣诞袜掉落;同一份 `port_events.tsv` 同时驱动查询和原始 `CreateQuestDropItem` 分支的启用条件。原概率、怪物等级/种类限制、随机数调用、生成物品流程沿用原实现;重叠排期取布尔并集,不叠加概率。原管理员 event flags 仍可独立启用这些活动,日历展示的是计划时段。
调度按服务器当前 Unix 时间计算 `[start,end)`,没有开服补发/定时发奖,也不向 DB 写全局开关。服务重启后从文件恢复,所有共享 locale 的 core 在五秒内发现原子替换的新配置。删除/非法配置使计划效果关闭,并返回 schedule_unavailable;不伪造空日历。有效空文件表示明确无计划活动。
## 配置
服务端示例:`metin2-server/tools/calendar/port_events.tsv.example`。复制到 **LocaleService_GetBasePath() / port_events.tsv**;不是客户端资源或 quest/object。部署时必须让所有 core 读取同一个文件,先验证再用原子 rename 发布。未部署任何生产排期,本批不会自动开启活动。
格式与运维/验证说明见 `metin2-server/docs/FEATURE-DUNGEON-CALENDAR.md`。协议在既有 MTF1 上增量扩展 capability 16/32,旧服降级为未启用;未知能力位忽略,未知协议版本拒绝。所有页面带 request ID 和服务器时间;缺行/重复行/非法时间和范围不提交界面。
## 证据与边界
- `tests/wiki/test_service.py`:新增副本完整性、日历范围和未来能力位兼容测试;与目录/提醒测试合计 22 项通过。
- `tests/wiki/test_timers.py`:验证副本原始到期边界、延期、休眠后查询、日历频道范围、一次提醒及配置删除取消。
- 服务端 `tests/features/test_calendar.py`:编译实际解析/调度/查询主体,验证区间边界、频道/阵营、重叠不叠加、重启、同秒同大小文件原子替换、非法配置关闭;查询与掉落开关一致。
- 服务端 `tests/features/dungeon_lua_probe.cpp`:在 203 独立进程中使用实际 Lua 5.0.3 库和现网编译 quest state 文件验证 settings、动态门票、共享/个人时间、状态、上下文及栈保持;不连接游戏/数据库,不修改运行状态。
- `build/wiki-source/dungeon-calendar-integration.log`:隔离加密登录、查询、分页/提醒开关,以及原有触控背包、装备、商店、仓库、战斗回归通过。
- macOS `dungeon-calendar-mac-build.log`、Android `dungeon-calendar-android-build.log` 构建通过;Android 未进行真机验收。
- `dungeon-info.png`、`event-calendar.png`(另有短屏 `event-calendar-small.png`)为实际原生宿主渲染,使用隔离协议 fixture,不代表生产活动安排。
- FreeBSD 输出仅在 `/root/metin2-features-dev/bin/game`,没有替换 `/usr/metin2` 程序或重启服务。
没有承诺所有副本已迁移:其他副本、NPC 导航/传送、通关次数、最快时间与排名仍待接入。龙穴入口最终资格和门票检查仍由原 NPC 任务负责,查询就绪不等于保证入场。自动洗练/属性锁定、战令任务及领奖持久化、百科模型预览、批量开箱仍未实现,不能标记整体迁移完成。
+4
View File
@@ -112,3 +112,7 @@
每阶段交付:客户端提交、服务端提交(如需)、协议与字段文档、资料生成脚本、资源清单、自动测试、macOS 联机记录、Android 真机交互记录、部署/回退说明。
完成条件:隔离环境通过后再安排 203 部署,实际任务闭环通过方可标记完成;编译、模拟包和静态比较不能替代联机验收。
2026-10-15 进度:阶段 0 的资料/界面基础与阶段 1 的静态查询子批已实现并完成本机回归;详情见 AVA2-WIKI-IMPLEMENTATION.md。服务端握手/查询协议、模型预览、阶段 2 以后均未完成,未部署上述新功能到 203。
2026-10-15 后续批次:阶段 0 的只读能力协商、阶段 2/3 的掉落/来源/宝箱查询、阶段 4 属性面板已实现并在隔离环境测试;未部署 203,待联机与真机验收。范围和缺口见 AVA2-READONLY-FEATURES.md。
2026-10-15 再续:龙穴/周任务信息与提醒、共享真实掉落开关的活动日历已实现并在隔离环境验证。副本仅首批龙穴;活动仅月光宝箱/圣诞袜,生产未部署,无生产排期。自动洗练/锁定、战令、模型预览、批量开箱仍待实现。见 AVA2-DUNGEON-CALENDAR.md。
+45
View File
@@ -0,0 +1,45 @@
# AVA2 迁移:掉落、宝箱和角色属性查询
日期:2026-10-15。阶段 0 查询基础、阶段 2/3 的只读查询、阶段 4 属性面板已实现;生产服联机验收尚未完成。
## 这批代码
- metin2-server:`ITEM_MANAGER::PortWikiDrops/PortWikiChest` 读取已加载的同一份数据;`/mt_features` 提供能力协商、怪物掉落、物品反查来源、宝箱和自身属性快照。
- metin2-client:`mt_feature_service` 管理会话请求、能力、超时、分页与原子提交;百科的详情页接入远程数据和来源跳转,增加详细属性面板。
- 怪物目标栏有“掉落”入口。触控背包单击显示固定提示,提示中的“百科 / 宝箱预览”可打开查询;开始拖动前隐藏固定提示,保留原穿脱、背包移动和出售流程。
- 百科“详细属性”可查看当前服务器实际支持的属性,分类、筛选和翻页;面板可见时每三秒同步,没有数据时显示未知,不用零值代替失败。
- 原始 AVA2/root、ava2-client、现有游戏物品和经济规则没有更改。本批查询没有开箱、洗练、奖励或 DB 写入。
## 数据和语义
怪物:通用掉落的角色等级范围、独立掉落组、击杀组候选、等级组、手套/增益资格组及怪物模板额外掉落。通用变身球按原规则过滤,其他组保持原生成分支的候选行为。返回权重/条件,不把经过等级、倍率和特殊事件修正的最终概率伪算成静态百分比。
仍未覆盖全部 `CreateQuestDropItem`、硬编码事件、矿石额外掉宝石和各地图特殊分支。UI 明确标示范围;零行只表示当前已覆盖范围没有配置,不能宣布没有任何获取途径。
宝箱:仅处理走 `GiveItemFromSpecialItemGroup` 的 GIFTBOX/TREASURE_BOX,以及 NORMAL/PCT 两种已确认模式。NORMAL 为按权重抽一项;PCT 为各项独立与 1..100 随机数比较,支持多项/无奖励。金币、经验、召唤怪物、减速、扣血、中毒和怪物组均单独标示,不当成物品 ID。钥匙、资格和消耗保留原校验;没有新增批量开箱。QUEST/SPECIAL 组与自定义开箱不伪装通用宝箱。
属性:服务端用当前编译的 POINT 常量访问实际属性,客户端仅使用稳定文字键;不复制 AVA2 面板的点号。HP/SP/等级用原角色 getter,其他用实际 point。研究怪物加成对 Boss 的排除规则及活动倍率另行显示的边界在面板说明,不把汇总值当伤害计算器。
## 协议与旧服
只复用现有聊天命令/命令回包的封装,不复制 AVA2 包头,不改变物品/属性数组布局。契约见 metin2-server `docs/FEATURE-QUERY-PROTOCOL.md`。
未协商能力前不发送业务查询。旧服不支持时会超时并显示“未启用”,不显示空掉落;服务端每角色限流,客户端串行发送,有限次 rate 重试。响应与 request ID/种类/目标/偏移匹配,完整 begin/row/end 后才更新 UI。换角色清理等待队列和回调。`mt_wiki.ServerCapabilities()` 返回 None/布尔以区分未知与已协商。
## 验证
- `tests/wiki/test_service.py`:7 项协议测试,含旧服、过期包、缺行、错误行、负数属性、限流重试、关闭取消和两端属性键一致。
- `tests/wiki/test_catalogue.py`:7 项已有模板目录测试通过。
- 服务端 `tests/features/test_queries.py`:编译真实查询/命令主体及原始分组类,对通用/独立/击杀/等级/手套/附加掉落、宝箱模式和特殊奖励、反查、分页、限流、参数、HP getter 和 RNG 未推进进行验证。结合真实 FreeBSD 完整游戏构建,不用模拟编译替代目标编译。
- `build/wiki-source/features-integration-final.log`:隔离加密登录/游戏连接、能力协商、来源跳转、跨页、宝箱奖励和属性同步,加原有触控穿脱/拖动/商店/战斗回归。
- `features-server-build.log`:203 独立副本的 FreeBSD 编译;只输出至 `/root/metin2-features-dev/bin/game`。
- `features-english-regression.log`:原英文资源完整回归通过。
- `features-tooltip-lifecycle.log`:实际 Python 2 宿主验证原固定提示跟随设置不被重置,过期弱引用不会中断下一次拖动。
- macOS 实际渲染:`chest-preview.png`、`character-details.png`。截图数据来自隔离协议 fixture,不是 203 实际宝箱奖励;fixture 未提供的属性显示未知。
- `features-android-build-final.log`:Android 编译成功;没有安装/真机验收。
## 明确剩余
没有替换运行中的 203 游戏二进制,也没有迁移 DB;当前连接旧服会显示查询未支持。生产联机与 Android 真机验证仍需后续安排。
后续已接入龙穴共享场次、个人周任务、真实门票/冷却查询与提醒,以及活动日历和月光/圣诞袜实际排期效果;范围和验证见 `AVA2-DUNGEON-CALENDAR.md`。其余副本尚未适配。
自动洗练与属性锁定、战令任务、Vulkan 模型预览、批量开箱仍未实现。完整剩余范围见迁移计划,不能把这批查询实现记为全部七项已完成。
+6
View File
@@ -265,3 +265,9 @@ Mac 和 Android 更新包在 dist/*AVA2Bio-20261014.zip,Android 包含 APK 与
### 2026-10-15:AVA2 百科查询首批
用户授权按 AVA2 七项迁移计划开始开发。已接入当前服务端模板目录、中文/ID 搜索、物品/怪物分页、升级材料关联跳转、生物学家材料图标入口及独立 wiki 资源包。服务端仅增加公开资料只读导出工具;203 未部署或重启。阶段 0 查询协议/能力握手及阶段 1 模型预览尚未完成,掉落/宝箱及其余功能仍待实现。范围、证据与限制见 `AVA2-WIKI-IMPLEMENTATION.md`。
### 2026-10-15:只读掉落/宝箱/属性查询
新增当前服务端已加载分组的只读查询、来源反查、NORMAL/PCT 宝箱模式、角色有效属性快照,以及客户端能力协商/请求匹配/分页/降级。接入百科、怪物目标和触控背包提示;保持原开箱及经济行为。FreeBSD 独立构建、协议及触控回归通过;没有替换 203 运行程序。未完成副本、洗练、日历/战令与模型预览,边界及证据见 `AVA2-READONLY-FEATURES.md`。
2026-10-15 再续:龙穴/周任务信息与提醒、共享真实掉落开关的活动日历已实现并在隔离环境验证。副本仅首批龙穴;活动仅月光宝箱/圣诞袜,生产未部署,无生产排期。自动洗练/锁定、战令、模型预览、批量开箱仍待实现。见 AVA2-DUNGEON-CALENDAR.md。