[Tutorial] Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool
#19

Ben, le code c'est le tient mdr. J'ai rien modifiй, j'ai utilisй les mкme trucs dans PHPMyAdmin....

PHP Code:
// This is a comment
// uncomment the line below if you want to write a filterscript

#include <a_samp>
#include <a_mysql>

new mysql;

#define FILTERSCRIPT
#define TABLE_JOUEURS "joueurs"

#define GetName(%0) JoueurInfo[%0][Pseudo] 
// Macro permettant de rйcupйrer le pseudo du joueur 

#define IsPlayerLogguer(%0) (JoueurInfo[%0][Logguer]) 
// Macro permettant de savoir si le joueur s'est logguй 

#define DIALOG_REGISTER 0 
#define DIALOG_CONNECTION 1 
// Les IDs des dialogs

enum Joueur_Informations 

    
IDSql// ID Mysql 
    
bool:Logguer// Si le joueur est logguй ou pas 
    
Pseudo[MAX_PLAYER_NAME+1], // Le pseudo du joueur 
    
Mdp[129], // Le mot de passe 
    
Adminlevel// Son niveau admin 
    
Skin// Son skin 
    
Tuer// Son nombre de kills 
    
Mort // Son nombre de morts 
}

new 
JoueurInfo[MAX_PLAYERS][Joueur_Informations];

native WP_Hash(buffer[], len, const str[]); // La native Whirlpool

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{

    
mysql mysql_connect("localhost""root""SAMP""root");

    print(
"\n--------------------------------------");
    print(
" Inscription/Connexion SQL");
    print(
"--------------------------------------\n");
    return 
1;
}

public 
OnFilterScriptExit()
{
    return 
mysql_close(mysql);
}

