Saltar al contenido principal

Redes de vuelo

Una red de vuelo es un conjunto de nodos de un mismo mundo unidos por enlaces bidireccionales. Los nodos con nombre son destinos. El jugador elige un destino en un NPC maestro de vuelo o en un portal de vuelo, y una montura lo lleva volando por la cadena de enlaces más corta hasta él. Las redes se guardan en plugins/EliteMobs/transport_networks/ y usan las mismas monturas y las mismas reglas de viaje que las rutas de transporte.

Cada vuelo se construye cuando el jugador lo pide. EliteMobs ejecuta una búsqueda A* sobre los enlaces, usando la distancia en línea recta entre nodos, y la montura sigue una curva suave que pasa por todos los nodos del resultado. Nunca tienes que crear una ruta para cada par de destinos: un nodo o un enlace nuevo lo aprovechan todos los vuelos a los que les acorta el camino.

Cómo vuelan los jugadores​

  1. El jugador hace clic derecho en un NPC maestro de vuelo o entra en un portal de vuelo.
  2. Un menú Flight paths enumera todos los destinos accesibles desde el nodo del NPC o del portal, del más cercano al más lejano siguiendo los enlaces, hasta 54. Los destinos que el jugador no ha desbloqueado se muestran como un tinte gris con su pista de bloqueo.
  3. Al hacer clic en un destino empieza una cuenta atrás, de 60 ticks (3 segundos) por defecto, al final de la cual la montura recoge al jugador en el punto de salida.
  4. La montura recorre el camino y deja al jugador en el destino, mirando hacia su arrivalYaw.

Un maestro de vuelo o un portal de vuelo también pueden omitir el menú y llevar directamente a un destino. Consulta los maestros de vuelo y los portales de vuelo.

El jugador debe estar a 8 bloques o menos del NPC o del portal al hacer clic en un destino; de lo contrario, el clic no hace nada. En un NPC, cualquier movimiento durante la cuenta atrás cancela la salida. En un portal, la cuenta atrás solo se cancela cuando el jugador abandona la zona del portal, a 1.5 × sizeMultiplier + 2 bloques de su centro.

Agacharse no baja al pasajero a mitad de vuelo. El vuelo termina antes de tiempo por la muerte, un teletransporte, un cambio de mundo, salir de la instancia de mazmorra o la eliminación de la montura. Un vuelo que deja de avanzar durante 5 segundos baja al pasajero en el destino. Un pasajero que se desconecta a mitad de vuelo fuera de una instancia de mazmorra queda en el destino en su siguiente inicio de sesión, y detener o recargar el servidor también deja en su destino a los pasajeros que van a bordo.

Crear una red dentro del juego​

Los comandos del editor son exclusivos de jugadores y requieren elitemobs.transport.admin.

  1. Sitúate en el mundo de la red y ejecuta /em transport network edit harbor_flights. Una red sin archivo empieza como un borrador vacío.
  2. Colócate donde deban subir los jugadores y ejecuta /em transport node add harbor.
  3. Vuela hacia arriba y ejecuta /em transport node add harbor_sky. Si no indicas vecinos, un nodo nuevo se enlaza con el nodo seleccionado, y el nodo nuevo pasa a ser el seleccionado, así que una cadena de comandos add construye un camino.
  4. Continúa hasta el siguiente destino y añádelo de la misma forma. Usa /em transport node link <a> <b> para unir ramas.
  5. Pon nombre a cada destino con /em transport node destination harbor &6Harbor.
  6. Colócate en un destino mirando hacia donde deban llegar los jugadores y ejecuta /em transport node yaw harbor.
  7. Comprueba un camino con /em transport network preview harbor mine y recórrelo en vuelo con /em transport network ride harbor mine.
  8. Ejecuta /em transport network save.

Los ID de nodo y de red tienen entre 1 y 64 letras minúsculas, dígitos, guiones bajos o guiones. Un borrador registra tu mundo actual como el mundo de la red. Dentro de una instancia de mazmorra registra en su lugar el mundo plantilla de la mazmorra. Una red existente solo puede editarse desde su propio mundo.

Comandos del editor​

ComandoAcción
/em transport network edit <network>Abre un borrador de una red existente, o inicia una nueva
/em transport network listEnumera las redes cargadas
/em transport network statusMuestra el número de nodos del borrador y el nodo seleccionado
/em transport network preview [from] [to]Muestra el camino entre dos nodos; sin nodos, borra la vista previa
/em transport network ride <from> <to>Vuela entre dos nodos del borrador sin guardar
/em transport network generate <first> <second>Sustituye el enlace entre dos nodos por nodos generados que pasan por encima del terreno
/em transport network undoDeshace la última edición de nodo o enlace, hasta 32 ediciones conservadas
/em transport network saveGuarda el borrador
/em transport network cancelDescarta el borrador
/em transport node add <id> [neighbors...]Añade un nodo donde estás, enlazado con los nodos indicados o, si no hay ninguno, con el nodo seleccionado
/em transport node select [node]Selecciona un nodo; sin nodo, selecciona el más cercano a ti
/em transport node link <first> <second>Enlaza dos nodos en ambas direcciones
/em transport node unlink <first> <second>Elimina el enlace entre dos nodos
/em transport node move <node>Mueve un nodo a donde estás
/em transport node remove <node>Elimina un nodo y sus enlaces
/em transport node destination <node> [name]Convierte el nodo en destino con ese nombre de menú; sin nombre, vuelve a ser un simple punto de paso
/em transport node permission <node> <permission>Exige un permiso para volar desde o hasta este nodo; none lo borra
/em transport node hint <node> [text]Establece el mensaje que se muestra mientras el nodo está bloqueado; sin texto o con none se borra
/em transport node yaw <node>Establece la dirección de llegada según hacia dónde estás mirando

El autocompletado con tabulador sugiere ID de red para edit y los ID de nodo del borrador para los argumentos de nodo. Todos los comandos excepto edit, list, save, cancel y status requieren que estés en el mundo del borrador. Solo puedes editar una red a la vez. Un borrador permanece en memoria hasta que lo guardas o lo cancelas, te desconectas, su mundo se descarga o EliteMobs se recarga.

/em transport network ride te lleva al primer nodo y sale desde allí, aunque estés en otro lugar. No comprueba los permisos de los nodos, y el destino puede ser cualquier nodo, con nombre o sin él.

/em transport reload recarga los archivos de redes junto con los de rutas. Los vuelos que ya están en el aire conservan su camino original.

Vista del editor​

Solo el jugador que edita ve el borrador. Cada nodo a menos de 128 bloques muestra su ID encima, con el nombre del destino en una segunda línea. La etiqueta del nodo seleccionado es amarilla. Los enlaces se dibujan como líneas azul claro. Tras preview, el camino se dibuja en verde. En caso contrario, una curva amarilla pasa por el nodo seleccionado y llega hasta donde estás, y muestra cómo se curvaría un vuelo si añadieras un nodo allí.

Generar nodos provisionales​

Un enlace recto entre dos nodos lejanos puede atravesar una colina. /em transport network generate <first> <second> construye en su lugar una cadena por encima del terreno:

  • Lee la altura del suelo cada 4 bloques a lo largo de la línea entre los dos nodos, con tres columnas de ancho. Solo lee chunks que ya han sido generados y carga como máximo dos por tick, así que nunca crea terreno nuevo.
  • Cada punto de la cadena vuela 12 bloques por encima del suelo más alto en unos 32 bloques hacia cada lado, y nunca por debajo de la línea recta entre los dos nodos. Se mantiene al menos 4 bloques por debajo del límite de construcción.
  • Coloca un nodo aproximadamente cada 48 bloques, además de un nodo justo encima de cada extremo cuando la cadena vuela más de 2 bloques por encima de ese extremo.
  • Elimina el enlace directo y enlaza los dos nodos a través de la cadena.

Los nodos deben estar al menos a 16 bloques de distancia en horizontal. Los nodos generados se llaman <first>_<second>_1, <first>_<second>_2 y así sucesivamente, y se guardan con placeholder: true para que puedas encontrarlos después. Un solo undo elimina toda la cadena. Recorre el resultado en vuelo antes de guardar: el generador solo mira el terreno, no los edificios ni los árboles.

YAML de la red​

Para harbor_flights.yml:

isEnabled: true
world: my_world
transportEntity: transport_cannon_seat.yml
speed: 24.0
acceleration: 16.0
countdownTicks: 60
nodes:
harbor:
location: 120.5,64.0,-340.5
name: '&6Harbor'
arrivalYaw: 90.0
neighbors:
- harbor_sky
harbor_sky:
location: 120.5,96.0,-340.5
neighbors:
- harbor
- ridge_pass
ridge_pass:
location: 310.0,110.0,-180.0
neighbors:
- harbor_sky
- mine_sky
- watchtower_sky
watchtower_sky:
location: 455.5,102.0,-60.5
neighbors:
- ridge_pass
- watchtower
watchtower:
location: 455.5,81.0,-60.5
name: '&6Watchtower'
arrivalYaw: -45.0
permission: elitequest.watchtower_supplies.yml
lockedHint: '&7Finish the quest "Watchtower Supplies" to unlock this flight point.'
neighbors:
- watchtower_sky
mine_sky:
location: 260.0,95.0,20.0
neighbors:
- mine
- ridge_pass
mine:
location: 262.5,70.0,24.5
name: '&6Old Mine'
arrivalYaw: 180.0
neighbors:
- mine_sky
ClavePredeterminadoDescripción
isEnabledtrueCarga la red
worldningunoEl mundo en el que están los nodos. Obligatorio
transportEntitytransport_cannon_seat.ymlUn archivo habilitado de custombosses/ que se usa como montura. Configura allí su tipo de entidad, modelo y poderes
speed24Velocidad máxima en bloques por segundo. Debe ser positiva
acceleration16Bloques por segundo que se ganan cada segundo hasta alcanzar la velocidad máxima. Debe ser positiva
countdownTicks60Ticks entre elegir un destino y subir a bordo. Cero o más
nodesningunoMapa de ID de nodo a secciones de nodo

