Guest User

Untitled

a guest
Jun 5th, 2015
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.38 KB | None | 0 0
  1. /*
  2.  
  3.     Register & Login system using BUD - Blazing User Database
  4.    
  5.     Credits:
  6.             * BUD by Slice
  7.             * BUD tutorial by Rock
  8.             * ZCMD by Zeex - Improved by Yashas
  9.             * SSCANF plugin by Y_Less
  10.             * SA-MP Team - Past & Present (including beta testers)
  11.            
  12.             * Compuphase for PAWN
  13.            
  14.     To do:
  15.             - Add autologin
  16.             - Document/Comment & Why is it done the way it is scripted
  17.             - Improve code readability and names
  18.             - Improve dialog text (colors, etc.)
  19.  
  20.     DONE:
  21.            
  22.             - Add minimum and maximum password characters
  23.             - Add 3 tries to Login
  24.  
  25. */
  26.  
  27. #include                    < a_samp >
  28. #include                    < izcmd >
  29. #include                    < sscanf2 >
  30.  
  31. #if defined MAX_PLAYERS
  32.     #undef MAX_PLAYERS
  33. #endif
  34.  
  35. #define MAX_PLAYERS         50
  36.  
  37. #define BUD_USE_WHIRLPOOL   false // false - if you don't want to use the WHIRLPOOL plugin and true if we use it
  38. #define BUD_MAX_COLUMNS     10 // 10 - max number of columns witch will be alowed in the database
  39. #include                    < BUD >
  40.  
  41. #define MAX_LOGIN_ATTEMPTS  3
  42.  
  43. enum
  44. {
  45.     Register_D1,
  46.     Login_D1,
  47.     Success_1,
  48.     Success_0
  49. }
  50.  
  51. enum data
  52. {
  53.     isLoggedIn,
  54.     Login_Attempts
  55. }
  56. new Player_Info[MAX_PLAYERS][data];
  57.  
  58. main()
  59. {
  60.     print(" zero_11 started");
  61. }
  62.  
  63. public OnGameModeInit()
  64. {
  65.     SetGameModeText("Blank Script");
  66.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  67.    
  68.     BUD::Setting(  opt.Database,        "Users.db"  ); // "Users.db" will be the name of the database we create
  69.     BUD::Setting(  opt.Asynchronous,    true    ); // If it's true it will be faster but in case of anything happens with your computer the database can be corrupted.
  70.     BUD::Setting(  opt.KeepAliveTime,   3000   ); // The database will remain active vor 3000 milliseconds after it's used, this is useful for performance
  71.     BUD::Setting(  opt.CheckForUpdates, true ); // Name says it all, true if you want to search for updates
  72.    
  73.     BUD::Initialize( );
  74.    
  75.     BUD::VerifyColumn(  "Money", BUD::TYPE_NUMBER, 50 ); // 50 - optional parameter, this will add value 50 to column "Money" when it's created
  76.    
  77.     //BUD::VerifyColumn(  "Rank", BUD::TYPE_STRING, "Newbie"  );
  78.     return 1;
  79. }
  80.  
  81. public OnGameModeExit()
  82. {
  83.     BUD::Exit( );
  84.     return 1;
  85. }
  86.  
  87. public OnPlayerRequestClass(playerid, classid)
  88. {
  89.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  90.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  91.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  92.     return 1;
  93. }
  94.  
  95. stock GetName( playerid )
  96. {
  97.         new _RocKzSk[ MAX_PLAYER_NAME ];
  98.         GetPlayerName( playerid, _RocKzSk, sizeof _RocKzSk );
  99.         return ( _RocKzSk );
  100. }
  101.  
  102. public OnPlayerConnect(playerid)
  103. {
  104.     Player_Info[playerid][isLoggedIn] = 0;
  105.     Player_Info[playerid][Login_Attempts] = 1;
  106.     new _rK[ 128 ];
  107.     if( !BUD::IsNameRegistered( GetName( playerid ) ) )
  108.     {
  109.         format( _rK, sizeof( _rK ), "Welcome %s\nYou need an account to play on this server.", GetName( playerid ) );
  110.         ShowPlayerDialog( playerid, Register_D1, DIALOG_STYLE_INPUT, "New Account", _rK, "Register", "Kick" );
  111.     }
  112.     else
  113.     {
  114.         format( _rK, sizeof( _rK ), "Welcome %s\nThis account is already registered.\nLogin now.", GetName( playerid ) );
  115.         ShowPlayerDialog( playerid, Login_D1, DIALOG_STYLE_INPUT, "Login", _rK, "Login", "Kick" );
  116.     }
  117.     return 1;
  118. }
  119.  
  120. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  121. {
  122.     if(dialogid == Register_D1 && response == 1)
  123.     {
  124.         if(strlen(inputtext) >= 3 && strlen(inputtext) <= 16)
  125.         {
  126.             if ( BUD::RegisterName( GetName( playerid ), inputtext ))
  127.             {
  128.                    new iUID = BUD::GetNameUID( GetName( playerid ) );
  129.                    BUD::MultiSet( iUID, "s", "Password", inputtext );
  130.                    new _rK[ 128 ];
  131.                    format( _rK, sizeof( _rK ), "Welcome %s\nThis account is already registered.\nLogin now.", GetName( playerid ) );
  132.                    ShowPlayerDialog( playerid, Login_D1, DIALOG_STYLE_INPUT, "Login", _rK, "Login", "Kick" );
  133.             }
  134.         }
  135.         else
  136.         {
  137.             new _rK[ 128 ];
  138.             format( _rK, sizeof( _rK ), "Welcome %s\nYou need an account to play on this server.", GetName( playerid ) );
  139.             ShowPlayerDialog( playerid, Register_D1, DIALOG_STYLE_INPUT, "Password minimum: 3 and maximum: 16", _rK, "Register", "Kick" );
  140.         }
  141.     }
  142.     else if(dialogid == Register_D1 && response == 0) return Kick(playerid);
  143.  
  144.     if(dialogid == Login_D1 && response == 1)
  145.     {
  146.         if( BUD::CheckAuth( GetName( playerid ), inputtext ))
  147.         {
  148.             new _Money, iUID = BUD::GetNameUID( GetName( playerid ) );
  149.             BUD::MultiGet( iUID, "i", "Money", _Money);
  150.             GivePlayerMoney( playerid, _Money );
  151.             SetPlayerScore( playerid, _Money );
  152.             Player_Info[playerid][isLoggedIn] = 1;
  153.             ShowPlayerDialog(playerid, Success_1, DIALOG_STYLE_MSGBOX, "Logged In", "Congratulations...", "Okay", "");
  154.         }
  155.         else
  156.         {
  157.             #if defined MAX_LOGIN_ATTEMPTS
  158.                 if(Player_Info[playerid][Login_Attempts] < MAX_LOGIN_ATTEMPTS)
  159.                 {
  160.                     Player_Info[playerid][Login_Attempts]++;
  161.                     new _rK[ 128 ];
  162.                     format( _rK, sizeof( _rK ), "Welcome %s\nThis account is already registered.\nLogin now.", GetName( playerid ) );
  163.                     ShowPlayerDialog( playerid, Login_D1, DIALOG_STYLE_INPUT, "Login", _rK, "Login", "Kick" );
  164.                 }
  165.                 else if(Player_Info[playerid][Login_Attempts] >= MAX_LOGIN_ATTEMPTS) return Kick(playerid);
  166.             #else
  167.                 new _rK[ 128 ];
  168.                 format( _rK, sizeof( _rK ), "Welcome %s\nThis account is already registered.\nLogin now.", GetName( playerid ) );
  169.                 ShowPlayerDialog( playerid, Login_D1, DIALOG_STYLE_INPUT, "Login", _rK, "Login", "Kick" );
  170.             #endif
  171.         }
  172.     }
  173.     else if(dialogid == Login_D1 && response == 0) return Kick(playerid);
  174.     return 1;
  175. }
  176.  
  177. public OnPlayerDisconnect(playerid, reason)
  178. {
  179.     if( Player_Info[playerid][isLoggedIn] == 1)
  180.     {
  181.         new iUID = BUD::GetNameUID( GetName( playerid ) );
  182.         BUD::MultiSet( iUID, "i","Money", GetPlayerMoney( playerid ));
  183.     }
  184.    
  185.     Player_Info[playerid][isLoggedIn] = 0;
  186.     Player_Info[playerid][Login_Attempts] = 0;
  187.     return 1;
  188. }
  189.  
  190. CMD:givemoney(playerid, params[]) // need to test ingame & add chat messages
  191. {
  192.     new target, money;
  193.     if(sscanf(params, "ii", target, money)) return SendClientMessage(playerid, 0xFFFFFF, "USE: /givemoney [player ID] [Money Ammount]");
  194.     if(target != INVALID_PLAYER_ID)
  195.     {
  196.         GivePlayerMoney(target, money);
  197.     }
  198.     else SendClientMessage(playerid, 0xFFFFFF, "Wrong ID! Player not connected.");
  199.     return 1;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment