DNF90 服务端与启动器完整源码(含 GM 工具功能增强)
服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
This commit is contained in:
commit
645b64fe21
4388 files changed
+1405457
No files matched your search
@@ -0,0 +1,119 @@
|
||||
# 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 契约章节。
|
||||
Reference in new issue
Block a user