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.
Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| Quest | Un script cu reguli: „când se întâmplă X, fă Y”. |
| Lua | Limbajul de programare în care se scriu questurile. Nu trebuie să-l știi ca să începi. |
| NPC | Un personaj din joc controlat de server (negustor, gardian, bătrânul din sat). |
| VNUM | Numărul unic al unui NPC, monstru sau item. De exemplu NPC-ul 20011. |
| Compilare | Transformarea 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:
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
endPare mult? Hai să-l luăm rând cu rând.
Explicat rând cu rând
| Rând | Ce î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:
find /usr/home -type d -name questÎn acel folder:
- Fă backup la folder (îl tragi cu WinSCP pe calculator).
- Copiază
bun_venit.questîn folder cu WinSCP. - Deschide lista questurilor și adaugă pe un rând nou:
bun_venit.quest. În unele pachete fișierul se numeștequest_list, în altelelocale_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:
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
- Intră în joc cu un cont de GM (administrator).
- Scrie în chat comanda
/reload q. Ea reîncarcă questurile fără restart (la majoritatea serverelor). - Mergi la NPC și vorbește cu el. Ar trebui să vezi opțiunea „Informatii server”.
- Apasă pe ea și verifică dialogul și ambele butoane.
- Î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
endlipsă. - 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ă.