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

[GamePlay] Biologiste universelle


Sparks

Messages recommandés

  • Retraité

Centre de Téléchargement

Hidden Content

    Give reaction to this post to see the hidden content.
( Interne )

Salut à tous,

 

je vous ai concocté une petite quête du biologiste un peu particulière.

Cette quête vous permettra de remplacer toutes vos anciennes quêtes du biologiste sur votre nouveau serveur.

 

Elle est codée de façon à pouvoir configurer et modifier facilement vos quêtes. (autant que possible !)

 

À savoir :

- n'implantez pas cette quête sur un serveur avec des joueurs, ils pourront recommencer toutes les quêtes

 

 

Avantages :

- modification rapide

- rajout de quête rapide et simple (aucune modification dans la quête n'est nécessaire, seule la table doit être complétée)

- moins de surchage de la table affect (entre 58 et 90% par rapport aux quêtes du biologiste traditionnelles)

- rajouter une option se répercutera automatiquement sur toutes les quêtes

- désactivation du drop de la pierre d'âme, modification du temps d'attente entre chaque objet modifiable en quelques clics pour toutes les quêtes

- toutes les quêtes regroupées dans un seul fichier (pratique et compilation plus rapide)

- compatible avec tous les files

- aucun conflit de kill avec d'autres quêtes

 

 

Ce qui a changé : (par rapport à l'officiel)

Le dialogue est réduit au minimum.

L'herboriste a été viré de l'équation, c'est le biologiste qui vous donne la récompense.

La quête commence à partir du moment où les joueurs ont le niveau nécessaire, ils n'ont pas besoin de se reconnecter ou d'aller voir le biologiste.

Le nom des monstres à tuer apparaît dans le parchemin de la quête

 

 

 

 

Pour l'implanter correctement, vous devrez rajouter cette table dans votre locale.lua

Elle reprend les caractéristiques des quêtes de l'officiel, libre à vous de la modifier/supprimer/améliorer

 

locale.biolo= {
[0] = {30, 30006, 10, 0, 60, 60*60*22, 30220, 0.2, {631, 632, 633, 634, 635, 636, 637}, 8, 10, "10% de vitesse de déplacement", 50109},
{40, 30047, 15, 0, 60, 60*60*22, 30221, 0.2, {701, 702, 703, 704, 705, 706, 707, 731, 732, 733, 734, 735, 736, 737}, 7, 5, "5% de vitesse d'attaque", 50110},
{50, 30015, 15, 0, 60, 60*60*22, 30222, 0.2, {1001, 1002, 1003, 1004}, 54, 60, "60 points de défense", 50111},
{60, 30050, 20, 0, 60, 60*60*22, 30223, 0.2, {1101, 1102, 1103, 1104, 1105, 1106, 1107}, 53, 50, "50 points d'attaque", 50112},
{70, 30165, 25, 0, 60, 60*60*22, 30224, 0.2, {2301, 2302, 2303, 2304, 2305, 2306, 2307, 2311, 2312, 2313, 2314, 2315}, {8, 74}, {11, 10}, {"11% de vitesse de déplacement", "10% de résistance aux dégâts moyens"}, 50113},
{80, 30166, 30, 0, 60, 60*60*22, 30225, 0.2, {1401, 1402, 1403, 1601, 1602, 1603}, {7, 64}, {6, 10}, {"6% de vitesse d'attaque", "10% d'attaque"}, 50114},
{85, 30167, 40, 0, 60, 60*60*22, 30226, 0.2, {2311, 2312, 2313, 2314, 2315}, {78, 79, 80, 81}, {10, 10, 10, 10}, {"10% de résistance contre les guerriers", "10% de résistance contre les ninjas", "10% de résistance contre les suras", "10% de résistance contre les shamanes"}, 50115},
{90, 30168, 50, 20, 60, 60*60*22, 30227, 10, {691, 791, 793, 794, 1091, 1092, 1191, 1192, 1304, 1306, 1334, 1901, 2091, 2191, 2206, 2207, 2306, 2492, 2495, 5002, 5161, 5162, 5163}, {59, 60, 61, 62}, {8, 8, 8, 8}, {"8% de dégâts contre les guerriers", "8% de dégâts contre les ninjas", "8% de dégâts contre les suras", "8% de dégâts contre les shamanes"}, 50114},
{92, 30251, 10, 10, 60, 60*60*6, 0, 0, {1137, 1135}, {1, 53, 54}, {[0] = 1, 1000, 51, 120}, {"1000 pv max", "51 points d'attaque", "120 points de défense"}},
{94, 30252, 20, 5, 60, 60*60*24, 30228, 20, {2412, 2414}, {1, 53, 54}, {[0] = 1, 1100, 60, 140}, {"1100 pv max", "60 points d'attaque", "140 points de défense"}},
}
 

 

 

Explications de la table :

Une ligne = une quête.

Chaque ligne comprends 13 paramètres :

  1. Niveau du joueur minimum pour qu'il commence la quête
  2. Vnum de l'objet à drop
  3. Nombre d'objet à ramener au biologiste
  4. Probabilité de drop l'objet sur les monstres (attention, configuré à 0% pour les premières quêtes (drop classique))
  5. Probabilité de réussite de l'objet chez le biologiste
  6. Temps d'attente entre chaque objet (en seconde)
  7. Vnum de la pierre d'âme
  8. Probabilité de drop la pierre d'âme
  9. Vnums de tous les monstres qui drop l'objet ET la pierre d'âme (doit être une table !)
  10. N° du bonus de la récompense
  11. Puissance des bonus de la récompense
  12. Nom du bonus et sa puissance en toute lettre
  13. Vnum de l'objet en récompense

 

Notes/Cas particuliers :

- Le % de drop (item et pierre) peut être précis jusqu'à 0.01%

- Vous pouvez supprimer le temps d'attente entre chaque objet en mettant 0 pour le paramètre 6, si c'est le cas vous donnerez plusieurs objets à la fois

- Si vous voulez désactiver le temps d'attente mais donner un seul objet à la fois, mettez 1 dans le paramètre 6

- Vous pouvez désactiver la nécessité de ramener la pierre d'âme en mettant 0 à la place du vnum de la pierre d'âme (paramètre 7)

- Si vous voulez laisser le choix entre plusieurs bonus à vos joueurs (comme les quêtes 92 et 94), il vous suffit de mettre un [0]=1 dans le 11ème paramètre (voir ces quêtes)

- Si vous voulez donner plusieurs bonus en récompense vous devez mettre une table dans les paramètres 10, 11 et 12 (voir la quête 70 ou 80)

- Le 13ème paramètre (l'objet) est facultatif, si vous ne mettez rien, ça fonctionnera, un seul objet est donné

 

 

Voici la quête :

quest biolo begin
    state start begin
        when letter or levelup with locale.biolo[pc.getqf("nb")][1] and pc.get_level() >= locale.biolo[pc.getqf("nb")][1] begin
            set_state(drop)
        end
    end
    
    state drop begin
        when letter begin
            send_letter("Quête biolo")
        end
        
        when button or info begin
            nb = pc.getqf("nb")
            if pc.getqf("ramener") == -1 then
                tot, vnum = 1, locale.biolo[nb][7]
            else
                tot, vnum = locale.biolo[nb][3], locale.biolo[nb][2]
            end
            say_title("Biologiste :")
            say("")
            say("Vous devez me trouver "..tot.." "..item_name(vnum))
            say("Vous en avez ramené : "..math.max(0, pc.getqf("ramener")).." / "..tot)
            say("A drop sur les monstres :")
            for i in locale.biolo[nb][9] do
                say(mob_name(locale.biolo[nb][9][i]))
            end
        end
        
        when 20084.chat."La recherche" begin
            say_title("Biologiste :")
            say("Vous avez des objets à me donner ?")
            say("")
            if select("Oui", "Partir") != 1 then return end
            nb = pc.getqf("nb")
            if pc.getqf("ramener") == -1 then
                vnum = locale.biolo[nb][7]
            else
                vnum = locale.biolo[nb][2]
            end
            say("Biologiste :")
            say("")
            if pc.count_item(vnum) < 1 then
                say("Revenez me voir quand vous aurez un :")
                say(item_name(vnum))
                return
            elseif get_time() < pc.getqf("temps_attente") then
                say("Inutile de m'en ramener encore !")
                say("Je n'ai pas fini d'étudier le précédent !")
                return
            end
            say("Formidable !")
            if pc.getqf("ramener") >= 0 then
                temps_attente, don, x, y, y2 = locale.biolo[nb][6], false, 0, pc.count_item(vnum), 0
                if temps_attente > 0 then
                    don = true
                    pc.setqf("temps_attente", get_time()+temps_attente)
                end
                repeat
                    y2 = y2+1
                    if number(1, 100) <= locale.biolo[nb][5] then
                        x = x+1
                    end
                until don or pc.getqf("ramener")+x >= locale.biolo[nb][3] or y2 >= y
                pc.remove_item(vnum, y2)
                if don then
                    if x == 1 then
                        say("L'échantillon était bon. Revenez plus tatd.")
                    else
                        say("L'échantillon était abimé. Retentez votre chance plus tard.")
                    end
                else
                    say("Sur "..y2.." échantillons "..x.." étaient bons.")
                end
                if pc.getqf("ramener")+x >= locale.biolo[nb][3] then
                    pc.setqf("ramener", -1)
                    pc.delqf("temps_attente")
                    if locale.biolo[nb][7] != 0 then
                        say("Bien. Allez donc me chercher la pierre d'âme !")
                    end
                else
                    pc.setqf("ramener", pc.getqf("ramener")+x)
                    say("Il en reste encore "..(locale.biolo[nb][3]-pc.getqf("ramener")).." à trouver !")
                    say("Bon courage.")
                end
            end
            if pc.getqf("ramener") == -1 and (locale.biolo[nb][7] == 0 or pc.count_item(locale.biolo[nb][7]) > 0) then
                if locale.biolo[nb][7] != 0 then
                    pc.remove_item(vnum)
                end
                say("Vous gagnez un bonus permanent :")
                if type(locale.biolo[nb][10]) != "table" then
                    affect.add_collect(locale.biolo[nb][10], locale.biolo[nb][11], 315360000)
                    say(locale.biolo[nb][12])
                else
                    if not locale.biolo[nb][11][0] then
                        for i in locale.biolo[nb][10] do
                            affect.add_collect(locale.biolo[nb][10][i], locale.biolo[nb][11][i], 315360000)
                            say(locale.biolo[nb][12][i])
                        end
                    else
                        say("Choisissez votre bonus :")
                        say("")
                        s = select_table(locale.biolo[nb][12])
                        affect.add_collect(locale.biolo[nb][10][s], locale.biolo[nb][11][s], 315360000)
                        setskin(0)
                    end
                end
                if locale.biolo[nb][13] then
                    pc.give_item2(locale.biolo[nb][13])
                end
                pc.delqf("ramener")
                pc.setqf("nb", pc.getqf("nb")+1)
                clear_letter()
                set_state(start)
            end
        end
        
        when kill with not npc.is_pc() begin
            nb = pc.getqf("nb")
            if pc.getqf("ramener") >= 0 then
                vnum, proba = locale.biolo[nb][2], locale.biolo[nb][4]*100
            else
                vnum, proba = locale.biolo[nb][7], locale.biolo[nb][8]*100
            end
            if proba < 1 then return end
            for i in locale.biolo[nb][9] do
                if npc.race == locale.biolo[nb][9][i] then
                    if number(1, 10000) <= proba then
                        pc.give_item2(vnum)
                    end
                    break
                end
            end    
        end
    end
end
 

 

 

Implantation : ici

 

 

Configurer les bonus : ici

 

 

 

Il est possible que certaines erreurs soient encore présentes, n'hésitez pas à la tester et à poster vos problèmes.

Si vous avez des idées ou des sugestions afin d'améliorer la quête, n'hésitez pas.

Si vous avez des interogations, également.

 

Bon vent.

  • Think 1
  • Love 3
Lien vers le commentaire
Partager sur d’autres sites

  • Retraité

Sparks dans toute sa splendeur ^^

Cette manière de coder est très instructive en soit et permet d'éviter romans et erreurs à gogo.

Ça me rappelle  l'armurerie de dinasty, deux mois de codage ... je l'ai refaite en une bonne journée avec des tables  :blush:

 

Bonne initiative une fois de plus !

You can't be immortal,
But you can make people remember
you for thousands of years...

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Bonjours Excuser moi de revenir sur se pote mais c'est normal que j'ai une erreur  quand je lance mon serveur ?

La voici si desous .

 

locale/france/quest/locale.lua:669: `}' expected (to close `{' at line 657) near `'

 

 

Ps : C'est les Ligne de la fonction la : 

 

 

locale.biolo= {

[0] = {30, 30006, 10, 0, 60, 60*60*22, 30220, 0.2, {631, 632, 633, 634, 635, 636, 637}, 8, 10, "10% de vitesse de déplacement", 50109},

{40, 30047, 15, 0, 60, 60*60*22, 30221, 0.2, {701, 702, 703, 704, 705, 706, 707, 731, 732, 733, 734, 735, 736, 737}, 7, 5, "5% de vitesse d'attaque", 50110},

{50, 30015, 15, 0, 60, 60*60*22, 30222, 0.2, {1001, 1002, 1003, 1004}, 54, 60, "60 points de défense", 50111},

{60, 30050, 20, 0, 60, 60*60*22, 30223, 0.2, {1101, 1102, 1103, 1104, 1105, 1106, 1107}, 53, 50, "50 points d'attaque", 50112},

{70, 30165, 25, 0, 60, 60*60*22, 30224, 0.2, {2301, 2302, 2303, 2304, 2305, 2306, 2307, 2311, 2312, 2313, 2314, 2315}, {8, 74}, {11, 10}, {"11% de vitesse de déplacement", "10% de résistance aux dégâts moyens", 50113},

{80, 30166, 30, 0, 60, 60*60*22, 30225, 0.2, {1401, 1402, 1403, 1601, 1602, 1603}, {7, 64}, {6, 10}, {"6% de vitesse d'attaque", "10% d'attaque"}, 50114},

{85, 30167, 40, 0, 60, 60*60*22, 30226, 0.2, {2311, 2312, 2313, 2314, 2315}, {78, 79, 80, 81}, {10, 10, 10, 10}, {"10% de résistance contre les guerriers", "10% de résistance contre les ninjas", "10% de résistance contre les suras", "10% de résistance contre les shamanes"}, 50115},

{90, 30168, 50, 20, 60, 60*60*22, 30227, 10, {691, 791, 793, 794, 1091, 1092, 1191, 1192, 1304, 1306, 1334, 1901, 2091, 2191, 2206, 2207, 2306, 2492, 2495, 5002, 5161, 5162, 5163}, {59, 60, 61, 62}, {8, 8, 8, 8}, {"8% de dégâts contre les guerriers", "8% de dégâts contre les ninjas", "8% de dégâts contre les suras", "8% de dégâts contre les shamanes"}, 50114},

{92, 30251, 10, 10, 60, 60*60*6, 0, 0, {1137, 1135}, {1, 53, 54}, {[0] = 1, 1000, 51, 120}, {"1000 pv max", "51 points d'attaque", "120 points de défense"}},

{94, 30252, 20, 5, 60, 60*60*24, 30228, 20, {2412, 2414}, {1, 53, 54}, {[0] = 1, 1100, 60, 140}, {"1100 pv max", "60 points d'attaque", "140 points de défense"}},

}

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
  • 4 semaines après...


  • brilliantdiscord_widget
  • Flux d'Activité

    1. 37
    2. 21

      Metin2 en 2020 peut-on en parler?

    3. 0

      METIN2Project

    4. 3

      Ressources - UnPack - Metin2 Client - Officiel

    5. 0

      Barre des tâches d'argent étendue

    6. 16

      Redémarrage automatique des channels

    7. 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.