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

96 lines
4.2 KiB
Markdown
Raw Permalink 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 单机模拟器 · 整合启动器 + 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 已预装);若系统缺失会自动降级为打开浏览器