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

Problème quette [VIP]


Allostarz57

Question

Bonjour, 

Voila j'ai un soucis avec ma quette , VIP  :

-Alors je vous explique j'ai ma quette vip  je l'ai tester sur  mon serveur test  qui fonctionne sur VirtualPC (NO-ip) et elle fonctionnent très bien le PNJ ajoute la [VIP]Devant le joueurs.

-------------------------------------------------

-Comme elle fonctionner j'ai décider de l’installer sur mon serveur dédier tous fonctionne bien je vais IG  je met l'item sur le PNJ  la quette se lance  le PNJ 

me demande si je veux devenir vip en  échange de l'item j'appui oui et la rien ne se passe le pnj prend pas l'item et ne met pas le [VIP] Devant le nom des joueurs.

Je fonctionne sous Files 2013 :

Voici la quette :

quest vip begin
    state start begin
        when 33008.take begin
            if pc.count_item(29004)>=1 then
                say_title(""..mob_name(33008).."")
                say("Plop, tu veux utiliser ton item")
                say("et devenir VIP ?")
                local a = select("Yep!", "Nope")
                if a == 1 then
if pc.get_job() == 0 then
local name = pc.get_name()
local find_id = mysql_query("SELECT account_id from player.player WHERE name='"..name.."' LIMIT 1;")
local id = find_id[1][1]+1-1
mysql_query("UPDATE player.player SET name='[VIP]"..name.."' WHERE account_id='"..id.."' LIMIT 1;")
pc.remove_item(29004)
pc.give_item2(15849,1)
pc.give_item2(20239,1)
syschat("Votre demande à été envoyé au serveur. Votre nom")
syschat("changera dès que le serveur aura retourné l'information!")
end
if pc.get_job() == 1 then
local name = pc.get_name()
local find_id = mysql_query("SELECT account_id from player.player WHERE name='"..name.."' LIMIT 1;")
local id = find_id[1][1]+1-1
mysql_query("UPDATE player.player SET name='[VIP]"..name.."' WHERE account_id='"..id.."' LIMIT 1;")
pc.remove_item(29004)
pc.give_item2(15859,1)
pc.give_item2(20299,1)
syschat("Votre demande à été envoyé au serveur. Votre nom")
syschat("changera dès que le serveur aura retourné l'information!")
end
if pc.get_job() == 2 then
local name = pc.get_name()
local find_id = mysql_query("SELECT account_id from player.player WHERE name='"..name.."' LIMIT 1;")
local id = find_id[1][1]+1-1
mysql_query("UPDATE player.player SET name='[VIP]"..name.."' WHERE account_id='"..id.."' LIMIT 1;")
pc.remove_item(29004)
pc.give_item2(15869,1)
pc.give_item2(20279,1)
syschat("Votre demande à été envoyé au serveur. Votre nom")
syschat("changera dès que le serveur aura retourné l'information!")
end
if pc.get_job() == 3 then
local name = pc.get_name()
local find_id = mysql_query("SELECT account_id from player.player WHERE name='"..name.."' LIMIT 1;")
local id = find_id[1][1]+1-1
mysql_query("UPDATE player.player SET name='[VIP]"..name.."' WHERE account_id='"..id.."' LIMIT 1;")
pc.remove_item(29004)
pc.give_item2(15879,1)
pc.give_item2(20269,1)
syschat("Votre demande à été envoyé au serveur. Votre nom")
syschat("changera dès que le serveur aura retourné l'information!")
end
                else
                    return
                end
            else
                say_title(""..mob_name(33008).."")
                say("Bah, vous faut l'item suivant pour")
                say("activer le VIP:")
                say_item_vnum(29004)
                say("Revenez quand vous l'aurez.")
                return
            end
        end
    end
end

Lien vers le commentaire
Partager sur d’autres sites

  • Réponses 29
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

Messages recommandés

  • 0

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 !

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Le problème c'est que la quette ce n'est pas moi qui l'ai faite mais un connaissance que j'ai fait sur le monde de l’émulation de metin le problème c'est que je n'ai plus contact avec lui et il ne peut pas m'aider ,

et comme je le disait la quette fonctionne très bien sur un serveur NO-IP je n'ai eu aucun problème et maintenant que je suis sous dédier elle ne fonctionne plus je l'ai retester sur un serveur no-ip et elle fonctionne donc voila je ne comprend pas d'ou sa viens .

Lien vers le commentaire
Partager sur d’autres sites

  • 0

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 !

Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Retraité

