Saltar al contenido principal

QuestPlus

Escolta NPC por una red de caminos, una reserva de misiones diarias rotativas y un hecho de estado de combate.

Privadasv0.0.2Misiones y narrativa
RequiereTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)Basic (TypeWriter extension)RoadNetwork (TypeWriter extension)Entity (TypeWriter extension)QuestCodex (TypeWriter extension)opcional

Creada para la red BornToCraft. Esta extensión está documentada como referencia y no se distribuye.

Descripción general​

QuestPlus amplía la extensión Quest de TypeWriter con un objetivo de escolta, una rotación diaria de misiones y un hecho de estado de combate. En una escolta, un NPC camina de checkpoint en checkpoint a lo largo de una red de caminos y el jugador tiene que mantenerlo con vida y permanecer cerca. Una definición de misión temporal decide cuándo está disponible un conjunto de misiones y cuáles se eligen para el día.

Las escoltas usan las extensiones Quest, Basic, RoadNetwork y Entity: la ruta procede de una red de caminos, el NPC es una instancia de entidad y la brújula o el rastro de camino para el jugador proceden de la brújula Quest de QuestCodex, porque el objetivo de escolta es localizable.

Los indicadores de estado de misión sobre las cabezas de los NPC (npc_status_override) no forman parte de QuestPlus. Los proporciona UiCore con sus placas de nombre.

Características​

  • Objetivo de escolta: un NPC sigue una ruta de nodos de camino, hace una pausa en cada checkpoint y debe llegar al final.
  • Reglas de fallo y de reinicio: el jugador debe permanecer dentro de un radio de guardia, los mobs pueden herir al NPC y puede aplicarse un límite de tiempo.
  • Disparadores de checkpoint: disparadores de inicio, checkpoint, pérdida, recuperación, reinicio, finalización y fallo, además de disparadores de emboscada por checkpoint.
  • Visualización de la escolta: scoreboard y barra de jefe opcionales que muestran el checkpoint, el tiempo y la salud.
  • Acciones de escolta: inicia, avanza, reinicia y detén una escolta desde cualquier secuencia.
  • Misiones temporales: un conjunto rotativo con disponibilidad por día de la semana, horas y cron, un número de misiones elegidas cada día y un límite de finalizaciones.
  • Estado de combate: un hecho que vale 1 durante unos segundos después de que el jugador golpee o reciba un golpe.
  • Objetivos ocultables: oculta un objetivo hasta que se siga su misión.
  • Placeholders: progreso, salud y tiempo de la escolta, y las misiones del día con una cuenta atrás hasta la siguiente rotación.

Instalación​

  1. Instala las extensiones de TypeWriter Quest, Basic, RoadNetwork y Entity que QuestPlus declara como dependencias.
  2. Opcional: instala QuestCodex para mostrar al jugador los waypoints de la escolta.
  3. Coloca el JAR de QuestPlus en plugins/Typewriter/extensions/ y reinicia el servidor.
  4. Construye una red de caminos con la extensión RoadNetwork para la ruta de tu escolta; consulta Primeros pasos.

Primeros pasos​

