Pular para o conteúdo principal

QuestPlus

Escolte NPCs por uma rede de estradas, um conjunto de missões diárias rotativas e um fato de estado de combate.

Privadasv0.0.2Missões e narrativa
RequerTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)Basic (TypeWriter extension)RoadNetwork (TypeWriter extension)Entity (TypeWriter extension)QuestCodex (TypeWriter extension)opcional

Criada para a rede BornToCraft. Esta extensão é documentada como referência e não é distribuída.

Visão geral​

O QuestPlus estende a extensão Quest do TypeWriter com um objetivo de escolta, uma rotação diária de quests e um fact de status de combate. Em uma escolta, um NPC caminha de checkpoint em checkpoint ao longo de uma rede de estradas e o jogador precisa mantê-lo vivo e ficar por perto. Uma definição de quest temporária decide quando um conjunto de quests está disponível e quais quests são sorteadas para o dia.

As escoltas usam as extensões Quest, Basic, RoadNetwork e Entity: a rota vem de uma rede de estradas, o NPC é uma instância de entidade, e a bússola ou o fluxo de caminho para o jogador vem da bússola de quests do QuestCodex, porque o objetivo de escolta é localizável.

Os indicadores de status de quest acima da cabeça dos NPCs (npc_status_override) não fazem parte do QuestPlus. Eles são fornecidos pelo UiCore e suas nameplates.

Recursos​

  • Objetivo de escolta — um NPC segue uma rota de nós de estrada, faz uma pausa em cada checkpoint e deve chegar ao fim.
  • Regras de falha e reset — o jogador deve ficar dentro de um raio de guarda, o NPC pode ser ferido por mobs e um limite de tempo pode ser aplicado.
  • Triggers de checkpoint — triggers de início, checkpoint, perda, recuperação, reset, conclusão e falha, além de triggers de emboscada por checkpoint.
  • Exibição da escolta — scoreboard e boss bar opcionais mostrando checkpoint, tempo e vida.
  • Ações de escolta — inicie, avance, redefina e interrompa uma escolta a partir de qualquer sequence.
  • Quests temporárias — um pool rotativo: disponibilidade por dia da semana, horários e cron, um número de quests sorteadas a cada dia e um limite de conclusões.
  • Status de combate — um fact que vale 1 por alguns segundos depois que o jogador ataca ou é atacado.
  • Objetivos ocultáveis — oculte um objetivo até que sua quest seja rastreada.
  • Placeholders — progresso, vida e tempo da escolta, e as quests do dia com uma contagem regressiva até a próxima rotação.

Instalação​

  1. Instale as extensões do TypeWriter Quest, Basic, RoadNetwork e Entity que o QuestPlus declara como dependências.
  2. Opcional: instale o QuestCodex para mostrar os waypoints da escolta ao jogador.
  3. Coloque o JAR do QuestPlus em plugins/Typewriter/extensions/ e reinicie o servidor.
  4. Construa uma rede de estradas com a extensão RoadNetwork para a rota da sua escolta; veja Primeiros passos.

Primeiros passos​

Crie uma missão de escolta:

  1. No painel web do TypeWriter, crie uma rede de estradas com a extensão RoadNetwork e coloque os nós pelos quais o seu NPC deve passar. Mantenha as arestas atualizadas: se o caminho não puder ser calculado, o NPC não chega ao seu nó.
  2. Adicione uma entry Path Escort Activity. Defina roadNetwork, liste os ids dos nós em nodes na ordem de caminhada e defina idleActivity como o que o NPC faz quando a rota termina.
  3. Crie uma instância de entidade para o seu NPC de escolta e defina seu activity como esta Path Escort Activity. A instância deve pertencer a uma audience ativa, porque o QuestPlus usa o display que o TypeWriter já executa para ela.
  4. Adicione uma entry Escort Objective. Defina quest, npc (a sua instância de entidade) e display. Ajuste maxHealth, guardRadius, loseToleranceSec, spawnRadius e startRadius, além de globalTimeLimitSec, opcional.
  5. Ligue os triggers: onEscortComplete ao que deve acontecer em caso de sucesso (por exemplo, uma ação que define um fact para a próxima etapa da quest) e onEscortFail ao tratamento da falha.
  6. Deixe o jogador alcançar a escolta. A escolta inicia sozinha quando um jogador da audience do objetivo chega a até startRadius do primeiro nó. Para iniciá-la a partir de um diálogo ou de um evento, use Escort Start com objective.
  7. Cada vez que o NPC parar em um checkpoint, use Escort Next (por exemplo, após uma linha de diálogo ou uma emboscada vencida) para fazê-lo caminhar até o próximo.
  8. Publique e teste: o NPC aparece perto do primeiro nó, e a escolta começa quando você chega a até startRadius dele.

Use /escort debug resolve <objective> para verificar se o primeiro nó e os raios foram resolvidos.

Emboscadas

Preencha ambushes com um checkpointIndex e triggers. Quando a escolta chega a esse checkpoint, os triggers disparam uma vez, por exemplo para gerar mobs com outra extensão.

Como funciona​

Quando uma escolta começa, o QuestPlus cria um detentor de vida invisível para o NPC que apenas o jogador escoltado consegue ver. Os mobs próximos dentro de guardRadius o escolhem como alvo. O NPC perde vida com golpes de mobs (mobHitDamage) e pode se regenerar (regenPerSec). Os jogadores não podem feri-lo. Ele fica totalmente protegido se invulnerable estiver ativado.

O NPC caminha até o próximo nó da estrada, que conta como alcançado quando o NPC está a menos de nodeReachRadius dele, e depois espera até que uma ação Escort Next o libere. Chegar a um checkpoint dispara onCheckpoint e os triggers de emboscada correspondentes. Depois do último nó, onEscortComplete dispara.

