Files
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

5.6 KiB
Raw Permalink Blame History

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 改为:

[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:

$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 ./... 前应清除这些真实样本环境变量,避免触发其他版本专用测试。