NPC- und Boss-Patrouillen
EliteMobs kann konfigurierte NPCs und benutzerdefinierte Bosse mit der nativen Minecraft-Navigation auf erstellten Routen laufen lassen. Dasselbe System stellt Lua-Skripten walk_to, hold und teleport bereit.
Schneller Autorenablauf
- Spawne oder platziere den NPC bzw. benutzerdefinierten Boss.
- Sieh ihn aus höchstens 12 Blöcken direkt an und führe
/em patrol editaus. - Stelle dich an jedes Ziel und führe
/em patrol addaus. Knoten0ist der konfigurierte Spawnpunkt. - Mit
/em patrol mode LOOPwird der letzte Knoten mit dem ersten verbunden; mit/em patrol mode REVERSEläuft der Akteur die Liste rückwärts zurück. /em patrol savespeichert die Route und aktualisiert den Akteur.
Der Editor zeigt den berechneten Laufweg statt bloßer Geraden. Außerdem stehen /em patrol undo, /em patrol remove, /em patrol status und /em patrol cancel zur Verfügung. Alle Befehle sind nur für Spieler und benötigen elitemobs.patrol.admin.
Enthält eine NPC-Datei mehrere spawnLocations, erzeugt das Speichern eine eigene Unterdatei für den bearbeiteten Standort. Dadurch gelten relative Versätze nicht versehentlich für alle Kopien.
Konfiguration
Knoten sind x,y,z-Versätze relativ zum konfigurierten Spawnpunkt, keine absoluten Weltkoordinaten.
patrol:
enabled: true
mode: LOOP
speed: 1.0
virtualSpeed: 0.2
nodes:
- 0,0,0
- 1000,0,0
- 1000,0,250
| Schlüssel | Werte | Standard | Beschreibung |
|---|---|---|---|
patrol.enabled | true / false | true, wenn Knoten vorhanden sind | Aktiviert die Route. |
patrol.mode | LOOP / REVERSE | LOOP | LOOP verbindet den letzten Knoten mit Knoten 0; REVERSE kehrt auf der Liste um. |
patrol.speed | positive Zahl | 1.0 | Geschwindigkeitsmultiplikator der nativen Navigation. |
patrol.virtualSpeed | positive Zahl | beobachtete Geschwindigkeit | Blöcke pro Tick ohne geladenen Körper eines persistenten Akteurs. Normalerweise nicht setzen. |
patrol.nodes | mindestens zwei Versätze | keiner | Geordnete Ziele. Zeichenfolgen x,y,z und Zuordnungen mit x, y und z werden akzeptiert. |
Es gibt keine öffentliche maximale Segmentlänge. Ein Segment über 1.000 Blöcke ist gültig. Der alte experimentelle Schlüssel patrol.maxLegDistance ist veraltet und wirkungslos.
Langstrecken-Wegfindung
Lange Segmente werden automatisch gelöst. EliteMobs fordert von MagmaCore schrittweise eine Route durch geladenes Gelände an, teilt sie in kurze native Navigationsziele und plant beim Vorankommen neu.
- Snapshots geladener Chunks werden auf dem Serverthread über MagmaCores gemeinsames Workload-System mit Tick-Budget erfasst.
- Die begrenzte A*-Suche läuft asynchron auf diesen unveränderlichen Snapshots.
- Minecrafts nativer Pathfinding-Code prüft und läuft die endgültigen kurzen Segmente.
- Die Planung lädt niemals Chunks zwangsweise. Fehlt das nächste Gelände, wartet der Akteur am Ende des letzten geprüften Wegs, bis das Gebiet wieder Entitäten tickt.
So sind Routen durch ganze Städte möglich, ohne alles in einem Tick zu scannen oder gerade durch ein ungeladenes Gebäude zu laufen. Flug- und Wassermobs verwenden Volumensuchen; Bodenmobs benötigen Halt und Freiraum und meiden übliche Gefahren.
Verhalten der Akteure
- NPC-Patrouillen aktivieren automatisch Körper-KI und Modellbewegungssynchronisierung.
syncMovementbleibt für Modelle ohne Patrouille relevant, ist aber kein zweiter Patrouillenschalter. - Benutzerdefinierte Bosse benötigen
ai: true, positive Bewegungsgeschwindigkeit und dürfen keine Passagiere sein. - Bosse pausieren die Patrouille im Kampf und setzen sie danach fort.
- Persistente NPCs und persistente, nicht instanzierte Bosse speichern ihre sichere Position in
patrol-state.ymlüber Chunk-Ablösung und Reloads hinweg. - Ein Akteur materialisiert nur in einem Bereich, in dem Entitäten ticken. Unbekanntes Gelände friert die Routenzeit ein.
- Ein Passagier kann keine Patrouille besitzen; route stattdessen sein Reittier.
Lua-Steuerung
Diese Methoden gibt es auf context.npc und context.boss, wenn der Akteur eine konfigurierte Patrouille besitzt. Koordinaten sind Versätze vom Spawnpunkt; jeder Aufruf meldet, ob er angenommen wurde.
| Methode | Verhalten |
|---|---|
patrol_pause() | Stoppt die aktuelle Route, ohne die Konfiguration zu verlieren. |
patrol_resume() | Beendet einen Skript-Halt oder temporären Lauf und setzt die Patrouille fort. |
walk_to(x, y, z) | Läuft zum Versatz und setzt danach die Patrouille fort. |
hold(x, y, z) | Läuft zum Versatz und bleibt dort. |
teleport(x, y, z) | Teleportiert zu einem Ziel, an dem Entitäten ticken, und setzt die Route fort. |
return {
api_version = 1,
on_npc_interact = function(context)
context.npc:walk_to(40, 0, -12)
end
}
walk_to nutzt denselben Langstreckenlöser; manuelle Zwischenziele sind nicht nötig.
Diagnose
Sieh den Akteur an und führe /em patrol status aus. Die Ausgabe enthält Zustand, aktuellen und Zielknoten, Fortschritt, logischen Ort, virtuelle Geschwindigkeit, Körperstatus und Haltegrund. terrain_unavailable bedeutet, dass der Planer auf geladenes Gelände mit Entity-Ticks wartet.