Jump to content

[Résolu] Bases de données


Recommended Posts

Bonjour, me revoilà, en ce moment je créer un login panel, seul problème, je voudrais utiliser la base de donnée "registry.db" qui se trouve à la "racine" du serveur. Seul problème, j'ai vraimant du mal avec le Wiki MTA sur ce point, et c'est donc ici que je demande votre aide.

Ce que je voudrais faire, c'est de faire un sorte que lorsque l'on s'enregistre sur le serveur, mon script enrigistre les identifients sur la base, et que lorsque l'on se connecte, mon script vérifie si le "mot de passe" correspond bien au "pseudo" enregistré dans la BDD.

J'ai déjà fait toute l'interface graphique, et le système, il ne me manque plus qu'à faire un sorte d'enregistrer sur la BDD.

PS: Si il est plus simple de recréer une BDD directement sur ma ressource, alors expliquez-moi comment faire, mais je préfère tout de même l'enregistrer aussi sur ce fameux "registry.db" au cas où ou je change de ressource, et que par erreur je supprime celle que j'ai créer.

PS2: Je ne donne pas de code, car justement c'est cela que je veut apprendre.

Sur ceux, merci d'avoir tout lu, et j'éspère que l'on me répondras, et que cela m'aideras.

Edited by Guest
Link to comment
  • Moderators

Pour ton cas, il est peut être plus simple d'utiliser internal.db.

Wiki: https://wiki.multitheftauto.com/wiki/Database

There are two main database files for storing data:

internal.db: il contient les les 'account datas' des joueurs (pseudos, mot de passes et les 'account data' sauvegardées en utilisant les fonctions setAccountData et getAccountData .

registry.db: c'est la BDD principale, toutes les fonctions executeSQLXXX utilisent ce fichier.

Voici un exemple pour le register et le login:

Register:

function registerThePlayer ( thePlayer, pseudo, password ) 
    -- On essaye de créer un nouveau compte via  
    local accountAdded = addAccount( pseudo, password ) 
    if ( accountAdded ) then 
        --  La création à fonctionné, il est enregistré 
        outputChatBox ( "Thank you " .. getPlayerName(thePlayer) .. ", you're now registed, you can login.", thePlayer ) 
    else 
        -- Il y a eu une erreur lors de la création 
        outputChatBox ( "Error creating account, contact the server admin", thePlayer ) 
    end 
end 

Login:

function loginThePlayer( thePlayer, pseudo, password ) 
    local account = getAccount ( pseudo, password ) -- Retourne le compte qui correspond au pseudo et password 
    if account ~= false then -- S'il y a bien un compte qui correspond au pseudo et password 
        logIn ( thePlayer, account, password ) -- On le login. 
        outputChatBox ( "You have been successfully logged in !", thePlayer, 0, 200, 0 ) 
    else 
        outputChatBox ( "Wrong username or password !", thePlayer, 200, 0, 0 ) 
    end 
end 

Link to comment

le serveur ne reconnaît pas "getAccount"

ERROR: Login\client.lua:66: attempt to call global 'getAccount' (a nil value)

est-ce normal, je me suis relu des dizaines de fois, et ne voit pas d'erreur sur "getAccount", j'ai même copié/collé le "getAccount" du wiki pour être sûre de na pas avoir fait de fautes de frappes...

EDIT: J'ai mal lu le wiki, c'est seulement une fonction "server", comment puis-je faire pour l'adapter à mon GUI ?

Link to comment

Bon je me suis décidé de m'aider sur un autre srcipt, et ce coup-ci j'obtient

WARNING: Login\server.lua:16: Access denied @ 'addAccount'
WARNING: Login\server.lua:17: Bad argument @ 'LogIn' [Expected account at argument 2, got nil]

Une solution possible ? Ceci ce passe sur l'enregistrement. Voici le code:

function registerHandler(player, username, password) 
    local account = getAccount(username, password) 
    if (account ~=false) then 
        triggerClientEvent(player, "registerTaken", getRootElement()) 
    else 
        account = addAccount(username, password) 
        if (logIn(player, account, password) == true then 
            outputChatBox("Si vous voulez changer de mot de passe, utilisez ''/changerpass''.",) 
            triggerClientEvent(player, "hideLoginWindow", getRootElement()) 
        end 
   end 
end 

Merci, pour l'aide, et j'éspère que cela peut être réparé facilement.

Edited by Guest
Link to comment
  • Moderators

Ouaip c'est des fonctions serveurs car ça agit sur la bdd qui n'est accessible que via le serveur.

Donc ouai il fallait faire un triggerServerEvent depuis le client pour ensuite exécuter une fonction côté serveur qui elle utilisera les fonctions d'enregistrements etc.

Mais pour que ta ressource soit autorisée à utiliser ces fonctions, il te faut la mettre dans le groupe Admin de l'ACL.

1 - Coupe le serveur

2 - Ouvre acl.xml qui se trouve dans "...\MTA San Andreas 1.x\server\mods\deathmatch" avec notepad++/Sublime text (évite de l'ouvrir avec wordpad, notepad ou même word).

3 - Rajoute ta ressource dans le groupe "Admin":

<acl> 
    [...] 
    <group name="Admin"> 
        <acl name="Moderator"></acl> 
        <acl name="SuperModerator"></acl> 
        [...] 
        <object name="resource.nomDeTaRessource"></object> 
    </group> 
    [...] 
</acl> 

4 - Sauvegardes et relances ton serveur avec ta ressource.

Cordialement,

Citizen

Link to comment

Merci, jédit ce post pour te dire si tout vas bien ou pas.

Eh bien merci, tu m'a encore une fois aidé, et mon Login Panel marche parfaitement, je n'ai plus qu'à lui faire un relooking et il seras parfait pour mon serveur :)

PS: j'ai fait le magnifique fail d'utiliser une balise "code" à la place d'une balise "lua", ce qui m'a fait mettre toutes le couleurs manuellement (en m'aidant de Notepad++ pour les couleurs en plus :D ), je referais peut-être un nouveau topic à propos d'un autre script, si je trouve pas la solution sur le wiki.

Link to comment
  • Moderators

Pas de soucis et bien joué pour les trigger client -> server et server -> client .

PS: j'ai fait le magnifique fail d'utiliser une balise "code" à la place d'une balise "lua", ce qui m'a fait mettre toutes le couleurs manuellement (en m'aidant de Notepad++ pour les couleurs en plus :D )

Pourquoi tu n'as pas édité ton message pour virer

[/b] et remettre [b][lua ][ /lua][/b] proprement ?  

Aussi tu peux faire [b][code= ][ /code][/b] genre:

[b][code=lua ][ /code][/b] qui est pareil à [b][lua ][ /lua][/b]

[b][code=xml ][ /code][/b]

(en virant les espaces que j'ai du rajouté pour éviter qu'ils fonctionnent dans ce post)

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...