Pular para o conteúdo principal

Text Display Dialogue

Diálogos, menus de escolha e legendas de cinemáticas exibidos como entidades text_display flutuantes.

Pagasv2.4Missões e narrativa
RequerTypeWriter0.9PlaceholderAPIopcional

Visão geral​

O Text Display Dialogue substitui a caixa de chat dos diálogos do TypeWriter por entidades text_display do Minecraft. O nome do falante e as linhas de texto flutuam ao lado do NPC (ou em uma posição que você escolher), se escrevem sozinhos e entram e saem com uma breve animação de escala. Tudo é enviado por pacotes ao jogador que está no diálogo: nada é gerado no mundo e os outros jogadores não veem nada.

A extensão adiciona três entries de diálogo e uma entry de cinemática. Elas se comportam como as entries de diálogo normais do TypeWriter (speaker, criteria, modifiers, triggers, duration de digitação, sound), então você pode trocá-las em uma conversa existente sem alterar o restante da sua page.

Recursos​

  • Diálogo falado flutuante — o nome do falante e o texto aparecem acima do falante com efeito de digitação e uma animação de entrada.
  • Menu de escolha no mundo — cada opção é uma linha flutuante; o jogador rola a hotbar para mudar a opção destacada e clica com o botão direito para confirmar.
  • Menu relativo ao jogador — uma variante que segue o jogador com um deslocamento configurável, para falantes sem posição no mundo.
  • Legendas de cinemática — exiba segmentos de texto em uma linha do tempo de cinemática com atraso e animação de digitação.
  • Estilização completa — scale, textOpacity, viewRange, billboard e cores de fundo separadas para o falante, o texto e as opções.
  • Timer de opções — cancele automaticamente uma escolha após um atraso e dispare cancelTriggers, com um placeholder de contagem regressiva ao vivo.
  • Lógica por opção — cada opção tem seus próprios criteria, modifiers e triggers, e uma posição opcional.
  • Bloqueio de inventário — o jogador não pode abrir um inventário, soltar um item nem trocar de mão enquanto um diálogo é exibido.

Instalação​

  1. Instale o PlaceholderAPI se quiser usar %placeholders% no texto dos diálogos (opcional).
  2. Obtenha a extensão nas lojas (veja os botões acima) e coloque o JAR em plugins/Typewriter/extensions/.
  3. Reinicie o servidor.

A extensão não precisa de nenhum outro plugin: as entidades text display são enviadas com a biblioteca de pacotes incluída no TypeWriter. Funciona somente no Paper: o Folia não é suportado.

Primeiros passos​

Transforme uma saudação simples em um diálogo flutuante com uma escolha:

  1. No painel web do TypeWriter, abra uma page sequence que já tenha um NPC (um speaker) e um trigger de interação, ou crie uma.
  2. Adicione uma entry Spoken dialogue with Text Display. Defina speaker como seu NPC e escreva o text, por exemplo Welcome, traveller!. Defina duration como 2s para obter um efeito de digitação (zero exibe o texto de uma vez).
  3. Adicione uma entry Option dialogue with Text Display, defina o mesmo speaker, escreva a pergunta em text e adicione duas ou três options. Dê a cada opção os seus próprios triggers.
  4. Ligue os triggers da entry falada à entry de opções para que a conversa continue.
  5. Opcionalmente, defina timer na entry de opções como 15s e ligue cancelTriggers a uma entry de despedida. O texto pode mostrar a contagem regressiva com %typewriter_textdisplaydialogue_timer%.
  6. Publique a page e fale com o NPC. Clique com o botão direito no texto flutuante (ou no ar) para continuar; em uma escolha, role a hotbar e clique com o botão direito para confirmar.
Posição

Por padrão, o texto é colocado um bloco acima da posição do falante. Se o falante não for uma entidade NPC com posição, ou se você quiser um local fixo, defina position com a ferramenta de captura de posição. Use a variante player option quando o menu deve seguir o jogador.

Como funciona​

Cada entry de diálogo divide o texto em um text_display por linha, de modo que mensagens longas se empilham para baixo. O efeito de typing usa o modo de digitação padrão do TypeWriter. As opções aparecem uma após a outra (com 100 ms de intervalo) depois que o texto termina e só podem ser confirmadas quando todas estiverem visíveis.

Controles​

DiálogoContinuar ou confirmarMudar de opção
SpokenA tecla de confirmação do TypeWriter, ou clique direito em um dos textos flutuantes. Um primeiro toque completa a digitação, um segundo fecha o diálogo.Não se aplica
Option e Player optionClique direito no ar ou em um dos textos flutuantes, depois que todas as opções forem exibidas.Role a hotbar (o slot segurado nunca muda). A seleção dá a volta.

