Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*=====================================================*
- * GM RP by: OuDayas
- * Version: 1.0
- *
- *======================================================*/
- // Sezione include
- #include <a_samp> // include base: NON ELIMINARE O NON PARTIÀ
- #include <a_mysql> // Include per la connessione al: MySQL
- #include <sscanf> // Include per sscanf
- #include <zcmd> // Include per i comandi
- // Sezione define
- // Connessione MySQL (in caso di editing cambia solo i campi tra le ""
- #define MYSQL_HOST "127.0.0.1" //IP del server host (es: localhost/127.0.0.1
- #define MYSQL_USER "root" //Username a cui accedere (di default è root)
- #define MYSQL_PASS "Pass123!" //Password per accedere al protocollo MySQL
- #define MYSQL_DBSE "dbrp" //Nome del database
- new MySQL:handle; // l'Handle di connessione per connettersi al databse
- // dialoghi registrazione/login
- #define DIALOG_REGISTER 1
- #define DIALOG_REGISTER_EMAIL 2
- #define DIALOG_REGISTER_AGE 3
- #define DIALOG_LOGIN 10
- // colori
- // system color
- #define COLOR_SYSTEM_ERROR 0xAA3333AA
- #define COLOR_SYSTEM_TITLE 0xFFFFFFAA
- #define COLOR_SYSTEM_TEXT 0xFFFFFFAA
- #define COLOR_SYSTEM_SUCCESS 0x33AA33AA
- #define COLOR_SYSTEM_INFO 0xAFAFAFAA
- // protocollo di controllo se una string è numerica
- IsNumeric(const string[])
- {
- for (new i = 0, j = strlen(string); i < j; i++)
- {
- if (string[i] > '9' || string[i] < '0') return 0;
- }
- return 1;
- }
- // lista denominazioni delle statistiche
- enum pDataEnum
- {
- p_id,
- bool:pLoggedIn,
- pName[MAX_PLAYER_NAME],
- pLevel,
- pMoney,
- pKills,
- pAge,
- pPassTmp[128],
- pEmail[64],
- pDeaths
- }
- new PlayerInfo[MAX_PLAYERS][pDataEnum];
- // non cancellare
- // usercheck, controllo del giocatore
- forward OnUserCheck(playerid);
- public OnUserCheck(playerid)
- {
- //Query inizializzata con successo nella chache, passa al check
- new rows;
- cache_get_row_count(rows);
- if(rows == 0)
- {
- //Giocatore nont rovato nel database, quindi passa alla registrazione
- ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "Inserisci una password per iniziare la registrazione:", "Continua", "Annulla");
- }
- else
- {
- //Giocatore trovato, quindi passa al login
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Prego inserisci la password per entrare nel server:", "Login", "Esci");
- }
- return 1;
- }
- // non cancellare
- // onuserregister - quando il giocatore finisce di registrarsi
- forward OnUserRegister(playerid);
- public OnUserRegister(playerid)
- {
- //L'utente ha finito la registrazione e viene inserito nel database
- //Una volta finito inserirà l'id nella cache e imposterà l'accesso su true (accesso effettuato)
- PlayerInfo[playerid][p_id] = cache_insert_id();
- GivePlayerMoney(playerid, 250);
- PlayerInfo[playerid][pLoggedIn] = true;
- SendClientMessage(playerid, 0x00FF00FF, "[SERVER:] Registrazione effettuata con successo.");
- return 1;
- }
- //non cancellare
- // quando un utente si collega al server
- 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)
- {
- //In caso di login l'utente inserisce una password errata
- ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "{FF0000}ERRORE:\n{FF0000}Password errata\n{0F22FF}Riprova:!", "Login", "Esci");
- }
- 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)
- 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, "age", PlayerInfo[playerid][pAge]);
- cache_get_value_name_int(0, "deaths", PlayerInfo[playerid][pDeaths]);
- cache_get_value_name(0, "email", PlayerInfo[playerid][pEmail],64);
- PlayerInfo[playerid][pLoggedIn] = true;
- SendClientMessage(playerid, 0x00FF00FF, "[INFO:] Login con successo.");
- GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
- }
- return 1;
- }
- // non cancellare
- // quando un utente si scollega salva prima le statistiche
- stock SaveUserStats(playerid)
- {
- //Se non ha effettuato l'accesso il giocatore, non salva le statistiche
- if(!PlayerInfo[playerid][pLoggedIn]) return 1;
- //Se ha già effettuato l'accesso salva le statistiche
- new playeremail[64];
- format(playeremail, 64, PlayerInfo[playerid][pEmail]);
- new livello = PlayerInfo[playerid][pLevel];
- // new soldi = PlayerInfo[playerid][pMoney];
- new soldi = GetPlayerMoney(playerid);
- new kills = PlayerInfo[playerid][pKills];
- new morti = PlayerInfo[playerid][pDeaths];
- new giocaotreid = PlayerInfo[playerid][p_id];
- new etagiocatore = PlayerInfo[playerid][pAge];
- new query[256];
- mysql_format(handle, query, sizeof(query),
- "UPDATE users SET age = '%d', email = '%s', level = '%d', money = '%d', kills = '%d', deaths = '%d' WHERE id = '%d'",
- etagiocatore, playeremail, livello, soldi, kills, morti, giocaotreid);
- //Query inviata
- mysql_pquery(handle, query);
- return 1;
- }
- // non cancellare/modificare
- // setup della connessione al MySQL
- stock MySQL_SetupConnection(ttl = 3)
- {
- print("[MySQL] Connessione in corso...");
- //mysql_log(); //<- Rimuovi il commento antecedente a mysql_log per attivare la modalità debug
- handle = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DBSE);
- //Inizio della procedura di controllo e riconnessione se necessario ripeterla
- if(mysql_errno(handle) != 0)
- {
- //In caso di errore della configurazione del MySQL verifica se necessario un nuovo tentativo
- if(ttl > 1)
- {
- //Prova di riconnessione
- print("[MySQL] Impossibile collegarsi al database.");
- printf("[MySQL] Inizio nuovo tentativo di connessione in corso (TTL: %d).", ttl-1);
- return MySQL_SetupConnection(ttl-1);
- }
- else
- {
- //Annulla e chiude il server
- print("[MySQL] Impossibile collegarsi al database.");
- print("[MySQL] Verifica i dati di connessione.");
- print("[MySQL] Erresto server in corso.");
- return SendRconCommand("exit");
- }
- }
- printf("[MySQL] Connessione al MySQL con successo Handle: %d", _:handle);
- return 1;
- }
- #if defined FILTERSCRIPT
- public OnFilterScriptInit()
- {
- print("\n---------------------");
- print(" Non è un filterscript ");
- print("---------------------\n");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- #else
- main()
- {
- print("\n-------------------------------------------------------------------------------");
- print("GameMode RP By: OuDayas v1.0");
- print("Non modificare la GM dove lo trovi indicato");
- print("In tal caso vuoiu spegnere il server usa il comando in console 'exit'");
- print("Per effettuare un riavvio usa invece 'gmx'(Fallo solo se strettamente necessario)");
- print("Per ogni cosa trovi un piccolo aiuto dove puoi editare la GM su pawno");
- print("--------------------------------------------------------------------------------\n");
- }
- #endif
- public OnGameModeInit()
- {
- MySQL_SetupConnection(); // inizio della connessione al MySQL
- SetGameModeText("Blank Script");
- 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, classid)
- {
- // da qui non modificare
- //Quando il giocatore entra nella "request class" controlla se ha effettuato il login
- if(!PlayerInfo[playerid][pLoggedIn])
- {
- SendClientMessage(playerid, 0xFF0000, "[ERRORE:] Devi prima effettuare l'accesso per entrare");
- //In caso contrario controlla se ha un'account
- //Invia una query di controllo dove viene richiamata
- //%e sta per una stringa già verificata (usata al posto di %s nelle query)
- new query[128];
- mysql_format(handle, query, sizeof(query), "SELECT id FROM users WHERE name = '%e'", PlayerInfo[playerid][pName]);
- //La query dopo essere stata inviata, la passxa al "OnUserCheck"
- mysql_pquery(handle, query, "OnUserCheck", "d", playerid);
- }
- return 1;
- }
- 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;
- format(PlayerInfo[playerid][pPassTmp], 128, "");
- format(PlayerInfo[playerid][pEmail], 64, "");
- GetPlayerName(playerid, PlayerInfo[playerid][pName], MAX_PLAYER_NAME);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- SaveUserStats(playerid);
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- return 1;
- }
- public OnVehicleSpawn(vehicleid)
- {
- return 1;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- // comandi
- // comando: pm
- CMD:pm(playerid, params[])
- {
- new str[256], str2[256], id, Name1[MAX_PLAYER_NAME], Name2[MAX_PLAYER_NAME];
- if(sscanf(params, "us", id, str2))
- {
- SendClientMessage(playerid, 0xFF0000FF, "Usage: /pm <id> <message>");
- return 1;
- }
- if(!IsPlayerConnected(id)) return SendClientMessage(playerid, 0xFF0000FF, "ERROR: Player not connected");
- if(playerid == id) return SendClientMessage(playerid, 0xFF0000FF, "[ERRORE:]{AFAFAFAA} Npon puoi mandare un pm a te stesso!");
- {
- GetPlayerName(playerid, Name1, sizeof(Name1));
- GetPlayerName(id, Name2, sizeof(Name2));
- format(str, sizeof(str), "PM To %s(ID %d): %s", Name2, id, str2);
- SendClientMessage(playerid, 0xFF0000FF, str);
- format(str, sizeof(str), "PM From %s(ID %d): %s", Name1, playerid, str2);
- SendClientMessage(id, 0xFF0000FF, str);
- }
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {/*
- if (strcmp("/mycommand", cmdtext, true, 10) == 0)
- {
- // Do something here
- return 1;
- }*/
- new Messaggio[256];
- format(Messaggio, sizeof (Messaggio), "[INFO]: Il comando %s non esiste usa /comandi per aiuto", cmdtext);
- SendClientMessage(playerid, COLOR_SYSTEM_INFO, Messaggio);
- return SendClientMessage(playerid, -1, Messaggio);
- }
- 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[])
- {
- // registrazione password (fase 1)
- if(dialogid == DIALOG_REGISTER)
- {
- //Se il giocatore seleziona Annulla/Esci
- if(!response) return Kick(playerid);
- //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo
- if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Hai inserito una password troppo corta\n{00FF00}Consiglio: Usa almeno 3 caratteri ed una password sicura!", "Continua", "Annulla");
- //Se va tutto bene inizierà a creare il giocatore nel database
- //MD5 è il protocollo di criptografia per la password (puoi anche rimuoverlo dalla stringa lasciandolo: ('%e', '%e')
- new infopass[145];
- format(infopass, sizeof(infopass), "{f8ff33}[INFO:]{00FF00} La tua password sarà: %s - puoi cambiarla con /cambiapass", inputtext);
- SendClientMessage(playerid, 0xFFFFFF, infopass);
- new query[256];
- mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, email, age) VALUES ('%e', MD5('%e'))", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassTmp]);
- format(PlayerInfo[playerid][pPassTmp], 128, inputtext);
- //Dopo di chè la query viene inviata e passa al dialogo successivo
- // email
- ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_INPUT, "Registrazione", "{00FF00}Non manca molto:\n{000000}Inserisci una email per continuare\n{00FF00}INFO: Serve per proteggere il tuo account!", "Continua", "Annulla");
- return 1;
- }
- // registrazione email (fase 2)
- if(dialogid == DIALOG_REGISTER_EMAIL)
- {
- //Se il giocatore seleziona Annulla/Esci
- if(!response) return Kick(playerid);
- //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo
- if(strlen(inputtext) < 5) return ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Devi inserire una mail valide\n{00FF00}INFO: Servirà per proteggere meglio il tuo account!", "Continua", "Annulla");
- format(PlayerInfo[playerid][pEmail], 64, inputtext);
- new query[256];
- mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, email) VALUES ('%e', MD5('%e'), '%e')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassTmp], inputtext);
- format(PlayerInfo[playerid][pPassTmp], 128, "");
- //Dopo di chè la query viene inviata e passa al dialogo successivo
- // età
- ShowPlayerDialog(playerid, DIALOG_REGISTER_AGE, DIALOG_STYLE_INPUT, "Registrazione", "Inserisci l'età che vuoi avere nel server\nNon influenzerà il gioco.", "Continua", "Annulla");
- return 1;
- }
- // registrazione età (fase 3)
- if(dialogid == DIALOG_REGISTER_AGE)
- {
- //Se il giocatore seleziona Annulla/Esci
- if(!response) return Kick(playerid);
- //In tal caso l'utente inserisci una password troppo breve o non inserisce niente ritorna sullo stesso dialogo
- if(!strlen(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER_EMAIL, DIALOG_STYLE_PASSWORD, "Registrazione", "{FF0000}ERRORE:\n{000000}Devi inserire una mail valide\n{00FF00}INFO: Servirà per proteggere meglio il tuo account!", "Continua", "Annulla");
- if(!IsNumeric(inputtext)) return ShowPlayerDialog(playerid, DIALOG_REGISTER_AGE, DIALOG_STYLE_INPUT, "Registrazione", "{FF0000}Devi inserire un numero per l'età\n{FFFFFF}Inserisci l'età che vuoi avere nel server\nNon influenzerà il gioco.", "Continua", "Annulla");
- //Dopo di chè la query viene inviata e passa al dialogo successivo
- // età
- new query[256];
- mysql_format(handle, query, sizeof(query), "INSERT INTO users (name, password, email, age) VALUES ('%e', MD5('%e'), '%e', '%d')", PlayerInfo[playerid][pName], PlayerInfo[playerid][pPassTmp], PlayerInfo[playerid][pEmail], inputtext);
- format(PlayerInfo[playerid][pPassTmp], 128, "");
- mysql_pquery(handle, query, "OnUserRegister", "d", playerid);
- return 1;
- }
- if(dialogid == DIALOG_LOGIN)
- {
- //Spieler hat Abbrechen gewählt
- if(!response) return Kick(playerid);
- //se l'utente inserisce una password troppo corta o non inserisce niente
- if(strlen(inputtext) < 3) return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "ERRORE:\n{FF0000}Hai inserito una password troppo corta!", "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;
- }
- return 0;
- }
- public OnPlayerClickPlayer(playerid, clickedplayerid, source)
- {
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement