OmniChess 更新日志
本次更新重点围绕服务器权威对局、反作弊、AI 布阵安全、钱包登录、前端体验和后端稳定性展开。当前版本已经从早期前端 Demo 逐步转向服务器判定的正式架构。
核心反作弊升级
服务器权威 AI 对局
人机对局现在不再相信前端返回的胜负、棋盘、AI 阵容或奖励结果。
现在流程改为:
- 前端只提交玩家白方阵容和玩家操作
- 后端验证阵容是否合法
- 后端生成 AI 阵容
- 后端保存权威棋盘
- 后端验证每一步走法
- 后端执行 AI 回合
- 后端判断胜负、和棋、奖励
- 前端只负责显示服务器返回的结果
这可以防止玩家修改前端代码伪造胜利、伪造 AI 自杀阵容或刷取 MYR。
AI 开局安全校验
修复了 AI 可能开局自杀的问题。
例如玩家在 e2 摆炮时,AI 之前有概率在 e7 摆子,导致该棋子成为炮架,玩家开局即可炮打 AI 王。现在后端 AI 布阵会检查:
- AI 王不能开局处于被威胁状态
- AI 摆子不能制造玩家一步杀王机会
- AI 不会在王和敌方炮之间随便放炮架
- AI 王位会尝试选择更安全的位置
- 每次 AI 落子都会经过安全性验证
禁止前端本地结算奖励
前端不再允许本地发放 MYR。
AI 胜负、奖励、入场费、MYR 余额变化全部以后端数据库为准。
如果后端未返回权威棋盘,前端会拒绝本地开局,防止伪造 AI 阵容或奖励结果。
AI 对局体验优化
乐观走子显示
玩家走子后,现在前端会先立即显示玩家自己的走子结果,不再等待后端完整处理后才动。
新的体验流程:
- 玩家点击走子
- 前端立即显示玩家棋子移动
- 后端验证走法并执行 AI 回合
- 后端返回权威棋盘
- 前端显示 AI 应手
- 如果后端拒绝该走法,前端撤回本地预显示
这样保留了服务器权威判定,同时减少了玩家操作延迟感。
修复错误和棋判定
移除了过于激进的 insufficient_material 子力不足和棋判定。
由于 OmniChess 存在围杀、跳吃、同化、炮架、传送等机制,不能简单照搬传统国际象棋的子力不足规则。
目前自动和棋只保留:
- 双方只剩王
- 连续 40 个半回合无吃子、无同化、无围杀
钱包登录修复
新增并修复钱包登录后端接口:
GET /api/auth/nonce
POST /api/auth/wallet
POST /api/auth/logout
修复了钱包连接时报:
Unexpected token '<', "<!DOCTYPE "... is not valid JSON
的问题。
现在未知 API 也会返回 JSON,不再返回 HTML 错误页,避免前端解析崩溃。
钱包登录使用签名验证,后端不会相信前端直接声明的钱包地址。
玩家 UID 系统
每个玩家现在会分配独立 UID,用于后续后台管理和玩家定位。
UID 可用于:
- 查询玩家
- 发放奖励
- 封号
- 客服处理
- 查询背包
- 查询 MYR
- 查询对局记录
- 查询抽奖记录
UID 与数据库内部 ID、钱包地址分离,方便公开展示和后台管理。
后端数据库与接口升级
数据库迁移修复
修复旧 SQLite 表结构与新后端字段不一致导致的错误,包括:
updated_at 缺失
difficulty 缺失
ai_difficulty 旧字段冲突
ai_matches 旧表结构不兼容
现在新版后端会自动迁移或重建兼容表结构。
AI Match 返回结构修复
修复 /api/ai/match/start 已创建比赛但不返回 match.board 的问题。
现在成功开局时会返回:
match.id
match.seed
match.board
match.serverReplay
match.difficulty
match.pointCap
match.entryFee
前端收到权威棋盘后才允许开局。
AI Match Active 分支修复
修复重复请求开局时返回旧 active match 但缺少 board 的问题。
现在已有 active match 也会返回完整权威棋盘,避免前端误判服务器未返回权威棋局。
抽奖、背包和 MYR 基础接口
继续保留并完善以下接口:
/api/player/state
/api/gacha/config
/api/gacha/draw
/api/public/activity
当前服务器已能返回:
- 玩家 UID
- MYR 余额
- 背包库存
- 碎片
- 保底进度
- 活动文本
抽奖会由后端扣除 MYR、计算结果、写入库存或碎片,前端不再自己决定奖励。
PVP 房间接口骨架
新增了联机房间相关 API 骨架,用于后续实时 PVP:
- 创建房间
- 加入房间
- 准备状态
- 换边申请
- 提交阵容
- 走棋接口占位
当前 PVP 仍不是完整实时战斗版本,后续会接入 Socket.IO 和服务器权威棋局同步。
前端修复
AI 开局参数修复
修复前端传错 AI 开局参数的问题。
现在前端只向后端提交白方玩家阵容 initialBoard,不会再把前端生成的黑方 AI 阵容一起传给后端。
后端负责:
- 验证白方阵容
- 检查玩家是否拥有对应棋子
- 生成黑方 AI 阵容
- 返回完整权威棋盘
王数量校验
AI 开局前,前端会先检查白方是否刚好拥有 1 个王。
如果不是刚好 1 个王,会阻止开局。
后端也会进行同样校验,防止玩家绕过前端。
JSON 错误处理增强
前端现在会检查接口返回内容类型,不会在后端返回 HTML 错误页时直接崩溃。
当前架构状态
目前 OmniChess 已经进入服务器权威架构阶段:
- 前端负责显示、交互、动画
- 后端负责棋局、AI、奖励、背包、MYR、抽奖、胜负
- 玩家无法通过改前端直接刷 MYR
- AI 阵容不再由前端决定
- 人机奖励开始具备正式经济系统基础