Configuração​

Os diálogos não têm arquivo de configuração. Cada texto exibido é um snippet, editável em plugins/Typewriter/snippets; os valores padrão reproduzem a exibição padrão. Um <token> em um snippet é substituído pelo seu valor, e as outras <tags> continuam sendo MiniMessage. Em um snippet de layout (*.format), o interlocutor e a dica só são exibidos quando o token deles está presente, enquanto o texto e as opções são sempre exibidos. Um snippet de dica vazio não exibe nenhuma dica.

SnippetUsado porFunçãoTokens
textdisplay.option.formatOption, Player optionLayout<speaker_name> <text> <options> <instruction>
textdisplay.speaker.formatOption, Player optionNome do interlocutor<speaker_name>
textdisplay.option.prefix.selectedOption, Player optionPrefixo da opção selecionada-
textdisplay.option.prefix.unselectedOption, Player optionPrefixo das outras opções-
textdisplay.option.selectedOption, Player optionLinha da opção selecionada<prefix> <option_number> <option_text>
textdisplay.option.unselectedOption, Player optionLinhas das outras opções<prefix> <option_number> <option_text>
textdisplay.instructionOption, Player optionDica-
textdisplay.spoken.formatSpokenLayout<speaker_name> <text> <instruction>
textdisplay.spoken.speaker.formatSpokenNome do interlocutor<speaker_name>
textdisplay.spoken.text.formatSpokenLinha de texto<text>
textdisplay.spoken.instructionSpokenDica-
textdisplay.spoken.continueSpokenDica para continuar (tecla de confirmação)<key>
textdisplay.cinematic.spoken.formatCinemáticaLayout<speaker_name> <text> <instruction>
textdisplay.cinematic.spoken.speaker.formatCinemáticaNome do interlocutor<speaker_name>
textdisplay.cinematic.spoken.instructionCinemáticaDica-
textdisplay.inventory.blockedTodos os diálogosMensagem quando um jogador tenta abrir um inventário (vazio: sem mensagem)-
textdisplay.error.initTodos os diálogosMensagem quando a exibição não consegue iniciar (vazio: sem mensagem)-

O diálogo Player option usa os mesmos snippets que o diálogo Option.

Placeholders​

PlaceholderRetorna
%typewriter_textdisplaydialogue_timer%Segundos restantes no timer do diálogo de opções atual, 0 quando nenhum timer está em execução.

O placeholder está registrado no PlaceholderAPI (expansão do Typewriter), então também funciona em outros lugares (scoreboards, chat, outros plugins) e retorna 0 quando nenhum temporizador está ativo. A extensão também o substitui por conta própria no text dos diálogos de opções, no texto de cada opção e no nome do interlocutor, onde ele funciona sem o PlaceholderAPI. Os outros placeholders do PlaceholderAPI funcionam nesses textos quando o PlaceholderAPI está instalado.

Entries​

4 entradas, geradas a partir do código-fonte da extensão.

Diálogos3
Cinemáticas1

Solução de problemas​

Nada aparece e o jogador vê um "Dialog initialization error" em vermelho. A extensão capturou um erro ao gerar os displays. Leia no log do servidor a linha que começa com TextDisplay initialization error para saber a causa e verifique se position, quando definida, é uma posição válida em um mundo existente.

O texto aparece nos pés do jogador ou no lugar errado. O texto é ancorado à posição da entidade do falante. Se speaker estiver vazio, ou não for uma instância de NPC visível para o jogador, usa-se a localização do jogador (mais um bloco para cima). Defina position para posicioná-lo exatamente.

O menu de opções não pode ser confirmado. O clique direito só é aceito depois que a digitação terminou e todas as opções apareceram. Com uma duration longa e muitas opções, espere o menu completo. As opções cujos criteria não correspondem não são exibidas; se nenhuma corresponder, nada pode ser selecionado.

A rolagem não muda a opção. Os eventos de rolagem são limitados a um a cada 150 ms, então rolagens muito rápidas são ignoradas. O slot da hotbar segurado nunca muda durante o diálogo; isso é esperado.

A contagem regressiva mostra %typewriter_textdisplaydialogue_timer% do jeito que está. Sem o PlaceholderAPI, o placeholder só é substituído nos diálogos de opções, e apenas quando timer é maior que zero. Instale o PlaceholderAPI para usá-lo em um diálogo falado ou em outro lugar.

O jogador reclama que o inventário está bloqueado. Enquanto um diálogo é exibido, abrir um inventário, clicar nele, soltar itens e trocar de mão são cancelados. É proposital e termina com o diálogo.

Extensões relacionadas​

  • BetterModel — NPCs com modelos animados que podem ser o falante de um diálogo flutuante.