Wenn du einen Metin2-Server betreibst, willst du früher oder später eine neue Waffe, Rüstung oder ein Kostüm hinzufügen, und der Kern davon sind die metin2 item proto-Daten. Die Item Proto ist die Tabelle, die Identität, Typ, Schaden, Verteidigung, Tragebedingungen und Boni jedes Gegenstands speichert. Einen Gegenstand korrekt hinzuzufügen bedeutet, diese Daten auf Server- und Clientseite konsistent zu aktualisieren. In dieser Anleitung fügen wir einen brandneuen Gegenstand von Anfang bis Ende hinzu: vnum auswählen, Servereintrag, Clientdateien, Icon und Modell, danach testen.
Was ist die Item Proto und wo liegt sie?
Die Item Proto existiert an zwei getrennten Orten, und die beiden müssen exakt übereinstimmen:
- Serverseite: Der Game Core liest die Item-Definitionen. Je nach Source-Version stammen diese Daten entweder aus der Tabelle
item_protoin der MySQL-Datenbankplayeroder aus eineritem_protoText-/Binärdatei. Der Core lädt sie beim Start in den Speicher. - Clientseite: Der
pack-Ordner des Clients enthält eine verschlüsselte/gepackteitem_proto-Datei. Der Client liest daraus die visuellen und Gameplay-Daten des Gegenstands. Unterlocalegibt es außerdemitem_names.txt(Anzeigenamen),item_list.txt(Icon- und Modellpfade) unditemdesc.txt(Beschreibungen).
Ist ein Gegenstand nur auf dem Server definiert, kann der Client ihn nicht zeichnen (er erscheint fehlend oder fehlerhaft); existiert er nur auf dem Client, kann der Server ihn nicht spawnen. Beide Seiten müssen die gleiche vnum und kompatible Werte tragen.
Bevor du startest: Backups und die vnum-Wahl
Erste Regel: mach ein Backup. Bewahre einen Dump der MySQL-Tabelle item_proto sowie Kopien jeder .txt-/Pack-Datei auf, die du anfassen wirst. Eine einzige defekte Zeile kann verhindern, dass der Core Gegenstände lädt.
Der nächste Schritt ist die Wahl einer vnum (Gegenstandsnummer). Jeder Gegenstand hat eine eindeutige vnum. Wähle einen ungenutzten Bereich, um Kollisionen zu vermeiden. Standardwaffen liegen meist im Band 0–8000; für Custom-Gegenstände senkt ein hoher, leerer Bereich (zum Beispiel 30000+) das Konfliktrisiko. Um in MySQL eine freie vnum zu finden:
SELECT vnum FROM player.item_proto WHERE vnum BETWEEN 30000 AND 30100 ORDER BY vnum;
Kommen in diesem Bereich keine Zeilen zurück, kann er sicher genutzt werden.
Serverseite: einen neuen Gegenstand zur Item Proto hinzufügen
Statt einen Gegenstand von Grund auf zu definieren, ist die zuverlässigste Methode, einen bestehenden Gegenstand desselben Typs als Vorlage zu kopieren. Fügst du ein Schwert hinzu, nimm die Zeile eines bestehenden Schwerts, ändere vnum und Name und bearbeite nur die Felder, die sich unterscheiden sollen (Schaden, Tragelevel, Boni). Der Grund: Die Bedeutung der Felder value0–value5 ändert sich je nach Gegenstandstyp, daher beseitigt der Start von einem korrekten Beispiel die meisten Fehler.
Wichtige Spalten:
vnum: eindeutige Nummer.name/locale_name: serverinterner Name.typeundsubtype: z. B. für eine WaffeITEM_WEAPON+WEAPON_SWORD; für eine RüstungITEM_ARMOR+ARMOR_BODY.antiflags: welche Klassen/Geschlechter ihn nicht nutzen können (z. B.ANTI_WARRIOR).wearflags: wo der Gegenstand getragen wird (WEAR_WEAPON,WEAR_BODYusw.).limittype0/limitvalue0: die Tragebedingung, meistLIMIT_LEVELplus ein Levelwert.applytype0..2 / applyvalue0..2: die Boni, die der Gegenstand gewährt (z. B.APPLY_ATT_SPEED,APPLY_MAX_HP).value0..value5: typspezifische Werte. Eine gängige Zuordnung für Waffen:value3= minimaler physischer Schaden,value4= maximaler physischer Schaden,value5= magischer/zusätzlicher Angriff; bei Rüstungen trägtvalue1die Verteidigung. Kopiere dennoch von einem korrekten Gegenstand desselben Typs und vergleiche.price,refined_vnum(Aufwertungskette),socket0..2(Steckplätze),addon_type.
In MySQL ist der schnellste Weg, ein bestehendes Schwert zu duplizieren:
INSERT INTO player.item_proto
SELECT * FROM player.item_proto WHERE vnum = 19; -- ein Beispielschwert
-- danach die neue Zeile bearbeiten:
UPDATE player.item_proto
SET vnum = 30001, name = 'Neues Schwert', value3 = 60, value4 = 90
WHERE vnum = 19; -- stelle sicher, dass du die richtige Zeile triffst
In der Praxis ist es sauberer, die bestehende Zeile zu exportieren, zu bearbeiten und als neue Zeile mit vnum = 30001 wieder einzufügen. Liest deine Source aus einer Textdatei, öffnest du die item_proto-txt mit einem Konverter, fügst die neue tabgetrennte Zeile hinzu und packst neu. Damit die Änderung greift, starte den Core neu; die Proto wird beim Start in den Speicher geladen.
Clientseite: item proto, item_names und item_list
Für die Clientdateien nutzt du ein Proto-Konvertierungstool (Community-Tools wandeln die gepackte item_proto in eine bearbeitbare .txt um und packen sie wieder zurück). Der Ablauf:
item_proto(Client) → in tabgetrennte txt konvertieren, die neue Zeile mit derselben vnum und denselben Werten wie auf dem Server hinzufügen, neu packen und inpackablegen.locale/<sprache>/item_names.txt→ Zeilenformatvnum[TAB]Anzeigename. Füge die neue vnum und den im Spiel sichtbaren Namen hinzu. Halte diese Datei in der richtigen Kodierung (meist passend zur Serversprache).locale/<sprache>/item_list.txt→ ordnet jede vnum einem Icon- und Modellpfad zu:vnum[TAB]ITEM[TAB]icon/item/xxxx.tga[TAB]d:/ymir work/item/.../xxxx.gr2. Definiere hier die Icon- und Modellpfade deines neuen Gegenstands.locale/<sprache>/itemdesc.txt→ optionaler Beschreibungstext.
Icon und Modell hinzufügen
Damit der Gegenstand in der Hand und im Inventar erscheint, brauchst du zwei Assets: ein Icon (.tga, meist 32×32, im Inventarslot angezeigt) und ein 3D-Modell (an Hand/Körper des Charakters). Lege das Icon in den Pfad icon/item/ des Clients und verweise in item_list.txt darauf. Hast du noch keine neue Grafik erstellt, kannst du zum Start die Icon- und Modellpfade eines ähnlichen Gegenstands wiederverwenden — der Gegenstand funktioniert, zeigt nur vorhandene Grafik. Brauchst du ein eigenes Modell, lege die .gr2-Datei in den passenden Ordner und referenziere den Pfad in item_list.txt. Ein falscher Icon-Pfad zeigt ein leeres/rotes Kästchen im Inventar; das ist das häufigste Zeichen, dass du den Pfad korrigieren musst.
Testen, Neuladen und häufige Fehler
Logge dich nach dem Serverneustart mit einem GM-Account ein und spawne den Gegenstand:
/item 30001
# oder per Name (wenn item_names korrekt ist):
/item Neues_Schwert
Fällt der Gegenstand ins Inventar, zeigt er den richtigen Namen und das richtige Icon, und stimmen beim Anlegen Schaden/Verteidigung und Boni mit der Tabelle überein, bist du fertig. Häufige Fehler:
- vnum-Diskrepanz zwischen Server und Client: das häufigste Problem. Beide Seiten müssen dieselbe vnum tragen.
- Core startet nicht: eine defekte Zeile in der Proto (fehlende Spalte, falscher Typname). Sieh in die syserr-Logs.
- Gegenstand unsichtbar/leeres Kästchen: ein falscher Icon-/Modellpfad in
item_list.txt. - Name leer oder wie ein Schlüssel angezeigt: fehlende Zeile in
item_names.txtoder defekte Kodierung.
Häufige Fragen
Soll ich die Item Proto aus MySQL oder aus einer txt-Datei bearbeiten?
Das hängt von deiner Source ab. Moderne Sources lesen meist die MySQL-Tabelle player.item_proto; in dem Fall bearbeitest du die Tabelle direkt und startest den Core neu. Manche Versionen lesen eine txt-/Binärdatei. Bist du dir unsicher, prüfe die Startkonfiguration des Cores und die syserr-Ausgabe. Die Clientseite ist in jedem Fall eine gepackte Datei.
Muss ich den Server wirklich für die Änderung neu starten?
Da die Item Proto beim Start in den Speicher geladen wird, erfordert eine neue Item-Definition praktisch einen Core-Neustart, um zu erscheinen. Manche Setups haben Befehle zum teilweisen Neuladen, aber der garantierte, saubere Weg ist, den Game Core neu zu starten. Für Clientänderungen müssen Spieler die aktualisierten pack-/locale-Dateien erhalten.
Warum sollte ich einen neuen Gegenstand durch Kopieren eines bestehenden beginnen?
Weil sich die Bedeutung von Feldern wie value0–value5, wearflags und antiflags je nach Gegenstandstyp ändert. Einen funktionierenden Gegenstand desselben Typs als Vorlage zu nehmen gibt dir eine gültige Struktur zum Start; du änderst nur die Felder, die sich unterscheiden sollen, und vermeidest stille Fehler weitgehend.
Willst du Custom-Gegenstände, Sets oder ein komplett neues System auf deinem Server hinzufügen? Von Item-Proto-Bearbeitung bis Quest- und Systementwicklung helfe ich gern bei Metin2-Serverarbeiten. Kontaktiere mich, um mir von deinem Projekt zu erzählen.