Questive Dokumentation 2-0

Aus Neostralis Wiki
Zur Navigation springen Zur Suche springen

Wie Quests eig. funktionieren

Questcode wird ausgeführt, wenn der Spieler einem Villager ein Item gibt und dieser bereit ist, dieses zu nehmen und der Spieler in keiner aktiven Quest ist. Damit dies geschieht muss sich der Villager in einer Region befinden, bei der eine Kiste und ein Script definiert sind. Droppt der Spieler also das Item zum Villager, so wird erstmals dieses Script der Region ausgeführt. Das Regionscript entscheidet, was als nächstes geschieht. Es können drei Fälle eintreten:

- Villager nimmt das Item ohne Kommentar
- Villager gibt dem Spieler eine Quest
- Villager sagt dem Spieler, dass keine Quest verfügbar ist

Bevor eine Quest vergeben wird, wird von jeder Quest das script-check ausgeführt, das zurückgibt, ob die Quest überhaupt vergeben werden kann:

  • Sind genügend Items in den Dorfkisten, hat der Spieler genügend Erfahrung?

Gibt das Regionscript eine Quest zurück, so wird diese erzeugt und das script-get der Quest wird ausgeführt. In diesem werden einige Vorbereitungen getroffen: Festlegung der Schritte, Laden von Ereignissen, Austeilen von Items. Das Herzstück einer Quest ist das script-quest oder auch script-main oder q-main genannt. Dieses wird jedes Mal ausgeführt, wenn ein geladenes Ereignis von einem Spieler in der Quest ausgelöst wird. Z.B. Ein Spieler zerstört einen Block, gibt einem Villager etwas, tötet einen Mob. Schließlich entscheidet dieses Script, ob und wann die Quest beendet wird. Außerdem gibt es noch das script-term. Dieses wird ausgeführt, wenn die Quest vernichtet wird, wie z.B. durch /giveup, /q kick, /q term, Serverneustart oder Tod des Spielers. Dieses Script kann dazu verwendet werden, unbenutzte Items wieder zurückzunehmen.

Abkürzungen und Begriffe

- A: - Alias, anderer Name, der verwendet werden kann
- R: - Rückgabewert
- S: - Siehe Kapitel
- loc – Location, Ort
- Entity – Alles bewegliche in Minecraft (Mobs, Minecarts, Pfeile)
- Login – Der exakte Name eines Spielers
- Stage – Fortschritt in einer Quest
- Script – Codeabschnitt
- Event – Ereignis (Block abbauen, setzen, Mob töten, Item droppen)
- Variable – Unter einem Namen innerhalb einer Quest gespeicherter Wert
- Methode – Funktion, die dem Server Anweisungen gibt und meist einen Wert zurück gibt (Quest beenden, Item droppen, Mob spawnen, Zahlen addieren)

Wichtige Befehle

- /cp re (A: /cp reload)– Lädt alle Regionen neu
- /cp an (A: /cp analyze) – Zeigt dir, in welchen Regionen du dich befindest
- /q see (A: /quest see) – Zeigt dir, welche Quests gerade aktiv sind
- /q re – Lädt die Quests neu. Aktive Quests von Spielern werden nicht aktualisiert.
- /q q [code] – Führt Code in einer Quest aus. Das kann zum Fehlerbeheben sehr nützlich sein.
- /q v name – Zeigt dir den Wert einer Variable in einer Quest an.
- /q get [login] – Bringt einen in die aktive Quest eines Spielers. Quests kann man nicht gezielt bekommen, außer, man ändert das Regionscript entsprechend ab.

Grundlegende Syntax

Questive ist eine sehr einfach gehaltene „Programmiersprache“, die einen für Quests ausreichenden Funktionsumfang bietet. Variablen werden mit $ gekennzeichnet, Funktionen mit % und Funktionsaufrufe werden mit ; beendet. Es gibt einige wesentliche Schlüsselwörter wie

- if
- else,
- label
- goto
- =
- {
- }
- return

Das regelmäßige Setzen von Whitespaces (also Leerzeichen und Zeilenumbrüche) ist wichtig, wobei zwischen Leerzeichen und Zeilenumbrüchen nicht unterschieden wird. Questive kommt auch ganz ohne Anführungszeichen aus, da Wörter ohne $ und % direkt als Zeichenkette interpretiert werden.


Variablen und Funktionen

%msg questers Hallo Welt!;

Hier wird die Funktion %msg aufgerufen, die die Nachricht „Hallo Welt!“ an alle Spieler in der Quest schickt. Es können auch Variablen verwendet werden.

$nachricht = Hallo;
%msg questers $nachricht;

Wird eine nichtgesetzte Variable angeführt, so wird diese als „“ interpretiert. Variablen gehen nach dem Ausführen von Code nicht verloren und lassen sich beim nächsten Codeaufruf wieder abrufen. S. Datentypen Funktionen können auch ineinander verschachtelt werden, wichtig dabei sind die Leerzeichen hinter den Strichpunkten.

%msg $player-login Ergebnis: %add 2 $zahl; ;

Funktionen können auch Werte zurückgeben. Diese können von einer anderen Funktion als Argument verwendet werden oder auch in Variablen gespeichert werden.

$ergebnis = %sub 100 $zahl;

If-Anweisungen

Wie in jeder Programmiersprache sind If-Anweisungen unentbehrlich. So kann ein Stück Code nur ausgeführt werden, wenn eine Bedingung stimmt.

if $passwort == 123geheim
{
    %msg $login Passwort stimmt!;
}

Soll alternativ Code ausgeführt werden, wenn die Bedingung nicht stimmt, so kann eine Else Anweisung hinzugefügt werden.

if $passwort == 123geheim
{
    %msg $login Passwort stimmt!;
}
else
{
    %msg $login Passwort falsch!;
}

Wie bereits gesagt ist das Setzen von Whitespaces sehr wichtig. If Anweisungen können natürlich auch verschachtelt werden. Es können auch Funktionen in der Bedingung aufgerufen werden, wobei unbedingt auf ein ; nach dem Funktionsaufruf geachtet werden muss!

if %distance $player-login $monsterloc; < 10


Vergleichsoperatoren und logische Verknüpfungen

If-Anweisungen können auch etwas komplexer aufgebaut werden. Um zwei Werte zu vergleichen, stehen folgende Operatoren zur Verfügung.

== - Sind beide Werte gleich?
!= - Sind beide Werte nicht gleich?
> - Ist der linke Wert größer?
< - Ist der linke Wert kleiner?
>= - Ist der linke Wert größer oder gleich?
<= - Ist der linke Wert kleiner oder gleich?

Es können auch mehrere Bedingungen zusammengefügt werden.

&& - Logisches Und. Beide Bedingungen müssen erfüllt werden.
|| - Logisches Oder. Zumindest eine der beiden Bedingungen muss erfüllt werden.

Sind mehrere Bedingungen verbunden, so wird von links nach rechts gelesen.

Wahr || Falsch && Wahr → Wahr

wird gelesen als

((Wahr || Falsch) && Wahr) → Wahr
Wahr && Falsch || Falsch → Falsch

wird gelesen als

(Wahr && Falsch) || Falsch) → Falsch


Return

Return hat zwei Funktionen. Erstens beendet es das ausgeführte Script sofort. Und Zweitens kann es auch einen Wert zurückgeben.

%msg questers Hi;
return;
%msg questers Das hier werdet ihr nie lesen.;

Werte können zurückgegeben werden, indem nach dem Return der Wert angeführt wird.

return 1;
return $ergebnis;
return %add 1 2;

Sprungmarken

Label und Goto werden in der Praxis sehr selten verwendet und sie sind meist ein Ersatz für Schleifen.

label name;

setzt eine Sprungmarke,

goto name;

setzt den Zeiger zurück auf diese. Ob die Sprungmarke vor oder hinter dem goto steht, ist egal. Auch wird bei Sprungmarken nicht darauf geachtet, ob sich diese in einer If-Anweisung befindet.

$i = 0;
label start;
%msg questers $i;
$i = %add $i 1;
if $i < 5 { goto start; }

Dieser Code gibt den Spielern die Zahlen von 0 bis 4 aus.

Datentypen

Obwohl es in Questive nur Zeichenketten/Strings gibt, existieren doch einige standardisierte Formationen, die häufig verwendet werden.

Zahl

Eine rationale Zahl. Wird von einer Methode eine Zahl erwartet und es ist etwas anderes gegeben, so wird dies als 0 interpretiert. (z.B %add wort 2; ergibt 2)

Beispiele:
4
0
3.5
-2
-19.95

Boolean

Statt true und false wird schlicht 1 und 0 verwendet. Viele Methoden geben letztere Werte zurück.

Beispiele:
0
1

Location/Ort

Definiert einen Ort in einer Welt genau. Setzt sich aus Weltname, X, Y, Z zusammen, die mit einem Doppelpunkt verbunden werden. Die Koordinaten können sowohl rationale als auch ganze Zahlen sein.

Beispiele:
survival17:-100:64:32
survival17_nether:5165.3:32:-124
survival17_the_end:89:512:0

ItemStack

Definiert einen Stack eines Items. Setzt sich aus Itemmaterial, Datenwert(Durability) und Menge zusammen, die mit Doppelpunkt verbunden werden. Es existiert eine Kurzschreibweise, bei der nur das Material angeführt wird und als Menge 1 und als Datenwert 0 angenommen werden.

Beispiele:
wood_pickaxe:32:1
diamond:0:64
wood:2:16
gold_ingot
nether_star

Listen

In einer Liste lassen sich beliebig viele Zeichenketten speichern, jede ist mit einer Zahl adressiert. Das erste Element hat den Index 0, das letzte die Listenlänge minus eins. Wird ein Element entfernt, so werden die Indizes der nachfolgenden Elemente um 1 niedriger. S. Methoden, Listen

Beispiel:
0 Schwarz
1 Weiß
2 Rot
3 Grün
4 Blau

Maps

Eine Map ist eine Menge aus Elementen, von denen jedes einen einzigartigen Schlüssel und einen beliebigen Wert hat. S. Methoden, Maps

Beispiel: Map namens spieler
SanX Admin
JmX Mod
Stark VIP
Marco Admin
Rover Mod
%mg spieler Stark; liefert VIP

Entity-Id

Jedes Entity, das in einem Event beteiligt ist oder im Code gespawnt wurde, besitzt eine Id. Diese lässt sich verwenden, um das Entity später zu teleportieren oder zu modifizieren.

Leerzeichen und leerer String

Da es in Questive keine Anführungszeichen gibt, wäre es unmöglich, eine leere Zeichenkette oder ein Leerzeichen zu schreiben. Dafür sind von Anfang an zwei Variablen gesetzt, nämlich: $space : „ “ Leerzeichen $null oder $void „“ leerer String Will man Wörter in einem Satz mit Leerzeichen verbinden, empfiehlt sich aber die Methode

%str wort1 wort2 …;

, die die Zeichenkette „wort1 wort2 ...“ zurückgibt.

Benutzerdefinierte Scripts

Ein Script ist ein Codeabschnitt, der in einem anderen Script ausgeführt werden kann und einen Rückgabewert liefert. Es können auch Argumente an ein Script gegeben werden. Scripts werden entweder mit %x scriptname arg1 arg2 argN; oder einfach %scriptname arg1 arg2 argN; aufgerufen.

Praktisches Beispiel: Das Script giveloc prüft, ob ein Spieler dem richtigen Villager sein Item gibt. Falls nicht, wird dieses wieder zurückgegeben. Als einziges Argument wird der ungefähre Ort des Villagers verlangt. Es wird entweder 0 oder 1 zurückgegeben.

if %giveloc $butcherloc; == 1

In einem Script kann das Argument mit $arg0 $arg1 $argN aufgerufen werden. Wird versehentlich ein benötigtes Argument weggelassen, wird des entsprechende Argument der zuletzt aufgerufenen Scripts verwendet, da alle Variablen in Questive global sind.

Die Script-Library

Darunter versteht man alle Scripts, die sich mit %x aufrufen lassen.

Selbst hinzugefügte Scripts
Regionscripts (reg-[regionid])
Script-Checks (check-[questid])

Interne Scripts

Es ist auch möglich, interne Scripts in einem anderen Scripts zu definieren. Der Beginn eines internen Scripts wird mit {[scriptname]} gekennzeichnet. Interne Scripts müssen immer zum Schluss des Codes definiert werden.

Beispiel:
%script1 $player-name;
%code-schedule script2 20;

{[script2]}
%play-sound $player-loc level_up 1 1;

{[script1]}
%msg $args0 hi!;

Das Region-Script im Detail

Ist der Spieler in keiner Quest und gibt einem Villager ein Item und er befindet sich in einer Region, bei der eine Kiste und ein Script definiert sind, so wird dieses ausgeführt. Es werden folgende Variablengruppen mitgegeben:

Item-Vars: Daten über das Gegebene Item
Player-Vars: Daten über den Spieler
Villager-Vars: Daten über den Villager

Das Regionscript kann folgende Werte zurückgeben:

-1: Der Villager nimmt das Item kommentarlos und es landet in der Dorfkiste
0: Der Villager weist das Item zurück und sagt, dass keine Quest verfügbar ist
Zahl > 0: Diese Zahl ist die Id der Quest, die der Spieler bekommen soll. Das Item wird in die

Dorfkiste gelegt, sofern es kein beschriebenes Buch ist. Es wird folgende Vorgehensweise empfohlen:

Prüfen, ob das Item ein beschriebenes Buch ist, falls nicht: return -1;
Positionen von Schlüsselblöcken, Villagern, Mobspawns festlegen
%list-create quests;
Die Ids aller in der Region verfügbaren Quests in diese Liste geben
return %script-get-core;

Das Script-Get-Core ist ein komplexes Script von SanX, das Quests sehr intelligent und geschickt vergibt. Script-checks werden dabei auch beachtet.

Das Script-Check

