Elite Script 相對向量
它們的用途
相對向量是相對於特定但動態位置的向量。
為了最好地解釋這些是什麼,讓我們考慮以下情況:您想將玩家推向首領作為能力的一部分。由於首領和玩家在戰鬥中都會四處移動,因此不可能依賴特定向量來實現此效果 - 您需要一個從玩家指向首領的向量。(想像一條帶有箭頭從玩家指向首領的短線。)
相對向量可以以如此多的方式使用,以至於不可能列出它們全部,但其中包括:向特定玩家或怪物射出實體(如拋射物);在玩家身後生成增援;向特定方向射出掉落方塊;創建射向玩家的光線,以及更多。
使用情境
相對向量用於 動作情境 中,使用 YAML 鍵 RelativeVector:。這包括以下動作:
SUMMON_ENTITY- 設定生成實體的速度(移動方向和速度)SPAWN_PARTICLE- 設定粒子移動的方向PUSH- 設定推動速度SPAWN_FALLING_BLOCK- 設定掉落方塊速度SET_FACING- 設定實體面向的方向
對於目標情境(修改目標位置),請改用 relativeOffset:。有關 relativeOffset 如何不同運作的詳細資訊,請參閱下面的 Elite Script 相對偏移部分。
向量如何運作?
如果您不知道或不記得向量是什麼或它們如何運作,您可以將向量視為從一個點指向另一個點的箭頭。
因此,向量的屬性之一是它們的長度。這個長度很重要;在箭的情況下,這個長度是箭射出的速度,在嘗試從特定位置獲取偏移點的情況下,它是距該點的距離。距離較遠的東西將具有更大的向量長度,而較近的東西將具有較短的長度。
對於某些機制,您可能不想依賴兩點之間的距離,因為您只想獲得一個方向。幸運的是,您能夠使用向量標準化,它保證保留方向但將長度更改為 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 都支援使用波浪號 (~) 分隔符進行隨機化:
- 對於倍數: 使用格式
min~max(例如1.0~2.5)。每次腳本執行時,將選擇 1.0 和 2.5 之間(包含)的隨機值。 - 對於偏移: 使用格式
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
在玩家身後 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
創建一個收縮到生成位置的動畫火焰球體。
如何運作:
- 區域目標首領生成位置周圍 6 格球體內的所有玩家。
- 粒子在整個球體中的隨機點生成(coverage: 0.9 表示使用 90% 的點)。
- 每個粒子從其生成點(帶有 track: true 的 ACTION_TARGET)向首領生成位置(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 Script 相對偏移
它們的用途是什麼?
相對偏移的功能類似於相對向量,但目標是為偏移添加靈活性。它們允許您在腳本編寫時動態調整位置,使根據情境微調目標位置或效果變得更容易。
相對偏移如何運作?
相對偏移是加法的,這意味著無論偏移解析為什麼,都將添加到基值(例如位置或向量)。
讓我們分解一個範例:
您有一個 ray zone:
Target 1是SELF(首領)。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
這將在首領和玩家之間創建一條靜態光線,帶有將光線延伸到玩家之外 5 格的相對偏移。請注意,常規偏移也應用於 Target 和 Target2,以確保光線從首領的中心繪製到玩家的中心,而不是從他們的腳。
注意: 儘管此範例在區域上使用相對偏移,但請記住相對偏移不僅限於區域,它們也可以應用於其他目標。