Code
public OnPlayerConnect(playerid)
{
for (new i=0; i < MAX_PLAYERS; i++)
{
SetPlayerMarkerForPlayer(i, playerid, 0xFFFFFF00);
}
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][pCopSkill] = 0;
PlayerInfo[playerid][pCivSkill] = 0;
PlayerInfo[playerid][pCivXP] = 0;
PlayerInfo[playerid][pCopXP] = 0;
PlayerInfo[playerid][pLastTeam] = 0;
PlayerInfo[playerid][pLastSkin] = 0;
PlayerInfo[playerid][pColor] = 0;
PlayerInfo[playerid][pBank] = 0;
PlayerInfo[playerid][pAdminLevel] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
return 1;
}
Alles anzeigen
Code
if(dialogid == DIALOG_REGISTER)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", "Bitte registriere Dich:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird der Spieler in der Datenbank angelegt
//Als Verschlüsselung für das Passwort wird MD5 verwendet
new query[256];
mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserRegister übergeben
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
//Spieler hat Abbrechen gewählt
if(!response) return Kick(playerid);
//Wenn der Spieler kein, oder ein zu kurzes, Passwort eingegeben hat
if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:\n{FF0000}Mindestens 3 Zeichen!", "Ok", "Abbrechen");
//Wenn alles passt wird die Datenbank ausgelesen
new query[256];
mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = MD5('%e')", PlayerInfo[playerid][pName], inputtext);
//Das Query wird abgesendet und die playerid an OnUserLogin übergeben
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
}
Alles anzeigen
Code
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
mysql_log(LOG_ALL); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS, 3306, true);
//Prüfen und gegebenenfalls wiederholen
if(mysql_errno(handle) != 0)
{
//Fehler im Verbindungsaufbau, prüfe ob ein weiterer Versuch gestartet werden soll
if(ttl > 1)
{
//Versuche erneut eine Verbindung aufzubauen
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
printf("[MySQL] Starte neuen Verbindungsversuch (TTL: %d).", ttl-1);
return MySQL_SetupConnection(ttl-1);
}
else
{
//Abbrechen und Server schließen
print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden.");
print("[MySQL] Bitte prüfen Sie die Verbindungsdaten.");
print("[MySQL] Der Server wird heruntergefahren.");
return SendRconCommand("exit");
}
}
printf("[MySQL] Die Verbindung zur Datenbank wurde erfolgreich hergestellt! Handle: %d", _:handle);
return 1;
}
Alles anzeigen
Code
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, 0x07A9FFFF, "Herzlich Willkommen");
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung", "Bitte logge Dich ein:", "Ok", "Abbrechen");
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)
PlayerInfo[playerid][p_id] = cache_get_field_content_int(0, "id", handle);
PlayerInfo[playerid][pMoney] = cache_get_field_content_int(0, "money", handle);
PlayerInfo[playerid][pKills] = cache_get_field_content_int(0, "kills", handle);
PlayerInfo[playerid][pDeaths] = cache_get_field_content_int(0, "deaths", handle);
PlayerInfo[playerid][pCivSkill] = cache_get_field_content_int(0, "civ_skill", handle);
PlayerInfo[playerid][pCopSkill] = cache_get_field_content_int(0, "cop_skill", handle);
PlayerInfo[playerid][pCivXP] = cache_get_field_content_int(0, "civ_xp", handle);
PlayerInfo[playerid][pCopXP] = cache_get_field_content_int(0, "cop_xp", handle);
PlayerInfo[playerid][pLastTeam] = cache_get_field_content_int(0, "last_team", handle);
PlayerInfo[playerid][pLastSkin] = cache_get_field_content_int(0, "last_skin", handle);
PlayerInfo[playerid][pAdminLevel] = cache_get_field_content_int(0, "admin_level", handle);
PlayerInfo[playerid][pBank] = cache_get_field_content_int(0, "bank_money", handle);
PlayerInfo[playerid][pLoggedIn] = true;
SendClientMessage(playerid, 0x07A9FFFF, "[Willkommen zurück]");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
SetPlayerScore(playerid, PlayerInfo[playerid][pLevel]);
if(PlayerInfo[playerid][pLastTeam] == 0)
{
ShowPlayerDialog(playerid, DIALOG_PICK_TEAM, 0, "Team Auswählen", "Wähle nun dein Team aus in dem du spielen willst.", "Cops", "Robbers");
}
}
return 1;
}
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 money = '%d', kills = '%d', deaths = '%d', cop_skill = '%d', civ_skill = '%d', civ_xp = '%d', cop_xp = '%d', last_skin = '%d', last_team = '%d', bank_money = '%d', admin_level = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pMoney], PlayerInfo[playerid][pKills], PlayerInfo[playerid][pDeaths], PlayerInfo[playerid][pCopSkill], PlayerInfo[playerid][pCivSkill], PlayerInfo[playerid][pCopXP], PlayerInfo[playerid][pCivXP],
PlayerInfo[playerid][pLastSkin], PlayerInfo[playerid][pLastTeam], PlayerInfo[playerid][pBank], PlayerInfo[playerid][pAdminLevel], PlayerInfo[playerid][p_id]);
//Das Query wird abgesendet
mysql_pquery(handle, query);
return 1;
}
Alles anzeigen