Dieses Script prüft, ob eine Quest überhaupt vergeben werden kann, also ob alle nötigen Items in der Dorfkiste sind, ob der Spieler beim richtigen Dorfbewohner ist usw. Das Script gibt entweder 1 zurück, falls die Quest vergeben werden kann, oder 0 falls nicht und ist in der Script-Library als check-[questid] zu finden.

Region-Vars

Diese Werte werden in einer Sql-Tabelle gespeichert und sind anders als Variablen im Questcode permanent. Sie lassen sich über mehrere Quests abrufen und verändern. Das ist nützlich, um z.B. den Fortschritt eines Spielers zu speichern. Eine Quest-Var ist durch drei Schlüsselwerte definiert.

Region: Die Id der dazugehörigen Region
Spielerlogin
Name der Variable

Für globale, regionsunabhängige Variablen ist die Region-Id 0 zu empfehlen.

Events

Wird ein geladenes Event aufgerufen, so werden verschiedenste Variablen im Parser gesetzt und das script-quest ausgeführt. Die Variable $event beinhaltet das zuletzt stattgefundene Event. Ein Event kann abgebrochen werden, indem im Code $cancel auf 1 gesetzt wird. Jedes Event gibt ein paar Gruppen von Variablen mit: $stage: Aktuelle Stage beginnend von 0

block-break: Ein Block wird abgebaut, auch auf protectetem Gebiet

  • Block-Vars
  • Player-Vars
  • World-Vars

block-place: Ein Block wird gesetzt, auch auf protectetem Gebiet

  • Block-Vars
  • Player-Vars
  • World-Vars

block-click: Ein Block wird angeklickt

  • Block-Vars
  • Player-Vars
  • World-Vars
  • $action (left_click_block oder right_click_block)

entity-hurt: Eine Kreatur wird verletzt

  • Entity-Vars
  • Player-Vars
  • World-Vars

entity-kill: Eine Kreatur wird getötet

  • Entity-Vars
  • Player-Vars
  • World-Vars

entity-click: Eine Kreatur wird rechtsgeklickt

  • Entity-Vars
  • Player-Vars
  • World-Vars

entity-tame: Eine Kreatur wird gezähmt

  • Entity-Vars
  • Player-Vars
  • World-Vars

player-kill: Ein Spieler wird getötet

  • Sec-Player-Vars
  • Player-Vars
  • World-Vars

player-hurt: Ein Spieler wird verletzt

  • Sec-Player-Vars
  • Player-Vars
  • World-Vars
  • $damage: Schaden den der Spieler bekommt
  • $cause: Grund des Schadens

bed-enter: Ein Bett wird betreten

  • Block-Vars
  • Player-Vars
  • World-Vars

villager-give: Einem Villager wird etwas gegeben

  • Villager-Vars
  • Player-Vars
  • World-Vars

Anmerkung: Ein Villager nimmt nur ein Item, falls dieser sich auf einer Region befindet, bei der eine Regionskiste definiert ist und in dieser auch genügend Platz ist.

item-drop: Ein Item wird gedroppt

  • Player-Vars
  • Item-Vars

craft: Ein Item wird gecraftet

  • Player-Vars
  • Item-Vars

join: Ein Spieler betritt eine Quest

  • Player-Vars

leave: Ein Spieler verlässt eine Quest

  • Player-Vars


Variablengruppen

Block-Vars:

  • $block-loc
  • $block-name
  • $block-data
  • $block-biome

Item-Vars:

  • $item
  • $item-name
  • $item-lore
  • $item-type
  • $item-data
  • $item-amount

Entity-Vars:

  • $entity (ID des Entities)
  • $entity-loc
  • $entity-name A: entity-type
  • $entity-health

Villager-Vars:

  • $villager-loc
  • $villager-name
  • $villager-profession

Player-Vars:

  • $player-name
  • $player-loc
  • $player-xp
  • $player-hunger
  • $player-biome
  • $player-health
  • $player-item
  • $player-item-name
  • $player-item-lore
  • $player-item-type
  • $player-item-amount
  • $player-item-data

Secplayer-Vars:

  • $secplayer-name
  • $secplayer-loc
  • $secplayer-hunger
  • $secplayer-xp
  • $secplayer-health

World-Vars:

  • $world-name
  • $world-time – Zahl von 0 bis 24000 in Ticks, 0 ist Sonnenaufgang

Andere Vars:

  • $player-dist-avg – Durchschnittliche Entfernung zwischen den Questern
  • $player-dist-min – Minimale Entfernung zwischen zwei der Quester
  • $player-dist-max – Maximale Entfernung zwischen zwei der Quester

Methoden

Dies sind alle Methoden aus der Internal-Library. Sie sind fest im Plugin eingecodet und haben gegenüber gleichnamigen Scripts aus der Script-Library Vorrang.

