Aller au contenu principal

QuestPlus

Escortez des PNJ le long d'un réseau routier, une réserve de quêtes quotidiennes en rotation et un fait de statut de combat.

Privéesv0.0.2Quêtes et narration
NécessiteTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)Basic (TypeWriter extension)RoadNetwork (TypeWriter extension)Entity (TypeWriter extension)QuestCodex (TypeWriter extension)facultatif

Conçue pour le réseau BornToCraft. Cette extension est documentée à titre de référence et n'est pas distribuée.

Présentation​

QuestPlus étend l'extension Quest de TypeWriter avec un objectif d'escorte, une rotation quotidienne de quêtes et un fact de statut de combat. Lors d'une escorte, un PNJ marche de checkpoint en checkpoint le long d'un réseau de routes et le joueur doit le garder en vie et rester près de lui. Une définition de quête temporaire décide quand un ensemble de quêtes est disponible et quelles quêtes sont tirées pour la journée.

Les escortes utilisent les extensions Quest, Basic, RoadNetwork et Entity : l'itinéraire provient d'un réseau de routes, le PNJ est une instance d'entité, et la boussole ou le flux de chemin du joueur provient de la boussole Quest de QuestCodex, car l'objectif d'escorte est localisable.

Les indicateurs de statut de quête au-dessus de la tête des PNJ (npc_status_override) ne font pas partie de QuestPlus. Ils sont fournis par UiCore et ses nameplates.

Fonctionnalités​

  • Objectif d'escorte — un PNJ suit un itinéraire de nœuds de route, fait une pause à chaque checkpoint et doit atteindre l'arrivée.
  • Règles d'échec et de réinitialisation — le joueur doit rester dans un rayon de garde, le PNJ peut être blessé par des mobs, et une limite de temps peut s'appliquer.
  • Triggers de checkpoint — triggers de début, de checkpoint, de perte, de récupération, de réinitialisation, de réussite et d'échec, plus des triggers d'embuscade par checkpoint.
  • Affichage de l'escorte — scoreboard et boss bar facultatifs montrant le checkpoint, le temps et la santé.
  • Actions d'escorte — démarrez, faites avancer, réinitialisez et arrêtez une escorte depuis n'importe quelle séquence.
  • Quêtes temporaires — un pool en rotation : disponibilité par jour de la semaine, heures et cron, un nombre de quêtes tirées chaque jour, et une limite d'achèvements.
  • Statut de combat — un fact qui vaut 1 pendant quelques secondes après que le joueur a frappé ou a été frappé.
  • Objectifs masquables — masquez un objectif jusqu'à ce que sa quête soit suivie.
  • Placeholders — progression, santé et temps de l'escorte, et quêtes du jour avec un compte à rebours jusqu'à la prochaine rotation.

Installation​

  1. Installez les extensions TypeWriter Quest, Basic, RoadNetwork et Entity que QuestPlus déclare comme dépendances.
  2. Facultatif : installez QuestCodex pour montrer les waypoints d'escorte au joueur.
  3. Placez le JAR de QuestPlus dans plugins/Typewriter/extensions/ et redémarrez le serveur.
  4. Construisez un réseau de routes avec l'extension RoadNetwork pour l'itinéraire de votre escorte, voir Premiers pas.

Premiers pas​

