# 需求:新号第一局神将字保底 > 状态:**已落地** > 日期:2026-09-16 > 关联:[需求-背包刷新.md](./需求-背包刷新.md)、[开发规范.md](./开发规范.md) ## 1. 目标 新号进入游戏的 **第一局**,玩家前两次普通刷新保证能凑齐 **哪吒 / 杨戬 / 悟空** 之一的两字(`哪+吒` / `杨+戬` / `悟+空`)。 | 项 | 说明 | |----|------| | 对象 | **仅玩家背包**;AI 不走 | | 时机 | 开战时 `RankDataManager.hasNoBattleHistory()`(尚无胜负场、总星仍为 1) | | 入口 | 仅普通刷新;GM 固定 / 预设队列 **不走** | | 配对源 | `Hero.name` ∈ `{哪吒, 杨戬, 悟空}` 的 `Hero.text`(两字一对;`悟` 只配 `空`,不配能/净) | ## 2. 规则 ### 2.1 第一次刷新 必须出现上述六字之一。 - 抽出结果里 **已有** 六字之一:保留,不替换。从已出现的六字中等概率记一个,记下它的另一半。 - 抽出结果里 **已有完整一对**(例如同时有 `悟` 和 `空`):第一次已能合成,第二次不再补。 - 抽出结果里 **一个都没有**:从六字中等概率随机一个,替换其中一槽。替换时 **不得拿掉本批唯一的可攻击单字**(刀/枪/棍/弓,与首次刷新攻击字保底一致)。 记下的另一半与玩家是否把字拖到地图 **无关**。刷新会清掉未拖走的旧背包,第二次仍按记录给另一半。 ### 2.2 第二次刷新 若第一次记下了另一半:本批必须出现该字。已抽出则不替换;否则随机换一槽。字池 `remaining` 不足时仍强制给字并打日志(必给,不静默改成别的字)。 第三次及之后不再干预。 ### 2.3 例子 第一次没出六字 → 随机到 `悟` 替换一槽并记录。无论 `悟` 有没有上阵,第二次必给 `空`。 ## 3. 验收 - [ ] 新号第一局第一次刷新必含 哪/吒/杨/戬/悟/空 之一 - [ ] 第二次刷新必含第一次所记字的另一半 - [ ] 第一次已成对则第二次不补 - [ ] 不替换第一次的唯一攻击字 - [ ] 仅玩家;AI / GM 不走 - [ ] 有过胜负场的对局不再触发