aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Een nieuwe map toevoegen in Metin2: van map index tot atlas

Een nieuwe map toevoegen in Metin2 is op het eerste gezicht veel meer "boekhoudwerk" dan je zou denken: een paar bestanden kopiëren is niet genoeg — de server (game core) en de client moeten het eens zijn over precies hetzelfde indexnummer en precies dezelfde coördinaten. Verschuift die afstemming ook maar één klik, dan vliegt de speler eruit op het moment dat hij erin teleporteert, of crasht de client volledig. In deze gids loop ik door het introduceren van een verse map vanaf nul, terwijl beide kanten synchroon blijven.

Het concept doorgronden: wat is een map eigenlijk?

In Metin2 is een "map" geen enkel bestand maar een map (folder). Daarin staan de height- en tile-data die het terrein beschrijven, water- en omgevingsinstellingen, verspreide objecten, en een handvol tekstbestanden die het gedrag aan de serverkant bepalen. De server herkent die folder via een indexnummer; de client plaatst diezelfde folder met wereldcoördinaten. Beide kanten hebben het dus over dezelfde map, maar gebruiken verschillende "sleutels". Precies hier leeft de synchronisatie: de index en de coördinaten moeten aan beide kanten tot op de byte overeenkomen.

Kies een vrije index

De eerste regel: creëer geen botsing. Om de indexen van bestaande maps te zien, bekijk je het bestand map_index in de datamap van de server. Het formaat is simpel; elke regel bevat een index en een foldernaam, gescheiden door een tab:

1	metin2_map_a1
2	metin2_map_a3
3	metin2_map_b1
...
61	metin2_map_newmap

Een ongebruikt, hoog nummer kiezen (bijvoorbeeld 61) is het veiligst; lage nummers zijn voorbehouden aan de officiële maps, en systemen zoals quests, items of guild wars kunnen er vaste verwijzingen naar bevatten. Houd de foldernaam betekenisvol en in kleine letters: metin2_map_newmap.

Serverkant: de folder en zijn tekstbestanden

Kopieer de gekozen map naar de map-datamap van de server. Wil een map correct openen op de server, dan zijn de kritieke tekstbestanden:

  • Setting.txt — Draagt de kernparameters zoals MapSize, omgevingsinstellingen en PvP/safe-zone-vlaggen. De grootte moet consistent zijn met de breedte/hoogte in atlasinfo.
  • Town.txt — Definieert de coördinaten van de drie rijken en het algemene teleportpunt (Goto). Een verkeerde coördinaat dumpt de speler buiten de map in de "void" en gooit hem eruit.
  • regen / *.txt — De regen-bestanden die de spawns van mobs en metin-stenen beheren. Op een gloednieuwe map kun je ze eerst leeg laten en later invullen.

Al deze bestanden zitten in de folder van de map. Een ontbrekend of beschadigd Setting.txt zorgt dat de core die map stilzwijgend overslaat tijdens het laden.

De centrale registers van de server: map_index en atlasinfo

Is de folder klaar, werk dan de twee centrale registers bij. Voeg eerst je nieuwe regel toe aan het hierboven getoonde map_index-bestand. Voeg daarna aan atlasinfo.txt een regel toe die de plaatsing van de map in de wereld beschrijft:

metin2_map_newmap	409600	896000	4	4	0

De kolommen zijn op volgorde: foldernaam, de X-basiscoördinaat in de wereld, de Y-basiscoördinaat, de breedte en hoogte (in sectree-blokken), en een gereserveerd veld. De breedte en hoogte hier moeten overeenkomen met de MapSize in Setting.txt; anders wordt een deel van de map als niet-bestaand behandeld. Zorg er ook voor dat het coördinatenblok van de nieuwe map niet overlapt met bestaande maps — atlasinfo legt de hele wereld op één raster, en twee maps kunnen niet dezelfde cel delen.

Vertel de channel over de map: CONFIG en map_allow

De server bestaat uit meerdere channels en cores. Het CONFIG-bestand van elke core bevat een map_allow-regel (in sommige emulators een %env/map_allow-vermelding) die aangeeft voor welke maps dat proces verantwoordelijk is. Voeg je de nieuwe index niet toe aan de allow-lijst van de betreffende channel, dan bestaat de map wel op de server maar laadt geen enkel proces hem en kan de speler er niet in:

map_allow: 1 3 21 61

Herstart de betreffende channel na de wijziging. Houd de logs in de gaten: bij het opstarten print de core de map-indexen die hij laadt, en je zou 61 in die lijst moeten zien.

Clientkant: weerspiegel dezelfde informatie exact

De server alleen is niet genoeg. De client moet dezelfde map ook herkennen, en de bestanden hier moeten consistent zijn met die van de server:

  • De map-folder — Voeg hem, met zijn terrein-, textuur- en objectdata, toe aan het pack-archief van de client (meestal onder de map-directory).
  • atlasinfo.txt — Dit bestand in de root van de client moet coördinaten bevatten die tot op de byte identiek zijn aan de regel van de server. Dit is de meest gemaakte fout: hem op de server bijwerken en op de client vergeten.
  • Wereldkaart en minimap — Voeg de icon/worldmap-afbeeldingen en de minimap-tegels toe, zodat de speler geen zwart scherm ziet bij het drukken op M.

Onthoud dat indexnummers niet apart worden gedefinieerd aan de clientkant; de matching gebeurt via de foldernaam en coördinaten. Daarom moet de foldernaam letter voor letter identiek zijn aan beide kanten.

Test het: teleporteer en lees de logs

Staat alles op zijn plaats, log dan in en teleporteer naar de map met GM-rechten. In de meeste emulators brengt een /goto- of warp-commando je naar de Goto-coördinaat uit Town.txt. Land je op de juiste plek, kun je rondlopen en opent de map met M, dan is de sync goed. Gaat er iets mis, dan is het bijna altijd een van drie verdachten: een atlasinfo-coördinatenoverlap, een server/client-coördinatenverschil, of een index die ontbreekt in map_allow. Dan versnelt het bekijken van zowel de syserr-logs als het foutbestand aan de clientkant de diagnose.

Veelgestelde vragen

De map bestaat op de server maar ik vlieg eruit bij binnenkomst — waarom?

De meest voorkomende oorzaak is een coördinaten- of grootteverschil tussen de atlasinfo.txt-bestanden van server en client. Zorg dat de regel in beide identiek is en consistent met de MapSize in Setting.txt. De tweede oorzaak is dat de index niet in de map_allow-lijst van de betreffende channel staat.

Welk indexnummer moet ik kiezen?

Kies een ongebruikt, hoog nummer in het bestaande map_index-bestand. Lage nummers zijn voorbehouden aan officiële maps en de systeemverwijzingen die erin vastliggen; ze gebruiken leidt tot onverwachte botsingen.

Is hem alleen aan de client toevoegen genoeg?

Nee. De map moet aan beide kanten worden gedefinieerd. Voeg je hem alleen aan de client toe, dan kan de speler de map renderen, maar omdat de server die regio niet beheert kan het personage er niet inloggen, of wordt het direct eruit gegooid.

Wil je je nieuwe map zonder kopzorgen live zetten? We kunnen samen de hele synchronisatie opzetten, van de server map index tot de client atlasinfo, plus regen- en quest-integratie. Neem contact op en laten we je project bespreken.

Devamı için