Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* MySQL R7/8 Gamemode by Tommyx3
- *
- * Datenbank Struktur:
- DROP TABLE IF EXISTS `accounts`;
- CREATE TABLE `accounts` (
- `ID` int(11) NOT NULL AUTO_INCREMENT,
- `Name` varchar(24) NOT NULL,
- `Password` varchar(130) NOT NULL,
- `Score` int(11) NOT NULL,
- `Money` int(11) NOT NULL,
- PRIMARY KEY (`ID`)
- ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
- */
- #include <a_samp>
- #include <a_mysql>
- #define MYSQL_HOST "" // Host
- #define MYSQL_USER "" // Benutzername
- #define MYSQL_PASS "" // Passwort
- #define MYSQL_DATA "" // Datenbank
- #define DIALOG_REGISTER 0
- #define DIALOG_LOGIN 1
- native WP_Hash(buffer[], len, const str[]);
- enum pInfo
- {
- pID,
- pLoggedin,
- pScore,
- pMoney
- }
- new PlayerInfo[MAX_PLAYERS][pInfo];
- new WrongPassword[MAX_PLAYERS];
- main()
- {
- print("\n----------------------------------");
- print(" MySQL R7/8 Gamemode by Tommyx3");
- print("----------------------------------\n");
- }
- public OnGameModeInit()
- {
- DatabaseConnect();
- // Don't use these lines if it's a filterscript
- SetGameModeText("Blank Script");
- AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- return 1;
- }
- public OnGameModeExit()
- {
- return 1;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- ResetPlayerVariables(playerid);
- CheckPlayerAccount(playerid);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- if(PlayerInfo[playerid][pLoggedin])
- SavePlayerAccount(playerid);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- return 1;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
- {
- switch(dialogid)
- {
- case DIALOG_REGISTER:
- {
- if(!response) Kick(playerid);
- if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registrierung","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ... Du hast noch keinen Account, \num dich zu Registrieren gib bitte ein gewünschtes Passwort ein:","Registrieren","Abbrechen");
- new password[129];
- WP_Hash(password, 129, inputtext);
- CreatePlayerAccount(playerid, password);
- CheckPlayerAccount(playerid);
- }
- case DIALOG_LOGIN:
- {
- if(!response) Kick(playerid);
- if(strlen(inputtext) > 32 || strlen(inputtext) < 4) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login","Dein Passwort muss mindestens 4 Zeichen oder darf maximal 32 Zeichen enthalten!\n\nWillkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
- new password[129], query[128];
- WP_Hash(password, 129, inputtext);
- format(query, sizeof query, "SELECT * FROM `accounts` WHERE `ID` = '%d'", PlayerInfo[playerid][pID]);
- mysql_function_query(1, query, true, "OnPlayerAccountLoad", "is", playerid, password);
- }
- }
- return 1;
- }
- stock ResetPlayerVariables(playerid)
- {
- PlayerInfo[playerid][pID] = -1, PlayerInfo[playerid][pLoggedin] = 0,
- PlayerInfo[playerid][pScore] = 0, PlayerInfo[playerid][pMoney] = 0,
- WrongPassword[playerid] = 0;
- }
- stock DatabaseConnect() //By Maddin
- {
- mysql_debug(1);
- mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATA, MYSQL_PASS);
- if(mysql_ping() == 1)
- {
- print("[MySQL] Verbindung zur Datenbank wurde erfolgreich hergestellt!");
- return 1;
- }
- else
- {
- print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
- print("[MySQL] Es wird erneut versucht eine Verbindung zur Datenbank herzustellen!");
- mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DATA, MYSQL_PASS);
- if(mysql_ping() == 1)
- {
- print("[MySQL] Es konnte im 2 Versuch eine Verbindung hergestellt werden!");
- return 1;
- }
- else
- {
- print("[MySQL] Es konnte keine Verbindung zur Datenbank hergestellt werden!");
- print("[MySQL] Der Server wird nun beendet!");
- SendRconCommand("exit");
- return 1;
- }
- }
- }
- stock CheckPlayerAccount(playerid)
- {
- new query[128], name[MAX_PLAYER_NAME];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- mysql_real_escape_string(name, name);
- format(query, sizeof query, "SELECT `ID` FROM `accounts` WHERE `Name` = '%s'", name);
- mysql_function_query(1, query, true, "OnPlayerAccountCheck", "i", playerid);
- }
- forward OnPlayerAccountCheck(playerid);
- public OnPlayerAccountCheck(playerid)
- {
- if(!IsPlayerConnected(playerid)) return 1;
- new rows, fields, result[5];
- cache_get_data(rows, fields);
- if(rows)
- {
- cache_get_field_content(0, "ID", result);
- PlayerInfo[playerid][pID] = strval(result);
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD,"Login", "Willkommen auf ...\nDeine Accountdaten wurden gefunden, bitte gib dein Passwort ein:","Login","Abbrechen");
- }
- else
- {
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrierung", "Willkommen auf ...\nDu hast noch keinen Account, um dich zu Registrieren gib bitte ein gewünschtes Passwort ein:", "Registrieren", "Abbrechen");
- }
- return 1; //!!WICHTIG: Immer returnen damit der Cache geleert wird..!!
- }
- stock CreatePlayerAccount(playerid, password[])
- {
- new query[256], name[MAX_PLAYER_NAME], escpassword[129];
- GetPlayerName(playerid, name, MAX_PLAYER_NAME);
- mysql_real_escape_string(name, name);
- mysql_real_escape_string(password, escpassword);
- format(query, sizeof query, "INSERT INTO `accounts` (`Name`, `Password`, `Score`, `Money`) VALUES ('%s', '%s', '0', '0')", name, escpassword);
- mysql_function_query(1, query, false, "", "");
- }
- forward OnPlayerAccountLoad(playerid, password[]);
- public OnPlayerAccountLoad(playerid, password[])
- {
- if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
- new rows, fields, result[129];
- cache_get_data(rows, fields);
- if(!rows) Kick(playerid); //Falls doch kein Account vorhanden ist..
- cache_get_field_content(0, "Password", result);
- if(!strcmp(result, password, true))
- {
- cache_get_field_content(0, "Score", result); PlayerInfo[playerid][pScore] = strval(result);
- cache_get_field_content(0, "Money", result); PlayerInfo[playerid][pMoney] = strval(result);
- PlayerInfo[playerid][pLoggedin] = 1;
- SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
- ResetPlayerMoney(playerid);
- GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
- SpawnPlayer(playerid);
- }
- else
- {
- ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"Login","Das Angegebene Passwort stimmt nicht überein.\nBitte gib das richtige Passwort ein\n\nDu hast 3 Versuche sonst wirst du gekickt!:","Login","Abbrechen");
- WrongPassword[playerid] += 1;
- if(WrongPassword[playerid] == 3)
- {
- WrongPassword[playerid] = 0;
- Kick(playerid);
- }
- }
- return 1;
- }
- forward SavePlayerAccount(playerid);
- public SavePlayerAccount(playerid)
- {
- if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) return 1;
- new query[128];
- format(query, sizeof query, "UPDATE accounts SET Score=%d,Money=%d WHERE ID=%d", GetPlayerScore(playerid), GetPlayerMoney(playerid), PlayerInfo[playerid][pID]);
- mysql_function_query(1, query, false, "", "");
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement