Advertisement
TheTrueVenom

Login/Register System English

Nov 9th, 2019
6,143
0
Never
2
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.10 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 "" //If you don't have a password, leave the field blank
  24. #define SQL_DB "" //Your 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.  
  183. #if defined FILTERSCRIPT
  184.  
  185. public OnFilterScriptInit()
  186. {
  187.         print("\n--------------------------------------");
  188.         print("         Login/Register System");
  189.         print("              by Venom");
  190.         print("                2019");
  191.         print("--------------------------------------\n");
  192.         return 1;
  193. }
  194.  
  195. public OnFilterScriptExit()
  196. {
  197.         return 1;
  198. }
  199.  
  200. #else
  201.  
  202. main()
  203. {
  204.         print("\n----------------------------------");
  205.         print(" Blank Gamemode by your name here");
  206.         print("----------------------------------\n");
  207. }
  208.  
  209. #endif
  210.  
  211. public OnGameModeInit()
  212. {
  213.  SetGameModeText("Name of Gamemode");
  214.  new MySQLOpt: option_id = mysql_init_options();
  215.  mysql_set_option(option_id, AUTO_RECONNECT, true);
  216.  g_SQL = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS, SQL_DB, option_id);
  217.  if(g_SQL == MYSQL_INVALID_HANDLE || mysql_errno(g_SQL) != 0)
  218.  {
  219.     print("\n\n [MySQL]: Looking for a database connection...");
  220.     print("\n\n [MySQL]: No database's found, server closing.");
  221.     SendRconCommand("exit");
  222.     return 1;
  223.  }
  224.  print("[MySQL]: Successfully connected to database.");
  225.  mysql_log(ALL);
  226.  SetupPlayerTable();
  227.  DisableInteriorEnterExits();
  228.  EnableStuntBonusForAll(false);
  229.  ShowPlayerMarkers(PLAYER_MARKERS_MODE_OFF);
  230.  return 1;
  231. }
  232.  
  233. public OnGameModeExit()
  234. {
  235.     mysql_close(g_SQL);
  236.     return 1;
  237. }
  238.  
  239. public OnPlayerRequestClass(playerid, classid)
  240. {
  241.     SetPlayerCameraPos(playerid, 1129.0918,-1462.7538,15.7530);
  242.     Player[playerid][IsLoggedIn] = false;
  243.     return 1;
  244. }
  245.  
  246. public OnPlayerConnect(playerid)
  247. {
  248.     g_MysqlRaceCheck[playerid]++;
  249.     SetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  250.     SetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  251.  
  252.     static const empty_player[pInfo];
  253.  
  254.     Player[playerid] = empty_player;
  255.  
  256.     GetPlayerName(playerid, Player[playerid][Name], MAX_PLAYER_NAME);
  257.  
  258.     Player[playerid][pSkin] = 29;
  259.  
  260.     DisablePlayerCheckpoint(playerid);
  261.  
  262.     new query[103];
  263.     mysql_format(g_SQL, query, sizeof query, "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", Player[playerid][Name]);
  264.     mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);
  265.  
  266.     GetPlayerName(playerid, Player[playerid][Name], 24);
  267.     return 1;
  268. }
  269.  
  270. public OnPlayerDisconnect(playerid, reason)
  271. {
  272.     g_MysqlRaceCheck[playerid]++;
  273.     UpdatePlayerData(playerid, reason);
  274.  
  275.     if (cache_is_valid(Player[playerid][Cache_ID]))
  276.     {
  277.         cache_delete(Player[playerid][Cache_ID]);
  278.         Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  279.     }
  280.  
  281.     if(Player[playerid][LoginTimer])
  282.     {
  283.         KillTimer(Player[playerid][LoginTimer]);
  284.         Player[playerid][LoginTimer] = 0;
  285.     }
  286.     Player[playerid][pSkin] = GetPlayerSkin(playerid);
  287.     Player[playerid][IsLoggedIn] = false;
  288.     GetPlayerSkin(playerid);
  289.     new query[250];
  290.     mysql_format(g_SQL, query, sizeof(query),"UPDATE `players` SET `skin`=%d WHERE `id`=%d", Player[playerid][pSkin], Player[playerid][ID]);
  291.     mysql_query(g_SQL, query);
  292.     return 1;
  293. }
  294.  
  295. public OnPlayerSpawn(playerid)
  296. {
  297.     SetPlayerSkin(playerid, Player[playerid][pSkin]);
  298.     return 1;
  299. }
  300.  
  301. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  302. {
  303.     switch(dialogid)
  304.     {
  305.         case DIALOG_LOGIN:
  306.         {
  307.         new hashed_password[65];
  308.         SHA256_PassHash(inputtext, Player[playerid][Salt], hashed_password, 65);
  309.         if(strcmp(hashed_password, Player[playerid][Password]) == 0)
  310.         {
  311.             SendClientMessage(playerid, -1, "Successfully logged in.");
  312.             cache_set_active(Player[playerid][Cache_ID]);
  313.             AssignPlayerData(playerid);
  314.             cache_delete(Player[playerid][Cache_ID]);
  315.             Player[playerid][Cache_ID] = MYSQL_INVALID_CACHE;
  316.             KillTimer(Player[playerid][LoginTimer]);
  317.             Player[playerid][LoginTimer] = 0;
  318.             Player[playerid][IsLoggedIn] = true;
  319.             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);
  320.             SpawnPlayer(playerid);
  321.         }
  322.         else
  323.         {
  324.             if(!response) return Kick(playerid);
  325.             Player[playerid][LoginAttempts]++;
  326.  
  327.             if(Player[playerid][LoginAttempts] == 3)
  328.             {
  329.                 ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login System", "You have exhausted your access attempts. "COL_RED"(3/3).", "Quit", "");
  330.                 DelayedKick(playerid);
  331.             }
  332.             else
  333.             {
  334.                 ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login System", "Wrong password!\n Enter your password below.", "Login", "Quit");
  335.             }
  336.         }
  337.     }
  338.     case DIALOG_REGISTER:
  339.     {
  340.         if(!response) return Kick(playerid);
  341.         if(strlen(inputtext) <= 4) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Register System", "The password must contain at least 5 characters.\n Enter a valid password below.", "Next", "Quit");
  342.         for (new i = 0; i < 16; i++) Player[playerid][Salt][i] = random(94) + 33;
  343.         SHA256_PassHash(inputtext, Player[playerid][Salt], Player[playerid][Password], 65);
  344.         new query[280];
  345.         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]);
  346.         mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
  347.     }
  348.     case DIALOG_SKIN:
  349.     {
  350.         if(!response) return Kick(playerid);
  351.         new skinid;
  352.         skinid = strval(inputtext);
  353.         {
  354.             if(skinid < 1 || skinid > 311) return ShowPlayerDialog(playerid, DIALOG_SKIN, DIALOG_STYLE_INPUT, "Registration System", "Select a skin.\nAvailable id's: 1-311.", "Next", "Quit");
  355.         }
  356.         SetPlayerSkin(playerid, skinid);
  357.         new query[280];
  358.         mysql_tquery(g_SQL, query, "OnPlayerRegisterCorrectly", "d", playerid);
  359.     }
  360.     }
  361.     return 1;
  362. }
  363.  
  364.  
  365. forward OnPlayerDataLoaded(playerid, race_check);
  366. public OnPlayerDataLoaded(playerid, race_check)
  367. {
  368.     if(race_check != g_MysqlRaceCheck[playerid]) return Kick(playerid);
  369.     if(cache_num_rows() > 0)
  370.     {
  371.         cache_get_value(0, "password", Player[playerid][Password], 65);
  372.         cache_get_value(0, "salt", Player[playerid][Salt], 17);
  373.         Player[playerid][Cache_ID] = cache_save();
  374.         ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login System", "Enter your password to log in.\n You have 60 seconds to log in.", "Next", "Quit");
  375.         Player[playerid][LoginTimer] = SetTimerEx("OnLoginTimeout", SECONDS_TO_LOGIN * 1000, false, "d", playerid);
  376.     }
  377.     else
  378.     {
  379.         new string[128];
  380.         format(string, sizeof(string), "Welcome %s, to register a new account enter a password below.", RemoveUnderScore(playerid));
  381.         ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"Registration System", string, "Next", "Quit");
  382.     }
  383.     return 1;
  384. }
  385.  
  386. forward OnLoginTimeout(playerid);
  387. public OnLoginTimeout(playerid)
  388. {
  389.     Player[playerid][LoginTimer] = 0;
  390.     ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login System", "You have been kicked in.\n Motivation:\n You have run out of time to login.", "Quit", "");
  391.     DelayedKick(playerid);
  392.     return 1;
  393. }
  394.  
  395. forward OnPlayerRegister(playerid);
  396. public OnPlayerRegister(playerid)
  397. {
  398.     Player[playerid][ID] = cache_insert_id();
  399.     new skinid, query[128];
  400.     ShowPlayerDialog(playerid, DIALOG_SKIN, DIALOG_STYLE_INPUT, "Registration System", "Select a skin.\nAvailable id's: 1-311.", "Select", "Quit");
  401.     SetPlayerSkin(playerid, skinid);
  402.     mysql_format(g_SQL, query, sizeof query, "UPDATE `players`  SET `skin` =%d WHERE `id` =%d LIMIT 1", Player[playerid][pSkin], Player[playerid][ID]);
  403.     mysql_tquery(g_SQL, query, "", "");
  404.     Player[playerid][IsLoggedIn] = true;
  405.     Player[playerid][X_Pos] = DEFAULT_POS_X;
  406.     Player[playerid][Y_Pos] = DEFAULT_POS_Y;
  407.     Player[playerid][Z_Pos] = DEFAULT_POS_Z;
  408.     Player[playerid][A_Pos] = DEFAULT_POS_A;
  409.     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);
  410.     SpawnPlayer(playerid);
  411.     mysql_tquery(g_SQL, query, "OnPlayerRegisterCorrectly", "d", playerid);
  412.     return 1;
  413. }
  414.  
  415. forward OnPlayerRegisterCorrectly(playerid);
  416. public OnPlayerRegisterCorrectly(playerid)
  417. {
  418.     GivePlayerMoney(playerid, 5000);
  419.     SendFormattedMessage(playerid, COLOR_GREEN, "You registered correctly. Welcome %s!", GetName(playerid));
  420.     return 1;
  421. }
  422. forward _KickPlayerDelayed(playerid);
  423. public _KickPlayerDelayed(playerid)
  424. {
  425.     Kick(playerid);
  426.     return 1;
  427. }
  428.  
  429. AssignPlayerData(playerid)
  430. {
  431.     cache_get_value_int(0, "id", Player[playerid][ID]);
  432.     cache_get_value_int(0, "skin", Player[playerid][pSkin]);
  433.     cache_get_value_float(0, "x", Player[playerid][X_Pos]);
  434.     cache_get_value_float(0, "y", Player[playerid][Y_Pos]);
  435.     cache_get_value_float(0, "z", Player[playerid][X_Pos]);
  436.     cache_get_value_float(0, "angle", Player[playerid][A_Pos]);
  437.     return 1;
  438. }
  439.  
  440. DelayedKick(playerid, time = 500)
  441. {
  442.     SetTimerEx("_KickPlayerDelayed", time, false, "d", playerid);
  443.     return 1;
  444. }
  445.  
  446. SetupPlayerTable()
  447. {
  448.     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`))");
  449.     return 1;
  450. }
  451.  
  452. UpdatePlayerData(playerid, reason)
  453. {
  454.     if (Player[playerid][IsLoggedIn] == false) return 0;
  455.     if (reason == 1)
  456.     {
  457.         GetPlayerPos(playerid, Player[playerid][X_Pos], Player[playerid][Y_Pos], Player[playerid][Z_Pos]);
  458.         GetPlayerFacingAngle(playerid, Player[playerid][A_Pos]);
  459.     }
  460.    
  461.     new query[145];
  462.     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]);
  463.     mysql_tquery(g_SQL, query);
  464.     return 1;
  465. }
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement