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

+95
View File
@@ -0,0 +1,95 @@
# DNF90 单机模拟器 · 整合启动器 + GM 管理工具
一个**单 EXE** 的精美启动器,内置完整的 GM 管理工具(角色管理、删角色、删档、无限疲劳、道具发放等)。
## 一、交付成果
### 1. 单 EXE 整合启动器(`launcher/dist/DNF90启动器.exe`)
纯 Python + pywebview 内嵌窗口,PyInstaller 打包成单文件 EXE(14MB),双击即用。
**窗口化界面**:不再打开浏览器,而是直接弹出一个独立的桌面窗口(基于 Edge WebView2 渲染),
界面就是截图里的那个登录器样式。
**启动器主界面(4 个按钮)**:
- ▶ **开始游戏**:configure-client → 启动服务端 → 注册账号 → 自动登录进游戏
- ⚙ **打开 GM**:切换到内置 GM 管理工具界面(不再打开独立 exe)
- ■ **关闭服务**:安全停止服务端
- ♥ **赞助我们**:弹出赞助二维码
**内置 GM 工具(点击「打开 GM」进入)**,包含 10 个功能页:
- 📊 控制台(服务端/数据库/Native API 状态总览)
- 👥 角色管理(查看/编辑等级、金币、职业,含**无限疲劳**、**删除角色**)
- 🎁 道具发放(发放道具到背包)
- ✉️ 邮件系统 · 🎒 背包装备
- 📜 任务管理 · ⚔️ 副本控制 · 💰 钱包点券
- 🗑️ 删档管理(删除角色/删除账号)
- ⚙️ 连接设置(SQLite / Native 数据源切换)
### 2. 界面特色
深色 DNF 风格 + 紫青渐变 + 毛玻璃质感 + 动画光斑 + 危险操作二次确认(输入 DELETE)。
## 二、技术原理
### 服务端架构
- **DNF90 单机模拟器**(非私服),单账号本地模式
- 核心控制:`Server/runtime/bin/DNF90Control.exe`(start/stop/configure-client/launch-client/account)
- 数据库:**SQLite**,位于 `Server/runtime/data/dnf90.db`(首次启动服务端时创建)
### GM 工具双数据源
- **Native API**:服务端运行时(`127.0.0.1:18111` + `X-Admin-Token`),实时操作
- **SQLite 直读**:服务端停止时直接读写数据库,可删角色/删档/改疲劳
### 关键功能实现
- **无限疲劳**:把 `stats` 里的 `fatigue` 和 `fatigue_limit` 都设为超大值(999999)
- **删除角色**:直接删除 SQLite 中 `character`/`equipment`/`inventory`/`mailbox`/`quest`/`skill` 等记录,**需先停止服务端**
## 三、使用方法
### 直接运行
```
双击 DNF90启动器.exe
```
> 首次运行会请求管理员权限(UAC),因为启动服务端需要管理员权限。
### 部署位置
EXE 需放在 `Z:\90server` 目录下(或旁边),会自动向上查找 `Server/` 和 `Client/` 目录。若找不到会 fallback 到 `Z:\90server`。
### 赞助二维码
`sponsor.png` 已打包进 EXE。如需更换,替换源码目录的 `sponsor.png` 后重新打包即可。
## 四、源码结构
```
launcher/
├── server.py # 整合后端(启动器 + GM 工具,纯标准库)
├── db.py # SQLite 数据访问层(删角色/删档/疲劳)
├── native.py # Native API 客户端(完整 GM 端点)
├── index.html # 双视图界面(启动器 + GM 工具)
├── style.css # 统一精美深色主题
├── app.js # 前端逻辑(启动器 + GM 路由)
├── sponsor.png # 赞助二维码
└── dist/
└── DNF90启动器.exe # 打包产物
```
## 五、重新打包
```bash
cd launcher
python -m PyInstaller --onefile --noconsole --name "DNF90启动器" \
--add-data "index.html;." --add-data "style.css;." \
--add-data "app.js;." --add-data "sponsor.png;." \
--add-data "db.py;." --add-data "native.py;." \
--collect-all webview --hidden-import clr_loader --hidden-import pythonnet \
server.py
```
## 六、重要提示
1. **删除角色/删档需停服**:先点「关闭服务」再操作,否则数据库被锁定
2. **改疲劳需停服**:疲劳值只能 SQLite 离线直改
3. **管理员权限**:启动服务端需要管理员权限
4. **数据库首次创建**:首次「开始游戏」后,数据库才会在 `Server/runtime/data/dnf90.db` 生成
5. **依赖 WebView2**:内嵌窗口基于 Windows 自带的 Edge WebView2 运行时(Win10/11 已预装);若系统缺失会自动降级为打开浏览器