Files
90CNServer/pvf/docs/independent-drop-editor.md
hanfuit 645b64fe21 DNF90 服务端与启动器完整源码(含 GM 工具功能增强)
服务端(Go):
- GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面
- GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新
- 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新)
- 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍
- 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0)
- 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算

启动器(Python/JS):
- 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭
- GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐)
- 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
2026-11-04 14:31:55 +08:00

62 lines
3.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 独立掉落编辑器
入口:工具 → 独立掉落;也可打开 `etc/independent_drop.etc` 切换 GUI。
外部共享列表位于 `etc/independentdrop/`,同样支持 GUI。
支持按来源、物品名称或 ID 搜索,按掉落模式过滤;编辑、复制、删除、新增记录,
转换直接物品/内嵌列表/外部列表三种模式;对筛选结果批量设置概率、数量和等级。
内嵌列表支持物品选择、增删、ID 与权重编辑;保留重复项、零权重及顺序。
外部列表通过 `etc/independentdrop.lst` 解析,可更换引用或打开共享文件编辑。
副本平衡参数按原字段顺序编辑。未知物品不阻止加载。
修改先进入当前文件草稿,保存独立掉落后进入工作区,再通过保存 PVF 写入归档。
文件 GUI 与文本编辑器共用草稿、撤销及保存流程,归档切换或文本改变后旧表单自动失效。
共享列表修改影响所有引用它的记录。
## 格式与变体研究
参考上游 [pvfUtility 独立掉落模型](https://github.com/Lancarus/pvfUtility/tree/master/PvfCode/ViewModels/independent_drop),
依据实际数据结构重新实现 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]` 不会在保存时丢失。
## 验证
```sh
go test ./...
cd frontend && npm test && npm run build
```
真实样例回归(源文件只读;保存至测试临时目录,测试结束自动清理):
```sh
PVF_TESTFILE=/path/to/Script.pvf PVF_DROP_SAVE_ROUNDTRIP=1 \
go test ./services -run '^TestIndependentDropReal$' -v
```
该测试读取 GUI 文档、验证所有注册的外部列表,修改单个概率字段后比较整个脚本
二进制 payload,要求除该整数之外所有 token 逐字节不变;可选保存重开再次比对。
60ACT 缺少配置时跳过,不能把跳过视为已支持独立掉落。