Zum Hauptinhalt springen

Lua-Skripting: Prop- und Item-API

Diese Seite behandelt jede API, die für FreeMinecraftModels-Prop- und Item-Skripte verfügbar ist: context.prop, context.item, context.event, context.player, context.world, context.zones, context.scheduler, context.state und context.log. Wenn du neu im Skripting bist, beginne zuerst mit Erste Schritte.


context.prop

Die Prop-Tabelle liefert Informationen über die Prop-Entität und Methoden zur Steuerung ihrer Animationen. Sie wird für jeden Hook-Aufruf frisch neu erstellt.

Felder

FeldTypHinweise
prop.model_idstringDer Blueprint-Modellname (z. B. "torch_01")
prop.current_locationlocation-TabelleDie Position des Props zu dem Zeitpunkt, als der Context erstellt wurde

Die location-Tabelle hat die Standardfelder: x, y, z, world, yaw, pitch.

Beispiel: Prop-Informationen lesen
return {
api_version = 1,

on_spawn = function(context)
context.log:info("Prop spawned: " .. (context.prop.model_id or "unknown"))
local loc = context.prop.current_location
if loc then
context.log:info("Location: " .. loc.x .. ", " .. loc.y .. ", " .. loc.z)
end
end
}

prop:play_animation(name, blend, loop)

Spielt eine benannte Animation am Prop-Modell ab.

ParameterTypStandardHinweise
namestringerforderlichDer Animationsname, wie in der Modelldatei definiert
blendbooleantrueOb mit der aktuellen Animation überblendet werden soll
loopbooleantrueOb die Animation in Schleife läuft

Gibt true zurück, wenn die Animation gefunden und gestartet wurde, false sonst.

Beispiel
return {
api_version = 1,

on_right_click = function(context)
local success = context.prop:play_animation("open", true, false)
if not success then
context.log:warn("Animation 'open' not found on this model!")
end
end
}

prop:stop_animation()

Stoppt alle derzeit abgespielten Animationen am Prop.

Nimmt keine Parameter entgegen.

Beispiel
return {
api_version = 1,

on_right_click = function(context)
context.prop:stop_animation()
end
}

prop:hurt_visual()

Spielt die visuelle Verletzungsanimation (rotes Blinken) am Prop ab, ohne ihm tatsächlichen Schaden zuzufügen.

Nimmt keine Parameter entgegen.

Beispiel
return {
api_version = 1,

on_left_click = function(context)
-- Rot blinken, wenn geschlagen, aber keinen tatsächlichen Schaden nehmen
if context.event then
context.event.cancel()
end
context.prop:hurt_visual()
end
}

prop:pickup()

Entfernt den Prop aus der Welt und lässt ein Platzierungs-Papier-Item an seinem Standort fallen. Das fallengelassene Item kann auf einen Block rechtsgeklickt werden, um den Prop erneut zu platzieren.

Nimmt keine Parameter entgegen.

Beispiel
return {
api_version = 1,

on_right_click = function(context)
-- Lasse Spieler den Prop durch Rechtsklick aufnehmen
context.prop:pickup()
end
}

prop:mount(player)

Setzt einen Spieler auf den ersten verfügbaren Mount-Point-Sitz am Prop. Das Modell muss Mount-Point-Bones definiert haben.

ParameterTypHinweise
playerentity-TabelleEine Spieler-Entity-Tabelle (z. B. aus context.event.player)
Beispiel
return {
api_version = 1,

on_right_click = function(context)
local player = context.event and context.event.player
if player then
context.prop:mount(player)
end
end
}

prop:dismount(player)

Entfernt einen Spieler von seinem Mount-Point-Sitz auf dem Prop.

ParameterTypHinweise
playerentity-TabelleEine Spieler-Entity-Tabelle
Beispiel
return {
api_version = 1,

on_right_click = function(context)
local player = context.event and context.event.player
if player then
-- Mount/Dismount umschalten
local passengers = context.prop:get_passengers()
for i = 1, #passengers do
if passengers[i].uuid == player.uuid then
context.prop:dismount(player)
return
end
end
context.prop:mount(player)
end
end
}

prop:get_passengers()

Gibt ein Lua-Array von Entity-Tabellen für alle aktuellen Passagiere auf dem Prop zurück.

Nimmt keine Parameter entgegen.

