Patrouilles des PNJ et boss
EliteMobs permet aux PNJ configurés et aux Boss personnalisés de suivre des itinéraires créés par l'administrateur avec la navigation native de Minecraft. Le même système expose walk_to, hold et teleport aux scripts Lua.
Création rapide
- Faites apparaître ou placez le PNJ ou le Boss personnalisé.
- Regardez-le directement à moins de 12 blocs et exécutez
/em patrol edit. - Placez-vous à chaque destination et exécutez
/em patrol add. Le nœud0correspond au point d'apparition configuré. - Utilisez
/em patrol mode LOOPpour relier le dernier nœud au premier, ou/em patrol mode REVERSEpour repartir en sens inverse. - Exécutez
/em patrol savepour enregistrer l'itinéraire et actualiser l'acteur.
L'éditeur affiche le chemin résolu et non de simples lignes droites. /em patrol undo, /em patrol remove, /em patrol status et /em patrol cancel sont également disponibles. Ces commandes sont réservées aux joueurs et nécessitent elitemobs.patrol.admin.
Si un fichier de PNJ possède plusieurs spawnLocations, l'enregistrement crée un fichier enfant pour l'emplacement ciblé afin de ne pas appliquer les mêmes décalages à toutes les copies.
Configuration
Les nœuds sont des décalages x,y,z depuis le point d'apparition configuré, pas des coordonnées absolues.
patrol:
enabled: true
mode: LOOP
speed: 1.0
virtualSpeed: 0.2
nodes:
- 0,0,0
- 1000,0,0
- 1000,0,250
| Clé | Valeurs | Défaut | Description |
|---|---|---|---|
patrol.enabled | true / false | true si des nœuds existent | Active l'itinéraire. |
patrol.mode | LOOP / REVERSE | LOOP | LOOP relie le dernier nœud au nœud 0; REVERSE rebrousse chemin. |
patrol.speed | nombre positif | 1.0 | Multiplicateur de vitesse de la navigation native. |
patrol.virtualSpeed | nombre positif | vitesse observée | Blocs parcourus par tick lorsqu'un acteur persistant n'a pas de corps chargé. Laissez généralement cette clé absente. |
patrol.nodes | au moins deux décalages | aucun | Destinations ordonnées. Les chaînes x,y,z et les tables x/y/z sont acceptées. |
Il n'existe aucune distance maximale publique par segment. Un segment de 1 000 blocs est valide. L'ancienne clé expérimentale patrol.maxLegDistance est obsolète et sans effet.
Recherche de chemin à longue distance
Les longs segments sont résolus automatiquement. EliteMobs demande à MagmaCore un itinéraire progressif dans le terrain chargé, le découpe en courtes destinations natives et le recalcule au fur et à mesure.
- Les instantanés des chunks chargés sont capturés sur le thread serveur via le système partagé de tâches à budget par tick de MagmaCore.
- La recherche A* bornée s'exécute en arrière-plan sur ces instantanés immuables.
- Le pathfinder natif de Minecraft valide et parcourt les derniers petits segments.
- La planification ne force jamais le chargement des chunks. Si le terrain suivant manque, l'acteur attend à la fin du dernier chemin vérifié jusqu'à ce que la zone traite de nouveau les entités.
Un itinéraire peut ainsi traverser une ville sans tout analyser en un tick ni traverser un bâtiment déchargé en ligne droite. Les créatures volantes et aquatiques utilisent une recherche volumique ; les créatures terrestres exigent un sol et un passage libre et évitent les dangers courants.
Comportement des acteurs
- Une patrouille de PNJ active automatiquement l'IA du corps et la synchronisation du modèle.
syncMovementreste utile hors patrouille, mais ne constitue pas un second interrupteur. - Un Boss personnalisé nécessite
ai: true, une vitesse positive et ne doit pas être passager. - Le boss interrompt sa patrouille en combat et la reprend ensuite.
- Les PNJ persistants et les boss persistants non instanciés conservent leur position sûre dans
patrol-state.ymllors des déchargements et rechargements. - Un acteur ne se rematérialise que dans une zone traitant les entités. Un terrain inconnu fige le temps de l'itinéraire.
- Un passager ne peut pas posséder de patrouille ; configurez sa monture.
Contrôle Lua
Ces méthodes existent sur context.npc et context.boss lorsque l'acteur possède une patrouille configurée. Les coordonnées sont des décalages depuis son point d'apparition et chaque méthode indique si la demande a été acceptée.
| Méthode | Comportement |
|---|---|
patrol_pause() | Arrête l'itinéraire sans supprimer sa configuration. |
patrol_resume() | Annule une attente ou un déplacement temporaire et reprend la patrouille. |
walk_to(x, y, z) | Marche jusqu'au décalage puis reprend la patrouille. |
hold(x, y, z) | Marche jusqu'au décalage et y reste. |
teleport(x, y, z) | Se téléporte si la destination traite les entités, puis reprend l'itinéraire. |
return {
api_version = 1,
on_npc_interact = function(context)
context.npc:walk_to(40, 0, -12)
end
}
walk_to utilise le même solveur longue distance ; aucun découpage manuel n'est nécessaire.
Diagnostic
Regardez l'acteur et exécutez /em patrol status. La sortie indique l'état, les nœuds actuel et cible, la progression, la position logique, la vitesse virtuelle, la présence du corps et la cause d'une attente. terrain_unavailable signifie que le planificateur attend un terrain chargé traitant les entités.