public 
OnPlayerRequestClass(playeridclassid// Nous l'utiliserons pour йtablir l'appel de la requкte threadйe 
{

    if(
IsPlayerLogguer(playerid)) return SpawnPlayer(playerid); // Au cas oщ le joueur aurait forcй son retour а la sйlection des classes et qu'il serait dйjа logguй 

    
SetSpawnInfo(playerid000000000000); // Obligatoire, sinon le joueur ne spawnera jamais 
    
TogglePlayerSpectating(playeridtrue); // Pour cacher les boutons en bas 

    
new req[128]; // Tableau dans lequel nous formaterons notre requкte SQL

    
mysql_format(mysqlreqsizeof(req), "SELECT * FROM `Joueurs` WHERE `Pseudo` = '%s' LIMIT 1"GetName(playerid)); 
    
// On sйlectionne tous les informations par rapport au pseudo du joueur dans notre table "Joueurs" 
    
mysql_tquery(mysqlreq"Verification""i"playerid); 
    
// On exйcute notre requкte et on ira chercher nos informations dans notre thread "Verification" 
    
return 1;
}

#endif

public OnPlayerConnect(playerid// Nous l'utiliserons pour rйcupйrer seulement le pseudo du joueur 

    return 
GetPlayerName(playeridJoueurInfo[playerid][Pseudo], MAX_PLAYER_NAME+1); 
}

public 
OnPlayerDisconnect(playeridreason

    new 
req[128]; // Le tableau dans lequel nous aurons notre requкte SQL 

    // On update les informations du joueur par rapport а son ID dans la base de donnйe 
    
mysql_format(mysqlreqsizeof(req), "\ 
                                            UPDATE `Joueurs` SET \ 
                                            AdminLevel = %d, \ 
                                            Skin = %d, \ 
                                            Tuer = %d, \ 
                                            Mort = %d \ 
                                            WHERE ID = %d"


                                            
JoueurInfo[playerid][Adminlevel], 
                                            
JoueurInfo[playerid][Skin], 
                                            
JoueurInfo[playerid][Tuer], 
                                            
JoueurInfo[playerid][Mort], 
                                            
JoueurInfo[playerid][IDSql]); 

    
mysql_tquery(mysqlreq); 
    
// On exйcute la requкte 

    
static  
        array[
Joueur_Informations]; 

    
JoueurInfo[playerid] = array; // On rй-initialise les informations du joueurs 

    
return 1


public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[]) // Nous l'utiliserons pour gйrer les dialogues lors que l'inscription et la connexion du joueur

    switch(
dialogid// On scanne la valeur de dialogid 
    

        case 
DIALOG_REGISTER// Si dialogid contient la valeur de notre macro DIALOG_REGISTER 
        

            if(!
response) return Kick(playerid); // Si le joueur a cliquй sur "Quitter" on le kick 
            
if(strlen(inputtext) &lt5) return ShowPlayerDialog(playeridDIALOG_REGISTERDIALOG_STYLE_INPUT"Enregistrement""Pour t'inscrire entre un mot de passe de plus de 4 caractиres.""Enregistrer""Quitter");  
            
// Si le mot de passe entrй est infйrieur а 5 caractиres 

            
new req[129]; // Tableau qui stockera le mot de passe hashй et la requкte SQL 

            
WP_Hash(reqsizeof(req), inputtext); // On hashe le mot de passe et on le stocke dans "req" 

            
mysql_format(mysqlreqsizeof(req), "INSERT INTO `Joueurs` (Pseudo, MotDePasse) VALUES ('%s', '%s')"GetName(playerid), req); 
            
// On formate la requкte SQL en y insйrant le pseudo et le mot de passe 

            
mysql_tquery(mysqlreq); 
            
// On exйcute la requкte sans appeler de fonctions publiques  

            
new str[MAX_PLAYER_NAME+9] = "Bonjour "

            
strcat(strGetName(playerid)); // "Bonjour {Pseudo}" 

            // Il s'est inscrit correctement, il doit maintenant se connecter 
            
return ShowPlayerDialog(playeridDIALOG_CONNECTIONDIALOG_STYLE_INPUTstr"Ton compte a bien йtй enregistrй, entre de nouveau ton mot de passe :""Connexion""Quitter"); 
        }

        case 
DIALOG_CONNECTION// Si dialogid contient la valeur de notre macro DIALOG_CONNECTION 
        

            if(!
response) return Kick(playerid); // Si le joueur a cliquй sur "Quitter" on le kick 
            
if(strlen(inputtext) &lt5// Si le mot de passe entrй est infйrieur а 5 caractиres 
            

                new 
str[MAX_PLAYER_NAME+9] = "Bonjour "

                
strcat(strGetName(playerid)); 

                return 
ShowPlayerDialog(playeridDIALOG_CONNECTIONDIALOG_STYLE_INPUTstr"Entre ton mot de passe :""Connexion""Quitter"); 
            } 

            
WP_Hash(JoueurInfo[playerid][Mdp], 129inputtext); // On hashe le mot de passe entrй et on le place dans notre table "Mdp" 

            
new req[128]; // Tableau dans lequel on formate notre requкte SQL 

            
mysql_format(mysqlreqsizeof(req), "SELECT * FROM `Joueurs` WHERE `Pseudo` = '%s'"GetName(playerid)); 
            
// On sйlectionne toutes les informations par rapport au pseudo du joueur 
            
return mysql_tquery(mysqlreq"Connection""i"playerid); 
            
// On Exйcute la requкte et on appelle la fonction publique "Connection" avec comme paramиtre l'id du joueur 
        
}
    }

    return 
1


//----------------------------------------------------------------------------------------------------------------------------- 

