Cele mai multe probleme de spawn nu vin din VNUM-uri greșite, ci din **coordonate** greșite. Monstrul apare în zid, pe altă hartă sau deloc. Cauza e aproape mereu aceeași: Metin2 folosește **două feluri de coordonate**, iar fișierele și comenzile nu le folosesc pe aceleași. În lecția asta înveți să le deosebești și să verifici orice poziție înainte s-o scrii într-un fișier.
/state („Local Position”). Coordonatele globale sunt locale + poziția hărții din Setting.txt. Nu copia niciodată coordonate de pe o hartă pe alta.Cuvinte pe care le vei întâlni
| Cuvânt | Ce înseamnă |
|---|---|
| Index de hartă | Numărul unei hărți (de exemplu 1). Îl folosesc configurările și questurile. |
| Coordonate locale | Poziția pe o hartă, în metri, de la colțul ei. |
| Coordonate globale | Poziția în „lumea” întreagă, unde toate hărțile stau una lângă alta. |
| BasePosition | Locul colțului hărții în lumea întreagă. |
| Atribut | O informație despre un punct de pe hartă: blocat, apă, zonă fără PvP. |
O comparație simplă
Gândește-te la un oraș cu mai multe blocuri. „Apartamentul 12” e o adresă locală: are sens doar dacă știi în ce bloc ești. „Strada Florilor 7, apartamentul 12” e o adresă globală. În Metin2, blocul e harta, iar „Strada Florilor 7” e BasePosition.
Pasul 1: află numele și numărul hărții
În folderul de hărți al pachetului există un fișier index care leagă numărul hărții de folderul ei. În pachetul verificat (share/locale/english/map/index):
1 metin2_map_a1
3 metin2_map_a3
21 metin2_map_b1
41 metin2_map_c1Deci harta 1 e folderul metin2_map_a1. Pe acest număr îl vezi în MAP_ALLOW (vezi CONFIG și canale) și în questuri.
Pasul 2: citește Setting.txt
În folderul hărții, Setting.txt descrie mărimea și poziția ei. Din pachetul verificat, pentru metin2_map_a1:
CellScale 200
MapSize 4 5
BasePosition 409600 896000Ce înseamnă:
- MapSize 4 5: harta are 4 bucăți pe orizontală și 5 pe verticală. În sursa verificată, o bucată are 128 ×
CellScaleunități, iar 100 de unități = 1 metru. Deci: 4 × 128 × 200 / 100 = 1024 metri lățime și 5 × 128 × 200 / 100 = 1280 metri înălțime. - BasePosition 409600 896000: colțul hărții, în unități. Împărțit la 100: 4096 × 8960 metri în lumea întreagă.
Concluzie practică: pe această hartă, coordonatele locale bune sunt X între 0 și 1024 și Y între 0 și 1280. Un rând de spawn cu X = 1500 e sigur greșit.
Pasul 3: ce fel de coordonate folosește fiecare loc
| Unde | Ce coordonate (în sursa verificată) |
|---|---|
regen.txt, npc.txt, boss.txt, stone.txt | Locale, în metri |
Town.txt (punctele de reînviere din sat) | Locale, în metri |
Comanda GM /goto x y | Locale, pe harta pe care ești |
Comanda GM /warp x y | Globale, în metri |
Funcția de quest mob.spawn | Locale, în metri |
Ce scrie /state la „Coordinate” | Globale (în unități, apoi în metri) |
Ce scrie /state la „Local Position” | Locale, în metri |
Serverul transformă singur coordonatele locale în globale: le înmulțește cu 100 și adaugă BasePosition.
Pasul 4: află poziția exactă cu /state
Intră cu GM-ul, mergi în locul dorit și scrie:
/stateÎn sursa verificată, printre altele, primești un rând de forma:
Coordinate 469300x964200 (4693x9642) MapIndex 1 Attribute 00000004 Local Position (597 x 682)Pe bucăți:
469300x964200sunt coordonatele globale în unități, iar(4693x9642)aceleași, în metri;MapIndex 1e harta (aicimetin2_map_a1);Local Position (597 x 682)sunt numerele pe care le scrii în fișierele de spawn.
Verificare de control: 4096 + 597 = 4693 și 8960 + 682 = 9642. Globale = colțul hărții + locale. Dacă socoteala nu iese, ești pe altă hartă decât crezi.
Pasul 5: atributul punctului contează
Același rând îți arată și Attribute. În sursa verificată, atributele sunt „steaguri” adunate într-un număr:
| Valoare (hex) | Înseamnă |
|---|---|
00000001 | Blocat (zid, stâncă) |
00000002 | Apă |
00000004 | Zonă fără PvP (de obicei satul) |
00000080 | Obiect (clădire, copac mare) |
00000000 | Teren liber |
De ce contează: în sursa verificată, serverul nu pune monștri într-un punct blocat, cu obiect sau în zona fără PvP. La un rând cu rază, încearcă de câteva ori puncte la întâmplare din zonă. La un rând cu rază 0 0, dacă punctul e blocat, monstrul pur și simplu nu apare, fără vreo eroare clară în syserr. NPC-urile sunt excepție: ele sunt puse oriunde, chiar și în zid. De aceea un NPC „în perete” e mereu o problemă de coordonate.
Pasul 6: verifică punctul înainte să-l scrii
Pentru un loc ales din altă sursă (un forum, alt fișier, un coleg), testează-l înainte:
- Mergi pe harta corectă.
- Teleportează-te la coordonatele locale cu
/goto 597 682. - Scrie
/stateși uită-te laAttributeși la ce vezi pe ecran. - Dacă personajul a ajuns pe teren liber, unde ar avea sens un monstru, punctul e bun.
Pentru o hartă pe care nu ești, /warp cu coordonate globale te duce direct: /warp 4693 9642 în exemplul nostru (sau calculezi: colțul hărții în metri + locale).
Comenzile GM pot avea alte nume sau alt comportament în alte pachete. Dacă /state nu arată „Local Position”, scade singur colțul hărții din coordonatele globale.
Bonus: cum verifici un fișier întreg
Poți căuta rânduri cu coordonate în afara hărții. Pentru metin2_map_a1 (1024 × 1280 metri):
cd /usr/home/game/share/locale/english/map/metin2_map_a1
awk '$1 !~ /^\/\// && NF>=11 && ($2>1024 || $3>1280) {print FILENAME": "NR": "$0}' regen.txt npc.txt boss.txt stone.txt(Calea e un exemplu; limitele le calculezi din Setting.txt-ul hărții tale.) Dacă nu afișează nimic, nicio coordonată nu iese din hartă. Nu garantează însă că punctul nu e în zid: asta verifici doar în joc.
Greșeli des întâlnite
| Ce vezi | Cauza probabilă |
|---|---|
| Monstrul nu apare deloc | Punct blocat, în sat sau în afara hărții |
| NPC-ul e în zid | Coordonate de pe altă hartă sau citite greșit |
Ai scris în fișier coordonatele „Coordinate” din /state | Acelea sunt globale; în fișiere intră „Local Position” |
/goto te duce în alt loc decât te așteptai | Erai pe altă hartă: /goto folosește harta curentă |
| Spawn-ul merge pe harta empire-ului roșu, dar nu pe celelalte | Hărțile au mărimi și forme diferite; coordonatele nu se copiază între ele |
Întrebări frecvente
De ce sunt cifrele uneori de 100 de ori mai mari?
Pentru că serverul lucrează intern în unități de un centimetru (100 de unități = 1 metru). Fișierele de spawn și comenzile /goto, /warp folosesc metri.
Pot folosi aceleași coordonate pe hărțile celor trei imperii?
Nu. Hărțile seamănă, dar nu sunt identice. Ia coordonatele separat, cu /state, pe fiecare hartă.
Clientul are și el coordonate?
Clientul are propriile fișiere de hartă, iar pozițiile hărților trebuie să se potrivească cu serverul. Când doar pui monștri pe o hartă existentă, nu ai nimic de schimbat în client.
Ce urmează
Lecția următoare: cum testezi dropul 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ă.