Ai creat un item nou și merge în inventar. Gata? Nu încă. În joc, un item călătorește: e dat la schimb, pus în depozit, vândut la NPC, pus în magazinul personal, aruncat pe jos. Fiecare drum are regulile lui. Un item de eveniment care poate fi vândut între jucători poate strica economia; un item scump care se pierde la mutarea în depozit aduce reclamații. În lecția asta faci o listă cu toate drumurile și le testezi pe rând.
item_proto (ANTI_GIVE, ANTI_SAFEBOX, ANTI_DROP, ANTI_SELL, ANTI_MYSHOP etc.). Faci un tabel cu toate drumurile itemului, testezi fiecare cu două conturi pe serverul de test și verifici cantitatea după fiecare mutare și după relog.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| Trade (schimb) | Fereastra în care doi jucători își dau iteme între ei. |
| Depozit (safebox) | Spațiul de depozitare al contului, de la NPC-ul depozitar. |
| Magazin personal | Magazinul pe care un jucător îl deschide ca să vândă altora. |
| Mall (depozit item-shop) | Depozitul separat în care ajung itemele cumpărate din item-shop. |
| Dublare (dupe) | O greșeală prin care un item apare de două ori. Cel mai periculos bug pentru economie. |
Interdicțiile, verificate în sursă
Am căutat fiecare anti-flag în sursa game a pachetului de referință, ca să vedem unde are efect de fapt:
| Anti-flag | Ce blochează (în sursa verificată) |
|---|---|
ANTI_GIVE | Schimbul (trade), aruncarea pe jos, magazinul personal, pierderea la moarte PK |
ANTI_DROP | Aruncarea pe jos |
ANTI_SELL | Vânzarea la magazinul NPC |
ANTI_MYSHOP | Punerea în magazinul personal |
ANTI_SAFEBOX | Punerea în depozit |
ANTI_STACK | Stivuirea în teanc |
ANTI_PKDROP | Pierderea itemului la moarte în PvP |
ANTI_GET, ANTI_SAVE | Nu am găsit nicio verificare în sursa verificată, deci aici nu au efect |
Observă că ANTI_GIVE e „cel mai larg”: blochează aproape orice transfer spre alt jucător. Dacă vrei un item „legat de cont”, el e baza.
Mai există și un flag (nu anti-flag) util: ITEM_IRREMOVABLE, pentru iteme care nu se mai pot scoate odată echipate. Atenție însă: în pachetul verificat, felul în care fișierul TXT traduce numele unor flag-uri nu se potrivește perfect cu codul. Nu te baza pe nume, testează efectul.
La tine poate fi altfel. Pachetele moderne adaugă anti-flag-uri noi (de exemplu pentru sisteme de costume sau schimbare de aspect). Dacă un nume nu există în sursa ta, e ignorat fără eroare.
Un exemplu real: cufărul de începător
În pachetul verificat, Cufărul de începător (VNUM 50187) are în coloana ANTI_FLAG:
ANTI_DROP | ANTI_SELL | ANTI_GIVE | ANTI_STACK | ANTI_MYSHOP | ANTI_SAFEBOXAdică: nu se aruncă, nu se vinde la NPC, nu se dă la schimb, nu se stivuiește, nu se pune în magazinul personal și nu intră în depozit. Rămâne pe personajul care l-a primit. Exact ce vrei pentru un item gratuit de start.
Pasul 1: decide ce vrei, pe hârtie
Pentru itemul tău nou, completează un tabel ca acesta înainte de orice test:
| Drum | Licoare de eveniment (exemplu) |
|---|---|
| Trade între jucători | Nu |
| Depozit | Da |
| Vânzare la NPC | Da |
| Magazin personal | Nu |
| Aruncare pe jos | Nu |
| Stivuire | Da |
Din tabel rezultă anti-flag-urile: ANTI_GIVE | ANTI_MYSHOP | ANTI_DROP. Le scrii în coloana ANTI_FLAG a rândului din item_proto.txt, cum ai învățat în lecția Valorile din item_proto, și repornești serverul de test.
Pasul 2: pregătește testul
- două conturi de test, A și B, fiecare cu un personaj, pe serverul de test (lecția Mediu de test);
- un cont GM care creează itemul:
/item 95000 10; - o foaie cu trei coloane: cantitate înainte, acțiune, cantitate după.
Pasul 3: treci itemul prin fiecare drum
| Test | Ce ar trebui să vezi (pentru exemplul de mai sus) |
|---|---|
| A pune itemul în trade către B | Mesaj că itemul nu poate fi dat |
| A pune itemul în depozit, iese, intră, îl scoate | Aceeași cantitate, același loc liber |
| A vinde 1 bucată la NPC | Primește yang, teancul scade cu 1 |
| A încearcă să-l pună în magazinul personal | Mesaj de refuz, magazinul nu se deschide cu el |
| A încearcă să-l arunce pe jos | Mesaj că nu se poate arunca |
| A schimbă canalul, apoi verifică | Cantitatea e aceeași |
| A se deconectează și revine | Cantitatea e aceeași |
Ce ar trebui să vezi: fiecare drum permis funcționează, fiecare drum interzis afișează un mesaj și nu consumă și nu mută nimic.
Pasul 4: verifică și în baza de date
Mesajele din chat nu dovedesc că datele s-au salvat. Pe baza de date de test, poți citi unde se află itemul:
SELECT id, owner_id, window, pos, count, vnum FROM item WHERE vnum = 95000;Coloana window arată locul: INVENTORY, EQUIPMENT, SAFEBOX, MALL și altele. După ce pui itemul în depozit și te reconectezi, ar trebui să-l vezi cu SAFEBOX. Ține minte: serverul salvează cu o mică întârziere, așa că verifică după relog, nu imediat. Doar citești, nu modifici nimic aici (vezi Tabelele player și account).
Pasul 5: nu uita drumurile speciale
În funcție de server, un item mai poate ajunge:
- în mall, dacă îl livrezi din item-shop (în pachetul verificat, prin tabelul
item_award); - în recompense de quest sau cufere;
- pe jos, la moartea în PvP.
Fiecare dintre ele e un drum de testat. Testul complet după un update e descris în lecția Testezi trade, depozit și inventar după update.
Greșeli des întâlnite
- Scoți ANTI_GIVE de pe un item de item-shop „ca să fie mai prietenos”. Itemul devine marfă de vânzare între jucători. Fă-o doar după ce te gândești la economie și la dublări.
- Testezi cu un singur cont. Trade-ul și magazinul personal cer doi jucători.
- Te uiți doar la mesajul din chat. Verifică cantitatea după relog.
- Testezi pe live. Un item greșit pe live se răspândește în minute.
- Nume de anti-flag inventat. E ignorat fără eroare; itemul pare protejat, dar nu e.
Întrebări frecvente
Pot permite depozitul, dar nu trade-ul?
Da: pui ANTI_GIVE și nu pui ANTI_SAFEBOX. Depozitul e al contului, deci itemul poate trece între personajele aceluiași cont.
De ce am primit mesaj în coreeană sau semne ciudate la refuz?
Textele mesajelor vin din fișierele de traducere ale serverului. Dacă lipsește traducerea, apare textul original. Nu afectează funcționarea.
Se poate dubla un item prin depozit?
Într-o sursă bine întreținută, nu. Dar dublările apar de obicei exact la mutări rapide, lag sau deconectări. De aceea testezi și deconectarea în mijlocul acțiunilor, mereu pe serverul de test.
Ce urmează
Lecția următoare: Cum testezi un consumabil. 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ă.