跳到主要内容

Elite 脚本相对向量

用途

相对向量是相对于特定但动态位置的向量。

为了更好地解释这是什么,让我们考虑以下情况:你想要将玩家推向 Boss 作为技能的一部分。由于 Boss 和玩家在战斗中都会四处移动,因此不可能依靠特定的向量来实现此效果 - 你需要一个从玩家指向 Boss 的向量。(想象一条带箭头的短线从玩家指向 Boss。)

相对向量的用途非常多,以至于无法一一列举,但其中包括:向特定玩家或生物发射实体(如抛射物);在玩家身后生成增援;向特定方向发射掉落方块;创建射向玩家的射线等等。

使用上下文

相对向量在动作上下文中使用,使用 YAML 键 RelativeVector:。这包括以下动作:

  • SUMMON_ENTITY - 设置生成实体的速度(移动方向和速度)
  • SPAWN_PARTICLE - 设置粒子移动的方向
  • PUSH - 设置推动速度
  • SPAWN_FALLING_BLOCK - 设置掉落方块速度
  • SET_FACING - 设置实体面向的方向

对于目标上下文(修改目标位置),请改用 relativeOffset:。请参阅下面的 Elite 脚本相对偏移部分,了解 relativeOffset 工作方式的详细信息。

向量如何工作?

如果你不知道或不记得什么是向量或它们如何工作,你可以将向量视为从一个点指向另一个点的箭头。

因此,向量的属性之一是它们的长度。这个长度很重要;对于箭来说,这个长度是箭被射出的速度,对于尝试从特定位置获取偏移点来说,它是距该点的距离。距离越远,向量长度就越大,距离越近,长度就越短。

对于某些机制,你可能不想依赖两点之间的距离,因为你只想获得一个方向。幸运的是,你可以使用向量归一化,它保证保留方向但将长度更改为 1.0。然后,你可以使用乘数轻松修改向量,直到你对它提供的偏移或它给出的速度感到满意为止。

属性

详情必需?默认值
SourceTarget向量起始点的目标none
DestinationTarget向量终点的目标none
normalize设置是否应归一化向量false
multiplier乘以向量的长度。你可以使用 ~ 来随机化此值。示例:1.0~2.51.0
offset允许向此偏移插入手动固定偏移。你可以使用 ~ 来随机化此值。示例:0~5,0~2,0~10none

随机化

multiplieroffset 都支持使用波浪号(~)分隔符进行随机化:

  • 对于 multiplier:使用格式 min~max(例如 1.0~2.5)。每次脚本运行时,将选择 1.0 到 2.5 之间的随机值(包括两端)。
  • 对于 offset:使用格式 x1~x2,y1~y2,z1~z2(例如 0~5,0~2,0~10)。每个组件(X、Y、Z)都是独立随机化的。

每次计算向量时都会重新生成随机化值,从而实现动态和多样化的效果。

示例
eliteScript:
ShootChicken:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: CHICKEN
Target:
targetType: SELF
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

发射一只鸡


eliteScript:
ShootArrow:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: ARROW
Target:
targetType: SELF
RelativeVector:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

发射一支箭


eliteScript:
SpawnReinforcement:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SUMMON_ENTITY
sValue: ZOMBIE
Target:
targetType: SELF
relativeOffset:
SourceTarget:
targetType: SELF
DestinationTarget:
targetType: DIRECT_TARGET
normalize: true
multiplier: 2.0

相对于 Boss,在玩家身后 2 格处生成一只僵尸。


eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
Shape: SPHERE
target:
targetType: SELF_SPAWN
offset: 0,0,0
track: false
filter: PLAYER
radius: 6
Actions:
- action: SPAWN_PARTICLE
repeatEvery: 38
times: 5
Target:
targetType: ZONE_FULL
track: false
coverage: 0.9
particles:
- particle: FLAME
RelativeVector:
SourceTarget:
targetType: ACTION_TARGET
track: true
DestinationTarget:
targetType: SELF_SPAWN
offset: 0,-0.5,0
speed: 0.05

创建一个动画火焰球体,该球体收缩到生成位置。

工作原理:

  • 区域以 Boss 生成位置为中心,目标为 6 格球体范围内的所有玩家。
  • 粒子在整个球体内的随机点生成(coverage: 0.9 表示使用 90% 的点)。
  • 每个粒子从其生成点(带有 track: true 的 ACTION_TARGET)向 Boss 生成位置(SELF_SPAWN)移动。
  • SourceTarget 上的 track: true 意味着粒子在移动时会持续更新其方向。
  • 这会产生向内运动效果,使球体看起来向中心坍缩。
  • 效果重复 5 次(times: 5),每次迭代之间间隔 38 刻(repeatEvery: 38)。

