Files
90CNServer/README.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

120 lines
4.4 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.
# DNF90 单机模拟器 · 源码仓库
一个 DNF90 单机模拟器(非私服)的完整源码 monorepo,包含**服务端(Go)**、**客户端补丁(C++)**、**GM 管理工具 / 启动器(Python)**、**一键换装工具(C#)**,以及**本地 PVF 解析套件(Go)**。
> 本仓库只含源码,不含编译产物(exe/dll)与美术/PVF 资源。clone 后需按各自子目录的说明编译。
---
## 目录结构
```
DNF90-Source/
├── server/ DNF90 服务端(Go,模块 longheng.io/server)
├── client-patch/ 客户端补丁(C++,90CN.dll 源码)
├── loadout-tool/ 一键换装工具(C# / .NET)
├── launcher/ 整合启动器 + GM 管理工具(Python + pywebview)
├── gmtool/ GM 工具旧版(Python + FastAPI,已被 launcher 取代,保留参考)
├── pvf/ PVF 解析套件(Go,模块 pvfine,GPL-3.0)
│ └── cmd/pvfexport/ 物品名称表导出工具
└── docs/ 开发文档
```
---
## 子项目速览
| 目录 | 语言 | 模块/技术栈 | 说明 |
|------|------|------------|------|
| `server/` | Go 1.26 | `longheng.io/server` | DNF90 服务端,含 GM 拍卖行接口、自动补足上架、背包管理 |
| `client-patch/` | C++ | MSVC / vcxproj | 90CN 客户端补丁,含安图恩兼容、蛇腹剑修复等 |
| `loadout-tool/` | C# | .NET | 一键换装工具,通过 Admin API 操作 |
| `launcher/` | Python 3.15 | pywebview + PyInstaller | 单 EXE 启动器 + 内置 GM 工具(双数据源) |
| `gmtool/` | Python | FastAPI | GM 工具旧版(独立服务 + 网页) |
| `pvf/` | Go 1.26 | `pvfine`(GPL-3.0) | PVF 解析库 + `pvfexport` 物品名导出工具 |
---
## 快速开始
### 1. 服务端(server/)
要求 Go ≥ 1.26(`go.mod` 声明 1.26.5)。建议配置国内镜像:
```bash
go env -w GOPROXY=https://goproxy.cn,direct
go env -w GOSUMDB=sum.golang.google.cn
cd server
go build -buildvcs=false -trimpath -o DNF90Server.exe ./cmd/server/dnf90
go build -buildvcs=false -trimpath -o DNF90Control.exe ./cmd/server/control
go build -buildvcs=false -trimpath -o DNF90Doctor.exe ./cmd/server/doctor
```
详见 `server/README.md`。
### 2. GM 启动器(launcher/)
要求 Python 3.15(32 位)+ Windows。打包:
```bash
cd launcher
python -m pip install pywebview pythonnet clr-loader pyinstaller
python -m PyInstaller --clean --noconfirm "DNF90启动器.spec"
```
产物在 `launcher/dist/DNF90启动器.exe`。详见 `docs/开发文档.md`。
### 3. PVF 解析(pvf/)
```bash
cd pvf
go build ./cmd/pvfexport/ # 物品名称表导出工具
pvfexport -pvf Script.pvf -out dnf_items.json -compact
```
详见 `pvf/README.md`。
### 4. 客户端补丁(client-patch/)与换装工具(loadout-tool/)
详见各自说明,编译命令在 `docs/开发文档.md` 和原 README 中。
---
## 关键设计说明
### GM 工具双数据源
GM 工具(launcher)支持两种数据访问方式,服务端在线时走 Native API(事务一致),离线时走 SQLite 直读:
- **Native API**:`127.0.0.1:18111` + `X-Admin-Token`,实时操作
- **SQLite 直读**:直接读写 `Server/runtime/data/dnf90.db`
### 物品名称离线显示
`pvf/cmd/pvfexport` 从 `Script.pvf` 提取 `item_id → 名称` 全量映射,导出 `dnf_items.json`。GM 工具放在 `GM配置/` 目录,启动时对比 PVF 与名称表的修改时间,PVF 更新则自动重新导出,实现离线也能显示物品中文名。
### GM 拍卖行
服务端已实现 GM 拍卖行接口(`/local/dnf-gm/auction/*`),支持:
- **免押金上架**(`Deposit=0`)
- **自动补足上架**(背包不足时凭空发放差额再上架)
- **列背包 / 删除背包行**(含穿戴装备)
---
## 许可证
- `server/`、`client-patch/`、`loadout-tool/`、`launcher/`、`gmtool/`:**私有/闭源**,请勿对外公开。
- `pvf/`:来自开源项目 [pvfine](https://github.com/) ,遵循 **GPL-3.0**(见 `pvf/LICENSE`)。若需合并/分发,注意 GPL 传染性。
> ⚠️ 对外发布服务端时,不要附带本机测试用的深渊掉落修改;远程换装工具不要直接公开 Admin 端口。
---
## 贡献与开发
1. 各子项目独立编译,无跨项目构建依赖。
2. 提交时请遵守各自目录的 `.gitignore`,勿提交编译产物与 `dnf_items.json`。
3. 服务端改动涉及 GM 接口时,同步更新 `docs/开发文档.md` 的 API 契约章节。