Guten Morgen,
Ich fange derzeit das Skripten an, und habe dort direkt mal eine Anfrage.
Und zwar möchte ich gerne das direkt bei der Registrierung das Level + Adminlevel + Führerschein + Geld gespeichert wird.
Meine Codezeilen sehen derzeit so aus:
OnPlayerConnect:
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] = 0;
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pLevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pKills] = 0;
PlayerInfo[playerid][pDeaths] = 0;
PlayerInfo[playerid][pFuehrerschein] = 0;
PlayerInfo[playerid][pAdmin] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
return 1;
}
Da sind ja die Werte beim ersten Connect auf 0 Gestellt.
OnDialogResponse:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_REGISTER)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password,level,money,fuehrerschein,admin) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
PlayerInfo[playerid][pMoney] = 0;
GivePlayerMoney(playerid, 2500);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
}
return 0;
}
Soweit ich weiß, wird durch diesen Befehl der Spieler in der Datenbank angelegt.
mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password,level,money,fuehrerschein,admin) VALUES ('%e', MD5('%e'),1,2500)", PlayerInfo[playerid][pName], inputtext);
Dort habe ich dann meine weiteren Einträge für die Datenbank gemacht siehe: INSERT INTO users(name,password,level,money,fuehrerschein,admin
Und hier ist mein Public für OnPlayerLogin:
public OnUserLogin(playerid)
{
new rows;
cache_get_row_count(rows);
if(rows == 0)
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Falsches Passwort!", "Ok", "Abbrechen");
}
else
{
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]);
cache_get_value_name_int(0, "Fuehrerschein", PlayerInfo[playerid][pFuehrerschein]);
cache_get_value_name_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
return 1;
}
Und so sieht mein Public zum Speichern aus:
s
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', fuehrerschein = '%d', admin = '%d', WHERE id = '%d'",
PlayerInfo[playerid][pLevel], PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pFuehrerschein],PlayerInfo[playerid][pAdmin],PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Ist dies so richtig? Also das die Daten auch so in der Datenbank gespeichert werden?