# 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/真机验收仍未完成。