Le système de costumes Metin2 est une fonctionnalité devenue presque indispensable sur un serveur Metin2 moderne, car il permet aux joueurs de changer l'apparence de leur armure et de leurs armes tout en conservant les statistiques. La logique est simple : un objet équipé dans un emplacement de costume dédié modifie le modèle du personnage mais n'accorde aucun bonus ; les vrais bonus proviennent toujours de l'armure sous-jacente. Dans cet article, nous verrons comment activer le système côté serveur, comment configurer item_proto et comment définir un nouveau costume de corps ou d'arme à partir de zéro.
Comment fonctionne le système de costumes
Les costumes sont gérés via un type d'objet et un emplacement d'équipement distincts, côté client comme côté serveur. Les éléments de base sont :
- Type d'objet :
ITEM_COSTUME— les costumes sont marqués avec ce type au lieu d'une armure classique (ITEM_ARMOR). - Sous-type (SubType) :
COSTUME_BODY(apparence du corps/de l'armure) etCOSTUME_WEAPON(apparence de l'arme). Dans la plupart des sources, les sous-types cheveux (COSTUME_HAIR) et monture (COSTUME_MOUNT) se trouvent dans la même enum. - Emplacement d'équipement : la fenêtre d'équipement du personnage possède une position dédiée
WEAR_COSTUME/WEAR_COSTUME_WEAPON.
Lorsqu'un joueur équipe un costume, le serveur lit la valeur d'apparence dans le champ value du costume et signale aux joueurs proches que le modèle a changé. Le calcul des bonus est indépendant de l'emplacement de costume, c'est pourquoi vous ne devez pas placer de bonus dans les champs value d'un costume.
Activer le système dans la source serveur
Dans la plupart des sources Metin2, le système de costumes est contrôlé par un drapeau de compilation. Ouvrez le define correspondant dans common/service.h :
// common/service.h
#define ENABLE_COSTUME_SYSTEM
Après avoir activé le define, game et db (ainsi que le client, si vous le compilez) doivent être recompilés. Si votre source est déjà livrée avec le support des costumes, vous pouvez ignorer cette étape ; lancez grep -r "COSTUME_BODY" common/ pour vérifier rapidement si le système existe déjà.
cd /usr/metin2/server/source
grep -rn "COSTUME_BODY" common/length.h common/item.h
item_proto : définir l'objet costume
Un nouveau costume de corps se définit presque exactement comme une armure normale ; la différence réside dans le type d'objet et les drapeaux d'équipement. Remplissez votre ligne SQL (ou la ligne texte, si vous compilez item_proto.txt) selon cette logique :
type=ITEM_COSTUMEsubtype=COSTUME_BODY(utilisezCOSTUME_WEAPONpour les armes)antiflag: pour une restriction de genre/classe, ajoutez des drapeaux commeANTI_MUSAouANTI_FEMALE— par exemple, si un modèle n'a été conçu que pour les personnages féminins, marquez les classes masculines en anti.wearflag=WEARABLE_COSTUME— cela garantit que l'objet va dans le bon emplacement.value0= pour un corps, la valeur de modèle/forme que prendra le personnage (correspondant au numéro de set.gr2dans votre client).limittype/limitvalue: pour un costume temporaire, utilisezLIMIT_REAL_TIMEavec une durée en secondes.
Si vous l'ajoutez via la base de données, un exemple de requête ressemble à ceci (vnum et nom selon votre propre contenu) :
INSERT INTO player.item_proto
(vnum, name, type, subtype, weapon, wearflag, antiflag, value0)
VALUES
(85000, 'Armure Costume (Rouge)', 27, 0, 0, 16384, 0, 101);
Ici type=27 correspond à la constante ITEM_COSTUME de votre source, et subtype=0 à COSTUME_BODY. Vérifiez ces valeurs numériques dans votre propre item.h — l'ordre de l'enum peut différer entre les versions, ne supposez rien.
Côté client : modèle et liaison d'objet
Même si le serveur reconnaît l'objet, le costume n'apparaîtra pas sans les fichiers visuels côté client. Ce dont vous avez besoin :
- item_proto (client) : les mêmes valeurs de vnum, type et subtype doivent aussi exister dans le pack client.
- item_list.txt : associe l'icône et le chemin du modèle du costume.
- Fichiers de modèle : pour un costume de corps, le set mesh/motion
.gr2du personnage ; pour un costume d'arme, le modèle d'arme correspondant, placé dans le pack.
Pour un costume de corps, la valeur value0 détermine quel modèle de personnage le client charge ; cette valeur doit donc correspondre exactement entre client et serveur. En cas de non-correspondance, le joueur équipe le costume mais l'apparence ne change pas, ou le mauvais modèle se charge.
Tester et erreurs courantes
Après avoir ajouté le nouveau costume, recompilez item_proto (ou rafraîchissez le cache de la DB) et testez-le sur votre personnage :
/item 85000
Utilisez la commande GM pour mettre l'objet dans votre inventaire, glissez-le dans l'emplacement de costume et vérifiez que l'apparence change. Les problèmes les plus fréquents sont :
- L'objet ne va pas dans l'emplacement de costume :
wearflagincorrect. Vérifiez que le bon bit deWEARABLE_COSTUMEest défini. - Il s'équipe mais l'apparence ne change pas :
value0ne correspond pas au client, ou le defineENABLE_COSTUME_SYSTEMest désactivé. - Il peut être porté par le mauvais genre :
antiflagmanquant. Ajoutez des drapeaux anti pour les classes sans modèle. - Les bonus ne viennent pas de l'armure : vous avez accidentellement placé des bonus sur le costume ; les bonus proviennent de l'armure sous-jacente, le costume ne doit fournir que l'apparence.
Questions fréquentes
Chaque source Metin2 a-t-elle un système de costumes ?
La plupart des sources modernes le proposent prêt à l'emploi, mais les anciennes sources « vanilla » peuvent nécessiter un ajout manuel. Vous pouvez vérifier rapidement en cherchant les constantes ITEM_COSTUME et COSTUME_BODY dans common/item.h.
Peut-on ajouter des bonus à un costume ?
Techniquement, on peut saisir des bonus dans les champs value, mais ce n'est pas recommandé. Le rôle d'un costume est purement esthétique ; garder les bonus sur l'armure est correct tant pour l'équilibre que pour les attentes des joueurs. Si vous voulez vraiment un costume à bonus, traitez-le comme une décision de design distincte et réfléchie.
Comment créer un costume temporaire (loué) ?
Mettez limittype à LIMIT_REAL_TIME et inscrivez la durée en secondes dans limitvalue ; le costume devient inutilisable après le délai indiqué. C'est une méthode courante pour les costumes de location de l'item shop.
Vous souhaitez intégrer le système de costumes en douceur sur votre propre serveur ? Si vous avez besoin d'aide pour l'édition de la source serveur Metin2, le développement d'objets et de systèmes, contactez-moi — planifions ensemble une solution adaptée à votre projet.