Saltar para o conteúdo principal

Redes de voos

Uma rede de voos é um conjunto de nós num mundo, unidos por ligações bidirecionais. Os nós com nome são destinos. Um jogador escolhe um destino num NPC mestre de voo ou num portal de voo, e uma montada leva-o ao longo da cadeia de ligações mais curta até lá. As redes ficam em plugins/EliteMobs/transport_networks/ e usam as mesmas montadas e as mesmas regras de viagem das rotas de transporte.

Cada voo é construído quando o jogador o pede. O EliteMobs executa uma pesquisa A* sobre as ligações, usando a distância em linha reta entre os nós, e a montada segue uma curva suave por todos os nós do resultado. Nunca precisas de escrever uma rota para cada par de destinos: um nó ou uma ligação nova é usado por todos os voos que passa a encurtar.

Como os jogadores voam​

  1. O jogador clica com o botão direito num NPC mestre de voo ou entra num portal de voo.
  2. Um menu Flight paths lista todos os destinos acessíveis a partir do nó do NPC ou do portal, do mais próximo para o mais distante ao longo das ligações, até 54. Os destinos que o jogador ainda não desbloqueou aparecem como corante cinzento, com a respetiva dica de bloqueio.
  3. Clicar num destino inicia uma contagem decrescente, por predefinição de 60 ticks (3 segundos), no fim da qual a montada apanha o jogador no ponto de partida.
  4. A montada voa pelo percurso e pousa o jogador no destino, virado para o seu arrivalYaw.

Um mestre de voo ou um portal também pode dispensar o menu e voar diretamente para um destino. Consulta os mestres de voo e os portais de voo.

O jogador tem de estar a 8 blocos ou menos do NPC ou do portal ao clicar num destino, ou o clique não faz nada. Num NPC, qualquer movimento durante a contagem decrescente cancela a partida. Num portal, a contagem só é cancelada quando o jogador sai da zona do portal, a 1.5 × sizeMultiplier + 2 blocos do seu centro.

Agachar-se não tira o passageiro da montada a meio do voo. O voo termina antecipadamente em caso de morte, teletransporte, mudança de mundo, saída da instância da masmorra ou remoção da montada. Um voo que deixe de progredir durante 5 segundos pousa o passageiro no destino. Um passageiro que se desligue a meio do voo, fora de uma instância de masmorra, é colocado no destino no próximo início de sessão, e parar ou recarregar o servidor também coloca no destino os passageiros que estão a bordo.

Criar uma rede no jogo​

Os comandos do editor só podem ser usados por jogadores e exigem elitemobs.transport.admin.

  1. Coloca-te no mundo da rede e executa /em transport network edit harbor_flights. Uma rede sem ficheiro começa como um rascunho vazio.
  2. Coloca-te onde os jogadores devem embarcar e executa /em transport node add harbor.
  3. Voa para cima e executa /em transport node add harbor_sky. Sem vizinhos indicados, um nó novo liga-se ao nó selecionado, e o nó novo passa a ser o selecionado, por isso uma sequência de comandos add constrói um percurso.
  4. Avança para o destino seguinte e acrescenta-o da mesma forma. Usa /em transport node link <a> <b> para unir ramos.
  5. Dá nome a cada destino com /em transport node destination harbor &6Harbor.
  6. Coloca-te num destino, virado para o lado para onde os jogadores devem ficar virados ao chegar, e executa /em transport node yaw harbor.
  7. Verifica um percurso com /em transport network preview harbor mine e percorre-o em voo com /em transport network ride harbor mine.
  8. Executa /em transport network save.

Os IDs de nós e de redes têm de 1 a 64 letras minúsculas, algarismos, sublinhados ou hífenes. Um rascunho regista o teu mundo atual como o mundo da rede. Dentro de uma instância de masmorra, regista antes o mundo do blueprint da masmorra. Uma rede existente só pode ser editada a partir do seu próprio mundo.

Comandos do editor​

