feat(all): split client tooling and add OAuth server login

This commit is contained in:
2026-09-30 17:32:14 +08:00
parent 7cb5e36c2a
commit 50e2572385
230 changed files with 9875 additions and 853 deletions
+19 -18
View File
@@ -1,34 +1,35 @@
# BD2 本地服务器发布包
# BD2 纯服务端发布包
## 首次使用
1. 为游戏手动安装 BepInEx。官方下载:
<https://github.com/BepInEx/BepInEx/releases>
2. 修改本地客户端入口:
1. 准备服务端数据目录。服务端不需要 Windows 游戏客户端、BepInEx 或客户端插件。
2. 编辑同目录的 `authentication.json`、`resources.json`;OAuth 配置见 `AUTHENTICATION.md`。
3. 启动服务器:
Windows PowerShell:
```powershell
.\bd2server.exe patch-client --game-dir "<客户端目录>"
.\bd2server.exe serve
```
3. 进入发布包的 `go` 目录并启动服务器:
macOS/Linux(Bash 或 Zsh):
```powershell
Push-Location .\go
& ..\bd2server.exe serve `
--game-dir "<客户端目录>" `
--cdn "<ServerData目录>" `
--game-data "<GameData目录>"
Pop-Location
```bash
./bd2server serve
```
服务器会检查 BepInEx,并自动把包内 `plugins\BD2LocalIdentity.dll` 安装或更新到客户端。如果没有安装 BepInEx,服务器会给出上述下载地址、保持客户端不变并拒绝启动。
服务端默认使用可执行文件旁的 `data` 目录,玩家存档位于 `data/state/state.db`,服务端逻辑所需 GameData 位于 `data/resources/GameData`。缺失时会从官方源下载并完整校验。服务端不会访问或修改玩家客户端目录。
4. 确认健康检查成功:
```powershell
Invoke-WebRequest http://127.0.0.1:8080/healthz
```bash
curl --fail --silent --show-error http://127.0.0.1:8080/healthz
```
5. 最后启动游戏客户端。请勿在服务器启动前运行客户端。
5. 让玩家使用独立的 `bd2client.exe` 选择游戏目录、填写服务器地址、选择 CDN,并安装 `BD2LocalIdentity.dll` 与 `BD2LoginUI.dll`。客户端工具说明见 `README.md`(客户端包)或仓库的 `docs/CLIENT.md`。
`versions.json` 是服务端和插件的统一版本选择,必须与 `bd2server.exe` 保持在同一目录;服务端从该位置解析包内 `go/seed`,不依赖当前工作目录。需要临时测试另一组版本时可传 `serve --version-config <文件>`。玩家存档位于 `data\state\state.db`;服务端以 Go 迁移器按相邻版本升级,并在同一个 SQLite 事务内完成迁移和最终校验,失败时不会留下部分升级。
`versions.json` 是服务端和客户端插件共用的版本选择,必须与各自可执行文件保持在同一目录。服务端从包内 `go/seed` 读取种子,不依赖当前工作目录。需要临时测试另一组版本时可传 `serve --version-config <文件>`。玩家存档位于 `data\state\state.db`;服务端以 Go 迁移器按相邻版本升级,并在同一个 SQLite 事务内完成迁移和最终校验,失败时不会留下部分升级。
`authentication.json` 和 `resources.json` 必须与 `bd2server.exe` 保持在同一目录。默认 `local` 认证模式继续自动本地登录;公网或联机服可以启用 OAuth,并把资源策略设为官方 CDN 或统一的服务器资源源。服主自建与反代使用相同的 `server` 模式;玩家本地资源目录仅由 `bd2client.exe` 配置。逐步配置方法见发布包内的 [服主第三方登录配置指南](AUTHENTICATION.md) 和 [服主资源与 CDN 配置指南](RESOURCES.md)。
OAuth access token 只在客户端内存中;Windows refresh credential 使用当前用户 DPAPI 加密后写入 PlayerPrefs 注册表,macOS 使用 Keychain Services。服务端 `auth.db` 只保存 token、device secret、OAuth state 及 provider subject 的 HMAC,临时可恢复材料使用 AES-256-GCM。