Da ich sehe, dass immer öfter einige Leute Probleme mit den (einfachsten) Quests haben, habe ich mich mal entschlossen, ein kleines Tutorial zu machen, in dem ich mal einfachere Sachen erkläre.
Hab mich dafür mal für eine Jagdquest entschieden.
Ich werde alle Zwischenschritte auch in einem Spoiler posten, falls es Unklarheiten o.ä geben sollte.
P.S: Ist mein erstes Tutorial mit Erklärung.. Kann also sein, dass es nicht allzu rosig ist. Verbesserungsvorschläge/Kritik sind immer erwünscht.
Zum Tutorial:
Man fängt grundsätzlich jede Quest in etwa so an:
Code:
quest jagdquest begin
Für Anfänger empfehle ich auch gleich ein end am Ende hinzusetzen, da sowas gerne mal vergessen wird.
Falls durch eine andere Quest kein anderer State eingeleitet wurde, sieht der nächste Schritt so aus:
Code:
state start begin
Den Namen kann man sich in der Regel am Anfang nicht aussuchen; nur, wenn ein neuer State eingeleitet wird.
Der State 'start' ist der State, den man am Anfang jeder Quest automatisch hat.
Der nächste Schritt sieht, wie folgt, aus:
Code:
when login or levelup with pc.get_level() >= 30 begin
In dem folgenden Block wird dann geschrieben, was bei dem Ereignis mit der Erfüllung der Bedingung passieren soll.
Bei mir wäre es dann:
Code:
send_letter('Ein neuer Auftrag')
Nach dem end für das Ereignis wird dann der Block für den Brief festgelegt.
Das sieht dann so aus:
Code:
when button or info begin
Dieser Block kann zwar alle möglichen Sachen oder Befehle enthalten, ich will aber mal einen kleinen Infotext machen.
Für die Textausgabe werden meistens nur drei Befehle benutzt (say_title(), say() und say_reward() )
Es gibt zwar noch Textausgaben, die farblich gestaltet werden können, das ist aber eigtl. (überflüssiger) Schnick Schnack.
Den Text dafür könnt ihr selbst bestimmen. Ich hab um diese Uhrzeit keinen Nerv mehr, mir dafür einen Text einfallen zu lassen.
Bei solchen Befehlen muss in die Klammern ein String gesetzt werden, welchen man mit " oder ' anfängt und auch beendet.
Beispiel: say("Text") / say('Text')
Achtung:Für eine Textausgabe muss kein end gesetzt werden.
Für diese Beispielquest nehme ich mal 10 Orks.
pc.setqf(): Setzt eine Questflag ein, welche generell sehr nützlich sein kann. Mit einer Questflag kann man alle Möglichen Werte abspeichern.
Aufbau: pc.setqf(name(als string), wert) - Der Name ist dabei völlig egal.
set_state(): Leitet einen neuen State ein.
Aufbau: set_state(name) - Der Name kann auch hier beliebig gewählt werden.
Für Zählungen kann zwar auch der Questcounter genutzt werden, ich habe es mir aber angewöhnt, es mit Questflags zu machen.
Den neuen State beginnt man dann nach dem end für den State 'start'.
Danach lasse ich mal gleich einen neuen Brief senden, in dem ausgegeben wird, wieviele Orks man schon getötet hat.
Dazu benutze ich:
Code:
when login begin
Als nächstes wird wieder die Textausgabe des Briefes eingeleitet.
Dazu benutze ich wieder:
Code:
when button or info begin
Nun erklär ich euch, wie ihr ausgeben könnt, wieviele Orks schon getötet wurden.
Dies mache ich mit mit der say()-Funktion.
Variablen/Questflags oder auch Befehle, die einen String/eine Zahl aufrufen gibt man so aus:
Code:
"..pc.getqf('count').."
Code:
say('Es wurden "..pc.getqf('count').." Schwarze Orks getötet.')
Mit pc.setqf() setzt man eine Questflag; mit
pc.getqf() ruft man diese auf.
Den nächsten Schritt gestalte ich mal in der einfachsten Form; und das sieht, wie folgt, aus:
Code:
when kill begin
Und mit folgendem Befehl kann man die Vnum von dem abfragen:
Code:
npc.get_race()
Code:
if npc.get_race() == 636 then
Falls dies der Fall ist, wird der if-Block eingeleitet.
Achtung: if-Abfragen müssen mit einem end abgeschlossen werden.
In diesem rechne ich die Kills auf die Questflag drauf.
Das mache ich so:
Code:
pc.setqf('count', pc.getqf('count')+1)
Als nächstes kommt die Abfrage, welchen Wert die Questflag besitzt bzw. ob die Questflag genau den Wert hat, den ich haben will.
Diese Abfrage wird bei jedem Killereignis gestellt.
Code:
if pc.getqf('count') == 10 then
Nun kommt der Block, der eingeleitet wird, wenn die Questflag den Wert 10 hat.
Dies kann sich beliebig variieren; ich mach es mal so:
Code:
say('Glückwunsch, du hast es geschafft!')
pc.give_item2(19, 1)
set_state(__COMPLETE__)
pc.give_item(): Gibt dem ausgewählen Spieler ein Item
Aufbau: pc.give_item(vnum, anzahl)
Achtung: Sollte mehrere Items gegeben werden muss der Befehl pc.give_item2() benutzt werden, sonst bekommt man nur ein Yangstück im Inventar.
Durch das set_state(__COMPLETE__) leite ich einen State ein, in dem nichts mehr geschieht.
Fertige Quest:
Code:
quest jagdquest begin
state start begin
when login or levelup with pc.get_level() >= 30 begin
send_letter('Ein neuer Auftrag')
end
when button or info begin
say_title('Überschrift')
say('Text')
say_reward('Töte 10 Schwarze Orks!')
pc.setqf('count',0)
set_state(auftrag)
end
end
state auftrag begin
when login begin
send_letter('Töte Orks')
end
when button or info begin
say_title('Titel')
say('Es wurden "..pc.getqf('count').." Schwarze Orks getötet.')
end
when kill begin
if npc.get_race() == 636 then
pc.setqf('count', pc.getqf('count')+1)
end
if pc.getqf('count') == 10 then
say('Glückwunsch, du hast es geschafft!')
pc.give_item2(19, 1)
set_state(__COMPLETE__)
end
end
end
state __COMPLETE__ begin
end
end
Ich hoffe, ich konnte euch in Sachen Questing etwas weiterhelfen.
Falls ich etwas schlecht gemacht/erklärt hab, schreibt es bitte.. Ist halt mein erstes Tutorial.
Und wenn ihr noch mehr Tutorials zu irgendwelchen Möglichkeiten/Befehlen wollt, lasst es mich wissen.
MfG .Remix








