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.5。 | ❌ | 1.0 |
offset | 允许向此偏移插入手动固定偏移。你可以使用 ~ 来随机化此值。示例:0~5,0~2,0~10。 | ❌ | none |
随机化
multiplier 和 offset 都支持使用波浪号(~)分隔符进行随机化:
- 对于 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 1是SELF(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设置为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 的中心绘制到玩家的中心,而不是从他们的脚下。
**注意:**即使此示例在区域上使用相对偏移,请记住相对偏移不仅限于区域,它们也可以应用于其他目标。