Zum Hauptinhalt springen

QuestPlus

NPCs entlang eines Straßennetzes eskortieren, ein täglich wechselnder Questpool und ein Kampfstatus-Fakt.

Privatv0.0.2Quests & Story
BenötigtTypeWriter0.9.0-beta-177 (BTC build)Quest (TypeWriter extension)Basic (TypeWriter extension)RoadNetwork (TypeWriter extension)Entity (TypeWriter extension)QuestCodex (TypeWriter extension)optional

Für das BornToCraft-Netzwerk entwickelt. Diese Erweiterung ist zu Referenzzwecken dokumentiert und wird nicht verteilt.

Überblick​

QuestPlus erweitert die TypeWriter-Erweiterung Quest um ein Eskort-Objective, eine tägliche Rotation von Quests und einen Kampfstatus-Fact. Bei einer Eskorte läuft ein NPC entlang eines Wegenetzes von Checkpoint zu Checkpoint, und der Spieler muss ihn am Leben halten und in der Nähe bleiben. Eine temporäre Quest-Definition entscheidet, wann eine Gruppe von Quests verfügbar ist und welche Quests für den Tag ausgewählt werden.

Eskorten verwenden die Erweiterungen Quest, Basic, RoadNetwork und Entity: Die Route stammt aus einem Wegenetz, der NPC ist eine Entity-Instanz, und der Kompass oder Pfadstrom für den Spieler kommt vom Quest-Kompass von QuestCodex, weil das Eskort-Objective auffindbar ist.

Quest-Statusanzeigen über NPC-Köpfen (npc_status_override) sind nicht Teil von QuestPlus. Sie werden von UiCore und seinen Nameplates bereitgestellt.

Funktionen​

  • Eskort-Objective — ein NPC folgt einer Route aus Wegknoten, pausiert an jedem Checkpoint und muss das Ziel erreichen.
  • Regeln für Fehlschlag und Zurücksetzen — der Spieler muss innerhalb eines Schutzradius bleiben, der NPC kann von Mobs verletzt werden, und ein Zeitlimit kann gelten.
  • Checkpoint-Trigger — Trigger für Start, Checkpoint, verloren, wiedergefunden, Zurücksetzen, Abschluss und Fehlschlag sowie Hinterhalt-Trigger pro Checkpoint.
  • Eskort-Anzeige — optionales Scoreboard und optionale Bossbar mit Checkpoint, Zeit und Leben.
  • Eskort-Aktionen — eine Eskorte aus jeder Sequence starten, vorrücken lassen, zurücksetzen und stoppen.
  • Temporäre Quests — ein rotierender Pool: Verfügbarkeit nach Wochentag, Uhrzeit und Cron, eine Anzahl täglich ausgewählter Quests und ein Abschlusslimit.
  • Kampfstatus — ein Fact, der einige Sekunden lang 1 ist, nachdem der Spieler getroffen hat oder getroffen wurde.
  • Ausblendbare Objectives — ein Objective ausblenden, bis seine Quest verfolgt wird.
  • Platzhalter — Eskort-Fortschritt, -Leben und -Zeit sowie die Quests des Tages mit einem Countdown bis zur nächsten Rotation.

Installation​

  1. Installiere die TypeWriter-Erweiterungen Quest, Basic, RoadNetwork und Entity, die QuestPlus als Abhängigkeiten deklariert.
  2. Optional: Installiere QuestCodex, um dem Spieler Eskort-Waypoints anzuzeigen.
  3. Lege die QuestPlus-JAR in plugins/Typewriter/extensions/ ab und starte den Server neu.
  4. Baue mit der RoadNetwork-Erweiterung ein Wegenetz für deine Eskortroute, siehe Erste Schritte.

Erste Schritte​

