Advertisement
TheTrueVenom

Login/Register System Italian

Nov 9th, 2019
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.20 KB | None | 0 0
  1. //Venom
  2. //Register Login System V1.0 MYSQL
  3.  
  4.  
  5. #include <a_samp>
  6. #include <a_mysql>
  7. #include <streamer>
  8. #include <easyDialog>
  9. #include <sscanf2>
  10.  
  11. #pragma unused SAMP_INCLUDES_VERSION
  12.  
  13. #undef MAX_PLAYERS
  14. #define MAX_PLAYERS 200
  15.  
  16. #undef MAX_VEHICLES
  17. #define MAX_VEHICLES 500
  18.  
  19. new MySQL:g_SQL;
  20.  
  21. #define SQL_HOST "127.0.0.1"
  22. #define SQL_USER "root"
  23. #define SQL_PASS "" //Se non hai una password lascia vuoto.
  24. #define SQL_DB "" //Il nome del tuo database.
  25.  
  26. #define SECONDS_TO_LOGIN 60
  27.  
  28. #define     DEFAULT_POS_X       1129.1920
  29. #define     DEFAULT_POS_Y       -1466.2002
  30. #define     DEFAULT_POS_Z       15.7530
  31. #define     DEFAULT_POS_A       1.2959
  32.  
  33. #define DIALOG_UNUSED 1
  34. #define DIALOG_LOGIN 2
  35. #define DIALOG_REGISTER 3
  36. #define DIALOG_SKIN 4
  37. #define DIALOG_NAME 5
  38.  
  39. #define COLOR_MECHANIC                  (0x005A83FF)
  40. #define COLOR_TAXI                      (0xB8860BFF)
  41. #define COLOR_WHITE                     (0xFFFFFFFF)
  42. #define COLOR_ERROR                     (0xa52a2aff)
  43. #define COLOR_YELLOW                    (0xFFFF00AA)
  44. #define COLOR_ADMIN                     (0xFF6347FF)
  45. #define COLOR_ORANGE                    (0xEA7500FF)
  46. #define COLOR_PURPLE                    (0xD0AEEBFF)
  47. #define COLOR_FADE1                     (0xE6E6E6E6)
  48. #define COLOR_FADE2                     (0xC8C8C8C8)
  49. #define COLOR_FADE3                     (0xAAAAAAAA)
  50. #define COLOR_FADE4                     (0x8C8C8C8C)
  51. #define COLOR_FADE5                     (0x6E6E6E6E)
  52. #define COLOR_HOUSE                     (0xE0EA64AA)
  53. #define COLOR_BIZ                       (0x33CCFFFF)
  54. #define COLOR_GREY                      (0xAFAFAFFF)
  55. #define COLOR_LIGHTBLUE                 (0xA9C4E4FF)
  56. #define COLOR_SENDPM                    (0xE5C43EFF)
  57. #define COLOR_RECEIVEPM                 (0xffdb18AA)
  58. #define COLOR_GREEN                     (0x33AA33AA)
  59. #define COLOR_MODCHAT                   (0xE1A400FF)
  60. #define COLOR_ADMINCHAT                 (0x876200FF)
  61. #define COLOR_LIGHTGREEN                (0x9ACD32FF)
  62. #define COLOR_SUPPORTER                 (0xe9de98ff)
  63. #define COLOR_SUPPORTERNICK             (0xa52a2aff)
  64. #define COLOR_SLATEBLUE                 (0x6A5ACDFF)
  65. #define COLOR_RED                       (0xFF0000AA)
  66. #define COLOR_GREEN                     (0x33AA33AA)
  67. #define COLOR_CYAN                      (0x00FFFFFF)
  68. #define COLOR_PDRAD                     (0x297CCFFF)
  69. #define COLOR_BLUE                       (0x102c54)
  70. #define COLOR_TRANS                     (0xFFFFFF00)
  71. #define COLOR_TOMATO                    (0xFF6347FF)
  72. #define COLOR_DEFAULT                   (0xA9C4E4FF)
  73. #define COL_TOMATO                       "{FF6347}"
  74. #define COL_YELLOW                       "{FFDD00}"
  75. #define COL_DEFAULT                      "{A9C4E4}"
  76. #define COL_ERROR                        "{a52a2a}"
  77. #define COL_WHITE                        "{FFFFFF}"
  78. #define COL_RED                          "{F81414}"
  79. #define COL_GREEN                        "{00FF22}"
  80. #define COL_LIGHTBLUE                    "{00CED1}"
  81. #define COL_BIANCO                       "{FFFFFF}"
  82. #define COL_ROSSO                        "{FF0000}"
  83. #define COL_VERDE                        "{00FF22}"
  84. #define COL_LBLUE                        "{00CED1}"
  85.  
  86. stock RemoveUnderScore(playerid)
  87. {
  88.     new name[MAX_PLAYER_NAME];
  89.     GetPlayerName(playerid,name,sizeof(name));
  90.     for(new i = 0; i < MAX_PLAYER_NAME; i++)
  91.     {
  92.         if(name[i] == '_') name[i] = ' ';
  93.     }
  94.     return name;
  95. }
  96.  
  97. GetName(playerid)
  98. {
  99.     new name[MAX_PLAYERS];
  100.     GetPlayerName(playerid, name, sizeof(name));
  101.     return name;
  102. }
  103.  
  104. #define BYTES_PER_CELL  4
  105. stock SendFormattedMessage(playerid, color, fstring[], {Float, _}:...)
  106. {
  107.     static const STATIC_ARGS = 3;
  108.     new n = (numargs() - STATIC_ARGS) * BYTES_PER_CELL;
  109.     if(n)
  110.     {
  111.         new message[144],arg_start,arg_end;
  112.         #emit CONST.alt        fstring
  113.         #emit LCTRL          5
  114.         #emit ADD
  115.         #emit STOR.S.pri        arg_start
  116.  
  117.         #emit LOAD.S.alt        n
  118.         #emit ADD
  119.         #emit STOR.S.pri        arg_end
  120.         do
  121.         {
  122.             #emit LOAD.I
  123.             #emit PUSH.pri
  124.             arg_end -= BYTES_PER_CELL;
  125.             #emit LOAD.S.pri      arg_end
  126.         }
  127.         while(arg_end > arg_start);
  128.  
  129.         #emit PUSH.S          fstring
  130.         #emit PUSH.C          144
  131.         #emit PUSH.ADR         message
  132.  
  133.         n += BYTES_PER_CELL * 3;
  134.         #emit PUSH.S          n
  135.         #emit SYSREQ.C         format
  136.  
  137.         n += BYTES_PER_CELL;
  138.         #emit LCTRL          4
  139.         #emit LOAD.S.alt        n
  140.         #emit ADD
  141.         #emit SCTRL          4
  142.  
  143.         if(playerid == INVALID_PLAYER_ID)
  144.         {
  145.             #pragma unused playerid
  146.             return SendClientMessageToAll(color, message);
  147.         } else {
  148.             return SendClientMessage(playerid, color, message);
  149.         }
  150.     } else {
  151.         if(playerid == INVALID_PLAYER_ID)
  152.         {
  153.             #pragma unused playerid
  154.             return SendClientMessageToAll(color, fstring);
  155.         } else {
  156.             return SendClientMessage(playerid, color, fstring);
  157.         }
  158.     }
  159. }
  160.  
  161. enum pInfo
  162. {
  163.     ID,
  164.     Name[MAX_PLAYER_NAME],
  165.     Password[65],
  166.     Salt[17],
  167.     Float: X_Pos,
  168.     Float: Y_Pos,
  169.     Float: Z_Pos,
  170.     Float: A_Pos,
  171.     Cache: Cache_ID,
  172.     bool: IsLoggedIn,
  173.     LoginAttempts,
  174.     LoginTimer,
  175.     pSkin
  176.  
  177. }
  178.  
  179. new Player[MAX_PLAYERS][pInfo];
  180. new g_MysqlRaceCheck[MAX_PLAYERS];
  181.  
  182. #if defined FILTERSCRIPT
  183.  
  184. public OnFilterScriptInit()
  185. {
  186.         print("\n--------------------------------------");
  187.         print("         Login/Register System");
  188.         print("              by Venom");
  189.         print("                2019");
  190.         print("--------------------------------------\n");
  191.         return 1;
  192. }
  193.  
  194. public OnFilterScriptExit()
  195. {
  196.         return 1;
  197. }
  198.  
  199. #else
  200.  
  201. main()
  202. {
  203.         print("\n----------------------------------");
  204.         print(" Blank Gamemode by your name here");
  205.         print("----------------------------------\n");
  206. }
  207.  
  208. #endif
  209.  
  210. public OnGameModeInit()
  211. {
  212.  SetGameModeText("Nome gamemode");
  213.  new MySQLOpt: option_id = mysql_init_options();
  214.  mysql_set_option(option_id, AUTO_RECONNECT, true);
  215.  g_SQL = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB, option_id);
  216.  if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
  217.  {
  218.     print("\n\n [MySQL]: Cercando una connessione al database...");
  219.     print("\n\n [MySQL]: Nessun database trovato, il server si sta chiudendo.");
  220.     SendRconCommand("exit");
  221.     return 1;
  222.  }
  223.  print("[MySQL]: Connesso correttamente al database.");
  224.  mysql_log(ALL);
  225.  SetupPlayerTable();
  226.  DisableInteriorEnterExits();
  227.  EnableStuntBonusForAll(false);
  228.  ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
  229.  return 1;
  230. }
  231.  
  232. public OnGameModeExit()
  233. {
  234.     mysql_close(g_SQL);
  235.     return 1;
  236. }
  237.  
  238. public OnPlayerRequestClass(playerid, classid)
  239. {
  240.     SetPlayerCameraPos(playerid, 1129.0918,-1462.7538,15.7530);
  241.     Player[playerid][IsLoggedIn] = false;
  242.     return 1;
  243. }
  244.  
  245. public OnPlayerConnect(playerid)
  246. {
  247.     g_MysqlRaceCheck[playerid]++;
  248.     SetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  249.     SetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  250.  
  251.     static const empty_player[pInfo];
  252.  
  253.     Player[playerid] = empty_player;
  254.  
  255.     GetPlayerName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);
  256.  
  257.     Player[playerid][pSkin] = 29;
  258.  
  259.     DisablePlayerCheckpoint(playerid);
  260.  
  261.     new query[103];
  262.     mysql_format(g_SQL, query, sizeof query, "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", Player[playerid][Name]);
  263.     mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);
  264.  
  265.     GetPlayerName(playerid, Player[playerid][Name], 24);
  266.     return 1;
  267. }
  268.  
  269. public OnPlayerDisconnect(playerid, reason)
  270. {
  271.     g_MysqlRaceCheck[playerid]++;
  272.     UpdatePlayerData(playerid, reason);
  273.  
  274.     if (cache_is_valid(Player[playerid][Cache_ID]))
  275.     {
  276.         cache_delete(Player[playerid][Cache_ID]);
  277.         Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  278.     }
  279.  
  280.     if(Player[playerid][LoginTimer])
  281.     {
  282.         KillTimer(Player[playerid][LoginTimer]);
  283.         Player[playerid][LoginTimer] = 0;
  284.     }
  285.     Player[playerid][pSkin] = GetPlayerSkin(playerid);
  286.     Player[playerid][IsLoggedIn] = false;
  287.     GetPlayerSkin(playerid);
  288.     new query[250];
  289.     mysql_format(g_SQL, query, sizeof(query),"UPDATE `players` SET `skin`=%d WHERE `id`=%d", Player[playerid][pSkin], Player[playerid][ID]);
  290.     mysql_query(g_SQL, query);
  291.     return 1;
  292. }
  293.  
  294. public OnPlayerSpawn(playerid)
  295. {
  296.     SetPlayerSkin(playerid, Player[playerid][pSkin]);
  297.     return 1;
  298. }
  299.  
  300. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  301. {
  302.     switch(dialogid)
  303.     {
  304.         case DIALOG_LOGIN:
  305.         {
  306.         new hashed_password[65];
  307.         SHA256_PassHash(inputtext, Player[playerid][Salt], hashed_password, 65);
  308.         if(strcmp(hashed_password, Player[playerid][Password]) == 0)
  309.         {
  310.             SendClientMessage(playerid, -1, "Ti sei loggato correttamente.");
  311.             cache_set_active(Player[playerid][Cache_ID]);
  312.             AssignPlayerData(playerid);
  313.             cache_delete(Player[playerid][Cache_ID]);
  314.             Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  315.             KillTimer(Player[playerid][LoginTimer]);
  316.             Player[playerid][LoginTimer] = 0;
  317.             Player[playerid][IsLoggedIn] = true;
  318.             SetSpawnInfo(playerid, NO_TEAM, 0, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos], Player[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
  319.             SpawnPlayer(playerid);
  320.         }
  321.         else
  322.         {
  323.             if(!response) return Kick(playerid);
  324.             Player[playerid][LoginAttempts]++;
  325.  
  326.             if(Player[playerid][LoginAttempts] == 3)
  327.             {
  328.                 ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login System", "Hai esaurito i tentativi di login. "COL_RED"(3/3).", "Esci", "");
  329.                 DelayedKick(playerid);
  330.             }
  331.             else
  332.             {
  333.                 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login System", "Password errata!\n Inserisci la tua password qui sotto.", "Continua", "Esci");
  334.             }
  335.         }
  336.     }
  337.     case DIALOG_REGISTER:
  338.     {
  339.         if(!response) return Kick(playerid);
  340.         if(strlen(inputtext) <= 4) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register System", "La password deve contenere minimo 5 caratteri.\n Inserisci una password valida qui sotto.", "Avanti", "Esci");
  341.         for (new i = 0; i < 16; i++) Player[playerid][Salt][i] = random(94) + 33;
  342.         SHA256_PassHash(inputtext, Player[playerid][Salt], Player[playerid][Password], 65);
  343.         new query[280];
  344.         mysql_format(g_SQL, query, sizeof query, "INSERT INTO `players` (`username`, `password`, `salt`) VALUES ('%e', '%s', '%e')", Player[playerid][Name], Player[playerid][Password], Player[playerid][Salt]);
  345.         mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
  346.     }
  347.     case DIALOG_SKIN:
  348.     {
  349.         if(!response) return Kick(playerid);
  350.         new skinid;
  351.         skinid = strval(inputtext);
  352.         {
  353.             if(skinid < 1 || skinid > 311) return ShowPlayerDialog(playerid, DIALOG_SKIN, DIALOG_STYLE_INPUT, "Registration System", "Seleziona una skin.\nID disponibili: 1-311.", "Avanti", "Esci");
  354.         }
  355.         SetPlayerSkin(playerid, skinid);
  356.         new query[280];
  357.         mysql_tquery(g_SQL, query, "OnPlayerRegisterCorrectly", "d", playerid);
  358.     }
  359.     }
  360.     return 1;
  361. }
  362.  
  363.  
  364. forward OnPlayerDataLoaded(playerid, race_check);
  365. public OnPlayerDataLoaded(playerid, race_check)
  366. {
  367.     if(race_check != g_MysqlRaceCheck[playerid]) return Kick(playerid);
  368.     if(cache_num_rows() > 0)
  369.     {
  370.         cache_get_value(0, "password", Player[playerid][Password], 65);
  371.         cache_get_value(0, "salt", Player[playerid][Salt], 17);
  372.         Player[playerid][Cache_ID] = cache_save();
  373.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login System", "Inserisci la tua password per loggare.\n Hai 60 secondi per effettuare il login.", "Avanti", "Esci");
  374.         Player[playerid][LoginTimer] = SetTimerEx("OnLoginTimeout", SECONDS_TO_LOGIN * 1000, false, "d", playerid);
  375.     }
  376.     else
  377.     {
  378.         new string[128];
  379.         format(string, sizeof(string), "Benvenuto %s, per registrare il tuo account inserisci una password qui sotto.", RemoveUnderScore(playerid));
  380.         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registration System", string, "Avanti", "Esci");
  381.     }
  382.     return 1;
  383. }
  384.  
  385. forward OnLoginTimeout(playerid);
  386. public OnLoginTimeout(playerid)
  387. {
  388.     Player[playerid][LoginTimer] = 0;
  389.     ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login System", "Sei stato kickato.\n Motivazione:\n Hai esaurito il tempo disponibile per il login.", "Esci", "");
  390.     DelayedKick(playerid);
  391.     return 1;
  392. }
  393.  
  394. forward OnPlayerRegister(playerid);
  395. public OnPlayerRegister(playerid)
  396. {
  397.     Player[playerid][ID] = cache_insert_id();
  398.     new skinid, query[128];
  399.     ShowPlayerDialog(playerid, DIALOG_SKIN, DIALOG_STYLE_INPUT, "Registration System", "Seleziona una skin.\nID disponibili: 1-311.", "Seleziona", "Esci");
  400.     SetPlayerSkin(playerid, skinid);
  401.     mysql_format(g_SQL, query, sizeof query, "UPDATE `players`  SET `skin` =%d WHERE `id` =%d LIMIT 1", Player[playerid][pSkin], Player[playerid][ID]);
  402.     mysql_tquery(g_SQL, query, "", "");
  403.     Player[playerid][IsLoggedIn] = true;
  404.     Player[playerid][X_Pos] = DEFAULT_POS_X;
  405.     Player[playerid][Y_Pos] = DEFAULT_POS_Y;
  406.     Player[playerid][Z_Pos] = DEFAULT_POS_Z;
  407.     Player[playerid][A_Pos] = DEFAULT_POS_A;
  408.     SetSpawnInfo(playerid, NO_TEAM, Player[playerid][pSkin], Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos], Player[playerid][A_Pos], 0, 0, 0, 0, 0, 0);
  409.     SpawnPlayer(playerid);
  410.     mysql_tquery(g_SQL, query, "OnPlayerRegisterCorrectly", "d", playerid);
  411.     return 1;
  412. }
  413.  
  414. forward OnPlayerRegisterCorrectly(playerid);
  415. public OnPlayerRegisterCorrectly(playerid)
  416. {
  417.     GivePlayerMoney(playerid, 5000);
  418.     SendFormattedMessage(playerid, COLOR_GREEN, "Ti sei registrato correttamente. Benvenuto %s!", GetName(playerid));
  419.     return 1;
  420. }
  421. forward _KickPlayerDelayed(playerid);
  422. public _KickPlayerDelayed(playerid)
  423. {
  424.     Kick(playerid);
  425.     return 1;
  426. }
  427.  
  428. AssignPlayerData(playerid)
  429. {
  430.     cache_get_value_int(0, "id", Player[playerid][ID]);
  431.     cache_get_value_int(0, "skin", Player[playerid][pSkin]);
  432.     cache_get_value_float(0, "x", Player[playerid][X_Pos]);
  433.     cache_get_value_float(0, "y", Player[playerid][Y_Pos]);
  434.     cache_get_value_float(0, "z", Player[playerid][X_Pos]);
  435.     cache_get_value_float(0, "angle", Player[playerid][A_Pos]);
  436.     return 1;
  437. }
  438.  
  439. DelayedKick(playerid, time = 500)
  440. {
  441.     SetTimerEx("_KickPlayerDelayed", time, false, "d", playerid);
  442.     return 1;
  443. }
  444.  
  445. SetupPlayerTable()
  446. {
  447.     mysql_tquery(g_SQL, "CREATE TABLE IF NOT EXISTS `players` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(24) NOT NULL,`password` char(64) NOT NULL,`salt` char(16) NOT NULL,`skin` int(10) NOT NULL DEFAULT '0',`x` float NOT NULL DEFAULT '0',`y` float NOT NULL DEFAULT '0',`z` float NOT NULL DEFAULT '0',`angle` float NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`))");
  448.     return 1;
  449. }
  450.  
  451. UpdatePlayerData(playerid, reason)
  452. {
  453.     if (Player[playerid][IsLoggedIn] == false) return 0;
  454.     if (reason == 1)
  455.     {
  456.         GetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  457.         GetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  458.     }
  459.    
  460.     new query[145];
  461.     mysql_format(g_SQL, query, sizeof query, "UPDATE `players` SET `x` = %f, `y` = %f, `z` = %f, `angle` = %f WHERE `id` = %d LIMIT 1", Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos], Player[playerid][A_Pos], Player[playerid][ID]);
  462.     mysql_tquery(g_SQL, query);
  463.     return 1;
  464. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement