AIServer
Windows Server 可上传 ZIP、前台运行、开机自启、反向代理与验证方法见 部署说明。发布包使用独立端口 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)
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
运行
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。
当前玩法配置源: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。
# 构建独立验证服务与测试程序。
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/真机验收仍未完成。