Was einen Metin2-Server am Leben hält, sind nicht seine Karten, sondern die Quests. Metin2-Quests zu erstellen heißt, das Herz des Systems zu lernen, das Spielern sagt, was zu tun ist, sie belohnt und die Geschichte vorantreibt. Die gute Nachricht: Das Questsystem von Metin2 ist eine Lua-basierte Mini-Sprache, die erstaunlich leicht zu lernen ist. In diesem Leitfaden schreibe ich eine Quest von Grund auf – mit derselben Struktur, die ich auf meinem Server Runa2 verwende.
Wie eine Quest-Datei funktioniert
Jede Quest besteht aus drei Kernblöcken, und jedes begin braucht ein end:
- quest — die Quest selbst (ein eindeutiger Name).
- state — die Phase der Quest.
startist immer die Einstiegsphase; mitset_state()wechselst du zu anderen. - when — ein Ereignis-Auslöser wie
login,levelup,killoder ein NPC.click/.chat.
Die Verschachtelung ist immer quest → state → when.
Deine erste Quest: mit einem NPC sprechen und eine Belohnung erhalten
Das folgende Beispiel ist eine vollständige Quest, die per NPC-Klick vergeben wird, den Spieler um Bestätigung bittet und nach Abschluss ein Item, Erfahrung und Gold gewährt:
quest welcome begin
state start begin
when 20095.chat."Start the quest" begin
say_title("Villager:")
say("Welcome, adventurer!")
say("Will you help me?")
local answer = select("Sure", "Not now")
if answer == 2 then
return
end
pc.setqf("welcome_step", 1)
set_state(active)
end
end
state active begin
when 20095.chat."Finish the quest" begin
if pc.getqf("welcome_step") == 1 then
say("Thank you! Here is your reward.")
pc.give_item2(27003, 5) -- example item vnum
pc.give_exp2(10000)
pc.change_gold(50000)
set_state(done)
end
end
end
state done begin
when 20095.chat."Finish the quest" begin
say("You have already finished this quest.")
end
end
end
Ein paar Details: Der Text in Anführungszeichen "Start the quest" ist die dem Spieler angezeigte Menüoption — schreibe sie in deiner Sprache. select() gibt den Index der gewählten Option zurück (1, 2…). pc.give_item2(vnum, Anzahl) gibt ein Item; 27003 ist nur ein Beispiel-vnum.
Quest-Flags: Fortschritt speichern
In welcher Phase eine Quest ist, speicherst du mit Quest-Flags. pc.setqf("name", wert) schreibt ein Flag und pc.getqf("name") liest es. Diese Flags sind spielerbezogen und dauerhaft. Zum Beispiel eine „Töte 10 Wölfe"-Quest:
when 101.kill begin
local count = pc.getqf("wolf_count") + 1
pc.setqf("wolf_count", count)
if count >= 10 then
say("You killed 10 wolves!")
pc.give_exp2(50000)
set_state(done)
end
end
Hier ist 101 der vnum des Wolfs. Jeder Kill erhöht den Zähler; bei 10 wird die Belohnung vergeben und die Quest wechselt in die Phase done.
Häufige Auslöser
when login begin— wenn der Spieler sich einloggt.when levelup begin— beim Levelaufstieg (lies das Level mitpc.get_level()).when <vnum>.kill begin— wenn ein bestimmtes Monster getötet wird.when <vnum>.click/.chat."Text"— beim Klick auf einen NPC oder Öffnen eines Menüs.
Die Quest kompilieren und ausrollen
Deine .quest-Datei läuft nicht direkt; sie muss zuerst mit dem qc-Compiler kompiliert werden. Der typische Ablauf: Lege die Datei in den quest-Ordner des Servers, füge sie der Questliste hinzu und kompiliere (meist ruft make qc auf). Lade danach im Spiel mit /reload q neu oder starte den Kern neu. Bei einem Syntaxfehler nennt dir qc die Zeilennummer — nach jeder kleinen Änderung zu kompilieren ist daher eine gute Gewohnheit.
Debugging-Tipps
- Setze temporäre
say("hier angekommen")-Zeilen ein, um den Ablauf zu verfolgen. - Fehlt ein
end, warnt dichqcbeim Kompilieren; rücke verschachtelte Blöcke ein, um den Überblick zu behalten. - Halte Flag-Namen eindeutig; denselben Namen über Quests hinweg wiederzuverwenden zerstört den Fortschritt.
Häufige Fragen
Muss ich Lua können, um Quests zu schreiben?
Du musst kein Lua-Experte sein. Die Grundlagen — if, Variablen und Funktionsaufrufe — kombiniert mit den eingebauten Funktionen (say, select, pc.give_item2…) reichen völlig aus.
Muss ich den Server herunterfahren, um eine Quest zu ändern?
Nein. Meist kompilierst du mit qc und aktualisierst sofort mit dem Ingame-Befehl /reload q.
Wie viele States kann eine Quest haben?
Es gibt keine praktische Grenze. Einfache Quests sind in 2–3 States fertig; für lange Questketten fügst du beliebig viele Phasen hinzu.
Willst du ein maßgeschneidertes Questsystem für deinen Server? Vom Battle Pass bis zu täglichen Quests baue ich Lua-Questsysteme — kontaktiere mich.