目标与索敌(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 个是范围索敌,受range、filter、require_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
| 字段 | 默认 | 范围 | 含义 |
|---|---|---|---|
range | 30 | 1–100 | 索敌半径(格) |
required | false | — | true = 没锁到目标直接失败,提示「§c没有可用目标」,返回 CastResult.NO_TARGET;false = 没目标照样放,交 MM 自处理 |
require_los | false | — | true = 只锁「有视线、不隔墙」的目标;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 —— 标量(只指定模式,其余取默认):
target: NEAREST # 锁最近的活物,range=30,不强制要求目标写法 B —— 段(完整控制):
target:
mode: NEAREST # 必填:选谁
range: 6 # 索敌半径(格),默认 30
filter: MONSTERS # 过滤:默认 LIVING
required: true # 没锁到就放不出,默认 false
require_los: true # 只锁有视线的目标,默认 false五、复现:blade_slash 的 target 段(标准范例)
来自自带示例 skills/combat/blade_slash.yml,是「自动锁最近的怪」的范本:
# 自动索敌:施放时由 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 取范围。
# MM 侧:技能用 QS 选好的 @Target
blade_slash:
Skills:
- damage{amount=8} @Target # 打 QS 锁定的那个怪
- particles{p=crit;amount=15} @Target数值(
amount=8)最终由 AttributePlus 等属性插件结算,QS / MM 只负责命中谁。
七、5 个场景配方
① 锁最近的怪(近战 / 单体)
target:
mode: NEAREST
range: 6
filter: MONSTERS② 残血收割(专打快死的怪)
target:
mode: LOWEST_HP # 锁血量最低的
range: 8
filter: MONSTERS③ 锁定准星(玩家瞄哪打哪)
target: LOOK # 视线第一个实体,天然不隔墙④ 必须有目标(没目标就别放,省冷却)
target:
mode: NEAREST
range: 10
filter: MONSTERS
required: true # 没锁到 → 直接失败,提示"没有可用目标",不进冷却⑤ 隔墙不锁(只打看得见的)
target:
mode: NEAREST
range: 12
filter: MONSTERS
require_los: true # 墙后面的怪锁不到✅ 自检清单
- [ ] PVE 技能用了
filter: MONSTERS,避免误伤队友。 - [ ]
range在 1–100 之间。 - [ ] 想「没目标不浪费冷却」就开
required: true。 - [ ] MM 侧用了
@Target(配了 target)或@EntitiesInRadius(没配 target)。 - [ ]
LOOK与require_los没必要同时纠结——LOOK 本就不隔墙。
继续阅读
- 下一页:冷却充能GCD与冲突 —— 锁到目标后,还要过冷却 / 资源 / GCD 这些门。
- 被动技能 —— 被动的目标由触发事件给定(
ON_ATTACK给被击者)。 - 消耗条件与变量 ——
conditions里的has_target/target_distance等键。 - 对接 MythicMobs —— MM 里
@Target/@Trigger的接收。