Reset. A escolta volta ao último checkpoint, com a vida do NPC cheia, quando o NPC morre ou o jogador morre, ou quando o jogador fica mais longe que guardRadius por loseToleranceSec segundos. onEscortLost dispara quando o jogador sai do alcance e onEscortRecovered quando ele volta. onEscortReset dispara em um reset.

Falha. A escolta falha quando globalTimeLimitSec se esgota, quando o jogador sai, quando o NPC desaparece ou em Escort Stop. onEscortFail dispara.

Uma ação Escort Reset cancela a escolta sem nenhum trigger de falha.

Quests temporárias​

Uma Temporary Quest Definition é um filtro de audience. Seus children só são mostrados aos jogadores enquanto ela está ativa:

  • Disponibilidade. Ela está ativa nos daysOfWeek listados, entre startTime e endTime (HH:mm) se definidos, e quando cronExpression corresponde, se definida.
  • Sorteio diário. questsPerDay quests são escolhidas aleatoriamente entre quests a cada dia. A escolha é determinística para um dado dia e entry, muda em resetTime e é salva em um Temporary Quest Artifact referenciado por artifact.
  • Limite de conclusões. Com maxCompleted acima de 0, os jogadores que concluíram essa quantidade de quests do dia deixam de ver os children. O contador é salvo no artifact e é redefinido com o dia.

O sorteio diário é exposto por placeholders e pela contagem de conclusões. O filtro em si não oculta as quests que não foram sorteadas: use os placeholders nos seus menus, ou projete a disponibilidade das suas quests para que apenas as que você mostra sejam alcançáveis.

Status de combate​

O Combat Status Fact vale 1 enquanto o jogador atingiu uma entidade ou foi atingido por uma nos últimos thresholdSeconds (10 por padrão) e 0 caso contrário. Use-o em criteria para bloquear viagem rápida, diálogos ou recompensas de logout durante uma luta. Ele só rastreia combates que envolvem um jogador.

Placeholders​

Tags do MiniPlaceholders para texto MiniMessage.

Escolta, para o jogador escoltado. Quando nenhuma escolta está ativa, os valores são neutros.

PlaceholderRetorna
<escort_checkpoint>Checkpoint atual no formato n/total, 0/0 quando inativa.
<escort_time>Segundos decorridos, ou segundos restantes quando o objetivo tem um limite de tempo.
<escort_health>, <escort_health_max>Vida do NPC de escolta e seu máximo, 0 quando inativa.
<escort_is>1 quando uma escolta está ativa.
<escort_is_max>1 quando o último checkpoint é alcançado.

Quests temporárias, em que id é o id da entry Temporary Quest Definition.

PlaceholderRetorna
<tempquest_active_quests:id>Ids das quests de hoje, separados por vírgula.
<tempquest_time_remaining:id>Tempo até a próxima rotação no formato HH:MM:SS.
<tempquest_quests_per_day:id>Número de quests sorteadas por dia.
<tempquest_quest_name:id:n>Nome de exibição da n-ésima quest do dia, começando em 1.
<tempquest_quest_desc:id:n>Texto de exibição da n-ésima quest.

Comandos​

ComandoDescrição
/escort debug start <objective>Inicia uma escolta para você (apenas jogadores).
/escort debug stopInterrompe a sua escolta.
/escort debug skipnodeAvança a sua escolta para o próximo checkpoint.
/escort debug scanExecuta agora a varredura de início automático.
/escort debug resolve <objective>Imprime o primeiro nó e os raios de um objetivo.

O <objective> é o id ou o nome de um Escort Objective. O comando exige questplus.escort.debug.

Permissões​

PermissãoConcede
questplus.escort.debug/escort debug. Não tem padrão, então apenas operadores a têm, a menos que você a conceda.

Entries​

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

Ações4
Objetivos1
Fatos1
Audiências1
Atividades1
Artefatos1

Solução de problemas​

O NPC nunca aparece. O log diz "npc instance missing" ou "has no display registered in the AudienceManager". O npc do objetivo deve ser uma instância de entidade que pertença a uma audience ativa. Execute /escort debug resolve <objective> e verifique se a instância existe.

O log diz "is missing a path_escort_activity". A instância de entidade usada como npc deve ter uma Path Escort Activity como seu activity.

"node ... not found" ou "has no nodes". Os nodes da activity listam ids que não estão na roadNetwork selecionada, ou a lista está vazia. Escolha os nós novamente depois de editar a rede.

"navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges." O NPC não consegue caminhar até o nó. Recalcule as arestas da rede de estradas e verifique o terreno entre os nós.

A escolta não inicia sozinha. O jogador deve estar na audience do objetivo (a quest ativa e os criteria do objetivo verdadeiros), no mesmo mundo do primeiro nó e a até startRadius dele. Caso contrário, inicie-a com Escort Start. O NPC só é gerado quando o jogador está a até spawnRadius do primeiro nó.

A escolta é redefinida imediatamente. O jogador está mais longe que guardRadius por mais tempo que loseToleranceSec, ou o NPC está morrendo por golpes de mobs. Aumente o raio ou a tolerância, reduza mobHitDamage ou ative invulnerable.

O NPC para em todo nó e não continua. É o comportamento esperado: ele espera por Escort Next em cada checkpoint.

As quests temporárias estão todas ocultas. A definição só fica ativa nos seus daysOfWeek, entre startTime e endTime, e quando cronExpression corresponde. Verifique-os, bem como o limite maxCompleted.

Extensões relacionadas​

  • QuestCodex — bússola e caminho até os waypoints da escolta.
  • UiCore — indicadores de status de quest acima dos NPCs (npc_status_override).