Variablen und Scripts

%set [name] [val]

Weist der Variable name den Wert val zu.
R: Keine

%unset [name]

Entfernt die Variable name auf dem Speicher.
R: Keine

%get [name]

R: Die Variable name. Falls name nicht gesetzt, keine.

%isset [name]

R: 1 falls name gesetzt, sonst 0

%code-exec [name] [args]

A: %x
Führt den Code name mit den Argumenten args aus. Es sollte auf die Schreibweise %name [args] zurückgegriffen werden, falls name statisch ist
R: Rückgabe des Codes.

%debug [msg]

A: %db
Sendet die Nachricht msg an alle Quester, die Debugmode an haben.

%code-schedule [name] [delay] [args]

Führt den Code name in delay Ticks mit den Argumenten args aus.
R: Keine

%limit [limit]

Setzt das Limit für die Codelänge, Standard ist bei 2000, um Endlosschleifen zu verhinern.
R: Keine

%stacklimit [limit]

Setzt die maximale Größe eines Stacks, Standard liegt bei 10, um Endlosschleifen zu verhindern.
R: Keine


Rechenoperationen

%add [val1] [val2]

R: Summe von val1 und val2

%sub [val1] [val2]

R: Differenz von val1 mit val2

%mult [val1] [val2]

R: Produkt von val1 und val2

%div [val1] [val2]

R: Quotient von val1 mit val2

%sqrt [val1]

R: Quadratwurzel von val1

%abs [val1]

R: Betrag von val1

%round [val1]

R: Rundung von val1 auf eine ganze Zahl

%rnd [val1]

R: Zufälliger Wert zwischen 0 und val1-1

Zeichenketten

%concat [str1] [strN]

R: Aneinanderfügung aller Argumente

%concat-space [str1] [strN]

A: %str
R: Aneinanderfügung aller Argumente, mit Leerzeichen verbunden

%split [list] [string]

Spaltet die Zeichenkette string an den Leerzeichen auf und speichert die Elemente in die Liste list.
R: Keine


Listen

%list-create [name]

Erstellt die Liste name
R: Keine

%list-remove [name]

Entfernt die Liste name
R: Keine

%ls [name] [val]

Fügt den Wert val der Liste name hinzu
R: Keine

%lg [name] [index]

R: Den Wert der Liste name an der Stelle index zurück. Beginnend bei 0

%lr [name] [index]

Entfernt den Wert an der Stelle index aus der Liste name
R: Keine

%ll [name]

R: Anzahl der Elemente in einer Liste

%lc [name] [val]

R: 1 falls die Liste name den Wert val enthält, 0 falls nicht

%li [name] [value]

R: Der Index des Wertes value in der Liste name. -1 falls nicht gefunden


Maps

%map-create [name]

Erstellt die Map name
R: Keine

%map-remove [name]

Entfernt die Map name
R: Keine

%ms [name] [key] [val]

Fügt der Map name das Wertepaar key und val hinzu
R: Keine

%mg [name] [key]

R: Wert der Map in der Zeile key

%mi [name] [index]

R: Wert der Map an der Stelle index

%mr [name] [key]

Entfernt den Eintrag an der Stelle key in der Map name
R: Keine

%ml [name]

R: Länge der Map name

%mc [name] [key]

R: 1 falls key in der Map name vorhanden ist, 0 falls nicht


Orte und Entfernungen

%distance [loc1] [loc2]

R: Entfernung zwischen zwei Orten

%distance2d [loc1] [loc2]

R: Entfernung zwischen zwei Orten aus der Vogelperspektive

%loc-relative [loc] [x] [y] [z]

R: Ergebnisort der Addition von x, y, z an den Ort loc

%loc-get [loc] [w|x|y|z|yaw|pitch]

R: Eine Koordinate/Weltname/Blickrichtung des Ortes loc

ItemStacks

%item-get [item] [t|d|a]

R: Typ (t), Datenwert (d) oder Menge (a) eines Itemstacks item

%item-set-data [item] [data]

R: Itemstack item, dessen Datenwert durch data ersetzt wurde

%item-set-amount [item] [amount]

R: Itemstack item, dessen Menge durch amount ersetzt wurde


Spielerverwaltung

%players-to-list [name]

Speichert die Spieler, die online sind, in die Liste name
R: Keine

%players-num

R: Anzahl der Spieler, die online sind

%quest-isactive [id]

R: 1 falls die Quest id bereits von jemandem gemacht wird, 0 falls nicht

%player-get-nearest [loc]

R: Name des Spielers, der am nächsten zu dem Ort loc ist

%player-get-nearest [loc] [Radius]

R: Name der Spieler, der am nächsten zu dem Ort loc ist, in einem bestimmten Radius

%player-loc [login]

R: Ort des Spielers login

%player-sex [login]

R: Das Geschlecht des Spielers. 0 = Keine Angabe, 1 = Männlich, 2 = Weiblich.

%skills-get [login]

R: Wie viele SP der Spieler login hat

%skills-mod [login] [num]

Verändert die SP von login um num
R: Keine

%skillshop [login] [skill1] [skill2] [skillN] [skill9]

Zeit dem Spieler login einen Skillshop mit den entsprechenden Skills. Maximale Skillanzahl 9. Das lokale Reputationslevel kann im Regionscript noch nicht miteinberechnet werden, darum wird dort auf die Methode %skillshop-level [login] [level] [skill1] [skill2] [skillN] [skill9] verwiesen
R: Keine

%has-skill [login] [skill]

R: Wie viel der Spieler login vom skill gekauft hat.

%chat-get [login]

Fordert den Spieler login zu einer Eingabe im Chat auf und gibt die Nachricht in einem Chat-Event zurück
R: Keine

%is-registered [login]

R: 1 falls sich der Spieler registriert hat, 0 falls nicht

%player-quests-taken [login]

R: Wie viele Quests der Spieler login bereits angenommen hat

%player-quests-solved [login]

R: Wie viele Quests der Spieler login bereits gelöst hat

%bank [login]

Öffnet dem Spieler seine Bank R: 1 falls es den Spieler gibt, 0 falls nicht

Regionen

%regions-get-list [name] [loc]

Speichert die IDs der Regionen, die am Ort loc liegen in die Liste name
R: Keine

%region-get-town [loc]

R: Liegt am Ort loc ein Npcdorf, so wird dessen Id zurückgegeben. Sonst 0

%region-get-scripted [loc]

R: Liegt am Ort loc eine Region mit Script, so wird dessen Id zurückgegeben. Sonst 0

%region-get-smallest [loc]

R: Id der kleinsten Region, die auf dem Ort loc liegt

%region-isinit [id] [loc]

R: 1 falls der Ort loc in der Region id liegt, 0 falls nicht

%region-isowner [id] [login]

R: 1 falls der Spieler login besitzer der Region id ist, 0 falls nicht

%region-get-type [id]

R: Regionstyp der Region id

%region-get-chest [id]

R: Ort der Kiste der Region id

%region-isscripted [id]

R: 1 falls die Region id ein Script hat, 0 falls nicht


Entities und Blöcke

%villager-get-nearest [loc] [maxrad]

Sucht innerhalb des Radius maxrad um den Ort loc nach dem nächsten Villager
R: Ort des Villagers. Weitere Daten werden in die Variablen gespeichert

%spawn-mob [type] [loc]

Spawnt den Mob type am Ort loc
R: Entity-ID

Spezialfälle:
%spawn-mob zombie $loc [villager:0,1] [baby:0,1]
%spawn-mob skeleton $loc [wither]
%spawn-mob horse $loc [variant] [color] [style]
%spawn-mob slime $loc [size]
%spawn-mob magma_cube $loc [size]
%spawn-mob creeper $loc [power]
%play-sound [loc] [sound] [volume] [pitch]

Erzeugt das Geräusch sound am Ort loc in der Lautstärke volume und der Tonhöhe pitch. Angemessene Werte für volume und pitch sind jeweils 1

%play-effect [loc] [effect]

Erzeugt den Partikeleffect effect an der Stelle loc
R: Keine

%villager-speak [loc] [login|questers] [name] [msg]

A: villager-say villager-talk
Lässt den Villager namens name am Ort loc zu dem Spieler login oder zu den Spielern in der Quest die Nachricht msg sprechen

%title [spieler] [titel] [untertitel] [fadeIn] [stay] [fadeOut]

Die letzten drei Parameter werden in Ticks angegeben und geben an, wie lange der Titel zum Erscheinen braucht, wie lange er auf voller Deckkraft bleibt und wie lange er braucht, um zu verblassen.

%hotbar-title [spieler] [titel] [fadeIn] [stay] [fadeOut]

Die letzten drei Parameter werden in Ticks angegeben und geben an, wie lange der Titel zum Erscheinen braucht, wie lange er auf voller Deckkraft bleibt und wie lange er braucht, um zu verblassen.

%set-block [loc] [item]

Setzt den Block an loc zu item
R: Keine

%get-block [loc]

R: Block an loc als Itemstack

%item-drop [loc] [item] [name] [lore]

Droppt den Itemstack item am Ort loc. Falls das Item nach 1sek nicht aufgesammelt wurde, wird es erneut an den Ort loc teleportiert. Die Argumente name und lore sind optional, sie geben dem Item einen Namen und eine violett geschriebene lore. Eignet sich für einzigartige Schlüssel
R: Keine

