Ja, also ich skripte seit heute morgen an einem MySQL Register- und Login-System rum und
habe seit einer Stunde das Problem, dass bei mir nicht mal der Registrations-Dialog aufgerufen
wird. Ich würde mich über eine schnelle Hilfe freuen.
Hier der Code:
//Der Enum
enum SpielerI
{
id,
level,
geld,
admin
}
new sInfo[MAX_PLAYERS][SpielerI];
//Wie bzw. wodurch die Verbindung hergestellt wird. Die MYSL_HOST, USER, DB und PASS Daten habe ich auch. Das funktioniert soweit bzw. es wird mit MySQL verbunden.
new handle;
forward UserCheck(playerid);
forward OnPasswordResponse(playerid);
public UserCheck(playerid)
{
new num_rows, num_fields;
cache_get_data(num_rows, num_fields, handle);
if(num_rows == 0)
{
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"[ACCOUNT]Registrierung","Lege dir einen Account in unsere Datenbank an, um auf dem Server zu spielen.\nDein gewuenschtes Passwort bitte:","Anlegen","Abbrechen");
}
else
{
//wenn acc. existiert
ShowPlayerDialog(playerid,DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"[ACCOUNT]Anmelden","Schoen, das du uns wieder besuchst. Gebe bitte das Passwort an, was du bei der Registration angegeben hast.\nVergessen? Melde dies im Forum.","Anlegen","Abbrechen");
}
return 1;
}
public OnPasswordResponse(playerid)
{
new num_fields, num_rows;
cache_get_data(num_rows, num_fields, handle);
if(num_fields==1)
{
LoadAccount(playerid);
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"[ACCOUNT]Anmelden","Das eingegbene Passwort war falsch. Versuche es erneut.\nPasswort vergessen? Erstelle ein Antrag im Forum.","Anlegen","Abbrechen");
}
return 1;
}
public OnPlayerConnect(playerid)
{
//Register
new query[128], name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(query,sizeof(query),"SELECT id FROM user WHERE username='%s'",name);
mysql_tquery(handle, query, "OnUserCheck","i", playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveAccount(playerid);
ResetAccount(playerid);
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_LOGIN)
{
new name[MAX_PLAYER_NAME], query[128], passw[25];
GetPlayerName(playerid, name, sizeof(name));
if(!response)
{
Kick(playerid);
}
if(strlen(inputtext) > 0)
{
mysql_escape_string(inputtext, passw, handle, sizeof(passw));
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND pass='%s'",name, passw);
mysql_tquery(handle, query, "OnPasswordResponse", "i", playerid);
}
return 1;
}
if(dialogid == DIALOG_REGISTER)
{
new query[128], passw[25], name[MAX_PLAYER_NAME], regfail[128];
GetPlayerName(playerid, name, sizeof(name));
if(!response)
{
Kick(playerid);
}
if(strlen(inputtext) <= 6)
{
format(regfail,sizeof(regfail),"Das Passwort muss min. 6 Zeichen enthalten. Passwort-Tipp: Nutze < Aa-Zz, 0-9, !-? > Zeichen in deinem Passwort.");
ShowPlayerDialog(playerid,DIALOG_REGISTER,DIALOG_STYLE_PASSWORD,"[ACCOUNT]Registrierung",regfail,"Anlegen","Abbrechen");
}
else
{
mysql_escape_string(inputtext, passw, handle, sizeof(passw));
format(query,sizeof(query),"INSERT INTO user (username, pass) VALUES ('%s','%s')",name, passw);
mysql_tquery(handle, query, "", "");
}
return 1;
}
return 1;
}
//Und die Stocks
stock LoadAccount(playerid)
{
//Level
GetPlayerScore(cache_get_field_content_int(0,"level", handle));
//Geld
GetPlayerScore(cache_get_field_content_int(0,"geld", handle));
//Admin-Level
sInfo[playerid][admin] = cache_get_field_content_int(0,"admin", handle);
//ID
sInfo[playerid][id] = cache_get_field_content_int(0,"id", handle);
SpawnPlayer(playerid);
return 1;
}
stock SaveAccount(playerid)
{
new query[128];
format(query,sizeof(query),"UPDATE user SET level='%i', geld='%i', admin='%i' WHERE id='%i'",sInfo[playerid][level],sInfo[playerid][geld], sInfo[playerid][admin], sInfo[playerid][id]);
mysql_tquery(handle,query,"","");
return 1;
}
stock ResetAccount(playerid)
{
for(new i; SpielerI:i < SpielerI; i++)
{
sInfo[playerid][SpielerI:i] = 0;
}
return 1;
}