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

Petit soucis de quête mysql


marllow

Question

Bonjour, Bonsoir.

 

J'ai un soucis au niveau de Mysql_query en gros euh la fonction insert_into et select fonctionnent niquel mais la fonction UPDATE ne fonctionne pas... J'ai testé 2 quêtes différentes qui utilise cette fonction et aucune des deux ne fonctionnent.

J'aimerais savoir pourquoi il y à un truc à rajouter dans le module mysql_query ou une fonction dans le quest_fonction je sais pas...

 

Voici tous les détails :

 

La première quête :

 

quest gokhancarkacirutbev1 begin
        state start begin
             when letter begin
        send_letter ("Grade de guerre")
            end
            when button or info begin
                                    say_title("Informations sur le système")
                                    say("")
                                    say("Bonjour "..pc.getname()..", les experts disent que vous voulez [ENTER]être un soldat?")

                                    local b=select("Oui", "Non")
                                        if 1==b then
                                    say_title("Informations sur le système")
                                    say("")
                                    say("Avec plaisir alors...[ENTER]Vous voulez que je vous donne quelques informations?")
                                    say("D'accord... Eh bien, écoutez-moi.")
                                    say("Pour distinguer chaque joueurs on a mit en place un")
                                    say("système de grades en fonction de vos kills.")
                                    say("Le premier grade est à 50kills.")
                                        wait()  
                                    say_title("Informations sur le système")
                                    say("")
                                    say("Un total de 9 grades à gagner pour prouver votre niveau.")
                                    say("Les grades seront devant votre pseudo une fois gagné.")
                                    say("Voici les grades qui peuvent être obtenu:")
                                    say("(Tr) Stagiaire à 50 Kills[ENTER](Sg) Sergent à 150 Kills[ENTER](Mt) Master à 250 Kills[ENTER](Cs) Commandant Sergent à 400 Kills[ENTER](Sl) Second Lieutenant à 600 Kills[ENTER](Fl) First Lieutenant à 800 Kills[ENTER]")
                                        wait ( )
                                    say_title("Informations sur le système")
                                    say("")
                                    say("(Ct) Capitaine à 1200 Kills[ENTER](Co) Colonel à 2000 Kills[ENTER](Or) Général à 3500 Kills")
                                    say("Plus de détails sur les grades:")
                                    say("Chaque grade obtenu sera actif 1 heure maximum après")
                                    say("l'avoir reçu et il sera ajouté automatiquement.")
                                    say("Chaque grade vous accompagne de différents bonus.")
                                    say("Bonne chance.")
                                        elseif 2==b then
                                    say("Hmm, vous n'êtes pas assez courageux !")
                                end
                              end
                              
                              
                when kill with npc.is_pc() begin
                        pc.setqf("blackforceqetqf", pc.getqf("blackforceqetqf")+1)
                        local vid = npc.get_vid()
                        local old_pc = pc.select(vid)
                        if old_pc != 0 then
                        local leveli = pc.get_level()
                        local isimi = pc.get_name()
                        pc.select(old_pc)
                        syschat("Félicitations ! Vous gagnez des points pour votre grade.")
                        
                        
                        if pc.getqf("blackforceqetqf") == 1 then
                            syschat("Félicitations, vous allez combattre pour un grade.")
                                syschat("Bonne chance sur Reptilium-Mt2")
                                syschat("Premier grade à 50 kills.")
                                syschat("Système : Données sauvegardées.")
                                syschat("")
                                notice_all("Le joueur " .. pc . get_name ( ) .. " lvl "..pc.get_level()..", a tué "..isimi.." "..leveli.." GG !")
                                mysql_query("insert into player.gokhancarkaci values ('"..pc.get_account_id().."','"..pc.get_name().."','V1 versiyonu kullanmaktasiniz') ")
                        elseif pc.getqf("blackforceqetqf") == 50 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Tr) Stagiaire.")
                                syschat("Récompense : +25 de vitesse de déplacement.")
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Tr)!")
                                affect . add_collect ( apply . MOV_SPEED , 25 , 60 * 60 * 24 * 365 * 60 ) 
                                local gcarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")  
                                local a = gcarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Tr)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 150 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Sg) Sergent.")
                                syschat("Récompense : +500 de défense.")
                                affect . add_collect ( apply . DEF_GRADE_BONUS , 500 , 60 * 60 * 24 * 365 * 60 ) 
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Sg)!")
                                local gocarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ") 
                                local a = gocarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Sg)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 250 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Mt) Master.")
                                syschat("Récompense : +1000 de défense.")
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Mt)!")
                                affect . add_collect ( apply . DEF_GRADE_BONUS , 1000 , 60 * 60 * 24 * 365 * 60 ) 
                                local gokcarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                                 
                                a = gokcarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Mt)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 400 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Cs) Commandant Sergent.")
                                syschat("Récompense : +1000 d'attaque.")
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Cs)!")
                                affect . add_collect ( apply . ATT_GRADE_BONUS , 1000 , 60 * 60 * 24 * 365 * 60 ) 
                                local gokhcarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                            
                                a = gokhcarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Cs)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 600 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Sl) Second Lieutenant.")
                                syschat("Récompense : +2000 d'attaque.")
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Sl)!")
                                affect . add_collect ( apply . ATT_GRADE_BONUS , 2000 , 60 * 60 * 24 * 365 * 60 ) 
                                local gokhacarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                             
                                a = gokhacarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Sl)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 800 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Fl) First Lieutenant.")
                                syschat("Récompense : +5% de défense à l'épée.")
                                affect . add_collect ( apply . RESIST_SWORD , 5 , 60 * 60 * 24 * 365 * 60 ) 
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Fl)!")
                                local gokhancarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                             
                                a = gokhancarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Fl)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 1200 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Ct) Capitaine.")
                                syschat("Récompense : +5% de défense vs les deux mains.")
                                affect . add_collect ( apply . RESIST_TWOHAND , 5 , 60 * 60 * 24 * 365 * 60 ) 
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Ct)!")
                                local gokhancarrkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                             
                                a = gokhancarrkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Ct)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 2000 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Co) Colonel.")
                                syschat("Récompense : +5% de défense à la dague.")
                                affect . add_collect ( apply . RESIST_DAGGER , 5 , 60 * 60 * 24 * 365 * 60 ) 
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Co)!")
                                local tablocarkaci = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")                                 
                                a = tablocarkaci.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Co)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                        elseif pc.getqf("blackforceqetqf") == 3500 then
                                syschat("Félicitations, vous avez reçu votre grade.")
                                syschat("Votre pseudo va changer dans 1 heure maximum.")
                                syschat("Grade gagné : (Or) Général.")
                                syschat("Récompense : +5% de résistance au gong.")
                                affect . add_collect ( apply . RESIST_BELL , 5 , 60 * 60 * 24 * 365 * 60 ) 
                                notice_all("" .. pc . get_name ( ) .. " a été promu (Or)!")
                                local sontablo = mysql_query("SELECT adi FROM player.gokhancarkaci WHERE id = '"..pc.get_account_id().."' ")             
                                a = sontablo.adi[1] 
                                mysql_query ( "UPDATE player.player SET name='(Or)"..a.."' WHERE name='" .. pc . get_name ( ) .. "';" ) 
                            end
                        end
                    end
                end
            end

 

La seconde quête :

 

quest killadd begin
    state start begin
        when kill with npc.is_pc() begin
            mysql_query("UPDATE player.player SET kills = kills+1 WHERE account_id ='"..pc.get_account_id()"';")
        end
    end
end

 

 

Mon mysql_query dans le questlib.lua :

 

function split(str, delim, maxNb)

    if str == nil then return str end

    if string.find(str, delim) == nil then return { str } end

    if maxNb == nil or maxNb < 1 then maxNb = 0 end

    local result = {}

    local pat = "(.-)" .. delim .. "()"

    local nb = 0

    local lastPos

    for part, pos in string.gfind(str, pat) do

        nb = nb + 1

        result[nb] = part

        lastPos = pos

        if nb == maxNb then break end

    end

    if nb ~= maxNb then result[nb + 1] = string.sub(str, lastPos) end

    return result

end




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) -- pour MySQL51

    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- pour 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

    return out

end

 

 

Mon mysql_query dans quest_fonctions :

 

mysql_query

 

 

Voilà je vous ai donné tous les détails.

 

Ma colone kills est ajoutée, et la table gokhancarkaci est ajoutée et est fonctionnelle.

 

Version des files : 2012

Domaine (Base de données, Core, etc.) : BDD / Quest

Votre niveau (débutant, intermédiaire, avancé) : Intermédiaire

 

Description du problème : Soucis de mysql_query ou de fonction car insert_into et select fonctionnent parfaitement comparé au UPDATE

Comment reproduire le problème : Rien ne s'update sur la bdd

Recherches et tests effectué : Forum

Résultat des recherches et tests : Aucun

 

Message d'erreur, capture d'écran : Aucun.

 

En postant ma demande d'aide, j'affirme avoir lu et accepté le règlement des demandes d'aides.

Lien vers le commentaire
Partager sur d’autres sites

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

Meilleurs contributeurs dans cette question

Meilleurs contributeurs dans cette question

12 réponses à cette question

Messages recommandés

  • 0

Ma fonction est bien fonctionnelle ^^

Modifie ton questlib mysql_query par celui-ci, celui partagé partout étant erroné je l'avais corrigé :

 

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) -- f? MySQL51
   os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- f? 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
   return out
end

Lien vers le commentaire
Partager sur d’autres sites

  • 0

La fonction fonctionne bel et bien chez moi, avec le même code que je t'ai passé.

Ça vient donc forcément d'autre part. Essaye le même code que le mien qui update les "cash" des comptes dans la table account.account. Si ta colonne s'appelle coins, renomme la fonction en coins. Je te dis cette colonne parce qu'elle est implantée sur quasiment tous les SQL donc tu l'as logiquement.

 

Si la fonction marche, on saura que c'est un problème de structure de ta table player.player donc l'update des kills ne passent pas (peut-être).

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

    7. 0

      comment extraire les fichiers locale.epk locale.eix sur le serveur officiel ?

    8. 2

      Funky-emu.net -> fr.metin2.dev

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