Una red sin world, con un transportEntity que no sea un nombre de archivo .yml, o con una velocidad, aceleración o cuenta atrás no válidas registra una advertencia y no se carga.

Claves de nodo​

ClaveDescripción
locationx,y,z en el mundo de la red. Obligatorio
nameNombre en el menú. Un nodo con nombre es un destino; uno sin nombre es un punto de paso por el que pasan los vuelos. Los códigos de color funcionan
arrivalYawDirección hacia la que mira un jugador al llegar a este destino. Por defecto 0
permissionPermiso necesario para volar desde o hasta este nodo
lockedHintTexto que se muestra para este nodo mientras está bloqueado. Por defecto &7You have not unlocked this flight point.
neighborsID de los nodos con los que se enlaza este nodo
placeholdertrue en los nodos creados por el generador. Los vuelos los tratan como a cualquier otro nodo

Los enlaces funcionan en ambas direcciones, así que basta con indicar un vecino en uno de los lados. EliteMobs avisa y descarta un enlace a un nodo inexistente o a un nodo en la misma posición, omite un nodo no válido, avisa de un nodo sin vecinos y, en una red con más de un destino, avisa de un destino que no puede llegar a ningún otro.

Guardar desde el editor reescribe solo la sección nodes y conserva los comentarios y las claves desconocidas dentro de los nodos que siguen existiendo. Un archivo nuevo recibe además los ajustes de red anteriores, con sus valores predeterminados. El editor se niega a guardar sobre un archivo de red deshabilitado o que no se pudo cargar; corrige o elimina primero ese archivo.

La montura recorre la curva con exactitud. No esquiva obstáculos, así que deja libre el espacio entre nodos para la montura y su pasajero. Las monturas cuyo tipo de entidad es una gallina o un loro sueltan plumas y baten las alas mientras vuelan. Consulta espacio libre e interrupciones de la ruta para saber qué ocurre cuando la montura no puede aparecer.

Maestros de vuelo​

Un maestro de vuelo es un NPC con interactionType: TRANSPORT y una red:

interactionType: TRANSPORT
transportNetwork: harbor_flights
transportNode: harbor

Añade estos campos a una definición de NPC que sea válida en todo lo demás. transportNode es el nodo del que salen los vuelos del NPC. La montura recoge al jugador en ese nodo, así que colócalo junto al NPC. Añade transportDestination: mine para volar directamente a ese destino sin menú. Cuando transportNetwork está definido, el NPC ignora transportRoutes.

Portales de vuelo​

Un agujero de gusano con una sección flight abre un menú de vuelo en lugar de teletransportar:

isEnabled: true
location1: my_world,120.5,66,-336.5,90,0
style: ICOSAHEDRON
particleColor: 0xf0c060
sizeMultiplier: 2.0
flight:
network: harbor_flights
node: harbor

flight.node es el nodo de salida, y la montura recoge allí al jugador, así que coloca ese nodo en el portal. flight.destination vuela directamente a ese destino sin menú. Un portal de vuelo solo necesita location1; si también se define location2, ambos extremos abren el mismo menú. No cobra coinCost ni aplica blindPlayer, pero su permission sigue aplicándose. Para volver a abrir el menú, sal de la zona del portal y vuelve a entrar, al menos 5 segundos después de la última vez que se abrió.

Los agujeros de gusano no se activan para un jugador que va en un vuelo. Un jugador que aterriza dentro de un portal tiene que salir de él, y deben pasar 5 segundos, antes de que vuelva a activarse.

Puntos de vuelo bloqueados​

Un nodo con permission está bloqueado para los jugadores que no la tienen. Un vuelo solo comprueba sus nodos de salida y de destino, así que un camino puede pasar por puntos de paso bloqueados. Para desbloquear un destino con una misión, usa como permiso del nodo el marcador questLockoutPermission de la misión, como elitequest.watchtower_supplies.yml. Los jugadores lo reciben al completar la misión.

Cuando el nodo de salida está bloqueado, el jugador recibe su lockedHint en lugar de un menú. Los destinos bloqueados permanecen en el menú, atenuados en gris, y al hacer clic en uno se muestra su pista.

Los jugadores con /em quest bypass activado superan todos los permisos de nodo.

Vuelos dentro de mazmorras instanciadas​

Usa como world el mundo plantilla de la mazmorra. Un vuelo iniciado dentro de una instancia de mazmorra vuela por la copia del mundo de ese jugador. Usa como punto de vuelo un agujero de gusano instanciado con una sección flight, o un NPC instanciado. Un pasajero que se desconecta a mitad de vuelo dentro de una instancia no queda en el destino al iniciar sesión; se aplican las reglas propias de la mazmorra para los jugadores que regresan.