Skip to content

目标与索敌(target)

上一页:被动技能 · 下一页:冷却充能GCD与冲突


target 回答一个问题:这个技能放出去,QS 帮你锁谁? 锁好的目标会作为 MythicMobs 的 @Target / @Trigger 传入,MM 那侧 damage{} @Target 就打这个目标。

💡 分工提醒:QS 只负责「选中谁」,伤害怎么打交 MM + 属性插件。 没配 target: 的技能没有 @Target,MM 里得自己用 @EntitiesInRadius / @Self 取范围。

🖼️ [图片占位] 一张「玩家施法 → QS 在 range 内按 mode 选目标 → 该目标作 @Target 传给 MM」的示意图 · 建议 assets/target-select.png


一、7 种目标模式(target mode)

mode含义选谁范围索敌?
SELF自身(默认不主动选目标,交给 MM 自己的 targeter
LOOK准星射线从玩家视线射出,找第一个实体作 @Target否(射线)
NEAREST最近range 内距离最近的
FARTHEST最远range 内距离最远的
LOWEST_HP最残(残血收割)range 内当前血量最低的
HIGHEST_HP最肉(坦克)range 内当前血量最高的
RANDOM随机range 内随机一个

NEAREST / FARTHEST / LOWEST_HP / HIGHEST_HP / RANDOM 这 5 个是范围索敌,受 rangefilterrequire_los 控制。SELF 不选目标,LOOK 走射线只取视线第一个。

范围索敌的实现:候选实体来自 getNearbyEntities(range, range, range),先经 filter 过滤、再经视线过滤(require_los),然后按模式挑选——NEAREST=距离最近、FARTHEST=距离最远、RANDOM=随机一个;LOWEST_HP / HIGHEST_HP 只在 LivingEntity(有血量的活物)中选血量最低 / 最高的(没血量的实体不参与 HP 比较)。


二、5 种过滤器(filter)

filter 决定「哪些实体算候选目标」,默认 LIVING所有 filter 都会排除施法者自己。

filter含义
ANY全部实体
LIVING活物(默认
MONSTERS仅怪物
PLAYERS仅玩家
NOT_PLAYERS非玩家的生物(怪 + 动物等,排除玩家)

💡 PVE 技能一般用 MONSTERS(不会误伤队友),PVP 技能用 PLAYERS


三、range / required / require_los

字段默认范围含义
range301–100索敌半径(格)
requiredfalsetrue = 没锁到目标直接失败,提示「§c没有可用目标」,返回 CastResult.NO_TARGETfalse = 没目标照样放,交 MM 自处理
require_losfalsetrue = 只锁「有视线、不隔墙」的目标;false = 可穿墙锁

range 会被强制夹到 1–100(加载时 coerceIn(1,100)):写 150 会被改成 100,写 0 会被改成 1。所以 range 永远落在 1–100 之间,超界值不会报错而是被悄悄夹住。

required: true 没锁到目标 → 技能直接失败,向玩家提示「§c没有可用目标」并返回 CastResult.NO_TARGET。注意这个目标检查发生在门控(gate)之前(在目标选择阶段就拦下),所以连冷却 / 资源都不会去算、也不会进 CD。

关于 require_los 的补充:LOOK 本身就是射线,天然就不隔墙;require_los 主要影响 NEAREST 这类范围索敌——开了它,墙后面的怪就锁不到了。


四、两种写法

写法 A —— 标量(只指定模式,其余取默认):

yaml
target: NEAREST                  # 锁最近的活物,range=30,不强制要求目标

写法 B —— 段(完整控制):

yaml
target:
  mode: NEAREST                  # 必填:选谁
  range: 6                       # 索敌半径(格),默认 30
  filter: MONSTERS               # 过滤:默认 LIVING
  required: true                 # 没锁到就放不出,默认 false
  require_los: true              # 只锁有视线的目标,默认 false

五、复现:blade_slash 的 target 段(标准范例)

来自自带示例 skills/combat/blade_slash.yml,是「自动锁最近的怪」的范本:

yaml
# 自动索敌:施放时由 QS 选好目标,作为 MM 的 @Target 传入
target:
  mode: NEAREST                 # 选谁:NEAREST 最近 / FARTHEST 最远 / LOWEST_HP 最残 / HIGHEST_HP 最肉 / RANDOM 随机
  range: 6                      # 索敌半径(格)
  filter: MONSTERS              # 只锁怪
  required: true                # true=没锁到目标直接放不出(提示"没有可用目标")
  require_los: true             # true=只锁有视线(不隔墙)的目标

六、QS 目标与 MM @Target 的关系(关键)

  • 配了 target: 的技能:QS 选好的目标作为 MM 的 @Target / @Trigger 传入,MM 里直接 damage{} @Target 打这个目标。
  • 没配 target: 的技能:MM 收不到 @Target,必须自己用 @EntitiesInRadius / @Self 等 targeter 取范围。
yaml
# MM 侧:技能用 QS 选好的 @Target
blade_slash:
  Skills:
    - damage{amount=8} @Target           # 打 QS 锁定的那个怪
    - particles{p=crit;amount=15} @Target

数值(amount=8)最终由 AttributePlus 等属性插件结算,QS / MM 只负责命中谁。


七、5 个场景配方

① 锁最近的怪(近战 / 单体)

yaml
target:
  mode: NEAREST
  range: 6
  filter: MONSTERS

② 残血收割(专打快死的怪)

yaml
target:
  mode: LOWEST_HP                # 锁血量最低的
  range: 8
  filter: MONSTERS

③ 锁定准星(玩家瞄哪打哪)

yaml
target: LOOK                     # 视线第一个实体,天然不隔墙

④ 必须有目标(没目标就别放,省冷却)

yaml
target:
  mode: NEAREST
  range: 10
  filter: MONSTERS
  required: true                 # 没锁到 → 直接失败,提示"没有可用目标",不进冷却

⑤ 隔墙不锁(只打看得见的)

yaml
target:
  mode: NEAREST
  range: 12
  filter: MONSTERS
  require_los: true              # 墙后面的怪锁不到

✅ 自检清单

  • [ ] PVE 技能用了 filter: MONSTERS,避免误伤队友。
  • [ ] range 在 1–100 之间。
  • [ ] 想「没目标不浪费冷却」就开 required: true
  • [ ] MM 侧用了 @Target(配了 target)或 @EntitiesInRadius(没配 target)。
  • [ ] LOOKrequire_los 没必要同时纠结——LOOK 本就不隔墙。

继续阅读