Ai schimbat deja dropul unui monstru, iar acum vrei să-l faci mai rezistent, să dea mai multă experiență sau mai mult yang. Toate aceste valori stau într-un singur loc: **mob_proto**, „fișa tehnică” a fiecărui monstru. În lecția asta afli unde e, cum citești rândul unui monstru și cum schimbi **o singură valoare** fără să strici restul fișierului.
mob_proto, schimbi doar coloana dorită (MAX_HP, EXP, GOLD_MIN, GOLD_MAX), verifici cu diff că s-a schimbat un singur rând, repornești serverul de test și compari rezultatul în joc.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| mob_proto | Tabelul cu toate datele monștrilor și NPC-urilor: nivel, HP, atac, EXP, yang. Câte un rând pentru fiecare VNUM. |
| Coloană | O „căsuță” din rând. Coloanele sunt despărțite prin TAB, iar primul rând (antetul) le spune numele. |
| MAX_HP | Viața maximă a monstrului. |
| EXP | Experiența de bază pe care o dă monstrul la moarte. |
| GOLD_MIN / GOLD_MAX | Cel mai mic și cel mai mare număr de yang pe care îl poate lăsa. |
| Sursa activă | Copia datelor pe care serverul o citește cu adevărat la pornire. |
Ce stă în mob_proto și ce nu
Ca să nu cauți în locul greșit, ține minte trei fișiere diferite:
mob_proto: cum este monstrul (viață, atac, nivel, EXP, yang);mob_drop_item.txt: ce iteme lasă (vezi dropul la monștri);regen.txt: unde și cât de des apare (vezi spawn cu regen.txt).
Dacă vrei un boss mai greu de omorât, nu umbli la drop. Dacă vrei să dea mai des un material, nu umbli la HP.
Pasul 1: află ce copie citește serverul tău
Aici diferă cel mai mult pachetele. Unele citesc monștrii dintr-un fișier text (mob_proto.txt), altele direct din baza de date (tabelul mob_proto).
În pachetul pe care l-am verificat pentru această lecție, procesul db citește fișierul share/conf/mob_proto.txt (plus mob_names.txt pentru nume) și, la fiecare pornire, copiază totul în tabelul SQL mob_proto. Adică tabelul din baza de date e doar o oglindă: dacă modifici în Navicat, modificarea dispare la următorul restart. Acolo trebuie editat fișierul text.
Cum verifici la tine: în folderul db al serverului, fișierele sunt de obicei legături (scurtături) spre share/conf:
ls -l /usr/home/game/db/ | grep proto(Calea e un exemplu; folosește calea serverului tău.) Dacă vezi ceva de forma mob_proto.txt -> ../share/conf/mob_proto.txt, editezi fișierul din share/conf. Dacă nu există niciun mob_proto.txt și documentația pachetului spune că protourile vin din SQL, atunci editezi tabelul, cu backup înainte.
Atenție la copiile vechi: în multe pachete găsești mai multe fișiere asemănătoare (de exemplu un mob_proto.csv uitat într-un alt folder). Editează doar copia pe care o citește serverul.
Pasul 2: citește rândul unui monstru
Fișierul are peste 70 de coloane, deci e greu de citit cu ochiul. Folosim ca exemplu monstrul 101 (Câine sălbatic, „Wild Dog” în pachetul verificat). Comanda de mai jos citește antetul, găsește coloanele după nume și îți afișează doar ce te interesează:
cd /usr/home/game/share/conf
awk -F'\t' 'NR==1{for(i=1;i<=NF;i++) c[$i]=i} $1==101{print "LEVEL="$c["LEVEL"], "MAX_HP="$c["MAX_HP"], "EXP="$c["EXP"], "GOLD_MIN="$c["GOLD_MIN"], "GOLD_MAX="$c["GOLD_MAX"]}' mob_proto.txtBucată cu bucată:
-F'\t'îi spune că TAB-ul desparte coloanele;NR==1{...}reține numele coloanelor din primul rând;$1==101alege rândul unde prima coloană (VNUM) e 101;print ...afișează doar coloanele cerute.
Ce ar trebui să vezi (în pachetul verificat):
LEVEL=1 MAX_HP=126 EXP=15 GOLD_MIN=18 GOLD_MAX=27La tine valorile pot fi altele. Notează-le pe hârtie sau într-un fișier: sunt „starea de dinainte”.
În același pachet, coloanele sunt pe pozițiile: MAX_HP = 21, GOLD_MIN = 24, GOLD_MAX = 25, EXP = 26. Nu te baza pe aceste numere la alt pachet: verifică întotdeauna antetul. Poți afișa pozițiile cu:
head -1 mob_proto.txt | tr '\t' '\n' | cat -n | grep -E "MAX_HP|EXP|GOLD"Pasul 3: calculează valoarea nouă
Lucrează cu procente mici și schimbă un singur lucru o dată:
| Valoare | Acum | Țintă de test | Calcul |
|---|---|---|---|
| EXP | 15 | +20% | 15 × 1,20 = 18 |
| MAX_HP | 126 | neschimbat | îl testezi separat, mai târziu |
| GOLD_MIN / GOLD_MAX | 18 / 27 | neschimbat | control |
Regulă pentru yang: GOLD_MIN trebuie să fie mai mic sau egal cu GOLD_MAX. Dacă le inversezi, rezultatele devin greu de prezis.
Pasul 4: schimbă o singură valoare, în siguranță
Fă întâi o copie cu data în nume (vezi modificări sigure și rollback):
cp mob_proto.txt mob_proto.txt.2026-11-02.bakPoți edita în Notepad++ (cu Show All Characters pornit, ca să vezi TAB-urile), dar la 70 de coloane e ușor să greșești căsuța. O variantă mai sigură: lași calculatorul să schimbe exact coloana dorită și scrie rezultatul într-un fișier nou:
awk -F'\t' -v OFS='\t' '$1==101{$26=18} {print}' mob_proto.txt > mob_proto.nou
diff -u mob_proto.txt mob_proto.nou$26=18 înseamnă „pune 18 în coloana 26” (EXP în pachetul verificat; la tine verifică numărul la Pasul 2). Ce ar trebui să vezi: diff arată un singur rând schimbat, cel al monstrului 101, cu 15 înlocuit de 18. Dacă arată mai multe rânduri, nu folosi fișierul nou. Dacă totul e bine:
mv mob_proto.nou mob_proto.txtPăstrează aceleași drepturi și același proprietar ca la original. Dacă nu ești sigur, compară cu ls -l.
Pasul 5: aplică și verifică
Cea mai curată metodă: repornești serverul de test (vezi oprire și restart).
În sursa verificată există și comanda GM /reload p, care reîncarcă protourile fără restart. Ea are o capcană: monștrii deja apăruți pe hartă păstrează valorile vechi, doar cei care apar după reîncărcare le primesc pe cele noi. De aceea, pentru teste curate, restartul e mai sigur.
Ca să vezi ce a citit serverul, caută în jurnalul unui core de joc (de exemplu channel1/first/syslog, numele poate diferi) rândul monstrului:
grep "MOB: #101 " syslogAr trebui să apară ceva de forma MOB: #101 Wild Dog LEVEL 1 HP 126 DEF 4 EXP 18 .... Dacă vezi încă EXP-ul vechi, serverul a citit altă copie.
De ce în joc nu primești exact 18 EXP
EXP-ul din mob_proto e de bază. În sursa verificată, serverul îl ajustează după diferența de nivel dintre jucător și monstru:
| Diferența de nivel | Cât EXP primești |
|---|---|
| Monstrul are același nivel ca tine | 100% |
| Monstrul are cu 5 niveluri mai mult | 125% |
| Tu ai cu 5 niveluri mai mult | 92% |
| Tu ai cu 10 niveluri mai mult | 50% |
Peste asta se adaugă bonusuri de EXP, evenimente, rate globale și împărțirea în grup. În sursa verificată, ratele globale sunt „event flag-uri” cu valoarea implicită 100 (adică 100%): mob_exp pentru EXP, mob_gold pentru cantitatea de yang și mob_gold_pct pentru șansa de a lăsa yang. Pe cele setate le vezi cu comanda GM /geteventflag; dacă un flag lipsește din listă, se folosește 100. Dacă cineva a lăsat mob_exp la 200, toți monștrii dau dublu, indiferent de mob_proto. Jucătorii aflați la peste 50 de metri de monstru nu primesc nimic. Deci testează cu același personaj, la același nivel, fără bonusuri, înainte și după.
La yang e la fel: monstrul nu lasă bani la fiecare ucidere. Există o șansă de drop care depinde de nivel și de setările serverului, rare „ploi” de yang, iar boșii împart suma în mai multe grămezi. Valorile GOLD_MIN/GOLD_MAX stabilesc doar intervalul.
Cât yang intră în economie
Un calcul simplu înainte să mărești yang-ul: dacă un jucător omoară 500 de monștri pe oră și media crește de la 22 la 30 de yang, câștigă în plus (30 − 22) × 500 = 4.000 yang pe oră. Înmulțit cu sute de jucători, e mult. Detalii în lecția despre intrările și ieșirile de yang.
Greșeli des întâlnite
| Ce vezi | Cauza probabilă |
|---|---|
| Ai modificat în baza de date și după restart valoarea revine | Serverul citește fișierul text și rescrie tabelul la pornire |
| Nimic nu s-a schimbat | Ai editat o copie veche sau monștrii erau deja pe hartă înainte de /reload p |
| Serverul nu mai pornește | O coloană lipsă sau un spațiu în loc de TAB; compară cu backupul |
diff arată sute de rânduri schimbate | Editorul a schimbat codificarea sau sfârșitul de rând |
| Monstrul are valori bune, dar numele apare greșit | Numele vine din mob_names.txt și din client, nu din coloana EXP |
Întrebări frecvente
Pot dubla HP-ul tuturor monștrilor dintr-o comandă?
Tehnic, da, dar nu e o idee bună la început: atingi și boși, pietre Metin și NPC-uri. Schimbă câte un monstru și testează.
Trebuie să actualizez și clientul?
Pentru HP, EXP și yang, de obicei nu: le calculează serverul. Clientul are însă propriul mob_proto pentru nume și nivelul afișat, deci dacă schimbi nivelul, actualizează și clientul (vezi lecția despre nivelul unui boss).
Ce înseamnă coloanele REGEN_CYCLE și REGEN_PERCENT?
Nu au legătură cu respawnul. Spun cât de repede își reface monstrul viața. Le explicăm în lecția următoare.
Ce urmează
Lecția următoare: atacul, apărarea și nivelul unui boss. Toate lecțiile sunt în lista tutorialelor Metin2.
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ă.