Yo, kleine Sache die mir aufgefallen ist, kann aber auch sein das ich falsch liege (nicht getestet):
Wir haben eine Funktion um ein Account zu speichern:
stock SaveUserStats(playerid)
{
//Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht
if(!PlayerInfo[playerid][pLoggedIn]) return 1;
//Ansonsten speichere sie
new query[256];
mysql_format(handle, query, sizeof(query), "UPDATE users SET level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
forward OnUserLogin(playerid);
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
//Der Spieler hat ein falsches Passwort eingegeben
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
}
else
{
//Es existiert ein Ergebnis, das heißt der Spieler hat das richtige Passwort eingegeben
//Wir lesen nun die erste Zeile des Caches aus (ID 0)
cache_get_value_name_int(0, "id", PlayerInfo[playerid][p_id]);
cache_get_value_name_int(0, "level", PlayerInfo[playerid][pLevel]);
cache_get_value_name_int(0, "money", PlayerInfo[playerid][pMoney]);
cache_get_value_name_int(0, "kills", PlayerInfo[playerid][pKills]);
cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
forward OnUserRegister(playerid);
public OnUserRegister(playerid)
{
//Der Spieler wurde in die Datenbank eingetragen, es wird die id ausgelesen
PlayerInfo[playerid][p_id] = cache_insert_id();
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Registration erfolgreich.");
return 1;
}
Dort wird zuvor abgefragt ob der Spieler bereits eingeloggt ist.
Die Variable wird aber nur bei OnUserLogin auf true gesetzt, bei OnUserRegister wird sie nicht auf true gesetzt.
OnUserLogin wird aber nachdem registrieren nicht aufgerufen, also würde sich eigentlich der Account nicht speicher, richtig?
Habe ich etwas übersehen oder falsch verstanden? Wäre komisch wenn's wirklich nicht funktionieren würde und das bisher keinem aufgefallen ist..
@Jeffry