• 04 Juillet 2025, 01:03:08


Auteur Sujet: [TUTO]Créer un /register /login  (Lu 5591 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Dark57

  • *
  • Criminel
  • Messages: 43
    • Voir le profil
[TUTO]Créer un /register /login
« le: 04 Avril 2010, 12:04:43 »
Bonjour,
après avoir compris le système je me suis dit que tous les débutants aurai besoin d'aide.
Vous avez besoin des includes "dini" et "dudb" qui sont téléchargeable sur ces liens :
Dudb
Dini

1.Infos à sauvegarder :

Nous commençons par créer une variable qui dit si le joueur est loggé :
nous l'appelons "IsPlayerLogged" et sa nous donne
Code: (pawn) [Sélectionner]
new IsPlayerLogged[MAX_PLAYERS];
Maintenant il faut mettre quels chose sauvegarder (score,argent,...) :
nous mettons tous dans un "enum" qui se nommera "PlayersInfo",
un exemple avec argent, score, armes et skin :
Code: (pawn) [Sélectionner]
enum PlayersInfo
{
Score, Argent, Skin, Arme1, Arme2, Arme3, Arme4, Arme5, Arme6, Arme7, Arme8, Arme9, Arme10, Arme11, Arme12,
Munitions1, Munitions2, Munitions3, Munitions4, Munitions5, Munitions6, Munitions7, Munitions8, Munitions9, Munitions10, Munitions11, Munitions12,
}

Pour les armes placer :
Code: (pawn) [Sélectionner]
new w1[MAX_PLAYERS],w2[MAX_PLAYERS],w3[MAX_PLAYERS],w4[MAX_PLAYERS],w5[MAX_PLAYERS],w6[MAX_PLAYERS],w7[MAX_PLAYERS],w8[MAX_PLAYERS],w9[MAX_PLAYERS],w10[MAX_PLAYERS],w11[MAX_PLAYERS],w12[MAX_PLAYERS];
new a1[MAX_PLAYERS],a2[MAX_PLAYERS],a3[MAX_PLAYERS],a4[MAX_PLAYERS],a5[MAX_PLAYERS],a6[MAX_PLAYERS],a7[MAX_PLAYERS],a8[MAX_PLAYERS],a9[MAX_PLAYERS],a10[MAX_PLAYERS],a11[MAX_PLAYERS],a12[MAX_PLAYERS];

Puis dans un Timer, pour récupérer les armes du joueur, placer :
Code: (pawn) [Sélectionner]
forward NomDuTimer();
public NomDuTimer()
{
 for(new i;i<MAX_PLAYERS;i++)
 {
 GetPlayerWeaponData(i,1,w1[i],a1[i]); &nbsp; //soit w1[i] = l'arme du slot 1, et a1[i] = munitions du slot 1 (slot 1 = armes blanches)
 GetPlayerWeaponData(i,2,w2[i],a2[i]); &nbsp; //slot 2
 GetPlayerWeaponData(i,3,w3[i],a3[i]); &nbsp; //slot 3
 GetPlayerWeaponData(i,4,w4[i],a4[i]); &nbsp; //etc...
 GetPlayerWeaponData(i,5,w5[i],a5[i]);
 GetPlayerWeaponData(i,6,w6[i],a6[i]);
 GetPlayerWeaponData(i,7,w7[i],a7[i]);
 GetPlayerWeaponData(i,8,w8[i],a8[i]);
 GetPlayerWeaponData(i,9,w9[i],a9[i]);
 GetPlayerWeaponData(i,10,w10[i],a10[i]);
 GetPlayerWeaponData(i,11,w11[i],a11[i]);
 GetPlayerWeaponData(i,12,w12[i],a12[i]);
 }
}

Sans oublier de le lancer dans le callback "OnGameModeInit"
Code: (pawn) [Sélectionner]
SetTimer("NomDuTimer",1000,true); &nbsp; //Une timer de 1sec
2./register :

Tout d'abord il faut mettre dans le callback "OnPlayerCommandText" :

Code: (pawn) [Sélectionner]
public OnPlayerCommandText(playerid, cmdtext[])
{
{ //ceci permet de ne pas infecter les autres commandes de votre GameMode
new cmd[256], idx, file[128], tmp[256], tmp2[256];
cmd = strtok(cmdtext, idx); &nbsp; //cmd = la commande
} //ceci permet de ne pas infecter les autres commandes de votre GameMode
return 0;
}

Passons à la commande /register <MotdePasse>, ce qui nous donne :

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/register", true) == 0)
{
new name[MAX_PLAYER_NAME]; //name est le nom du joueur, cela va permettre de rechercher si un compte existe à ce nom
tmp = strtok(cmdtext, idx); //ici on prend ce que l'on écrit après register
GetPlayerName(playerid, name, sizeof(name)); //on prend le nom du joueur
if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /register [MotdePasse]"); //si on n'écrit rien après register, changez la couleur si vous voulez, ici c'est blanc
format(file,sizeof(file),"User/%s.ini",name); //file = dans .../scriptfiles/User un fichier au nom du joueur .ini
if(!fexist(file)) //si ce fichier n'existe pas
{
dini_Create(file); &nbsp; //créer le fichier au nom du joueur en format .ini
dini_IntSet(file, "Password", udb_hash(tmp)); &nbsp; //dans le ficher .ini, ajout de la ligne "Password" (udb_hash(tmp) = le mot de passe après /register)
dini_IntSet(file,"Score", GetPlayerScore(playerid)); &nbsp; //on prend le score au moment de l'enregistrement
dini_IntSet(file,"Argent", GetPlayerMoney(playerid)); &nbsp; //pareil pour l'argent
dini_IntSet(file,"Skin", GetPlayerSkin(playerid)); &nbsp; //ici pour le skin
dini_IntSet(file,"Arme1", w1[playerid]); &nbsp; //arme et munitions slot 1
dini_IntSet(file,"Arme2", w2[playerid]); &nbsp; //slot 2
dini_IntSet(file,"Arme3", w3[playerid]); &nbsp; //slot 3
dini_IntSet(file,"Arme4", w4[playerid]); &nbsp; //etc...
dini_IntSet(file,"Arme5", w5[playerid]);
dini_IntSet(file,"Arme6", w6[playerid]);
dini_IntSet(file,"Arme7", w7[playerid]);
dini_IntSet(file,"Arme8", w8[playerid]);
dini_IntSet(file,"Arme9", w9[playerid]);
dini_IntSet(file,"Arme10", w10[playerid]);
dini_IntSet(file,"Arme11", w11[playerid]);
dini_IntSet(file,"Arme12", w12[playerid]);
dini_IntSet(file,"Munitions1", a1[playerid]);
dini_IntSet(file,"Munitions2", a2[playerid]);
dini_IntSet(file,"Munitions3", a3[playerid]);
dini_IntSet(file,"Munitions4", a4[playerid]);
dini_IntSet(file,"Munitions5", a5[playerid]);
dini_IntSet(file,"Munitions6", a6[playerid]);
dini_IntSet(file,"Munitions7", a7[playerid]);
dini_IntSet(file,"Munitions8", a8[playerid]);
dini_IntSet(file,"Munitions9", a9[playerid]);
dini_IntSet(file,"Munitions10", a10[playerid]);
dini_IntSet(file,"Munitions11", a11[playerid]);
dini_IntSet(file,"Munitions12", a12[playerid]);
SendClientMessage(playerid, 0x00FF00FF, "Le compte a bien été créé"); //changez la couleur si vous voulez, ici c'est vert
PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
GetPlayerName(playerid, name, sizeof(name)); &nbsp; //on prend le nom du joueur
printf("[Compte]%s C'est enregistré", name); &nbsp; //dans la fenêtre noir (sont nom m'échappe) un message s'affiche pour dire que le joueur s'est enregistré
}
else
{
SendClientMessage(playerid, 0xFF0000FF, "Ce compte existe déjà"); //changez la couleur si vous voulez, ici c'est rouge
PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
}
return 1;
}

3./login:

Je pense que la suite vous pouvez le faire seul, mais je vais quand même expliquer.
La commande /login <MotdePasse> :

Code: (pawn) [Sélectionner]
if(strcmp(cmd, "/login", true) == 0)
{
new PlayerName[24];
tmp = strtok(cmdtext, idx);
if(strlen(tmp) == 0) return SendClientMessage(playerid, 0xFFFFFFFF, "USAGE: /login [MotdePasse]"); //changez la couleur si vous voulez, ici c'est blanc
new name[MAX_PLAYER_NAME];
if(IsPlayerLogged[playerid] == 1) //si le joueur est loggé
{
SendClientMessage(playerid, 0xFF0000FF, "Tu est déjà loggé");
PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
return 1;
}
else
{
GetPlayerName(playerid, name, sizeof(name));
format(file,sizeof(file),"User/%s.ini",name);
if(fexist(file))
{
tmp2 = dini_Get(file, "Password"); //on prend le mot de passe enregistré
if(udb_hash(tmp) != strval(tmp2)) //si le mot de passe écrit n'est pas celui enregistré
{
SendClientMessage(playerid, 0xFF0000FF, "Mauvais mot de passe!"); //changez la couleur si vous voulez, ici c'est rouge
PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
printf("[Compte]%s C'est trompé de mot de passe", name);
}
else
{
IsPlayerLogged[playerid] = 1; //le joueur est maintenant loggé
SetPlayerMoney(playerid, dini_Int(file, "Argent")); &nbsp; //on donne l'argent enregistré par le joueur
SetPlayerScore(playerid, dini_Int(file, "Score")); &nbsp; //pareil pour le score
SetPlayerSkin(playerid, dini_Int(file, "Skin")); &nbsp; //le skin
ResetPlayerWeapons(playerid); &nbsp; //on efface les armes que le joueur avait avant de se loggé
GivePlayerWeapon(playerid,dini_Int(file, "Arme1"),dini_Int(file, "Munitions1")); &nbsp; //on lui donne l'arme et les munitions enregistré slot 1
GivePlayerWeapon(playerid,dini_Int(file, "Arme2"),dini_Int(file, "Munitions2")); &nbsp; //slot 2
GivePlayerWeapon(playerid,dini_Int(file, "Arme3"),dini_Int(file, "Munitions3")); &nbsp; //etc...
GivePlayerWeapon(playerid,dini_Int(file, "Arme4"),dini_Int(file, "Munitions4"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme5"),dini_Int(file, "Munitions5"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme6"),dini_Int(file, "Munitions6"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme7"),dini_Int(file, "Munitions7"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme8"),dini_Int(file, "Munitions8"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme9"),dini_Int(file, "Munitions9"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme10"),dini_Int(file, "Munitions10"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme11"),dini_Int(file, "Munitions11"));
GivePlayerWeapon(playerid,dini_Int(file, "Arme12"),dini_Int(file, "Munitions12"));
SendClientMessage(playerid, 0x00FF00FF, "Tu est maintenant loggé"); //changez la couleur si vous voulez, ici c'est vert
PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
printf("[Compte]%s C'est loggé", name);
}
}
}
return 1;
}


4.Sauvegarder une parti après déconnexion:

Voila maintenant sans doute le plus important, sauvegarder.
Pour sauvegarder il faut placer dans le callback "OnPlayerDisconnect" les informations à sauvegarder,
de la met façon que dans le /register :

Code: (pawn) [Sélectionner]
public OnPlayerDisconnect(playerid)
{
if(IsPlayerLogged[playerid] == 1) //si le joueur est loggé lors de sa déconnexion
{
new file[128];
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(file,sizeof(file),"User/%s.ini",file);
if(fexist(file))
{
dini_Set(file,"Score", GetPlayerScore(playerid));
dini_Set(file,"Argent", GetPlayerMoney(playerid));
dini_Set(file,"Skin", GetPlayerSkin(playerid));
dini_Set(file,"Arme1", w1[playerid]);
dini_Set(file,"Arme2", w2[playerid]);
dini_IntSet(file,"Arme3", w3[playerid]);
dini_IntSet(file,"Arme4", w4[playerid]);
dini_Set(file,"Arme5", w5[playerid]);
dini_Set(file,"Arme6", w6[playerid]);
dini_IntSet(file,"Arme7", w7[playerid]);
dini_Set(file,"Arme8", w8[playerid]);
dini_IntSet(file,"Arme9", w9[playerid]);
dini_Int(file,"Arme10", w10[playerid]);
dini_IntSet(file,"Arme11", w11[playerid]);
dini_Set(file,"Arme12", w12[playerid]);
dini_IntSet(file,"Munitions1", a1[playerid]);
dini_Int(file,"Munitions2", a2[playerid]);
dini_IntSet(file,"Munitions3", a3[playerid]);
dini_Set(file,"Munitions4", a4[playerid]);
dini_Set(file,"Munitions5", a5[playerid]);
dini_Int(file,"Munitions6", a6[playerid]);
dini_Int(file,"Munitions7", a7[playerid]);
dini_Set(file,"Munitions8", a8[playerid]);
dini_Set(file,"Munitions9", a9[playerid]);
dini_Set(file,"Munitions10", a10[playerid]);
dini_Set(file,"Munitions11", a11[playerid]);
dini_Set(file,"Munitions12", a12[playerid]);
}
IsPlayerLogged[playerid] = 0; //une fois déconnecté le joueur n'est plus loggé
}
return 1;
}



ATTENTION /!\ J'ai volontairement placé des erreurs dans le dernier script, pour que vous ne copiez pas bêtement!



Voila, merci d'avoir lu, désoler pour les faut d'orthographe et c'est un plaisir de vous aider ^^
« Modifié: 04 Avril 2010, 14:46:06 par Dark57 »

Hors ligne CarCrasher

  • *
  • Tueur en série
  • Messages: 144
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #1 le: 04 Avril 2010, 12:49:40 »
Wow bon tuto, sauf que à mon avis tu devrais plus expliquer à certains endroits, car certains petits malins vont rien faire et juste copier coller

Hors ligne Dark57

  • *
  • Criminel
  • Messages: 43
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #2 le: 04 Avril 2010, 13:22:13 »
J'ai expliqué, pas beaucoup ok, mais le copier coller est pas conseillé car les info ne sont pas forcement celle que l'on veut.
Sinon merci  :)

Hors ligne BuBuNo

  • Radio Guingamp - Bien plus qu'une radio !
  • *
  • Grand Banditisme
  • La radio bien plus qu'une passion !
  • Messages: 840
    • Voir le profil
    • Radio Guingamp - Bien plus qu'une radio !
Re : [TUTO]Créer un /register /login
« Réponse #3 le: 05 Avril 2010, 11:26:53 »
Salut,

Beau tuto mais bon un peu plus d'explication sur dini n'aurais pas fait de mal ;)
ıllıllı вυвυησ ıllıllı


Hors ligne Dark57

  • *
  • Criminel
  • Messages: 43
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #4 le: 05 Avril 2010, 18:49:20 »
je suis débutant dans ce genre de scripte donc j'évite de dire des chose quand je suis pas sur, je modifierais les tuto après plus d'entrainement  ;)

Hors ligne Alexendro_Torres

  • *
  • Tueur en série
  • Messages: 147
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #5 le: 05 Avril 2010, 19:33:55 »
gg

Hors ligne ptijean

  • *
  • Criminel
  • Messages: 31
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #6 le: 25 Avril 2010, 11:58:37 »
Bonjour,


Ce système m'intéressant beaucoup pour un mode Rp, pourrait tu m'expliquer un peu plus en détails où mettre chaque partie de ton code dans le Gm, expliquer un peu plus comment cela fonctionne...

Voilà j'espère que l'on pourras en savoir plus...


Merci beaucoup.

Bonne journée.

Hors ligne edouarddu01

  • *
  • Nouveau
  • Messages: 12
    • Voir le profil
    • LAIRP (en construction)
Re : [TUTO]Créer un /register /login
« Réponse #7 le: 18 Novembre 2011, 22:34:06 »
je suis désoler de déterrer se sujet mais je me suis inspirer de se tuto pour crée mon System de sauvegarde, tous fonctionne correctement mais à chaque redémarrage du serveur il redemande l'enregistrement mais il ne change rien au fichier de sauvegarde alors qu'il devrais demander le mot de passe pour la connexion. je peut faire parvenir le code si besoin.

merci

edouard

Hors ligne mehdi-jumper

  • *
  • Bandit
  • Messages: 311
    • Voir le profil
Re : [TUTO]Créer un /register /login
« Réponse #8 le: 18 Novembre 2011, 23:23:14 »
Tuto utile mais beaucoup de fautes de langages et d'orthographe...
Je vois pas l'interet de faire un tuto si le code que tu donne a la fin est bourré d'erreurs...

Sur ce, bye!

Hors ligne Gilux

  • *
  • Mafioso
  • GOOBY PLS
  • Messages: 2209
    • Voir le profil
Re : Re : [TUTO]Créer un /register /login
« Réponse #9 le: 18 Novembre 2011, 23:47:08 »
Je vois pas l'interet de faire un tuto si le code que tu donne a la fin est bourré d'erreurs...

Pour éviter que le code soit copié/collé sans rien n'y comprendre. Si le lecteur a compris le tuto, il sera capable de corriger les erreurs facilement. Au contraire, je trouve ça très bien et je pense que ça devrait être fait dans les scripts sur le Showroom (Inclure des erreurs et warnings faciles à résoudre) ;)

++