Files

83 lines
7.0 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.
# AIServer
Windows Server 可上传 ZIP、前台运行、开机自启、反向代理与验证方法见 [部署说明](deploy/windows/README.md)。发布包使用独立端口 15888,不覆盖现有 Kestrel 服务;旧服务的账号和存档需单独迁移。
C++ 登录、WebSocket 网关与 G1 教学玩法服务(SQLite),协议兼容客户端 `HotUpdate.Net` / `PrototypeApi`。
## 接口
| 方法 | 路径 | 说明 |
| --- | --- | --- |
| POST | `/register` | `{"username","password"}` → `{"token","pid"}` |
| POST | `/login` | 同上 |
| GET | `/health` | 健康检查(含 `maintenance`) |
| GET | `/maintenance` | 维护开关状态 |
| GET | `/game/state` | Bearer token 鉴权;钱包、伙伴、阵容、未结算活动 |
| POST | `/game/command` | 唯一请求号 + 修订号;事务扣费/发奖、弹珠轨迹、教学战斗权威结果 |
| WS | `/ws?pid={pid}&token={token}` | 无 token → 401;支持 `hello`/`ping`;维护中下发 `maintenance` 后断开 |
本地默认:`http://127.0.0.1:8080`、`ws://127.0.0.1:8080/ws?...`
生产由 Caddy TLS 反代到本进程(与 `game.xworld.ren` 部署方式一致)。
## 构建(Windows / VS2022)
```powershell
cd D:\UD\AI\AIGame\AIServer
cmake -S . -B build -G "Visual Studio 17 2022" -A x64
cmake --build build --config Release
```
产物:`build\Release\aiserver.exe`
## 运行
```powershell
cd D:\UD\AI\AIGame\AIServer\build\Release
.\aiserver.exe --host 0.0.0.0 --port 8080 --db ..\..\data\aiserver.db
```
## 客户端联调
Boot 使用本机 `127.0.0.1:8080` 时,AIGame 编辑器会在进入 Play Mode 前检查并后台启动已构建的 AIServer(只监听本机)。也可在仓库根执行 `powershell -NoProfile -ExecutionPolicy Bypass -File Tools/start_local_server.ps1`,或用 Unity 菜单 **AIGame/Boot/Server/Start Local AIServer**。此行为仅限编辑器本地配置,生产地址和 Player 不会自动启动服务。
Unity 菜单或 Boot 配置:
- HttpBase: `http://127.0.0.1:8080`
- WsUrlTemplate: `ws://127.0.0.1:8080/ws?pid={pid}&token={token}`
## 数据
SQLite 文件默认 `AIServer/data/aiserver.db`(用户、token、`game_states`、`game_operations`)。旧数据库启动时追加玩法表,不导入 G0 PlayerPrefs 余额,不删除旧用户。更新可执行文件前需退出本地服务;重新启动后 `/health.gameProtocol` 应为1。玩法协议与错误码见 [Doc/NetProtocol.md](../Doc/NetProtocol.md)。
当前玩法配置源:`Config/Gameplay/greenfield.json`,包含首章前五关、五只伙伴与捕捉池。普通池五种各20%,连续4次重复后下一次保证未拥有伙伴,教学独立计数;集齐后暂停保底、重复转20碎片。CMake构建时嵌入配置并生成内容哈希,服务端每次返回当前配置,新战斗保存整份配置快照。旧schema=1/2在首次请求事务中迁移为3,保留余额、已有伙伴/碎片、关卡进度及未完成活动,旧三伙伴战斗继续用冻结配置结算;不代表完整P0已完成。
营地扩展(schema4阶段):旧schema3自动迁移为空装饰布局/库存,并保留全部既有玩法状态。新增 `camp.place/store/interact`;通过1-5开放三处装饰槽位,初次购买按配置扣金币,已有装饰移动/收回免费;通过1-3可与已拥有伙伴互动,无资源奖励。弹珠树只展示原自然恢复,不增加领取。迁移、交易与重放仍在SQLite同一事务中。入口/UI/协议见 `Doc/NetProtocol.md` 和 `Doc/Design/G0_Implementation.md`。
任务/签到扩展(schema5阶段):schema4保留全部既有状态并初始化每日与累计登录数据。`daily.claim`需携带 `item/day`,`signin.claim`携带 `item`;服务器UTC+8零点重置每日进度/领取标志,事件仅由实际结算推进。七日按累计登录日解锁(非连续日),漏登不重置、未领奖励保留、完成后不循环;所有领取同事务幂等。配置与奖励在 `greenfield.json.daily`,测试与实现记录见上述文档。
背包/补给扩展:最新实时存档schema6只新增三项`shopBought`日限购次数,旧钱包、日常、伙伴、营地和在途活动保留。`shop.buy`需携带`item/day`;免费5弹珠每日1次,100金币换20糖果每日3次(1-1开放),300金币换1捕捉券每日1次(1-3开放)。价格/奖励/限购来自`greenfield.json.shop`,扣款/到账/库存/回执同事务,跨日重试不重复发奖。背包只展示原字段,不维护第二份余额;旧冻结战斗可没有shop配置。完整验证见实现记录。
## 验证
邮件扩展(2026-10-18):当前快照为schema7。旧schema6只新增两封7天有效的初始邮件,附件必须显式领取,不改原钱包;`mail.read/claim/claimAll`支持已读、单封/最多20封批量领取、到期、原回执恢复与事务回滚。配置位于`greenfield.json.mail`,当前无运营投递接口。客户端滚动更新兼容schema6;完整说明见`Doc/NetProtocol.md`。原生4335项断言、99组C++/Unity战斗对照、HTTP并发/重启与独立账号实际邮件点击已通过。
## 宝箱扩展(2026-10-19)
当前快照为schema9。7→8只新增`chests:[0,0,0]`与`chestDailyClaimed`,迁移不发免费箱;8→9把伙伴/关卡扩到10/20,迁移不发伙伴或首通奖。`chest.claimDaily`每日把每日箱放入库存(与商店共用UTC+8日切),`chest.open`按服务端配置扣箱并发固定/自选奖励(含伙伴碎片),同一事务;1-1/1-3/1-5首通各掉一个箱。配置位于`greenfield.json.rewards`。原生4335项断言、HTTP 24并发重试与独立账号实际点击通过;完整说明见`Doc/NetProtocol.md`与`Doc/Design/G0_Implementation.md`。
```powershell
# 构建独立验证服务与测试程序。
cmake -S AIServer -B AIServer/build-g1 -G "Visual Studio 17 2022" -A x64
cmake --build AIServer/build-g1 --config Release
# 原生事务测试使用独立临时数据库,可注入服务端时钟和写入故障。
ctest --test-dir AIServer/build-g1 -C Release --output-on-failure
# HTTP 测试自行启动独立端口/数据库并在结束时关闭,不改开发账户。
python Tools/test_game_http.py
# 导出C++模拟对照,供Unity VerifyProgression.Domain验证。
AIServer/build-g1/Release/game_tests.exe D:/UD/AI/AIGame/Tools/output/progression_parity.json
```
上述验证命令从仓库根执行。Unity 的 `AgentScripts/VerifyPrototype.cs` 保留 G0 规则/Prefab 回归;`VerifyG1.cs` 用独立测试服务 `127.0.0.1:18081` 执行实际界面点击、丢失确认恢复和401续期测试。测试服务必须使用独立数据库,不能指向 `AIServer/data/aiserver.db`。
当前开发验证(2026-10-18):三路线/六槽布阵、五伙伴 T1/T2 技能与首领减速衰减已接入。服务端 `game_tests.exe` 通过 3505 项断言,HTTP 隔离回归通过;Unity `VerifyProgression.Domain` 通过 189 组 C++/Unity 对照(150 胜、39 负)及十三个 Prefab 字体/九宫格检查。技能名称和战术提示配置已修复为 UTF-8 中文。完整 10 伙伴/20 关、正式美术、宝箱/设置、自由营地和 Player/真机验收仍未完成。