Erstelle eine Eskort-Mission:

  1. Erstelle im TypeWriter-Web-Panel mit der RoadNetwork-Erweiterung ein Wegenetz und platziere die Knoten, die dein NPC passieren muss. Halte die Kanten aktuell: Kann der Pfad nicht berechnet werden, erreicht der NPC seinen Knoten nicht.
  2. Füge einen Path Escort Activity-Entry hinzu. Setze roadNetwork, liste die Knoten-IDs in nodes in Laufreihenfolge auf und setze idleActivity auf das, was der NPC tut, sobald die Route beendet ist.
  3. Erstelle eine Entity-Instanz für deinen Eskort-NPC und setze ihre activity auf diese Path Escort Activity. Die Instanz muss zu einer aktiven Audience gehören, da QuestPlus das Display verwendet, das TypeWriter bereits dafür ausführt.
  4. Füge einen Escort Objective-Entry hinzu. Setze quest, npc (deine Entity-Instanz) und display. Passe maxHealth, guardRadius, loseToleranceSec, spawnRadius und startRadius sowie optional globalTimeLimitSec an.
  5. Verknüpfe die Trigger: onEscortComplete mit dem, was bei Erfolg geschehen soll (zum Beispiel eine Aktion, die einen Fact für den nächsten Quest-Schritt setzt), und onEscortFail mit der Fehlerbehandlung.
  6. Lass den Spieler die Eskorte erreichen. Die Eskorte startet von selbst, wenn ein Spieler in der Audience des Objectives in den startRadius des ersten Knotens kommt. Um sie stattdessen aus einem Dialog oder Event zu starten, verwende Escort Start mit objective.
  7. Verwende jedes Mal, wenn der NPC an einem Checkpoint anhält, Escort Next (zum Beispiel nach einer Dialogzeile oder einem abgewehrten Hinterhalt), damit er zum nächsten läuft.
  8. Veröffentliche und teste: Der NPC erscheint in der Nähe des ersten Knotens, und die Eskorte beginnt, wenn du in seinen startRadius kommst.

Verwende /escort debug resolve <objective>, um zu prüfen, dass der erste Knoten und die Radien aufgelöst werden.

Hinterhalte

Fülle ambushes mit einem checkpointIndex und triggers. Erreicht die Eskorte diesen Checkpoint, werden die Trigger einmal ausgelöst, zum Beispiel um mit einer anderen Erweiterung Mobs zu spawnen.

Funktionsweise​

Wenn eine Eskorte startet, erstellt QuestPlus für den NPC einen unsichtbaren Lebenshalter, den nur der eskortierte Spieler sehen kann. Mobs im guardRadius in der Nähe nehmen ihn ins Visier. Der NPC verliert durch Mob-Treffer Leben (mobHitDamage) und kann sich regenerieren (regenPerSec). Spieler können ihn nicht verletzen. Bei aktiviertem invulnerable ist er vollständig geschützt.

Der NPC läuft zum nächsten Wegknoten, der als erreicht gilt, sobald der NPC innerhalb von nodeReachRadius um ihn ist, und wartet dann, bis eine Escort Next-Aktion ihn freigibt. Das Erreichen eines Checkpoints löst onCheckpoint und die passenden Hinterhalt-Trigger aus. Nach dem letzten Knoten wird onEscortComplete ausgelöst.

Zurücksetzen. Die Eskorte geht mit vollem NPC-Leben zu ihrem letzten Checkpoint zurück, wenn der NPC oder der Spieler stirbt oder wenn der Spieler loseToleranceSec Sekunden lang weiter als guardRadius entfernt bleibt. onEscortLost wird ausgelöst, wenn der Spieler außer Reichweite geht, und onEscortRecovered, wenn er zurückkommt. onEscortReset wird beim Zurücksetzen ausgelöst.

Fehlschlag. Die Eskorte schlägt fehl, wenn globalTimeLimitSec abläuft, wenn der Spieler den Server verlässt, wenn der NPC verschwindet oder bei Escort Stop. onEscortFail wird ausgelöst.

Eine Escort Reset-Aktion bricht die Eskorte ohne Fehlschlag-Trigger ab.

Temporäre Quests​

Eine Temporary Quest Definition ist ein Audience-Filter. Ihre children werden Spielern nur angezeigt, solange sie aktiv ist:

  • Verfügbarkeit. Sie ist an den aufgeführten daysOfWeek aktiv, zwischen startTime und endTime (HH:mm), falls gesetzt, und wenn cronExpression zutrifft, falls gesetzt.
  • Tägliche Auswahl. Jeden Tag werden questsPerDay Quests zufällig aus quests ausgewählt. Die Auswahl ist für einen bestimmten Tag und Entry deterministisch, wechselt bei resetTime und wird in einem über artifact referenzierten Temporary Quest Artifact gespeichert.
  • Abschlusslimit. Bei maxCompleted über 0 sehen Spieler, die so viele der Tagesquests abgeschlossen haben, die Children nicht mehr. Der Zähler wird im Artifact gespeichert und mit dem Tag zurückgesetzt.

Die tägliche Auswahl wird über Platzhalter und die Abschlusszählung bereitgestellt. Der Filter selbst blendet die nicht ausgewählten Quests nicht aus: Verwende die Platzhalter in deinen Menüs oder gestalte die Verfügbarkeit deiner Quests so, dass nur die Quests erreichbar sind, die du anzeigst.

Kampfstatus​

