Saltar al contenido principal

Patrullas de NPCs y jefes

EliteMobs puede hacer que los NPCs configurados y los Jefes Personalizados sigan rutas creadas por el administrador mediante la navegación nativa de Minecraft. El mismo sistema permite controlar walk_to, hold y teleport desde Lua.

Flujo rápido de creación

  1. Genera o coloca el NPC o Jefe Personalizado.
  2. Míralo directamente desde un máximo de 12 bloques y ejecuta /em patrol edit.
  3. Sitúate en cada destino y ejecuta /em patrol add. El nodo 0 es el punto de aparición configurado.
  4. Usa /em patrol mode LOOP para volver del último nodo al primero, o /em patrol mode REVERSE para recorrer la lista en sentido inverso.
  5. Ejecuta /em patrol save para guardar la ruta y actualizar al actor.

El editor muestra el recorrido resuelto, no simples líneas rectas. También dispone de /em patrol undo, /em patrol remove, /em patrol status y /em patrol cancel. Todos los comandos son exclusivos para jugadores y requieren elitemobs.patrol.admin.

Si un archivo de NPC contiene varios spawnLocations, al guardar se crea un archivo secundario para la ubicación editada. Así, los desplazamientos relativos no se aplican a todas las copias.

Configuración

Los nodos son desplazamientos x,y,z desde el punto de aparición configurado, no coordenadas absolutas.

patrol:
enabled: true
mode: LOOP
speed: 1.0
virtualSpeed: 0.2
nodes:
- 0,0,0
- 1000,0,0
- 1000,0,250
ClaveValoresPredeterminadoDescripción
patrol.enabledtrue / falsetrue si hay nodosActiva la ruta.
patrol.modeLOOP / REVERSELOOPLOOP conecta el último nodo con el nodo 0; REVERSE vuelve por la lista.
patrol.speednúmero positivo1.0Multiplicador de velocidad de la navegación nativa.
patrol.virtualSpeednúmero positivovelocidad observadaBloques avanzados por tick cuando un actor persistente no tiene cuerpo cargado. Normalmente debe omitirse.
patrol.nodesal menos dos desplazamientosningunoDestinos ordenados. Acepta cadenas x,y,z y mapas con x, y y z.

No existe un límite público por tramo. Un tramo de 1000 bloques es válido. La antigua clave experimental patrol.maxLegDistance está obsoleta y no tiene efecto.

Búsqueda de rutas a larga distancia

Los tramos largos se resuelven automáticamente. EliteMobs solicita a MagmaCore una ruta progresiva por el terreno cargado, la divide en destinos cortos para la navegación nativa y vuelve a calcularla conforme avanza el actor.

  • Las instantáneas de chunks cargados se capturan en el hilo del servidor mediante el sistema compartido de cargas de trabajo con presupuesto por tick de MagmaCore.
  • La búsqueda A* limitada se ejecuta de forma asíncrona sobre esas instantáneas inmutables.
  • El pathfinder nativo de Minecraft valida y recorre los tramos cortos finales.
  • La planificación nunca fuerza la carga de chunks. Si falta el terreno siguiente, el actor espera al final de la última ruta verificada y continúa cuando esa zona vuelve a procesar entidades.

Así se pueden atravesar ciudades sin escanearlo todo en un tick ni atravesar edificios descargados en línea recta. Las criaturas voladoras y acuáticas usan búsquedas volumétricas; las terrestres requieren apoyo y espacio libre y evitan peligros habituales.

Comportamiento de los actores

  • Las patrullas de NPCs activan automáticamente la IA del cuerpo y la sincronización de movimiento del modelo. syncMovement sigue controlando modelos sin patrulla, pero no es un segundo interruptor de patrulla.
  • Los Jefes Personalizados necesitan ai: true, velocidad positiva y no pueden ser pasajeros.
  • Los jefes pausan su patrulla durante el combate y la reanudan al terminar.
  • Los NPCs persistentes y los jefes persistentes no instanciados conservan su posición segura en patrol-state.yml durante descargas de chunks y recargas.
  • Un actor solo se materializa en una zona que procese entidades. El terreno desconocido congela el tiempo de ruta.
  • Un pasajero no puede tener patrulla; configura la montura.

Control mediante Lua

Estos métodos existen en context.npc y context.boss cuando el actor tiene una patrulla configurada. Las coordenadas son desplazamientos desde su punto de aparición y cada método devuelve si aceptó la solicitud.

MétodoComportamiento
patrol_pause()Detiene la ruta actual sin perder su configuración.
patrol_resume()Cancela una espera o marcha temporal y reanuda la patrulla.
walk_to(x, y, z)Camina hasta el desplazamiento y después reanuda la patrulla.
hold(x, y, z)Camina hasta el desplazamiento y espera allí.
teleport(x, y, z)Se teletransporta si el destino procesa entidades y reanuda la ruta.
return {
api_version = 1,
on_npc_interact = function(context)
context.npc:walk_to(40, 0, -12)
end
}

walk_to usa el mismo solucionador de larga distancia; no hace falta dividir manualmente el trayecto.

Diagnóstico

Mira al actor y ejecuta /em patrol status. Verás el estado, los nodos actual y objetivo, el progreso, la ubicación lógica, la velocidad virtual, si existe un cuerpo y el motivo de cualquier pausa. terrain_unavailable significa que faltan terrenos cargados que procesen entidades.