Aller au contenu principal

Réseaux de vol

Un réseau de vol est un ensemble de nœuds situés dans un même monde, reliés par des liaisons bidirectionnelles. Les nœuds qui portent un nom sont des destinations. Un joueur choisit une destination auprès d'un PNJ maître de vol ou d'un portail de vol, et une monture le fait voler le long de la plus courte chaîne de liaisons jusqu'à elle. Les réseaux se trouvent dans plugins/EliteMobs/transport_networks/ et utilisent les mêmes montures et les mêmes règles de trajet que les itinéraires de transport.

Chaque vol est construit au moment où le joueur le demande. EliteMobs lance une recherche A* sur les liaisons, en utilisant la distance en ligne droite entre les nœuds, et la monture suit une courbe lisse passant par chaque nœud du résultat. Vous n'avez jamais à créer un itinéraire pour chaque paire de destinations : un nouveau nœud ou une nouvelle liaison est utilisé par tous les vols qu'il raccourcit.

Comment les joueurs volent​

  1. Le joueur fait un clic droit sur un PNJ maître de vol ou entre dans un portail de vol.
  2. Un menu Flight paths liste toutes les destinations accessibles depuis le nœud du PNJ ou du portail, de la plus proche à la plus éloignée le long des liaisons, jusqu'à 54. Les destinations que le joueur n'a pas débloquées apparaissent sous forme de colorant gris, avec leur indice de verrouillage.
  3. Cliquer sur une destination lance un compte à rebours, de 60 ticks (3 secondes) par défaut, au terme duquel la monture prend le joueur en charge au point de départ.
  4. La monture suit le trajet et dépose le joueur à la destination, face à son arrivalYaw.

Un maître de vol ou un portail peut aussi sauter le menu et faire voler le joueur directement vers une seule destination. Voir les maîtres de vol et les portails de vol.

Le joueur doit rester à moins de 8 blocs du PNJ ou du portail lorsqu'il clique sur une destination, sans quoi le clic ne fait rien. Auprès d'un PNJ, tout déplacement pendant le compte à rebours annule le départ. Auprès d'un portail, le compte à rebours ne s'annule que lorsque le joueur quitte la zone du portail, à 1.5 × sizeMultiplier + 2 blocs de son centre.

S'accroupir ne fait pas descendre le passager en plein vol. Le vol prend fin prématurément en cas de mort, de téléportation, de changement de monde, de sortie de l'instance de donjon ou de suppression de la monture. Un vol qui ne progresse plus pendant 5 secondes dépose le passager à la destination. Un passager qui se déconnecte en plein vol en dehors d'une instance de donjon est placé à la destination à sa prochaine connexion, et l'arrêt ou le rechargement du serveur dépose aussi les passagers à bord à leur destination.

Construire un réseau en jeu​

Les commandes de l'éditeur sont réservées aux joueurs et nécessitent elitemobs.transport.admin.

  1. Placez-vous dans le monde du réseau et exécutez /em transport network edit harbor_flights. Un réseau sans fichier commence comme un brouillon vide.
  2. Placez-vous à l'endroit où les joueurs doivent embarquer et exécutez /em transport node add harbor.
  3. Volez vers le haut et exécutez /em transport node add harbor_sky. Lorsqu'aucun voisin n'est indiqué, un nouveau nœud se relie au nœud sélectionné, et le nouveau nœud devient le nœud sélectionné : une suite de commandes add construit donc un chemin.
  4. Continuez jusqu'à la destination suivante et ajoutez-la de la même façon. Utilisez /em transport node link <a> <b> pour relier des branches.
  5. Nommez chaque destination avec /em transport node destination harbor &6Harbor.
  6. Placez-vous à une destination en regardant dans la direction vers laquelle les joueurs doivent être orientés à l'arrivée, puis exécutez /em transport node yaw harbor.
  7. Vérifiez un chemin avec /em transport network preview harbor mine, et parcourez-le avec /em transport network ride harbor mine.
  8. Exécutez /em transport network save.

Les identifiants de nœuds et de réseaux comptent de 1 à 64 lettres minuscules, chiffres, traits de soulignement ou traits d'union. Un brouillon enregistre votre monde actuel comme monde du réseau. À l'intérieur d'une instance de donjon, il enregistre à la place le monde blueprint du donjon. Un réseau existant ne peut être modifié que depuis son propre monde.

Commandes de l'éditeur​

