# 服务端游戏规则配置 `game.json` 是服务端统一的游戏规则配置入口。后续可配置的游戏规则在此按功能分组扩展;认证、资源源、版本清单仍分别使用现有配置文件。 发布包不包含 `game.json`,首次运行时在 `bd2server.exe`(Linux/macOS 为 `bd2server`)旁生成默认文件。开发入口在 `.build/config/game.json` 生成并读取配置。已有文件不会覆盖,可修改的规则在重启后生效,起始章节只在首次初始化时选择。客户端无需配置此文件。 默认内容: ```json { "schema_version": 1, "story": { "start_pack_id": 21 }, "gacha": { "include_collaboration_ur_weapons": false }, "purchases": { "diamond_recharge": { "currency": "free", "gold_per_paid_diamond": 1000, "diamonds_per_paid_diamond": 1 } } } ``` ## 联动 UR 专武 `gacha.include_collaboration_ur_weapons` 必须是 JSON 布尔值: | 值 | UR 必得装备券的结果 | |---|---| | `false`(默认) | 使用当前 GameData 的原始 UR 必得装备券池。 | | `true` | 在原池中加入 14 种联动角色 UR 专武(装备 ID `943200` 至 `943213`)。 | 开关仅作用于 UR 必得装备券。新增装备沿用同星级原有装备的单件权重,原有星级权重规则保持不变;加入候选后,同星级内的概率按扩展后的权重总和计算。该设置只改变券池候选,不会直接发放装备。专武绑定角色,同一角色的多个服装共用专武。 ## 服务器的起始章节 `story.start_pack_id` 接受整数 `21` 或 `1`,省略时默认 `21`。 | 值 | 本服玩家的开局 | |---|---| | `21`(默认) | 从当前客户端默认的店长篇开始,使用该篇的任务和教学流程。 | | `1` | 从旧主线第一章开始,使用当前 GameData 中该章的开场剧情、初始任务及购卡奖励。 | 请在服务器首次启动前确定此值。第一次成功初始化时,服务端会在 SQLite 中持久保存服务器的起始章节;此后配置必须与保存值一致。改成另一个章节会拒绝启动,并在日志中明确提示原值与配置值,不会覆盖原设置或玩家进度。首次启动失败并回滚时不会锁定选择,可以修正配置后重试。 这项限制只针对 `story.start_pack_id`;其他游戏规则仍可修改。升级和恢复服务器时应一起保留配置与数据库,不能通过删除数据库来切换开局,这会删除玩家存档。 后续官方若将旧主线与店长篇重构合并为一条剧情线,再重新评估此限制与迁移方案。重构发布日期尚未确认。 ## 现金商品与付费钻石充值 所有原本走平台现金支付的普通商品,包括礼包、皮肤、通行证与付费抽卡商品,都固定消耗付费钻石。这类商品没有免费购买配置开关;`purchases.diamond_recharge` 仅设置付费钻石充值的兑换方式。原本已使用游戏内货币的商品仍走原来的游戏内购买流程。 普通现金商品的价格由当前版本 GameData 计算:取最小常规充值档位的现金标价与付费钻石数量作为换算基准,将商品现金标价换算为付费钻石并向上取整。当前 2.35.10 的最小档位为现金标价 `2200`、常规付费钻石 `100`,因此普通商品价格为 `ceil(现金标价 / 22)`。运行时读取 GameData 的实际档位,不把该比值固定写入代码。首次充值的加倍奖励不参与换算基准,也不增加充值兑换费用。 `purchases.diamond_recharge.currency` 接受下列值: | 值 | 付费钻石充值行为 | |---|---| | `"free"`(默认) | 不扣货币,发放所选充值商品的原始奖励。 | | `"gold"` | 每单位常规付费钻石消耗 `gold_per_paid_diamond` 金币。 | | `"diamonds"` | 每单位常规付费钻石消耗 `diamonds_per_paid_diamond` 普通钻石。 | | `"ban"` 或 `""` | 禁止购买付费钻石充值商品。 | 省略该配置分组或 `currency` 时使用 `"free"`;显式写空字符串 `""` 会禁止充值。`null` 仍属于无效配置。兑换倍率必须是 `1` 到 `1000000000` 之间的整数,默认分别为 `1000` 金币与 `1` 普通钻石。即使选中其他兑换方式,两个倍率也必须合法。配置导致任何实际商品单次费用超出游戏钱包支持的整数范围时,服务端拒绝加载该商品目录;多件购买超过范围时拒绝该次购买。 例如,使用金币兑换充值: ```json "purchases": { "diamond_recharge": { "currency": "gold", "gold_per_paid_diamond": 1000, "diamonds_per_paid_diamond": 1 } } ``` 充值的兑换费用按常规充值数量计算,实际发放仍遵守所选商品的奖励和首购限制。因此常规数量为 `100` 的首购加倍商品在默认金币倍率下扣 `100000` 金币,保留原来的加倍奖励;后续常规商品扣相同费用。禁止充值不会免费化其他现金商品,也不会删除玩家已有的付费钻石。 客户端从服务端 `/client/commerce` 获取商品价格目录。商品由 `group_id`、`product_id`、`sale_group` 三元组识别,Google 与 Apple 平台商品编号均作为别名返回;同一平台编号对应首购与常规变体时仍保留不同商品键。显示价格和购买校验使用同一服务端规则。 ## 校验与升级 `schema_version` 当前必须为 `1`。字段拼写错误、未知字段、错误类型(例如字符串 `"true"`)、`null`、格式错误或文件末尾多出的 JSON 都会使服务端拒绝启动,并在错误中给出文件路径。省略 `gacha` 或此布尔开关时使用 `false`。 缺少文件时服务端会生成默认配置;已有文件保留,格式错误会明确报错。升级时保留服主修改过的配置,新增默认字段可参考本指南。Docker 镜像的默认命令在可写数据目录 `/app/data/config/` 生成和读取三个配置;自定义命令或只读挂载时通过 `--game-config` 指定路径,重启后生效。