L'édition de skills Metin2 est l'une des tâches qui définit le plus directement l'équilibre ressenti d'un serveur : les dégâts qu'inflige une compétence, la durée en secondes de son effet, et le temps d'attente avant de pouvoir la réutiliser. Rien de tout cela ne vit dans un éditeur magique — tout est régi par des expressions polynomiales (formules) stockées dans la table skill_proto côté serveur et dans les données skill_table côté client. Dans ce guide, je parcours les deux structures, les variables qu'elles contiennent et la façon d'ajuster dégâts et durée sans casser la courbe.
La différence entre skill_proto et skill_table
Confondre les deux sources est l'erreur la plus fréquente ; séparons donc d'abord leurs rôles :
- skill_proto : une table MySQL de la base
player. Elle contient le comportement réel de la compétence — formule de dégâts, durée, coût en SP, cooldown, compétence prérequise, niveau maximum. Le calcul se fait côté serveur à partir de cette table. - skill_table (client) : le fichier de définition des compétences à l'intérieur du client. Il porte les métadonnées visuelles/comportementales comme l'icône, le nom, l'animation et le type de ciblage. Il ne détermine pas les dégâts ; il indique seulement ce qu'il faut afficher au joueur.
La règle est simple : l'équilibre (dégâts, durée, cooldown) vit dans skill_proto ; l'apparence vit dans skill_table. Si les deux sont incohérents, le client montre une chose tandis que le serveur en calcule une autre, et les joueurs se plaignent que « les dégâts sont faux ».
Apprendre à connaître les colonnes de skill_proto
La table est large, mais vous touchez toujours aux mêmes quelques colonnes lors de l'ajustement. Les plus critiques :
dwVnum— le numéro unique de la compétence (ex. Triple Coupe, Flèche de l'Esprit, etc.).bMaxLeveletbLevelStep— le nombre de paliers de la compétence et le plafond qu'elle atteint.szPointOn+szPointPoly— à quoi s'applique l'effet (ex.HP) et la formule principale de dégâts/effet.szSPCostPoly— le coût en mana par utilisation.szDurationPoly— pour les effets temporels (poison, étourdissement, buff), la durée en secondes.szCooldownPoly— le cooldown en secondes.szMasterBonusPolyPoint— le bonus ajouté aux rangs Maître / Grand Maître.
La plupart des compétences possèdent aussi des colonnes szPointOn2/szPointPoly2 et szPointOn3/szPointPoly3 pour un deuxième et un troisième effet — par exemple une attaque qui applique à la fois des dégâts et un ralentissement.
Les variables polynomiales : qu'est-ce qui fait évoluer les formules ?
Les valeurs de ces colonnes ne sont pas de simples nombres mais de courtes expressions mathématiques que le serveur résout à l'exécution. Modifier une valeur sans connaître les variables définies revient à avancer à l'aveugle. Les plus utilisées :
k— le coefficient de niveau de la compétence ; un ratio qui croît à mesure que la compétence monte. Le multiplicateur principal qui fait évoluer les dégâts avec le rang.lv— le niveau du personnage qui lance le sort.iq,str,dex,con— les stats principales du personnage ; la stat dominante par classe se décide ici.atk— la valeur d'attaque (arme + bonus).
Un exemple de formule de dégâts ressemble à ceci :
szPointPoly = 1.5 * k + 2.0 * atk + 0.5 * str
Ici, augmenter k renforce la compétence à mesure qu'elle monte en niveau ; augmenter le multiplicateur atk accroît le burst dépendant de l'équipement ; et le multiplicateur str récompense la répartition des stats. Pour réduire grossièrement une valeur de moitié, divisez le multiplicateur par deux — n'ajoutez pas de plafond fixe, car les plafonds cassent le jeu à haut niveau.
Équilibrer dégâts, durée et cooldown
En pratique, les trois axes interagissent. Au lieu d'augmenter les dégâts seuls, pensez le trio ensemble :
- Dégâts (
szPointPoly) : sur les serveurs axés PvP, même de petits changements de multiplicateur font une grande différence. Ajustez le multiplicateurkde 10 % et testez ; ne le doublez pas d'un coup. - Durée (
szDurationPoly) : pour les effets de contrôle comme l'étourdissement/le sommeil, allonger la durée est plus puissant que les dégâts. En PvP, un stun de 3 secondes l'emporte largement sur 20 % de dégâts en plus. - Cooldown (
szCooldownPoly) : si une compétence est trop forte, allonger le cooldown est souvent une correction plus propre que réduire les dégâts ; cela préserve le burst tout en empêchant le spam.
Un exemple de formule pour un effet temporel :
szDurationPoly = 2.0 + 1.0 * k -- secondes
szCooldownPoly = 16.0 - 4.0 * k -- attente plus courte à haut rang
Utiliser une expression qui décroît avec le niveau sur le cooldown (un coefficient négatif) rend la compétence plus fluide à haut rang ; assurez-vous simplement que la valeur ne descende jamais sous zéro.
Appliquer et tester les changements en toute sécurité
skill_proto est chargée en mémoire par le cœur du jeu (game core) au démarrage du serveur. Donc même si vous éditez la table à chaud, le changement ne prend pas effet immédiatement. Un flux de travail sûr :
- Sauvegardez toujours d'abord :
mysqldump player skill_proto > skill_proto_sauvegarde.sql - Effectuez le changement avec un UPDATE, en précisant quelle compétence vous touchez :
UPDATE skill_proto
SET szPointPoly = '1.3 * k + 2.0 * atk + 0.5 * str'
WHERE dwVnum = 1;
- Redémarrez le cœur (ou utilisez le mécanisme de rechargement de skills de votre serveur) pour que les nouvelles valeurs soient chargées en mémoire.
- Sur un personnage de test, mesurez dégâts et durée à chaque rang (1, M1, P, G) ; fonctionner à un seul rang ne signifie pas que toute la courbe est équilibrée.
Si une icône ou un nom a changé côté client, pensez à mettre à jour skill_table aussi et à reconditionner le client ; sinon les joueurs voient l'ancienne info. Tester un seul changement de compétence sur un serveur de test fermé avant la mise en production évite le scénario « tout le monde a pleuré après le patch d'équilibrage ».
Erreurs fréquentes
- Remplacer la formule par un nombre fixe : écrivez
500et la compétence frappe pareil à chaque rang ; la courbe de niveau disparaît. - Mal orthographier un nom de variable : une variable non définie met la formule à zéro ; la compétence inflige « 0 dégât ».
- Oublier skill_proto et n'éditer que le client : le visuel change, pas les dégâts.
- Travailler sans sauvegarde : un seul UPDATE erroné peut rendre toute une classe inutilisable.
Questions fréquentes
Dois-je redémarrer le serveur pour un changement de dégâts ?
Généralement oui. Comme skill_proto est chargée en mémoire au démarrage, les UPDATE n'apparaissent pas en jeu sans redémarrer le cœur (ou utiliser une commande de rechargement de skills, si votre build en a une).
Que représente exactement la variable k ?
k est un coefficient lié au niveau actuel de la compétence ; il croît à mesure que la compétence monte et fait évoluer dégâts/durée avec le rang. Ajustez les stats pour une puissance fixe, et le multiplicateur k pour une puissance qui croît avec le niveau.
Je veux affaiblir une compétence en PvP — que dois-je changer ?
Essayez d'abord d'allonger le cooldown (szCooldownPoly) ; cela préserve le burst tout en coupant le spam. Si cela ne suffit pas, baissez le multiplicateur k par petits pas et mesurez après chaque changement.
L'équilibre des skills peut faire comme défaire votre serveur. Si vous voulez une configuration qui édite les formules de skill_proto en toute sécurité, teste l'équilibre PvP et suit les changements entre versions, contactez-moi — construisons ensemble un plan d'équilibrage propre, adapté à votre serveur.