CommandeAction
/em transport network edit <network>Ouvrir un brouillon d'un réseau existant, ou en commencer un nouveau
/em transport network listLister les réseaux chargés
/em transport network statusAfficher le nombre de nœuds du brouillon et le nœud sélectionné
/em transport network preview [from] [to]Afficher le chemin entre deux nœuds ; sans nœuds, effacer l'aperçu
/em transport network ride <from> <to>Voler entre deux nœuds du brouillon sans enregistrer
/em transport network generate <first> <second>Remplacer la liaison entre deux nœuds par des nœuds générés qui passent au-dessus du terrain
/em transport network undoAnnuler la dernière modification de nœud ou de liaison, avec 32 modifications conservées au maximum
/em transport network saveEnregistrer le brouillon
/em transport network cancelAbandonner le brouillon
/em transport node add <id> [neighbors...]Ajouter un nœud là où vous vous tenez, relié aux nœuds listés ou, à défaut, au nœud sélectionné
/em transport node select [node]Sélectionner un nœud ; sans nœud, sélectionner le plus proche de vous
/em transport node link <first> <second>Relier deux nœuds dans les deux sens
/em transport node unlink <first> <second>Supprimer la liaison entre deux nœuds
/em transport node move <node>Déplacer un nœud à l'endroit où vous vous tenez
/em transport node remove <node>Supprimer un nœud et ses liaisons
/em transport node destination <node> [name]Faire du nœud une destination portant ce nom dans le menu ; sans nom, en refaire un simple point de passage
/em transport node permission <node> <permission>Exiger une permission pour voler depuis ou vers ce nœud ; none l'efface
/em transport node hint <node> [text]Définir le message affiché tant que le nœud est verrouillé ; sans texte ou avec none, l'efface
/em transport node yaw <node>Définir la direction d'arrivée sur celle vers laquelle vous regardez

La complétion par tabulation propose les identifiants de réseaux pour edit et les identifiants de nœuds du brouillon pour les arguments de nœuds. Toutes les commandes, sauf edit, list, save, cancel et status, exigent que vous soyez dans le monde du brouillon. Vous ne pouvez modifier qu'un seul réseau à la fois. Un brouillon reste en mémoire jusqu'à ce que vous l'enregistriez ou l'abandonniez, que vous vous déconnectiez, que son monde soit déchargé ou qu'EliteMobs se recharge.

/em transport network ride vous déplace jusqu'au premier nœud et part de là, même si vous êtes ailleurs. Il ne vérifie pas les permissions des nœuds, et la destination peut être n'importe quel nœud, nommé ou non.

/em transport reload recharge les fichiers de réseaux en même temps que les fichiers d'itinéraires. Les vols déjà en l'air conservent leur trajet initial.

Vue de l'éditeur​

Seul le joueur qui édite voit le brouillon. Chaque nœud situé à moins de 128 blocs affiche son ID au-dessus de lui, avec le nom de la destination sur une deuxième ligne. L'étiquette du nœud sélectionné est jaune. Les liaisons sont tracées en lignes bleu clair. Après preview, le chemin est tracé en vert. Sinon, une courbe jaune passe par le nœud sélectionné jusqu'à l'endroit où vous vous tenez, montrant comment un vol s'infléchirait si vous y ajoutiez un nœud.

Générer des nœuds provisoires​

Une liaison droite entre deux nœuds éloignés peut traverser une colline. /em transport network generate <first> <second> construit à la place une chaîne qui suit le terrain :

  • Elle lit la hauteur du sol tous les 4 blocs le long de la ligne entre les deux nœuds, sur trois colonnes de large. Elle ne lit que des chunks déjà générés et n'en charge que deux au plus par tick : elle ne crée donc jamais de nouveau terrain.
  • Chaque point de la chaîne vole à 12 blocs au-dessus du sol le plus haut dans un rayon d'environ 32 blocs de part et d'autre, et jamais sous la ligne droite entre les deux nœuds. Il reste à au moins 4 blocs sous la limite de construction.
  • Elle place un nœud environ tous les 48 blocs, plus un nœud à la verticale de chaque extrémité lorsque la chaîne vole à plus de 2 blocs au-dessus de cette extrémité.
  • Elle supprime la liaison directe et relie les deux nœuds par la chaîne.

Les nœuds doivent être distants d'au moins 16 blocs à l'horizontale. Les nœuds générés se nomment <first>_<second>_1, <first>_<second>_2, et ainsi de suite, et sont enregistrés avec placeholder: true pour que vous puissiez les retrouver plus tard. Un seul undo supprime toute la chaîne. Parcourez le résultat avant d'enregistrer : le générateur ne regarde que le terrain, pas les bâtiments ni les arbres.

YAML d'un réseau​

Pour 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
CléDéfautDescription
isEnabledtrueCharge le réseau
worldaucunLe monde dans lequel se trouvent les nœuds. Obligatoire
transportEntitytransport_cannon_seat.ymlUn fichier activé de custombosses/ utilisé comme monture. Vous y configurez son type d'entité, son modèle et ses pouvoirs
speed24Vitesse maximale en blocs par seconde. Doit être strictement positive
acceleration16Blocs par seconde gagnés à chaque seconde jusqu'à la vitesse maximale. Doit être strictement positive
countdownTicks60Ticks entre le choix d'une destination et l'embarquement. Zéro ou plus
nodesaucunTable associant des identifiants de nœuds à des sections de nœuds

