Action 节点
修改卡牌、单位、状态、能量、回合、变量和其他战斗状态
Action 节点位于控制路径上,通过 GCS 提交玩法修改,连接 `In` 后配置所需字段或暴露数据端口,再从 `Out` 继续执行Action 节点位于控制路径上,通过 GCS 提交玩法修改,连接 In 后配置所需字段或暴露数据端口,再从 Out 继续执行
节点用法
Add Cards
用途与结算语义
根据配置的卡牌定义,或 Cards 输入里的卡牌实例所指向的定义,创建新的卡牌实例,它不会移动输入的原实例,Draw、Discard 和 Exhaust 分别进入对应牌堆,Hand 会遵守手牌上限并在满手时进入弃牌堆,当前运行时中 Master 和 All 也会走默认分支并添加到 Hand
连接与用法
连接 In,先在行内 Cards 选择卡牌,再设置 Pile,只有在卡牌需由其他节点提供时才暴露 Cards,暴露后行内选择器会禁用,Added 可以继续处理新建的卡牌实例
输入
In(Control):必需的控制输入;开始创建卡牌Cards(CardRefOrCollection):只有暴露Cards后才出现,否则使用CardId;通过一个或多个运行时卡牌实例提供卡牌定义
输出
Added(CardCollection):成功创建的新卡牌实例集合Out(Control):所有卡牌创建完成后继续
参数
CardId(Text/ 卡牌选择器):None;Cards未暴露或未连接时使用的卡牌定义 idPile(Option):Hand;Hand、Draw、Discard、Exhaust、Master、All;目标牌堆,Master和All当前回退到HandPosition(Option):Top;Top、Bottom、Random;仅Draw显示;在抽牌堆中的插入位置
Cancel Hook
用途与结算语义
将当前 Hook 评估标记为已取消,只有图从 Hook 入口进入时才有意义,普通事件或卡牌入口没有可取消的活动 Hook
连接与用法
把它放在应阻止被拦截操作的分支上,例如卡牌不可打出的判断分支,如果取消后仍需运行其他节点,可以继续连接 Out
输入
In(Control):必需的控制输入;到达时取消当前 Hook
数据输入:无
输出
Out(Control):Hook 标记为取消后继续
结果数据端口:无
参数
- 无:该节点没有可配置参数
Change Armor
用途与结算语义
增加、减少或设置每个已解析目标的护甲,Delta 的正值增加护甲,负值减少护甲,零不执行,Set 写入精确护甲值,Changed 是所有目标实际护甲差值的有符号总和
连接与用法
当 Target Source 已足够时保持行内配置,需接收单位或集合时暴露 Target,需计算数值时暴露 Amount,Changed 可以驱动护甲飘字或后续计算
输入
In(Control):必需的控制输入;开始修改护甲Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要修改护甲的单位Amount(Int):暴露后显示,行内默认1;根据Mode作为差值或精确护甲值
输出
Changed(Int):所有目标实际提交的护甲变化总和Out(Control):所有目标处理后继续
参数
TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择Mode(Option):Delta;Delta、Set;增减数值或写入精确值Amount(Number):1;Amount未暴露时的行内值

