Aller au contenu principal

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

  1. Faites apparaître ou placez le PNJ ou le Boss personnalisé.
  2. Regardez-le directement à moins de 12 blocs et exécutez /em patrol edit.
  3. Placez-vous à chaque destination et exécutez /em patrol add. Le nœud 0 correspond au point d'apparition configuré.
  4. Utilisez /em patrol mode LOOP pour relier le dernier nœud au premier, ou /em patrol mode REVERSE pour repartir en sens inverse.
  5. Exécutez /em patrol save pour 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éValeursDéfautDescription
patrol.enabledtrue / falsetrue si des nœuds existentActive l'itinéraire.
patrol.modeLOOP / REVERSELOOPLOOP relie le dernier nœud au nœud 0; REVERSE rebrousse chemin.
patrol.speednombre positif1.0Multiplicateur de vitesse de la navigation native.
patrol.virtualSpeednombre positifvitesse observéeBlocs parcourus par tick lorsqu'un acteur persistant n'a pas de corps chargé. Laissez généralement cette clé absente.
patrol.nodesau moins deux décalagesaucunDestinations 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. syncMovement reste 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.yml lors 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éthodeComportement
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.