Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Praca przykladowa przygotowana przez AXV dnia 2012-27-09 21:22
- *
- * Zleceniodawca: Kopciu
- * Autor: AXV
- *
- * @edit 2012-12-27 20:31 - Wystawiono prace jako skrypt na serwis Pawno.PL
- *
- * Wersja Open source.
- * (C) 2012, AXV. All rights reserved.
- */
- #define FILTERSCRIPT
- #include a_samp
- #if MAX_PLAYERS == 500
- #undef MAX_PLAYERS
- #define MAX_PLAYERS (5) // sloty
- #endif
- // biblioteki
- #include md5
- #include sscanf // Y_Less 2.8.1
- #include mysql // StrickenKid 2.1.1
- #define SQL_HOST "localhost"
- #define SQL_USR "user"
- #define SQL_PSWRD "password"
- #define SQL_DB "datebase"
- #define DIALOG_INFORMATION (0)
- #define DIALOG_LOGIN (1)
- #define DIALOG_REGISTER (2)
- #define clientMsg(%1,%2,%3) SendClientMessage(%1, %2, %3)
- #define hidePlayerDialog(%1) ShowPlayerDialog(%1, -1, 0, "", "", "", "")
- #define MAX_LOGIN_ATTEMPTS (3)
- // zmienne
- enum E_PLAYER_DATA {
- bool:loggedIn,
- score,
- loginAttempt
- };
- new
- playerData[MAX_PLAYERS][E_PLAYER_DATA],
- MySQL:hMYSQL
- ;
- // funkcje publiczne
- public OnFilterScriptInit() {
- hMYSQL = mysql_init(1);
- new mHandle = mysql_connect(SQL_HOST, SQL_USR, SQL_PSWRD, SQL_DB, hMYSQL, 1);
- if (mHandle) {
- mysql_query("CREATE TABLE IF NOT EXISTS players ( \
- `id` INT(11) NOT NULL AUTO_INCREMENT, \
- `nick` VARCHAR(24) NOT NULL, \
- `haslo` VARCHAR(32) NOT NULL, \
- `score` INT(11) NOT NULL DEFAULT '0', \
- PRIMARY KEY `id` (`id`), \
- KEY `nick` (`nick`) \
- ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;"), printf("połączono z bazą danych!");
- } else printf("nie można nawiązać połączania z bazą!"), SendRconCommand("exit");
- return 1;
- }
- public OnFilterScriptExit() mysql_close(hMYSQL);
- public OnPlayerConnect(playerid) {
- playerData[playerid][loggedIn] = false;
- playerData[playerid][loginAttempt] = 0;
- playerData[playerid][score] = 0;
- new buf[127];
- if (accountPlayerExists(playerid)) {
- format(buf, sizeof(buf), "Witaj, %s!\nTwoje konto jest zarejestrowane.\nProszę wpisać hasło w poniższe okno, a następnie kliknąć przycisk 'ZALOGUJ'", getPlayerName(playerid));
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", buf, "Zaloguj", "Opuść");
- } else {
- format(buf, sizeof(buf), "Witaj, %s!\nTwoje konto nie jest zarejestrowane.\nProszę wpisać hasło w poniższe okno, a następnie kliknąć przycisk 'REJESTRUJ'", getPlayerName(playerid));
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", buf, "Rejestruj", "");
- }
- }
- public OnPlayerDisconnect(playerid, reason) {
- if (playerData[playerid][loggedIn]) {
- new
- buf[127]
- ;
- format(buf, sizeof(buf), "UPDATE players SET score = %d WHERE nick = '%s'", playerData[playerid][score], getPlayerName(playerid));
- mysql_query(buf);
- }
- }
- public OnPlayerRequestClass(playerid, classid) { }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
- switch (dialogid) {
- case DIALOG_INFORMATION: return 1;
- case DIALOG_LOGIN: {
- if (!response) return clientMsg(playerid, -1, "Anulowałeś logowanie, papa!"), hidePlayerDialog(playerid), Kick(playerid);
- if (!passwordCorrect(inputtext)) {
- playerData[playerid][loginAttempt]++;
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", "Twoje konto jest zarejstrowane.\nPowtórz hasło, ponieważ wprowadzone jest nieprawidłowe.", "Zaloguj", "Opuść");
- return clientMsg(playerid, -1, "Nieprawidlowe haslo, sprobuj ponownie.");
- }
- loginPlayer(playerid, inputtext);
- }
- case DIALOG_REGISTER: {
- if (!response) return 1; // secure
- new buf[127];
- if (!passwordCorrect(inputtext)) {
- format(buf, sizeof(buf), "Witaj, %s!\nTwoje konto nie jest zarejestrowane.\nProszę wpisać hasło w poniższe okno, a następnie kliknąć przycisk 'REJESTRUJ'", getPlayerName(playerid));
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Rejestracja", buf, "Rejestruj", "");
- return clientMsg(playerid, -1, "Hasło może się składać tylko z liter i cyfr.");
- }
- format(buf, sizeof(buf), "INSERT INTO players (nick, haslo) VALUES ('%s', '%s')", getPlayerName(playerid), MD5_Hash(passHash(inputtext, getPlayerName(playerid))));
- if (mysql_query(buf) || mysql_affected_rows() < 1) return clientMsg(playerid, -1, "Wystapil blad podczas wysylania formularza. Sprobuj ponownie."), Kick(playerid);
- return 1;
- }
- }
- return 1;
- }
- // funkcje
- passHash(const pass[], const name[]) { // solanka ;)
- new hash[32];
- format(hash, sizeof(hash), "%sx6m5K%s", pass, name);
- return hash;
- }
- loadPlayerData(playerid) {
- playerData[playerid][score] = strval(getPlayerAccountData(playerid, "score"));
- }
- getPlayerAccountData(playerid, const data[]) {
- new
- buf[127],
- result[80]
- ;
- format(buf, sizeof(buf), "SELECT %s FROM players WHERE nick = '%s'", data, getPlayerName(playerid));
- if (mysql_query(buf))
- mysql_ping();
- mysql_store_result(), mysql_fetch_row(result), mysql_free_result();
- return result;
- }
- accountPlayerExists(playerid) {
- new
- buf[127],
- bool:exists = false,
- nick[MAX_PLAYER_NAME]
- ;
- mysql_real_escape_string(getPlayerName(playerid), nick);
- format(buf, sizeof(buf), "SELECT 1 FROM players WHERE nick = '%s'", nick);
- if (mysql_query(buf))
- mysql_ping();
- mysql_store_result();
- if (mysql_num_rows())
- exists = true;
- mysql_free_result();
- return exists;
- }
- passwordCorrect(szPassword[]) {
- new
- length = strlen(szPassword)
- ;
- if (!(5 <= length < 20)) return 0;
- for (new i = 0; i != length; i++) {
- switch (szPassword[i]) {
- case 'a' .. 'z': continue;
- case 'A' .. 'Z': continue;
- case '0' .. '9': continue;
- case '!', '@', '#', '$', '%', '^', '&', '*', '(', ')': continue;
- default: return 0;
- }
- }
- return 1;
- }
- loginPlayer(playerid, const password[]) {
- new buf[127];
- if (playerData[playerid][loginAttempt] >= MAX_LOGIN_ATTEMPTS) {
- clientMsg(playerid, -1, "Wykorzystałeś limit prób zalogowań! Zostałeś wyrzucony.");
- hidePlayerDialog(playerid);
- return Kick(playerid);
- }
- format(buf, sizeof(buf), "SELECT haslo FROM players WHERE nick = '%s'", getPlayerName(playerid));
- mysql_query(buf), mysql_store_result(), mysql_fetch_row(buf), mysql_free_result();
- if (strcmp(MD5_Hash(passHash(password, getPlayerName(playerid))), buf, true) != 0 && buf[0]) {
- playerData[playerid][loginAttempt]++;
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logowanie", "Twoje konto jest zarejstrowane.\nPowtórz hasło, ponieważ wprowadzone jest nieprawidłowe.", "Zaloguj", "Opuść");
- return clientMsg(playerid, -1, "Nieprawidlowe haslo, sprobuj ponownie.");
- }
- playerData[playerid][loggedIn] = true;
- clientMsg(playerid, -1, "Zostales zalogowany, milej Gry.");
- OnPlayerRequestClass(playerid, 0), loadPlayerData(playerid);
- return 1;
- }
- getPlayerName(playerid) {
- static pName[MAX_PLAYER_NAME];
- pName[0] = 0;
- GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
- return pName;
- }
- // The end, thanks for watch. :)
Advertisement
Add Comment
Please, Sign In to add comment