Si tu veux aller plus loin que les simples chevaux et offrir à tes joueurs des montures de combat, il te faut une vraie maîtrise du système de monture Metin2. La mécanique d'équitation classique est fournie d'origine dans la plupart des clients ; le vrai travail consiste à définir les montures comme des objets, à attribuer un modèle et des bonus à chacune, à séparer les montures de combat des montures décoratives, et à équilibrer tout cela sans casser l'économie de ton serveur. Dans ce guide, je détaille tout le pipeline, de l'item_proto jusqu'au code serveur et aux fonctions quest, étape par étape.
Comment fonctionne le système de monture
Dans Metin2, une monture est, visuellement, un modèle de mob sur lequel le personnage s'assoit. Autrement dit, chaque monture est en réalité un enregistrement dans mob_proto avec son propre vnum ; le personnage « monte » ce vnum et le serveur ajoute un drapeau RIDING à son état. Ce qui déclenche tout cela, c'est l'objet de monture dans l'inventaire. Le flux est le suivant :
- Le joueur utilise un objet de monture (double-clic).
- Le serveur lit le vnum de mob lié à cet objet et installe le personnage sur ce modèle.
- Tant que la monture est active, des affects bonus sont appliqués au personnage (PV, vitesse de déplacement, valeur d'attaque, etc.).
- Quand la durée expire ou que le joueur descend, la monture et ses bonus sont retirés.
Cette séparation compte : le visuel (modèle de mob), le déclencheur (objet d'inventaire) et l'effet (affects bonus) sont trois couches distinctes. Mal câblées, tu obtiens soit une monture invisible, soit un objet dont le bonus ne s'active jamais.
item_proto : définir l'objet de monture
Pour chaque monture, tu crées un enregistrement dans la table item_proto. Les objets de monture sont des objets utilisables (USE) qui installent le personnage à l'utilisation. Le champ critique est celui qui indique à quel modèle de monture l'objet correspond — c'est-à-dire que l'un des champs value contient le vnum mob_proto de la monture. Un exemple typique :
vnum | name | type | subtype | value0 | value1
---------+-------------------+-----------+-------------+--------+-------
71114 | Destrier (Rouge) | ITEM_USE | USE_MOUNT | 20114 | 0
Ici value0 est le vnum de mob de la monture (exemple : 20114) et value1 peut servir au contrôle de la durée (en secondes ; 0 = illimité). Les noms et l'ordre des champs varient selon la version de la source, donc prends ton propre modèle d'item_proto comme référence et n'invente pas de valeurs. Après la modification, pense à répercuter item_proto côté client aussi (en général les fichiers item_proto et item_names) ; sinon l'objet n'apparaîtra pas, ou apparaîtra « vide », dans le client.
Le modèle de la monture et ses bonus
La monture elle-même est définie dans mob_proto. Les parties les plus importantes ici sont le fichier de modèle (le .gr2 / pack de motion de la monture) et le bon réglage du type de la monture. Les bonus de monture sont des affects qui s'activent quand le joueur monte, et ils sont généralement accordés de deux façons :
- Bonus fixes : intégrés à la monture, identiques à chaque chevauchée (par ex. +20 % de vitesse de déplacement).
- Bonus via quest : ajoutés par la logique de quest quand le joueur monte — temporisés ou conditionnels.
La seconde méthode est bien plus souple, car tu peux changer le bonus sans recompiler le code, simplement en mettant à jour un fichier quest. Si tu préfères ne pas compiler la source serveur, garder tout l'équilibrage côté quest est le choix malin.
Montures de combat et fonctions quest
Metin2 a deux types de monture : la monture normale, purement décorative ou qui donne de la vitesse, et la monture de combat, qui te permet d'attaquer en chevauchant. Une monture de combat te laisse utiliser ton arme une fois en selle et déclencher des compétences montées spéciales (comme une charge). Ce comportement est décidé dans le code serveur selon le type de monture.
Pour gérer les montures depuis une quest, on utilise les fonctions pc intégrées de Metin2. Les plus courantes :
-- Faire monter le joueur sur la monture 20114 pour 60 secondes
pc.mount(20114, 60)
-- Le joueur est-il actuellement monté ?
if pc.is_mount() then
say("Tu es deja monte.")
end
-- Descendre
pc.unmount()
-- Appliquer un bonus temporise en montant
-- (type d'apply, valeur, duree[s])
pc.mount_bonus(apply.MOV_SPEED, 20, 60)
Si tu veux lier un objet de monture à une quest, tu interceptes l'utilisation de l'objet et tu appelles pc.mount à cet endroit :
quest monture_destrier begin
state start begin
when 71114.use begin
if pc.is_mount() then
pc.unmount()
else
pc.mount(20114, 0) -- monter indefiniment
pc.mount_bonus(apply.MAX_HP, 3000, 0)
pc.mount_bonus(apply.ATT_GRADE_BONUS, 50, 0)
end
end
end
end
Ici le même objet gère à la fois la montée et la descente : si le joueur est déjà monté il descend, sinon il monte. Accorder les bonus avec pc.mount_bonus te permet de rassembler tout l'équilibrage dans un seul fichier quest. Important : assure-toi que les constantes apply que tu utilises correspondent exactement aux définitions de ta source serveur ; un mauvais type d'apply ne fait silencieusement rien, ou accorde un bonus inattendu.
Équilibrage : garder les bonus sous contrôle
Les bonus de monture sont l'un des moyens les plus rapides de casser l'équilibre PvP et économique d'un serveur. Une monture puissante accessible à tous devient un buff de stats permanent et oblige les joueurs à « devoir monter ». Quelques règles pratiques :
- Garde des bonus modestes. La vitesse de déplacement est un bonus naturel ; mais gonfler les stats d'attaque/défense casse toute ta table d'équilibre. Commence petit et augmente avec les retours des joueurs.
- Place les montures de combat sur un palier à part. Une monture de combat est un gros avantage ; n'en fais pas un objet bon marché utilisable pour toujours. La garder temporisée (événement ou boutique) préserve l'équilibre.
- Restreins-les sur les cartes PvP. Désactiver les bonus de monture, ou la monte elle-même, en guerre de guilde ou en arène empêche la compétence de perdre face à un objet.
- Pense durée et coût ensemble. Une monture permanente gratuite n'a aucune valeur ; des montures temporisées et raisonnablement tarifées maintiennent l'économie et les objectifs de jeu.
Après chaque modification, vérifie les journaux syserr : un mauvais vnum ou un modèle manquant peut provoquer un crash silencieux ou un bug de monture invisible quand le joueur monte.
Tests et mise en ligne
Avant de publier une monture, passe cette liste de contrôle avec un compte GM : la monture apparaît-elle quand l'objet est utilisé, les bonus sont-ils appliqués (ouvre les infos du personnage et vérifie les stats), descend-elle proprement à l'expiration ou via pc.unmount(), et la monture ne reste-t-elle pas bloquée dans des cas limites comme téléportation, mort ou guerre de guilde. Assure-toi que les item_proto client et serveur sont synchronisés ; le bug le plus fréquent est une monture qui existe sur le serveur mais n'a pas été répercutée sur le client, donc invisible pour les joueurs.
Questions fréquentes
Quelle est la différence entre une monture et un familier (pet) ?
Un familier est une entité distincte qui marche aux côtés du personnage, accorde des bonus par lui-même et a généralement besoin d'être nourri. Une monture est un modèle sur lequel le personnage s'assoit et n'accorde un bonus que pendant que tu chevauches. Sous le capot, les deux reposent sur un modèle de mob, mais ils sont gérés avec des drapeaux et des mécaniques différents.
Puis-je changer les bonus sans compiler le code ?
Oui. Si tu accordes les bonus via pc.mount_bonus depuis un fichier quest, pas besoin de recompiler la source serveur ; il suffit de mettre à jour la quest et de déclencher un quest reload du dossier quest. Cela accélère beaucoup les tests d'équilibrage.
Ma monture est invisible quand je chevauche, pourquoi ?
Presque toujours une désynchronisation client-serveur : l'enregistrement mob_proto de la monture existe sur le serveur, mais le mob_proto du client ou le pack de modèle (.gr2/motion) manque. Vérifie d'abord que les vnums correspondent, puis que le fichier de modèle est présent dans le pack client ; syserr et le log client pointent en général le fichier manquant.
Tu installes un système de monture équilibré sur ton serveur ? Des montures de combat à l'équilibre des bonus, nous pouvons travailler ensemble sur la source serveur, les quests et l'édition d'objets Metin2. Contacte-moi pour discuter de ton projet.