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

Metin2 Mob Proto Bearbeiten: Neues Monster Hinzufügen

Früher oder später möchtest du beim Betrieb eines privaten Servers eigene Kreaturen hinzufügen, und im Zentrum dieser Aufgabe steht die metin2 mob proto Datei. Die Mob Proto ist der „Ausweis" jedes Monsters, NPCs und Bosses auf dem Server: eine große Tabelle, die Stufe, Lebenspunkte, Schaden, Rasse, Widerstände und fallengelassene Gegenstände an einem Ort vereint. In diesem Leitfaden erklären wir die Felder in einfacher Sprache und erstellen anschließend unser eigenes Monster auf einer freien VNUM, korrekt registriert auf Server und Client.

Was ist die Mob Proto und wo liegt sie?

In offiziellen und älteren 40k-basierten Serverfiles werden Monsterdaten auf zwei Arten gespeichert. Die klassische Methode nutzt eine lesbare mob_proto.txt Datei; moderne Setups halten dieselben Daten in der MySQL-Tabelle player.mob_proto, und das Werkzeug dump_proto erzeugt daraus die verschlüsselte mob_proto Datei, die der Client lesen kann. Egal welches System du nutzt, die Logik ist identisch: jede Zeile ist ein Monster, und jede Spalte ist eine seiner Eigenschaften.

Denk daran, dass es zwei Seiten gibt. Der Server liest die Proto für die Kampfberechnungen (Leben, Schaden, Widerstände, KI). Der Client braucht eine eigene Kopie, um Name, Modell und Ordner des Monsters zu kennen. Erkennen beide Seiten nicht dieselbe VNUM, ist das Monster unsichtbar oder der Client stürzt ab.

Die wichtigsten Felder

Eine Proto-Zeile hat Dutzende Spalten, aber wenige bestimmen den Charakter eines Monsters:

  • VNUM — Die eindeutige Kennung. Das gesamte System kommuniziert über diese Nummer; sie darf nie kollidieren.
  • NAME / LOCALE_NAME — Der Name, den der Spieler sieht. Zur Lokalisierung wird auch mob_names.txt verwendet.
  • RANKPAWN, S_PAWN, KNIGHT, S_KNIGHT, BOSS, KING. Bestimmt, ob es ein gewöhnliches Monster oder ein Boss ist.
  • TYPEMONSTER, NPC, STONE (Metin-Stein), WARP, DOOR und so weiter. Für eine Kreatur nutzt du MONSTER.
  • BATTLE_TYPE — Angriffsart wie MELEE, RANGE oder MAGIC.
  • LEVEL, MAX_HP, ST/DX/HT/IQ, DAMAGE_MIN/MAX, DEF — Die grundlegenden Kampfwerte.
  • AI_FLAG — Verhaltensflags wie AGGRESSIVE, COWARD (flieht) und NOMOVE (bleibt stehen).
  • RACE_FLAG — Rasse wie ANIMAL, UNDEAD, DEVIL oder ORC. Manche Gegenstände und Fähigkeiten verursachen darauf basierend Bonusschaden.
  • IMMUNE_FLAG — Immunitäten wie STUN, SLOW und POISON.
  • RESIST_* / ENCHANT_* — Widerstand gegen Waffenarten und Magie sowie Effekte, die seinen Angriffen hinzugefügt werden (Gift, Betäubung, Kritisch).
  • EXP, GOLD_MIN/MAX, DROP_ITEM — Belohnungen und die Verbindung zu seiner Drop-Gruppe.
  • FOLDER — Der Name des Modellordners auf dem Client. Ist er falsch, findet der Client das Modell nicht.

Wähle eine freie VNUM für dein neues Monster

Die erste Regel ist, Kollisionen zu vermeiden. Eine bestehende VNUM zu überschreiben zerstört jede Regen und jede Quest, die an dieses Monster gebunden ist. Der Bereich ab 20000 ist meist frei für eigene Inhalte. Bestätige, dass die Nummer in der aktuellen Tabelle wirklich leer ist:

-- Auf einem MySQL-basierten Setup
SELECT vnum, locale_name FROM player.mob_proto WHERE vnum = 20801;

Ist das Ergebnis leer, gehört die Nummer dir. Arbeitest du mit der Textdatei, suche in mob_proto.txt nach derselben VNUM, um sicherzugehen, dass sie nicht belegt ist.

Baue die Zeile

Ein praktischer Weg ist, die Zeile eines bestehenden, ähnlichen Monsters zu kopieren und anzupassen, damit du nicht jede Spalte von Grund auf füllst. Lass uns zum Beispiel einen verbesserten „Schattenwolf" auf einem gewöhnlichen Wolf aufbauen. In der Textdatei ist die Zeile durch TAB getrennt und muss exakt der Reihenfolge der Kopfzeile folgen:

# VNUM  NAME          RANK    TYPE     BATTLE_TYPE  LEVEL  ...  MAX_HP  ...  EXP    GOLD_MIN  GOLD_MAX  ...
20801   Shadow_Wolf   KNIGHT  MONSTER  MELEE        42     ...  18500   ...  9200   500       1400      ...

Da Anzahl und Reihenfolge der Spalten je nach Serverfiles-Version variieren, leite die echte Zeile immer von einem anderen Monster in derselben Datei ab; erfinde keine Spalten. Auf der MySQL-Seite machst du dasselbe mit einem INSERT:

INSERT INTO player.mob_proto (vnum, name, locale_name, rank, type, battle_type, level, max_hp, exp, gold_min, gold_max)
VALUES (20801, 'Shadow_Wolf', 'Schattenwolf', 'KNIGHT', 'MONSTER', 'MELEE', 42, 18500, 9200, 500, 1400);
-- die übrigen Spalten greifen auf die Standardwerte der Tabelle zurück; passe sie bei Bedarf mit UPDATE an

Zur Lokalisierung des Namens füge die VNUM und den Anzeigenamen auch in mob_names.txt ein. Definiere seine Drops, indem du die VNUM in mob_drop_item.txt / common_drop_item.txt verknüpfst oder über eine Quest.

Vergiss die Client-Seite nicht

Selbst wenn der Server das Monster kennt, muss der Client dieselbe VNUM erkennen, damit es auf dem Bildschirm des Spielers erscheint. Dafür erzeugst du mit dump_proto eine neue Client-mob_proto und verteilst sie an den Spieler-Client. Der im Feld FOLDER genannte Modellordner muss zudem tatsächlich in den Client-Packs vorhanden sein (meist das .gr2 Modell und seine Texturen). Fügst du kein völlig neues Modell hinzu, ist der Verweis auf den Ordner eines bestehenden Wolfmodells der sicherste Weg.

Laden und testen

Sind die Änderungen fertig, starte die betroffenen Cores neu (die db- und game/ch-Schichten), damit die Proto auf dem Server frisch eingelesen wird. Teste danach im Spiel mit einem GM-Konto:

// Das Monster mit einem GM-Befehl neben dir erscheinen lassen (je nach Serverfiles)
/m 20801

Erscheint das Monster mit dem richtigen Namen, dem richtigen Modell und sinnvollen Werten, ist die Proto-Seite fertig. Damit es dauerhaft auf einer Karte erscheint, fügst du einen Spawn-Eintrag in die regen.txt des Kartenservers ein (oder boss.txt für Bosse). Zwei Fehler treten beim Testen häufig auf: das Monster erscheint nicht auf dem Client (falscher FOLDER oder veraltete Client-Proto) und der Server stürzt beim Start ab (die Spaltenzahl der Zeile passt nicht zur Kopfzeile).

Häufige Fragen

Soll ich mob_proto.txt oder MySQL nutzen?

Das hängt davon ab, welches System deine Serverfiles lesen. Neuere Dateien stützen sich meist auf die Tabelle player.mob_proto und bauen die Client-Proto mit dump_proto. Bei Setups, die beides nutzen, muss die Quelle immer dieselbe sein, sonst sehen Server und Client unterschiedliche Daten und geraten in Konflikt.

Mein neues Monster erscheint, lässt aber nichts fallen — warum?

Die Mob Proto enthält die Item-Drops nicht direkt; Drops werden in separaten Dateien wie mob_drop_item.txt und common_drop_item.txt oder in Quests definiert. Hast du die neue VNUM nicht an eines dieser Systeme gebunden, lässt das Monster nichts fallen.

Warum stürzt der Server beim Start ab?

Die häufigste Ursache ist, dass die Spaltenzahl deiner neuen Zeile oder der Typ eines Feldes (zum Beispiel Text, wo eine Zahl erwartet wird) nicht zur Kopfzeile passt. Beginne immer damit, die Zeile eines bestehenden Monsters zu kopieren, und zerstöre die Tab-Ausrichtung nicht.

Möchtest du eigene Monster, Bosse oder eine ausgewogene Mob-Ökonomie für deinen Server? Wenn du Hilfe bei Metin2 Proto-, Quest- und Systemanpassungen brauchst, nimm Kontakt mit mir auf — gemeinsam stellen wir dein Projekt auf ein solides Fundament.

Devamı için