Der Combat Status Fact ist 1, solange der Spieler innerhalb der letzten thresholdSeconds (standardmäßig 10) eine Entity getroffen hat oder von einer getroffen wurde, sonst 0. Verwende ihn in Criteria, um Schnellreisen, Dialoge oder Logout-Belohnungen während eines Kampfes zu blockieren. Er erfasst nur Kämpfe, an denen ein Spieler beteiligt ist.

Platzhalter​

MiniPlaceholders-Tags für MiniMessage-Text.

Eskorte, für den eskortierten Spieler. Ist keine Eskorte aktiv, sind die Werte neutral.

PlatzhalterGibt zurück
<escort_checkpoint>Aktueller Checkpoint als n/total, 0/0, wenn inaktiv.
<escort_time>Verstrichene Sekunden oder verbleibende Sekunden, wenn das Objective ein Zeitlimit hat.
<escort_health>, <escort_health_max>Leben des Eskort-NPCs und sein Maximum, 0, wenn inaktiv.
<escort_is>1, wenn eine Eskorte aktiv ist.
<escort_is_max>1, wenn der letzte Checkpoint erreicht ist.

Temporäre Quests, wobei id die ID des Temporary-Quest-Definition-Entries ist.

PlatzhalterGibt zurück
<tempquest_active_quests:id>IDs der heutigen Quests, durch Komma getrennt.
<tempquest_time_remaining:id>Zeit bis zur nächsten Rotation als HH:MM:SS.
<tempquest_quests_per_day:id>Anzahl der pro Tag ausgewählten Quests.
<tempquest_quest_name:id:n>Anzeigename der n-ten Quest des Tages, ab 1.
<tempquest_quest_desc:id:n>Anzeigetext der n-ten Quest.

Befehle​

BefehlBeschreibung
/escort debug start <objective>Startet eine Eskorte für dich selbst (nur Spieler).
/escort debug stopStoppt deine Eskorte.
/escort debug skipnodeLässt deine Eskorte zum nächsten Checkpoint vorrücken.
/escort debug scanFührt den automatischen Start-Scan jetzt aus.
/escort debug resolve <objective>Gibt den ersten Knoten und die Radien eines Objectives aus.

<objective> ist die ID oder der Name eines Escort Objective. Der Befehl benötigt questplus.escort.debug.

Berechtigungen​

BerechtigungGewährt
questplus.escort.debug/escort debug. Sie hat keinen Standardwert, daher haben sie nur Operatoren, sofern du sie nicht vergibst.

Entries​

9 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen4
Ziele1
Fakten1
Zielgruppen1
Aktivitäten1
Artefakte1

Fehlerbehebung​

Der NPC erscheint nie. Das Log meldet „npc instance missing“ oder „has no display registered in the AudienceManager“. Der npc des Objectives muss eine Entity-Instanz sein, die zu einer aktiven Audience gehört. Führe /escort debug resolve <objective> aus und prüfe, ob die Instanz existiert.

Das Log meldet „is missing a path_escort_activity“. Die als npc verwendete Entity-Instanz muss eine Path Escort Activity als activity haben.

„node ... not found“ oder „has no nodes“. Die nodes der Activity listen IDs auf, die nicht im ausgewählten roadNetwork stehen, oder die Liste ist leer. Wähle die Knoten nach dem Bearbeiten des Netzes erneut aus.

„navigation ... ended N blocks away from the node. The road network could not produce a walkable path; recalculate its edges.“ Der NPC kann nicht zum Knoten laufen. Berechne die Kanten des Wegenetzes neu und prüfe das Gelände zwischen den Knoten.

Die Eskorte startet nicht von selbst. Der Spieler muss in der Audience des Objectives sein (Quest aktiv und criteria des Objectives wahr), in derselben Welt wie der erste Knoten und im startRadius davon. Andernfalls starte sie mit Escort Start. Der NPC spawnt nur, wenn sich der Spieler im spawnRadius des ersten Knotens befindet.

Die Eskorte wird sofort zurückgesetzt. Der Spieler ist länger als loseToleranceSec weiter als guardRadius entfernt, oder der NPC stirbt an Mob-Treffern. Erhöhe den Radius oder die Toleranz, senke mobHitDamage oder aktiviere invulnerable.

Der NPC hält an jedem Knoten an und läuft nicht weiter. Das ist so gewollt: Er wartet an jedem Checkpoint auf Escort Next.

Temporäre Quests sind alle verborgen. Die Definition ist nur an ihren daysOfWeek, zwischen startTime und endTime und wenn cronExpression zutrifft aktiv. Prüfe diese sowie das Limit maxCompleted.

Verwandte Erweiterungen​

  • QuestCodex — Kompass und Pfad zu den Eskort-Waypoints.
  • UiCore — Quest-Statusanzeigen über NPCs (npc_status_override).