Wat een Metin2-server levend houdt, zijn niet de maps maar de quests. Metin2-quests maken leren betekent het hart leren kennen van het systeem dat spelers vertelt wat ze moeten doen, ze beloont en het verhaal voortstuwt. Het goede nieuws: het questsysteem van Metin2 is een op Lua gebaseerde minitaal die verrassend makkelijk te leren is. In deze gids schrijf ik een quest vanaf nul met dezelfde structuur die ik op mijn server Runa2 gebruik.
Hoe werkt een questbestand?
Elke quest bestaat uit drie kernblokken, en elke begin moet een end hebben:
- quest — de quest zelf (een unieke naam).
- state — de fase van de quest.
startis altijd de beginfase; metset_state()ga je naar andere. - when — een gebeurtenis-trigger zoals
login,levelup,kill, of een NPC.click/.chat.
De nestvolgorde is altijd quest → state → when.
Je eerste quest: met een NPC praten en een beloning krijgen
Het voorbeeld hieronder is een volledige quest, gegeven bij het klikken op een NPC, die de speler om bevestiging vraagt en bij voltooiing een item, ervaring en goud geeft:
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
Enkele details: de tekst tussen aanhalingstekens "Start the quest" is de menuoptie die de speler ziet — schrijf die in je eigen taal. select() geeft de index van de gekozen optie terug (1, 2…). pc.give_item2(vnum, aantal) geeft een item; 27003 is slechts een voorbeeld-vnum.
Quest-flags: voortgang opslaan
Je slaat op in welke fase een quest zit met quest-flags. pc.setqf("naam", waarde) schrijft een flag en pc.getqf("naam") leest hem. Deze flags zijn per speler en blijvend. Bijvoorbeeld een "dood 10 wolven"-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 is 101 de vnum van de wolf. Elke kill verhoogt de teller; bij 10 wordt de beloning gegeven en gaat de quest naar de fase done.
Veelgebruikte triggers
when login begin— wanneer de speler inlogt.when levelup begin— bij level-up (lees het level metpc.get_level()).when <vnum>.kill begin— wanneer een specifiek monster wordt gedood.when <vnum>.click/.chat."Tekst"— bij klikken op een NPC of openen van een menu.
De quest compileren en uitrollen
Je .quest-bestand draait niet rechtstreeks; het moet eerst worden gecompileerd met de qc-compiler. De typische flow: zet het bestand in de quest-map van de server, voeg het toe aan de questlijst en compileer (meestal roept make qc aan). Herlaad daarna in-game met /reload q of herstart de core. Bij een syntaxisfout geeft qc het regelnummer — compileren na elke kleine wijziging is dus een goede gewoonte.
Debugtips
- Plaats tijdelijke
say("hier gekomen")-regels om de flow te volgen. - Ontbreekt er een
end, dan waarschuwtqcbij het compileren; lijn geneste blokken in om overzicht te houden. - Houd flagnamen uniek; dezelfde naam hergebruiken tussen quests breekt de voortgang.
Veelgestelde vragen
Moet ik Lua kennen om quests te schrijven?
Je hoeft geen Lua-expert te zijn. De basis — if, variabelen en functieaanroepen — gecombineerd met de ingebouwde functies (say, select, pc.give_item2…) is ruim voldoende.
Moet ik de server uitzetten om een quest te wijzigen?
Nee. Meestal compileer je met qc en ververs je direct met het in-game commando /reload q.
Hoeveel states kan een quest hebben?
Er is geen praktische limiet. Eenvoudige quests zijn klaar in 2–3 states; voor lange questketens voeg je zoveel fases toe als nodig.
Wil je een quest-systeem op maat voor je server? Van battle pass tot dagelijkse quests, ik bouw Lua-questsystemen — neem contact op.