Change Energy
用途与结算语义
修改玩家当前能量,Delta 的正值增加能量,负值减少能量,零不执行,Set 写入精确能量,Changed 返回操作前后玩家能量的有符号差值
连接与用法
连接控制路径后直接配置行内数值,或暴露 Amount 接收计算结果,该节点始终修改玩家能量,没有目标输入
输入
In(Control):必需的控制输入;开始修改能量Amount(Int):暴露后显示,行内默认1;根据Mode作为差值或精确能量
输出
Changed(Int):实际提交的有符号能量变化Out(Control):能量更新后继续
参数
Mode(Option):Delta;Delta、Set;增减数值或写入精确能量Amount(Number):1;Amount未暴露时的行内值
Change HP
用途与结算语义
不经过攻击伤害管线,直接修改当前 HP 或最大 HP,当修改当前 HP 时,正的 Delta 治疗,负的 Delta 扣减 HP,Set 写入精确值,当修改最大 HP 时,节点传入差值,或计算达到设定值所需的差值,Changed 返回实际变化总和
连接与用法
适合治疗、自损和最大 HP 变化,如果需要护甲、伤害 Hook 和攻击者语义,应使用 Deal Damage,仅在上游数据需覆盖行内配置时暴露 Target 或 Amount
输入
In(Control):必需的控制输入;开始修改 HPTarget(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要修改 HP 的单位Amount(Int):暴露后显示,行内默认1;根据Mode作为差值或精确 HP
输出
Changed(Int):所有目标的当前 HP 或最大 HP 有符号变化总和Out(Control):所有目标处理后继续
参数
TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择Affect(Option):Current;Current、Max;选择当前 HP 或最大 HPMode(Option):Delta;Delta、Set;增减数值或写入精确值Amount(Number):1;Amount未暴露时的行内值

Change Status
用途与结算语义
解析配置的状态,并修改每个目标的状态层数,正的 Delta 通过状态管线施加层数,负的 Delta 移除层数,零不执行,Set 计算达到精确层数所需的差值,Changed 是状态规则和上限应用后的实际变化总和
连接与用法
在 Status 里选择状态,再设置目标和数量,需要单位集合时暴露 Target,需计算层数时暴露 Amount,状态本身是参数,该节点没有 Status 数据输入端口
输入
In(Control):必需的控制输入;开始修改状态层数Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;接收状态变化的单位Amount(Int):暴露后显示,行内默认1;层数差值或精确层数
输出
Changed(Int):实际提交的有符号层数变化总和Out(Control):所有目标处理后继续
参数
TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择Status(Text/ 状态选择器):None;要解析的状态 id/名称,无法解析时不执行Mode(Option):Delta;Delta、Set;增减层数或写入精确层数Amount(Number):1;Amount未暴露时的行内值

Deal Damage
用途与结算语义
通过战斗伤害管线对每个目标造成攻击伤害,小于等于零的值不执行,除非开启 Ignore Armor,否则护甲和修正会正常参与结算,Dealt 是所有目标实际扣除 HP 的总和,不是配置的原始数值
连接与用法
普通定向攻击可以使用 Opponent,需接收一个单位或集合时暴露 Target,需计算伤害时暴露 Amount,建议把 Dealt 连给伤害飘字,保证显示值与实际扣血一致
输入
In(Control):必需的控制输入;开始结算伤害Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;承受伤害的单位Amount(Int):暴露后显示,行内默认6;向每个目标请求的伤害值
输出
Dealt(Int):护甲和修正后的实际 HP 扣减总和Out(Control):所有目标结算后继续
参数
TargetSource(Option):Opponent;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择Amount(Number):6;Amount未暴露时的行内伤害IgnoreArmor(Bool):Off;开启后绕过护甲

Despawn Unit
用途与结算语义
只有已解析目标属于 EnemyUnitState 时才移除,玩家单位和其他 UnitState 实现会被忽略,控制器会把该敌人从活动敌人列表移除,并完成对应的移除生命周期,不经过 Kill Unit 的伤害结算
连接与用法
适合清理召唤敌人或临时敌人,可以选择行内目标,或暴露 Target 接收单位或集合,集合里的玩家单位会直接跳过
输入
In(Control):必需的控制输入;开始移除敌人Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;候选单位,只移除其中的敌人状态
输出
Out(Control):所有候选目标检查后继续
结果数据端口:无
参数
TargetSource(Option):Opponent;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内候选目标
Draw Cards
用途与结算语义
从抽牌堆把卡抽到玩家手牌,Count 最多抽取指定数量,ToHandLimit 请求持续抽牌,直到手牌上限或可用卡牌阻止继续,Drawn 只包含本次操作后新出现在手牌里的实例
连接与用法
固定数量抽牌使用 Count,需要计算数量时暴露它,选择 ToHandLimit 后 Count 端口会从节点上完全移除,如果新抽到的卡还需处理,可以继续使用 Drawn
输入
In(Control):必需的控制输入;开始抽牌Count(Int):仅Mode = Count时可用,暴露后显示,行内默认1;请求的抽牌数量,小于等于零时不抽牌
输出
Drawn(CardCollection):本次操作实际加入手牌的卡牌Out(Control):抽牌完成后继续
参数
Mode(Option):Count;Count、ToHandLimit;使用固定数量,或向当前手牌上限补牌Count(Number):1;仅Count使用;端口未暴露时的行内抽牌数量
End Turn
用途与结算语义
通过设置 EndPlayerTurnRequested 请求结束玩家回合,它不会在当前节点链中立即切换阶段,战斗状态机会在当前卡牌结算完成后消费该请求,然后进入玩家回合结束
连接与用法
把它放在结束回合前必须执行的所有玩法效果之后,从 Out 继续连接的节点仍属于当前图的结算,因此不能把它当成执行终止节点
输入
In(Control):必需的控制输入;写入玩家回合结束请求
数据输入:无
输出
Out(Control):记录请求后继续当前图
结果数据端口:无
参数
- 无:该节点没有可配置参数
Extra Turn
用途与结算语义
通过设置 ExtraTurnPending 只为玩家授予额外回合,在玩家回合结束时,状态机会消费标记并返回 PlayerTurnStart,而不是进入敌人阶段,它不会让敌人多执行一次
连接与用法
在应安排另一个完整玩家回合的效果中触发,当前回合仍会先走完正常的结束流程
输入
In(Control):必需的控制输入;安排一个额外玩家回合
数据输入:无
输出
Out(Control):额外回合标记写入后继续
结果数据端口:无
参数
- 无:该节点没有可配置参数
Kill Unit
用途与结算语义
通过控制器击杀每个已解析的非空单位,并把击杀归因给当前 Source,与 Despawn Unit 不同,它可以处理玩家和敌人单位,并走正常击杀/死亡流程
连接与用法
固定处决效果可以使用行内目标,需要指定单位或集合时暴露 Target,只有设计确实需要死亡处理时才使用该节点
输入
In(Control):必需的控制输入;开始击杀结算Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要击杀的单位
输出
Out(Control):所有目标处理后继续
结果数据端口:无
参数
TargetSource(Option):Opponent;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择
Modify Card Cost
用途与结算语义
为每个已解析卡牌添加费用规则,Delta 提高或降低费用,Set 提供强制费用,ThisTurn 和 ForNTurns 会创建可过期规则,WholeBattle 会创建整场战斗有效的规则,ForNTurns 会把 Turns 限制为至少一回合
连接与用法
选择行内卡牌来源,或暴露 Cards 接收上游集合,需计算费用变化时暴露 Amount,如果费用需在每次可打出检查时动态重算,应改用费用 Hook
输入
In(Control):必需的控制输入;开始创建费用规则Cards(CardCollection):暴露后显示,否则使用CardsSource;接收费用规则的卡牌实例Amount(Int):暴露后显示,行内默认1;根据Mode作为差值或精确费用
输出
Out(Control):所有费用规则添加后继续
结果数据端口:无
参数
CardsSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Cards未暴露时的行内卡牌集合Mode(Option):Delta;Delta、Set;调整现有费用或提供精确费用规则Amount(Number):1;Amount未暴露时的行内规则值Duration(Option):ThisTurn;ThisTurn、ForNTurns、WholeBattle;费用规则的持续时间Turns(Number):1;仅ForNTurns显示;持续回合数,运行时至少为一

Move Cards
用途与结算语义
把每个选中卡牌实例先从手牌、抽牌、弃牌和消耗堆全部移除,再放入选定的战斗牌堆,Hand 已满时会溢出到弃牌堆,当前运行时中 Master 和 All 是移除目标,会让卡牌离开所有战斗牌堆,但不修改局外 master deck
连接与用法
选择 Cards Source 或暴露 Cards 接收上游集合,再选择目标牌堆,虽然 Pile = Draw 时会显示 Position,但 Move Cards 的当前运行时并不读取该字段,移到抽牌堆时使用控制器的默认插入行为
输入
In(Control):必需的控制输入;开始移动卡牌Cards(CardCollection):暴露后显示,否则使用CardsSource;要移动的现有卡牌实例
输出
Out(Control):所有实例移动或移除后继续
结果数据端口:无
参数
CardsSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Cards未暴露时的行内卡牌Pile(Option):Discard;Hand、Draw、Discard、Exhaust、Master、All;目标牌堆,Master和All会把卡牌从当前战斗牌堆移除Position(Option):Top;Top、Bottom、Random;仅Draw显示;当前会显示,但Move Cards运行时没有使用
Play Card
用途与结算语义
作为嵌套效果立即执行另一张卡,卡牌无法解析或没有 Behavior 图时不执行,这不是玩家的正常出牌管线,不检查 OnCardPlayable,不验证阶段或手牌归属,也不扣除 Energy,卡牌会先从所有战斗牌堆移除并临时进入手牌,然后计入本回合出牌数、广播 OnCardPlayed、运行 OnPlay,最后进入弃牌堆,或在具有 Exhaust 关键字时进入消耗堆并运行 OnExhaust
连接与用法
选择卡牌来源或暴露 Card,再选择或暴露一个目标,Play Card 只解析一张卡和一个单位,集合式 Source 会使用第一个已解析项,如果只想重跑 OnPlay,不需要事件、计数和牌堆移动,应使用 Replay Card
输入
In(Control):必需的控制输入;开始即时嵌套出牌Card(CardRef):暴露后显示,否则使用CardSource;要执行的卡牌实例,集合来源取第一张Target(UnitRef):暴露后显示,否则使用TargetSource;嵌套卡牌上下文继承的单一目标
输出
Out(Control):嵌套卡牌结算完成后继续
结果数据端口:无
参数
CardSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Card未暴露时的行内卡牌来源TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标来源,最终只取一个目标
Reapply Status
用途与结算语义
不改变层数,在当前 Host 上重新触发一个状态,优先使用连接的 Status,未连接时使用当前执行上下文里的状态,无法解析状态时不执行
连接与用法
适合在状态生命周期行为中立即再次触发已有状态,需重新触发其他状态时连接 StatusRef,需使用当前状态时保持未连接
输入
In(Control):必需的控制输入;开始重新触发状态Status(StatusRef):始终显示,未连接时使用当前上下文状态;在Host上重新触发的状态,无 Host 时使用Source
输出
Out(Control):发出重新触发请求后继续
结果数据端口:无
参数
- 无:该节点没有可配置参数
Remove Cards
用途与结算语义
通过把每个选中卡牌实例移向 Master 目标,将它从四个战斗牌堆全部移除,按当前牌堆语义,这会让实例离开当前战斗,但不会删除或修改局外 master deck
连接与用法
选择行内 Cards Source 或暴露 Cards 接收已过滤集合,如果卡牌应保留在可见的弃牌堆或消耗堆,应使用 Move Cards
输入
In(Control):必需的控制输入;开始移除卡牌Cards(CardCollection):暴露后显示,否则使用CardsSource;要从战斗牌堆移除的卡牌实例
输出
Out(Control):所有选中卡牌移除后继续
结果数据端口:无
参数
CardsSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Cards未暴露时的行内卡牌
Remove Statuses
用途与结算语义
从每个已解析目标上完全移除 Statuses 输入中每个非空状态,不保留任何层数,状态集合为空或未连接时不执行
连接与用法
先创建或过滤 StatusCollection,再连到始终显示的 Statuses,固定净化目标可以使用 Target Source,需上游单位集合时暴露 Target
输入
In(Control):必需的控制输入;开始移除状态Statuses(StatusCollection):始终显示,无回退值;要完全清除的特定状态Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要净化的单位
输出
Out(Control):所有目标与状态组合处理后继续
结果数据端口:无
参数
TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择
Replay Card
用途与结算语义
只会在继承的上下文中重新运行已解析卡牌的 OnPlay 行为,卡牌无法解析或没有 Behavior 图时不执行,它不广播 OnCardPlayed,不增加出牌计数,不检查可打出性,不扣除 Energy,不移动卡牌,也不触发弃牌或消耗处理
连接与用法
适合回响或双重施法类效果,可以选择卡牌来源或暴露 Card,如果两者都没有解析出卡牌,最后会回退到当前上下文卡牌,集合来源取第一张
输入
In(Control):必需的控制输入;开始重新运行OnPlayCard(CardRef):暴露后显示,先回退到CardSource,再回退到当前卡牌;要再次运行OnPlay的卡牌实例
输出
Out(Control):重复行为完成后继续
结果数据端口:无
参数
CardSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Card未暴露时的行内卡牌来源
Revive Unit
用途与结算语义
以 HPPercent / 100 的最大 HP 比例,向每个已解析的非空目标发出复活请求,控制器负责判断目标是否可复活,并应用对应 HP 状态
连接与用法
通过 Target Source 选择已死亡单位,或暴露 Target 提供明确的单位/集合,HP Percent 使用整数百分比,例如 50 表示半血复活
输入
In(Control):必需的控制输入;开始复活请求Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要复活的单位
输出
Out(Control):所有目标处理后继续
结果数据端口:无
参数
TargetSource(Option):Self;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择HPPercent(Number):50;传给复活控制器的最大 HP 百分比
Set Variable
用途与结算语义
在当前效果作用域或整场战斗作用域里,存储一个命名的 Int、Float、Bool、Unit、Card 或 Status 值,数值类型支持 Increase、Decrease 和 Set,布尔与引用类型始终覆盖原值
连接与用法
先设置 Name 和 Kind,再连接或填写 Value,Value 端口始终存在,并会随 Kind 变化数据类型,读取时需在 Variable Get 节点使用相同的名称、类型和作用域,Unit、Card 和 Status 没有字面量后备字段,必须连接引用
输入
In(Control):必需的控制输入;开始写入变量Value(Int、Float、Bool、UnitRef、CardRef或StatusRef):类型随Kind变化,默认为0、0、Off或引用类型的null;在Name下写入、增加或减少的值
输出
Out(Control):变量写入后继续
结果数据端口:无
参数
Name(Text):None;后续读写使用的精确变量键Kind(Option):Int;Int、Float、Bool、Unit、Card、Status;存储类型与Value端口的实时类型Mode(Option):Set;Increase、Decrease、Set;仅Int和Float显示;数值更新方式,其他类型忽略BattleScope(Bool):Off;Off存在当前效果作用域,On存在整场战斗Value(Number):0;仅Int使用;行内整数后备值FloatValue(Number):0;仅Float使用;行内浮点后备值BoolValue(Bool):Off;仅Bool使用;行内布尔后备值

Shuffle Draw Pile
用途与结算语义
原地随机重排当前抽牌堆,广播 OnDrawPileShuffled,然后在重排后的抽牌堆卡牌上分发对应的洗牌行为
连接与用法
在卡牌加入或返回抽牌堆,并且不应保留可预测顺序时使用,它直接操作战斗抽牌堆,不需集合输入
输入
In(Control):必需的控制输入;开始洗抽牌堆
数据输入:无
输出
Out(Control):洗牌和洗牌触发器完成后继续
结果数据端口:无
参数
- 无:该节点没有可配置参数
Skip Next Turn
用途与结算语义
将每个已解析目标的 SkipNextTurns 加一,单位进入下一回合时会消耗一层待跳过计数,因此多次执行可以累积多个跳过回合
连接与用法
眩晕类固定效果可以选择行内目标,需要指定单位或集合时暴露 Target,该节点只安排未来的跳过,不会立即结束当前回合
输入
In(Control):必需的控制输入;添加一次待跳过回合Target(UnitRefOrCollection):暴露后显示,否则使用TargetSource;要增加跳过计数的单位
输出
Out(Control):所有计数增加后继续
结果数据端口:无
参数
TargetSource(Option):Opponent;Self、Opponent、AllEnemies、AllUnits;Target未暴露时的行内目标选择
Spawn Unit
用途与结算语义
解析 GameEnemyUnit 定义并召唤新的 EnemyUnitState,它不能创建玩家单位,MaxOnField 大于零时,会统计具有同一来源定义的存活敌人,数量达到上限后不再生成,Spawned 输出新敌人,未生成时为 null
连接与用法
在 Unit 里选择敌人定义,必要时设置场上存活副本上限,如果召唤后需立即配置该敌人,可以把 Spawned 连给后续单位效果
输入
In(Control):必需的控制输入;开始生成敌人单位
数据输入:无,Unit 通过参数配置
输出
Spawned(UnitRef):新建敌人状态,解析失败或达到上限时为nullOut(Control):生成尝试后继续
参数
Unit(Text/ 敌人选择器):None;要解析和召唤的GameEnemyUnitidMaxOnField(Number):0;同一敌人定义的最大存活数,0表示不限制
Transform Card
用途与结算语义
用 NewCard 替换一个已解析卡牌实例的当前活动定义,来源实例和目标卡牌定义都必须成功解析,否则不执行
连接与用法
选择卡牌来源或暴露 Card,再在 New Card 里选择目标定义,集合来源只解析第一张卡,需变形多张卡时应配合迭代流程
输入
In(Control):必需的控制输入;开始变形卡牌Card(CardRef):暴露后显示,否则使用CardSource;要变形的单个卡牌实例
输出
Out(Control):变形尝试后继续
结果数据端口:无
参数
CardSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Card未暴露时的行内来源NewCard(Text/ 卡牌选择器):None;用于替换选中实例活动卡牌的定义 id
Upgrade Cards
用途与结算语义
对每个已解析卡牌实例调用战斗升级操作,没有有效升级版本的卡牌会按控制器的升级规则保持不变
连接与用法
选择行内卡牌来源,或暴露 Cards 接收已过滤集合,只升级一个实例时可以提供只包含一张卡的集合
输入
In(Control):必需的控制输入;开始升级卡牌Cards(CardCollection):暴露后显示,否则使用CardsSource;要升级的现有卡牌实例
输出
Out(Control):所有选中卡牌处理后继续
结果数据端口:无
参数
CardsSource(Option):ThisCard;ThisCard、HandPile、DrawPile、DiscardPile、ExhaustPile、AllPiles;Cards未暴露时的行内卡牌
Write Hook
用途与结算语义
向当前活动 Hook 结果写入替换值,Int 直接写入整数,Bool 把 true 写为 1,false 写为 0,该节点本身不修改 HP、能量或其他战斗字段,图不是从 Hook 进入时也没有可写入的有效 Hook 目标
连接与用法
把它放在 Hook 图中需替换拦截值的计算之后,先选择 Kind,让始终显示的 Value 端口切换到正确类型,再连接或填写数值
输入
In(Control):必需的控制输入;开始写入 Hook 结果Value(Int或Bool):类型随Kind变化,行内默认0或Off;替换后的 Hook 值
输出
Out(Control):Hook 结果写入后继续
结果数据端口:无
参数
Kind(Option):Int;Int、Bool;Value端口与写入结果的类型Value(Number):0;仅Int使用;行内整数 Hook 结果BoolValue(Bool):Off;仅Bool使用;行内布尔结果,写入时编码为1或0