Da fehlt das query ja komplett vor dem Aufruf von OnUserCheck.
Mache es so wie in diesem Beispiel:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_tquery
OnPlayerDataLoaded entspricht deinem OnUserCheck.
Da fehlt das query ja komplett vor dem Aufruf von OnUserCheck.
Mache es so wie in diesem Beispiel:
http://wiki.sa-mp.com/wiki/MySQL/R33#mysql_tquery
OnPlayerDataLoaded entspricht deinem OnUserCheck.
Habe jetzt alles erstetzt bloß:
new query[128], pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, MAX_PLAYER_NAME);
mysql_format(dbhandle, query, sizeof(query), "SELECT * FROM `user` WHERE `username` = '%e' LIMIT 1", pname);
mysql_query(dbhandle, query, "OnPlayerDataLoaded", "d", playerid);//fehler:
error 035: argument type mismatch (argument 3)
Es muss
mysql_tquery(dbhandle, query, "OnUserCheck", "d", playerid);
heißen.
Es muss
mysql_tquery(dbhandle, query, "OnUserCheck", "d", playerid);
heißen.
also gut, das mit den Register geht nun , aber wenn ich auf Einloggen drücke , steht da dass ich kein Account habe , obwohl eins in der Datenbank ist!
Was sagt die MySQL Log?
mfg
[21:45:08] [WARNING] cache_get_row_count - no active cache
[21:45:10] [WARNING] cache_get_row_count - no active cache
[21:45:11] [WARNING] cache_get_row_count - no active cache
[21:45:12] [WARNING] cache_get_row_count - no active cache
[21:51:06] [WARNING] cache_get_row_count - no active cache
[21:51:09] [WARNING] cache_get_row_count - no active cache
[21:51:10] [WARNING] cache_get_row_count - no active cache
[21:51:18] [WARNING] cache_get_row_count - no active cache
[21:51:19] [WARNING] cache_get_row_count - no active cache
[21:51:20] [WARNING] cache_get_row_count - no active cache
[21:51:25] [WARNING] cache_get_row_count - no active cache
[21:51:25] [WARNING] cache_get_row_count - no active cache
[21:51:25] [WARNING] cache_get_row_count - no active cache
Hast du denn den Log Modus auf LOG_ALL? Wenn nein, mache das (mysql_log).
Poste zudem den aktuellen Code der zu diesen Warnungen und dem neuen Log dann gehört.
Loggen tust du so richtig machen.
mysql_log(LOG_ERROR|LOG_WARNING, LOG_TYPE_TEXT);
mfg
Habe ich unter OnGameModeInit gepackt, und es kommen nun: (Also ist gleich geblieben)
[17:50:12] [WARNING] cache_get_row_int - no active cache
[17:50:20] [WARNING] cache_get_row_count - no active cache
[17:50:23] [WARNING] cache_get_row_count - no active cache
Schau mal ob es neben dem server_log.txt noch einen MySQL Log gibt. Falls ja, steht das Zeug da drin.
Ja ist nur die mysql_log.txd und da steht genau dass gleiche.
//EDIT:
Das Login System geht nicht richtig. Also Register geht einwandfrei(glaube ich) aber wenn ich auf Login drücke, obwohl ich einen Account auf der Datenbank habe, steht da dass ich keinen habe.
Ok, ist auch egal. Poste bitte den Code so wie er jetzt ist, das bekommen wir auch ohne Log hin, so viel ist es ja nicht.
Ok, ist auch egal. Poste bitte den Code so wie er jetzt ist, das bekommen wir auch ohne Log hin, so viel ist es ja nicht.
Alles Klar! :
else if(clickedid == Textdraw3)
{
if(GetPVarInt(playerid,"eingeloggt") == 0)
{
if(OnPlayerDataLoaded(playerid))
{
SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
return 1;
}
else//Falls doch
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
return 1;
}
}
}
//___________________________________
public OnPlayerDataLoaded(playerid)
{
new NumRows = cache_num_rows();
//printf("There are %d players with the same name.", NumRows);
return 1;
}
//___________________________________
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);//Fragt ab ob das Passwort richtig ist
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')",name,passwort);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
SpawnPlayer(playerid);
}
else
{
//keine Eingabe
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das Angegebene Passwort war Falsch.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
}
}
else
{
return 1;
}
return 1;
}
//___________________________________
public OnPasswordResponse(playerid)
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
if(num_rows==1)
{
//passwort richtig
SpielerInfo[playerid][eingeloggt] = 1;
SpielerInfo[playerid][Level] = cache_get_field_content_int(0,"Level",dbhandle);//So liest man etwas aus der Datenbank!
SetPlayerScore(playerid,SpielerInfo[playerid][Level]);
SpielerInfo[playerid][u_id] = cache_get_field_content_int(0,"id",dbhandle);
SetPlayerMoney(playerid, cache_get_field_content_int(0,"Geldaufhand",dbhandle));
}
else
{
//passwort Falsch
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_INPUT,"Login","Das war das Falsche Passwort.\nBitte log dich jetzt mit dem richtigen Passwort ein:","Login","Abbrechen");
}
return 1;
}
Bitteschön
Auch hier musst du nach dem Prinzip der Cache-Nutzung vorgehen:
else if(clickedid == Textdraw3)
{
if(GetPVarInt(playerid,"eingeloggt") == 0)
{
new name[MAX_PLAYER_NAME],query[128];
GetPlayerName(playerid,name,sizeof(name));
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
mysql_function_query(dbhandle,query,true,"OnPlayerDataLoaded","i",playerid);
}
}
//___________________________________
public OnPlayerDataLoaded(playerid)
{
if(cache_num_rows() == 0)
{
SendClientMessage(playerid, Rot,"[FEHLER] {FFFFFF}Dieser Account ist nicht Regestriert! Um hier spielen zu können, musst du dich Regestrieren!");
return 1;
}
else //Falls doch
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login Vorgang","Herzlichen Willkommen zurück auf Incredible German Reallife!\nBitte gib nun dein Password ein!","Login","Abbrechen");
return 1;
}
//printf("There are %d players with the same name.", NumRows);
return 1;
}
Ja geht der Dialog aber sofort am anfang, ich will aber erst wenn er die Textdraw id 3 anklickt..
Dann poste bitte den Code von dem dazugehörigen Code, von dem Textdraw das du andrückst, und von dem Textdraw, das die Aktion eigentlich ausführen soll.
Dann poste bitte den Code von dem dazugehörigen Code, von dem Textdraw das du andrückst, und von dem Textdraw, das die Aktion eigentlich ausführen soll.
else if(clickedid == Textdraw3) //ist der Textdraw der aufgerufen werden soll...
{
if(GetPVarInt(playerid,"eingeloggt") == 0)
{
new name[MAX_PLAYER_NAME],query[128];
GetPlayerName(playerid,name,sizeof(name));
format(query,sizeof(query),"SELECT * FROM user WHERE username='%s'",name);
mysql_function_query(dbhandle,query,true,"OnPasswordResponse","i",playerid);
}
}
Und der Textdraw:
new Text:Textdraw3;
Textdraw3 = TextDrawCreate(552.904663, 67.257781, "~r~E~w~inloggen <");
TextDrawLetterSize(Textdraw3, 0.548995, 2.328000);
TextDrawTextSize(Textdraw3, 650.00, 20.00);
TextDrawAlignment(Textdraw3, 1);
TextDrawColor(Textdraw3, -1);
//TextDrawUseBox(Textdraw3, true);
TextDrawBoxColor(Textdraw3, 255);
TextDrawSetShadow(Textdraw3, 0);
TextDrawSetOutline(Textdraw3, 1);
TextDrawBackgroundColor(Textdraw3, 51);
TextDrawFont(Textdraw3, 0);
TextDrawSetProportional(Textdraw3, 1);
Du sollst den Code posten, von dem Textdraw das du andrückst und von dem das den Dialog eigentlich zeigen soll. Du hast nur letzteres gemacht.
Außerdem steht doch bei Textdraw3 einloggen, was also passt denn nicht?
Kannst du mal versuchen dich klarer auszudrücken?
Du sollst den Code posten, von dem Textdraw das du andrückst und von dem das den Dialog eigentlich zeigen soll. Du hast nur letzteres gemacht.
Außerdem steht doch bei Textdraw3 einloggen, was also passt denn nicht?
Kannst du mal versuchen dich klarer auszudrücken?
Ja sry, ich versuchs nochmal: Also, wenn ich online komme erscheint das "Login Dilaog" sofort , eigentlich sollte es erst erscheinen wenn ich auf "EINLOGGEN" Drücke....
Dann hast du bei OnPlayerConnect einen Code stehen, der "OnPlayerDataLoaded" aufruft. Das musst du dann weg machen.