%item-give [login] [item] [name] [lore]

Gibt dem Spieler login den Itemstack item, wobei das Item nur vom angegebenen Spieler aufgesammelt werden kann
R: Keine

%scroll-give [login] [scroll] [level] [amount]

Gibt dem Spieler login das Skillbuch scroll auf Level level amount mal
R: Keine

%player-teleport [loc] [login]

A: %tp Teleportiert den Spieler login zum Ort loc.
R: Keine

%entity-teleport [entity] [loc]

A: %tpe Teleportiert das Entity entity zum Ort loc.
R: Keine

%entity-loc [entity]

R: Ort von dem Entity entity

%player-effect [login] [effect] [duration] [amplifier]

Gibt dem Spieler login den Trankeffekt effect für duration Ticks in der Stärke amplifier.
R: Keine

%entity-effect [entity] [effect] [duration] [amplifier]

Gibt dem Entity entity den Trankeffekt effect für duration Ticks in der Stärke amplifier.
R: Keine

%entity-disable-drops [entity-id]

Beim Tod es Entities werden keine Items gedropt und es wird kein SP vergeben.
R: Keine

%has-effect [player] [effect]

R: 1 falls der Spieler player den Trankeffect effect hat, 0 falls nicht

%entity-stack [entity-base] [entity-top]

Setzt entity-top auf entity-base.
R: Keine

%player-to-entity [login]

R: Die Entity-Id des Spielers login

%entity-equip [entity] [hand|head|chest|legs|feet] [item]

Bringt den ItemStack item am Entity entity an
R: Keine

%entity-throw [entity] [x] [y] [z]

Schleudert das Entity entity in die Richtung x y z. Achtung: Einstellige Werte genügen.
R: Keine

%entity-damage [entity] [damage]

Fügt dem Entity entite den Schaden damage in halben Herzen zu.
R: Keine

%entity-heal [entity]

R: Keine

%entity-disable-drops [entity]

Das Entity droppt keine Items mehr.
R: Keine

%entity-maxhealth [entity] [lives]

Setzt die maximalen Leben des Entities entity auf lives.
R: keine

Regionvars

%rget [region] [player] [name]

R: Wert der Regionvar

%risset [region] [player] [name]

R: 1 falls diese Regionvar gesetzt ist, 0 falls nicht

%runset [region] [player] [name]

Entfernt diese Regionvar
R: Keine

%rset [region] [player] [name] [val]

Weist dieser Regionvar den Wert val zu
R: Keine

%rreset [region] [player] [name] [val]

Setzt diese Regionvar zurück
R: Keine

Inventarfunktionen

%player-item [login]

R: ItemStack, den der Spieler login in der Hand hält. Bessere Methode: Eventvars

%player-contains [name] [item]

R: Wie viel Stück der Spieler name von item im Inventar hat

%player-fits [name] [item]

R: Wie viel Stück von item in das Inventar von name passen

%player-add [name] [item]

Fügt den Itemstack item in das Inventar von name hinzu
R: Die Anzahl der Items, die nicht mehr Platz hatten

%player-sub [name] [item]

Entfernt den Itemstack item aus dem Inventar von name
R: Die Anzahl der Items, die der Spieler zu wenig hatte

%chest-contains [loc] [item]

R: Wie viel Stück von item die Kiste loc enthält

%chest-fits [loc] [item]

R: Wie viel Stück von item in die Kiste loc passen

%chest-add [loc] [item]

Gibt den ItemStack item in die Kiste loc.
R: Wie viel nicht mehr in die Kiste passt.

%chest-sub [loc] [item]

Nimmt den ItemStack item aus der Kiste loc
R: Wie viel Stück die Kiste zu wenig hat


Sidebar

Hiermit lässt sich Text in der Sidebar abzeigen.

%sidebar [liste]

Zeigt in der Sidebar den Inhalt der Liste liste an, wobei jeder Eintrag in der Liste für eine neue Zeile steht Bei Stats oder ähnlichem sollte ein Internes Skript geschrieben werden, welches die Sidebar aktualisiert.

{[refresh-side]}
%list-create side;
%ls side %str Zeile 1: $varX; ;
%ls side %str Zeile 2: $varY; ;
%ls side Text123;
%sidebar side;

R: Keine


Questverwaltung

Diese Methoden lassen sich nur im Script-Get und im Script-Main einer Quest aufrufen

%stage-increase

Erhöht den Fortschritt in einer Quest
R: Keine

%quest-finish

Markiert die Quest als gelöst, vergibt die Belohnung

%questname-from-id [id]

R: Den Namen der Quest mit der Id id

%quest-is-active [id]

