Înapoi la blogToate tutorialele Metin2
Tutoriale Metin2 · Lecția 15 din 99

Primul tău quest Metin2: tutorial Lua pentru începători, explicat rând cu rând

2 noiembrie 2026 6 min de citit

Un **quest** e un mic script care spune jocului ce să facă atunci când jucătorul face ceva: vorbește cu un NPC, omoară un monstru, ajunge la un anumit nivel. Toate misiunile și dialogurile din Metin2 sunt questuri. Vestea bună: un quest simplu e mult mai ușor decât pare. În acest tutorial facem împreună primul tău quest, un NPC care salută jucătorul și îi arată un meniu.

Pe scurt: scrii questul într-un fișier text, îl pui în folderul de questuri al serverului, îl „compilezi” (îl transformi în ceva ce înțelege serverul) și îl testezi în joc.

Cuvinte pe care le vei întâlni

CuvântCe înseamnă
QuestUn script cu reguli: „când se întâmplă X, fă Y”.
LuaLimbajul de programare în care se scriu questurile. Nu trebuie să-l știi ca să începi.
NPCUn personaj din joc controlat de server (negustor, gardian, bătrânul din sat).
VNUMNumărul unic al unui NPC, monstru sau item. De exemplu NPC-ul 20011.
CompilareTransformarea fișierului tău într-un format pe care îl citește serverul.

Ce face questul nostru

Când jucătorul vorbește cu NPC-ul, apare opțiunea „Informații server”. Dacă o alege, NPC-ul îl salută pe nume și îi arată un meniu cu două butoane.

Codul complet

Creează pe calculator un fișier text numit bun_venit.quest. Folosește Notepad++, nu Word: Word strică textul. Pune în el:

lua
quest bun_venit begin
    state start begin
        when 20011.chat."Informatii server" begin
            say_title("Informatii server")
            say("Salut, " .. pc.get_name() .. "!")
            say("Bine ai venit pe serverul nostru.")
            local alegere = select("Multumesc", "Inchide")
            if alegere == 1 then
                say("Iti dorim distractie placuta!")
            end
        end
    end
end

Pare mult? Hai să-l luăm rând cu rând.

Explicat rând cu rând

RândCe înseamnă, pe românește
quest bun_venit begin„Începe questul cu numele bun_venit.” Numele e la alegerea ta, fără spații și fără diacritice.
state start begin„Prima etapă a questului.” Orice quest are cel puțin etapa start.
when 20011.chat."Informatii server" begin„Când jucătorul vorbește cu NPC-ul 20011 și alege «Informatii server»…”
say_title("Informatii server")Scrie un titlu în fereastra de dialog.
say("Salut, " .. pc.get_name() .. "!")Scrie „Salut, NumeleJucătorului!”. pc.get_name() ia numele personajului, iar .. lipește textele unul de altul.
say("Bine ai venit pe serverul nostru.")Încă un rând de text.
local alegere = select("Multumesc", "Inchide")Arată două butoane. Ce apasă jucătorul se salvează în alegere: 1 pentru primul buton, 2 pentru al doilea.
if alegere == 1 then„Dacă a apăsat primul buton…”
say("Iti dorim distractie placuta!")…atunci scrie acest mesaj.
end (de 4 ori)Închide pe rând: if, when, state, quest. Fiecare begin și fiecare if are nevoie de un end.

Cel mai des întâlnită greșeală: lipsește un end. Numără: ai 3 de begin și un if, deci îți trebuie 4 de end.

Ce e 20011 și cum îl schimbi

20011 e VNUM-ul NPC-ului, adică „numărul lui de identificare”. În multe servere e un NPC din sat, dar în pachetul tău poate fi altul. Ca să alegi alt NPC, caută-i numărul în lista de NPC-uri a serverfiles-ului (fișierul mob_names.txt sau mob_proto) și înlocuiește 20011 cu el.

De ce fără diacritice?

Am scris „Informatii”, nu „Informații”. Multe servere și clienți afișează greșit literele ă, î, ș, ț (apar semne ciudate). Începe fără diacritice. După ce totul merge, poți testa dacă serverul tău le afișează corect.