ComandoAção
/em transport network edit <network>Abrir um rascunho de uma rede existente, ou iniciar uma nova
/em transport network listListar as redes carregadas
/em transport network statusMostrar o número de nós do rascunho e o nó selecionado
/em transport network preview [from] [to]Mostrar o percurso entre dois nós; sem nós, limpar a pré-visualização
/em transport network ride <from> <to>Voar entre dois nós do rascunho sem guardar
/em transport network generate <first> <second>Substituir a ligação entre dois nós por nós gerados que passam por cima do terreno
/em transport network undoDesfazer a última edição de um nó ou de uma ligação, até 32 edições guardadas
/em transport network saveGuardar o rascunho
/em transport network cancelDescartar o rascunho
/em transport node add <id> [neighbors...]Acrescentar um nó onde estás, ligado aos nós indicados ou, na falta deles, ao nó selecionado
/em transport node select [node]Selecionar um nó; sem nó, selecionar o mais próximo de ti
/em transport node link <first> <second>Ligar dois nós nos dois sentidos
/em transport node unlink <first> <second>Remover a ligação entre dois nós
/em transport node move <node>Mover um nó para onde estás
/em transport node remove <node>Remover um nó e as suas ligações
/em transport node destination <node> [name]Tornar o nó um destino com esse nome no menu; sem nome, voltar a torná-lo um simples ponto de passagem
/em transport node permission <node> <permission>Exigir uma permissão para voar a partir deste nó ou para ele; none limpa-a
/em transport node hint <node> [text]Definir a mensagem mostrada enquanto o nó está bloqueado; sem texto, ou com none, limpa-a
/em transport node yaw <node>Definir a direção de chegada para o lado para onde estás virado

A conclusão com Tab sugere IDs de redes para edit e os IDs dos nós do rascunho para os argumentos de nós. Todos os comandos, exceto edit, list, save, cancel e status, exigem que estejas no mundo do rascunho. Só podes editar uma rede de cada vez. Um rascunho fica em memória até o guardares ou cancelares, te desligares, o seu mundo ser descarregado ou o EliteMobs ser recarregado.

/em transport network ride move-te para o primeiro nó e parte de lá, mesmo que estejas noutro sítio. Não verifica as permissões dos nós, e o destino pode ser qualquer nó, com nome ou sem ele.

/em transport reload recarrega os ficheiros das redes juntamente com os das rotas. Os voos que já estão no ar mantêm o percurso original.

Vista do editor​

Só o jogador que está a editar vê o rascunho. Todos os nós a menos de 128 blocos mostram o seu ID por cima, com o nome do destino numa segunda linha. A etiqueta do nó selecionado é amarela. As ligações são desenhadas como linhas azul-claras. Depois de preview, o percurso é desenhado a verde. Caso contrário, uma curva amarela passa pelo nó selecionado até onde estás, mostrando como um voo se curvaria se acrescentasses ali um nó.

Gerar nós provisórios​

Uma ligação reta entre dois nós distantes pode atravessar uma colina. /em transport network generate <first> <second> constrói antes uma cadeia sobre o terreno:

  • Lê a altura do solo a cada 4 blocos ao longo da linha entre os dois nós, em três colunas de largura. Só lê chunks que já foram gerados e carrega no máximo dois por tick, por isso nunca cria terreno novo.
  • Cada ponto da cadeia voa 12 blocos acima do solo mais alto a cerca de 32 blocos para cada lado e nunca abaixo da linha reta entre os dois nós. Fica pelo menos 4 blocos abaixo do limite de construção.
  • Coloca um nó aproximadamente a cada 48 blocos, mais um nó mesmo por cima de cada extremidade quando a cadeia voa mais de 2 blocos acima dessa extremidade.
  • Remove a ligação direta e liga os dois nós através da cadeia.

Os nós têm de estar a pelo menos 16 blocos de distância na horizontal. Os nós gerados chamam-se <first>_<second>_1, <first>_<second>_2 e assim por diante, e são guardados com placeholder: true, para os encontrares mais tarde. Um único undo remove a cadeia inteira. Percorre o resultado a voar antes de guardar: o gerador só olha para o terreno, não para edifícios nem árvores.

YAML da rede​

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
ChavePredefiniçãoDescrição
isEnabledtrueCarrega a rede
worldnenhumO mundo onde estão os nós. Obrigatório
transportEntitytransport_cannon_seat.ymlUm ficheiro ativado em custombosses/ usado como montada. Configura aí o tipo de entidade, o modelo e os poderes
speed24Velocidade máxima em blocos por segundo. Tem de ser positiva
acceleration16Blocos por segundo ganhos a cada segundo até à velocidade máxima. Tem de ser positiva
countdownTicks60Ticks entre a escolha de um destino e o embarque. Zero ou mais
nodesnenhumMapa de IDs de nós para secções de nós

