跳到主要内容

目标选择

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 Enemy、Single Ally、Other Ally 与 Any 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优先读取已提交的对方 Target,其次读取对方 Attacker,两者都不存在时才取得对方阵营的第一名存活单位,已提交单位死亡后仍保留为原目标
AllUnits全部存活玩家成员与全部存活敌人
ActivePlayer当前被激活且仍然存活的玩家成员
AllAllies与当前宿主同阵营的全部存活单位,玩家卡牌解析玩家队伍,敌人 Behavior 解析敌方阵容
AllOpponents与当前宿主不同阵营的全部存活单位,方向随宿主阵营改变
AllDeadAllies与当前宿主同阵营且已经死亡、仍保留在战斗编制中的全部单位,供复活规则使用
Target当前卡牌、反应或调用上下文明确提交的单位,不按阵营改写,既可以读取敌人也可以读取队友

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

已选目标被首个效果击杀后,后续 Opponent 仍指向它,伤害与状态施加跳过死亡目标,表现与死亡规则仍可读取该引用,需要改选存活对手时,将筛选结果连接到后续节点的 Target 端口

已连接端口覆盖节点字段​

当节点同时提供 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 中显式处理

卡牌描述直接说明最终对象与结果,例如“对选中的敌人造成 8 点伤害”“使另一名队友获得 6 点护甲”或“使所有队友恢复 4 点生命”,Opponent、UnitSource、CardSource 等配置名称用于编辑器