Unde pui fișierul pe server

Fiecare pachet are folderul lui de questuri. De obicei se numește quest și e într-un folder locale (de exemplu share/locale/.../quest). Ca să-l găsești:

sh
find /usr/home -type d -name quest

În acel folder:

  1. Fă backup la folder (îl tragi cu WinSCP pe calculator).
  2. Copiază bun_venit.quest în folder cu WinSCP.
  3. Deschide lista questurilor și adaugă pe un rând nou: bun_venit.quest. În unele pachete fișierul se numește quest_list, în altele locale_list: e cel care conține numele celorlalte questuri, câte unul pe rând.

Compilează questul

„Compilarea” transformă textul tău în ceva ce citește serverul. Fiecare pachet are un script pentru asta, de obicei în același folder: make.py, make.sh sau un program qc. Uită-te în folder și în instrucțiunile pachetului. Un exemplu des întâlnit:

sh
cd /usr/home/game/share/locale/romania/quest
python make.py

(Calea și numele scriptului sunt exemple; la tine pot fi altele.)

Ce ar trebui să vezi: o listă cu questurile compilate, fără mesaje de eroare. Dacă apare o eroare, compilatorul îți spune de obicei rândul cu problema. Verifică acolo un end lipsă, o ghilimea " uitată sau o paranteză.

Testează în joc

  1. Intră în joc cu un cont de GM (administrator).
  2. Scrie în chat comanda /reload q. Ea reîncarcă questurile fără restart (la majoritatea serverelor).
  3. Mergi la NPC și vorbește cu el. Ar trebui să vezi opțiunea „Informatii server”.
  4. Apasă pe ea și verifică dialogul și ambele butoane.
  5. Încearcă și cu un personaj normal, nu doar cu GM-ul.

Testează întâi pe un server de test, nu pe cel cu jucători. Așa, dacă greșești ceva, nu afectezi pe nimeni.

Dacă nu apare dialogul

  • Opțiunea nu apare la NPC: VNUM-ul e greșit sau questul nu e în lista questurilor (quest_list / locale_list). Verifică amândouă.
  • Eroare la compilare: citește rândul indicat; de obicei e un end lipsă.
  • Apar semne ciudate în loc de litere: scoate diacriticele.
  • Merge la tine, dar nu pe alt canal: questul trebuie compilat în folderul pe care îl folosesc toate canalele. Dacă au foldere separate, reîncarcă pe fiecare.

O regulă importantă pentru mai târziu

Questul nostru doar vorbește: nu dă iteme. Când vei face questuri cu recompense, ai grijă ca jucătorul să nu poată lua recompensa de două ori, de exemplu redeschizând dialogul. E cea mai des întâlnită cale prin care un server își strică economia. Testează mereu: „Ce se întâmplă dacă apăs de două ori? Dacă am inventarul plin? Dacă ies din joc la jumătate?”

Întrebări frecvente

Trebuie să învăț Lua ca să fac questuri?

Pentru început, nu. Poți porni de la exemple ca acesta și schimba textele. Pe măsură ce vrei lucruri mai complicate, vei învăța pe parcurs condiții (if) și variabile.

De ce compilatorul acceptă questul, dar NPC-ul nu vorbește?

Cel mai des, VNUM-ul NPC-ului e greșit, questul nu e în lista questurilor (quest_list / locale_list) sau nu ai dat /reload q după compilare.

Pot testa direct pe serverul cu jucători?

Nu e recomandat. O greșeală poate bloca dialogurile tuturor. Testează pe un server de test și publică apoi, cu backup făcut.

Ce urmează

Înainte de orice quest nou, fă backup la server. Dacă serverul nu mai pornește după o modificare, vezi cele 12 verificări. Găsești și alte resurse în resursele Metin2 Zentaris Host.

Server Metin2 gata de joc

Găzduire Metin2 în România, cu instalare de serverfiles, bază de date MySQL și protecție Anti-DDoS inclusă.

DiscordWhatsApp