Inhaltsverzeichnis
Grundsätzlich kann Flow überall dort verwendet werden wo auch Action API Blöcke beginnen. Dabei ist es wichtig dass alle Flow Statements in einer Liste geschrieben werden. Hier als Beispiel ein Flow Statement im Trigger Block einer Quest. Wichtig dabei ist, dass alle Flow Statements immer in Hochkomma geschrieben werden. Die Ausnahme bei sind Delays, welche kein Hochkomma benötigen.
In diesem Beispiel kann man auch schon gut die unterschiedlichen Flow Typen erkennen die sich direkt in den Action API Typen widerspiegeln: Trigger, Requirement und Action.
Folgende Flow Typen stehen dabei zur Auswahl:
Im folgenden werden die einzelnen Flow Typen noch näher beleuchtet und ihre Kombinations Möglichkeiten aufgezeigt.
Alles anzeigen
Alles anzeigen
Beispiel für ein Delay:
Eine normale Antwort wird mit Doppelpunkt und in Anführungsstrichen angegeben:
In diesem Beispiel kann man auch schon gut die unterschiedlichen Flow Typen erkennen die sich direkt in den Action API Typen widerspiegeln: Trigger, Requirement und Action.
Flow Typen
Je nach dem in welchem Script Block man Flow einsetzt können unterschiedliche Typen verwendet werden. Jeder Flow Typ beginnt mit einem eindeutigen Zeichen und wird von Config Optionen gefolgt.Folgende Flow Typen stehen dabei zur Auswahl:
@
: Trigger, z.B.:@host.interact host:this.example
!
: Action, z.B.:!player.tp-coords world:azuran, x:12, y:16, z:-77
?
: Requirement, z.B.:?player.has-item item:"Robe des Wanderers"
~
: Delay, z.B.:~2s
,~1min
oder in Ticks10
:
: Answer, z.B.::"Antwort Möglichkeit 1"
oder eine Antwort mit Input Variable:"Antwort mit Input"->var1
Im folgenden werden die einzelnen Flow Typen noch näher beleuchtet und ihre Kombinations Möglichkeiten aufgezeigt.
Trigger
Trigger können nur in einem Trigger Block, z.B. bei Quests oder Achievements verwendet werden. Einem Trigger können Actions folgen und außerdem kann ein Trigger auch voran gestellte Requirements besitzen die die Ausführung des Triggers weiter einschränken. Jeder Trigger bildet dabei einen eigenen Block mit Actions und die Requirements eines Triggers werden bei jedem aulösen in der entsprechenden Reihenfolge geprüft.Quellcode: trigger1.yml
- trigger:
- beispiel1:
- # der Trigger wird nur ausgelöst wenn der Spieler am Leben ist
- - '?player.is-alive'
- # Wenn der Spieler sich in einem Radius von 5 an der Position befindet wird der Trigger ausgelöst
- # Der Trigger hat einen Cooldown von 1 Minute und wird somit nur einmal in der Minute ausgelöst
- - '@player.location(cooldown:1min) 128,75,-222,world,5' # genaueres zu der Config Syntax steht weiter unten
- - '!text.warn "Verlasse diesen Ort innerhalb einer Minute und kehre nicht zurück!"'
- # zähle bei jedem auslösen des triggers eins hoch
- - '?count(persistant:true, count:2)'
- # wenn der spieler doch ein zweites mal den Ort betritt wird er getötet
- - '!player.kill'
- # verzögere die Ausführung der nächsten Action um 2s
- - ~2s
- # sendet dem Spieler eine Nachricht mit dem Namen des NPCs Karl
- - '!text "Ich habe euch gewarnt!",Karl'
- # hier beginnt ein neuer Trigger Block und die delays und Requirements von dem vorherigen Block gelten nicht mehr
- - '@host.interact this.karl'
- - '!conversation.start host:this.karl, conv:this.example'
Action
Eine Action kann in allen Blöcken verwendet werden und findet somit am meisten Anwendung. Eine Action kann außerdem Requirements voran gestellt haben die nacheinander geprüft werden. In den anderen Beispielen zu Trigger und Requirements gibt es zusätzliche noch einige Beispiele für die Verwendung von Actions.Quellcode: action1.yml
- actions:
- flow:
- # gibt dem Spieler 5x das Custom Item mit der ID 1337
- - '!player.give.item rci1337, 5'
- # prüft ob der spieler die quest example-quest abgeschlossen hat
- - '?quest.completed ../../example/example-quest'
- # gibt dem Spieler nur 5000 EXP wenn die "Example" Quest abgeschlossen wurde
- - '!rcskills.exp.add 5000'
- # prüft ob der Spieler sich in der aktuellen Welt an den Koordinaten befindet
- - '?player.location 24,65,-1337'
- # gibt dem Spieler 1 Gold 22 Silber und 5 Kupfer WENN sich der Spieler an der Position befindet UND die Quest "Example" abgeschlossen hat
- - '!player.give.money 1g22s5k'
Requirements
Requirements werden vermutlich in den meisten Plugins eingesetzt und haben daher den weitesten Anwendungsbereich. Auch hier kann in allen Plugins die Flow Syntax verwendet werden. In den Action und Trigger Beispielen finden sich bereits genügend Beispiele für die Nutzung. Zu beachten gibt es dabei nur dass man beicount
Requirements darauf achten muss wie oft und wodurch das Requirements geprüft wird um den richtigen Count Wert zu erhalten.Delay
Ein Delay kann nur vor Actions verwendet werden und gilt nicht über den Login und Logout eines Spielers hinaus, daher sollten hier am besten nur sehr geringe Werte verwendet werden. Um Actions und Triggern einen längerencooldown
zu geben sollte die cooldown
Variable befüllt werden, z.B.: @host.interact(cooldown:1d)
oder !player.kill(cooldown:1y64d10h2m1s10)
. Wenn kein Buchstabe mitgegeben wird ist die Angabe in Ticks.Beispiel für ein Delay:
~30s
Answer
Für eine einheitliche Syntax ist es auch möglich Antworten in Conversations 2.0 als Flow anzugeben. Für Input Antworten gibt es dabei eine Spezielle Syntax die eine Variable hinter dem Text erwartet::"Antwort Möglichkeit mit Variable"->varname1
.Eine normale Antwort wird mit Doppelpunkt und in Anführungsstrichen angegeben:
:"Normale Antwort"
. Antworten können Requirements besitzten und von Actions mit Requirements gefolgt werden.Flow Config Parser
Jede Flow Action kann beliebige Parameter nach der Typ Definition annehmen. Dabei ist es möglich Positions Parameter und Named Paramter zu mischen, allerdings muss man sich immer bewusst sein dass die Position nur weiter gezählt wird wenn man Positions Paramter verwendet.55.435 mal gelesen