Vrei ca licoarea roșie să vindece mai mult, ca o sabie să ceară alt nivel sau ca un item să nu mai poată fi vândut la NPC. Toate aceste lucruri stau într-un singur fișier: **item_proto**. Arată ca un tabel uriaș, cu zeci de coloane și mii de rânduri, și sperie la prima vedere. În lecția asta îl descifrăm coloană cu coloană și facem împreună o modificare mică, ușor de verificat.
item_proto.txt descrie un item (după VNUM). Găsești rândul, schimbi o singură valoare păstrând TAB-urile, repornești serverul de test și verifici în joc. Clientul are propria copie a fișierului, deci unele schimbări trebuie făcute și acolo.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| item_proto | „Fișa tehnică” a tuturor itemelor: tip, preț, nivel cerut, valori, bonusuri. |
| Rând | Un item. Primul rând al fișierului e antetul (numele coloanelor). |
| Flag | O „bifă” cu nume fix, de exemplu ITEM_STACKABLE (se adună în teanc). |
| Anti-flag | O interdicție, de exemplu ANTI_SELL (nu se poate vinde la NPC). |
| Apply | Un bonus fix al itemului, de exemplu viteză de atac. |
| Value | Șase numere (VALUE0…VALUE5) al căror sens depinde de tipul itemului. |
Unde e fișierul și care copie contează
În pachetul pe care l-am verificat, serverul citește share/conf/item_proto.txt. În folderul db există tot un item_proto.txt, dar acolo e doar o scurtătură (link) spre fișierul din share/conf. Procesul db îl citește la pornire, împreună cu item_names.txt (numele afișate).
Atenție, diferă între pachete: în pachetul verificat există și un tabel item_proto în baza de date player, dar serverul doar *scrie* acolo o copie la pornire. Dacă îl modifici în SQL, schimbarea dispare. Alte pachete fac invers: citesc itemele din SQL, iar fișierul TXT lipsește. Verifică la tine ce există, cum ai învățat în lecția despre structura serverfiles.
Pasul 1: găsește rândul itemului
Ai nevoie de VNUM-ul itemului (dacă nu știi ce e, citește lecția Ce este VNUM). Pe server, din folderul share/conf:
grep -P "^27001\t" item_proto.txt^27001\t înseamnă „rândul care începe cu 27001 urmat de TAB”. Fără \t ai găsi și 270010 sau alte numere care încep la fel.
Pe Windows: descarci fișierul cu WinSCP, îl deschizi în Notepad++ și cauți cu Ctrl+F. Primul rând (antetul) poate apărea cu semne ciudate: în pachetul verificat e scris parțial în coreeană. E normal, nu-l „repara”.
Pasul 2: înțelege coloanele
În pachetul verificat, fiecare rând are 33 de coloane, despărțite prin TAB. Le-am verificat în codul care citește fișierul (db/src/ProtoReader.cpp). Iată-le în ordine, cu exemplul Sabie+9 (VNUM 19):
| Coloana | Ce înseamnă | La Sabie+9 |
|---|---|---|
| VNUM | Numărul itemului | 19 |
| ITEM_NAME(K) | Nume intern (cel afișat vine din item_names) | text coreean |
| ITEM_TYPE | Tipul: armă, armură, consumabil, material… | ITEM_WEAPON |
| SUB_TYPE | Subtipul: sabie, pumnal, licoare… | WEAPON_SWORD |
| SIZE | Câte căsuțe ocupă în inventar, pe verticală (1–3) | 2 |
| ANTI_FLAG | Interdicții (cine nu-l poate folosi, ce nu se poate face cu el) | ANTI_MUDANG |
| FLAG | Proprietăți (stivuire, upgrade etc.) | ITEM_TUNABLE |
| ITEM_WEAR | Unde se echipează | WEAR_WEAPON |
| IMMUNE | Imunități (paralizie, otravă…) | NONE |
| A 10-a coloană (preț) | Prețul când îl cumperi de la un magazin NPC | 100 |
| A 11-a coloană (preț) | Baza prețului când îl vinzi la NPC | 750 |
| REFINE | VNUM-ul următorului nivel de upgrade (0 = nu se mai poate) | 0 |
| REFINESET | Rețeta de upgrade din tabelul refine_proto | 0 |
| MAGIC_PCT | Șansa (%) să apară cu bonusuri aleatorii când e dropat | 15 |
| LIMIT_TYPE0 / LIMIT_VALUE0 | Prima condiție (de obicei nivelul minim) | LEVEL / 0 |
| LIMIT_TYPE1 / LIMIT_VALUE1 | A doua condiție | LIMIT_NONE / 0 |
| ADDON_TYPE0…2 / ADDON_VALUE0…2 | Cele 3 bonusuri fixe (apply) | viteză atac 22 |
| VALUE0…VALUE5 | Valorile itemului, sensul depinde de tip | 0 15 19 13 15 63 |
| Specular | Luciul modelului, folosit de client | 100 |
| SOCKET | Câte locașuri pentru pietre are | 1 |
| ATTU_ADDON | Bonus special adăugat automat la creare (la unele arme) | 0 |
Câteva lămuriri care contează:
- ANTI_MUDANG înseamnă „șamanul nu o poate folosi”. Celelalte clase:
ANTI_MUSA(războinic),ANTI_ASSASSIN(ninja),ANTI_SURA(sura). Le găsești detaliate în lecția despre armele de început. - Mai multe flag-uri se scriu în aceeași celulă, despărțite prin bară verticală, de exemplu
ITEM_STACKABLE | ITEM_SLOW_QUERY. - Prețul de vânzare la NPC nu e chiar coloana a 11-a: în sursa verificată, serverul împarte valoarea la 5 și mai scade o taxă de 3%. La Sabie+9, jucătorul primește în jur de 146 yang.
Ce înseamnă VALUE0…VALUE5 (exemple verificate)
Sensul valorilor se schimbă după tip. Am verificat în sursa game câteva cazuri:
| Tip de item | VALUE-uri importante |
|---|---|
| Armă | VALUE1–VALUE2 = atac magic min–max, VALUE3–VALUE4 = atac min–max, VALUE5 = bonusul de upgrade |
| Armură (corp, cap, picioare, scut) | VALUE1 = apărare, VALUE5 = apărare în plus de la upgrade |
Licoare (USE_POTION) | VALUE0 = HP refăcut, VALUE1 = MP refăcut |
La Sabie+9: atac 13–15, atac magic 15–19, iar VALUE5 = 63 se adaugă la atac. De aceea Sabie+0 are VALUE5 = 0, iar fiecare +1 adaugă 7.
Pasul 3: fă o singură modificare mică
Exercițiul nostru: Licoarea roșie (S), VNUM 27001, reface 300 HP. O facem să refacă 400. Rândul original, în pachetul verificat (cu TAB-uri între coloane; numele intern e în coreeană):
27001 (nume) ITEM_USE USE_POTION 1 NONE ITEM_STACKABLE | ITEM_SLOW_QUERY NONE NONE 32 30 0 0 0 LIMIT_NONE 0 LIMIT_NONE 0 APPLY_NONE 0 APPLY_NONE 0 APPLY_NONE 0 300 0 0 0 0 0 0 0 0Bucată cu bucată: tip consumabil, subtip licoare, ocupă o căsuță, fără interdicții, se stivuiește, costă 32 yang la magazin. 300 este VALUE0, adică HP-ul refăcut.
- Fă o copie:
cp item_proto.txt item_proto.txt.bak-2026-11-02. - În Notepad++ (cu View → Show Symbol → Show All Characters pornit, ca să vezi TAB-urile), schimbă doar
300în400. - Salvează cu aceeași codificare și același sfârșit de rând (vezi lecția Fișiere TXT: taburi și encoding).
- Compară:
diff -u item_proto.txt.bak-2026-11-02 item_proto.txt. Trebuie să vezi un singur rând schimbat.
Pasul 4: încarcă modificarea
Cel mai sigur: repornești serverul de test (lecția Oprire și restart). În sursa verificată există și comanda GM /reload p, care cere procesului db să recitească fișierele proto. E utilă pe serverul de test, dar repornirea completă îți dă cea mai clară imagine.
Ce ar trebui să vezi: serverul pornește normal, iar în syserr nu apare nimic nou. Cu un personaj rănit, licoarea reface acum mai mult HP.
De ce trebuie atins și clientul
Clientul are propria copie, compilată, a item_proto. Din ea afișează tooltip-ul (textul când ții mouse-ul pe item). Dacă schimbi doar serverul:
- efectul real se schimbă (serverul decide);
- textul din tooltip poate arăta în continuare valoarea veche.
Pentru valori afișate (atac, apărare, nivel cerut, preț) refaci și item_proto-ul clientului. Pașii sunt în lecția următoare.
| Ce vezi | Ce înseamnă | Ce faci |
|---|---|---|
db se oprește, în syserr scrie „ItemProto Reading Failed” | Un tip, subtip, limită sau apply scris greșit | Compară cu backupul, corectează cuvântul |
| Modificarea nu are efect | Ai editat altă copie sau nu ai repornit | Verifică calea și repornește |
| Efectul e nou, tooltip-ul vechi | Clientul are item_proto vechi | Actualizează și clientul |
| Un flag nou nu are efect | Nume de flag scris greșit | Verifică litera cu literă |
Greșeli des întâlnite
- Spații în loc de TAB. Rândul se citește greșit și coloanele „alunecă”.
- Flag scris greșit. În sursa verificată, un flag sau anti-flag necunoscut e ignorat fără nicio eroare. Itemul pare normal, dar interdicția lipsește. Copiază numele dintr-un rând existent.
- Diacritice sau ghilimele în coloana de nume intern. Pune numele frumos doar în
item_names.txt; coloana a doua las-o simplă, fără diacritice și fără ghilimele. - Ștergi rândul de antet. Serverul sare peste primul rând; dacă îl ștergi, pierzi primul item.
- Copiezi coloane de pe forum. Alte pachete au 34–36 de coloane (de exemplu un al patrulea apply). Numără coloanele la tine.
Întrebări frecvente
Pot edita item_proto cu Excel?
Nu e recomandat. Excel poate schimba numerele, codificarea și TAB-urile fără să observi. Folosește Notepad++.
Am schimbat valoarea, dar itemele vechi ale jucătorilor?
Valorile din item_proto se aplică tuturor itemelor cu acel VNUM, inclusiv celor deja existente. Bonusurile aleatorii de pe un item sunt însă salvate separat, pe item.
De ce sunt două coloane de preț?
Una e prețul de cumpărare de la magazinul NPC, cealaltă e baza pentru vânzarea la NPC. Detalii despre magazine în lecția Iteme într-un magazin NPC.
Ce urmează
Lecția următoare: Cum creezi un item nou (server + client). 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ă.