功能
棋盘现在可以实时改名和换标识
棋盘上的任何一格都可以获得新名称和新标识,并且改动会立刻抵达所有正在进行的对局——无需部署,也无需重启。

通俗版
opolyx 棋盘上的四十个格子过去写死在代码里。改动其中一个就意味着改代码、走评审、再部署——这让任何季节性、推广性乃至纯粹修错的调整都变得远比应有的成本高。
现在可以在管理后台为任意一格设置名称和标识,改动立即生效——包括正在进行中的对局。它会抵达 opolyx 在线运行的每一处:网站、合作平台上的嵌入版本,以及用来生成精彩片段的回放。
游戏本身没有任何变化:价格、租金、颜色组和所有规则都保持原样。变的只是一格叫什么名字、用什么标识,仅此而已。
可下载的离线版本仍保留自带的棋盘,因为它没有可供获取数据的连接。
技术细节
这之所以行得通,关键在于名称与标识是在哪里解析的。棋盘本身是代码,并且继续是代码——游戏服务器从不从数据库读取它,因此游戏逻辑毫发无损,旧对局的回放也依旧正确。而名称与标识是在渲染时解析的,所以一份全局覆盖映射就足以一次性抵达所有界面。
ts
// lib/board/overrides.ts — render-time resolution, engine untouched
export function useFieldName(slug: string, fallbackKey: string): string {
const overrides = useBoardOverrides(); // provider, fetched once per page
return overrides[slug]?.name ?? t(fallbackKey); // else the translated default
}存储端是一张可公开读取的小表,外加一个存放上传图片的公开存储桶。读取是开放的,因为棋盘本来就是公开的;写入只允许服务角色,并且是通过撤销默认权限来强制实现,而不是依赖某条策略——这正是此前三次数据库迁移教给我们的同一课。
由于覆盖属于渲染层面的事,而不属于对局状态,进行中的比赛会在下一次重绘时自动采用它们。无需迁移线上对局状态,无需重启,同一房间里的玩家之间也不会出现版本偏差。
