4.3 KiB
4.3 KiB
AVA2 批量开箱适配进度(v1)
2026-10-15。修改了 metin2-client 和 metin2-server,AVA2 代码只作参考(ENABLE_MULTI_CHEST:uiinventory.py 的 Ctrl + 右键、uichestdropinfo.py、服务端 do_chest_drop / CHARACTER::OpenChest)。服务端规则和协议见 metin2-server/docs/FEATURE-CHEST.md。
与 AVA2 的差异
| 项目 | AVA2 | 本实现 |
|---|---|---|
| 触发 | Ctrl + 右键打开带滑块的窗口;Ctrl + Z + 右键直接开整叠 | Ctrl + 右键打开数量窗口(1 / 10 / 50 / 全部),点“开启”;没有直接开整叠的组合键 |
| 命令 | /chest_drop WINDOW CELL COUNT |
/mt_chest 1 open CELL COUNT,不新增包头 |
| 开箱过程 | 重写的 GiveItemFromSpecialItemGroupNew / AutoGiveItemChest,单次最多 1000 |
每个礼盒都调用原 UseItem 礼盒路径,检查、奖励组抽取、金币/经验、日志、扣除都不变;单次最多 200 |
| 范围 | 一叠 | 同一种礼盒,先开选中的格子,再开背包里其他格子(203 上多数礼盒不叠加) |
| 背包满 | 由 AutoGiveItemChest 处理 | 每开一个前要求至少 3 格空位,不足就停止,奖励不会掉在地上 |
| 不允许批量 | — | 奖励组含刷怪、怪物组、减速、中毒、吸血的礼盒,以及非 ITEM_GIFTBOX 的物品(例如带任务脚本的宝箱) |
客户端
- 模块
mt_chest(src/platform/ScriptLib/ChestScript.inc),在PythonBoot.cpp中安装。替换了uiInventory.InventoryWindow.UseItemSlot:按住 Ctrl 右键 ITEM_GIFTBOX 时打开窗口,其他情况调用原方法。原方法本身不使用 Ctrl(联机时检查过它的co_names)。 PythonItemModule.cpp新导出item.ITEM_TYPE_GIFTBOX。- 窗口显示礼盒名称、背包内总数、数量按钮(
【】表示已选;“全部”最多 200)、开启按钮和上次结果。选中格子里的礼盒被移走时,自动改用背包里同一种礼盒的其他格子。 - 等待回复时,以及两次发送间隔不足 0.5 秒时,“开启”按钮不可用。
- 结果:聊天框一行“开启 N 个,金币 +N(停止原因)”,之后每行最多 5 种获得的物品(名称 ×数量)。单个礼盒的提示由服务端暂存,不再逐条刷屏;被原路径拒绝时转发一次拒绝提示。
- 3 秒没有回复:在聊天框提示一次“服务器尚未启用批量开启”,之后 Ctrl + 右键也走原来的单个使用;再收到回复会自动恢复。
- 经验不在汇总里(服务端只汇报背包物品和金币变化)。
证据
tests/wiki/test_chest.py(CTest:port.chest)共 6 项通过,覆盖:- 发送一次、等待回复、获得行累积到 done、数量上限 200、负的金币差、发送间隔;
- error 解析,畸形行和其他前缀;
- 超时后标记不支持,迟到的回复会恢复;
- 聊天汇总行(停止原因、金币、每行 5 种);
- 钩子:不按 Ctrl 和非礼盒走原方法,Ctrl + 右键礼盒打开窗口,“全部”,选中格子消失后改用其他格子,命令拦截,超时后回退,窗口关闭;
- 与服务端
port_chest.h的常量、错误码和停止原因一致。
tests/wiki全部 57 项通过(1 项跳过)。- 2026-10-15 在 203 channel5 测试核心(13040,独立二进制)用 macOS 客户端以 [SA]Admin 联机验收,礼盒用
/item生成:- 50037(可叠加,30 个)开 10 个:
done 50037 10 10 done 0,获得 6 种物品,背包差值与MTCH1 got完全一致; - 50070(不叠加,4 个分在 4 格)开全部:
done 50070 4 4 done 100000,跨格子全部开启,金币 +100000 与余额变化一致; - 71036(奖励组刷怪):
error kind,没有扣除; - 连发两条命令:第二条
error rate; - 50037 剩余 20 个开全部:
done 50037 20 20 done 0,获得 11 种; - 不按 Ctrl 右键:原单个使用,礼盒正常扣除;
- 日志库只有原路径写的
SYSTEM、TREASURE_EXP、TREASURE_GOLD行;syserr 没有新错误(只有原有的new_quest_lv52LUA_ERROR)。
- 50037(可叠加,30 个)开 10 个:
- 2026-10-15 16:43 部署到 203 正式环境(服务端 bc32475),CH1(13000)用同一场景复验通过(50037 开 10 个 / 剩余 20 个、50070 跨 4 格、71036 拒绝、限速、普通右键不变)。
- 未做 Android 真机测试;触屏没有 Ctrl,暂无触屏入口。