Guest User

Login and register (n_ini) by Neufox

a guest
Nov 28th, 2014
466
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.56 KB | None | 0 0
  1. /*
  2.     n_ini.inc include by Neufox
  3.     n_ini (INI-File) test by Neufox, Test/basic login and register system
  4. */
  5.  
  6. #include <a_samp>
  7. #include <n_ini>
  8.  
  9. #define HASH_PASSWORD       true//true = use whirpool plugin(by Y_Less) to hash passwords [RECOMMENDED]
  10. #define USER_PATH           "Accounts/%s.ini"//The path where user files will be saved
  11. #define MAX_PASSWORD        54//Maximum length of password
  12. #define MIN_PASSWORD        4//Minimum length of password
  13.  
  14. #if(!INI_AUTO_SAVE)//this is also a default setting, but still confirming it :p
  15.     #undef INI_AUTO_SAVE
  16.     #define INI_AUTO_SAVE true
  17. #endif
  18.  
  19. #if(HASH_PASSWORD)
  20.     native WP_Hash(buffer[], len, const str[]);
  21. #endif
  22.  
  23. //the profile data enums
  24. enum PlayerEnums
  25. {
  26.     Password[129],
  27.     Admin,
  28.     Vip,
  29.     Score,
  30.     Money,
  31.     Deaths,
  32.     Kills,
  33.     IsLogged,
  34.     IP[16]
  35. }
  36. new PlayerInfo[MAX_PLAYERS][PlayerEnums];//the variable in which these are stored
  37.  
  38. public OnFilterScriptInit()
  39. {
  40.     print("Test LOGIN & REGISTER SYSTEM Loaded with (n_ini.inc)");
  41.     print("Credits: Neufox, ENJOY!");
  42.     return 1;
  43. }
  44.  
  45. public OnFilterScriptExit()
  46. {
  47.     return 1;
  48. }
  49.  
  50. stock UserPath(playerid)//Automatically directs to user profile saving path
  51. {
  52.     new pName[MAX_PLAYER_NAME], Path[60];
  53.     GetPlayerName(playerid, pName, sizeof(pName));
  54.     format(Path, sizeof(Path), USER_PATH, pName);
  55.     return Path;
  56. }
  57.  
  58. public OnPlayerConnect(playerid)
  59. {
  60.     //Reseting all the player data
  61.     for(new i; i < _: PlayerEnums; ++i)
  62.     {
  63.         PlayerInfo[playerid][PlayerEnums: i] = 0;
  64.     }
  65.  
  66.     if(INI_Exist(UserPath(playerid)))//if login
  67.     {
  68.         ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Login", "Please insert your complicated password below.\n\nNOTE: Don't use this password in other servers!", "Login", "Leave");
  69.     }
  70.     else//if register
  71.     {
  72.         ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Register", "Please insert a complicated password below.\n\nNOTE: Don't use this password in other servers!", "Register", "Leave");
  73.     }
  74.     return 1;
  75. }
  76.  
  77. public OnPlayerDisconnect(playerid, reason)
  78. {
  79.     if(INI_Exist(UserPath(playerid)))//save profile if exist
  80.     {
  81.         INI_Open(UserPath(playerid));
  82.         INI_WriteInt("Admin", PlayerInfo[playerid][Admin]);
  83.         INI_WriteInt("Vip", PlayerInfo[playerid][Vip]);
  84.         INI_WriteInt("Score", GetPlayerScore(playerid));
  85.         INI_WriteInt("Money", GetPlayerMoney(playerid));
  86.         INI_WriteInt("Deaths", PlayerInfo[playerid][Deaths]);
  87.         INI_WriteInt("Kills", PlayerInfo[playerid][Kills]);
  88.         INI_WriteInt("IsLogged", 0);
  89.         INI_Close();
  90.     }
  91.    
  92.     //Reseting all the player data
  93.     for(new i; i < _: PlayerEnums; ++i)
  94.     {
  95.         PlayerInfo[playerid][PlayerEnums: i] = 0;
  96.     }
  97.     return 1;
  98. }
  99.  
  100. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  101. {
  102.     if(dialogid == 0)//dialog login
  103.     {
  104.         if(response)
  105.         {
  106.             if(strlen(inputtext) < MIN_PASSWORD || strlen(inputtext) > MAX_PASSWORD)//invalid password
  107.             {
  108.                 ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PASSWORD, "Register", "Please insert a complicated password below.\n\nNOTE: Don't use this password in other servers!\n\nERROR: The password length must be between ("#MIN_PASSWORD" - "#MAX_PASSWORD").", "Register", "Leave");
  109.             }
  110.             else
  111.             {
  112.                 #if(HASH_PASSWORD)
  113.                     new HashPass[129];
  114.                     WP_Hash(HashPass, sizeof(HashPass), inputtext);
  115.                 #endif
  116.  
  117.                 GetPlayerIp(playerid, PlayerInfo[playerid][IP], 16);
  118.  
  119.                 INI_Open(UserPath(playerid));//now making user profile
  120.                 #if(HASH_PASSWORD)
  121.                     INI_WriteString("Password", HashPass);
  122.                 #else
  123.                     INI_WriteString("Password", inputtext);
  124.                 #endif
  125.                 INI_WriteString("IP", PlayerInfo[playerid][IP]);
  126.                 INI_WriteInt("Admin", 0);
  127.                 PlayerInfo[playerid][Admin] = 0;
  128.                 INI_WriteInt("Vip", 0);
  129.                 PlayerInfo[playerid][Vip] = 0;
  130.                 INI_WriteInt("Score", GetPlayerScore(playerid));
  131.                 PlayerInfo[playerid][Score] = GetPlayerScore(playerid);
  132.                 INI_WriteInt("Money", GetPlayerMoney(playerid));
  133.                 PlayerInfo[playerid][Money] = GetPlayerMoney(playerid);
  134.                 INI_WriteInt("Deaths", 0);
  135.                 PlayerInfo[playerid][Deaths] = 0;
  136.                 INI_WriteInt("Kills", 0);
  137.                 PlayerInfo[playerid][Kills] = 0;
  138.                 INI_WriteInt("IsLogged", 1);
  139.                 PlayerInfo[playerid][IsLogged] = 1;
  140.                 INI_Close();
  141.                 SendClientMessage(playerid, -1, "ACCOUNT: You have been successfully registered.");//now he/she is done
  142.             }
  143.         }
  144.     }
  145.     else if(dialogid == 1)//dialog register
  146.     {
  147.         if(response)
  148.         {
  149.             if(strlen(inputtext) < MIN_PASSWORD || strlen(inputtext) > MAX_PASSWORD)//invalid password
  150.             {
  151.                 ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Login", "Please insert your complicated password below.\n\nNOTE: Don't use this password in other servers!\n\nERROR: The password length must be between ("#MIN_PASSWORD" - "#MAX_PASSWORD").", "Login", "Leave");
  152.             }
  153.             else
  154.             {
  155.                 GetPlayerIp(playerid, PlayerInfo[playerid][IP], 16);
  156.  
  157.                 INI_Open(UserPath(playerid));//getting the password only, to check if its correct or matching to "inputtext"
  158.                 format(PlayerInfo[playerid][Password], 129, INI_ReadString("Password"));
  159.                 INI_Close();
  160.  
  161.                 #if(HASH_PASSWORD)
  162.                     new HashPass[129];
  163.                     WP_Hash(HashPass, sizeof(HashPass), inputtext);
  164.                 #endif
  165.  
  166.                 if(!strcmp(HashPass, PlayerInfo[playerid][Password]))//password is correct
  167.                 {
  168.                     INI_Open(UserPath(playerid));//loading user profile
  169.                     if(strcmp(INI_ReadString("IP"), PlayerInfo[playerid][IP]))
  170.                     {
  171.                         INI_WriteString("IP", PlayerInfo[playerid][IP]);
  172.                     }
  173.                     PlayerInfo[playerid][Admin] = INI_ReadInt("Admin");
  174.                     PlayerInfo[playerid][Vip] = INI_ReadInt("Vip");
  175.                     PlayerInfo[playerid][Score] = INI_ReadInt("Score");
  176.                     SetPlayerScore(playerid, PlayerInfo[playerid][Score]);
  177.                     PlayerInfo[playerid][Money] = INI_ReadInt("Money");
  178.                     ResetPlayerMoney(playerid);
  179.                     GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
  180.                     PlayerInfo[playerid][Deaths] = INI_ReadInt("Deaths");
  181.                     PlayerInfo[playerid][Kills] = INI_ReadInt("Kills");
  182.                     INI_WriteInt("IsLogged", 1);
  183.                     PlayerInfo[playerid][IsLogged] = 1;
  184.                     INI_Close();//now he/she is done!
  185.                 }
  186.                 else//ops! wrong password
  187.                 {
  188.                     ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Login", "Please insert your complicated password below.\n\nNOTE: Don't use this password in other servers!\n\nERROR: Wrong password, LEAVE if you are not the real owner of this account.", "Login", "Leave");
  189.                 }
  190.             }
  191.         }
  192.     }
  193.     return 1;
  194. }
  195.  
  196. public OnPlayerDeath(playerid, killerid, reason)
  197. {
  198.     if(killerid != INVALID_PLAYER_ID)//adding deaths count to player
  199.     {
  200.         PlayerInfo[playerid][Deaths] ++;
  201.     }
  202.  
  203.     if(playerid != INVALID_PLAYER_ID)//adding kills count to killer
  204.     {
  205.         PlayerInfo[killerid][Kills] ++;
  206.     }
  207.     return 1;
  208. }
  209.  
  210. public OnPlayerCommandText(playerid, cmdtext[])
  211. {
  212.     if(!strcmp("/stats", cmdtext))//just a simple stats command, well i recommend (zcmd or ycmd)
  213.     {
  214.         if(! IsPlayerLogged(playerid))//only logged in users can access this cmd
  215.         {
  216.             return SendClientMessage(playerid, 0x0BBF6AA, "ACCOUNT: You must be logged in.");
  217.         }
  218.        
  219.         new string[129], pDEATHS, pNAME[MAX_PLAYER_NAME];
  220.         GetPlayerName(playerid, pNAME, sizeof(pNAME));
  221.         pDEATHS = PlayerInfo[playerid][Deaths];
  222.         if(pDEATHS == 0)
  223.         {
  224.             pDEATHS = 1;
  225.         }
  226.         format( string,
  227.                 sizeof(string),
  228.                 "Username: %s | Id: %d | Money: $%d | Score: %d | Kills: %d | Deaths: %d | K/D Ratio: %0.2f | AdminLevel: %d | VIPLevel: %d",
  229.                 pNAME, playerid, GetPlayerMoney(playerid), GetPlayerScore(playerid), PlayerInfo[playerid][Kills], PlayerInfo[playerid][Deaths], Float:PlayerInfo[playerid][Kills]/Float:pDEATHS, PlayerInfo[playerid][Admin], PlayerInfo[playerid][Vip]);
  230.         SendClientMessage(  playerid,
  231.                             0x0BBF6AA,
  232.                             string);
  233.     }
  234.  
  235.     if(!strcmp("/admincommand", cmdtext))
  236.     {
  237.         if(! IsPlayerLogged(playerid))//only logged in users can access this cmd
  238.         {
  239.             return SendClientMessage(playerid, 0x0BBF6AA, "ACCOUNT: You must be logged in.");
  240.         }
  241.        
  242.         if(GetPlayerAdminLevel(playerid) > 0)//means, admin level 1 or higher
  243.         {
  244.             //do your stuff
  245.         }
  246.     }
  247.    
  248.     if(!strcmp("/vipcommand", cmdtext))
  249.     {
  250.         if(! IsPlayerLogged(playerid))//only logged in users can access this cmd
  251.         {
  252.             return SendClientMessage(playerid, 0x0BBF6AA, "ACCOUNT: You must be logged in.");
  253.         }
  254.        
  255.         if(GetPlayerVipLevel(playerid) > 0)//means, vip level 1 or higher
  256.         {
  257.             //do your stuff
  258.         }
  259.     }
  260.     return 1;
  261. }
  262.  
  263. //Usefull stock functions
  264. stock GetPlayerAdminLevel(playerid) return PlayerInfo[playerid][Admin];
  265.  
  266. stock SetPlayerAdminLevel(playerid, level) return PlayerInfo[playerid][Admin] = level;
  267.  
  268. stock GetPlayerVipLevel(playerid) return PlayerInfo[playerid][Vip];
  269.  
  270. stock SetPlayerVipLevel(playerid, level) return PlayerInfo[playerid][Vip] = level;
  271.  
  272. stock IsPlayerLogged(playerid) return PlayerInfo[playerid][IsLogged];
Advertisement
Add Comment
Please, Sign In to add comment