public OnPlayerDeath(playeridkilleridreason

    if(
killerid != INVALID_PLAYER_IDJoueurInfo[killerid][Tuer]++; // On incrйmente le nombre de tuer, si le killerid est une id valide 
    
JoueurInfo[playerid][Mort]++; // On incrйmente le nombre de morts de playerid 

    
return 1


//-------------------------------------------------------------------- 

public OnPlayerText(playeridtext[]) 

    if(!
IsPlayerLogguer(playerid)) return 0// Si le joueur presse F6 lors de l'inscription/connexion, зa l'empкchera d'envoyer un message (merci Vuki) 

    
return 1


//-------------------------------------------------------------------- 

public OnPlayerCommandText(playeridcmdtext[]) 

    if(!
IsPlayerLogguer(playerid)) return 1// Pareil que OnPlayerText 

    
if(strcmp(cmdtext"/skinrandom"true) == 0// Bref vous savez faire une commande avec strcmp.... 
    
{     
        do 
JoueurInfo[playerid][Skin] = random(300); // On appelle random pour qu'il sorte un nombre entre 0 et 299 qu'on stocke dans la variable "Skin" 
        
while(JoueurInfo[playerid][Skin] == 74); // Si celui-ci est йgal а 74, on rappelle le contenu de "do" 

        
return SetPlayerSkin(playeridJoueurInfo[playerid][Skin]); // On retourne la commande en appelant SetPlayerSkin 
    


    return 
0
}

forward Verification(playerid); 
public 
Verification(playerid

    if(
cache_get_row_count()) // Si le compte a йtй trouvй 
    

        new 
str[MAX_PLAYER_NAME+9] = "Bonjour "

        
strcat(strGetName(playerid)); // "Bonjour {Pseudo}" 
        // On lui affiche le dialogue de connexion 
        
return ShowPlayerDialog(playeridDIALOG_CONNECTIONDIALOG_STYLE_INPUTstr"Entre ton mot de passe :""Connexion""Quitter"); 
    } 

    
// Sinon on lui affiche le dialogue d'enregistrement 
    
return ShowPlayerDialog(playeridDIALOG_REGISTERDIALOG_STYLE_INPUT"Enregistrement""Pour t'inscrire entre un mot de passe de plus de 4 caractиres.""Enregistrer""Quitter"); 
}

forward Connection(playerid); 
public 
Connection(playerid

    new  
        
mdp[129]; // Tableau dans lequel on va stocker le mot de passe dans la base de donnйe 

    
cache_get_field_content(0"MotDePasse"mdp); // On rйcupиre me mot de passe et on le stocke dans la variable "mdp" 

    
if(strcmp(mdpJoueurInfo[playerid][Mdp], true) == 0// On vйrifie que les mots de passe sont identiques 
    

        
JoueurInfo[playerid][IDSql] = cache_get_field_content_int(0"ID"); 
        
JoueurInfo[playerid][Adminlevel] = cache_get_field_content_int(0"AdminLevel"); 
        
JoueurInfo[playerid][Skin] = cache_get_field_content_int(0"Skin"); 
        
JoueurInfo[playerid][Tuer] = cache_get_field_content_int(0"Tuer"); 
        
JoueurInfo[playerid][Mort] = cache_get_field_content_int(0"Mort"); 
        
JoueurInfo[playerid][Logguer] = true
        
// On rйcupиre toutes les informations 

        // On retourne la fonction en dйsactivant le mode spectateur, зa fera spawn le joueur 
        
return TogglePlayerSpectating(playeridfalse); 
    } 

    
// Si le mot de passe n'йtait pas bon, la suite sera exйcutйe     

    
new 
        
str[MAX_PLAYER_NAME+9] = "Bonjour "

    
strcat(strGetName(playerid)); // "Bonjour {Pseudo}"  

    // On averti le joueur dans le dialogue que le mot de passe n'est pas bon et on lui propose de retaper son mot de passe 
    
return ShowPlayerDialog(playeridDIALOG_CONNECTIONDIALOG_STYLE_INPUTstr"Mot de passe fail\n\nEntre ton mot de passe :""Connexion""Quitter"); 


C'est juste en FS, mais ca revient au mкme (d'ailleurs j'ai le mкme en Gamemode et c'est la mкme chose)

EDIT : du moins, j'ai enlevй les macros de connexion а la BDD et quelque modification d'indentation...
Reply


Messages In This Thread
Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:09
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Wallegi - 25.03.2015, 17:14
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:16
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Z3N0N - 25.03.2015, 17:20
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:22
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by LeonRP - 25.03.2015, 17:23
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by S4t3K - 25.03.2015, 17:24
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:30
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by BreakStore - 25.03.2015, 17:36
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Z3N0N - 25.03.2015, 17:46
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:48
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Z3N0N - 25.03.2015, 17:51
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 17:53
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Z3N0N - 25.03.2015, 17:58
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by S4t3K - 25.03.2015, 18:35
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 25.03.2015, 18:37
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by LordFalcon - 17.06.2015, 16:07
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 17.06.2015, 16:13
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by LordFalcon - 17.06.2015, 16:16
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by LordFalcon - 17.06.2015, 16:28
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by AlexBlack - 17.06.2015, 21:23
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 17.06.2015, 21:30
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by AlexBlack - 17.06.2015, 21:35
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by LordFalcon - 18.06.2015, 16:24
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 18.06.2015, 16:36
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Noliax8 - 20.06.2015, 11:36
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Dutheil - 20.06.2015, 12:09
Re: Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Noliax8 - 20.06.2015, 12:13
Re : Base d'un systиme d'enregistrement avec Mysql R39-3 & Whirlpool - by Erwan - 03.11.2015, 09:51

Forum Jump:


Users browsing this thread: 1 Guest(s)