„Bonusurile” sunt motivul pentru care jucătorii farmează luni întregi: HP maxim, putere împotriva monștrilor, rezistențe. Pentru un administrator, sunt și una dintre cele mai ușoare căi de a strica echilibrul serverului. Înainte să schimbi ceva, trebuie să știi că bonusurile vin din **trei surse diferite**, fiecare reglată în alt loc.
item_proto; bonusurile aleatorii (cele schimbate cu „Vrăjește obiectul”) vin din tabelele item_attr și item_attr_rare din baza de date; pietrele se pun în locașuri, al căror număr e tot în item_proto.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| Apply | Un bonus fix, același pe toate itemele cu acel VNUM. |
| Bonus aleator (atribut) | Un bonus tras la întâmplare, diferit de la un item la altul. |
| item_attr | Tabelul din baza de date cu bonusurile aleatorii obișnuite și valorile lor. |
| item_attr_rare | Tabelul cu bonusurile „rare” (al 6-lea și al 7-lea). |
| Socket (locaș) | Loc în armă sau armură în care pui o piatră de spirit. |
Sursa 1: bonusurile fixe (apply) din item_proto
Fiecare item are trei perechi de coloane pentru bonusuri fixe. În antetul pachetului verificat se numesc ADDON_TYPE0/ADDON_VALUE0 până la ADDON_TYPE2/ADDON_VALUE2, dar conțin valori de tip APPLY_….
Exemplu verificat: Colierul de lemn (VNUM 16000) are:
APPLY_CAST_SPEED 2 APPLY_RESIST_FIRE 1 APPLY_NONE 0Adică: viteză de vrajă +2, rezistență la foc +1, iar al treilea loc e gol. Orice Colier de lemn are exact aceste bonusuri.
Ce trebuie să știi:
- sunt maximum 3 în pachetul verificat (unele pachete au 4, cu sursă modificată);
- numele trebuie scris exact (
APPLY_MAX_HP,APPLY_ATT_SPEEDetc.); un nume greșit oprește încărcarea itemelor, iar însyserrapare „ItemProto Reading Failed”; - schimbarea se aplică imediat tuturor itemelor cu acel VNUM, inclusiv celor deja deținute de jucători.
Sursa 2: bonusurile aleatorii (item_attr)
Acestea sunt bonusurile pe care jucătorii le „dau” cu itemele de tip Vrăjește obiectul (VNUM 71084, schimbă bonusurile) și Întărirea obiectului (VNUM 71085, adaugă un bonus). Ele se salvează pe fiecare item în parte, în baza de date.
Regulile lor stau în tabelul item_attr din baza de date player. Un rând din pachetul verificat, explicat:
('MAX_HP','35','500','500','1000','1500','2000','0','5','5','5','5','0','0','0')| Coloană | Valoare | Ce înseamnă |
|---|---|---|
| apply | MAX_HP | Bonusul: HP maxim |
| prob | 35 | Cât de des iese față de celelalte bonusuri (pondere) |
| lv1…lv5 | 500 500 1000 1500 2000 | Valoarea bonusului pe fiecare treaptă |
| weapon | 0 | Pe arme nu poate apărea |
| body, wrist, foots, neck | 5 | Pe armură, brățară, papuci, colier poate apărea, până la treapta 5 |
| head, shield, ear | 0 | Pe coif, scut, cercei nu apare |
Cifra din coloanele de echipament e treapta maximă permisă pe acel tip de item; 0 înseamnă „niciodată”. Am verificat asta în codul care citește tabelul (db/src/ClientManagerBoot.cpp) și în cel care alege bonusul (game/src/item_attribute.cpp).
Prob nu e procent. E o pondere: un bonus cu 35 iese de aproximativ 3 ori mai des decât unul cu 11, dintre cele permise pe acel item.
Câte bonusuri și cu ce șanse
În sursa verificată, un item poate avea până la 7 bonusuri aleatorii: 5 obișnuite și 2 rare (ITEM_ATTRIBUTE_MAX_NUM = 7). Șansele de reușită la adăugarea unui bonus, din constants.cpp:
| Al câtelea bonus | Șansă |
|---|---|
| 1 | 100% |
| 2 | 80% |
| 3 | 60% |
| 4 | 50% |
| 5 | 30% |
Întărirea obiectului adaugă bonusuri până la al 4-lea. Al 5-lea se adaugă cu un alt item (în pachetul verificat, „Blessing Marble”, de exemplu VNUM 70024). La tine pot exista alte iteme sau alte reguli.
Sursa 3: pietrele și locașurile
Coloana SOCKET din item_proto spune câte locașuri primește itemul când e creat (maximum 3). Exemplu verificat: Sabie+9 are 1 locaș, o sabie de nivel 75 (VNUM 189) are 3. În locașuri jucătorii pun pietre de spirit, care aduc bonusurile pietrei.
Mai există două coloane cu efect la creare:
MAGIC_PCT: șansa (%) ca un item dropat să apară direct cu bonusuri aleatorii;ATTU_ADDON: la unele arme, adaugă automat bonusuri speciale (de exemplu daune medii / daune ale abilităților). Lasă-l cum e la itemul după care copiezi.
Cum schimbi în siguranță
- Decide pe hârtie. Exemplu: „Vreau ca HP maxim să poată apărea și pe coif, până la treapta 3.”
- Lucrează pe baza de date de test, niciodată direct pe cea live (lecția Server de test).
- Fă copie la tabel înainte (lecția Backup).
- Citește întâi, apoi modifică:
SELECT * FROM item_attr WHERE apply = 'MAX_HP';
UPDATE item_attr SET head = '3' WHERE apply = 'MAX_HP';- Repornește serverul de test:
dbcitește tabelele la pornire.
Ce ar trebui să vezi: pe un coif, după multe încercări cu „Vrăjește obiectul”, apare uneori HP maxim, dar niciodată peste valoarea treptei 3 (1000).
Ce testezi după o schimbare de bonusuri
- Reroll: folosește de 20–30 de ori „Vrăjește obiectul” pe itemul de test și notează ce iese.
- Echipare: echipează itemul și verifică în fereastra personajului că bonusul chiar se adună.
- Relog: ieși și intră din nou; bonusurile trebuie să rămână.
- Duel: pentru bonusuri de atac sau rezistență, fă un duel între două personaje de test.
Greșeli des întâlnite
- Pui valori uriașe (de exemplu 50% șansă de lovitură critică pe treapta 1). Jocul devine dezechilibrat în câteva zile, iar itemele deja create rămân cu bonusurile vechi.
- Crezi că „prob” e procent. E o pondere față de celelalte bonusuri permise.
- Modifici bonusurile pe live. Itemele trase greșit nu se mai „repară” singure.
- Adaugi un apply nou doar pe server. Clientul trebuie să-l poată afișa; un tip pe care clientul nu-l cunoaște poate apărea gol sau greșit în tooltip.
Întrebări frecvente
Dacă schimb item_attr, se schimbă bonusurile deja existente?
Nu. Bonusurile aleatorii sunt salvate pe fiecare item. Schimbarea afectează doar ce iese de acum încolo.
Unde văd bonusurile unui item al unui jucător?
În tabelul item din baza player, coloanele attrtype0…6 și attrvalue0…6. Doar citește, pe o copie (vezi Tabelele player și account).
Pot pune un bonus fix pe o armă existentă?
Da, în coloanele apply ale rândului ei din item_proto, dacă mai ai un loc liber. Refă și item_proto-ul clientului, ca tooltip-ul să-l arate.
Ce urmează
Lecția următoare: Armele și armurile de început. 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ă.