Crea una misión de escolta:

  1. En el panel web de TypeWriter, crea una red de caminos con la extensión RoadNetwork y coloca los nodos por los que debe pasar tu NPC. Mantén las aristas actualizadas: si no se puede calcular el camino, el NPC no llega a su nodo.
  2. Añade una entrada Path Escort Activity. Establece roadNetwork, enumera los ids de los nodos en nodes en orden de recorrido y establece idleActivity en lo que hace el NPC una vez terminada la ruta.
  3. Crea una instancia de entidad para tu NPC de escolta y establece su activity en esta Path Escort Activity. La instancia debe pertenecer a una audiencia activa, porque QuestPlus usa la visualización que TypeWriter ya ejecuta para ella.
  4. Añade una entrada Escort Objective. Establece quest, npc (tu instancia de entidad) y display. Ajusta maxHealth, guardRadius, loseToleranceSec, spawnRadius y startRadius, y opcionalmente globalTimeLimitSec.
  5. Enlaza los disparadores: onEscortComplete con lo que deba ocurrir en caso de éxito (por ejemplo, una acción que establezca un hecho para el siguiente paso de la misión) y onEscortFail con la gestión del fallo.
  6. Deja que el jugador llegue hasta la escolta. La escolta empieza por sí sola cuando un jugador de la audiencia del objetivo se acerca a startRadius del primer nodo. Para iniciarla en su lugar desde un diálogo o un evento, usa Escort Start con objective.
  7. Cada vez que el NPC se detiene en un checkpoint, usa Escort Next (por ejemplo, tras una línea de diálogo o una emboscada superada) para hacerle caminar hasta el siguiente.
  8. Publica y prueba: el NPC aparece cerca del primer nodo, y la escolta comienza cuando te acercas a startRadius de él.

Usa /escort debug resolve <objective> para comprobar que el primer nodo y los radios se resuelven.

Emboscadas

Rellena ambushes con un checkpointIndex y triggers. Cuando la escolta llega a ese checkpoint, los disparadores se activan una vez, por ejemplo para generar mobs con otra extensión.

Cómo funciona​

Cuando empieza una escolta, QuestPlus crea para el NPC un contenedor de salud invisible que solo ve el jugador escoltado. Los mobs cercanos dentro de guardRadius lo toman como objetivo. El NPC pierde salud con los golpes de los mobs (mobHitDamage) y puede regenerarse (regenPerSec). Los jugadores no pueden herirlo. Está totalmente protegido si invulnerable está activado.

El NPC camina hasta el siguiente nodo del camino, que se considera alcanzado cuando el NPC está a menos de nodeReachRadius de él, y espera después hasta que una acción Escort Next lo libera. Al llegar a un checkpoint se disparan onCheckpoint y los disparadores de emboscada correspondientes. Tras el último nodo, se dispara onEscortComplete.

Reinicio. La escolta vuelve a su último checkpoint, con la salud del NPC al máximo, cuando el NPC muere o muere el jugador, o cuando el jugador permanece más lejos de guardRadius durante loseToleranceSec segundos. onEscortLost se dispara cuando el jugador sale del alcance y onEscortRecovered cuando vuelve. onEscortReset se dispara en un reinicio.

Fallo. La escolta falla cuando se agota globalTimeLimitSec, cuando el jugador se desconecta, cuando el NPC desaparece o con Escort Stop. Se dispara onEscortFail.

Una acción Escort Reset cancela la escolta sin ningún disparador de fallo.

Misiones temporales​

Una Temporary Quest Definition es un filtro de audiencia. Sus children solo se muestran a los jugadores mientras está activa:

  • Disponibilidad. Está activa en los daysOfWeek indicados, entre startTime y endTime (HH:mm) si están definidos, y cuando cronExpression coincide si está definida.
  • Selección diaria. Cada día se eligen al azar questsPerDay misiones de quests. La elección es determinista para un día y una entrada dados, cambia en resetTime y se guarda en un Temporary Quest Artifact referenciado por artifact.
  • Límite de finalizaciones. Con maxCompleted por encima de 0, los jugadores que hayan completado esa cantidad de las misiones del día dejan de ver los hijos. El contador se guarda en el artefacto y se reinicia con el día.

La selección diaria se expone mediante placeholders y el recuento de finalizaciones. El propio filtro no oculta las misiones que no se eligieron: usa los placeholders en tus menús, o diseña la disponibilidad de tus misiones de modo que solo sean accesibles las que muestras.

Estado de combate​

El Combat Status Fact vale 1 mientras el jugador haya golpeado a una entidad o haya sido golpeado por una durante los últimos thresholdSeconds (10 por defecto), y 0 en caso contrario. Úsalo en los criterios para bloquear el viaje rápido, los diálogos o las recompensas de desconexión durante un combate. Solo hace seguimiento de los combates en los que interviene un jugador.

