服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
96 lines
4.2 KiB
Markdown
96 lines
4.2 KiB
Markdown
# 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 已预装);若系统缺失会自动降级为打开浏览器
|