跳到主要内容

目标选择

Guide

先确定玩家怎样选择目标,再让 Behavior 使用同一对象或集合完成实际结算

很重要的一个声明

卡牌上的 Target 决定出牌交互,Behavior 中的目标来源决定 Action 实际影响谁,两者必须表达同一范围,否则卡牌可能允许玩家选择一个目标,却在结算时影响另一个对象

Card Target 决定玩家输入

Target玩家操作Behavior 的常见目标来源
None不选择单位Behavior 自行决定单位、卡牌或无目标规则
Single Enemy选择一个存活敌人Opponent 读取玩家已提交的敌人
All Enemies不选择单位AllOpponents 解析卡牌 Host 对方阵营的全部存活单位
Self不选择单位Self 解析打出这张卡牌的角色
Single Ally选择一名存活队友,可以选择自己Target 读取玩家已提交的队友
Other Ally选择一名自己以外的存活队友Target 读取玩家已提交的队友
All Allies不选择单位AllAllies 解析来源角色一方的全部存活单位
Random Ally不选择单位运行时从玩家队伍中随机确定一名存活成员,Behavior 通过已提交目标读取结果
Random Opponent不选择单位运行时从来源角色的对方阵营随机确定一名存活单位,Behavior 通过已提交目标读取结果
Any Unit选择任意存活玩家或敌人Target 读取已提交单位,不限制双方阵营
提示

Single EnemySingle AllyOther AllyAny Unit 会在提交前显示瞄准箭头和合法单位高亮,其他目标模式由运行时直接确定范围

Single Enemy 卡牌正在瞄准一个高亮的存活敌人

上图中的卡牌仍处于目标选择阶段,只有玩家点击合法敌人后才会提交出牌,Behavior 使用 Opponent 时会读取这次选择;队友单选与 Any Unit 沿用同一条输入链路并通过 Target 读取已提交单位,友军模式会限制到来源一方,Other Ally 还会排除来源自己

Random Opponent 同样不经过单目标选择,但只会通过 Target 提交一名存活对手;All Enemies 则通过 AllOpponents 提供完整的对方集合,让所有存活敌人收到卡牌文本承诺的范围效果

Meteor Strike 对三个存活敌人同时结算 15 点伤害

上图中的 Meteor Strike 对三个存活敌人同时结算 15 点伤害,说明 Card Target、Behavior 目标集合和玩家可见文本保持一致

Unit Source 从当前上下文解析单位

Source解析结果
Self当前宿主:玩家卡牌中是玩家,Status 中是持有者,Enemy Behavior 中是当前敌人
Opponent先读取与当前宿主阵营相反且已提交的 TargetAttacker,没有可用上下文时再取得对方阵营的第一名存活单位
AllUnits全部存活玩家成员与全部存活敌人
ActivePlayer当前被激活且仍然存活的玩家成员
AllAllies与当前宿主同阵营的全部存活单位,玩家卡牌解析玩家队伍,敌人 Behavior 解析敌方阵容
AllOpponents与当前宿主不同阵营的全部存活单位,方向随宿主阵营改变
AllDeadAllies与当前宿主同阵营且已经死亡、仍保留在战斗编制中的全部单位,供复活规则使用
Target当前卡牌、反应或调用上下文明确提交的单位,不按阵营改写,既可以读取敌人也可以读取队友

治疗、护甲和自我 Buff 通常使用 Self,单目标攻击使用 Opponent,阵营范围规则使用 AllAlliesAllOpponents,让同一份 Behavior 在玩家或敌方 Host 下都保持正确

已连接端口覆盖节点字段

当节点同时提供 Target 输入端口和 Source 字段时,连线具有更高优先级

Target 端口已连接 -> 使用连线传入的单位或集合
Target 端口未连接 -> 使用 Source 字段从当前上下文解析目标
提示

这项规则允许同一个 Action 先以 Self 作为默认目标,随后通过 Selector 连线改为动态目标,切换端口前应确认原字段不再决定结果

Card Source 读取当前卡牌实例

Source解析结果
ThisCard当前正在结算的 CardInstance
HandPile当前手牌
DrawPile当前抽牌堆
DiscardPile当前弃牌堆
ExhaustPile当前消耗堆
AllPiles手牌、抽牌堆、弃牌堆与消耗堆的合并结果

这些来源在下游节点执行时读取当前牌堆,因此移动卡牌后再次求值会得到新的集合,需要保留移动前的结果时,应先保存快照

Selector 从集合中选出目标

当目标由规则而不是玩家点击决定时,使用 Selector 依次完成筛选、排序和数量截取

  1. 用 Filter 保留符合条件的单位或卡牌
  2. 用 Sort 按 HP、费用或其他数值排序
  3. 用 Pick、Take 或 Random 取得 Action 需要的对象
  • 在 Action 前检查集合是否为空,并用 Branch 进入备用路径

  • 在卡牌描述中写清目标限制

  • 让失败路径提供可见反馈,或在出牌前阻止不合法操作 Card Piles 经过 Filter 与 Random Elements,再由 Move Cards 把一张匹配卡牌移入手牌

上图先从抽牌堆筛选基础攻击牌,再随机选择一张并移入手牌,单位目标也使用同一结构,例如把 AllOpponents 按 HP 升序排序,再取第一个元素,即可得到生命最低的存活对手

空结果不会自动变成备用效果

内置 Action 会跳过空、死亡或不合法的目标,最终集合为空时,Action 不会产生效果,也不会自动选择其他对象

提示

如果空结果不符合卡牌文本或玩家预期,应在 Behavior 中显式处理

OpponentUnitSourceCardSource 和节点名称用于编辑器配置,不应直接写入玩家可见的卡牌描述,描述应明确表达最终对象,例如“对选中的敌人造成 8 点伤害”“为另一名队友获得 6 点护甲”或“使所有队友恢复 4 点生命”