Uma rede sem world, com um transportEntity que não seja um nome de ficheiro .yml, ou com uma velocidade, uma aceleração ou uma contagem decrescente inválida, regista um aviso e não é carregada.

Chaves dos nós​

ChaveDescrição
locationx,y,z no mundo da rede. Obrigatório
nameNome no menu. Um nó com nome é um destino; um nó sem nome é um ponto de passagem por onde os voos passam. Os códigos de cor funcionam
arrivalYawDireção para a qual o jogador fica virado ao chegar a este destino. Predefinição 0
permissionPermissão necessária para voar a partir deste nó ou para ele
lockedHintTexto mostrado para este nó enquanto está bloqueado. Predefinição &7You have not unlocked this flight point.
neighborsIDs dos nós a que este nó se liga
placeholdertrue nos nós criados pelo gerador. Os voos tratam-nos como qualquer outro nó

As ligações funcionam nos dois sentidos, por isso basta indicar um vizinho de um dos lados. O EliteMobs avisa e descarta uma ligação para um nó em falta ou para um nó na mesma posição, ignora um nó inválido, avisa sobre um nó sem vizinhos e, numa rede com mais de um destino, avisa sobre um destino que não consegue chegar a nenhum outro.

Guardar a partir do editor reescreve apenas a secção nodes e mantém os comentários e as chaves desconhecidas dentro dos nós que ainda existem. Um ficheiro novo recebe também as definições da rede acima, com os valores predefinidos. O editor recusa guardar por cima de um ficheiro de rede que esteja desativado ou que tenha falhado ao carregar; corrige ou remove primeiro esse ficheiro.

A montada segue a curva exatamente. Não contorna obstáculos, por isso mantém livre o espaço entre os nós, para a montada e para o passageiro. As montadas cujo tipo de entidade é uma galinha ou um papagaio largam penas e batem as asas enquanto voam. Consulta o espaço livre e as interrupções da rota para saber o que acontece quando a montada não consegue ser gerada.

Mestres de voo​

Um mestre de voo é um NPC com interactionType: TRANSPORT e uma rede:

interactionType: TRANSPORT
transportNetwork: harbor_flights
transportNode: harbor

Acrescenta estes campos a uma definição de NPC que seja válida. transportNode é o nó de onde partem os voos do NPC. A montada apanha o jogador nesse nó, por isso coloca-o junto ao NPC. Acrescenta transportDestination: mine para voar diretamente para esse destino, sem menu. Quando transportNetwork está definido, o NPC ignora transportRoutes.

Portais de voo​

Uma wormhole com uma secção flight abre um menu de voo em vez 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 é o nó de partida, e a montada apanha o jogador aí, por isso coloca esse nó no portal. flight.destination voa diretamente para esse destino, sem menu. Um portal de voo só precisa de location1; se location2 também estiver definida, as duas extremidades abrem o mesmo menu. Não cobra coinCost nem aplica blindPlayer, mas a sua permission continua a aplicar-se. Para voltar a abrir o menu, sai da zona do portal e volta a entrar, pelo menos 5 segundos depois de o menu ter sido aberto pela última vez.

As wormholes não são ativadas para um jogador que vai num voo. Um jogador pousado dentro de um portal tem de sair dele, e têm de passar 5 segundos, antes de o portal voltar a ser ativado.

Pontos de voo bloqueados​

Um nó com permission está bloqueado para os jogadores que não a têm. Um voo só verifica os nós de partida e de destino, por isso um percurso pode passar por pontos de passagem bloqueados. Para desbloquear um destino com uma quest, usa como permissão do nó o marcador questLockoutPermission da quest, como elitequest.watchtower_supplies.yml. Os jogadores recebem-no ao concluir a quest.

Quando o nó de partida está bloqueado, o jogador recebe o seu lockedHint em vez de um menu. Os destinos bloqueados continuam no menu, a cinzento, e clicar num deles mostra a respetiva dica.

Os jogadores com /em quest bypass ativo ignoram as permissões de todos os nós.

Voos dentro de masmorras instanciadas​

Define world como o mundo do blueprint da masmorra. Um voo iniciado dentro de uma instância de masmorra voa pela cópia do mundo desse jogador. Usa como ponto de voo uma wormhole instanciada com uma secção flight, ou um NPC instanciado. Um passageiro que se desligue a meio do voo dentro de uma instância não é colocado no destino no início de sessão seguinte; aplicam-se as regras da própria masmorra para o regresso dos jogadores.