Un réseau sans world, avec un transportEntity qui n'est pas un nom de fichier .yml, ou avec une vitesse, une accélération ou un compte à rebours invalide consigne un avertissement et n'est pas chargé.

Clés d'un nœud​

CléDescription
locationx,y,z dans le monde du réseau. Obligatoire
nameNom dans le menu. Un nœud qui porte un nom est une destination ; un nœud sans nom est un point de passage que les vols traversent. Les codes de couleur fonctionnent
arrivalYawDirection vers laquelle le joueur est orienté en arrivant à cette destination. Vaut 0 par défaut
permissionPermission nécessaire pour voler depuis ou vers ce nœud
lockedHintTexte affiché pour ce nœud tant qu'il est verrouillé. Vaut &7You have not unlocked this flight point. par défaut
neighborsIdentifiants des nœuds auxquels ce nœud est relié
placeholdertrue sur les nœuds créés par le générateur. Les vols les traitent comme n'importe quel autre nœud

Les liaisons fonctionnent dans les deux sens : il suffit donc de lister un voisin d'un seul côté. EliteMobs avertit et supprime une liaison vers un nœud manquant ou vers un nœud situé à la même position, ignore un nœud invalide, avertit à propos d'un nœud sans voisins et, dans un réseau comptant plus d'une destination, avertit à propos d'une destination qui ne peut en atteindre aucune autre.

L'enregistrement depuis l'éditeur ne réécrit que la section nodes et conserve les commentaires et les clés inconnues dans les nœuds qui existent toujours. Un nouveau fichier reçoit aussi les réglages du réseau ci-dessus, avec leurs valeurs par défaut. L'éditeur refuse d'enregistrer par-dessus un fichier de réseau désactivé ou qui n'a pas pu être chargé ; corrigez ou retirez d'abord ce fichier.

La monture suit exactement la courbe. Elle ne contourne pas les obstacles : gardez donc l'espace entre les nœuds dégagé pour la monture et son passager. Les montures dont le type d'entité est une poule ou un perroquet perdent des plumes et battent des ailes pendant le vol. Voir le dégagement de l'itinéraire et les interruptions pour ce qui se passe lorsque la monture ne peut pas apparaître.

Maîtres de vol​

Un maître de vol est un PNJ avec interactionType: TRANSPORT et un réseau :

interactionType: TRANSPORT
transportNetwork: harbor_flights
transportNode: harbor

Ajoutez ces champs à une définition de PNJ par ailleurs valide. transportNode est le nœud d'où partent les vols du PNJ. La monture prend le joueur en charge à ce nœud : placez-le donc à côté du PNJ. Ajoutez transportDestination: mine pour voler directement vers cette destination, sans menu. Lorsque transportNetwork est défini, le PNJ ignore transportRoutes.

Portails de vol​

Un trou de ver doté d'une section flight ouvre un menu de vol au lieu de téléporter :

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 est le nœud de départ, et la monture prend le joueur en charge à cet endroit : placez donc ce nœud au niveau du portail. flight.destination fait voler le joueur directement vers cette destination, sans menu. Un portail de vol n'a besoin que de location1 ; si location2 est aussi définie, les deux extrémités ouvrent le même menu. Il ne prélève pas coinCost et n'applique pas blindPlayer, mais sa permission s'applique toujours. Pour rouvrir le menu, sortez de la zone du portail puis revenez-y, au moins 5 secondes après sa dernière ouverture.

Les trous de ver ne se déclenchent pas pour un joueur qui effectue un vol. Un joueur déposé à l'intérieur d'un portail doit en sortir, et 5 secondes doivent s'écouler, avant qu'il ne se déclenche de nouveau.

Points de vol verrouillés​

Un nœud doté d'une permission est verrouillé pour les joueurs qui ne la possèdent pas. Un vol ne vérifie que ses nœuds de départ et de destination : un chemin peut donc traverser des points de passage verrouillés. Pour débloquer une destination avec une quête, utilisez comme permission du nœud le marqueur questLockoutPermission de la quête, comme elitequest.watchtower_supplies.yml. Les joueurs l'obtiennent en terminant la quête.

Lorsque le nœud de départ est verrouillé, le joueur reçoit son lockedHint au lieu d'un menu. Les destinations verrouillées restent dans le menu, grisées, et cliquer sur l'une d'elles affiche son indice.

Les joueurs qui ont activé /em quest bypass contournent toutes les permissions de nœuds.

Vols dans les donjons instanciés​

Définissez world sur le monde blueprint du donjon. Un vol lancé à l'intérieur d'une instance de donjon traverse la copie du monde de ce joueur. Utilisez comme point de vol un trou de ver instancié doté d'une section flight, ou un PNJ instancié. Un passager qui se déconnecte en plein vol à l'intérieur d'une instance n'est pas placé à la destination à sa connexion ; ce sont les règles propres au donjon pour le retour des joueurs qui s'appliquent.