Créez une mission d'escorte :

  1. Dans le panneau web de TypeWriter, créez un réseau de routes avec l'extension RoadNetwork et placez les nœuds que votre PNJ doit traverser. Gardez les arêtes à jour : si le chemin ne peut pas être calculé, le PNJ n'atteint pas son nœud.
  2. Ajoutez une entrée Path Escort Activity. Définissez roadNetwork, listez les identifiants de nœuds dans nodes dans l'ordre de marche, et définissez idleActivity sur ce que fait le PNJ une fois l'itinéraire terminé.
  3. Créez une instance d'entité pour votre PNJ d'escorte et définissez son activity sur cette Path Escort Activity. L'instance doit appartenir à une audience active, car QuestPlus utilise l'affichage que TypeWriter exécute déjà pour elle.
  4. Ajoutez une entrée Escort Objective. Définissez quest, npc (votre instance d'entité) et display. Réglez maxHealth, guardRadius, loseToleranceSec, spawnRadius et startRadius, ainsi que globalTimeLimitSec en option.
  5. Reliez les triggers : onEscortComplete à ce qui doit se passer en cas de réussite (par exemple une action qui définit un fact pour l'étape de quête suivante) et onEscortFail à la gestion de l'échec.
  6. Laissez le joueur rejoindre l'escorte. L'escorte démarre d'elle-même lorsqu'un joueur de l'audience de l'objectif arrive à moins de startRadius du premier nœud. Pour la démarrer plutôt depuis un dialogue ou un événement, utilisez Escort Start avec objective.
  7. Chaque fois que le PNJ s'arrête à un checkpoint, utilisez Escort Next (par exemple après une réplique de dialogue ou une embuscade éliminée) pour le faire marcher jusqu'au suivant.
  8. Publiez et testez : le PNJ apparaît près du premier nœud, et l'escorte commence lorsque vous arrivez à moins de startRadius de celui-ci.

Utilisez /escort debug resolve <objective> pour vérifier que le premier nœud et les rayons sont résolus.

Embuscades

Remplissez ambushes avec un checkpointIndex et des triggers. Lorsque l'escorte atteint ce checkpoint, les triggers se déclenchent une fois, par exemple pour faire apparaître des mobs avec une autre extension.

Fonctionnement​

Lorsqu'une escorte démarre, QuestPlus crée pour le PNJ un porteur de santé invisible que seul le joueur escorté peut voir. Les mobs proches dans le guardRadius le ciblent. Le PNJ perd de la santé à cause des coups de mobs (mobHitDamage) et peut en régénérer (regenPerSec). Les joueurs ne peuvent pas le blesser. Il est entièrement protégé si invulnerable est activé.

Le PNJ marche jusqu'au nœud de route suivant, qui est considéré comme atteint dès que le PNJ se trouve à moins de nodeReachRadius de celui-ci, puis attend qu'une action Escort Next le libère. Atteindre un checkpoint déclenche onCheckpoint et les triggers d'embuscade correspondants. Après le dernier nœud, onEscortComplete se déclenche.

Réinitialisation. L'escorte retourne à son dernier checkpoint, avec toute la santé du PNJ, lorsque le PNJ meurt ou que le joueur meurt, ou lorsque le joueur reste plus loin que guardRadius pendant loseToleranceSec secondes. onEscortLost se déclenche lorsque le joueur sort de la portée et onEscortRecovered lorsqu'il revient. onEscortReset se déclenche lors d'une réinitialisation.

Échec. L'escorte échoue lorsque globalTimeLimitSec est écoulé, lorsque le joueur quitte le serveur, lorsque le PNJ disparaît, ou lors d'un Escort Stop. onEscortFail se déclenche.

Une action Escort Reset annule l'escorte sans déclencher de trigger d'échec.

Quêtes temporaires​

Une Temporary Quest Definition est un filtre d'audience. Ses children ne sont montrés aux joueurs que lorsqu'elle est active :

  • Disponibilité. Elle est active les daysOfWeek listés, entre startTime et endTime (HH:mm) s'ils sont définis, et lorsque cronExpression correspond si elle est définie.
  • Tirage quotidien. questsPerDay quêtes sont choisies au hasard parmi quests chaque jour. Le choix est déterministe pour un jour et une entrée donnés, change à resetTime, et est sauvegardé dans un Temporary Quest Artifact référencé par artifact.
  • Limite d'achèvements. Avec maxCompleted supérieur à 0, les joueurs qui ont terminé autant de quêtes du jour ne voient plus les enfants. Le compteur est sauvegardé dans l'artifact et se réinitialise avec le jour.

Le tirage quotidien est exposé via des placeholders et le comptage des achèvements. Le filtre lui-même ne masque pas les quêtes qui n'ont pas été tirées : utilisez les placeholders dans vos menus, ou concevez la disponibilité de vos quêtes de sorte que seules celles que vous affichez soient accessibles.

Statut de combat​

Le Combat Status Fact vaut 1 tant que le joueur a frappé une entité ou été frappé par l'une d'elles au cours des thresholdSeconds dernières secondes (10 par défaut), et 0 sinon. Utilisez-le dans des critères pour bloquer le voyage rapide, les dialogues ou les récompenses de déconnexion pendant un combat. Il ne suit que les combats impliquant un joueur.

Placeholders​

Balises MiniPlaceholders pour les textes MiniMessage.

Escorte, pour le joueur escorté. Lorsqu'aucune escorte n'est active, les valeurs sont neutres.

PlaceholderRenvoie
<escort_checkpoint>Checkpoint actuel sous la forme n/total, 0/0 lorsqu'inactive.
<escort_time>Secondes écoulées, ou secondes restantes lorsque l'objectif a une limite de temps.
<escort_health>, <escort_health_max>Santé du PNJ d'escorte et son maximum, 0 lorsqu'inactive.
<escort_is>1 lorsqu'une escorte est active.
<escort_is_max>1 lorsque le dernier checkpoint est atteint.

Quêtes temporaires, où id est l'identifiant de l'entrée Temporary Quest Definition.

PlaceholderRenvoie
<tempquest_active_quests:id>Identifiants des quêtes du jour, séparés par une virgule.
<tempquest_time_remaining:id>Temps avant la prochaine rotation sous la forme HH:MM:SS.
<tempquest_quests_per_day:id>Nombre de quêtes tirées par jour.
<tempquest_quest_name:id:n>Nom d'affichage de la n-ième quête du jour, à partir de 1.
<tempquest_quest_desc:id:n>Texte d'affichage de la n-ième quête.

Commandes​

CommandeDescription
/escort debug start <objective>Démarre une escorte pour vous-même (joueur uniquement).
/escort debug stopArrête votre escorte.
/escort debug skipnodeFait avancer votre escorte jusqu'au checkpoint suivant.
/escort debug scanExécute immédiatement le balayage de démarrage automatique.
/escort debug resolve <objective>Affiche le premier nœud et les rayons d'un objectif.

L'<objective> est l'identifiant ou le nom d'un Escort Objective. La commande nécessite questplus.escort.debug.

Permissions​

PermissionAutorise
questplus.escort.debug/escort debug. Elle n'a pas de valeur par défaut ; seuls les opérateurs la possèdent donc, sauf si vous l'accordez.

Entrées​

9 entrées, générées depuis la source de l'extension.

Actions4
Objectifs1
Faits1
Audiences1
Activités1
Artefacts1

Dépannage​

Le PNJ n'apparaît jamais. Le journal indique « npc instance missing » ou « has no display registered in the AudienceManager ». Le npc de l'objectif doit être une instance d'entité appartenant à une audience active. Exécutez /escort debug resolve <objective> et vérifiez que l'instance existe.

Le journal indique « is missing a path_escort_activity ». L'instance d'entité utilisée comme npc doit avoir une Path Escort Activity comme activity.

« node ... not found » ou « has no nodes ». Les nodes de l'activité listent des identifiants qui ne figurent pas dans le roadNetwork sélectionné, ou la liste est vide. Sélectionnez de nouveau les nœuds après avoir modifié le réseau.

« navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges. » Le PNJ ne peut pas marcher jusqu'au nœud. Recalculez les arêtes du réseau de routes et vérifiez le terrain entre les nœuds.

L'escorte ne démarre pas toute seule. Le joueur doit faire partie de l'audience de l'objectif (la quête active et les criteria de l'objectif vrais), se trouver dans le même monde que le premier nœud et à moins de startRadius de celui-ci. Sinon, démarrez-la avec Escort Start. Le PNJ n'apparaît que lorsque le joueur est à moins de spawnRadius du premier nœud.

L'escorte se réinitialise immédiatement. Le joueur est plus loin que guardRadius depuis plus longtemps que loseToleranceSec, ou le PNJ est en train de mourir à cause des coups de mobs. Augmentez le rayon ou la tolérance, diminuez mobHitDamage, ou activez invulnerable.

Le PNJ s'arrête à chaque nœud et ne continue pas. C'est voulu : il attend Escort Next à chaque checkpoint.

Toutes les quêtes temporaires sont masquées. La définition n'est active que ses daysOfWeek, entre startTime et endTime, et lorsque cronExpression correspond. Vérifiez-les, ainsi que la limite maxCompleted.

Extensions associées​

  • QuestCodex — boussole et chemin vers les waypoints d'escorte.
  • UiCore — indicateurs de statut de quête au-dessus des PNJ (npc_status_override).