Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- #include "../includes/zcmd.inc"
- #include "../includes/a_mysql.inc"
- #include "../filterscripts/Hash.inc"
- #define MySQL_Host "localhost"
- #define MySQL_User "root"
- #define MySQL_Pass ""
- #define MySQL_DB "PlayerData"
- static stock
- g_szBuffer[1024]
- ;
- #define formatEx(%0,%1) \
- (format(g_szBuffer, sizeof(g_szBuffer), %0, %1), g_szBuffer)
- enum e_Flags(<<= 1) {
- e_Registering = 0b1,
- e_Logged
- };
- new
- e_Flags: g_eFlags[MAX_PLAYERS]
- ;
- CMD:register(playerid, params[]) {
- new
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(playerid, szName, sizeof(szName));
- if(AccountExists(szName)) {
- return SendClientMessage(playerid, 0xFF0000FF, "Error: You already have an account! Please login.");
- }
- if(isnull(params)) {
- return SendClientMessage(playerid, 0xFF0000FF, "Syntax: /register [password]");
- }
- if(!(4 <= strlen(params) <= 32)) {
- return SendClientMessage(playerid, 0xFF0000FF, "Error: You password is either too long or too short.");
- }
- g_eFlags[playerid] |= e_Registering;
- Hash(WHIRLPOOL, playerid, params);
- SendClientMessage(playerid, 0x00FF00FF, "Info: Please wait, connecting to servers...");
- return 1;
- }
- CMD:login(playerid, params[]) {
- new
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(playerid, szName, sizeof(szName));
- if(!AccountExists(szName)) {
- return SendClientMessage(playerid, 0xFF0000FF, "Error: You don't have an account! Please register first.");
- }
- if(isnull(params)) {
- return SendClientMessage(playerid, 0xFF0000FF, "Syntax: /login [password]");
- }
- Hash(WHIRLPOOL, playerid, params);
- SendClientMessage(playerid, 0x00FF00FF, "Info: Please wait, connecting to servers...");
- return 1;
- }
- public OnHashUpdate(const iIdx, szHash[]) {
- if(-1 < iIdx < sizeof(g_eFlags)) { // Check if iIdx is a playerid
- if((g_eFlags[iIdx] & e_Registering)) { // Register
- static
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(iIdx, szName, sizeof(szName));
- mysql_query(formatEx("INSERT INTO `Players` (`Name`, `Password`, `Score`) VALUES ('%s', '%s', '%d')", szName, szHash, GetPlayerScore(iIdx)));
- mysql_free_result();
- g_eFlags[iIdx] &= ~e_Registering;
- SendClientMessage(iIdx, 0x00FF00FF, "Info: You have been succesfuly registered! Use /login to login.");
- } else if(!(g_eFlags[iIdx] & e_Logged)){ // Login
- static
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(iIdx, szName, sizeof(szName));
- mysql_query(formatEx("SELECT `Score` FROM `Players` WHERE `Name` = '%s' AND `Password` = '%s'", szName, szHash));
- mysql_store_result();
- if(mysql_num_rows()) {
- SetPlayerScore(iIdx, mysql_fetch_int());
- g_eFlags[iIdx] |= e_Logged;
- SendClientMessage(iIdx, 0x00FF00FF, "Info: You have succesfuly logged in!");
- } else {
- SendClientMessage(iIdx, 0xFF0000FF, "Error: Wrong password!");
- }
- mysql_free_result();
- }
- }
- return 1;
- }
- public OnPlayerConnect(playerid) {
- static
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(playerid, szName, sizeof(szName));
- if(AccountExists(szName)) {
- SendClientMessage(playerid, 0xFFFFFFFF, "You have an account. Use /login to login.");
- } else {
- SendClientMessage(playerid, 0xFFFFFFFF, "You don't have an account. Use /register to create an account!");
- }
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason) {
- if((g_eFlags[playerid] & e_Logged)) {
- SavePlayerData(playerid);
- }
- g_eFlags[playerid] = e_Flags: 0;
- return 1;
- }
- stock SavePlayerData(playerid) {
- static
- szName[MAX_PLAYER_NAME]
- ;
- GetPlayerName(playerid, szName, sizeof(szName));
- mysql_query(formatEx("UPDATE `Players` SET `Score` = '%d' WHERE `Name` = '%s'", GetPlayerScore(playerid), szName));
- mysql_free_result();
- }
- stock AccountExists(const szAccount[]) {
- static
- szName[MAX_PLAYER_NAME]
- ;
- szName[0] = EOS;
- mysql_real_escape_string(szAccount, szName);
- mysql_query(formatEx("SELECT * FROM `Players` WHERE `Name` = '%s' LIMIT 1", szName));
- mysql_store_result();
- new
- iResult = mysql_num_rows()
- ;
- mysql_free_result();
- return !!iResult;
- }
- public OnFilterScriptInit() {
- mysql_debug(0);
- mysql_connect(MySQL_Host, MySQL_User, MySQL_DB, MySQL_Pass);
- if(mysql_ping() == 1) {
- printf(" » [MySQL]: Succesfuly connected! ");
- } else {
- new
- iAttempts
- ;
- Attempts: {
- mysql_connect(MySQL_Host, MySQL_User, MySQL_DB, MySQL_Pass);
- if(mysql_ping() == 1) {
- printf(" » [MySQL]: Succesfuly connected! ");
- } else {
- if(iAttempts++ < 3) {
- printf(" » [MySQL]: Unable to connect! Retrying (%d). ", iAttempts);
- goto Attempts;
- } else {
- printf(" » [MySQL]: Unable to connect! Shuting down server. ");
- SendRconCommand("exit");
- }
- }
- }
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement