Das Metin2 Kostümsystem ist eine Funktion, die auf einem modernen Metin2-Server fast unverzichtbar geworden ist, denn es erlaubt Spielern, das Aussehen ihrer Rüstung und Waffen zu ändern, während die Werte erhalten bleiben. Die Logik ist einfach: Ein Gegenstand, der in einem eigenen Kostümslot getragen wird, ändert das Modell des Charakters, gewährt aber keine Boni; die echten Boni stammen weiterhin von der darunterliegenden Rüstung. In diesem Artikel gehen wir Schritt für Schritt durch, wie du das System serverseitig aktivierst, wie du item_proto konfigurierst und wie du von Grund auf ein neues Body- oder Waffenkostüm definierst.
Wie das Kostümsystem funktioniert
Kostüme werden über einen eigenen Itemtyp und einen eigenen Ausrüstungsslot abgewickelt, sowohl auf Client- als auch auf Serverseite. Die Grundbausteine sind:
- Itemtyp:
ITEM_COSTUME— Kostümgegenstände werden mit diesem Typ markiert statt mit einer normalen Rüstung (ITEM_ARMOR). - SubType:
COSTUME_BODY(Körper-/Rüstungsaussehen) undCOSTUME_WEAPON(Waffenaussehen). In den meisten Sources liegen die Subtypen Haar (COSTUME_HAIR) und Reittier (COSTUME_MOUNT) in derselben Enum. - Ausrüstungsslot: Das Ausrüstungsfenster des Charakters hat eine eigene
WEAR_COSTUME/WEAR_COSTUME_WEAPONPosition.
Wenn ein Spieler ein Kostüm anlegt, liest der Server den Aussehenswert aus dem value-Feld des Kostüms und teilt nahen Spielern mit, dass sich das Modell geändert hat. Die Bonusberechnung ist unabhängig vom Kostümslot, weshalb du keine Boni in die value-Felder eines Kostüms eintragen solltest.
Das System in der Server-Source aktivieren
In den meisten Metin2-Sources wird das Kostümsystem über ein Compile-Flag gesteuert. Öffne die entsprechende Define in common/service.h:
// common/service.h
#define ENABLE_COSTUME_SYSTEM
Nach dem Aktivieren der Define müssen sowohl game als auch db (und der Client, falls du ihn baust) neu kompiliert werden. Wenn deine Source bereits mit Kostümunterstützung ausgeliefert wird, kannst du diesen Schritt überspringen; führe grep -r "COSTUME_BODY" common/ aus, um schnell zu prüfen, ob das System bereits existiert.
cd /usr/metin2/server/source
grep -rn "COSTUME_BODY" common/length.h common/item.h
item_proto: das Kostümitem definieren
Ein neues Bodykostüm definierst du fast genauso wie eine normale Rüstung; der Unterschied liegt im Itemtyp und in den Trage-Flags. Fülle deine SQL-Zeile aus (oder die Textzeile, wenn du item_proto.txt kompilierst) nach dieser Logik:
type=ITEM_COSTUMEsubtype=COSTUME_BODY(für WaffenCOSTUME_WEAPONverwenden)antiflag: für eine Geschlechts-/Klassenbeschränkung füge Flags wieANTI_MUSAoderANTI_FEMALEhinzu — wenn ein Modell zum Beispiel nur für weibliche Charaktere erstellt wurde, markiere die männlichen Klassen als anti.wearflag=WEARABLE_COSTUME— das sorgt dafür, dass der Gegenstand in den richtigen Slot wandert.value0= für einen Body der Modell-/Formwert, den der Charakter annimmt (entspricht der.gr2-Setnummer in deinem Client).limittype/limitvalue: für ein zeitlich begrenztes Kostüm verwendeLIMIT_REAL_TIMEmit einer Dauer in Sekunden.
Wenn du es über die Datenbank hinzufügst, sieht eine Beispielabfrage so aus (vnum und Name nach eigenem Inhalt):
INSERT INTO player.item_proto
(vnum, name, type, subtype, weapon, wearflag, antiflag, value0)
VALUES
(85000, 'Kostümrüstung (Rot)', 27, 0, 0, 16384, 0, 101);
Hier entspricht type=27 der Konstante ITEM_COSTUME in deiner Source und subtype=0 dem COSTUME_BODY. Überprüfe diese numerischen Werte anhand deiner eigenen item.h — die Reihenfolge der Enum kann sich zwischen Versionen unterscheiden, also setze nichts voraus.
Clientseite: Modell und Item-Verknüpfung
Selbst wenn der Server den Gegenstand erkennt, erscheint das Kostüm ohne die visuellen Dateien auf dem Client nicht. Was du brauchst:
- item_proto (Client): dieselben vnum-, type- und subtype-Werte müssen auch im Client-Pack vorhanden sein.
- item_list.txt: hier werden Icon und Modellpfad des Kostüms zugeordnet.
- Modelldateien: für ein Bodykostüm das
.gr2Mesh-/Motion-Set des Charakters; für ein Waffenkostüm das entsprechende Waffenmodell, im Pack abgelegt.
Bei einem Bodykostüm bestimmt der Wert value0, welches Charaktermodell der Client lädt, daher muss dieser Wert zwischen Client und Server exakt übereinstimmen. Stimmt er nicht überein, legt der Spieler das Kostüm zwar an, aber das Aussehen ändert sich nicht oder es wird das falsche Modell geladen.
Testen und häufige Fehler
Nach dem Hinzufügen des neuen Kostüms kompiliere item_proto neu (oder aktualisiere den DB-Cache) und teste es an deinem Charakter:
/item 85000
Verwende den GM-Befehl, um den Gegenstand in dein Inventar zu legen, ziehe ihn in den Kostümslot und bestätige, dass sich das Aussehen ändert. Die häufigsten Probleme sind:
- Item geht nicht in den Kostümslot: falsches
wearflag. Prüfe, ob das richtige Bit fürWEARABLE_COSTUMEgesetzt ist. - Es wird angelegt, aber das Aussehen ändert sich nicht:
value0stimmt nicht mit dem Client überein, oder die DefineENABLE_COSTUME_SYSTEMist deaktiviert. - Es kann vom falschen Geschlecht getragen werden: fehlendes
antiflag. Füge Anti-Flags für Klassen ohne Modell hinzu. - Boni kommen nicht von der Rüstung: du hast versehentlich Boni auf das Kostümitem gesetzt; Boni stammen von der darunterliegenden Rüstung, das Kostüm soll nur das Aussehen liefern.
Häufige Fragen
Hat jede Metin2-Source ein Kostümsystem?
Die meisten modernen Sources liefern es einsatzbereit, aber ältere "Vanilla"-Sources müssen es eventuell manuell ergänzen. Du kannst es schnell prüfen, indem du in common/item.h nach den Konstanten ITEM_COSTUME und COSTUME_BODY suchst.
Können Boni zu einem Kostüm hinzugefügt werden?
Technisch kannst du Boni in die value-Felder eintragen, aber es ist nicht empfehlenswert. Der Zweck eines Kostüms ist rein optisch; die Boni auf der Rüstung zu belassen ist sowohl für die Balance als auch für die Erwartung der Spieler richtig. Wenn du wirklich ein Boni-Kostüm willst, behandle es als eigene, bewusste Designentscheidung.
Wie erstelle ich ein zeitlich begrenztes (gemietetes) Kostüm?
Setze limittype auf LIMIT_REAL_TIME und schreibe die Dauer in Sekunden in limitvalue; das Kostüm wird nach der angegebenen Zeit unbrauchbar. Das ist eine gängige Methode für Mietkostüme im Item-Shop.
Möchtest du das Kostümsystem reibungslos in deinen eigenen Server integrieren? Wenn du Hilfe bei der Bearbeitung der Metin2-Server-Source sowie bei der Item- und Systementwicklung brauchst, kontaktiere mich — lass uns gemeinsam eine Lösung planen, die zu deinem Projekt passt.