aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Metin2

Système de boss Metin2 : spawn et drop du grandboss

Un système de boss Metin2 solide définit le contenu le plus joué d'un serveur privé : les joueurs savent quand un grandboss va apparaître, se rassemblent sur la carte à cette heure et se disputent les drops rares. Mais derrière cette expérience, trois fichiers distincts doivent fonctionner en harmonie — le regen.txt ou le quest Lua qui déclenche le spawn, le mob_drop_item.txt qui définit les drops, et les messages d'annonce qui alertent les joueurs. Dans ce guide, je détaille pas à pas la configuration des timers de spawn, de la table de drop et des annonces.

La différence entre un boss et un grandboss

Techniquement, les deux ne sont qu'une ligne de monstre dans mob_proto ; la différence tient au champ rang/type et à la logique de spawn. Un boss normal vit généralement en permanence sur une carte et réapparaît peu après sa mort. Un grandboss est une entité rare et puissante qui apparaît souvent selon un horaire — par exemple à heures fixes chaque jour ou lorsqu'une condition est remplie.

  • Boss : défini dans regen.txt avec une position fixe et un timer de réapparition. Le cœur du serveur gère le reste automatiquement.
  • Grandboss : généralement invoqué par un quest, piloté par un timer ou un event flag, avec une annonce à tout le serveur dès son apparition.

Clarifier cette distinction d'emblée vous indique quel outil employer. Gérer un boss en patrouille constante avec un quest ajoute une complexité inutile ; à l'inverse, vouloir construire un grandboss programmé avec le seul regen.txt vous prive d'un contrôle souple.

Régler les spawns de boss avec regen.txt

Chaque carte possède son propre fichier regen.txt dans son dossier (par exemple map_a1/regen.txt). Pour faire apparaître un boss en permanence, il suffit d'ajouter une seule ligne. L'ordre des colonnes est :

# type  agressif  x     y    x_portee  y_portee  z  dir  temps  pourcent  nombre  vnum
m       1         512   480  0         0         0  0    30m    100       1       2492

Signification des champs :

  • m : un seul monstre (utilisez g pour un groupe, r pour un groupe de regen).
  • agressif : 1 signifie qu'il attaque à vue, 0 qu'il est passif.
  • x / y : les coordonnées locales de la carte (par rapport au coin supérieur gauche).
  • temps : délai de réapparition après la mort — écrit 5s, 10m, 1h.
  • vnum : l'identifiant du monstre dans mob_proto.

Après avoir enregistré le fichier, vous devez soit redémarrer le serveur, soit rafraîchir les données avec une commande GM comme /reload pour que le changement prenne effet. Le moyen le plus simple de trouver les bonnes coordonnées est de se connecter, de se placer sur l'emplacement cible et de lire les x/y locaux avec une commande GM telle que /where.

Spawns de grandboss programmés avec quest Lua

Pour un grandboss programmé, nous utilisons le système de quêtes. L'outil central est la fonction game.spawn_mob(vnum, x, y), qui fait apparaître un monstre à la coordonnée locale indiquée sur la carte où elle est appelée. L'exemple ci-dessous construit un squelette simple qui surveille la mort du boss et l'annonce :

quest grandboss begin
    state start begin
        function spawn_meley()
            local x, y = 1023, 875
            game.spawn_mob(2493, x, y)
            notice_all("[Grandboss] Meley Lady est apparue sur la carte !")
        end

        when 2493.kill begin
            notice_all("Le grandboss a ete vaincu ! Preparez-vous au prochain spawn.")
            server_timer("meley_respawn", 6 * 60 * 60)  -- dans 6 heures
        end

        when meley_respawn.server_timer begin
            grandboss.spawn_meley()
        end
    end
end

Ici, le bloc when 2493.kill se déclenche lorsque le monstre de vnum 2493 est tué. server_timer lance un compte à rebours à l'échelle du serveur, non lié à un joueur — c'est le cœur du timing d'un grandboss, car le boss doit apparaître même si personne n'est connecté. Si vous voulez un spawn à l'horloge réelle (par exemple chaque jour à 21h00), vous pouvez vérifier l'heure avec os.date dans un déclencheur de connexion et utiliser un event flag :

when login begin
    local heure = tonumber(os.date("%H"))
    if heure == 21 and game.get_event_flag("meley_aujourdhui") == 0 then
        game.set_event_flag("meley_aujourdhui", 1)
        grandboss.spawn_meley()
    end
end

Cette méthode est simple et lisible ; sur des serveurs plus grands et plus robustes, on préfère un quest « boss timer » distinct qui gère le spawn depuis un point unique, afin que le même boss n'apparaisse jamais deux fois.

