Jump to content

system du sauvegarde


Recommended Posts

bonjour les amis.

Pour commencer, veuillez m'excuser pour mon terrible francais :?

Bon, je voudrais savoir comment on fait pour sauvegarder les données d'un joueur ?? Et sa ce sauvegarde ou!???

Par exemple, si je veux qu'on sauvegarde le dernier lieu où le joueur été avant quil quitte le jeux et dès quil revient dans le jeux, ben il sera là ou il etait la derniere fois.

je connais le francais et l'anglais aussi, mais j'ai beaucoup de mal à comprendre l'anglais :oops: c'est pour sa que je n'arrive pas à comprendre ce qui est ecrit à wiki.

Certains mon dit qu'il est preférable de telecharger les resources que j'en ai besoin à la communauté, mais je veux faire tout mes scripts moi meme. je ne veux rien telecharger, suis determiner à les faire moi meme. Aider moi s'il vous plait :(

Mersi beaucoup et passer une bonne journée :)

Link to comment
  • Moderators

Tu ne peux pas te lancer dans un tel système sans avoir vu les bases:

https://wiki.multitheftauto.com/wiki/FR/ ... grammation

Ensuite, il te faudra utiliser les fonctions suivantes:

getPlayerAccount --pour récupérer le compte d'un joueur 
isGuestAccount --pour vérifier si un compte est un compte visiteur (s'il ne s'est pas login en utilisant /login, il doit d'abord faire un /register pour se créer un compte sur le serveur) 
setAccountData -- Pour enregistrer une donnée (3ère argument) sous un nom (2ème argument) pour un compte (1ère arguement) 
  
-- Ces données sont enregistrés dans le fichier internal.db (il me semble) dans le dossier deathmatch. Tu peux utiliser [url=http://sourceforge.net/projects/sqlitebrowser/]http://sourceforge.net/projects/sqlitebrowser/[/url] pour explorer la db. 
  
getAccountData -- Pour récupérer une donnée sous un nom (2ème argument) pour un compte (1er argument) 

Regarde l'exemple du wiki pour le setAccountData c'est EXACTEMENT ce que tu es censé faire, sauf que c'est pas l'argent que tu vas sauvegarder, mais 4 données: la position (X, Y, Z) et la rotation (RZ).

Donc tu devras faire 4 setAccountData dans le onPlayerQuit et 4 getAccountData dans le onPlayerLogin.

Il te faudra aussi les fonctions suivantes pour les positions/rotations:

getElementPosition --pour récupérer la position d'un élément (X, Y, Z) 
getElementRotation -- pour récupérer la rotation d'un élément (RX, RY, RZ) 
  
setElementPosition --pour téléporter un élément à une certaine position (X, Y, Z) 
setElementRotation --pour changer la rotation d'un élément (RX, RY, RZ) 

Pour le cas d'un joueur, on d'en fou des rotations RX et RY, pas besoin de les sauvegarder car ça sera toujours 0 (RX = pencher en avant ou en arrière, RY = pencher sur la gauche ou sur la droite).

Je te souhaite un bon apprentissage.

Cordialement,

Citizen

Link to comment

Non non non :D

j'ai deja commencer avec les bases, mais avec la version anglaise. mais je dois dire que c'était pas facile à comprendre quand meme. Toutefois j'essaye de faire mon mieux pour arriver à comprendre :)

Citizen, faut que j'ajoute aussi que j'aime vos explication :D C'est tres tres tres claire à comprendre.

moi aussi j'avais tres mal à comprendre les setElementData et getElementData, mais apres ce que j'ai lu sur cette article : viewtopic.php?f=128&t=66890

j'ai tres bien compris, et ouiiiiiiiiiii.. tous sa grace à vous :) Merci enormement trés cher ami.

Je vous dis merci pour tout, et je vais essayer de faire ce que vous m'avez dit :)

A tres bientot mon cher ami, et je vous souhaite une tres bonne journée. A+

Link to comment
  • Moderators

Bah merci du compliment, ça fait plaisir.

En effet je fais de mon mieux pour expliquer avec des mots simples tout en essayant de vous faire imaginer un schéma (quand c'est nécessaire).

On voit bien que tu es motivé, donc je ne me fais aucun souci pour toi.

Néanmoins, pour le setAccountData, je ne suis vraiment pas sur le fait que les données soit stockées dans le fichier internal.db.

Vu que t'as l'air d'avoir bien compris les set/get ElementData, il faut se dire que les set/get AccountData c'est exactement pareil mais que ça doit obligatoirement s’exécuter sur un compte et que en plus, ça ne se détruit pas lorsque le joueur quitte le serveur ou si le serveur redémarre.

Mais évidemment ces fonctions demandent plus de ressource (CPU) que les set/get ElementData.

Laisse nous savoir si tu as un problème avec ta sauvegarde de position ou si tu as réussi :wink:

Link to comment

voila voila :P

function enSortant () 
    local playeraccount = getPlayerAccount(source) 
    if (playeraccount) and not isGuestAccount(playeraccount) then  
            local playermoney = getPlayerMoney(source) 
            setAccountData(playeraccount, "argent.actual", playermoney)  
            local x,y,z = getElementPosition(source) 
            setAccountData(playeraccount, "x.position", x) 
            setAccountData(playeraccount, "y.position", y) 
            setAccountData(playeraccount, "z.position", z) 
    end 
end 
  
function enEntrant(_, playeraccount) 
     
    if (playeraccount) then 
            local playermoney = getAccountData(playeraccount, "argent.actual" ) 
            local x = getAccountData(playeraccount, "x.position" ) 
            local y = getAccountData(playeraccount, "y.position" ) 
            local z = getAccountData(playeraccount, "z.position" ) 
             
            if (playermoney) then 
                    setPlayerMoney(source, playermoney) 
                    setElementPosition(source,x,y,z) 
            end 
    end 
end 
  
addEventHandler("onPlayerQuit", getRootElement (), enSortant ) 
addEventHandler("onPlayerLogin",getRootElement (), enEntrant ) 

je l'ai testé et sa marche :) . par contre je voudrais vous posez quelque question :

1)dans la quatrieme line, pourquoi il a utilisé source, au lieu de playeraccount comme argument pour getPlayerMoney ??

2) pourquoi il a utilisé "_" dan le fonction enEntrant, à coté de playeraccount??

merci poto :D

Link to comment
  • Moderators
1)dans la quatrieme line, pourquoi il a utilisé source, au lieu de playeraccount comme argument pour getPlayerMoney ??

