修仙成长线 · 异步对战与离线优先 v0.1#
本作是单机买断(08 商业化方案),但敌方盘面希望来自真实玩家, 且后续要开异步对战(斗法台,03 § 7)。 这两件事不冲突,但架构必须现在就定——离线优先是回不去的决定。 起草 2026-08-31
一、结论#
采用「离线优先 + 幽灵快照包」架构。
玩家盘面 → 快照 → 服务器聚合 → 幽灵包随版本/补丁下发 → 本地库
↓
断网时照常从本地库匹配对手
| 敌方盘面来源 | 断网能否玩 | 服务器角色 | |
|---|---|---|---|
| A 纯本地 | 算法生成 | 能 | 无 |
| B 离线优先(选定) | 真实玩家快照,预置 + 增量下发 | 能,完整通关 | 仅同步,可失败 |
| C 实时拉取(大巴扎) | 每次匹配在线拉取 | 不能 | 强依赖 |
二、为什么 B 在本作特别成立#
2.1 战斗是确定性的#
大巴扎的战斗零操作、全自动,构筑和摆位决定一切
(xiuxian-doc/大巴扎拆解/UI/09-combat.md 原文:「战斗零操作,物品按冷却自动触发」)。
于是:
一份盘面快照 + 一个随机种子 = 一场可完整复现的战斗。
对手不需要在线,不需要实时同步,甚至不需要存在——他只是一组数据。
2.2 幽灵数据小到可以直接打进包体#
一份幽灵要存的全部东西:
| 字段 | 估算 | 说明 |
|---|---|---|
| 物品 × ≤10 | 卡 id 2B + 品阶 3bit + 附魔 4bit + 计数器 varint | 全库 1503 张,11 bit 足够索引 |
| 功法 × ~5 | 同上,无附魔 | |
| 玩家属性 | 生命上限 / 境界 / 层数 / 灵根 / 磨砺 | ~10 B |
| 元数据 | 境界、回合数、强度分桶、道号 | ~20 B |
单份幽灵 ≈ 200 ~ 300 字节(二进制)
5 万份 ≈ 15 MB
15 MB 换「完全离线,且对手是真人构筑」。 首发包体里预置 5 万份, 按单局 ~50 场战斗算,玩家打一千局也刷不重。
对比 C 架构的代价:调研里 8% 的差评是"服务器 / QoL 缺失", 大巴扎连倍速都做不了,官方理由就是"服务器不支持"。 我们花 15 MB 包体,买下的是永远不会有这条差评。
三、幽灵的生命周期#
3.1 什么时候采样#
不让玩家选上传哪一个盘面——会被挑最强的传,池子迅速失真。
自动采样,固定时机:
| 时机 | 采什么 |
|---|---|
| 每个境界突破的那一刻 | 该境界的最终盘面(炼气/筑基/金丹各一份) |
| 坐化时 | 死前盘面(这类幽灵尤其珍贵——它是"没走通的构筑") |
| 结婴成功 | 终局盘面 |
一局最多产出 4 份。坐化盘面必须要:一个池子里若全是通关者的盘面, 新手在炼气期会撞上一堆完成度过高的对手。
3.2 上传与更新#
| 动作 | 时机 | 失败了怎么办 |
|---|---|---|
| 上传本地积攒的快照 | 启动时 / 退出时,批量,非阻塞 | 静默丢弃或留到下次,不提示玩家 |
| 拉取增量幽灵包 | 同上 | 用本地已有的,不提示玩家 |
两个动作都不能阻塞任何游戏流程。 玩家永远不该看到"正在连接服务器"。
3.3 分桶匹配#
幽灵入库时按三个维度分桶,本地匹配时按桶取:
境界(炼气/筑基/金丹) × 境界内进度(初/中/后/圆满) × 强度分档(普通/精英/首领)
强度由服务器侧离线算(盘面品阶总和、功法叠加次数、历史胜率),不由客户端上报。
03 § 7 的问道(主动选高一境界对手)就是跨桶取—— 取上一档境界的幽灵,这一条现成支持。
四、冷启动#
EA 上线时没有任何玩家盘面。三个来源,按优先级:
| # | 来源 | 数量目标 | 注意 |
|---|---|---|---|
| 1 | 开发期内部刷 | 3000+ | 跑通完整流程,把盘面存下来,人工筛掉不像人打的 |
| 2 | AI 生成打底 | 20000+ | 见下 |
| 3 | EA 玩家自然产出 | 滚动 | 上线后自动接管 |
AI 生成的幽灵必须"像人"#
全是最优解的盘面一眼假。 真人盘面的特征是:
- 有一两件明显该卖掉却留着的东西(舍不得,或者没凑够钱换)
- 属性不纯(灵根 +N% 只吃到一半)
- 品阶参差(一件黄金配三件青铜)
- 偶尔有完全不成立的构筑(新手局)
生成器要按这些特征加噪,而不是求最优。
这一条直接对应 04 样例局:朱重八四十年里的盘面是"两件木胎 + 一面铜镜"、 "全是青木之属却打不动"——那种盘面才是幽灵池的主体,不是终局的完美构筑。
五、防作弊#
单机客户端可以伪造盘面。三层防线,都在服务器侧:
| 层 | 做什么 |
|---|---|
| 规则校验 | 格数 ≤ 该等级上限、卡牌存在、品阶分布符合该境界的 shop_odds、附魔合法 |
| 统计剔除 | 入库后跟踪胜率,异常高或异常低的自动下架(前者是作弊,后者是垃圾数据) |
| 采样限流 | 单账号单位时间内的上传上限 |
不做实时反作弊,不封号。 这是单机游戏——作弊者伤害的是幽灵池质量, 不是别人的排名(因为没有排名,见下)。剔除数据即可,不必上手段。
六、两条红线#
6.1 断网必须能完整通关#
08 商业化方案的商店页第一屏要写"单机买断"。这个承诺一旦做出就收不回。
异步对战只能是加分项:
- 断网 → 用本地幽灵库,全流程无提示、无降级说明
- 联网 → 幽灵更新鲜、能上传自己的盘面、斗法台可用
验收标准:把网线拔掉,从新建存档打到结婴,全程不出现任何联网相关的 UI。
6.2 斗法台不能变成天梯#
这条比上一条更容易破,也更危险。
03 § 7 现在给斗法台的定位是对的——"零时间成本的试炼场,不折寿"。 但奖励列表里写着声望。
一旦声望做成可比较的排行榜,就等于把调研里最大的那 22% 差评 (平衡焦虑:「今天是轮椅,明天是残废」)原样请回来。
单机最大的结构性优势是:没有天梯,所以平衡改动只是版本更新,不是资产被砍。 别为了一个异步玩法把这个优势扔掉。
约束:斗法台的奖励只给局内收益(修为、法宝、稀有材料), 不给任何跨局的、可比较的、能被截图炫耀的数字。
| ✅ 可以有 | ❌ 不能有 |
|---|---|
| 「你击败了 XX 道友的残影」 | 全服排行榜 |
| 本局内的战绩统计 | 跨局累计段位 / 分数 |
| 击败高一境界幽灵的局内奖励 | 赛季重置与赛季奖励 |
七、异步对战绝不做成 DLC#
付费墙会把幽灵池切成两半,两边都变差。
买了的人对手变少,没买的人干脆撞不到真人盘面。 而幽灵池的价值完全来自规模——这是典型的越多人用越好的东西, 任何切分都是负和的。
结论:异步对战走本体免费更新,不进 DLC 清单(08 § 4)。
八、与现有文档的接口#
| 接口 | 影响 |
|---|---|
| 03 § 7 越级四形态 | 问道跨桶取上一境界幽灵;斗法台为异步 PvP 本体,须遵守 § 6.2 |
| 08 § 5 红线 | 新增一条:异步对战不做 DLC、不做天梯 |
| 08 § 6 结构性优势 | "没有天梯"这一条依赖 § 6.2 被遵守 |
| 01 § 3.3 修为来源 | 斗法台的修为收益需与问道(×3.5)拉开档次 |
| 工程本体 | 幽灵包格式、服务器聚合与校验属服务端,需在 xiuxian-server 立项 |
九、待办#
- [ ] 幽灵记录的二进制格式定稿(字段、版本号、向后兼容策略)—— 补丁会改卡表,旧幽灵不能因为加了新卡就全部失效
- [ ] 强度分桶算法:盘面品阶总和 + 功法叠加次数 + 历史胜率的权重
- [ ] AI 幽灵生成器的"拟人噪声"参数(该留不留的件、属性纯度、品阶参差)
- [ ] 内部刷 3000 份幽灵的自动化方案(AI 自动跑局 + 人工抽检)
- [ ] 道号的 UGC 审核(幽灵带玩家自定义道号,需过滤)
- [ ] 断网验收用例:拔网线从新建存档打到结婴,全程无联网 UI
- [ ] 斗法台奖励表设计,且需通过 § 6.2 的红线检查
- [ ] 服务器成本估算——只做聚合与下发,量级应当很小,需给出年度数字