运算顺序

应用属性时的运算顺序如下:

向量计算 -> normalize -> multiplier -> offset

技术说明

向量归一化:归一化保留向量的方向,但将其长度设置为恰好 1.0。当你需要一致的行为而不考虑距离时,这很有用。

负乘数:乘数可以为负数以反转向量的方向。例如,乘数为 -1.0 将指向相反的方向。

偏移坐标:偏移以世界坐标应用,而不是相对于向量方向。它在所有其他计算之后添加。

世界验证:源目标和目标目标必须在同一世界中。如果它们在不同的世界中,将返回零向量(0, 0, 0),这可能导致动作失败或行为异常。

零向量:当目标无效或在不同世界中时,系统返回零向量。这可能导致实体生成时没有速度或动作没有效果。

速度与位置上下文:在像 SUMMON_ENTITY 这样的动作上下文中,RelativeVector 设置实体的速度(移动)。在目标上下文中,relativeOffset 设置位置偏移(位置调整)。使用相同的底层系统,但解释因上下文而异。

Elite 脚本相对偏移

用途

相对偏移的功能类似于相对向量,但目标是为偏移添加灵活性。它们允许你在脚本编写时动态调整位置,从而更容易根据上下文微调目标位置或效果。

相对偏移如何工作?

相对偏移是累加的,这意味着偏移解析为的任何值都将添加到基础值(如位置或向量)。

让我们分解一个示例:

你有一个 ray zone:

  • Target 1SELF(Boss)。
  • Target 2 是范围为 10 的 NEARBY_PLAYERS

如果找到一个距离 8 格远的玩家,射线将长 8 格,终止于玩家处。

现在让我们应用一个相对偏移:

情况 1:normalize = false,multiplier = 1

  • 原始距离为 8。
  • 偏移值变为 8 × 1 = 8
  • 最终射线长度:8 + 8 = 16

射线将穿过玩家并继续延伸 8 格。

情况 2:normalize = false,multiplier = 2

  • 偏移值变为 8 × 2 = 16
  • 最终射线长度:8 + 16 = 24

情况 3:normalize = true,multiplier = 1

  • 距离归一化为 1。
  • 偏移值变为 1 × 1 = 1
  • 最终射线长度:8 + 1 = 9

情况 4:normalize = true,multiplier = 2

  • 偏移值变为 1 × 2 = 2
  • 最终射线长度:8 + 2 = 10

总结

  • normalize = false 使用目标之间的实际距离。
  • normalize = true 始终从基数 1 开始,无论实际距离如何。
  • 偏移始终添加到原始值。
  • multiplier 设置为 0normalize = true 时,偏移变为 0(因为 1 × 0 = 0),当 normalize = false 时,偏移也变为 0(因为任何数乘以 0 都是 0),这在两种情况下都有效地禁用了相对偏移。

此系统允许你在构建 EliteMobs 脚本中更复杂的技能逻辑时轻松动态扩展或缩小距离。

属性

详情必需?默认值
SourceTarget向量起始点的目标none
DestinationTarget向量终点的目标none
normalize设置是否应归一化向量false
multiplier乘以向量的长度。你可以使用 ~ 来随机化此值。示例:1.0~2.51.0
示例
eliteScript:
MakeStaticRay:
Events:
- EliteMobDamagedByPlayerEvent
Zone:
shape: STATIC_RAY
Target:
targetType: SELF
offset: 0,1,0
Target2:
targetType: NEARBY_PLAYERS
range: 10
offset: 0,1,0
relativeOffset:
sourceTarget:
targetType: SELF
destinationTarget:
targetType: NEARBY_PLAYERS
range: 10
multiplier: 5
normalize: true
Actions:
- action: SPAWN_PARTICLE
Target:
targetType: ZONE_FULL
particles:
- particle: ELECTRIC_SPARK
amount: 1
repeatEvery: 1
times: 400

这将在 Boss 和玩家之间创建一条静态射线,相对偏移将射线延伸到玩家后方 5 格。请注意,常规偏移也应用于 TargetTarget2,以确保射线从 Boss 的中心绘制到玩家的中心,而不是从他们的脚下。

**注意:**即使此示例在区域上使用相对偏移,请记住相对偏移不仅限于区域,它们也可以应用于其他目标。