Lua-Scripting: Boss & Entitäten
Diese Seite behandelt alles rund um Boss- und Entitäts-Wrapper in EliteMobs-Lua-Powers: context.boss, context.player, context.players, context.entities und die Entitäts-Wrapper-Tabellen, die sie zurückgeben. Wenn Sie neu bei Lua-Powers sind, beginnen Sie zuerst mit Erste Schritte.
Entitäts-Wrapper
Wenn Sie über die Lua-API auf Entitäten zugreifen – sei es über context.boss, context.player, Abfrageergebnisse wie context.players:nearby_players() oder Event-Felder – erhalten Sie immer Wrapper-Tabellen. Dies sind keine rohen Bukkit-Objekte. Jeder Wrapper stellt eine Reihe von Feldern (Snapshot-Werte, die zum Erstellungszeitpunkt erfasst werden) und Methoden (Live-Aufrufe, die auf den Server zugreifen) bereit.
Zwei Regeln zum Merken:
- Felder wie
health,current_locationundmaximum_healthsind Snapshots. Sie spiegeln den Zustand zum Zeitpunkt der Wrapper-Erstellung wider und aktualisieren sich nicht automatisch. - Methoden wie
get_location(),get_health()undis_alive()führen bei jedem Aufruf eine Live-Überprüfung durch.
Gemeinsame Entitätsfelder
Jeder Living-Entity-Wrapper enthält diese Felder.
| Feld | Typ | Hinweise |
|---|---|---|
entity.name | string | Anzeigename |
entity.uuid | string | UUID als Text |
entity.entity_type | string | Bukkit-EntityType-Name (z. B. "ZOMBIE", "PLAYER") |
entity.is_player | boolean | true für Spieler |
entity.is_elite | boolean | true, wenn EliteMobs diese Entität als Elite verfolgt |
entity.is_mount | boolean | true, wenn dieser Wrapper ein Boss-Reittier darstellt |
entity.is_monster | boolean | true für Monster-Entitäten |
entity.is_valid | boolean | Snapshot-Gültigkeitsflag |
entity.health | number | Aktuelle Gesundheit (Snapshot) |
entity.maximum_health | number | Maximale Gesundheit (Snapshot) |
entity.current_location | location-Tabelle | Position zum Zeitpunkt der Wrapper-Erstellung |
Um Elite-spezifische Daten wie das Boss-Level zu lesen, verwenden Sie die Felder und Methoden von context.boss, die im Abschnitt context.boss weiter unten beschrieben werden. Um einen Elite aus einem Script zu despawnen, rufen Sie die Methode entity:remove_elite() auf.
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.log:info("Boss level: " .. context.boss.level)
end
}
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local target = context.players:current_target()
if target ~= nil then
context.log:info("Target: " .. target.name .. " HP: " .. target.health)
end
end
}
Gemeinsame Entitätsmethoden
Jeder Living-Entity-Wrapper unterstützt diese Methoden. Jede Methode führt einen Live-Aufruf an den Server durch.
entity:is_alive()
Gibt true zurück, wenn die Entität noch gültig und nicht tot ist.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if context.player:is_alive() then
context.player:send_message("&aYou're still standing!")
end
end
}
entity:get_location()
Gibt den aktuellen Live-Standort als location-Tabelle zurück.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local loc = context.player:get_location()
context.world:play_sound_at_location(loc, "entity.experience_orb.pickup")
end
}
entity:get_eye_location()
Gibt den Standort auf Augenhöhe als location-Tabelle zurück.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local eye = context.player:get_eye_location()
context.world:spawn_particle_at_location(eye, "FLAME")
end
}
entity:get_health() / entity:get_maximum_health()
Gibt die aktuelle bzw. maximale Live-Gesundheit zurück.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local pct = context.player:get_health() / context.player:get_maximum_health()
if pct < 0.25 then
context.player:send_message("&cYou're running low!")
end
end
}
entity:get_velocity()
Gibt die aktuelle Geschwindigkeit der Entität als Vektor-Tabelle zurück.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local vel = context.player:get_velocity()
context.log:info("Player speed Y: " .. vel.y)
end
}
entity:send_message(text)
Sendet eine Chat-Nachricht an die Entität. Unterstützt die EliteMobs-Farbformatierung.
| Parameter | Typ | Hinweise |
|---|---|---|
text | string | Nachricht mit Farbcodes |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:send_message("&6[Boss] &fPrepare yourself!")
end
}
entity:show_action_bar(message)
Sendet eine Action-Bar-Nachricht an die Entität.
| Parameter | Typ | Hinweise |
|---|---|---|
message | string | Action-Bar-Text mit Farbcodes |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:show_action_bar("&c&lDANGER ZONE")
end
}
entity:show_title(title[, subtitle][, fadeIn][, stay][, fadeOut])
Sendet einen Titel und einen optionalen Untertitel an die Entität.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
title | string | Titeltext | |
subtitle | string | "" | Untertiteltext |
fadeIn | number | 10 | Einblend-Ticks |
stay | number | 40 | Anzeigedauer in Ticks |
fadeOut | number | 10 | Ausblend-Ticks |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, p in ipairs(nearby) do
p:show_title("&4PHASE 2", "&7The boss is enraged!", 10, 40, 10)
end
end
}
entity:show_boss_bar(title[, color][, style][, duration])
Zeigt der Entität eine temporäre Boss-Leiste an.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
title | string | Titeltext der Leiste | |
color | string | "WHITE" | BarColor-Wert |
style | string | "SOLID" | BarStyle-Wert |
duration | number | 40 | Dauer in Ticks |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, p in ipairs(nearby) do
p:show_boss_bar("&cIncoming Attack!", "RED", "SOLID", 100)
end
end
}
entity:teleport_to_location(location)
Teleportiert die Entität zu einem Standort.
| Parameter | Typ | Hinweise |
|---|---|---|
location | location-Tabelle | Ziel |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("teleport_pull", 200) then return end
context.player:teleport_to_location(context.boss:get_location())
context.player:send_message("&cThe boss pulls you in!")
end
}
entity:set_velocity_vector(vector)
Setzt die Geschwindigkeit der Entität sofort.
| Parameter | Typ | Hinweise |
|---|---|---|
vector | Vektor-Tabelle | { x, y, z } oder { x = 0, y = 1, z = 0 } |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("launch", 100) then return end
context.player:set_velocity_vector({ x = 0, y = 1.5, z = 0 })
context.player:send_message("&cYou are launched into the air!")
end
}
entity:apply_push_vector(vector[, additive][, delay])
Wendet nach einer kurzen Verzögerung (Standard 1 Tick) einen Geschwindigkeitsstoß an. Nützlich, um den Rückstoß zu überschreiben.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
vector | Vektor-Tabelle | Richtung und Stärke | |
additive | boolean | false | Zur bestehenden Geschwindigkeit hinzufügen, statt sie zu ersetzen |
delay | number | 1 | Verzögerung in Ticks vor der Anwendung |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("push_up", 100) then return end
context.player:apply_push_vector({ x = 0, y = 2.0, z = 0 })
context.player:send_message("&cUpward blast!")
end
}
entity:face_direction_or_location(directionOrLocation)
Lässt die Entität in Richtung eines Richtungsvektors oder eines Standorts blicken.
| Parameter | Typ | Hinweise |
|---|---|---|
directionOrLocation | Vektor- oder location-Tabelle | Ziel, auf das geblickt werden soll |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:face_direction_or_location(context.boss:get_location())
context.player:send_message("&cThe boss forces you to look at it!")
end
}
entity:set_fire_ticks(ticks)
Setzt die Entität für die angegebene Dauer in Brand.
| Parameter | Typ | Hinweise |
|---|---|---|
ticks | number | Branddauer in Ticks (20 Ticks = 1 Sekunde) |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("ignite", 100) then return end
context.player:set_fire_ticks(60)
context.player:send_message("&cYou catch fire!")
end
}
entity:add_visual_freeze_ticks([ticks])
Fügt der Entität visuelle Freeze-Ticks hinzu (der blaue Overlay-Effekt).
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
ticks | number | 1 | Anzahl der Freeze-Ticks |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("freeze", 200) then return end
context.player:add_visual_freeze_ticks(100)
context.player:send_message("&bYou feel a chilling frost!")
end
}
entity:apply_potion_effect(effect, duration[, amplifier])
Wendet einen Trankeffekt auf die Entität an.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
effect | string | PotionEffectType-Name | |
duration | number | Dauer in Ticks | |
amplifier | number | 0 | Effektstärke (0 = Stufe I) |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("slow", 200) then return end
context.player:apply_potion_effect("SLOWNESS", 60, 1)
context.player:send_message("&7You feel sluggish...")
end
}
remove_potion_effect(effect) ist in EliteMobs-Lua-Powers nicht verfügbar. Es existiert nur in Magmacore/FMM. Verwenden Sie als Workaround apply_potion_effect mit einer Dauer von 0, oder gestalten Sie Ihre Power so, dass Sie keine Effekte entfernen müssen.
entity:deal_damage(amount) / entity:deal_custom_damage(amount) / entity:deal_damage_from_boss(amount)
Fügt der Entität Schaden zu. Es stehen drei Varianten zur Verfügung.
| Methode | Hinweise |
|---|---|
deal_damage(amount) | Generische Schadensquelle |
deal_custom_damage(amount) | Verwendet BossCustomAttackDamage des Bosses |
deal_damage_from_boss(amount) | Die Boss-Entität wird als Verursacher festgelegt |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(10)
for _, p in ipairs(nearby) do
p:deal_custom_damage(10)
p:send_message("&cThe boss unleashes a shockwave!")
end
end
}
entity:restore_health(amount)
Heilt die Entität bis zu ihrer maximalen Gesundheit.
| Parameter | Typ | Hinweise |
|---|---|---|
amount | number | Menge der Heilung |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
-- Heal the player slightly when they hit the boss
context.player:restore_health(5)
context.player:send_message("&aYou drain life from the boss!")
end
}
entity:set_invulnerable(enabled[, duration])
Schaltet die Unverwundbarkeit der Entität um. Wird optional nach einer Dauer zurückgesetzt.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
enabled | boolean | true, um Unverwundbarkeit zu aktivieren | |
duration | number | nil | Automatisches Zurücksetzen nach so vielen Ticks |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("shield", 200) then return end
context.player:set_invulnerable(true, 40)
context.player:send_message("&6A brief shield protects you!")
end
}
entity:set_ai_enabled(enabled[, duration])
Schaltet die KI der Entität um. Wird optional nach einer Dauer zurückgesetzt.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
enabled | boolean | true, um die KI zu aktivieren | |
duration | number | nil | Automatisches Zurücksetzen nach so vielen Ticks |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Disable boss AI for 3 seconds at combat start
context.boss:set_ai_enabled(false, 60)
context.boss:send_message("&7The boss is stunned!")
end
}
entity:add_tag(tag[, duration]) / entity:remove_tag(tag) / entity:has_tag(tag)
Verwaltet Tags an der Entität. Tags werden von EliteMobs verfolgt und bleiben für die Lebensdauer der Entität bestehen.
| Methode | Parameter | Hinweise |
|---|---|---|
add_tag(tag[, duration]) | string, optionale number | Fügt einen Tag hinzu, entfernt ihn optional automatisch nach Ticks |
remove_tag(tag) | string | Entfernt den Tag |
has_tag(tag) | string | Gibt true zurück, wenn der Tag vorhanden ist |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.player:has_tag("marked") then
context.player:add_tag("marked", 200)
context.player:send_message("&cYou have been marked!")
end
end
}
entity:run_command(command)
Lässt die Entität einen Befehl ausführen. Bei Spielern wird dieser als Spieler ausgeführt; verwenden Sie den Befehlstext ohne führenden /.
| Parameter | Typ | Hinweise |
|---|---|---|
command | string | Befehlstext ohne führenden / |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("curse_cmd", 200) then return end
context.player:run_command("say I have been cursed!")
end
}
entity:set_scale(scale[, duration])
Setzt das Attribut generic_scale der Entität. Wird optional nach einer Dauer auf 1.0 zurückgesetzt.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
scale | number | Skalierungsmultiplikator | |
duration | number | nil | Automatisches Zurücksetzen nach so vielen Ticks |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Boss grows to double size for 5 seconds
context.boss:set_scale(2.0, 100)
context.boss:send_message("&4The boss grows in size!")
end
}
entity:set_gravity(enabled)
Schaltet die Schwerkraft der Entität um.
| Parameter | Typ | Hinweise |
|---|---|---|
enabled | boolean | true für normale Schwerkraft |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("levitate", 200) then return end
-- Disable player gravity briefly and re-enable after 3 seconds
local player = context.player
player:set_gravity(false)
player:send_message("&dYou begin to float!")
context.scheduler:run_after(60, function()
if player:is_alive() then
player:set_gravity(true)
end
end)
end
}
entity:play_sound_at_entity(sound[, volume][, pitch])
Spielt einen Sound am Standort der Entität ab.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
sound | string | Minecraft-Sound-Key (zum Beispiel "entity.ender_dragon.growl") | |
volume | number | 1.0 | Lautstärke |
pitch | number | 1.0 | Tonhöhe |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:play_sound_at_entity("entity.ender_dragon.growl", 1.0, 0.5)
end
}
entity:play_sound_at_self(sound[, volume][, pitch])
Alias für play_sound_at_entity. Spielt einen Sound am Standort der Entität ab.
entity:spawn_particle_at_self(particleOrSpec[, count])
Erzeugt Partikel am Standort der Entität.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
particleOrSpec | string oder Tabelle | Partikelname oder Spezifikations-Tabelle | |
count | number | 1 | Anzahl der Partikel |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:spawn_particle_at_self("HEART", 5)
end
}
entity:spawn_particles_at_location(location, particle[, count])
Erzeugt Partikel an einem bestimmten Standort.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
location | location-Tabelle | Zielstandort | |
particle | string | Name des Partikeltyps | |
count | number | 1 | Anzahl der Partikel |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
local loc = context.player:get_location()
context.player:spawn_particles_at_location(loc, "FLAME", 10)
end
}
entity:play_model_animation(name)
Spielt eine Custom-Model-Animation ab, sofern die Entität ein Custom Model besitzt, das dies unterstützt.
| Parameter | Typ | Hinweise |
|---|---|---|
name | string | Name der Animation |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("attack_swing")
end
}
Methoden für Fahrzeuge und Passagiere
Living-Entity-Wrapper stellen außerdem Bukkit-Helfer für Fahrzeuge/Passagiere bereit. Diese sind nützlich für gescriptete Reittiere, temporäre Reiteffekte und um zu prüfen, ob eine Entität bereits an eine andere Entität gekoppelt ist.
| Methode | Gibt zurück | Hinweise |
|---|---|---|
entity:is_inside_vehicle() | boolean | True, wenn die Entität auf einer anderen Entität reitet. |
entity:has_vehicle() | boolean | True, wenn die Entität derzeit ein Fahrzeug hat. |
entity:get_vehicle() | Entitäts-Wrapper oder nil | Gibt den aktuellen Fahrzeug-Wrapper zurück. |
entity:set_vehicle(vehicle) | boolean | Lässt diese Entität auf vehicle reiten. |
entity:leave_vehicle() | boolean | Lässt diese Entität ihr aktuelles Fahrzeug verlassen. |
entity:has_passengers() | boolean | True, wenn diese Entität Passagiere hat. |
entity:get_passenger_count() | number | Anzahl der Passagiere. |
entity:get_passengers() | Tabelle | Array von Passagier-Wrappern. |
entity:add_passenger(passenger) | boolean | Fügt dieser Entität einen Passagier hinzu. |
entity:remove_passenger(passenger) | boolean | Entfernt einen Passagier von dieser Entität. |
entity:eject_passengers() | boolean | Wirft alle Passagiere ab. |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if context.player:has_vehicle() then
context.player:leave_vehicle()
end
end
}
entity:push_relative_to(source[, strength][, xOffset][, yOffset][, zOffset])
Stößt die Entität von einem Quellstandort oder Entitäts-Wrapper weg.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
source | location oder Wrapper | Ursprung des Stoßes | |
strength | number | 1.0 | Stärkemultiplikator des Stoßes |
xOffset | number | 0 | Zusätzlicher X-Versatz |
yOffset | number | 0 | Zusätzlicher Y-Versatz |
zOffset | number | 0 | Zusätzlicher Z-Versatz |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("knockback", 60) then return end
context.player:push_relative_to(context.boss:get_location(), 2.0, 0, 0.5, 0)
context.player:send_message("&cThe boss knocks you back!")
end
}
entity:set_custom_name(name) / entity:reset_custom_name()
Setzt oder setzt den benutzerdefinierten Anzeigenamen der Entität zurück. Unterstützt Farbcodes.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("mark", 200) then return end
local player = context.player
player:set_custom_name("&c&lMarked Target")
player:send_message("&cYou have been marked!")
-- Reset after 5 seconds
context.scheduler:run_after(100, function()
if player:is_alive() then
player:reset_custom_name()
end
end)
end
}
entity:place_temporary_block(material[, duration][, requireAir])
Platziert einen temporären Block am aktuellen Standort der Entität.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
material | string | Name des Blockmaterials | |
duration | number | 0 | Ticks bis zur Entfernung |
requireAir | boolean | false | Nur platzieren, wenn der Block derzeit Luft ist |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("ice_trap", 200) then return end
context.player:place_temporary_block("ICE", 60, true)
context.player:send_message("&bIce forms at your feet!")
end
}
entity:get_height()
Gibt die Höhe der Entität in Blöcken zurück.
entity:is_on_ground()
Gibt true zurück, wenn die Entität derzeit auf festem Boden steht.
entity:is_frozen()
Gibt true zurück, wenn die Entität (sofern sie als Custom Boss verfolgt wird) das Frozen-Flag gesetzt hat.
entity:set_awareness_enabled(aware[, duration])
Schaltet die Wahrnehmung des Mobs um. Wirkt sich nur auf Mob-Entitäten aus. Wird optional nach einer Dauer zurückgesetzt.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
aware | boolean | true, um die Wahrnehmung zu aktivieren | |
duration | number | nil | Automatisches Zurücksetzen nach so vielen Ticks |
entity:is_healing() / entity:set_healing(enabled)
Prüft oder schaltet den Heilungszustand an einer Elite-Entität um.
entity:overlaps_box_at_location(center[, halfX][, halfY][, halfZ])
Gibt true zurück, wenn sich die Bounding Box der Entität mit einer achsenparallelen Box am angegebenen Standort überschneidet.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
center | location-Tabelle | Mittelpunkt der Testbox | |
halfX | number | 0.5 | Halbe Breite auf der X-Achse |
halfY | number | wie halfX | Halbe Höhe auf der Y-Achse |
halfZ | number | wie halfX | Halbe Breite auf der Z-Achse |
entity:remove_elite()
Entfernt die Elite-Entität aus dem EliteMobs-Tracking. Ist die Entität ein Elite, despawnt dies sie ordnungsgemäß über EliteMobs.
entity:set_custom_name_visible(visible)
Legt fest, ob der benutzerdefinierte Name der Entität immer sichtbar ist oder nur, wenn man sie ansieht.
| Parameter | Typ | Hinweise |
|---|---|---|
visible | boolean | true für immer sichtbar |
entity:set_equipment(slot, material[, options])
Setzt die Ausrüstung an der Entität.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
slot | string | Ausrüstungs-Slot: "HEAD", "CHEST", "LEGS", "FEET", "HAND", "OFF_HAND" | |
material | string | Materialname (z. B. "DIAMOND_SWORD", "IRON_HELMET") | |
options | Tabelle | {} | Optionale Einstellungen (siehe unten) |
Options-Tabelle:
| Key | Typ | Default | Hinweise |
|---|---|---|---|
enchantments | Array von Tabellen | nil | Jeder Eintrag: { type = "SHARPNESS", level = 2 } |
unbreakable | boolean | false | Ob das Item unzerstörbar ist |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Give the boss a glowing diamond sword
context.boss:set_equipment("HAND", "DIAMOND_SWORD", {
unbreakable = true,
enchantments = {
{ type = "SHARPNESS", level = 5 }
}
})
end
}
entity:is_ai_enabled()
Eine Methode, die true zurückgibt, wenn die Entität derzeit die KI aktiviert hat.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.boss:is_ai_enabled() then
context.log:info("Boss AI is active")
else
context.log:info("Boss AI is disabled (stunned?)")
end
end
}
Referenz-Wrapper für nicht-lebende Entitäten
Wenn eine gespawnte Entität keine LivingEntity ist – zum Beispiel ein fallender Block, ein Projektil oder ein Feuerball –, erhalten Sie einen leichteren Referenz-Wrapper. Diese werden von Methoden wie context.world:spawn_falling_block_at_location() oder context.boss:summon_projectile() zurückgegeben.
Felder: name, uuid, entity_type, is_player, is_elite, current_location
Methoden:
| Methode | Hinweise |
|---|---|
is_valid() | Live-Gültigkeitsprüfung |
get_location() | Aktueller Live-Standort |
get_velocity() | Aktueller Geschwindigkeitsvektor |
is_on_ground() | Ob auf dem Boden |
teleport_to_location(location) | Teleportiert die Entität |
set_velocity_vector(vector) | Setzt die Geschwindigkeit |
set_direction_vector(vector) | Setzt die Richtung (nur Fireball) |
set_yield(value) | Setzt die Explosionsstärke (nur Fireball) |
set_gravity(enabled) | Schaltet die Schwerkraft um |
detonate() | Zündet Firework-Entitäten |
remove() | Entfernt die Entität aus der Welt |
unregister([reason]) | Meldet die Entität vom Entity-Tracker ab |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("fireball", 100) then return end
local fb = context.boss:summon_projectile("FIREBALL",
context.boss:get_eye_location(),
context.player:get_location(),
1.5
)
-- fb is a non-living reference wrapper; remove it after 5 seconds if still alive
context.scheduler:run_after(100, function()
if fb:is_valid() then
fb:remove()
end
end)
end
}
context.player
Verfügbar in Hooks, an denen ein Spieler direkt beteiligt ist (on_boss_damaged_by_player, on_player_damaged_by_boss usw.). Player-Wrapper enthalten alle oben aufgeführten gemeinsamen Entitätsfelder und -methoden sowie die folgenden Extras.
context.player ist nil in Hooks, die keinen zugeordneten Spieler haben, etwa on_spawn, geplanten Callbacks und Timer-Hooks. Prüfen Sie vor der Verwendung immer auf nil.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.player:send_message("&cHello!")
end
}
Nur Spieler betreffende Felder
| Feld | Typ | Hinweise |
|---|---|---|
game_mode | string | Name des aktuellen Spielmodus (z. B. "SURVIVAL") |
Nur Spieler betreffende Methoden
| Methode | Hinweise |
|---|---|
send_message(message) | Chat-Nachricht mit EliteMobs-Farbformatierung |
show_action_bar(message) | Action-Bar-Text |
show_title(title[, subtitle][, fadeIn][, stay][, fadeOut]) | Titelbildschirm-Overlay |
show_boss_bar(title[, color][, style][, duration]) | Temporäre Boss-Leiste |
run_command(command) | Führt einen Befehl als Spieler aus (ohne führenden /) |
Beispiel
return {
api_version = 1,
on_player_damaged_by_boss = function(context)
if context.player == nil then return end
local hp_pct = context.player:get_health() / context.player:get_maximum_health()
if hp_pct < 0.3 then
context.player:show_title("&4LOW HEALTH", "&7Find cover!", 5, 30, 10)
context.player:show_boss_bar("&cBoss Enrage Incoming", "RED", "SEGMENTED_6", 80)
end
end
}
context.boss
Der Boss-Wrapper für den Elite-Mob, dem diese Lua-Power gehört. In jedem Hook immer verfügbar.
Der Boss-Wrapper erbt alle oben aufgeführten gemeinsamen Entitätsmethoden (z. B. push_relative_to, apply_push_vector, set_gravity, set_scale, set_invulnerable, spawn_particle_at_self, overlaps_box_at_location usw.). Die in diesem Abschnitt dokumentierten Methoden sind entweder boss-spezifisch oder verhalten sich über die EliteEntity-Schicht anders.
Boss-Felder
| Feld | Typ | Hinweise |
|---|---|---|
boss.name | string | Anzeigename |
boss.uuid | string | UUID des Boss-Elites |
boss.entity_type | string | Bukkit-EntityType-Name |
boss.is_monster | boolean | true, wenn die zugrunde liegende Entität ein Monster ist |
boss.level | number | Elite-Level |
boss.health | number | Aktuelle Gesundheit (Snapshot) |
boss.maximum_health | number | Maximale Gesundheit (Snapshot) |
boss.damager_count | number | Anzahl der Verursacher (Snapshot) |
boss.is_in_combat | boolean | Kampfzustand |
boss.exists | boolean | Ob der Elite noch existiert |
boss.current_location | location-Tabelle | Position bei der Wrapper-Erstellung (Snapshot) |
Beispiel
return {
api_version = 1,
on_spawn = function(context)
context.log:info(context.boss.name .. " level " .. context.boss.level)
end
}
Boss-Methoden
boss:is_alive()
Gibt true zurück, wenn die Boss-Entität gültig und nicht tot ist und der Elite noch existiert. Verwenden Sie dies anstelle des Feldes exists für Live-Prüfungen.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.boss:is_alive() then return end
context.boss:send_message("&cI still live!")
end
}
boss:get_location()
Gibt den aktuellen Live-Standort des Bosses als location-Tabelle zurück.
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local loc = context.boss:get_location()
context.world:spawn_particle_at_location(loc, "FLAME")
end
}
boss:get_eye_location()
Gibt den Standort des Bosses auf Augenhöhe zurück.
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local eye = context.boss:get_eye_location()
context.world:spawn_particle_at_location(eye, "SMOKE")
end
}
boss:set_ai_enabled(enabled[, duration])
Schaltet die KI des Bosses um. Wird optional nach einer Dauer zurückgesetzt.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
enabled | boolean | true, um die KI zu aktivieren | |
duration | number | nil | Automatisches Zurücksetzen nach so vielen Ticks |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("stun", 200) then return end
context.boss:set_ai_enabled(false, 60)
context.boss:send_message("&7The boss is stunned for 3 seconds!")
end
}
boss:teleport_to_location(location)
Teleportiert den Boss zu einem Standort.
| Parameter | Typ | Hinweise |
|---|---|---|
location | location-Tabelle | Ziel |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("retreat", 300) then return end
local spawn = context.entities:get_boss_spawn_location()
context.boss:teleport_to_location(spawn)
context.boss:send_message("&7The boss retreats to its lair!")
end
}
boss:set_velocity_vector(vector)
Setzt die Geschwindigkeit des Bosses sofort.
| Parameter | Typ | Hinweise |
|---|---|---|
vector | Vektor-Tabelle | { x, y, z } oder { x = 0, y = 1, z = 0 } |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Boss leaps into the air at combat start
context.boss:set_velocity_vector({ x = 0, y = 2.0, z = 0 })
context.boss:send_message("&cThe boss leaps!")
end
}
boss:restore_health(amount)
Heilt den Boss bis zu seiner maximalen Gesundheit.
| Parameter | Typ | Hinweise |
|---|---|---|
amount | number | Menge der Heilung |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("heal", 200) then return end
context.boss:restore_health(20)
context.boss:send_message("&aThe boss regenerates!")
context.boss:spawn_particle_at_self("HEART")
end
}
boss:play_sound_at_self(sound[, volume][, pitch])
Spielt einen Sound am Standort des Bosses ab.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
sound | string | Minecraft-Sound-Key (zum Beispiel "entity.wither.spawn") | |
volume | number | 1.0 | Lautstärke |
pitch | number | 1.0 | Tonhöhe |
Beispiel
return {
api_version = 1,
on_spawn = function(context)
context.boss:play_sound_at_self("entity.wither.spawn", 1.0, 0.8)
end
}
boss:spawn_particle_at_self(particleOrSpec[, count])
Erzeugt Partikel am Standort des Bosses.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
particleOrSpec | string oder Tabelle | Partikelname oder Spezifikations-Tabelle | |
count | number | 1 | Anzahl der Partikel |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:spawn_particle_at_self("SMOKE", 20)
context.boss:send_message("&8Smoke billows from the boss!")
end
}
boss:play_model_animation(name)
Spielt, falls verfügbar, eine Custom-Model-Animation am Boss ab.
| Parameter | Typ | Hinweise |
|---|---|---|
name | string | Name der Animation |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:play_model_animation("slam")
end
}
boss:has_mount() / boss:get_mount()
Prüft oder gibt die Entität zurück, auf der dieser Boss derzeit reitet. boss:get_mount() gibt nil zurück, wenn der Boss kein Reittier hat. Wird ein Reittier zurückgegeben, hat dessen Wrapper is_mount = true.
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local mount = context.boss:get_mount()
if mount ~= nil then
context.log:info("Boss is mounted on " .. mount.entity_type)
end
end
}
boss:set_mount(entity) / boss:clear_mount() / boss:dismount()
Setzt den Boss auf ein Reittier oder steigt ab. boss:set_mount(entity) lässt den Boss auf dem übergebenen Entitäts-Wrapper reiten und gibt true zurück, wenn Bukkit die Passagieränderung akzeptiert hat. boss:clear_mount() und boss:dismount() lassen den Boss beide sein aktuelles Fahrzeug verlassen.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if not context.cooldowns:check_local("mount_check", 100) then return end
if context.boss:has_mount() then
context.boss:dismount()
end
end
}
boss:face_direction_or_location(vectorOrLocation)
Lässt den Boss in eine Richtung oder zu einem Standort blicken.
| Parameter | Typ | Hinweise |
|---|---|---|
vectorOrLocation | Vektor- oder location-Tabelle | Richtung, in die geblickt werden soll |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
context.boss:face_direction_or_location(context.player:get_location())
end
}
boss:navigate_to_location(location[, speed][, follow][, timeout])
Verwendet Pathfinding, um den Boss zu einem Standort laufen zu lassen.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
location | location-Tabelle | Ziel | |
speed | number | 1.0 | Bewegungsgeschwindigkeitsmultiplikator |
follow | boolean | false | Dem Ziel kontinuierlich folgen |
timeout | number | nil | Navigation nach so vielen Ticks abbrechen |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("charge", 200) then return end
context.boss:navigate_to_location(context.player:get_location(), 1.5)
context.boss:send_message("&cThe boss charges at you!")
end
}
boss:add_tag(tag[, duration]) / boss:remove_tag(tag) / boss:has_tag(tag)
Verwaltet Tags am Boss.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
local pct = context.boss:get_health() / context.boss:get_maximum_health()
if pct < 0.5 and not context.boss:has_tag("phase2") then
context.boss:add_tag("phase2")
context.boss:send_message("&4Entering Phase 2!")
end
end
}
boss:send_message(message[, range])
Sendet eine Chat-Nachricht an alle Spieler in der Nähe.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
message | string | Nachrichtentext mit Farbcodes | |
range | number | 20 | Radius in Blöcken |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:send_message("&4You dare challenge me?!")
end
}
boss:summon_projectile(entityType, origin, destination[, speed][, options])
Startet eine projektilartige Entität vom Boss aus.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
entityType | string | Entitätstyp (z. B. "FIREBALL", "ARROW") | |
origin | location-Tabelle | Startposition | |
destination | location-Tabelle | Zielposition | |
speed | number | 1.0 | Projektilgeschwindigkeit |
options | Tabelle | {} | Siehe Optionen unten |
Options-Tabelle:
| Key | Typ | Hinweise |
|---|---|---|
duration | number | Automatisches Entfernen nach Ticks |
max_ticks | number | Maximale Ticks, die auf das Aufschlagen überwacht werden |
custom_damage | number | Schaden beim Aufprall |
detonation_power | string | Explosionsstärke beim Aufprall |
yield | number | Explosionsstärke (Fireball) |
persistent | boolean | Ob das Projektil bestehen bleibt (Standard true) |
effect | string | EntityEffect-Name, der beim Spawn abgespielt wird |
incendiary | boolean | Ob die Explosion Brände auslöst |
gravity | boolean | Ob das Projektil Schwerkraft hat |
glowing | boolean | Leuchteffekt |
invulnerable | boolean | Ob das Projektil unverwundbar ist |
track | boolean | Ob dem Ziel gefolgt wird |
spawn_at_origin | boolean | Am Ursprung spawnen statt mit Versatz |
direction_only | boolean | Nur Richtung verwenden, Ziel ignorieren |
on_land | function | Callback (landing_location, spawned_entity) |
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
if context.player == nil then return end
if not context.cooldowns:check_local("fireball", 100) then return end
context.boss:summon_projectile(
"FIREBALL",
context.boss:get_eye_location(),
context.player:get_location(),
1.5,
{
custom_damage = 10,
on_land = function(loc, entity)
context.world:spawn_particle_at_location(loc, "EXPLOSION")
end
}
)
end
}
boss:summon_reinforcement(filename[, zoneOrLocation][, level])
Beschwört einen Reinforcement-Boss aus einer Konfigurationsdatei.
| Parameter | Typ | Hinweise |
|---|---|---|
filename | string | Dateiname der Boss-Konfiguration |
zoneOrLocation | location-Tabelle oder Zone | Optionaler Spawn-Standort oder Zonendefinition. Standardmäßig der Boss-Standort. |
level | number | Optionales Reinforcement-Level. Standardmäßig 0, wodurch der Beschwörungs-Helfer das Level normal erbt/auflöst. |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
context.boss:summon_reinforcement("my_minion.yml", context.boss:get_location(), 0)
context.boss:send_message("&cMinions, come to my aid!")
end
}
boss:despawn()
Entfernt den Boss aus der Welt.
Beispiel
return {
api_version = 1,
on_boss_damaged_by_player = function(context)
local pct = context.boss:get_health() / context.boss:get_maximum_health()
if pct < 0.1 then
context.boss:send_message("&7The boss vanishes into thin air!")
context.boss:despawn()
end
end
}
boss:get_nearby_players(range)
Gibt ein Array von Player-Wrappern innerhalb der Reichweite des Bosses zurück.
| Parameter | Typ | Hinweise |
|---|---|---|
range | number | Radius in Blöcken |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local players = context.boss:get_nearby_players(30)
for _, p in ipairs(players) do
p:show_action_bar("&cThe boss sees you!")
end
end
}
boss:get_damager_count()
Gibt die Live-Anzahl der Spieler zurück, die diesem Boss Schaden zugefügt haben. Anders als das Feld damager_count führt dies eine Live-Prüfung durch.
boss:get_target_player()
Gibt das aktuelle Mob-Ziel des Bosses als Player-Wrapper zurück oder nil, wenn das Ziel kein Spieler ist oder nicht gesetzt ist.
Zonen- & Partikelmethoden
Diese Methoden kombinieren Zonen mit Partikeleffekten. Sie benötigen eine Zonen-Tabelle als Eingabe.
boss:get_nearby_players_in_zone(zone)
Gibt ein Array von Player-Wrappern für alle Spieler zurück, die sich derzeit innerhalb der angegebenen Zone befinden.
| Parameter | Typ | Hinweise |
|---|---|---|
zone | Zonen-Tabelle | Eine Definition einer Zonenform |
boss:spawn_particles_in_zone(zone, particle, ..., coverage?)
Füllt das Innere einer Zone mit Partikeln.
| Parameter | Typ | Hinweise |
|---|---|---|
zone | Zonen-Tabelle | Zu füllende Zonenform |
particle | string | Name des Partikeltyps |
... | Zusätzliche Partikelparameter | |
coverage | number (optional) | Faktor für die Partikeldichteabdeckung |
boss:spawn_particles_in_zone_border(zone, particle, ..., coverage?)
Umrandet den Rand einer Zone mit Partikeln.
| Parameter | Typ | Hinweise |
|---|---|---|
zone | Zonen-Tabelle | Zu umrandende Zonenform |
particle | string | Name des Partikeltyps |
... | Zusätzliche Partikelparameter | |
coverage | number (optional) | Faktor für die Partikeldichteabdeckung |
boss:get_particles_from_self_toward_zone(zone, particle, speed?)
Erzeugt gerichtete Partikel, die vom Boss zu einer Zone wandern.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
zone | Zonen-Tabelle | Zielzone | |
particle | string | Name des Partikeltyps | |
speed | number | nil | Wandergeschwindigkeit der Partikel |
boss:get_particles_toward_self(zone, particle, speed?)
Erzeugt gerichtete Partikel, die von einer Zone zum Boss wandern.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
zone | Zonen-Tabelle | Quellzone | |
particle | string | Name des Partikeltyps | |
speed | number | nil | Wandergeschwindigkeit der Partikel |
boss:spawn_particles_with_vector(particles)
Erzeugt ein Array gerichteter Partikel, jeweils mit eigener Position und eigenem Geschwindigkeitsvektor.
| Parameter | Typ | Hinweise |
|---|---|---|
particles | Array von Tabellen | Jeder Eintrag definiert ein Partikel mit Position und Richtung |
Ender-Dragon-Methoden
Diese Methoden gelten nur, wenn die Boss-Entität ein Ender Dragon ist.
boss:get_ender_dragon_phase()
Gibt den aktuellen EnderDragon.Phase-Namen als String zurück oder nil, wenn der Boss kein Ender Dragon ist.
boss:set_ender_dragon_phase(phase)
Setzt die Phase des Ender Dragons.
| Parameter | Typ | Hinweise |
|---|---|---|
phase | string | EnderDragon.Phase-Name (z. B. "CIRCLING", "CHARGE_PLAYER") |
Methoden zur Unterstützung spezieller Kräfte
Diese Methoden unterstützen integrierte EliteMobs-Kraftmechaniken aus Lua-Scripts.
boss:start_tracking_fireball_system(speed?)
Startet das Tracking-Fireball-KI-System am Boss. Der Boss startet regelmäßig Feuerbälle, die seinem Ziel folgen.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
speed | number | 0.5 | Feuerball-Geschwindigkeit |
boss:handle_spirit_walk_damage(cause)
Behandelt das Spirit-Walk-Verhalten für die angegebene Schadensursache. Spirit Walk macht den Boss immun gegen bestimmte Schadensarten und teleportiert ihn hinter den Angreifer.
| Parameter | Typ | Hinweise |
|---|---|---|
cause | string | Bukkit-DamageCause-Name (z. B. "ENTITY_ATTACK", "PROJECTILE") |
boss:shield_wall_is_active()
Gibt true zurück, wenn der Boss derzeit eine aktive Schildwand hat.
boss:initialize_shield_wall(charges?)
Aktiviert eine Schildwand am Boss, die eingehenden Schaden absorbieren kann.
| Parameter | Typ | Default | Hinweise |
|---|---|---|---|
charges | number | 1 | Anzahl der Treffer, die das Schild absorbieren kann |
boss:shield_wall_absorb_damage(player, damage)
Versucht, Schaden mit der Schildwand zu absorbieren. Gibt true zurück, wenn der Schaden absorbiert wurde, false, wenn das Schild inaktiv oder aufgebraucht ist.
| Parameter | Typ | Hinweise |
|---|---|---|
player | Player-Wrapper | Der angreifende Spieler |
damage | number | Zu absorbierende Schadensmenge |
boss:deactivate_shield_wall()
Deaktiviert die Schildwand des Bosses und entfernt alle verbleibenden Ladungen.
boss:start_zombie_necronomicon(target, file)
Startet die Zombie-Necronomicon-Kraft auf einem Ziel und spawnt untote Verstärkungen aus einer Konfigurationsdatei.
| Parameter | Typ | Hinweise |
|---|---|---|
target | Entitäts-Wrapper | Zielentität für das Necronomicon |
file | string | Dateiname der Boss-Konfiguration für die beschworenen Untoten |
context.players
Helfer für Spielerabfragen, die sich am Boss orientieren. Verwenden Sie diese, um Spieler zu finden, ohne einen bestimmten Spieler aus dem Event zu benötigen.
| Methode | Gibt zurück | Hinweise |
|---|---|---|
players:current_target() | Player-Wrapper oder nil | Der Event-Spieler oder das Mob-Ziel des Bosses, sofern es ein Spieler ist |
players:nearby_players(radius) | Array von Player-Wrappern | Alle Spieler innerhalb des Radius um den Boss |
players:all_players_in_world() | Array von Player-Wrappern | Alle Spieler in der Welt des Bosses |
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
local nearby = context.players:nearby_players(20)
for _, player in ipairs(nearby) do
player:send_message("&cThe boss is enraged!")
player:apply_potion_effect("GLOWING", 60, 0)
end
end
}
Beispiel
return {
api_version = 1,
on_spawn = function(context)
-- Warn everyone in the world
local everyone = context.players:all_players_in_world()
for _, p in ipairs(everyone) do
p:show_title("&4WARNING", "&7A world boss has spawned!", 10, 60, 20)
end
end
}
context.entities
Allgemeine Helfer für Entitätsabfragen, die sich am Boss orientieren.
| Methode | Gibt zurück | Hinweise |
|---|---|---|
entities:get_nearby_entities(radius[, filter]) | Array von Entitäts-Wrappern | Entitäten in der Nähe rund um den Boss |
entities:get_entities_in_box(center, halfX, halfY, halfZ[, filter]) | Array von Entitäts-Wrappern | Entitäten innerhalb einer achsenparallelen Box |
entities:get_all_entities([filter]) | Array von Entitäts-Wrappern | Alle passenden Entitäten in der Boss-Welt |
entities:get_direct_target_entity() | Entitäts-Wrapper oder nil | Direktes Ziel für das aktuelle Event |
entities:get_boss_spawn_location() | location-Tabelle | Der ursprüngliche Spawn-Standort des Bosses |
Gültige Filter: living (Standard), player / players, elite / elites, mob / mobs, all / entities
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Damage all nearby elites
local elites = context.entities:get_nearby_entities(10, "elites")
for _, elite in ipairs(elites) do
elite:deal_damage(5)
end
end
}
Beispiel
return {
api_version = 1,
on_enter_combat = function(context)
-- Find players in a box area
local center = context.boss:get_location()
local players = context.entities:get_entities_in_box(center, 10, 5, 10, "players")
for _, p in ipairs(players) do
p:send_message("&eYou are in the danger zone!")
end
end
}
