DNF90 服务端与启动器完整源码(含 GM 工具功能增强)

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

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

No files matched your search

+61
View File
@@ -0,0 +1,61 @@
# 独立掉落编辑器
入口:工具 → 独立掉落;也可打开 `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 缺少配置时跳过,不能把跳过视为已支持独立掉落。