精英腳本目標
目標是精英腳本的核心部分,對於動作和區域的運作來說是必需的。
目標類型
目標類型設定腳本將針對哪些實體或位置。
| 目標類型 | 詳情 | 特殊 |
|---|---|---|
NEARBY_PLAYERS | 範圍內的玩家 | 需要 range |
NEARBY_MOBS | 範圍內的生物 | 需要 range |
NEARBY_ELITES | 範圍內的精英 | 需要 range |
WORLD_PLAYERS | 世界中的玩家 | ❌ |
ALL_PLAYERS | 伺服器中的玩家 | ❌ |
DIRECT_TARGET | 事件中的玩家 | 需要相容的事件 |
SELF | 使用能力的精英 | ❌ |
SELF_SPAWN | 針對首領的生成位置 | ❌ |
LOCATION | 特定位置 | 需要 location |
LOCATIONS | 多個特定位置 | 需要 locations |
ZONE_FULL | 區域內的目標 | 需要 Zone |
ZONE_BORDER | 區域邊界的目標 | 需要 Zone |
ACTION_TARGET | 從動作繼承目標。 | 只能用於動作 條件 和 相對向量!! |
LANDING_LOCATION | 針對方塊掉落的位置。 | 只能用於 SPAWN_FALLING_BLOCK 動作! |
INHERIT_SCRIPT_TARGET | 從執行此腳本的腳本繼承目標 | 只有在腳本由另一個腳本呼叫時才能執行! |
INHERIT_SCRIPT_ZONE_FULL | 從執行此腳本的腳本繼承的區域內的目標 | 需要 Zone 在呼叫此腳本的腳本中! |
INHERIT_SCRIPT_ZONE_BORDER | 從執行此腳本的腳本繼承的區域邊界的目標 | 需要 Zone 在呼叫此腳本的腳本中! |
範例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"
這會向目標發送訊息。由於目標設定為 ALL_PLAYERS,它將向所有線上玩家發送該訊息。
共享屬性
以下設定可以應用於所有目標。
| 值 | 詳情 | 特殊 |
|---|---|---|
offset | 設定目標位置的偏移量。 | 無法針對實體! |
範例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"
這會在首領上方2個方塊處召喚閃電。注意 STRIKE_LIGHTNING 使用位置且不影響實體,因此可以有偏移量。
你無法設定偏移量來發送訊息,因為訊息是發送給玩家的。但是,你可以為區域設定偏移量,然後該區域可以針對實體。
range
設定在 NEARBY_PLAYERS 目標類型中掃描附近玩家的範圍。
| 值 | 詳情 | 預設 |
|---|---|---|
range | 設定掃描玩家目標的範圍(以方塊為單位)。 | 20.0 |
範例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"
這會在首領死亡時向首領25個方塊內的玩家發送訊息。
location
設定 LOCATION 目標類型的位置。
| 值 | 詳情 | 預設 |
|---|---|---|
location | 設定將被針對的世界位置。 | none |
位置使用格式 location: worldname,x,y,z,pitch,yaw。
注意 same_as_boss 是世界名稱的有效佔位符,例如 same_as_boss,100,64,100,0,0 會是一個有效的位置,將針對首領所在的同一個世界。
範例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"
這會在名為 myWorld 的世界的 x=100, y=64, z=200 位置生成閃電。
locations
設定 LOCATIONS 目標類型的位置。
| 值 | 詳情 | 預設 |
|---|---|---|
locations | 設定將被針對的世界位置列表。 | none |
位置使用格式 worldname,x,y,z,pitch,yaw。
注意 same_as_boss 是世界名稱的有效佔位符,例如 same_as_boss,100,64,100,0,0 會是一個有效的位置,將針對首領所在的同一個世界。
範例
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATIONS
locations:
- "myWorld,100,64,200,0,0"
- "same_as_boss,-100,12,130,0,0"
這會在名為 myWorld 的世界的 x=100, y=64, z=200 位置生成閃電,並在首領所在的同一個世界的 x=-100, y=12 和 z=130 位置生成另一道閃電。
針對區域
區域有多個目標,理解它們的運作方式對於充分使用精英腳本來說非常重要。
區域分為兩部分運作:
第1部分 - 設定區域位置
區域需要知道它們應該在哪裡,為此你可以使用目標系統,就像你對任何其他基於位置的效果(如閃電)所做的那樣。
範例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
這會在首領周圍生成一個圓柱形區域。注意此範例中還沒有設定動作,下面將會涵蓋。
某些區域,如 STATIC_RAY,有兩個或更多目標。這是因為射線是線,而線是由兩個點定義的。這在區域頁面中有更詳細的介紹,但它們基本上都以相同的方式運作。
第2部分 - 針對區域內部
現在區域知道它在哪裡了,我們需要讓動作知道它的目標是我們定義的區域。這就是 targetType: ZONE_FULL 和 targetType:ZONE_BORDER 的用途。
範例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
使用第一部分的同一個區域,我們現在新增動作。此動作的目標是 ZONE_FULL,這意味著它將在整個區域內生成粒子。
注意 ZONE_BORDER 並非對所有區域都可用。更多資訊請參閱腳本區域頁面。
區域追蹤
設定區域是否會隨目標移動,例如當首領移動時,區域是否會隨 targetType: SELF 移動。
| 值 | 詳情 | 預設 |
|---|---|---|
track | 設定區域是否會隨目標移動。 | true |
注意可動畫區域無法追蹤。更多資訊請參閱此處。
範例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
使用第1部分和第2部分的同一個範例,區域現在設定為不追蹤。這意味著區域將在首領位置生成,但即使首領繼續移動,區域也會停留在它最初生成的位置。
最後,注意如果區域設定為不追蹤,它將在腳本被呼叫的時刻記錄其位置。
舉例來說,你想為腳本設定一個警告階段和一個傷害階段,你需要確保在開始時執行所有動作,並對你想稍後單獨執行的所有與傷害相關的動作設定等待時間。出於技術原因,你不應該延遲透過 RUN_SCRIPT 呼叫的整個腳本。
以下是來自霜凍宮殿聖所的一個具有警告和傷害階段的能力的正確範例。
範例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
- action: SPAWN_PARTICLE
wait: 60
times: 13
repeatEvery: 3
particles:
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: -0.5
speed: 0.2
Target:
targetType: ZONE_FULL
track: false
- action: RUN_SCRIPT
scripts:
- DamageCylinder
- action: PLAY_ANIMATION
sValue: fire_zone
Target:
targetType: SELF
- action: SET_MOB_AI
duration: 100
bValue: false
Target:
targetType: SELF
Cooldowns:
local: 1200
global: 300
DamageCylinder:
Zone:
radius: 10.0
shape: CYLINDER
height: 10
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
offset: 0,-1,0
Actions:
- action: DAMAGE
wait: 60
repeatEvery: 10
times: 4
multiplier: 4
Target:
targetType: ZONE_FULL
track: false
- action: SET_ON_FIRE
wait: 60
duration: 80
Target:
targetType: ZONE_FULL
track: false
這個腳本做了很多事情,但它被分為兩個清晰的腳本:VisualCylinder 和 DamageCylinder。
VisualCylinder 首先執行,並有 RUN_SCRIPT 動作,它會立即同時執行 DamageCylinder,與 VisualCylinder 同時執行。
然而,DamageCylinder 中的每個動作都設定為等待60個刻度,或3秒。
這意味著首領有3秒的警告階段,然後執行傷害階段,即使區域設定為不追蹤,警告區域和傷害區域也會在同一位置。
區域特定的目標屬性
區域具有以下特定屬性:
coverage
設定實際用於動作的區域百分比。僅適用於位置目標(針對玩家或其他實體時無法使用)。
| 值 | 詳情 | 預設 |
|---|---|---|
coverage | 設定將被覆蓋的區域百分比。你可以使用 ~ 隨機化此值,例如:1.0~0.3。 | 1.0 |
範例
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
coverage: 0.5
在這種情況下,只有50%的區域會被粒子覆蓋。
繼承目標
當一個腳本執行另一個腳本(或「呼叫」該腳本)時,可以將區域和目標資訊從第一個腳本傳遞到第二個腳本。
範例用途
- 改進的腳本執行器
腳本執行器是唯一功能是執行許多其他腳本的腳本。它們用於使管理腳本更容易,尤其是在處理需要精確時間控制的多個腳本時。
透過目標繼承,多個腳本可以使用相同的區域或目標,減少了數百行重複的腳本。
- 俄羅斯套娃目標過濾 / 嵌套目標過濾
可以將過濾條件應用於動作中的目標。透過將目標傳遞到具有不同過濾器的不同腳本,可以對條件進行分層,並根據越來越具體的標準對同一批目標應用不同的效果。
舉例來說,可以建立一個尋找玩家的區域,並執行一個動作來檢查區域中的所有玩家是否有特定標籤。然後可以將有效目標傳遞到另一個腳本,在那裡另一個動作可以執行隨機檢查條件,並根據該機會應用效果。然後可以將目標進一步傳遞到另一個腳本,在那裡另一個條件可以檢查目標是否還活著,如果它們已經死亡則執行一些特殊行為。
當然,這些只是範例。這是一個高度靈活的系統。
- 複雜區域
最後,可以對目標進行分層以建立複雜的區域,如果需要的話可以選擇使用條件,甚至可以使用腳本條件和只執行腳本動作中列出的腳本之一的能力來建立半隨機化的區域。
注意: 在本節中,**「父腳本」指的是執行「繼承腳本」**的腳本,而繼承腳本是將使用繼承目標的腳本。
使用目標繼承時,仔細查看_父腳本_以確保傳遞正確的資料非常重要。
INHERIT_SCRIPT_TARGET
使用 INHERIT_SCRIPT_TARGET 時,_父腳本_的目標將傳遞到繼承腳本。這有幾個注意事項:
-
傳遞實體目標時,可以執行需要位置的動作(例如生成粒子),因為將使用實體的位置。當然,也可以使用需要實體的動作。
-
傳遞位置目標時,只能使用位置。從位置獲取實體的唯一方法是在該位置建立一個區域並尋找實體。 因此,雖然傳遞位置然後獲取實體並非不可能,但需要一些額外的工作。
繼承區域
使用 INHERIT_SCRIPT_ZONE_FULL 或 INHERIT_SCRIPT_ZONE_BORDER 時,_父腳本_必須定義一個區域,否則_繼承腳本_將無法正確執行。
此外,區域可以選擇性地追蹤。這也會隨區域一起傳遞。
-
未追蹤的區域將始終在_繼承腳本_定義的位置建立區域。這意味著區域設定將被_繼承腳本_中的動作使用,每次動作執行時都會建立全新的區域,這些區域的位置將由動作定義。
-
追蹤的區域可以將完全相同的區域位置傳遞給所有_繼承腳本_,如果_父腳本_設定為針對
ZONE_FULL或ZONE_BORDER。這意味著每個腳本都將作用於相同的位置。