服务端(Go): - GM 塞背包/带属性装备发放:在线角色推送 op14 增量物品行,背包实时刷新,无需回角色选择界面 - GM 改金币/改等级:去掉在线拒绝,落库后推送 op14 钱包/op37 等级状态,在线实时刷新 - 等级端点统一切换到新版 GMSetCharacterLevel(自带在线刷新) - 无限/锁死疲劳模式 + 燃烧疲劳:每房间消耗 2 点、打怪与通关经验双倍 - 燃烧疲劳开关时给所有在线角色推送系统提示(op12 mode 0) - 深渊史诗掉率:GM 全局倍率 + 城镇增益药剂窗口倍率,真实接入掉落结算 启动器(Python/JS): - 标题栏自绘、窗口 1204x717、禁止拖拽改大小、仅最小化/关闭 - GM 工具:疲劳与燃烧、深渊史诗掉率、拍卖行上架(单一定价对齐) - 拍卖行上架前端对齐服务端单一价格语义,修复 400 报错
4.2 KiB
4.2 KiB
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 # 打包产物
五、重新打包
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
六、重要提示
- 删除角色/删档需停服:先点「关闭服务」再操作,否则数据库被锁定
- 改疲劳需停服:疲劳值只能 SQLite 离线直改
- 管理员权限:启动服务端需要管理员权限
- 数据库首次创建:首次「开始游戏」后,数据库才会在
Server/runtime/data/dnf90.db生成 - 依赖 WebView2:内嵌窗口基于 Windows 自带的 Edge WebView2 运行时(Win10/11 已预装);若系统缺失会自动降级为打开浏览器