Enfait c'est très simple, si tu regardes la page wiki du getPlayerMoney (et aussi le nom de cette fonction) tu remarqueras qu'elle doit être utilisé sur un joueur et non pas sur le compte de ce joueur.

Il faut considérer le compte et le joueur comme deux choses complètement séparés.

Et sur la page du wiki de l'event "onPlayerQuit" on peut lire que la source de cet event est l'élément de type "player" (donc un joueur) qui vient de quitter. Il faut aussi considérer source comme une "variable cachée" envoyé dans la fonction à laquelle il est attaché.

Donc de façon logique, pour récupérer l'argent du joueur avec getPlayerMoney, on lui donne en paramètre source et non pas playeraccount.

2) pourquoi il a utilisé "_" dan le fonction enEntrant, à coté de playeraccount??

Alors ça c'est une astuce en Lua. En gros _ est une "variable poubelle", ça permet de dire ici:

"Je m'en fou du 1er paramètre que t'envois à ma fonction, par contre je veux bien le 2ème paramètre"

Et le deuxième paramètre est le compte du joueur sur lequel il vient de se loguer.

J'espère que c'est plus clair.

(PS: Je te demanderai par contre d'éviter les familiarité comme poto, mon ami etc. Tu peux me tutoyer sans aucun soucis, mais je ne suis pas réellement ton pote de développement ou ton pote irl.)

Citizen

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