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

Swice

Membre
  • Compteur de contenus

    48
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Swice

  1. Swice

    Lv de départ

    SOIT : LEVEL_DEPART = 120 EXPERIENCE = 2000000000 quest level_up begin state start begin when login with pc.get_level() < LEVEL_DEPART begin while pc.get_level() < LEVEL_DEPART do pc.give_exp2(EXPERIENCE) end end end end SOIT : quest level_up begin state start begin when login with pc.get_level() < 120 begin while pc.get_level() < 120 do pc.give_exp2(2000000000) end end end end Soit on met les variables dans les deux, soit on ne les met pas, comme ci-dessus. Bonne soirée !
  2. Swice

    Lv de départ

    Salut, Peux-tu nous montrer cette quête ?
  3. Swice

    Lv de départ

    Bonsoir, Il suffit d'ajouter une quête donnant de l'expérience au joueur lors de sa première connexion. A toi de calculer la valeur à ajouter selon le niveau souhaité ! Bonne soirée !
  4. Swice

    quest purgatoires

    Salut, As-tu un message d'erreur quelque part qui pourrait nous être utile ?
  5. Salut, Je pense que c'est une erreur toute bête. A chaque set_state(). Tu dois mettre le nom entre ". Voilà, voilà, bonne journée !
  6. Swice

    Quête instance

    Salut, Tu trouveras sûrement ton bonheur par ici : le purgatoire. Bonne soirée !
  7. Swice

    Beug quête skills P

    Salut, En ajoutant les derniers skills tu as juste oublié une parenthèse. pc.set_skill_level(67, 59 Je te laisse corriger.
  8. Swice

    [Création] Les boucles

    Salut, Merci pour ces petites corrections Sparks, j'ai modifié le tutoriel aux endroits qu'il fallait. J'ai, par ailleurs, ajouté un tout petit détail dans l'avancement de la boucle 'Pour'. Bonne soirée !
  9. Salut, mysql_query = function(query) if not pre then local rt = io.open('CONFIG','r'):read('*all') pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4') end math.randomseed(os.time()) local fi,t,out = './mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{} os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- for MySQL51 --os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- for MySQL55 for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi); for i = 2, table.getn(t) do table.foreach(t[i],function(a,b) out[i-1] = out[i-1] or {} out[i-1][a] = tonumber(b) or b or 'NULL' out[t[1][a]] = out[t[1][a]] or {} out[t[1][a]][i-1] = tonumber(b) or b or 'NULL' end)end out.__lines = t[1] return out end Tu vois ces lignes : os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- for MySQL51 --os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- for MySQL55 Il faut commenter la première (en ajoutant -- devant) et dé-commenter la seconde (enlever les --). Bonne après-midi !
  10. Salut, J'ai codé rapidement une nouvelle version de ta quête en la simplifiant énormément. Il faut juste ajouter ce tableau dans ton questlib : vip_table = {20239, 20299, 20279, 20269} quest to_VIP begin state start begin when 33008.take with item.vnum == 29004 begin if pc.count_item(29004) == 0 then syschat("Vous n'avez pas l'objet demandé.") return end if string.sub(pc.get_name(), 1, 5) == "[VIP]" then syschat("Vous êtes déjà un VIP.") return end if pc.is_married() then syschat("Vous ne pouvez pas devenir un VIP si vous êtes marié.") return end if pc.is_polymorphed() then syschat("Vous ne pouvez pas devenir un VIP si vous êtes transformé.") return end if pc.has_guild() then syschat("Vous ne pouvez pas devenir un VIP si vous êtes dans une guilde. ") return end if party.is_party() then syschat("Vous ne pouvez devenir un VIP si vous êtes dans un groupe.") return end say_title(mob_name(33008)) say("") say("Souhaites-tu devenir un VIP ?") if select("Oui", "Non") == 2 then return end item.remove() local pseudo_VIP = "[VIP]"..pc.get_name() local pseudo = pc.get_name() mysql_query("UPDATE player.player SET name = "..pseudo_VIP.." WHERE name = "..pseudo..";") pc.give_item2(15849+pc.get_job()*10, 1) pc.give_item2(vip_table[pc.get_job+1], 1) pc.warp(pc.get_x()*100, pc.get_y()*100) syschat("Vous êtes maintenant un VIP !") end end end Essayes d'utiliser cette quête, et dis moi si ça marche. Bonne soirée !
  11. Bonsoir, En fait ta quête pourrait être simplifiée (pas de requêtes, etc..). Il suffirait juste de faire ça pour changer de pseudo : pc.change_name("[VIP]"..pc.get_name()) Cependant cette fonction est désactivée en 2010+, il faut donc la réactiver. Bonne soirée !
  12. Swice

    Monstre X1

    Salut, J'adore la marchande, l'autre pnj un peu moins. Merci de les avoir partager ! Bonne soirée.
  13. Bonjour, La fonction pc.change_name() permet de changer le pseudo d'un joueur facilement. Cependant, elle ne fonctionne plus en 2010+. Il faut donc la réactiver (je ne sais pas comment faire, mais je pense que certains le savent).
  14. Bonjour, C'est possible oui. Tu mets tes valeurs dans un tableau, de cette manière : id_table = {89, 52, 74, 78, 85} local id_item = table_get_random_item(id_table)
  15. Swice

    beug bloque exp

    Bonsoir, Les joueurs se mettent-ils en groupe pour utiliser le bug ? Celui qui a codé la quête a-t-il réfléchit au fait que le joueur pouvait monter de niveau entre temps ? when kill with pc.getqf("lock_exp") == 1 begin pc.give_exp2(-pc.get_exp()) pc.give_exp2(pc.getqf("exp_lock")) end Ton code marche très bien lorsque les joueurs ne changent pas de niveau : Tu retires l'expérience qu'il possède Tu lui ajoutes celle qu'il avait avant Sauf que ton code ne sait pas si le joueur monte de niveau. Dans ce cas : Tu enlèves d'abord l'expérience qu'il a (celle qu'il a obtenu après la montée) Tu lui ajoutes celle qu'il avait avant la montée S'il avait 99% et se retrouve à 0.2%, il y a un problème.. il se retrouvera au niveau suivant avec 99% Je vais te proposer une solution. Dans le cas d'une montée de niveau, tu ne peux pas enlever l'expérience du niveau inférieur. Donc on est coincé.. Je te soumet donc cette idée : Si le joueur veut bloquer son expérience, sauvegardes-la dans une variable setqf Après, soit : Tu vides son expérience à chaque fois qu'il dépasse 80% Quand il débloque, tu lui rends l'expérience sauvegardée Penses à expliquer le système aux joueurs avant qu'ils acceptent. Soit : Tu fais en sort que l'expérience gagnée soit retirée directement en ajoutant dans le when kill : pc.give_exp2(-pc.get_exp()) Ce qui permet de ne pas montrer que la barre d'expérience se remplit, elle reste toujours à 0. Bonne soirée !
  16. Swice

    beug bloque exp

    Bonsoir, Peux-tu poster la quête s'il te plait ?
  17. Salut, Normalement la fonction pc.change_name() ne marche plus en file 2010+. Mais en bidouillant un peu il me semble qu'elle peut fonctionner. Du coup tout serait simplifié.
  18. Salut, Tu pourrais poster la quête en entier ? Et nous dire exactement ce que tu cherches à faire avec la fonction.
  19. Salut, Ayant lu en détail toute la quête, je n'ai pas trouvé d'autres problèmes que dans les requêtes. Le mot clé LIMIT fonctionne avec deux champs, de cette manière : LIMIT valeur1, valeur2. Tu vas sélectionner les valeurs à partir de l'entrée valeur1 pour valeur2 entrées dans ta table. (je ne suis pas certain qu'on puisse mettre juste valeur1) De plus, on commence à 0, peut-être que le problème vient du 1 que tu as mis, qui prendrai la seconde valeur et donc pourrait changer le pseudo du mauvais joueur. Petite remarque quand à la conception de cette quête : pourquoi avoir détaillé toutes les parties alors que seuls les objets donnés sont différents ? Tu aurais juste pu faire un tableau avec 4 entrées contenant les deux objets à donner. Et tu fais : for i =1,2 do pc.give_item2(Nom_Tableau[pc.get_job()], 1) end Aussi, pourquoi faire deux requêtes alors que tout est dans la même table ? Il te suffit de faire : mysql_query("UPDATE player.player SET name = '[VIP]"..name.."' WHERE name = '"..name.."';") C'est beaucoup plus simple, ça allège ton code de plusieurs lignes et surtout de plusieurs requêtes. Sinon, si tu préfères utiliser l'id des personnages, préfères utiliser la fonction pc.get_player_id() qui t'évitera de faire la première requête. Du coup, tu aurais une seconde requête comme ça : mysql_query("UPDATE player.player SET name = '[VIP]"..name.."' WHERE id = "..id..";") Je serais à ta place, je chercherais aussi à corriger un maximum de fautes d'orthographe, et de construire des phrases plus propres. (ceci est juste un conseil) Tu pourrais aussi ajouter une téléportation du personnage (qui le téléporterait là où il est), comme ça il aurait automatiquement son nom de changer. Tu feras attention la prochaine fois, je ne sais pas si c'est une erreur d’inattention ou autre, mais id n'est pas la même chose qu'account_id. Le second est relié au compte, donc quand tu vas donner le grade, ça prendra tous les personnages sur le compte sauf le premier (car LIMIT 1 et pas 0), et non seulement le personnage qui donne l'item. Je me posais une question.. pourquoi : local id = find_id[1][1]+1-1 ? +1-1 = ? Bonne soirée !
  20. Bonsoir, Il n'existe que la fonction logout, que tu ne peux pas utiliser à des fins d'affichage. Je ne suis pas compétent dans le domaine du client, je ne sais donc pas si tu peux, mais je pense quand même qu'il y a une solution à ton problème. Bonne soirée.
  21. Bonjour, Lors d'une téléportation, le joueur est un instant vu comme déconnecter. Tu ne peux donc pas utiliser logout pour afficher qu'un joueur se déconnecte. Le message apparaîtra tout le temps. Fais attention à l'orthographe, et ajoutes un point pour mettre l'accent : notice_all("Le joueur "..name.." s'est déconnecté.") Bonne journée !
  22. Bonsoir, Tout d'abord, ta requête. Je pense qu'elle marchera mieux comme ceci : mysql_query("SELECT name FROM player.player WHERE ip = '"..ip.."';") Ensuite, pour récupérer le résultat, il faut juste faire : local pseudo = mysql_query("SELECT name FROM player.player WHERE ip = '"..ip.."';") Enfin, pour les boucles, je suppose que tu veux les afficher IG dans une fenêtre de quête. Sachant que pseudo est un tableau contenant les noms des personnages reliés à l'ip choisie, il suffit de faire quelque chose comme ça : say_title(ip) for i=1, table.getn(pseudo[1]) do say(pseudo[1]) end Je résume rapidement : quest get_ip begin state start begin when vnum_pnj.chat."Les adresses IP" with pc.is_gm() begin say_title("Les adresses IP") say("") say("Entrez l'adresse IP voulue.") local ip = input() ## je ne sais pas comment tu trouves l'ip des joueurs pour ton code local pseudo = mysql_query("SELECT name FROM player.player WHERE ip = '"..ip.."';") wait() say_title(ip) say(table.getn(pseudo[1]).."personnages ont cette adresse IP") for i=1, table.getn(pseudo[1]) do say(pseudo[1][i]) end end end end Si tu veux quelque chose de propre, et pas tout sur la même page, je te conseil de mettre une valeur max à i, puis de faire plusieurs fois l'affichage pour d'autres valeurs, ou de supprimer les noms une fois affichés. Petit exemple : local numb = table.getn(pseudo[1])%5 for i=1,numb do for j=1, 5 do say(pseudo[1][i]) table.remove(pseudo[1], i) end end Ou simplement : for i=1, table.getn(pseudo[1]) do say(pseudo[0][1]) table.remove(pseudo[1], 1) end S'il te faut plus d'informations sur les tableaux, boucles, etc.. il existe des tutoriaux sur le forum. Bonne soirée !
  23. Salut, J'ai essayé de coder quelque chose en vitesse, j'avais pas trop le temps donc c'est possible d'y trouver des erreurs, mais si ça peut aider. quest tpOther begin state start begin when 40001.use begin local pseudo = pc.get_name() local coor_x = pc.get_local_x() local coor_y = pc.get_local_y() local vid_p = pc.get_vid() say_title("Téléporter un joueur sur soi") say("") say("Quel joueur voulez-vous téléporter ?") say("") local a_tp = input() local vid_a_tp = find_pc_by_name(a_tp) if vid_a_tp == 0 then say_title("Téléporter un joueur sur soi") say("") say("Cette personne n'existe pas") say("") say_reward(string.format("Nom : %s inconnu" , a_tp)) return end local ok_sign = confirm(vid_a_tp , "Voulez-vous vous téléporter sur "..pseudo.." ?", 30) timer("tp", 32) if ok_sign == CONFIRM_OK then pc.select(vid_a_tp) if pc.count_item(40001) >= 1 then pc.warp(coor_x, coor_y) pc.select(vid_p) pc.setqf("tp", 1) else pc.select(vid_p) say_title("Téléporter un joueur sur soi") say("") say(a_tp "n'a pas l'item de téléportation.") return end else pc.setqf("tp", 0) end end when tp.timer begin if pc.getqf("tp") == 0 then say_title("Téléporter un joueur sur soi") say("") say(a_tp "a refusé votre invitation.") end end end end Bonne soirée !
  24. Swice

    Quête EXP

    Tu peux essayer de faire deux codes différents, le premier, sans l'exp ; le second qui au contraire, ne gère que l'exp.

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.