17.06.2015, 16:16
Ben, le code c'est le tient mdr. J'ai rien modifiй, j'ai utilisй les mкme trucs dans PHPMyAdmin....
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...
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(playerid, classid) // 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(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); // Obligatoire, sinon le joueur ne spawnera jamais
TogglePlayerSpectating(playerid, true); // Pour cacher les boutons en bas
new req[128]; // Tableau dans lequel nous formaterons notre requкte SQL
mysql_format(mysql, req, sizeof(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(mysql, req, "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(playerid, JoueurInfo[playerid][Pseudo], MAX_PLAYER_NAME+1);
}
public OnPlayerDisconnect(playerid, reason)
{
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(mysql, req, sizeof(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(mysql, req);
// On exйcute la requкte
static
array[Joueur_Informations];
JoueurInfo[playerid] = array; // On rй-initialise les informations du joueurs
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) // 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) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_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(req, sizeof(req), inputtext); // On hashe le mot de passe et on le stocke dans "req"
mysql_format(mysql, req, sizeof(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(mysql, req);
// On exйcute la requкte sans appeler de fonctions publiques
new str[MAX_PLAYER_NAME+9] = "Bonjour ";
strcat(str, GetName(playerid)); // "Bonjour {Pseudo}"
// Il s'est inscrit correctement, il doit maintenant se connecter
return ShowPlayerDialog(playerid, DIALOG_CONNECTION, DIALOG_STYLE_INPUT, str, "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) < 5) // Si le mot de passe entrй est infйrieur а 5 caractиres
{
new str[MAX_PLAYER_NAME+9] = "Bonjour ";
strcat(str, GetName(playerid));
return ShowPlayerDialog(playerid, DIALOG_CONNECTION, DIALOG_STYLE_INPUT, str, "Entre ton mot de passe :", "Connexion", "Quitter");
}
WP_Hash(JoueurInfo[playerid][Mdp], 129, inputtext); // 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(mysql, req, sizeof(req), "SELECT * FROM `Joueurs` WHERE `Pseudo` = '%s'", GetName(playerid));
// On sйlectionne toutes les informations par rapport au pseudo du joueur
return mysql_tquery(mysql, req, "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(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID) JoueurInfo[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(playerid, text[])
{
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(playerid, cmdtext[])
{
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(playerid, JoueurInfo[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(str, GetName(playerid)); // "Bonjour {Pseudo}"
// On lui affiche le dialogue de connexion
return ShowPlayerDialog(playerid, DIALOG_CONNECTION, DIALOG_STYLE_INPUT, str, "Entre ton mot de passe :", "Connexion", "Quitter");
}
// Sinon on lui affiche le dialogue d'enregistrement
return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_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(mdp, JoueurInfo[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(playerid, false);
}
// Si le mot de passe n'йtait pas bon, la suite sera exйcutйe
new
str[MAX_PLAYER_NAME+9] = "Bonjour ";
strcat(str, GetName(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(playerid, DIALOG_CONNECTION, DIALOG_STYLE_INPUT, str, "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...