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

Eine neue Map in Metin2 hinzufügen: vom Map Index zum Atlas

Eine neue Map in Metin2 hinzufügen ist auf den ersten Blick weit mehr "Buchhaltung", als man denkt: ein paar Dateien zu kopieren reicht nicht — Server (Game Core) und Client müssen sich auf exakt dieselbe Indexnummer und exakt dieselben Koordinaten einigen. Verschiebt sich diese Einigung auch nur um eine Stufe, fliegt der Spieler in dem Moment raus, in dem er hineinteleportiert, oder der Client stürzt komplett ab. In dieser Anleitung gehe ich das Einführen einer frischen Map von Grund auf durch und halte dabei beide Seiten synchron.

Das Konzept begreifen: Was ist eine Map eigentlich?

In Metin2 ist eine "Map" keine einzelne Datei, sondern ein Ordner. Darin liegen die height- und tile-Daten, die das Gelände beschreiben, Wasser- und Umgebungseinstellungen, verstreute Objekte sowie eine Handvoll Textdateien, die das serverseitige Verhalten steuern. Der Server erkennt diesen Ordner über eine Indexnummer; der Client platziert denselben Ordner über Weltkoordinaten. Beide Seiten sprechen also von derselben Map, nutzen aber unterschiedliche "Schlüssel". Genau hier lebt die Synchronisation: Index und Koordinaten müssen auf beiden Seiten Byte für Byte übereinstimmen.

Einen freien Index wählen

Erste Regel: keine Kollision erzeugen. Um die Indizes vorhandener Maps zu sehen, schau in die Datei map_index im Datenverzeichnis des Servers. Das Format ist simpel; jede Zeile besteht aus einem Index und einem Ordnernamen, getrennt durch einen Tabulator:

1	metin2_map_a1
2	metin2_map_a3
3	metin2_map_b1
...
61	metin2_map_newmap

Eine ungenutzte, hohe Nummer (etwa 61) zu wählen ist am sichersten; niedrige Nummern sind den offiziellen Maps vorbehalten, und Systeme wie Quests, Items oder Gildenkriege können fest eingebrannte Referenzen darauf halten. Halte den Ordnernamen aussagekräftig und kleingeschrieben: metin2_map_newmap.

Serverseite: der Ordner und seine Textdateien

Kopiere die gewählte Map ins Map-Datenverzeichnis des Servers. Damit eine Map serverseitig korrekt öffnet, sind die kritischen Textdateien:

  • Setting.txt — Trägt die Kernparameter wie MapSize, Umgebungseinstellungen sowie PvP-/Safe-Zone-Flags. Die Größe muss mit der Breite/Höhe in atlasinfo konsistent sein.
  • Town.txt — Definiert die Koordinaten der drei Reiche und des allgemeinen Teleportpunkts (Goto). Eine falsche Koordinate wirft den Spieler außerhalb der Map in den "Void" und kickt ihn.
  • regen / *.txt — Die regen-Dateien, die die Spawns von Mobs und Metin-Steinen verwalten. Auf einer brandneuen Map kannst du sie zunächst leer lassen und später füllen.

All diese Dateien liegen im Ordner der Map. Eine fehlende oder defekte Setting.txt sorgt dafür, dass der Core diese Map beim Laden stillschweigend überspringt.

Die zentralen Register des Servers: map_index und atlasinfo

Ist der Ordner bereit, aktualisiere die zwei zentralen Register. Füge zuerst deine neue Zeile in die oben gezeigte Datei map_index ein. Füge dann in atlasinfo.txt eine Zeile ein, die die Platzierung der Map in der Welt beschreibt:

metin2_map_newmap	409600	896000	4	4	0

Die Spalten sind der Reihe nach: Ordnername, X-Basiskoordinate in der Welt, Y-Basiskoordinate, Breite und Höhe (in Sectree-Blöcken) sowie ein reserviertes Feld. Breite und Höhe hier müssen mit der MapSize in Setting.txt übereinstimmen; sonst wird ein Teil der Map als nicht vorhanden behandelt. Stelle außerdem sicher, dass der Koordinatenblock der neuen Map sich nicht mit vorhandenen Maps überschneidet — atlasinfo legt die gesamte Welt auf ein einziges Raster, und zwei Maps können sich keine Zelle teilen.

Der Channel die Map mitteilen: CONFIG und map_allow

Der Server besteht aus mehreren Channels und Cores. Die CONFIG-Datei jedes Cores enthält eine map_allow-Zeile (in manchen Emulatoren ein %env/map_allow-Eintrag), die angibt, für welche Maps dieser Prozess zuständig ist. Fügst du den neuen Index nicht zur Allow-Liste des betreffenden Channels hinzu, existiert die Map zwar auf dem Server, aber kein Prozess lädt sie, und der Spieler kann nicht hinein:

map_allow: 1 3 21 61

Starte den betreffenden Channel nach der Änderung neu. Beobachte die Logs: Beim Hochfahren gibt der Core die geladenen Map-Indizes aus, und du solltest 61 in dieser Liste sehen.

Clientseite: dieselbe Information spiegeln

Der Server allein genügt nicht. Auch der Client muss dieselbe Map erkennen, und die Dateien hier müssen konsistent mit denen des Servers sein:

  • Der Map-Ordner — Füge ihn samt seiner Gelände-, Textur- und Objektdaten in das pack-Archiv des Clients ein (meist unter dem Verzeichnis map).
  • atlasinfo.txt — Diese Datei im Root des Clients muss Koordinaten enthalten, die Byte für Byte identisch mit der Zeile des Servers sind. Das ist der häufigste Fehler: sie auf dem Server aktualisieren und am Client vergessen.
  • Weltkarte und Minimap — Füge die icon/worldmap-Bilder und die Minimap-Kacheln hinzu, damit der Spieler beim Drücken von M keinen schwarzen Bildschirm sieht.

Denk daran, dass Indexnummern clientseitig nicht separat definiert werden; das Matching erfolgt über Ordnername und Koordinaten. Deshalb muss der Ordnername auf beiden Seiten Buchstabe für Buchstabe identisch sein.

Testen: teleportieren und Logs lesen

Steht alles, logge dich ein und teleportiere mit GM-Rechten auf die Map. In den meisten Emulatoren bringt dich ein /goto- oder Warp-Befehl zur Goto-Koordinate aus Town.txt. Landest du am richtigen Punkt, kannst herumlaufen und öffnet sich die Map mit M, ist die Synchronisation gut. Geht etwas schief, ist es fast immer einer von drei Verdächtigen: eine atlasinfo-Koordinatenüberschneidung, eine Server/Client-Koordinatenabweichung oder ein Index, der in map_allow fehlt. Dann beschleunigt ein Blick sowohl in die syserr-Logs als auch in die clientseitige Fehlerdatei die Diagnose.

Häufige Fragen

Die Map existiert auf dem Server, aber ich fliege beim Betreten raus — warum?

Die häufigste Ursache ist eine Koordinaten- oder Größenabweichung zwischen den atlasinfo.txt-Dateien von Server und Client. Stelle sicher, dass die Zeile in beiden identisch und mit der MapSize in Setting.txt konsistent ist. Die zweite Ursache ist, dass der Index nicht in der map_allow-Liste des betreffenden Channels steht.

Welche Indexnummer soll ich wählen?

Wähle eine ungenutzte, hohe Nummer in der vorhandenen map_index-Datei. Niedrige Nummern sind den offiziellen Maps und den darin fest verankerten Systemreferenzen vorbehalten; ihre Nutzung führt zu unerwarteten Kollisionen.

Reicht es, sie nur dem Client hinzuzufügen?

Nein. Die Map muss auf beiden Seiten definiert sein. Fügst du sie nur dem Client hinzu, kann der Spieler die Map rendern, aber da der Server diese Region nicht verwaltet, kann sich der Charakter dort nicht einloggen oder wird sofort gekickt.

Willst du deine neue Map ohne Kopfschmerzen live bringen? Wir können gemeinsam die gesamte Synchronisation einrichten, vom Server Map Index bis zur Client-atlasinfo, plus regen- und Quest-Integration. Nimm Kontakt auf, und lass uns über dein Projekt sprechen.

Devamı için