ylleron

yBank v2.1

Feb 13th, 2012
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 15.28 KB | None | 0 0
  1. /*
  2. *               YLLERON'S BANK SYSTEM
  3. *                    2011-2012 (C)
  4. *   You can't present this script as your, or
  5. *   make version and public it without my perm.
  6. *
  7. *                                   Version: 2.1
  8. *
  9. */
  10.  
  11. #include <a_samp>
  12. #include <sscanf2>
  13. #include <YSI\y_master>
  14. #include <YSI\y_ini>
  15.  
  16. // Defines ---------------------------------------------------------------------
  17. //------------------------------------------------------------------------------
  18. #define MAX_BANK            50
  19. //-----------------------------|
  20. #define ybank_path          "/ybank/%s.ini"
  21. //-----------------------------|
  22. #define yBankDialog         ShowPlayerDialog
  23. #define INI_Exists          fexist
  24. //-----------------------------|
  25. #define INPUT               DIALOG_STYLE_INPUT
  26. #define LIST                DIALOG_STYLE_LIST
  27. #define BOX                 DIALOG_STYLE_MSGBOX
  28.  
  29. #define fc%0(%1)       forward %0(%1);\
  30.                             public %0(%1)
  31.  
  32. //-----------------------------|
  33. #define yd_transactcash     100
  34. #define yd_transactid       101
  35. #define yd_changepass       102
  36. #define yd_makepass         103
  37. #define yd_dialogid         104
  38. #define yd_deposit          105
  39. #define yd_default          106
  40. #define yd_delete           107
  41. #define yd_login            108
  42. #define yd_draw             109
  43. #define yd_make             110
  44. #define yd_menu             111
  45. //-----------------------------|
  46. #define C_RED       0xFF0000AA
  47. #define CD_GREEN    "{00FF00}"
  48. #define C_DKGREEN           0x548B54AA
  49. //-----------------------------|
  50.  
  51. enum Y_ENUM_DATA
  52.     {
  53.         Float:Float_X,
  54.         Float:Float_Y,
  55.         Float:Float_Z,
  56.         IdDialog,
  57.         IdPickup,
  58.     };
  59.  
  60. enum YP_ENUM_DATA
  61.     {
  62.         TransactName[32],
  63.         TransactID,
  64.         bool:Log,
  65.         Pass,
  66.         Cash
  67.     };
  68.  
  69. new
  70.     yBank[MAX_BANK][Y_ENUM_DATA],
  71.     yBankPlayer[MAX_PLAYERS][YP_ENUM_DATA],
  72.     yBankCount = 0
  73.     ;
  74.  
  75. fc ydialog(playerid, dialogid, response, listitem, inputtext[])
  76. {
  77.     switch (dialogid)
  78.     {
  79.         case yd_menu:
  80.         {
  81.             if (response)
  82.             {
  83.                 switch (listitem)
  84.                 {
  85.                     case 0:
  86.                     {
  87.                         new s[200];
  88.                         format(s, sizeof(s), "{FFFFFF}System yBank (Your account info)\n\nInformations for account:\t"CD_GREEN"%s\n\
  89.                                                                                          {FFFFFF}For this account is cash:\t"CD_GREEN"$%d",
  90.                                                                                             getName(playerid), GetYBankMoney(playerid));
  91.  
  92.                         yBankDialog(playerid, yd_default, BOX, ""CD_GREEN"Powered by yBank (v2.1)", s, "Cancel", "");
  93.                     }
  94.                     case 1:
  95.                     {
  96.                         yBankDialog(playerid, yd_draw, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Please type amout to draw", "Submit", "Cancel");
  97.                     }
  98.                     case 2:
  99.                     {
  100.                         yBankDialog(playerid, yd_deposit, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Please type amout to deposit", "Submit", "Cancel");
  101.                     }
  102.                     case 3:
  103.                     {
  104.                         yBankDialog(playerid, yd_transactid, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Please type ID of given player", "Submit", "Cancel");
  105.                     }
  106.                     case 4:
  107.                     {
  108.                         yBankDialog(playerid, yd_changepass, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Please type your new password", "Submit", "Cancel");
  109.                     }
  110.                     case 5:
  111.                     {
  112.                         // DELETE ACCOUNT
  113.                         yBankDialog(playerid, yd_delete, BOX, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Do you want to delete you account? Are you sure?", "Yes", "No");
  114.                     }
  115.  
  116.                 }
  117.             }
  118.         }
  119.         case yd_default:
  120.         {
  121.             if (response) {
  122.                 yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  123.             }
  124.         }
  125.         case yd_makepass:
  126.         {
  127.             if (response)
  128.             {
  129.                 yBankDialog(playerid, yd_make, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFFFF}yBank: Type password for login to your account", "Sign In", "Cancel");
  130.             }
  131.         }
  132.         case yd_make:
  133.         {
  134.             if (response)
  135.             {
  136.                 new Password[32];
  137.                 if (sscanf(inputtext, "s[32]", Password))   return yBankDialog(playerid, yd_makepass, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Error\nYou must fill following field with your password! (1-16 chars)", "Submit", "");
  138.                 else
  139.                 {
  140.                     CallLocalFunction("yMakeBank", "is", playerid, inputtext);
  141.                 }
  142.             }
  143.         }
  144.         case yd_login:
  145.         {
  146.             if (response)
  147.             {
  148.                 new Password[32];
  149.                 if (sscanf(inputtext, "s[32]", Password))       return yBankDialog(playerid, yd_login, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Error\nYou must fill following field with your password!", "Submit", "Cancel");
  150.                 else
  151.                 {
  152.                     CallLocalFunction("yLoginBank", "is", playerid, inputtext);
  153.                 }
  154.             }
  155.         }
  156.         case yd_draw:
  157.         {
  158.             if (response)
  159.             {
  160.                 new DrawCash;
  161.                 if (sscanf(inputtext, "i", DrawCash))   return yBankDialog(playerid, yd_draw, INPUT, ""CD_GREEN"Powered by yBank (v2.1)" , "{FF0000}Error\nPlease type amout to draw", "Submit", "" );
  162.                 else
  163.                 {
  164.                     if (GetYBankMoney(playerid) < DrawCash) return SendClientMessage(playerid, C_RED, "Error: You don't have so much money on your account!");
  165.                     if (DrawCash == 0) return SendClientMessage (playerid, C_RED, "yBank: Invalid cash!");
  166.  
  167.                     GivePlayerMoney(playerid, DrawCash);
  168.                     TakeYBankMoney(playerid, DrawCash);
  169.  
  170.                     new s[200];
  171.                     format(s, sizeof(s), "{FFFFFF}System yBank (Your account info)\n\nInformations for account:\t"CD_GREEN"%s\n\
  172.                                                                               {FFFFFF}For this account is cash:\t"CD_GREEN"$%i\n\
  173.                                                                               {FFFFFF}Withdrawed:\t\t\t"CD_GREEN"$%d",
  174.                                                                                         getName(playerid), GetYBankMoney(playerid), DrawCash);
  175.  
  176.                     return yBankDialog(playerid, yd_default, BOX, ""CD_GREEN"Powered by yBank (v2.1)", s, "Cancel", "");
  177.                 }
  178.             }
  179.             else return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  180.         }
  181.         case yd_deposit:
  182.         {
  183.             if(response)
  184.             {
  185.                 new DepositCash;
  186.                 if (sscanf(inputtext, "i", DepositCash))    return yBankDialog(playerid, yd_deposit, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Error\nPlease type amout to deposit", "OK", "" );
  187.                 else
  188.                 {
  189.                     if (GetPlayerMoney(playerid) < DepositCash)     return SendClientMessage (playerid, C_RED, "yBank: You don't have so much money to deposit!");
  190.                     if (DepositCash == 0) return SendClientMessage (playerid, C_RED, "yBank: Invalid cash!");
  191.  
  192.                     GivePlayerMoney(playerid, -DepositCash);
  193.                     GiveYBankMoney(playerid, DepositCash);
  194.  
  195.                     new s[200];
  196.                     format(s, sizeof(s), "{FFFFFF}System yBank (Your account info)\n\nInformations for account:\t"CD_GREEN"%s\n\
  197.                                                                                       {FFFFFF}For this account is cash:\t"CD_GREEN"$%i\n\
  198.                                                                                       {FFFFFF}Deposited:\t\t\t"CD_GREEN"$%d",
  199.                                                                                         getName(playerid), GetYBankMoney(playerid), DepositCash);
  200.  
  201.                     return yBankDialog(playerid, yd_default, BOX, ""CD_GREEN"Powered by yBank (v2.1)", s, "Cancel", "");
  202.                 }
  203.             }
  204.             else return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  205.         }
  206.         case yd_transactid:
  207.         {
  208.             if (response)
  209.             {
  210.                 new Player;
  211.                 if (sscanf(inputtext, "i", Player))     return yBankDialog(playerid, yd_transactid, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Error\nPlease type id of given player", "OK", "Cancel" );
  212.                 else
  213.                 {
  214.                     if (!IsPlayerConnected(Player))     return SendClientMessage(playerid, C_RED, "Error: This player is not connected!");
  215.                     if (Player == (playerid))   return SendClientMessage(playerid, C_RED, "Error: This player is you!");
  216.  
  217.                     yBankPlayer[playerid][TransactID] = Player;
  218.                     return yBankDialog(playerid, yd_transactcash, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "yBank: Type amout cash to transact", "Continue", "Cancel");
  219.                 }
  220.             }
  221.             else return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  222.         }
  223.         case yd_transactcash:
  224.         {
  225.             if (response)
  226.             {
  227.                 new TransactCash;
  228.                 if (sscanf(inputtext, "d", TransactCash))   return yBankDialog(playerid, yd_transactcash, BOX, ""CD_GREEN"Powered by yBank (v2.1)", "Error\nType amout cash to transact", "Send", "Cancel");
  229.                 else
  230.                 {
  231.                     new Player = yBankPlayer[playerid][TransactID];
  232.  
  233.                     if (TransactCash == 0) return SendClientMessage (playerid, C_RED, "yBank: Invalid cash!");
  234.  
  235.                     GiveYBankMoney(Player, TransactCash);
  236.                     TakeYBankMoney(playerid, TransactCash);
  237.  
  238.                     new s[200];
  239.                     format(s, sizeof(s), "{FFFFFF}System yBank (Your account info)\n\nInformations for account:\t"CD_GREEN"%s\n\
  240.                                                                                       {FFFFFF}For this account is cash:\t"CD_GREEN"$%i\n\
  241.                                                                                       {FFFFFF}Transacted:\t\t\t"CD_GREEN"$%d",
  242.                                                                                         getName(playerid), GetYBankMoney(playerid), TransactCash);
  243.  
  244.                     return yBankDialog(playerid, yd_default, BOX, ""CD_GREEN"Powered by yBank (v2.1)", s, "Cancel", "");
  245.                 }
  246.             }
  247.             else return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  248.         }
  249.         case yd_delete:
  250.         {
  251.             if (response)
  252.             {
  253.                 DeleteYBank(playerid);
  254.                 SendClientMessage(playerid, C_DKGREEN, "* yBank: Your account has been deleted!");
  255.             }
  256.         }
  257.         case yd_changepass:
  258.         {
  259.             if (response)
  260.             {
  261.                 new fp[ 70 ];
  262.                 format(fp, sizeof(fp), ybank_path, getName(playerid));
  263.                
  264.                 if (INI_Exists(fp))
  265.                 {
  266.                     new
  267.                         INI:pFile = INI_Open(fp)
  268.                     ;
  269.                    
  270.                     INI_WriteInt(pFile, "Password", phash(inputtext));
  271.                     INI_Close( pFile );
  272.                    
  273.                     yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  274.                     SendClientMessage(playerid, C_DKGREEN, "* yBank: Your password has been success changed!");
  275.                 }
  276.             }
  277.             else return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  278.         }
  279.     }
  280.     return true;
  281. }
  282.  
  283. fc ypickup(playerid)
  284. {
  285.     //----------------------------------------
  286.     new fp[ 70 ];
  287.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  288.     //-----------------------------------------
  289.     if (!INI_Exists(fp))
  290.     {
  291.         return yBankDialog(playerid, yd_makepass, BOX, ""CD_GREEN"Powered by yBank (v2.1)", "{FFFF00}Do you want create account in our bank?", "Yes", "No, thanks");
  292.     }
  293.     else
  294.     {
  295.         if (!yBankPlayer[playerid][Log])
  296.         {
  297.             yBankDialog(playerid, yd_login, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "Welcome!\nPlease type your password below:", "Log In", "Cancel");
  298.         }
  299.         else
  300.         {
  301.             yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  302.         }
  303.     }
  304.     return true;
  305. }
  306.  
  307. fc CreateYBank(Float:X, Float:Y, Float:Z)
  308. {
  309.     if (yBankCount <= MAX_BANK)
  310.     {
  311.         // increase number of banks
  312.         yBankCount++;
  313.  
  314.         new
  315.             bankid = yBankCount
  316.         ;
  317.  
  318.         yBank[bankid][Float_X] = X;
  319.         yBank[bankid][Float_Y] = Y;
  320.         yBank[bankid][Float_Z] = Z;
  321.  
  322.         yBank[bankid][IdPickup] = CreatePickup(1318, 2, X, Y, Z, 0);
  323.         printf("yBank loaded ->> Package banks opened and loaded %i/"#MAX_BANK"", yBankCount);
  324.  
  325.     }
  326.     else
  327.     {
  328.    
  329.         printf ("yBank loaded ->> Package banks not opened! Limit Exceed: %i/"#MAX_BANK"", yBankCount);
  330.         return false;
  331.     }
  332.     return true;
  333. }
  334.  
  335.  
  336. SetYBankMoney(playerid, cash)
  337. {
  338.     new fp[ 70 ];
  339.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  340.    
  341.     if (INI_Exists(fp))
  342.     {
  343.         new
  344.             INI:pFile = INI_Open(fp)
  345.         ;
  346.        
  347.         INI_WriteInt(pFile, "Cash", cash);
  348.         INI_Close( pFile );
  349.     }
  350.     return 1;
  351. }
  352.  
  353. GetYBankMoney(playerid)
  354. {
  355.     new fp[ 70 ];
  356.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  357.  
  358.     if (INI_Exists(fp))
  359.     {
  360.         INI_ParseFile(fp, "LoadUserData", .bExtra = true, .extra = playerid);
  361.         return yBankPlayer[playerid][Cash];
  362.     }
  363.     return 1;
  364. }
  365.  
  366. TakeYBankMoney(playerid, cash)
  367. {
  368.     new fp[ 70 ];
  369.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  370.  
  371.     if (INI_Exists(fp))
  372.     {
  373.         new
  374.             INI:pFile = INI_Open(fp),
  375.             TakeCash = (yBankPlayer[playerid][Cash]-cash)
  376.         ;
  377.        
  378.         INI_WriteInt(pFile, "Cash", TakeCash);
  379.         INI_Close( pFile );
  380.     }
  381.     return 1;
  382. }
  383.  
  384. GiveYBankMoney(playerid, cash)
  385. {
  386.     new fp[ 70 ];
  387.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  388.  
  389.     if (INI_Exists(fp))
  390.     {
  391.         new
  392.             INI:pFile = INI_Open(fp),
  393.             GiveCash = ( yBankPlayer[playerid][Cash]+cash )
  394.         ;
  395.        
  396.         INI_WriteInt(pFile, "Cash", GiveCash);
  397.         INI_Close( pFile );
  398.     }
  399.     return 1;
  400. }
  401.  
  402. DeleteYBank(playerid)
  403. {
  404.     new fp[ 70 ];
  405.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  406.  
  407.     fremove(fp);
  408.     return 0;
  409. }
  410.  
  411. getName(playerid)
  412. {
  413.     new n[25];
  414.     GetPlayerName(playerid, n, sizeof(n));
  415.     return n;
  416. }
  417.  
  418. phash(buf[])
  419. {
  420.     new length=strlen(buf);
  421.     new s1 = 1;
  422.     new s2 = 0;
  423.     new n;
  424.     for (n=0; n<length; n++)
  425.     {
  426.        s1 = (s1 + buf[n]) % 65521;
  427.        s2 = (s2 + s1)     % 65521;
  428.     }
  429.     return (s2 << 16) + s1;
  430. }
  431.  
  432. fc LoadUserData(playerid, name[], value[])
  433. {
  434.     INI_Int("Password", yBankPlayer[playerid][Pass]);
  435.     INI_Int("Cash", yBankPlayer[playerid][Cash]);
  436.     return 1;
  437. }
  438.  
  439. fc yMakeBank(playerid, passw[])
  440. {
  441.     //----------------------------------------
  442.     new fp[ 70 ];
  443.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  444.     //-----------------------------------------
  445.     new
  446.         INI:pFile = INI_Open(fp)
  447.     ;
  448.    
  449.     INI_WriteInt(pFile, "Password", phash(passw));
  450.     INI_WriteInt(pFile, "Cash",     0);
  451.     INI_Close( pFile );
  452.     //--------------------------------------------------------------------------
  453.     SendClientMessage(playerid, C_DKGREEN, "* yBank: You've been success registered!");
  454.     return yBankDialog(playerid, yd_login, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Login\nType your password to login!", "Log In", "Cancel");
  455. }
  456.  
  457. fc yLoginBank(playerid, passw[])
  458. {
  459.     //----------------------------------------
  460.     new fp[ 70 ];
  461.     format(fp, sizeof(fp), ybank_path, getName(playerid));
  462.     //-----------------------------------------
  463.    
  464.     INI_ParseFile(fp, "LoadUserData", .bExtra = true, .extra = playerid);
  465.     if (phash(passw) == yBankPlayer[playerid][Pass])
  466.     {
  467.         yBankPlayer[playerid][Log] = true;
  468.         //---
  469.         SendClientMessage(playerid, C_DKGREEN, "* yBank: You've been success logged in!");
  470.         return yBankDialog(playerid, yd_menu, LIST, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Account status\n{FFFFFF}Withdraw\nDeposit\nTransact\nChange Pass\nDelete Account", "Choose", "Exit");
  471.     }
  472.     else
  473.     {
  474.         SendClientMessage(playerid, C_RED, "yBank: You've typed bad password!");
  475.         return yBankDialog(playerid, yd_login, INPUT, ""CD_GREEN"Powered by yBank (v2.1)", "{FF0000}Error\nYou typed bad password! Please, again!", "Log In", "Cancel");
  476.     }
  477. }
Add Comment
Please, Sign In to add comment