Configuration des drops : mob_drop_item.txt

Les drops de boss sont en grande partie gérés par des groupes dans mob_drop_item.txt. Chaque groupe est lié à un vnum Mob, et chaque ligne définit un objet, sa quantité et sa chance de drop (en pourcentage, pas en pour mille) :

Group GrandbossMeley
{
    Mob     2493
    Type    drop
    1   71001   1   30.000000
    2   72003   5   15.000000
    3   50300   1   2.500000
}

Les lignes se lisent : index item_vnum quantite chance. Le champ Type contrôle le comportement du drop :

  • drop : chaque ligne est tirée indépendamment selon sa chance ; un boss peut lâcher plusieurs objets.
  • kill : un seul objet est choisi dans le groupe ; adapté à une logique de pool de butin.
  • limit / level_limit : utilisé pour des drops liés à une tranche de niveau.

En fixant les chances, tenez compte du nombre de joueurs et du taux du serveur : sur un serveur à taux élevé, un objet rare à 30 % provoque vite de l'inflation. Garder les objets rares bas (disons 1 à 3 %) et les drops fréquents raisonnables maintient une économie saine. Après modification du fichier, appliquez le changement avec une commande GM comme /reload d ou un redémarrage du serveur.

Messages d'annonce de spawn et de drop

Un bon système de boss tient les joueurs informés. Les deux fonctions les plus utilisées sont :

  • notice_all("...") : envoie un message d'info jaune à chaque joueur du serveur — idéal pour un spawn de grandboss.
  • notice("...") : envoie un message uniquement au joueur qui a déclenché le quest.

Une fonctionnalité très appréciée consiste à annoncer au serveur la chute d'un objet rare. Vous pouvez la construire dans un quest de drop en vérifiant l'objet lâché :

when kill with npc.is_pc() == false begin
    if npc.get_race() == 2493 then
        local joueur = pc.get_name()
        notice_all(string.format("%s a recupere un objet legendaire sur Meley Lady !", joueur))
    end
end

Ce type d'annonce renforce le sentiment « je devrais y être aussi » et augmente l'affluence aux heures de boss. N'en abusez pas pour autant — si vous annoncez chaque drop ordinaire, les messages deviennent du bruit et perdent leur impact.

Tester et erreurs fréquentes

Avant la mise en ligne, testez avec les commandes GM : /mob 2493 fait apparaître le boss devant vous, /notice test essaie une annonce. Les problèmes les plus fréquents :

  • Mauvaise coordonnée : regen.txt attend la coordonnée locale de la carte, pas la globale. Si le boss n'apparaît pas, c'est presque toujours la cause.
  • vnum incohérent : mob_proto, regen.txt et mob_drop_item.txt doivent utiliser le même vnum. Une erreur d'un seul chiffre laisse le boss « sans drop ».
  • Oublier le reload : enregistrer les fichiers ne suffit pas ; les données doivent être rechargées dans le cœur. Dans le doute, redémarrez le serveur.
  • Vérifier syserr : les erreurs de quest atterrissent dans les journaux syserr. Si un grandboss refuse d'apparaître, c'est le premier endroit à regarder.

Tant que vous gardez ces trois fichiers (spawn, drop, annonce) cohérents, vous aurez bâti un contenu de boss scalable que les joueurs attendent avec impatience.

Questions fréquentes

Le grandboss apparaît-il quand personne n'est connecté ?

Si vous utilisez server_timer ou un mécanisme à l'horloge réelle, oui — le spawn est indépendant des joueurs. Cependant, la carte doit être chargée par le cœur au moment où game.spawn_mob est appelée ; sur la plupart des serveurs, les cartes principales sont toujours chargées, donc ce n'est pas un problème.

J'écris les chances de drop en pour mille ou en pourcentage ?

Dans mob_drop_item.txt, la chance s'écrit en pourcentage (30.000000 = 30 %). Avec des décimales, vous pouvez définir de très petites chances (0.100000 = 0,1 %). D'autres fichiers comme common_drop_item.txt peuvent utiliser un format différent, ne les confondez pas.

Pourquoi le même boss apparaît-il deux fois ?

Le plus souvent, regen.txt et un quest font apparaître le même boss, ou l'event flag n'est pas réinitialisé correctement. Gérez un grandboss programmé depuis une seule source et assurez-vous de réinitialiser le flag avant la réapparition.

Vous voulez un système de boss et de grandboss équilibré pour votre serveur ? Nous pouvons mettre en place le timing des spawns, l'économie des drops et le flux d'annonces de façon à fidéliser vos joueurs. Pour discuter de votre projet, contactez-moi.

Devamı için