Nach wie vor wird keine IP gespeichert, langsam nervt mich das !
/*======================================================================*\
|| #################################################################### ||
|| # Dieses Script wurde von Scene-Sector gecoded, es ist weder etwas # ||
|| # feriges noch etwas halbes. Alle hier vorkommenden Codeschnipsel # ||
|| # stammen aus dem Breadfish Forum und dienen lediglich der Übung. # ||
|| # # ||
|| # ---------------- PAWN CODE ARE ALL FREE TO USE! ---------------- # ||
|| # http://www.forum.sa-mp.de # ||
|| #################################################################### ||
\*======================================================================*/
/*
Merke :
- %s = String ( Varchar = Gemischter Text und / oder Namen von Spielern etc ) Bugged ? NE Bullshit
- %s = String aber es müssen Sonderzeichen escaped werden aka +#-.,
- %i = Integer ( Wichtig für Zahlen )
- %d = Könnte das gleiche wie mit dem Integer sein
Ocmd Hinweis :
- Da der Host nicht weiter existent ist, habe ich die AutoUpdat Funktion rausgenommen!
*/
/*======================================================================*\
|| #################################################################### ||
|| # Hier sind die includes definiert !!! # ||
|| #################################################################### ||
\*======================================================================*/
#include <a_mysql>
#include <a_samp>
#include <sscanf>
#include <ocmd>
/*======================================================================*\
| Placeholder |
\*======================================================================*/
//Dialog IDs (gegebenenfalls ändern, falls bereits belegt)
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
/*======================================================================*\
|| #################################################################### ||
|| # Hier sind die Farben definiert !!! # ||
|| #################################################################### ||
\*======================================================================*/
#define COLOR_WHITE 0xFFFFFF
#define COLOR_RED 0xFF0000
#define COLOR_YELLOW 0xFFFF00
#define COLOR_GREEN 0xFF00FF00
/*======================================================================*\
| Placeholder |
\*======================================================================*/
/*======================================================================*\
|| #################################################################### ||
|| # Hier sind die New's definiert !!! # ||
|| #################################################################### ||
\*======================================================================*/
#define MYSQL_HOST "127.0.0.1" //IP Adresse des MySQL Servers
#define MYSQL_USER "eliteund_mysql" //Benutzername der angemeldet wird
#define MYSQL_PASS "vvvvvvvvvvvvvvvvv..--##++" //Passwort des Benutzers
#define MYSQL_DBSE "eliteund_samp" //Name der Datenbank
/*======================================================================*\
| Placeholder |
\*======================================================================*/
enum pDataEnum
{
p_id,
bool:pLoggedIn,
pName[MAX_PLAYER_NAME],
pIP[16],
pAdmin,
pLevel,
pMoney,
pKills,
pDeaths
}
new PlayerInfo[MAX_PLAYERS][pDataEnum];
new handle; //Die Connection-Handle, über die wir später auf die Tabellen der Datenbank zugreifen
native WP_Hash(buffer[], len, const str[]);
main()
{
print("----------------------------------");
print(" Test Gamemode by Scene-Sector ");
print("----------------------------------");
print("//======================================================================\");
print("|| #################################################################### ||");
print("|| # Dieses Script wurde von Scene-Sector gecoded, es ist weder etwas # ||");
print("|| # feriges noch etwas halbes. Alle hier vorkommenden Codeschnipsel # ||");
print("|| # stammen aus dem Breadfish Forum und dienen lediglich der Übung. # ||");
print("|| # # ||");
print("|| # ---------------- PAWN CODE ARE ALL FREE TO USE! ---------------- # ||");
print("|| # http://www.forum.sa-mp.de # ||");
print("|| #################################################################### ||");
print("\\======================================================================//");
}
public OnGameModeInit()
{
handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DBSE, MYSQL_PASS);
SetGameModeText("Role Play mal anders!");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}
public OnGameModeExit()
{
mysql_close(handle);
return 1;
}
public OnPlayerRequestClass(playerid)
{
//Wenn der Spieler die Class-Selection betritt prüfe, ob er bereits eingeloggt ist
if(!PlayerInfo[playerid][pLoggedIn])
{
//Wenn nicht, dann prüfe ob der Spieler ein Konto hat
//Dazu wird ein Query gesendet und ein neues Callback aufgerufen
//%e steht für einen geprüften String (sollte anstatt %s in Queries verwendet werden)
new query[128];
mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);
//Das Query wird abgesendet und die playerid an OnUserCheck übergeben
mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
}
return 1;
}
public OnPlayerConnect(playerid)
{
PlayerInfo[playerid][p_id] = 0;
GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
GetPlayerIp(playerid, PlayerInfo[playerid][pIP], 16);
PlayerInfo[playerid][pLoggedIn] = false;
PlayerInfo[playerid][pAdmin] = 0;
PlayerInfo[playerid][pLevel] = 0;
PlayerInfo[playerid][pMoney] = 0;
PlayerInfo[playerid][pKills] = 0;
PlayerInfo[playerid][pDeaths] = 0;
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveUserStats(playerid);
return 1;
}
public OnPlayerSpawn(playerid)
{
new query[128];
mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s' WHERE name = '%e'", PlayerInfo[playerid][pIP], PlayerInfo[playerid][pName]);
mysql_pquery(handle, query);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(killerid != INVALID_PLAYER_ID)
{
PlayerInfo[killerid][pKills]++;
GivePlayerMoney(killerid, 10);
PlayerInfo[killerid][pMoney] += 10;
if(PlayerInfo[killerid][pKills] > 3)
{
PlayerInfo[killerid][pLevel] = 1;
}
}
PlayerInfo[playerid][pDeaths]++;
return 1;
}
public OnVehicleSpawn(vehicleid)
{
return 1;
}
public OnVehicleDeath(vehicleid, killerid)
{
return 1;
}
public OnPlayerText(playerid, text[])
{
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(IsPlayerAdmin(playerid))
{
SendClientMessage(playerid, -1, "Use /help to see avaible commands");
}
else
{
SendClientMessage(playerid, -1, "Noe, ich mag den Befehl jetzt aber nicht!");
}
return 1;
}
public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
return 1;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
return 1;
}
public OnPlayerEnterCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveCheckpoint(playerid)
{
return 1;
}
public OnPlayerEnterRaceCheckpoint(playerid)
{
return 1;
}
public OnPlayerLeaveRaceCheckpoint(playerid)
{
return 1;
}
public OnRconCommand(cmd[])
{
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
return 1;
}
public OnObjectMoved(objectid)
{
return 1;
}
public OnPlayerObjectMoved(playerid, objectid)
{
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
return 1;
}
public OnVehicleMod(playerid, vehicleid, componentid)
{
return 1;
}
public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
return 1;
}
public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
return 1;
}
public OnPlayerSelectedMenuRow(playerid, row)
{
return 1;
}
public OnPlayerExitedMenu(playerid)
{
return 1;
}
public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
return 1;
}
public OnRconLoginAttempt(ip[], password[], success)
{
return 1;
}
public OnPlayerUpdate(playerid)
{
return 1;
}
public OnPlayerStreamIn(playerid, forplayerid)
{
return 1;
}
public OnPlayerStreamOut(playerid, forplayerid)
{
return 1;
}
public OnVehicleStreamIn(vehicleid, forplayerid)
{
return 1;
}
public OnVehicleStreamOut(vehicleid, forplayerid)
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_REGISTER)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:\n{FF0000}Das Passwort muss Mindestens 5 Zeichen haben!", "Ok", "Abbrechen");
new query[256], buf[256], IP[16];
WP_Hash(buf, sizeof (buf),inputtext);
GetPlayerIp(playerid, IP, 16);
mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, IP) VALUES ('%e', '%e', '%s')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pIP], buf);
mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
return 1;
}
if(dialogid == DIALOG_LOGIN)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich mit deinem Passwort ein:\n{FF0000}Das Passwort muss Mindestens 5 Zeichen haben!", "Ok", "Abbrechen");
new query[256], buf[256];
WP_Hash(buf, sizeof (buf),inputtext);
mysql_format(handle, query, sizeof(query), "SELECT * FROM users WHERE name = '%e' AND password = '%e'", PlayerInfo[playerid][pName], buf);
mysql_pquery(handle, query, "OnUserLogin", "d", playerid);
return 1;
}
return 0;
}
public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
return 1;
}
stock MySQL_SetupConnection(ttl = 3)
{
print("[MySQL] Verbindungsaufbau...");
mysql_log(LOG_ALL); //<- Kommentar vor mysql_log entfernen um den MySQL Debug-Modus zu aktivieren
//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;
}
forward OnUserCheck(playerid);
public OnUserCheck(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
if(cache_get_row_count() == 0)
{
//Der Spieler konnte nicht gefunden werden, er muss sich registrieren
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Elite - Underground | Registrierung", "Bitte registriere Dich:", "Ok", "Abbrechen");
}
else
{
//Es existiert ein Ergebnis, das heißt der Spieler ist registriert und muss sich einloggen
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Elite - Underground | Anmeldung", "Bitte logge Dich ein:", "Ok", "Abbrechen");
}
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;
}
forward OnUserLogin(playerid);
public OnUserLogin(playerid)
{
//Query wurde ausgeführt und das Ergebnis im Cache gespeichert
if(cache_get_row_count() == 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][pIP] = cache_get_field_content( 0, "IP", PlayerInfo[playerid][pIP], handle, 16);
PlayerInfo[playerid][pAdmin] = cache_get_field_content_int(0, "Admin", handle);
PlayerInfo[playerid][pLevel] = cache_get_field_content_int(0, "level", 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][pLoggedIn] = true;
SendClientMessage(playerid, 0x00FF00FF, "[Konto] Eingeloggt.");
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
}
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[512];
mysql_format(handle, query, sizeof(query), "UPDATE users SET IP = '%s', Admin = '%d', level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
PlayerInfo[playerid][pIP], PlayerInfo[playerid][pAdmin], 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;
}