R: 1, falls die Quest id bereits von jemandem gelöst wird, 0 falls nicht

%stage-set [num]

Setzt die Stage ohne Klingelton
R: Keine

%stage-get

R: Die aktuelle Stage

%reward-set [skills]

R: Setzt die Belohnung für die Quest neu

%reward-get

R: Belohnung für die Quest in SP

%stages-set [num]

Setzt die Anzahl der Stages
R: Keine

%stages-get

R: Anzahl der Stages

%books-update

Aktualisiert alle Questbücher. Dies müsste aber automatisch passieren
R: Keine

%event-load [name]

Lädt das Event name
R: Keine

%event-unload [name]

Unloadet das Event name
R: Keine

%event-isloaded [name]

R: 1 falls das Event name geladen ist, 0 falls nicht

%quest-kick [login]

Wirft den Spieler login aus der Quest
R: Keine

%quest-term

Terminiert die Quest ausnahmslos
R: Keine

%quest-get

Terminiert die aktuelle Quest und gibt den Questern eine neue, die Variablen bleiben allerdings gespeichert
R: Keine

%questers-to-list [name]

Speichert die Quester in die Liste name
R: Keine

%questers-num

R: Anzahl der Spieler in der Quest

%questers-contains [login]

R: 1 falls der Spieler login in der Quest mitmacht, 0 falls nicht

%msg [login|questers] [msg]

Schickt die Nachricht msg an den Spieler login oder an alle Quester. Nützlich beim Debuggen R: Keine

%reputation-increase [login]

Erhöht das lokale Reputationslevel von login R: Keine

%reputation-get [login]

R: Lokales Reputationslevel von login

%get-local-questnum [login]

R: Wie viele Quest der Spieler login in diesem Dorf gelöst hat

Externe Scripts

Hier können selbst erstellte Scripts aus dem QuestLab hinzugefügt und beschrieben werden.

%tpq [loc]

Teleportiert alle Quester aus der Quest zum Ort loc
R: Keine

%cloc [loc]

R: Koordinaten des Mittelpunktes vom Block

Namen der Blöcke und Mobs

Es werden die Namen aus der Bukkit-API verwendet. Dies lassen sich hier ansehen.

- Blöcke/Items
- Entities
- Sounds
- Effekte

Debugging

Sollte ein Fehler in einer Quest auftreten, so bekommen alle Admins, Mods und QuestDevs eine Fehlermeldung, die folgendes beinhaltet:

- Name der Quest
- Name des Scripts
- Name der Methode
- Spalte und Wort in dieser Spalte
- Fehler

Folgende Fehler sind häufig:

- Code too long: Es ist eine Endlosschleife verhindert worden.
- Null: Interner Fehler. Eventuell wurde ein Ort/Spieler/Block nicht gefunden.
- Reached end of code: Es wurde ein ; oder } vergessen.
- Not enough arguments: In einer Methode wurden Argumente nicht angeführt
- Enum Value not found: Ein Name für einen Block/Mob wurde nicht gefunden/falsch geschrieben
- Method not found: Methode existiert weder in der Internal-Library noch in der ScriptLibrary

So beginnst du

In diesem Abschnitt findest du grundlegende Dinge, die man sich bei jeder Quest überlegen sollte.

Check-Script

Hier rein kommen Bedingungen die erfüllt sein müssen, damit ein Spieler die Quest überhaupt bekommen kann. Ist der Code bei einem "return 1" bzw. "return 0" angekommen, bekommt der Spieler die Quest (return 1) oder auch nicht (return 0). Folgende Fragen helfen dabei möglicherweise:

  • Ist es möglich die Quest gleichzeitig zu lösen?
  • Sollte man schon ein erfahrener Spieler sein, da man ggf. gegen gute Gegner kämpfen muss?

Get-Script

Das Get-Script wird beim bekommen der Quest einmalig ausgeführt. Es ist daher vorgesehen um Daten festzulegen oder andere Voreinstellungen zu treffen.

  • Wie viele Stage-Abschnitte soll die Quest haben?
  • Welche Events werden benutzt und ist es sinnvoll diese am Anfang zu laden?
  • Werden Koordinaten von Blöcken oder Entities gebraucht?
  • Muss man dem Spieler Werkzeuge oder andere Items zur Verfügung stellen?
  • Müssen Mobs gespawnt werden?

Quest/Main-Script

Term-Script

Das Term-Script wird beim vorzeitigen beenden der Quest aausgeführt. (/giveup, %quest-term, ...)

  • Wurden Items vergeben, die evtl. wieder weggenommen werden müssen?
  • Wurden Entities erschaffen, die wieder gelöscht/getötet werden müssen?
  • Sitzt der Spieler fest und muss daher teleportiert werden?