Hey. Ich scripte derzeit nach den Tutorials von MrMonat. Basierend alles auf MySQL.
Ich registriere mich und nehme das Passwort 123456789. Wenn ich nach dem reconnecten im Login Dialog nichts eingebe, ist es falsch so wie es sein soll.
Wenn ich aber sag ich mal irgendwas eingebe zum Beispiel 2 dann werde ich eingeloggt, wieso? Jeffry:
#define DIALOG_LOGIN 3 //Login Dialog
#define DIALOG_REGISTER 2 //Register Dialog
forward OnUserCheck(playerid);
forward OnPasswordReponse(playerid);
//Enums & Enum's
enum playerInfo{
eingeloggt,
level
}
//Globale Variablen
new dbhandle; //<--- Connectionhandle (MYSQL)
new sInfo[MAX_PLAYERS][playerInfo]; //Spieler Info (sInfo)
public OnGameModeInit()
{
SetGameModeText("German Reallife"); //Mode by SAMP
AddPlayerClass(3, 377.3560,-2047.6115,7.8301,13.8659, 0, 0, 0, 0, 0, 0); //Spawn
//MySQL verbindung herstellen
dbhandle = mysql_connect(db_host,db_user,db_db,db_pass);
print("MySQL Verbindung wird hergestellt.");
return 1;
}
public OnGameModeExit()
{
mysql_close(dbhandle); //Verbindung schließen
return 1;
}
public OnUserCheck(playerid)
{
new num_rows,num_fields;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==0)
{
//registrierung
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Gib bitte dein gewünschtes Passwort an:","Los","Abbrechen");
}
else
{
//Login
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
}
//print("OnUserCheck wurde aufgerufen.");
return 1;
}
public OnPlayerConnect(playerid)
{
//Login/Register
new name[MAX_PLAYER_NAME],query[127];
GetPlayerName(playerid,name,sizeof(name));
format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
mysql_function_query(dbhandle,query,true,"OnUserCheck","i",playerid);
return 1;
}
public OnPasswordReponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
//Passwort richtig
sInfo[playerid][eingeloggt] = 1;
sInfo[playerid][level] = cache_get_field_content_int(0,"level",dbhandle);
printf("playerid: %i hat das Level: %i",playerid,sInfo[playerid][level]);
}
else
{
//Passwort falsch
SendClientMessage(playerid,COLOR_RED,"Du hast ein falsches Passwort eingegeben.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid==DIALOG_LOGIN)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>0)
{
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND password='%s'",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
else
{
//Keine Eingabe
SendClientMessage(playerid,COLOR_RED,"Gib bitte dein Passwort ein.");
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Gib bitte dein Passwort ein:","Okay","Abbrechen");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Du hast den Vorgang abgebrochen.");
Kick(playerid);
}
return 1;
}
if(dialogid==DIALOG_REGISTER)
{
if(response)
{
new name[MAX_PLAYER_NAME],query[128],passwort[35];
GetPlayerName(playerid,name,sizeof(name));
if(strlen(inputtext)>3)
{
//Registrierungsfunktion
mysql_escape_string(inputtext,passwort,dbhandle);
format(query,sizeof(query),"INSERT INTO user (username,password) VALUES ('%s','%s') ",name,passwort);
mysql_function_query(dbhandle,query,false,"","");
}
else
{
//Kleiner als 4
SendClientMessage(playerid,COLOR_RED,"Das Passwort muss mindestens 4 Zeichen haben.");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_INPUT,"Registration","Gib bitte dein gewünschtes Passwort an:","Los","Abbrechen");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Du hast den Vorgang abgebrochen.");
Kick(playerid);
}
return 1;
}
return 1;
}