Files
noname-shuying/mengsan/docs/battle-config.md
T
Diuse 82d80397b6 fixed # 新增羁绊系统
fixed # 新增遗物系统
fixed # 梦三模式下移除护甲上限限制
2026-09-30 14:33:17 +08:00

100 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 梦三:关卡条件与战斗支援
## 约定
- 本模块是梦三玩法规则,不批量修改武将技能源码。
- 主角固定单位 ID:`player`;`ally` 为友方,`enemy` 为敌方。
- `neutral` 仅保留预设,目前配置为中立会报错,不启用中立行为。
- 主角、敌人、羁绊助战使用各自牌堆;其他友方支援使用公共牌堆。
- 没有 `battlePlan` 的旧关卡继续使用原来随机的一名敌人。
- 本版单场累计最多 8 个席位,包含主角、初始单位、奖励支援、以后出现的援军。
## 配置位置
节点内容或剧情选项的 `outcome.battle` 中增加 `battlePlan`。
Boss 也可以在大关配置的 `bossBattlePlan` 中定义。
`units` 中每一项是一名初始角色,因此数组长度就是初始非主角人数。
```js
battlePlan: {
units: [
{ id: "captain", character: "re_xiahoudun", camp: "enemy", hand: 4 },
{ id: "guard", character: "re_xuzhu", camp: "enemy", hand: 2 },
],
rules: [
{
id: "rescue", name: "友军驰援",
when: { event: "roundStart", round: 3 },
effects: [{ type: "spawn", unit: {
id: "helper", character: "re_zhangliao", camp: "ally", hand: 4,
} }],
},
{
id: "low_hp", name: "背水一战",
when: { event: "state", all: [
{ unit: "captain", field: "alive", value: true },
{ unit: "captain", field: "hp", op: "lte", value: 2 },
] },
effects: [{ type: "draw", target: "captain", amount: 2 }],
},
{
id: "supply", name: "主角补给",
when: { event: "state", all: [
{ unit: "player", field: "hand", op: "lte", value: 1 },
] },
effects: [{ type: "draw", target: "player", amount: 2 }],
},
],
}
```
## 字段
初始/援军单位:`id`、`character`、`camp`;可选 `hand`(默认 4)、`hp`、`maxHp`、`skills`。
每个单位 ID 必须唯一,引用 ID 而不是武将名称,允许同武将的不同单位。
每条规则每场仅触发一次,效果按书写顺序执行;不支持任意脚本、eval 或无限重复规则。
- `when.event`:`battleStart` 开场、`roundStart` 新轮、`turnStart` 每名角色主循环回合开始、`state` 状态变化。
- `when.round`:至少到第 N 轮。主角第一次进入主循环为第 1 轮;额外技能回合不另计轮。
- `when.turn`:至少到主循环第 N 个回合;所有角色一起计数,额外技能回合不计。
- `when.actor`:限定当前主循环行动单位,可用于 turnStart/roundStart。
- `when.all`:所有条件同时满足。`hp`、`hand` 使用 `eq`/`gte`/`lte` 比较。
- `alive`、`linked`、`turnedOver` 比较布尔值;`camp` 比较 `ally`/`enemy`。
- state 在开场、回合边界及体力/手牌/死亡/横置/翻面事件后检查,不轮询。
效果:`spawn`(提供 unit)、`draw`/`recover`/`maxHp`(target + amount)、`skill`(target + skill)、`camp`(target + camp)。
主角不能改阵营;死亡或尚未出现的目标不会执行数值/技能增益。规则不会复活角色。
`skill` 为本场增加技能,战后随角色统一释放,不写入永久技能。
`blocksVictory: true` 用于必须等待的敌方援军波次;未触发时不会提前胜利。
默认 false,避免可选援军条件永久不成立导致战斗无法结束。
若设为 true,作者必须保证该条件可以达成。条件同样适用于玩家方。
## 奖励支援
在奖励注册表中配置 support,不设置旧的 effectId:
```js
"shared.reward.support.example": {
name: "道具·援令", description: "本次征程后续每场战斗获得友方支援。",
support: {
category: "item", // item 道具、bond 羁绊来源(仅数据预留)、buff 其他增益
battles: -1, // -1 或省略:本征程持续;正整数 N:持续 N 场战斗
unit: { character: "re_zhangliao", camp: "ally", hand: 4 },
},
},
```
再将奖励 ID 加入指定 rewardPools。相同奖励来源不叠加人数;临时次数可累加,永久来源保持永久。
数据保存在 `run.player.supports`,旧存档没有该字段时按空列表处理。
有限次数只随结算事务提交;重载未完成战斗不会额外扣次,重试结算不会重复发放。
行囊的“战斗支援”显示来源名称和持续场数。羁绊助战单独在行军菜单
“羁绊”中管理,规则和配置见 [bonds.md](bonds.md)。
## 已接入的示例
- 林中伏兵“主动追击”:两名初始敌人,第 3 轮必定出现一名敌军援军。
- 敌军队长体力不高于 2 时摸两张;主角手牌不多于 1 时补两张,各限一次。
- 斥候谢礼奖励池加入“道具·斥候援令”,本征程后续每场由友方张辽参战。
## 结算和清理
仅主角死亡判负;存活友军不阻碍胜利。清空敌军且没有必须等待的敌军规则后判胜。
援军使用原生加入座次/enterGame,登记玩家 ID、技能释放和战斗资源清理。
身份模式原有的杀反贼摸三张、误杀忠臣弃牌惩罚不沿用;奖励由梦三结算和上述规则决定。
统计记录实际战败敌军数量,而非固定每场加一。
已做隔离配置/规则/事务检查;未启动游戏、未进行实际战斗或界面验收。