Placeholders​

Etiquetas de MiniPlaceholders para texto MiniMessage.

Escolta, para el jugador escoltado. Cuando no hay ninguna escolta activa, los valores son neutros.

PlaceholderDevuelve
<escort_checkpoint>Checkpoint actual como n/total, 0/0 cuando está inactiva.
<escort_time>Segundos transcurridos, o segundos restantes cuando el objetivo tiene un límite de tiempo.
<escort_health>, <escort_health_max>Salud del NPC de escolta y su máximo, 0 cuando está inactiva.
<escort_is>1 cuando hay una escolta activa.
<escort_is_max>1 cuando se ha alcanzado el último checkpoint.

Misiones temporales, donde id es el id de la entrada Temporary Quest Definition.

PlaceholderDevuelve
<tempquest_active_quests:id>Ids de las misiones de hoy, separados por una coma.
<tempquest_time_remaining:id>Tiempo antes de la siguiente rotación como HH:MM:SS.
<tempquest_quests_per_day:id>Número de misiones elegidas por día.
<tempquest_quest_name:id:n>Nombre visible de la n-ésima misión del día, empezando en 1.
<tempquest_quest_desc:id:n>Texto visible de la n-ésima misión.

Comandos​

ComandoDescripción
/escort debug start <objective>Inicia una escolta para ti (solo jugadores).
/escort debug stopDetiene tu escolta.
/escort debug skipnodeHace avanzar tu escolta hasta el siguiente checkpoint.
/escort debug scanEjecuta ahora el escaneo de inicio automático.
/escort debug resolve <objective>Imprime el primer nodo y los radios de un objetivo.

El <objective> es el id o el nombre de un Escort Objective. El comando necesita questplus.escort.debug.

Permisos​

PermisoConcede
questplus.escort.debug/escort debug. No tiene valor por defecto, por lo que solo lo tienen los operadores salvo que lo concedas.

Entradas​

9 entradas, generadas a partir del código fuente de la extensión.

Acciones4
Objetivos1
Hechos1
Audiencias1
Actividades1
Artefactos1

Resolución de problemas​

El NPC nunca aparece. El registro dice "npc instance missing" o "has no display registered in the AudienceManager". El npc del objetivo debe ser una instancia de entidad que pertenezca a una audiencia activa. Ejecuta /escort debug resolve <objective> y comprueba que la instancia existe.

El registro dice "is missing a path_escort_activity". La instancia de entidad usada como npc debe tener una Path Escort Activity como su activity.

"node ... not found" o "has no nodes". Los nodes de la actividad enumeran ids que no están en la roadNetwork seleccionada, o la lista está vacía. Vuelve a elegir los nodos tras editar la red.

"navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges." El NPC no puede caminar hasta el nodo. Recalcula las aristas de la red de caminos y comprueba el terreno entre los nodos.

La escolta no empieza por sí sola. El jugador debe estar en la audiencia del objetivo (la misión activa y los criteria del objetivo verdaderos), en el mismo mundo que el primer nodo y a startRadius de él. En caso contrario, inícialo con Escort Start. El NPC solo aparece cuando el jugador está a spawnRadius del primer nodo.

La escolta se reinicia de inmediato. El jugador está más lejos de guardRadius durante más tiempo que loseToleranceSec, o el NPC está muriendo por los golpes de los mobs. Aumenta el radio o la tolerancia, reduce mobHitDamage o activa invulnerable.

El NPC se detiene en cada nodo y no continúa. Es lo previsto: espera a Escort Next en cada checkpoint.

Todas las misiones temporales están ocultas. La definición solo está activa en sus daysOfWeek, entre startTime y endTime, y cuando cronExpression coincide. Compruébalos, y también el límite maxCompleted.

Extensiones relacionadas​

  • QuestCodex: brújula y camino hacia los waypoints de la escolta.
  • UiCore: indicadores de estado de misión sobre los NPC (npc_status_override).