Aller au contenu
Top-Metin2.org - Vous êtes à la recherche d'un serveur Metin 2 ? ×
×
×
  • Créer...

[Fonction] Gérer un donjon


Calypso

Messages recommandés

  • Retraité

Bonsoir,

Suite à la demande de tutoriel de thomasx3 pour créer une instance Metin2, je me permet d'en faire un tutoriel étant donné du fait que j'ai déjà eu l'occasion de créer un petit donjon de groupe.

Je vais commencer par la base des bases: si vous croyez que pour qu'une map soit considéré comme un donjon, il faut aller modifier je ne sais quoi dans les fichiers de la map, enlevez-vous tout de suite cette idée de la tête car c'est complètement faux. Tout se passe dans la quête. On utilise les fonctions LUA d pour " parler " d'un donjon.

Rentrer dans un donjon :

Révélation

C'est LA fonction qui va vous permettre de considérer une map tel un donjon. Bien sûr, il en existe plusieurs.

  • d.join -- TP un joueur/groupe dans un donjon
  • d.new_jump --- TP un seul joueur dans un donjon aux coordonnées X;Y
  • d.new_jump_all() --- TP tous les joueurs de la map dans un donjon aux coordonnées X;Y
  • d.new_jump_party() --- TP le groupe dans un donjon aux coordonnées X;Y

d.join() 

Prend en paramètre l'ID de la map ( d.join(251)   par exemple)
Elle permet au joueur (ou au groupe du joueur si celui-ci est le chef du groupe), de créer un donjon sur la map mis en paramètre. Cette fonction vous téléporte au spawn par défaut de la map (définit dans le fichier Town de la map).
Pour que la téléportation se fasse, il faut que les deux maps soient dans le même core (ou channel). Par exemple, la map de TP (map1) et la map donjondoit être tous deux dans le core1 pour que la téléportation puisse être effectué. (Attention, vous ne pouvez pas être téléporté si la map de TP est un donjon!)

Quand je dis: créer un donjon, je veux dire que vous allez " créer " une map juste pour vous ou pour votre groupe. C'est-à-dire qu'un autre groupe peut faire l'instance en même temps sans interagir avec vous.


d.new_jump()

Contrairement à la fonction d.join(), cette fonction va vous permettre de téléporter qu'UN seul joueur sur la map de votre choix et les coordonnées de votre choix. Cette fonction est bugguée sur les files 2012.

Un exemple: d.new_jump(251, 2545300, 3151700)

e téléporte juste le joueur sur la map d'ID 251 et de coordonnées universelles (2545300, 3151700) (voir le tutoriel de Sparks : ici)


d.new_jump_all() 

Elle ne prend pas les mêmes paramètres (elle demande des coordonnées globales) contrairement à la fonction d.new_jump(), celle-ci va TP absolument tous les joueurs qui se trouvent sur la map.

Un exemple: d.new_jump_all(251, 25453, 31517)

Je téléporte tous les joueurs de la map dans le donjon d'ID 251 aux coordonnées globales (25453, 31517)


d.new_jump_party() 

Seulement pour les Files 2013 (ou +)
Elle prend les mêmes paramètres (entre parenthèse) que la fonction d.new_jump_all(), celle-ci va TP tout le groupe sur la map donjon.

Un exemple: d.new_jump_party(251, 25453, 31517)

La gestion des mobs dans un donjon :

Révélation
  • d.regen_file() -- Charge une seule fois un regen
  • d.set_regen_file() -- Charge un regen
  • d.clear_regen() -- Clear le chargement de regen (les mobs spawn plus)
  • d.spawn_mob() -- Spawn un mob
  • d.spawn_goto_mob() -- Spawn un portail invisible
  • d.spawn_group() -- Spawn un groupe
  • d.set_unique() -- Déclarer un mob unique
  • d.unique_get_hp_perc() -- Obtenir les HP du mob unique
  • d.unique_set_def_grade() -- Changer la défense du mob unique
  • d.unique_set_hp() -- Changer les HP du mob unique
  • d.check_eliminated() -- Vérifie si tous les mobs du donjon sont morts
  • d.count_monster() -- Renvoi le nombre de mobs qu'il reste sur la map
  • d.is_unique_dead() -- Renvoi l'état du mob unique (mort ou vivant)
  • d.kill_all() -- Kill tous les mobs de la map
  • d.kill_unique() -- Kill un mob unique
  • d.purge() -- Purge toute la map
  • d.purge_unique() -- Purge un mob unique
  • d.get_kill_mob_count() -- Renvoi le nombre de mobs tués
  • d.get_kill_stone_count() -- Renvoi le nombre de metins tués

Vous trouverez ci-dessous toutes les fonctions qui permettent de gérer les mobs dans un donjon.


d.regen_file() 

Permet de charger un regen qu'une seule fois ! C'est-à-dire qu'il n'y aura aucun repop.

Exemple: d.regen_file("data/donjon/sholabit/regen1.txt")

Je charge qu'une seule fois le regen1.txt à l'emplacement data/donjon/sholabit/  (en partant du dossier share bien sûr)


d.set_regen_file() 

Même syntaxe que la fonction d.regen_file sauf que celle-ci va complètement charger le regen. C'est-à-dire que tant que vous ne lui demandez pas d'arrêter, il va charger votre regen (en fonction des paramètres que vous avez donné dans le regen bien sûr)

Exemple: d.set_regen_file("data/donjon/sholabit/regen1.txt")

Je charge complètement le regen1.txt à l'emplacement data/donjon/sholabit/  (en partant du dossier share bien sûr)


d.clear_regen() 

Permet d'arrêter le spawn auto des mobs d'un regen (set_regen_file)


d.spawn_mob()

Permet de faire pop un mob aux coordonnées locales X Y. (Comme si vous faisiez un /m)

Exemple: d.spawn_mob(101, 625, 30)

Je fais pop un mob d'ID 101 à l'emplacement (625, 30) du donjon
Cette fonction à un fonctionnement identique à mob.spawn.


d.spawn_goto_mob() 

Permet de faire spawn un portail invisible aux coordonnées locales X1;Y1 qui va téléporter le joueur aux coordonnées locales X2;Y2

Exemple: d.spawn_goto_mob(625, 700, 103, 400)

Le portail se trouve aux coordonnées X;Y --> 625;700 et va téléporter le joueur aux coordonnées X;Y --> 103;400 (comme dans les catacombes)


d.spawn_group() 

Permet de faire spawn un groupe de mob dans une intervalle de coordonnées X;Y (avec la possibilité de rentre les mobs agressif et de pop plusieurs fois le groupe)

Exemple: d.spawn_group(501, 304, 400, 50, TRUE, 5)

Je fais spawn 5 fois le groupe d'ID 501 aux coordonnées locales X;Y --> 304;400 en mode agressif (TRUE = Agressif, FALSE = Normal). 50 est en quelque sorte la " limite de l'intervalle " du spawn. Ici, le groupe de mob va pop aux coordonnées comprises entre (x - 50; y - 50) et (x + 50; y + 50) soit un rayon de 50.


d.set_unique()

Permet de rendre unique un mob (pour ensuite lui modifier ses caractéristiques)

Exemple: d.set_unique("Beran", 250) 

Je rend le mob Beran de vid 250 unique.
Je peux récupérer le vid du Beran avec la fonction: pc.get_vid(ID)


d.unique_get_hp_perc() 

Renvoi le % de HP que possède le mob (définit dans le set_unique)

Exemple: d.unique_get_hp_perc("Beran")

La fonction renvoi le % d'exp du beran


d.unique_set_def_grade() 

Permet de changer la défense du mob.

Exemple: d.unique_set_def_grade("Beran", 25)

La défense du Beran devient 25.


d.unique_set_hp()

Permet de changer le nombre de points de vie du mob

Exemple: d.unique_set_hp("Beran", 60)

Les points de vie du Beran sont maintenant égal à 60


d.check_eliminated()

Permet de savoir si les mobs du donjon sont tous morts.


d.count_monster() 

Renvoi le nombre de mob qu'il reste (actif) dans le donjon.


d.is_unique_dead() 

Renvoi si le mob unique est vivant ou mort.
True: Mort
False: Vivant

Exemple: d.is_unique_dead("Beran")

La fonction va me renvoyer son état.


d.kill_all() 

Tue tous les mobs de la map


d.kill_unique() 

Tue un mob unique

Exemple: d.kill_unique("Beran")

Tue le mob unique Beran


d.purge() 

Purge tous les mobs du donjon


d.purge_unique() 

Purge un mob unique.

Exemple: d.purge_unique("Beran")

Purge le beran


d.get_kill_mob_count() 

Renvoi le nombre de mobs tués dans le donjon


d.get_kill_stone_count() 

Renvoi le nombre de metins détruites dans le donjon

La gestion des téléportations / sorties dans un donjon :

Révélation
  • d.exit() -- Sort le joueur du donjon
  • d.exit_all() -- Sort tout le monde du donjon
  • d.exit_all_to_start_position() -- Sort tout le monde du donjon à leur map 1
  • d.set_warp_at_eliminate() -- Téléporte les joueurs une fois tous les mobs tués
  • d.set_exit_all_at_eliminate() -- Sort tout le monde du donjon une fois tous les mobs tués (après x secondes)
  • d.set_warp_location() -- Téléporte les joueurs aux coordonnées X Y

d.exit() 

Fais sortir le joueur du donjon.


d.exit_all() 

Même chose que la fonction ci-dessus sauf que celle-ci téléporte tous les joueurs.


d.exit_all_to_start_position()

Fais sortir tous les joueurs du donjon à leur map 1 respective.


d.set_warp_at_eliminate() 

Téléporte tous les joueurs de la map aux coordonnées globales X;Y après x secondes de la mort du mob

Exemple: d.set_warp_at_eliminate(20, 251, 600, 300, "data\regen.txt")

TP tous les joueurs de la map 251 aux coordonnées 600 300 après 20 secondes de la mort du mob. Charge ensuite le regen.txt (Ce paramètre n'est pas obligatoire, vous n'êtes pas obligé de le mettre)


d.set_exit_all_at_eliminate() 

Fais quitter le donjon à tous les joueurs après X secondes de la mort du dernier mob.

Exemple: d.set_exit_all_at_eliminate(20)

Téléporte tous les joueurs en dehors du donjon après 20 secondes de la mort du dernier mob

La gestion des variables dans les donjons :

Révélation
  • d.setf() -- Créer un flag commun
  • d.setqf() -- Changer la valeur d'un flag
  • d.getf() -- Obtenir la valeur d'un flag

d.setf()

Créé un flag commun à tous les joueurs du donjon.

Exemple: d.setf("test", 1)

Je créé un flag test avec la valeur 1.


d.getf() 

Renvoi la valeur du flag

Exemple: d.getf("test")

Renvoi la valeur de test

Fonctions diverses :

Révélation
  • d.is_use_potion() -- Savoir si un joueur a utilisé une potion
  • d.notice() -- Afficher un message à l'écran

d.is_use_potion(0, 0) 

Permet de savoir si le joueur a utilité une potion dans le donjon.


d.notice() 

Affiche un texte pour tous les joueurs du donjon (comme un /n)

Exemple: d.notice("Coucou")

C'est tout bon !
Il manque surement de nombreuses fonctions, j'ai mise seulement celles que je connaissais plus ou moins bien.

Vous pouvez très bien en proposer d'autres.
Des questions ? Go A/Q/S

  • Love 9
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Salut Calypso,

 

Merci pour ton super tuto, par contre si je peut me permettre ton exemple pour le d.new_jump_all(251, 25, 620) n'est pas tout a fait correcte

Il ne faut pas oublier de rajouté les coordonée de la map (le warp) au X;Y

 

Pour ma part voici comment ca fonctionne :

 

d.new_jump_all(181, 9728+305, 1024+428)

  • Love 1

Mettez 11 imbéciles d'un coté, 10 philosophes de l'autre...
Les imbéciles l'emporteront !
C'est ca, la démocratie...

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
  • 1 an après...


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 21

      Metin2 en 2020 peut-on en parler?

    2. 0

      METIN2Project

    3. 3

      Ressources - UnPack - Metin2 Client - Officiel

    4. 0

      Barre des tâches d'argent étendue

    5. 16

      Redémarrage automatique des channels

    6. 16

      Multi Logo GM / SGM / GA

  • En ligne récemment

    • Aucun utilisateur enregistré regarde cette page.

Information importante

Conditions d’utilisation / Politique de confidentialité / Règles / Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.