Beispiel
return {
api_version = 1,

on_game_tick = function(context)
local passengers = context.prop:get_passengers()
if #passengers > 0 then
context.log:info("Prop has " .. #passengers .. " passenger(s)")
end
end
}

prop:has_mount_points()

Gibt zurück, ob dieser Prop Mount-Point-Bones in seinem Modell definiert hat.

Nimmt keine Parameter entgegen. Gibt true oder false zurück.

Beispiel
return {
api_version = 1,

on_right_click = function(context)
local player = context.event and context.event.player
if player and context.prop:has_mount_points() then
context.prop:mount(player)
end
end
}

prop:spawn_elitemobs_boss(filename, x, y, z)

Spawnt einen EliteMobs-Custom-Boss am angegebenen Standort. Erfordert, dass EliteMobs auf dem Server installiert ist.

ParameterTypHinweise
filenamestringDer Dateiname des Custom-Bosses (z. B. "my_boss.yml")
xnumberX-Koordinate
ynumberY-Koordinate
znumberZ-Koordinate

Gibt eine Living-Entity-Tabelle für den gespawnten Boss zurück, oder nil, wenn EliteMobs nicht installiert ist oder die Boss-Datei nicht existiert.

Beispiel
return {
api_version = 1,

on_right_click = function(context)
local loc = context.prop.current_location
if loc then
local boss = context.prop:spawn_elitemobs_boss("dungeon_guardian.yml", loc.x, loc.y + 1, loc.z)
if boss then
context.log:info("Spawned boss: " .. (boss.name or "unknown"))
else
context.log:warn("Could not spawn boss -- is EliteMobs installed?")
end
end
end
}

prop:open_inventory(player, title, rows)

Öffnet eine persistente Truhen-Inventar-GUI für den Spieler. Inhalte werden im PersistentDataContainer des Props gespeichert, wenn das Inventar geschlossen wird, und beim erneuten Öffnen wiederhergestellt.

ParameterTypStandardHinweise
playerentity-TabelleerforderlichDer Spieler, dem das Inventar gezeigt werden soll
titlestringerforderlichDer Inventar-Titel (unterstützt &-Farbcodes)
rowsint3Anzahl der Reihen (1-6, wobei 6 = 54 Slots = Doppeltruhe)

Gibt true zurück, wenn das Inventar geöffnet wurde, sonst false.


prop:is_viewing_inventory(player)

Gibt zurück, ob der angegebene Spieler derzeit das Inventar dieses Props geöffnet hat.

ParameterTypHinweise
playerentity-TabelleDer zu prüfende Spieler

Gibt true oder false zurück.

Beispiel: Schließanimation, wenn Inventar geschlossen wird
context.state["task_" .. player.uuid] = context.scheduler:run_repeating(5, 5, function(tick_context)
if not tick_context.prop:is_viewing_inventory(player) then
tick_context.prop:play_animation("close", true, false)
tick_context.scheduler:cancel(tick_context.state["task_" .. player.uuid])
end
end)

prop:place_book(player)

Nimmt das beschriebene oder beschreibbare Buch aus der Haupthand des Spielers und speichert es am Prop.

ParameterTypHinweise
playerentity-TabelleDer Spieler, der das Buch hält

Gibt true bei Erfolg zurück.


prop:read_book(player)

Öffnet das gespeicherte Buch zum Lesen für den Spieler.

ParameterTypHinweise
playerentity-TabelleDer Spieler, dem das Buch gezeigt werden soll

Gibt true zurück, wenn ein Buch geöffnet wurde.


prop:take_book(player)

Gibt das gespeicherte Buch in das Inventar des Spielers zurück und entfernt es vom Prop.

ParameterTypHinweise
playerentity-TabelleDer Spieler, dem das Buch gegeben werden soll

Gibt true bei Erfolg zurück.


prop:has_book()

Gibt zurück, ob ein Buch an diesem Prop gespeichert ist. Nimmt keine Parameter entgegen.


prop:drop_inventory()

Lässt alle gespeicherten Inventarinhalte am Standort des Props als Item-Entitäten fallen und löscht dann die gespeicherten Daten. Schließt automatisch das Inventar für alle Spieler, die es derzeit ansehen.

Nimmt keine Parameter entgegen. Gibt true bei Erfolg zurück.


prop:drop_book()

Lässt das gespeicherte Buch am Standort des Props als Item-Entität fallen und löscht die gespeicherten Buchdaten.

Nimmt keine Parameter entgegen. Gibt true bei Erfolg zurück.


prop:set_persistent_data(key, value)

Speichert einen String-Wert im PersistentDataContainer des Armor-Stands des Props. Diese Daten überleben Server-Neustarts und Chunk-Entladungen.

ParameterTypHinweise
keystringEin eindeutiger Schlüsselname (intern unter fmm_lua_<key> gespeichert)
valuestringDer zu speichernde Wert. Verwende tostring() für Zahlen und Booleans.

Gibt true bei Erfolg zurück, false wenn der Prop keinen unterstützenden Armor-Stand hat.


prop:get_persistent_data(key)

Ruft einen zuvor mit set_persistent_data gespeicherten String-Wert ab. Gibt nil zurück, wenn der Schlüssel nicht gesetzt wurde.

ParameterTypHinweise
keystringDer in set_persistent_data verwendete Schlüsselname
Beispiel: Persistenter Umschaltzustand
return {
api_version = 1,

on_spawn = function(context)
local saved = context.prop:get_persistent_data("active")
context.state.active = saved == "true"
end,

on_right_click = function(context)
context.state.active = not context.state.active
context.prop:set_persistent_data("active", tostring(context.state.active))
end
}

context.item

Die Item-Tabelle ist nur in Item-Skripten verfügbar (nicht in Prop-Skripten). Sie liefert Informationen über das benutzerdefinierte Item und Methoden zu seiner Manipulation. Diese Tabelle wird für jeden Hook-Aufruf frisch neu erstellt.

Felder

FeldTypHinweise
item.idstringDie Item-Typ-ID (die fmm_item_id aus der YML-Konfiguration)

item:material()

Gibt den Materialnamen des Items als String zurück (z. B. "DIAMOND_SWORD", "STICK").


item:get_amount() / item:set_amount(n)

Holt oder setzt die Stack-Größe des Items.

ParameterTypHinweise
nintDie neue Stack-Menge

item:consume(n)

Verringert die Stack-Menge des Items um n (Standard 1). Wenn die resultierende Menge 0 oder weniger ist, wird das Item aus dem Inventar des Spielers entfernt.

ParameterTypStandardHinweise
nint1Zu verbrauchende Menge

item:get_uses() / item:set_uses(n)

Holt oder setzt einen benutzerdefinierten Verwendungszähler, der im PersistentDataContainer des Items gespeichert ist. Dies ist unabhängig von der Vanilla-Haltbarkeit und kann verwendet werden, um benutzerdefinierte Haltbarkeits- oder Ladungssysteme zu implementieren.

ParameterTypHinweise
nintDie neue Verwendungszahl

item:get_name() / item:set_name(s)

Holt oder setzt den Anzeigenamen des Items. Unterstützt Farbcodes mit &.

ParameterTypHinweise
sstringDer neue Anzeigename (z. B. "&b&lFrost Sword")

item:get_lore() / item:set_lore(table)

Holt oder setzt die Lore des Items. get_lore() gibt eine Tabelle von Strings zurück (eine pro Zeile). set_lore() nimmt eine Tabelle von Strings.

ParameterTypHinweise
tabletableArray von Strings, eines pro Lore-Zeile
Beispiel: Item-Skript, das Verwendungen verfolgt
return {
api_version = 1,

on_right_click = function(context)
local uses = context.item:get_uses()
if uses <= 0 then
context.player:send_message("&cThis item is out of charges!")
return
end
context.item:set_uses(uses - 1)
context.player:send_message("&aUsed! Charges remaining: " .. (uses - 1))
end
}

item:get_durability()

Gibt eine Tabelle mit den Feldern current und max zurück, die die Vanilla-Haltbarkeit des Items repräsentieren, oder nil, wenn das Item keine Haltbarkeitsleiste hat.

Beispiel
local dur = context.item:get_durability()
if dur then
context.player:send_message("Durability: " .. dur.current .. "/" .. dur.max)
end

item:get_durability_percentage()

Gibt die verbleibende Haltbarkeit als Bruchteil von 0.0 bis 1.0 zurück, oder nil, wenn das Item keine Haltbarkeitsleiste hat.


item:use_durability(amount, can_break)

Reduziert die Vanilla-Haltbarkeit des Items um einen festen Betrag.

ParameterTypStandardHinweise
amountinterforderlichWie viele Haltbarkeitspunkte verbraucht werden sollen
can_breakbooleanfalseWenn true, wird das Item zerstört, wenn die Haltbarkeit endet. Wenn false, stoppt die Haltbarkeit bei 1.

item:use_durability_percentage(fraction, can_break)

Reduziert die Vanilla-Haltbarkeit des Items um einen Prozentsatz seines Maximums.

ParameterTypStandardHinweise
fractionnumbererforderlichAnteil der maximalen Haltbarkeit, der verbraucht werden soll (z. B. 0.1 = 10 %)
can_breakbooleanfalseWenn true, wird das Item zerstört, wenn die Haltbarkeit endet. Wenn false, stoppt die Haltbarkeit bei 1.

context.event

Event-Daten für den aktuellen Hook. Verfügbar in Klick-, Kampf- und Interaktions-Hooks sowohl für Prop- als auch Item-Skripte. Gibt nil zurück in Hooks, die kein zugehöriges Event haben (on_spawn, on_game_tick, on_destroy, on_zone_enter, on_zone_leave, on_equip).

Felder und Methoden

Feld oder MethodeTypHinweise
event.playerSpieler-Entity-TabelleDer Spieler, der das Event ausgelöst hat. Verfügbar in on_left_click, on_right_click und on_projectile_hit (der Schütze, falls es ein Spieler war). Siehe Player-Entity-Methoden für alle Felder und Methoden.
event.is_cancelledbooleanOb das Event derzeit abgebrochen ist
event.cancel()functionBricht das Event ab (z. B. verhindert Schaden oder Interaktion)
event.uncancel()functionHebt ein zuvor abgebrochenes Event wieder auf
Info

Nicht alle Events sind abbrechbar. Wenn das zugrunde liegende Bukkit-Event Cancellable nicht implementiert, sind event.cancel() und event.uncancel() nicht vorhanden und event.is_cancelled ist immer false.

Beispiel: Einen Prop unverwundbar machen

Beispiel
return {
api_version = 1,

on_left_click = function(context)
if context.event then
context.event.cancel()
end
end
}

Beispiel: Abbruch-Zustand prüfen

Beispiel
return {
api_version = 1,

on_left_click = function(context)
if context.event and not context.event.is_cancelled then
context.event.cancel()
context.log:info("Damage cancelled!")
end
end
}
Vorsicht

Innerhalb geplanter Callbacks (scheduler:run_later, scheduler:run_repeating) ist context.event immer nil. Event-Modifikationen können nur während des Event-Hooks selbst stattfinden.


context.world

Die World-API wird über alle Nightbreak-Plugins hinweg geteilt. Siehe context.world für die vollständige Referenz.

Info

FMM-Props verwenden dieselbe MagmaCore-World-Tabelle wie EliteMobs-Bosse. Alle Methoden, die auf der globalen Seite dokumentiert sind (get_block_at, set_block_at, spawn_particle, play_sound, strike_lightning, get_time, set_time, get_nearby_entities, get_nearby_players, spawn_entity, get_highest_block_y, raycast, spawn_firework), sind in FMM verfügbar. Siehe die MagmaCore-World-API für vollständige Details zu world:raycast() (einen Strahl werfen und getroffene Entitäten/Blöcke erkennen) und world:spawn_firework() (Feuerwerkraketen mit benutzerdefinierten Farben und Formen spawnen). EliteMobs erweitert die World-Tabelle um zusätzliche Methoden zum Spawnen von Bossen, Verstärkungen und mehr -- siehe EliteMobs Welt & Umgebung.


Player-Entity-Methoden

Spieler-Entity-Tabellen werden von context.event.player, context.world:get_nearby_players() und Zonen-Callbacks zurückgegeben.

Geteilte API

Die Entity-Tabellen, Lebewesen-Methoden, spielerspezifischen Methoden und Player-UI-Methoden werden über alle Nightbreak-Plugins hinweg geteilt. Siehe die MagmaCore Lua-Skript-Engine für die vollständige Referenz, die Entity-Basis-Felder, Lebewesen-Felder und -Methoden, spielerspezifische Felder und Methoden sowie Player-UI-Methoden abdeckt. Neue Spielermethoden umfassen player:get_target_entity() (Raycast-Zielerfassung), player:get_eye_location(), player:get_look_direction(), player:send_block_change() (gefälschte Blöcke pro Spieler) und player:reset_block() -- siehe Spielerspezifische Methoden für Details.

FMM-spezifische Entity-Felder

Jede Entity-Tabelle, die innerhalb eines FMM-Skripts erstellt wird, erhält diese zusätzlichen Felder automatisch (über FMMs LuaEntityEnricher):

FeldTypHinweise
entity.is_modeledbooleantrue, wenn diese Bukkit-Entität die zugrunde liegende Entität einer ModeledEntity ist
entity.is_propbooleantrue, wenn diese Entität ein Armor-Stand ist, der eine PropEntity stützt
entity.modelTabelle oder nilNur gefüllt, wenn is_modeled = true (siehe unten)

Wenn entity.model vorhanden ist, stellt es Folgendes bereit:

Feld / MethodeHinweise
model.model_idDer Blueprint-Modellname (z. B. "dragon")
model.is_dynamictrue, wenn dies eine DynamicEntity ist (an eine Lebewesen-Entität angeheftet)
model:play_animation(name, blend, loop)Spielt eine benannte Animation ab. Gibt true bei Erfolg zurück
model:stop_animations()Stoppt alle laufenden Animationen
model:remove()Entfernt die modellierte Entität und alle ihre Bones sofort
on_attack_entity = function(context)
local target = context.event.target
if target and target.is_modeled then
target.model:play_animation("hurt", true, false)
end
end

EliteMobs-Entity-Felder

Wenn EliteMobs installiert ist, leitet FMM an EliteMobs' Enricher weiter, sodass dieselben Entity-Tabellen außerdem Folgendes bereitstellen:

FeldTypHinweise
entity.is_elitebooleantrue, wenn die Entität von EliteMobs verfolgt wird
entity.is_custom_bossbooleantrue, wenn es eine Custom-Boss-Konfiguration ist
entity.is_significant_bossbooleantrue für Custom-Bosse mit einem healthMultiplier > 1 (filtert benannte Trash-Mobs heraus)
entity.eliteTabelle oder nilNur gefüllt, wenn is_elite = true. Enthält level, name, health, max_health, health_multiplier, damage_multiplier, is_custom_boss, plus elite:remove()

context.zones

Die Zones-API wird über alle Nightbreak-Plugins hinweg geteilt. Siehe context.zones für die vollständige Referenz.


context.scheduler

Die Scheduler-API wird über alle Nightbreak-Plugins hinweg geteilt. Siehe context.scheduler für die vollständige Referenz.


context.state

Die State-API wird über alle Nightbreak-Plugins hinweg geteilt. Siehe context.state für die vollständige Referenz.


context.log

Die Logging-API wird über alle Nightbreak-Plugins hinweg geteilt. Siehe context.log für die vollständige Referenz.


Laufzeit-Modell

Eine Laufzeit pro Skript-Instanz

Jede Prop-Entität, an die Skripte angehängt sind, erhält ihre eigene unabhängige Lua-Laufzeit-Instanz. Wenn der Prop spawnt, lädt FMM den Lua-Quellcode, wertet ihn in einer frischen Sandbox-Umgebung aus und speichert die zurückgegebene Tabelle. Wenn der Prop entfernt wird, wird die Laufzeit heruntergefahren.

Für Item-Skripte wird eine Laufzeit pro (Spieler, itemId)-Paar erstellt. Wenn ein Spieler ein benutzerdefiniertes Item ausrüstet, erstellt FMM eine Skript-Instanz für diesen Spieler und Item-Typ. Wenn das Item abgelegt wird, wird die Laufzeit heruntergefahren.

Das bedeutet:

  • Lokale Variablen, die auf Dateiebene deklariert sind, sind privat für diese Skript-Instanz.
  • context.state ist vollständig isoliert zwischen Instanzen, selbst wenn sie dieselbe Skript-Datei teilen.

Eigentum geplanter Tasks

Alle Tasks, die durch context.scheduler erstellt werden, gehören der Laufzeit, die sie erstellt hat. Wenn ein Prop entfernt wird:

  1. Die Laufzeit wird heruntergefahren.
  2. Jeder eigene Task -- sowohl einmalige als auch wiederkehrende -- wird automatisch abgebrochen.
  3. Alle Zonenbeobachtungen werden gelöscht.

Cooldown-Geltungsbereich

Die geteilte Skript-Engine stellt context.cooldowns:set_local, :check_local, :set_global und :check_global bereit (siehe die MagmaCore-Cooldowns-Referenz). FMM ordnet diese Speicher wie folgt zu:

Skript-TypLokaler SpeicherbereichGlobaler Speicherbereich
Prop-SkriptPro ScriptInstance (Prop + Skript-Datei)Pro PropEntity (geteilt über jedes an diesen Prop gebundene Skript)
Item-SkriptPro (player, itemId, scriptFile)-Tripel — bleibt über erneutes Ausrüsten erhalten, auch wenn die Skript-Instanz jedes Mal abgebaut wird, wenn das Item einen aktiven Slot verlässtPro Spieler (geteilt über jedes FMM-Item-Skript, das dieser Spieler ausführt)

Da Item-Skripte bei jedem Equip/Unequip-Zyklus abgebaut und neu aufgebaut werden, werden Item-Cooldowns in einer statischen Map nach Spieler-UUID gehalten statt auf der ScriptInstance. Aus diesem Grund gilt ein Item-Cooldown weiterhin, nachdem du das Item aus der Hotbar und wieder hinein tauschst.

Ausführungsbudget

Jede Hook-Aufruf und jeder Callback-Aufruf wird zeitlich gemessen. Wenn ein einzelner Aufruf länger als 50 Millisekunden dauert, wird das Skript mit einer Konsolenwarnung deaktiviert:

[Lua] my_script.lua took 73ms in 'on_game_tick' (limit: 50ms) -- script disabled to prevent lag.

Um innerhalb des Budgets zu bleiben:

  • Vermeide unbegrenzte Schleifen innerhalb von Hooks.
  • Halte on_game_tick-Handler leichtgewichtig -- sie laufen in jedem einzelnen Tick.
  • Verwende context.scheduler:run_repeating(...), um Arbeit über Ticks zu verteilen.

Vollständige Hook-Referenz

Diese Tabelle listet alle Hooks auf, die in Prop- und Item-Skripten verfügbar sind.

Prop-Hooks (8)

HookWird ausgelöst, wenncontext.event
on_spawnProp in die Welt spawntnil
on_game_tickJeder Server-Tick (50 ms)nil
on_destroyProp entfernt wirdnil
on_left_clickSpieler den Prop links anklicktdamage event
on_right_clickSpieler den Prop rechts anklicktinteraction event
on_projectile_hitProjektil den Prop trifftprojectile hit event
on_zone_enterSpieler eine beobachtete Zone betrittnil
on_zone_leaveSpieler eine beobachtete Zone verlässtnil

Item-Hooks (22)

HookKategorieWird ausgelöst, wenncontext.event
on_attack_entityKampfSpieler eine Entität angreiftdamage event
on_kill_entityKampfSpieler eine Entität tötetdeath event
on_take_damageKampfSpieler Schaden nimmtdamage event
on_shield_blockKampfSpieler mit Schild blocktdamage event
on_shoot_bowKampfSpieler mit Bogen schießtbow shoot event
on_projectile_hitKampfProjektil des Spielers trifftprojectile hit event
on_projectile_launchKampfSpieler Projektil startetlaunch event
on_right_clickInteraktionSpieler rechtsklicktinteract event
on_left_clickInteraktionSpieler linksklicktinteract event
on_shift_right_clickInteraktionSpieler shift+rechtsklicktinteract event
on_shift_left_clickInteraktionSpieler shift+linksklicktinteract event
on_interact_entityInteraktionSpieler eine Entität rechtsklicktentity interact event
on_equipAusrüstungItem in aktiven Slot kommtnil
on_unequipAusrüstungItem aktiven Slot verlässtnil
on_swap_handsAusrüstungTauscht Haupt-/Nebenhandswap event
on_dropAusrüstungSpieler Item fallen lässtdrop event
on_break_blockWerkzeugSpieler Block brichtblock break event
on_consumeWerkzeugSpieler Item konsumiertconsume event
on_item_damageWerkzeugItem Haltbarkeitsschaden nimmtitem damage event
on_fishWerkzeugSpieler Angel benutztfish event
on_deathWerkzeugSpieler stirbt, während ausgerüstetdeath event
on_game_tickLebenszyklusJeden Tick, während ausgerüstetnil

Nächste Schritte

  • Beispiele & Muster -- vollständige funktionierende Skripte für Props und Items mit Erläuterungen
  • Fehlerbehebung -- häufige Probleme, Debugging-Tipps und eine QC-Checkliste
  • Erste Schritte -- Dateistruktur, Hooks, erste Skript-Anleitung