NPC Dialogue/pt: Difference between revisions
Updating to match new version of source page |
Translation sync from dragonminez-wiki repository |
||
| Line 21: | Line 21: | ||
<code>roshi</code>, <code>goku</code>, <code>karin</code>, <code>dende</code>, <code>popo</code>, <code>gero</code>, <code>guru</code>, <code>kingkai</code> ([[Special:MyLanguage/King Kai|Rei Kai]]), <code>toribot</code>, <code>enma</code>, <code>baba</code>, <code>grandkai</code>, <code>otherworld_announcer</code> | <code>roshi</code>, <code>goku</code>, <code>karin</code>, <code>dende</code>, <code>popo</code>, <code>gero</code>, <code>guru</code>, <code>kingkai</code> ([[Special:MyLanguage/King Kai|Rei Kai]]), <code>toribot</code>, <code>enma</code>, <code>baba</code>, <code>grandkai</code>, <code>otherworld_announcer</code> | ||
Quando um mestre tem uma árvore, clicar nele com o botão direito mostra a árvore '''em vez das''' opções habituais do mestre (Missões, Habilidades, Treinar e serviços; veja [[Special:MyLanguage/Masters|Mestres]]). A árvore usa a mesma janela de diálogo: a fala aparece no centro da faixa inferior e as opções são listadas à direita. Dê a uma das suas opções a ação <code>OPEN_QUESTS</code> para que os jogadores ainda consigam chegar às missões do mestre. O jogador precisa ter criado um personagem antes. O requisito de índole de um mestre não impede a conversa (um mestre que não gosta de você o cumprimenta com uma fala de desagrado); ele só bloqueia Habilidades, Treinar e as missões secundárias novas desse mestre, enquanto as missões de saga e as que já estão em andamento continuam disponíveis (veja [[Special:MyLanguage/Masters|Mestres]] e [[Special:MyLanguage/Alignment|Índole]]). | |||
Quando um mestre tem uma árvore, clicar nele com o botão direito mostra a árvore '''em vez das''' opções habituais do mestre (Missões, Habilidades, Treinar e serviços; veja [[Special:MyLanguage/Masters|Mestres]]). A árvore usa a mesma janela de diálogo: a fala aparece no centro da faixa inferior e as opções são listadas à direita. Dê a uma das suas opções a ação <code>OPEN_QUESTS</code> para que os jogadores ainda consigam chegar às missões do mestre. O jogador precisa ter criado um personagem antes. O requisito de índole de um mestre não impede a conversa; ele só bloqueia Habilidades, Treinar e as missões novas (veja [[Special:MyLanguage/Masters|Mestres]]). | |||
Os NPCs de missões padrão (<code>dragonminez:quest_npc</code>, por exemplo a Bulma) mantêm sua lista de missões e não usam árvores de diálogo. | Os NPCs de missões padrão (<code>dragonminez:quest_npc</code>, por exemplo a Bulma) mantêm sua lista de missões e não usam árvores de diálogo. | ||
Latest revision as of 01:32, 22 October 2026
Os diálogos de NPCs permitem dar aos NPCs mestres conversas ramificadas apenas com JSON, sem Java. Uma árvore de diálogo é um conjunto de nós: cada nó é uma fala do NPC, mais as opções com que o jogador pode responder. As opções podem levar a outro nó, ficar ocultas atrás de condições e executar ações como mudar a índole, dar TP, executar um comando ou iniciar uma missão.
Os diálogos são dados de cada mundo, assim como as missões e os desejos.
Onde ficam os arquivos
<world save>/dragonminez/dialogues/*.json
A pasta é criada na primeira vez que o servidor inicia, junto com um _example.json que você pode copiar. Cada arquivo .json da pasta (sem subpastas) contém uma árvore para um NPC. Os arquivos são carregados em ordem alfabética; se dois arquivos apontam para o mesmo NPC, vale o último.
Os diálogos são carregados quando o servidor inicia e recarregados com /dmzreload story (ou /dmzreload all); veja Recarregar e atualizar mudanças.
Código-fonte: src/main/java/com/dragonminez/common/dialogue/ (DialogueRegistry, DialogueParser, DialogueService, DialogueAction).
Quais NPCs podem usá-los
As árvores de diálogo funcionam com os NPCs mestres: os treinadores colocados por Posicionamento e índole de NPCs, como o Mestre Kame ou o Goku. O campo npc é o id do mestre. Os mestres que o DragonMineZ coloca por padrão usam estes ids:
roshi, goku, karin, dende, popo, gero, guru, kingkai (Rei Kai), toribot, enma, baba, grandkai, otherworld_announcer
Quando um mestre tem uma árvore, clicar nele com o botão direito mostra a árvore em vez das opções habituais do mestre (Missões, Habilidades, Treinar e serviços; veja Mestres). A árvore usa a mesma janela de diálogo: a fala aparece no centro da faixa inferior e as opções são listadas à direita. Dê a uma das suas opções a ação OPEN_QUESTS para que os jogadores ainda consigam chegar às missões do mestre. O jogador precisa ter criado um personagem antes. O requisito de índole de um mestre não impede a conversa (um mestre que não gosta de você o cumprimenta com uma fala de desagrado); ele só bloqueia Habilidades, Treinar e as missões secundárias novas desse mestre, enquanto as missões de saga e as que já estão em andamento continuam disponíveis (veja Mestres e Índole).
Os NPCs de missões padrão (dragonminez:quest_npc, por exemplo a Bulma) mantêm sua lista de missões e não usam árvores de diálogo.
Formato do arquivo
{
"npc": "roshi",
"start": "greet",
"nodes": {
"greet": {
"line": "Well, if it isn't %player%! What brings you here?",
"choices": [
{
"text": "I want to get stronger.",
"goto": "training",
"conditions": { "operator": "AND", "conditions": [ { "type": "LEVEL", "minLevel": 5 } ] }
},
{
"text": "Give me your money!",
"goto": "angry",
"actions": [ { "type": "ALIGNMENT", "amount": -5 } ]
},
{ "text": "Show me your quests.", "actions": [ { "type": "OPEN_QUESTS" } ] },
{ "text": "Goodbye." }
]
},
"training": {
"line": "Ha! I like your spirit. Take these training points and come back later.",
"choices": [
{ "text": "Thank you!", "actions": [ { "type": "TPS", "amount": 50 } ] }
]
},
"angry": {
"line": "How dare you! Leave my sight at once!"
}
}
}
Árvore
| Campo | Tipo | O que faz |
|---|---|---|
npc |
Texto | Obrigatório. O id do mestre ao qual a árvore pertence (sem diferenciar maiúsculas e minúsculas). Um id que começa com _ deixa o arquivo inativo; é assim que o _example.json fica desligado.
|
start |
Texto | Id do primeiro nó. Padrão: "start".
|
nodes |
Objeto | Obrigatório. Mapa de id de nó para nó. |
Uma árvore é ignorada (e o motivo é registrado no log) quando falta npc ou nodes, ou quando o nó start não existe.
Nó
| Campo | Tipo | O que faz |
|---|---|---|
line |
Texto | Obrigatório. O que o NPC diz. Uma chave de tradução ou texto simples; aceita marcadores. Um nó sem line é ignorado.
|
choices |
Array | As respostas do jogador, listadas como opções. Um nó sem opções só mostra sua fala; o jogador sai com Fechar ou Esc. |
Opção
| Campo | Tipo | O que faz |
|---|---|---|
text |
Texto | Obrigatório. Texto do botão. Uma chave de tradução ou texto simples; aceita marcadores. Uma opção sem text é ignorada.
|
goto |
Texto | Nó a ser mostrado em seguida. Omita-o (ou aponte para um nó que não existe) para encerrar a conversa. |
conditions |
Objeto | Opcional. A opção só aparece quando as condições são atendidas. Mesmo formato dos prerequisites das missões (veja abaixo). Se o bloco não puder ser lido, a opção inteira é descartada em vez de aparecer para todos.
|
actions |
Array | Opcional. Ações executadas em ordem quando a opção é escolhida (veja abaixo). |
Condições
conditions usa o formato de árvore de condições das missões: um operator (AND ou OR) e uma lista de conditions, que podem ser aninhadas. Qualquer tipo de condição de missão funciona, por exemplo:
{ "operator": "OR", "conditions": [
{ "type": "RACE", "race": "saiyan" },
{ "type": "SAGA_QUEST", "sagaId": "saiyan_saga", "questId": 12 },
{ "type": "ALIGNMENT", "max": 40 }
] }
Os tipos disponíveis são SAGA_QUEST, QUEST, LEVEL, STAT, RACE, CLASS, SKILL, BIOME, DIMENSION, STRUCTURE, ALIGNMENT e TIME. Os nomes dos campos são os mesmos das missões (por exemplo, LEVEL usa minLevel); veja Missões personalizadas.
As condições são verificadas de novo no servidor quando o jogador escolhe a opção, então não dá para forçar uma opção oculta.
Ações
type |
Campos | O que faz |
|---|---|---|
ALIGNMENT |
amount |
Soma amount à índole do jogador (valores negativos a diminuem).
|
TPS |
amount |
Dá amount pontos de treino (apenas quantidades positivas).
|
COMMAND |
command |
Executa um comando pelo servidor com permissões de operador. %player% é substituído pelo nome do jogador.
|
START_QUEST |
quest |
Inicia uma missão com as mesmas regras de quando ela é iniciada pelo registro de missões (pré-requisitos, requisitos de início, grupo). Use o id da missão secundária (por exemplo, "bulma_gero_blueprints") ou sagaId:questId para uma missão de saga (por exemplo, "saiyan_saga:3"). Se a missão não puder ser iniciada, nada acontece.
|
OPEN_QUESTS |
Nenhum | Troca a mesma janela para a lista de missões do NPC (aceitar, entregar, ver missões bloqueadas) e encerra a árvore (goto é ignorado).
|
value é aceito como alias genérico de command e quest. Uma ação com um type desconhecido é ignorada e registrada no log.
Marcadores
As falas e os textos das opções podem conter estes marcadores; eles são preenchidos para o jogador que os lê:
| Marcador | Valor |
|---|---|
%player% |
Nome do jogador |
%race% |
Id da raça |
%class% |
Id da classe |
%level% |
Nível do jogador |
%alignment% |
Índole |
%deaths% |
Número de mortes |
%form% |
Forma ativa (base quando não transformado)
|
%dimension% |
Nome da dimensão (por exemplo, overworld)
|
Os marcadores também funcionam dentro das suas próprias traduções. Addons em Java podem adicionar mais com DMZTextPlaceholders.register(...); veja Implementação e eventos.
Traduções
line e text aparecem traduzidos quando correspondem a uma chave de tradução de um arquivo de idioma, e como foram escritos caso contrário. A aba de nome acima da fala mostra o nome habitual do NPC (o nome da entidade, por exemplo entity.dragonminez.master_roshi). As traduções próprias se combinam com as do Crowdin da mesma forma que nas raças personalizadas.
Recarregar e validar
- Salve seu arquivo em
<world save>/dragonminez/dialogues/. - Valide a sintaxe JSON (veja Como usar JSON).
- Execute
/dmzreload story; veja Recarregar e atualizar mudanças. - Confira o console do servidor: ele registra quantas árvores foram carregadas e aponta qualquer nó, opção ou ação que tenha sido ignorado.
- Fale com o NPC e percorra todos os ramos, incluindo as opções que dependem de condições.