服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
3.4 KiB
独立掉落编辑器
入口:工具 → 独立掉落;也可打开 etc/independent_drop.etc 切换 GUI。
外部共享列表位于 etc/independentdrop/,同样支持 GUI。
支持按来源、物品名称或 ID 搜索,按掉落模式过滤;编辑、复制、删除、新增记录,
转换直接物品/内嵌列表/外部列表三种模式;对筛选结果批量设置概率、数量和等级。
内嵌列表支持物品选择、增删、ID 与权重编辑;保留重复项、零权重及顺序。
外部列表通过 etc/independentdrop.lst 解析,可更换引用或打开共享文件编辑。
副本平衡参数按原字段顺序编辑。未知物品不阻止加载。
修改先进入当前文件草稿,保存独立掉落后进入工作区,再通过保存 PVF 写入归档。 文件 GUI 与文本编辑器共用草稿、撤销及保存流程,归档切换或文本改变后旧表单自动失效。 共享列表修改影响所有引用它的记录。
格式与变体研究
参考上游 pvfUtility 独立掉落模型, 依据实际数据结构重新实现 Go 投影与 Vue GUI,不引入 WPF、商业组件或上游二进制。
17 项主体依次为:来源类型、来源 ID、物品 ID、五档概率、五档数量、最低等级、
最高等级、职业、掉落模式。常规模式的概率分母为 1000000,每档独立计算。
界面保留原始难度顺序,不把不同客户端的第五档强行解释为同一难度名称。
0 为直接物品,1 为内嵌 [list] ID/权重对,2 为 [list] 中的外部列表 ID。
上游采用三种模式;模式 2 由合成样例验证,当前真实样例没有使用该模式。
本地 testdata 验证结果:
| 变体 | 主体记录数 | 模式 | 差异 |
|---|---|---|---|
| TW | 3898 | 0、1 | 132 个外部列表;6 个副本平衡参数 |
| 90CN(两份样例) | 2173 | 0、1 | 外部列表索引为空 |
| 90US | 2178 | 0、1 | 外部列表索引为空 |
| 100CN | 2000 | 0、1、5 | 模式 5 与 replace list 条件段 |
| 110US | 1834 | 0、1、5 | 模式 5 与 replace list 条件段 |
| 115US | 1806 | 0、1、5 | 模式 5 与 replace list 条件段 |
| 60ACT(A1/A4/A5/A12 样例) | — | — | 未包含该文件,入口明确提示不支持 |
模式 5 的概率含义尚未确认:展示原始值,禁止 GUI 修改概率、列表、模式及结构性增删,
允许已确认的来源、数量、等级等主体字段编辑。附属条件及其他未知 section 原样保留。
批量修改概率若包含扩展模式会明确拒绝,应先过滤为常规模式。
不对其他变体套用 TW 的整个文件序列化;字段编辑仅替换精确 UTF-16 源码范围。
已观察到的 [replace list]/[dungeon condition] 不会在保存时丢失。
验证
go test ./...
cd frontend && npm test && npm run build
真实样例回归(源文件只读;保存至测试临时目录,测试结束自动清理):
PVF_TESTFILE=/path/to/Script.pvf PVF_DROP_SAVE_ROUNDTRIP=1 \
go test ./services -run '^TestIndependentDropReal$' -v
该测试读取 GUI 文档、验证所有注册的外部列表,修改单个概率字段后比较整个脚本 二进制 payload,要求除该整数之外所有 token 逐字节不变;可选保存重开再次比对。 60ACT 缺少配置时跳过,不能把跳过视为已支持独立掉落。