Elite Script 相对向量
用途
相对向量是相对于特定但动态位置的向量。
为了更好地解释这些是什么,让我们考虑以下情况:您想要将玩家推向 Boss 作为技能的一部分。由于 Boss 和玩家在战斗中都会移动,因此不可能依靠特定的向量来实现这种效果 - 您需要一个从玩家指向 Boss 的向量。(想象一条带有箭头的短线,从玩家指向 Boss。)
相对向量可以以多种方式使用,几乎不可能列出所有方式,但其中包括:将实体(如抛射物)射向特定玩家或生物;在玩家身后生成增援;将掉落方块射向特定方向;创建射向玩家的射线等等。
向量如何工作?
如果您不知道或不记得什么是向量或它们如何工作,您可以将向量视为从一个点指向另一个点的箭头。
因此,向量的属性之一是它们的长度。这个长度很重要;在箭的情况下,这个长度是箭射出的速度,在尝试从特定位置获取偏移点的情况下,它是距离该点的距离。距离更远的东西将具有更大的向量长度,而距离更近的东西将具有更短的长度。
对于某些机制,您可能不想依赖两点之间的距离,因为您只想获得一个方向。幸运的是,您可以使用向量归一化,这可以保证方向得以保留,但将长度更改为 1.0。然后,您可以使用乘数轻松修改向量,直到您对它提供的偏移或速度感到满意为止。
属性
| 值 | 详情 | 必填? | 默认值 |
|---|---|---|---|
SourceTarget | 向量起点的目标 | ✅ | none |
DestinationTarget | 向量终点的目标 | ✅ | none |
normalize | 设置是否应归一化向量 | ❌ | false |
multiplier | 乘以向量的长度。您可以使用 ~ 来随机化此值。例如:1.0~2.5。 | ❌ | 1.0 |
offset | 允许向此偏移插入手动固定偏移。您可以使用 ~ 来随机化此值。例如:0~5,0~2,0~10。 | ❌ | none |
示例
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
创建一个动画火焰球体,收缩到生成位置。
操作顺序
应用属性时的操作顺序如下:
向量计算 -> normalize -> multiplier -> offset
Elite Script 相对偏移
用途是什么?
相对偏移的功能类似于相对向量,但目标是为偏移添加灵活性。它们允许您在编写脚本时动态调整位置,从而更容易根据上下文微调目标位置或效果。
相对偏移如何工作?
相对偏移是叠加的,这意味着偏移解析的任何值都将添加到基础值(例如位置或向量)。
让我们分解一个例子:
您有一个 ray zone:
Target 1是SELF(Boss)。Target 2是NEARBY_PLAYERS,范围为 10。
如果在 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设置为0且normalize = true时,偏移变为0(因为1 × 0 = 0),当normalize = false时,偏移也变为0(因为任何数乘以0都是0),在这两种情况下都有效地禁用了相对偏移。
该系统允许您在构建更复杂的 EliteMobs 脚本技能逻辑时轻松动态扩展或缩小距离。
属性
| 值 | 详情 | 必填? | 默认值 |
|---|---|---|---|
SourceTarget | 向量起点的目标 | ✅ | none |
DestinationTarget | 向量终点的目标 | ✅ | none |
normalize | 设置是否应归一化向量 | ❌ | false |
multiplier | 乘以向量的长度。您可以使用 ~ 来随机化此值。例如:1.0~2.5。 | ❌ | 1.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 个方块。请注意,常规偏移也应用于 Target 和 Target2,以确保射线从 Boss 的中心绘制到玩家的中心,而不是从他们的脚部绘制。
**注意:**尽管此示例在区域上使用相对偏移,但请记住,相对偏移不仅限于区域,它们也可以应用于其他目标。