Ai adăugat un item nou, l-ai creat în joc cu GM-ul și… căsuța din inventar e goală. Sau itemul are iconiță, dar numele e greșit. Sau tooltip-ul arată un bonus, dar în realitate primești altul. Toate au aceeași cauză: **serverul și clientul nu știu același lucru despre item**. În această lecție afli ce fișiere trebuie să se potrivească, unde sunt și cum găsești rapid care lipsește.
item_proto de server). Clientul doar îl desenează, din propriile fișiere: item_proto de client, item_list.txt, itemdesc.txt și iconița. Același VNUM trebuie să existe, cu aceleași date, în toate aceste locuri.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| VNUM | Numărul unic al itemului. Vezi ce este VNUM. |
item_proto de server | Tabelul cu regulile itemului: tip, nivel, bonusuri, dacă se poate vinde. |
item_proto de client | O copie a acestor date, în format binar, pe care clientul o folosește pentru tooltip. |
item_list.txt | Fișierul din client care leagă VNUM-ul de iconiță și de modelul 3D. |
itemdesc.txt | Fișierul din client cu numele și descrierea afișate. |
| Pack | Arhivele .eix/.epk din folderul pack al clientului, în care stau fișierele de mai sus. |
Cine decide ce
Gândește-te la un restaurant. Bucătăria (serverul) decide ce e în farfurie. Meniul (clientul) doar arată poza și descrierea. Dacă meniul are o poză veche, clientul vede altceva decât primește. Dacă bucătăria nu are rețeta, nu primește nimic, oricât de frumos ar fi meniul.
De aici regula de bază: ce face itemul se schimbă pe server. Modificările făcute doar în client schimbă doar ce se vede.
Unde stă fiecare informație
În pachetul pe care l-am verificat, lucrurile arată așa (la tine căile pot diferi puțin):
| Unde | Fișier | Ce conține |
|---|---|---|
| Server | share/conf/item_proto.txt | Regulile itemului |
| Server | share/conf/item_names.txt (și variantele pe limbi) | Numele itemului pe server |
| Client | locale/ro/item_proto (în pack-ul locale_ro) | Datele pentru tooltip, în format binar |
| Client | locale/ro/item_list.txt | VNUM → tip, iconiță, model 3D |
| Client | locale/ro/itemdesc.txt | VNUM → nume și descriere |
| Client | icon/item/....tga (în pack-ul icon) | Imaginea itemului |
| Client | fișier .gr2 (în pack-ul item) | Modelul 3D, doar pentru arme, armuri și ce se vede pe personaj |
Un detaliu util din pachetul verificat: procesul db citește item_proto.txt prin legături către share/conf, la pornire. Deci după ce schimbi item_proto.txt pe server, ai nevoie de restart ca să se aplice.
Cum arată rândurile din client
În item_list.txt, fiecare rând are coloane despărțite de TAB:
19 WEAPON icon/item/00010.tga d:/ymir work/item/weapon/00010.gr2
27001 ETC icon/item/27001.tga d:/ymir work/item/etc/medicine_R.GR2
71001 ETC icon/item/71001.tgaPe rând: VNUM-ul, tipul, calea iconiței și, opțional, calea modelului 3D. Observă că 19 (Sabie+9) folosește iconița lui 10 (Sabie+0): toate nivelurile de upgrade ale unei arme au aceeași imagine.
În itemdesc.txt, tot cu TAB:
100000 Time Elixir (S) Refills the duration of a Dragon Stone.VNUM-ul, numele, descrierea. Exemplele sunt copiate din clientul verificat (varianta în engleză).
Pentru TAB-uri și diacritice, aplică regulile din fișierele TXT: taburi și encoding.
Pasul 1: Verifică itemul pe server
Să zicem că itemul nou are VNUM 95000. Pe server, în folderul share/conf:
awk -F'\t' '$1 == "95000"' item_proto.txt
awk -F'\t' '$1 == "95000"' item_names.txtawk -F'\t' împarte fiecare rând în coloane după TAB, iar $1 == "95000" păstrează doar rândurile a căror primă coloană e exact 95000. Așa nu găsești din greșeală 195000 sau 950001.
Ce ar trebui să vezi: câte un rând în fiecare fișier. Dacă nu apare nimic în item_proto.txt, serverul nu cunoaște itemul și nu îl poate crea, oricât de bun ar fi clientul.
Pasul 2: Verifică itemul în client
Clientul ține fișierele în pack-uri. Ca să le vezi, ai nevoie de unealta de pack/unpack a clientului tău (în pachetul verificat vine una lângă client). Extragi pack-ul locale al limbii tale într-un folder separat și cauți în el, de exemplu în Notepad++ cu Ctrl+F:
- În
item_list.txt: există rândul pentru95000? Calea iconiței e corectă? - În
itemdesc.txt: există rândul cu numele? - În pack-ul
icon: există fișierul de imagine indicat înitem_list.txt, cu exact același nume?
item_proto de client e binar, nu-l poți citi în Notepad++. Se generează din fișiere text cu o unealtă (în pachetul verificat, dump_proto, care primește item_proto.txt și item_names.txt). Cea mai sigură practică: îl generezi din aceleași fișiere ca serverul, ca să nu ajungă diferite.
Pasul 3: Testează în joc
Pe serverul de test, cu clientul actualizat, creezi itemul cu comanda de GM (de exemplu /i 95000) și verifici:
- Iconița apare.
- Numele și descrierea sunt corecte.
- Tooltip-ul arată exact bonusurile și nivelul din
item_proto.txtde server. - Itemul se poate echipa sau folosi cum trebuie.
- Dacă e armă sau armură, modelul apare pe personaj.
- Itemul trece corect prin trade și depozit (vezi testele după update).
Ce vezi → ce lipsește
| Ce vezi în joc | Cauza cea mai probabilă | Ce verifici |
|---|---|---|
| Căsuță goală, fără iconiță | Lipsește rândul din item_list.txt sau imaginea | item_list.txt și pack-ul icon |
| Iconiță, dar nume greșit sau lipsă | Client cu nume vechi | itemdesc.txt și item_proto de client |
| Tooltip-ul arată alte bonusuri decât primești | item_proto de client diferit de cel de server | Regenerează item_proto de client din fișierele serverului |
Comanda /i nu creează nimic | Itemul nu există pe server | item_proto.txt de server și restart |
| Personajul apare fără armă când o echipează | Lipsește modelul 3D sau calea e greșită | A patra coloană din item_list.txt, pack-ul item |
| Merge la tine, nu la jucători | Update-ul de client nu a ajuns la ei | Autopatcherul (vezi update de client) |
Greșeli des întâlnite
- Schimbi bonusurile doar în client. Tooltip-ul se schimbă, efectul real nu.
- Uiți restartul după
item_proto.txtde server. Fișierul nou nu e încă citit. - Publici clientul fără server, sau invers. Jucătorii văd iteme goale sau nu pot folosi itemul. Le publici împreună, în mentenanță.
- Calea iconiței diferă printr-o literă sau un folder. Clientul caută exact calea scrisă în
item_list.txt. Copiaz-o, nu o rescrie de mână. - Uiți alte limbi. Dacă ai client în mai multe limbi, fiecare
localeare propriileitem_list.txtșiitemdesc.txt.
Întrebări frecvente
Pot schimba doar numele unui item fără update de server?
Numele afișat vine din client, deci da, se poate schimba doar acolo. Dar ține și numele de pe server la fel, pentru mesajele din chat și jurnale.
De ce itemul arată bine la mine și gol la un prieten?
Pentru că tu ai clientul nou, iar el are clientul vechi. Verifică dacă autopatcherul i-a adus fișierele.
Trebuie să adaug itemul și în baza de date?
Depinde de pachet. Unele încarcă item_proto din fișiere text, altele din tabelul player.item_proto. În pachetul verificat, sursa db citește item_proto.txt, deși tabelul player.item_proto există și el în baza de date. Află care variantă folosește pachetul tău înainte să schimbi ceva. Vezi și cum creezi un item nou pe server și client.
Ce urmează
Ai terminat capitolul Operare zilnică și update-uri! Următorul capitol, Securitate și lansare, începe cu conturile GM și permisiunile. 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ă.