Files
90CNServer/pvf/docs/115CN兼容性.md
T
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

100 lines
5.6 KiB
Markdown
Raw 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.
# 115CN 兼容性检查
检查日期:2026-10-31。样本位于本地 `testdata/115CN`,共 6,251,369 个文件。
本报告验证内核、GUI 数据读取和源码编辑逻辑,不代表已逐项完成桌面窗口交互验收。
## 容器
- 独立识别为 `paged115cn` / `115CN`,不冒用 `115US` 身份。
- 配套客户端参数和 `sk.dat` 封装在 `internal/pvf/assets/clients/115cn.bin`。
日常打开无需同目录的 exe 或 `sk.dat`,也无需执行客户端程序。
- 字符串池为 UTF-16,保留分页容器、字符串引用和 indexhash 约定。
- 无配套文件、错误外部 `sk.dat`、内存解析均已验证;未修改保存通过 SHA-256 一致性验证。
- 客户端参数不输出到日志,不在源码中展开;真实归档、exe 和原始配套文件不提交。
## GUI 结果
| 工具 | 样本数量 | 结果和限制 |
| --- | ---: | --- |
| 商店 | 1,491 | 已适配嵌套商品记录、直接商品列表和根级分页。读取无错误,剩余 16 个没有可展示的分页;529 个文件存在结构、缺失引用或成本提示,不等于全部可编辑。 |
| 基础掉率 | 4 | 均为 9 列分组;已放开前后端入口。修改后的四份 payload 可重新解码,额外阈值保持不变。 |
| 全局掉落 | 1 | 数据读取通过。 |
| 强化/增幅 | 2 | 普通表和安全表读取通过,无格式提示。 |
| 锻造 | 1 | 已适配每级 6 列,成功率/材料倍率映射至正确源位置;两项附加系数只读。4/6 列无法唯一识别时拒绝 GUI 编辑。 |
| 技能 | 4,981 | 合并远端根级参数适配后读取无错误;36 个带有重复段、异常等级宽度或额外描述绑定等保护提示。1,004 个没有可展示的根级或 dungeon/pvp 参数模式。 |
| 任务 | 14,128 | 14,108 个通过前端解析;14,107 个验证了整数编辑只改目标 token。20 个闭合结构无法安全识别,保留 DSL 编辑。 |
任务嵌套区块整体只读,子字段不会覆盖顶层名称、条件或奖励;正常顶层字段仍可编辑。
2,668 个可解析任务带有嵌套、重复或特殊类型字段提示,不意味着整份任务都可由表单覆盖。
没有强行接受那 20 个结构不明的任务,也没有清理或重写原始样本。
## 商店结构
旧结构在 `[item list]` 内直接列出物品 ID。115CN 改为:
```text
[sell item list]
[item]
0
[index]
12345
[/item]
[/sell item list]
```
`[item]` 的直接整数是记录键,`[index]` 才是物品 ID;示例 ID 仅用于说明。
正常样本有五种布局:`sell info/tab` 下直接或按分类存放列表、
`sell info` 下直接或按分类存放列表,以及根级 `tab`。
- 正常闭合结构共解析 27,977 条非空商品记录,全部核对了预览 ID 与二进制编辑定位;
`[index] -1` 作为空位保留,不展示成商品。
- 支持新增、替换、删除商品;替换只修改 `index`,删除移除整条 `item`,
不合并重复物品,不丢弃同记录的限购、购买数量、退款等字段。
新增记录使用高于当前文件已有键的记录键,不复制其他商品的局部配置。
- 显式分页支持增删改;无分页布局只投影成一个 GUI 页,不擅自重组原文件,
其分页管理仍需文本模式。
- 记录内的 `price`、`need material` 按对应成本类型覆盖物品文件中的共享成本。
局部成本目前只读,带局部成本的记录可替换物品或删除;
单条成本修改及包含这些记录的批量成本修改会被拒绝,避免误改共享物品。
- 46 个文件带有结构提示,包含缺少分类 ID、未声明分类类型或不可识别的嵌套列表等;
声明分类但直接列出商品的记录可以通过“未分类”入口查看,仍保留保护提示。
另有缺失物品/材料引用的提示,合计 529 个商店带提示。
6 个文件有二进制区块闭合警告,拒绝 GUI 编辑。
- 五种真实布局均通过新增、另存临时 PVF、重开及删除新增记录验证;
删除后对应商店 payload 与原始内容逐字节一致。未覆盖原始样本。
## 排版与标注
- `section.basis of rarity dicision` 及其 `.hell` 规则为 115CN 每组显示 9 项。
- `etc.forge.table` 为 115CN 每行显示 6 项,其他版本保留原行宽。
- `etc.forge.115cn.table.0` 至 `.5` 独立标注六个字段;旧四列标注不应用于 115CN。
- 规则版本校验、编辑入口和归档版本标签均增加 115CN。
- 已运行的应用需要重新构建并打开;仅修改仓库 JSON 不会保证旧进程自动加载新配置。
## 复现
在仓库根目录使用 PowerShell 7:
```powershell
$env:PVF_TESTFILE = (Resolve-Path testdata/115CN/Script.pvf).Path
$env:PVF_TEST_CLIENT_VERSION = '115CN'
go test ./internal/pvf -run '^TestReal(BundledPagedClient|PagedClientCompatibility|PagedClientEditRoundTrip)$' -count=1 -v -timeout 20m
$env:PVF_GUI_TESTFILE = $env:PVF_TESTFILE
$env:PVF_GUI_QUEST_CORPUS = Join-Path ([IO.Path]::GetTempPath()) 'pvfine-115cn-quest-corpus.json'
go test ./services -run '^TestGUIRealArchiveCompatibility$' -count=1 -v -timeout 20m
$env:PVF_SHOP_TESTFILE = $env:PVF_TESTFILE
go test ./services -run '^TestShopReal115CN' -count=1 -v -timeout 20m
$env:PVF_GUI_QUEST_EXPECTED_REJECTIONS = '20'
Push-Location frontend
npm test
npm run build
Pop-Location
```
任务语料仅写入指定的本地临时文件,不加入仓库。`PVF_GUI_QUEST_EXPECTED_REJECTIONS`
只记录这份样本的预期拒绝数,不会放宽应用解析或编辑限制。
运行普通 `go test ./...` 前应清除这些真实样本环境变量,避免触发其他版本专用测试。