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

Cum modifici HP-ul, EXP-ul și yang-ul unui monstru în Metin2 (mob_proto explicat)

2 noiembrie 2026 8 min de citit

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.

Pe scurt: găsești rândul monstrului după VNUM în 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ântCe înseamnă
mob_protoTabelul 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_HPViața maximă a monstrului.
EXPExperiența de bază pe care o dă monstrul la moarte.
GOLD_MIN / GOLD_MAXCel 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:

sh
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ă:

sh
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.txt

Bucată cu bucată:

  • -F'\t' îi spune că TAB-ul desparte coloanele;
  • NR==1{...} reține numele coloanelor din primul rând;
  • $1==101 alege rândul unde prima coloană (VNUM) e 101;
  • print ... afișează doar coloanele cerute.

Ce ar trebui să vezi (în pachetul verificat):

text
LEVEL=1 MAX_HP=126 EXP=15 GOLD_MIN=18 GOLD_MAX=27

La 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:

sh
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ă:

ValoareAcumȚintă de testCalcul
EXP15+20%15 × 1,20 = 18
MAX_HP126neschimbatîl testezi separat, mai târziu
GOLD_MIN / GOLD_MAX18 / 27neschimbatcontrol

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):

sh
cp mob_proto.txt mob_proto.txt.2026-11-02.bak

Poț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:

sh
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:

sh
mv mob_proto.nou mob_proto.txt

Pă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:

sh
grep "MOB: #101 " syslog

Ar 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 nivelCât EXP primești
Monstrul are același nivel ca tine100%
Monstrul are cu 5 niveluri mai mult125%
Tu ai cu 5 niveluri mai mult92%
Tu ai cu 10 niveluri mai mult50%

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 veziCauza probabilă
Ai modificat în baza de date și după restart valoarea revineServerul citește fișierul text și rescrie tabelul la pornire
Nimic nu s-a schimbatAi editat o copie veche sau monștrii erau deja pe hartă înainte de /reload p
Serverul nu mai porneșteO coloană lipsă sau un spațiu în loc de TAB; compară cu backupul
diff arată sute de rânduri schimbateEditorul a schimbat codificarea sau sfârșitul de rând
Monstrul are valori bune, dar numele apare greșitNumele 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ă.

DiscordWhatsApp