pc.change_name ne fonctionnait pas sur les files 2011, est désactivée sur les 2014 mais fonctionne sur les 2012, reste à savoir pour les 2013,

essayes donc cette quête :

quest vip begin
    state start begin
        when 33008.take begin
            if pc.count_item(29004) >= 1 then
                say_title(mob_name(33008))
                say("Plop, tu veux utiliser ton item")
                say("et devenir VIP ?")
                if select("Yep!", "Nope") == 1 then
                    pc.remove_item(29004)
                    pc.give_item2(15849)
                    pc.give_item2(20239)
                    pc.change_name("[VID]"..pc.get_name())
                    syschat("Votre demande a été envoyée au serveur. Votre nom changera à votre prochaine connexion.")
                end
            else
                say_title(mob_name(33008))
                say("Bah, vous faut l'item suivant pour")
                say("activer le VIP:")
                say_item_vnum(29004)
                say("Revenez quand vous l'aurez.")
            end
        end
    end
end

Lien vers le commentaire
Partager sur d’autres sites

  • 0

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 !

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Je viens des tester j'ai rajouter dans quest lib la ligne :

-- author : Mijago
-- description : enable to write SQL queries in quests
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

vip_table = {20239, 20299, 20279, 20269}

function topsay(id)
--mob npc
if mob_name(id) then
	say_title(mob_name(id).." :")
--item
elseif item.get_name(id) then
	say_title(item_name(id).." :")
--default
else
	say("")
end
end

je test la quette je met l'item sur le pnj la quette s'ouvre le pnj me demande si je veux être vip je click oui la quette enlève l'item puis la quette se ferme et rien ne se passe ! le VIP ne s'ajoute pas

j'ai sa aussi dans putty :

Hidden Content

    Give reaction to this post to see the hidden content.

Modifié par Funky Emulation
Core X - External 2 Internal
Lien vers le commentaire
Partager sur d’autres sites

  • 0

Juste une petite question, une request SQL okai, déjà il te serai fort conseiller d'éviter les request SQL dans une quest.

Ensuite, une request SQL n'affiche pas le résultat IG immédiatement.

Je m'explique :

 

L'actualisation des tables SQL ce fait toute les X minutes.

Si tu change le nom de ton joueur, il faudra donc attendre X minutes et une téléportation pour l’actualisation de ton nom.

 

Ce qui expliquerai peut être le problème dans ta première quest, pourquoi ?

Car ton serveur locale est surement sur le bon GSM ( WTF c'est quoi un GSM ? C'est tout simplement le fuseaux horaire de ton pays, et nous c'est Paris)

Alors que ton dedier, Heberger je pense chez OVH ne doit pas être sur le bon fuseaux horaire ce qui ralenti l'actualisation de tes tables.

 

Si je n'est pas été assez claire dans mes propos j'essayerai de reformuler cela.

Lien vers le commentaire
Partager sur d’autres sites

  • 0

Je viens des tester j'ai rajouter dans quest lib la ligne :

 

-- author : Mijago
-- description : enable to write SQL queries in quests
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

vip_table = {20239, 20299, 20279, 20269}

function topsay(id)
--mob npc
if mob_name(id) then
	say_title(mob_name(id).." :")
--item
elseif item.get_name(id) then
	say_title(item_name(id).." :")
--default
else
	say("")
end
end

je test la quette je met l'item sur le pnj la quette s'ouvre le pnj me demande si je veux être vip je click oui la quette enlève  l'item puis la quette se ferme et rien ne se passe ! le VIP ne s'ajoute pas

j'ai sa aussi dans putty :

Hidden Content

    Give reaction to this post to see the hidden content.

 

Fais attention, ta fonction affiche clairement "-- for MySQL 5.1", d'où ton erreur, il te suffit juste de commenter la 5.1 et dé-commenter la 5.5

Modifié par Funky Emulation
Core X - External 2 Internal
Lien vers le commentaire
Partager sur d’autres sites

  • 0
  • Funkiest

Hummm du DirectQuery tu sais il y a pas beaucoup de monde qui savent a quoi c'est utile, mais je me demande si le DirectQuery est direct, je pense qu'il y a un décalage aussi

 

Un décalage très moindre je crois, la connection au compte et l'ajout d'un nouveau comtpe se fais par DirectQuery je crois, tout comme les modules de ban in game (avec sources) et là c'est très rapide, à savoir si c'est la table en elle même ou le directquery. ^^

Lien vers le commentaire
Partager sur d’autres sites

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.


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