ylleron

yBank v1.7a

Sep 4th, 2011
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 11.61 KB | None | 0 0
  1. /*
  2. *               YLLERON'S BANK SYSTEM
  3. *                    2011 (C)
  4. *   You can't present this script as your, or
  5. *   make version and public it without my perm.
  6. *
  7. *                                   Version: 1.7a
  8. *                                                       Cheers Y
  9. */
  10.  
  11. #include <a_samp>
  12. #tryinclude <dini>
  13.  
  14. // Defines ---------------------------------------------------------------------
  15. //------------------------------------------------------------------------------
  16. #define MAX_BANK            50
  17. //-----------------------------|
  18. #define YBANK_FILE_PATH     "/ybank/users/%s.ini"
  19.  
  20. #define c_YBANK::           c_YBANK_
  21. #define YBANK::             YBANK_
  22. #define PDATA::             PDATA_
  23. //-----------------------------|
  24. #define YDIALOG             ShowPlayerDialog
  25. //-----------------------------|
  26. #define INPUT               DIALOG_STYLE_INPUT
  27. #define LIST                DIALOG_STYLE_LIST
  28. #define BOX                 DIALOG_STYLE_MSGBOX
  29. //-----------------------------|
  30. #define SCRIPT:%0(%1) \
  31.                     forward %0(%1); \
  32.                     public %0(%1)
  33.  
  34. #define PRIVATE:%0(%1) \
  35.                     stock %0(%1)
  36. //-----------------------------|
  37. #define YD_DEPOSITACCOUNT   100
  38. #define YD_ACCOUNTSTATUS    101
  39. #define YD_TRANSACTAMOUT    102
  40. #define YD_DRAWACCOUNT      103
  41. #define YD_TRANSACTID       104
  42. #define YD_CHANGEPASS       105
  43. #define YD_GETPASS          106
  44. #define YD_REGIST           107
  45. #define YD_DELACC           108
  46. #define YD_BASIC            109
  47. #define YD_LOGIN            110
  48.  
  49. //-----------------------------|
  50. #define C_RED       0xFF0000AA
  51. //-----------------------------|
  52.  
  53. enum e_ybank
  54. {
  55.     Float:Float_X,
  56.     Float:Float_Y,
  57.     Float:Float_Z,
  58.     NameBank[50],
  59.     IdDialog,
  60.     IdPickup,
  61.     Cash
  62. }
  63.  
  64. enum e_ypData
  65. {
  66.     TransactName[32],
  67.     TransactID,
  68.     bool:Log
  69. }
  70.  
  71. new YBANK::[MAX_BANK][e_ybank];
  72. new YBANK::MAX_COUNT = 0;
  73.  
  74. static PDATA::[MAX_PLAYERS][e_ypData];
  75.  
  76. SCRIPT: yOnDialogResponse ( playerid, dialogid, response, listitem, inputtext[] )
  77. {
  78.     for ( new i=0;i<YBANK::MAX_COUNT;i++ )
  79.     {
  80.         if ( dialogid == YBANK::[i][IdDialog] )
  81.         {
  82.             new nb[ 50 ];
  83.             format ( nb,50,"Bank %s", YBANK::[i][NameBank] );
  84.             switch ( listitem )
  85.             {
  86.                 case 0:
  87.                 {
  88.                     new _Str1 [ 80 ];
  89.                     format (_Str1, sizeof (_Str1), "YBANK: On your account is $%i", ybank_Money(playerid) );
  90.                     YDIALOG ( playerid, YBANK::[i][IdDialog], LIST, nb, "Account status\nDraw from account\nDeposit to account\nTransact cash\nDelete Account\nChange pass", "OK", "");
  91.                 }
  92.                 case 1:
  93.                 {
  94.                     YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, nb, "YBANK: Please type amout to draw", "OK", "" );
  95.                 }
  96.                 case 2:
  97.                 {
  98.                     YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, nb, "YBANK: Please type amout to deposit", "OK", "" );
  99.                 }
  100.                 case 3:
  101.                 {
  102.                     YDIALOG ( playerid, YD_TRANSACTID, INPUT, nb, "YBANK: Please type id of given player", "OK", "" );
  103.                 }
  104.                 case 4:
  105.                 {
  106.                     YDIALOG ( playerid, YD_DELACC, BOX, nb, "YBANK: Are you sure?", "Yes", "No" );
  107.                 }
  108.                 case 5:
  109.                 {
  110.                     YDIALOG ( playerid, YD_CHANGEPASS, INPUT, nb, "YBANK: Please type your new password", "OK", "Cancel" );
  111.                 }
  112.                 case 6:
  113.                 {
  114.                     return true;
  115.                 }
  116.             }
  117.         }
  118.         break;
  119.     }
  120.     if ( dialogid == YD_BASIC )
  121.     {
  122.         if ( response )
  123.         {
  124.             return 1;
  125.         }
  126.     }
  127.     if ( dialogid == YD_REGIST )
  128.     {
  129.         if ( response )
  130.         {
  131.             YDIALOG ( playerid, YD_GETPASS, INPUT, "Please fill following textfield", "Type your password to you account", "Submit", "" );
  132.         }
  133.     }
  134.     if ( dialogid == YD_LOGIN )
  135.     {
  136.         if ( response )
  137.         {
  138.             if (!strlen(inputtext)) return YDIALOG ( playerid, YD_LOGIN, INPUT, "Error", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  139.             else
  140.             {
  141.                 new pass[20], fp[70];
  142.                 format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  143.  
  144.                 strcat( pass, dini_Get(fp, "BankPass"), 20 );
  145.                 if (phash(inputtext) == strval(pass))
  146.                 {
  147.                     PDATA::[playerid][Log] = true;
  148.                     SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully logged in your account" );
  149.                 }
  150.             }
  151.         }
  152.     }
  153.     if ( dialogid == YD_GETPASS )
  154.     {
  155.         if ( response )
  156.         {
  157.             if (!strlen(inputtext) || strlen(inputtext) > 12) return SendClientMessage ( playerid, C_RED, "YBANK: Password lenght must be in 4-12 range" );
  158.             else
  159.             {
  160.                 new fp[70];
  161.                 format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  162.  
  163.                 dini_Create(fp);
  164.  
  165.                 // Password
  166.                 dini_IntSet(fp, "BankPass", phash(inputtext));
  167.  
  168.                 // Bank cash
  169.                 dini_IntSet(fp, "BankCash", 0);
  170.  
  171.                 SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully registered in bank" );
  172.             }
  173.         }
  174.     }
  175.  
  176.     if ( dialogid == YD_DRAWACCOUNT )
  177.     {
  178.         if ( response ) {
  179.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, "Bank" , "YBANK: Please type amout to draw", "OK", "" );
  180.             if ( ybank_Money( playerid ) < strval(inputtext) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have so much money on your account!" );
  181.             else
  182.             {
  183.                 new pDraw = strval(inputtext);
  184.                 GivePlayerMoney( playerid, pDraw );
  185.                 ybank_Delete ( playerid, pDraw );
  186.  
  187.                 new _Str [ 90 ];
  188.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou draw: $%i", ybank_Money ( playerid ), pDraw );
  189.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  190.             }
  191.         }
  192.     }
  193.     if ( dialogid == YD_DEPOSITACCOUNT )
  194.     {
  195.         if ( response )
  196.         {
  197.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, "Error", "YBANK: Please type amout to deposit", "OK", "" );
  198.             if ( GetPlayerMoney ( playerid ) < strval( inputtext ) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have amout, you typed" );
  199.             else
  200.             {
  201.                 new pDeposit = strval( inputtext );
  202.                 GivePlayerMoney ( playerid, -pDeposit);
  203.                 ybank_Add ( playerid, pDeposit );
  204.  
  205.                 new _Str [ 90 ];
  206.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou deposit: $%i", ybank_Money ( playerid ), pDeposit );
  207.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  208.             }
  209.         }
  210.     }
  211.     if ( dialogid == YD_TRANSACTID )
  212.     {
  213.         if ( response )
  214.         {
  215.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTID, INPUT, "Error", "YBANK: Please type id/name of given player", "OK", "Cancel" );
  216.             if (IsNumeric(inputtext))
  217.             {
  218.                 new targetid = strval(inputtext);
  219.                 if ( IsPlayerConnected(targetid) )
  220.                 {
  221.                     PDATA::[playerid][TransactID] = targetid;
  222.                 }
  223.             }
  224.             else
  225.             {
  226.                 strcat( PDATA::[playerid][TransactName], inputtext, 32 );
  227.  
  228.                 YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Bank", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  229.             }
  230.         }
  231.     }
  232.     if ( dialogid == YD_TRANSACTAMOUT )
  233.     {
  234.         if ( response )
  235.         {
  236.             new amout = strval(inputtext);
  237.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  238.             if ( !IsNumeric ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  239.             else
  240.             {
  241.                 new targetid = PDATA::[playerid][TransactID];
  242.                 if ( IsPlayerConnected (targetid) )
  243.                 {
  244.                     ybank_Add ( targetid, amout );
  245.                     ybank_Delete ( playerid, amout );
  246.                 }
  247.                 else
  248.                 {
  249.                     new fp[70];
  250.                     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(getId(inputtext)));
  251.  
  252.                     if ( dini_Exists(fp) )
  253.                     {
  254.                         ybank_Add ( getId(inputtext), amout );
  255.                         ybank_Delete ( playerid, amout );
  256.                     }
  257.                 }
  258.                 new _Str [ 90 ];
  259.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou transact: $%i (ID: %i)", ybank_Money ( playerid ), amout, targetid );
  260.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  261.             }
  262.         }
  263.     }
  264.     if ( dialogid == YD_DELACC )
  265.     {
  266.         if ( response )
  267.         {
  268.             new fp[70];
  269.             format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  270.  
  271.             fremove(fp);
  272.             SendClientMessage(playerid, C_RED, "YBANK: Your account has been deleted!");
  273.         }
  274.     }
  275.     if ( dialogid == YD_CHANGEPASS )
  276.     {
  277.         if ( response )
  278.         {
  279.             new fp[70];
  280.             format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  281.             if ( dini_Exists (fp) )
  282.             {
  283.                 dini_IntSet(fp, "BankPass", phash(inputtext));
  284.             }
  285.         }
  286.     }
  287.     return true;
  288. }
  289.  
  290. SCRIPT: yOnPlayerPickUpPickup ( playerid, pickupid )
  291. {
  292.     for ( new i=0;i<YBANK::MAX_COUNT;i++ )
  293.     {
  294.         if ( pickupid == YBANK::[i][IdPickup] )
  295.         {
  296.             YBANK::[i][IdDialog] = i;
  297.             //----------------------------------------
  298.             new fp[70];
  299.             format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  300.             //-----------------------------------------
  301.             if (!dini_Exists(fp))
  302.             {
  303.                 new str[ 100 ];
  304.                 format( str, sizeof(str), "Welcome %s", getName(playerid));
  305.                 YDIALOG ( playerid, YD_REGIST, BOX, str, "Do you want create account in our bank?", "Yes", "No, thanks" );
  306.             }
  307.             else
  308.             {
  309.                 if ( !PDATA::[playerid][Log] )
  310.                 {
  311.                     YDIALOG ( playerid, YD_LOGIN, INPUT, "Login", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  312.                 }
  313.                 else
  314.                 {
  315.                     new nb[ 50 ];
  316.                     format(nb,50,"Bank %s", YBANK::[i][NameBank]);
  317.                     YDIALOG ( playerid, YBANK::[i][IdDialog], LIST, nb, "Account status\nDraw from account\nDeposit to account\nTransact cash\nDelete Account\nChange pass", "OK", "");
  318.                 }
  319.             }
  320.         }
  321.     }
  322.     return true;
  323. }
  324.  
  325. SCRIPT: CreateYBank( Float:X, Float:Y, Float:Z, bankname[] )
  326. {
  327.     if ( YBANK::MAX_COUNT <= MAX_BANK )
  328.     {
  329.         YBANK::MAX_COUNT++;
  330.  
  331.         new bankid = YBANK::MAX_COUNT;
  332.  
  333.         YBANK::[bankid][Float_X] = X;
  334.         YBANK::[bankid][Float_Y] = Y;
  335.         YBANK::[bankid][Float_Z] = Z;
  336.         strmid( YBANK::[bankid][NameBank], bankname, 0, strlen( bankname ), 50 );
  337.  
  338.         CreateYBankPickup( bankid, X, Y, Z);
  339.         printf ( "YBANK - Banks created %i", YBANK::MAX_COUNT );
  340.     }
  341.     else
  342.     {
  343.         printf ( "YBANK says: BANK limit exceed! Banks created %i", YBANK::MAX_COUNT );
  344.         return false;
  345.     }
  346.     return true;
  347. }
  348.  
  349. SCRIPT: CreateYBankPickup( bankid, Float:X, Float:Y, Float:Z)
  350. {
  351.     YBANK::[bankid][IdPickup] = CreatePickup( 1318, 1, X, Y, Z, 0 );
  352.     return true;
  353. }
  354.  
  355. ybank_SetMoney( playerid, cash )
  356. {
  357.     new fp[70];
  358.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid)));
  359.     if ( dini_Exists(fp) )
  360.         return dini_IntSet( fp, "BankCash", cash );
  361.     return 1;
  362. }
  363.  
  364. ybank_Delete( playerid, cash )
  365. {
  366.     new fp[70];
  367.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  368.  
  369.     if ( dini_Exists(fp ) )
  370.         return dini_IntSet( fp, "BankCash", dini_Int( fp, "BankCash")-cash );
  371.     return 1;
  372. }
  373.  
  374. ybank_Money( playerid )
  375. {
  376.     new fp[70];
  377.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  378.  
  379.     if ( dini_Exists(fp ) )
  380.         return dini_Int( fp, "BankCash");
  381.     return 1;
  382. }
  383.  
  384. ybank_Add( playerid, cash )
  385. {
  386.     new fp[70];
  387.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  388.  
  389.     if ( dini_Exists(fp ) )
  390.         return dini_IntSet( fp, "BankCash", dini_Int(fp, "BankCash" )+cash );
  391.     return 1;
  392. }
  393.  
  394. getId(pname[])
  395. {
  396.     for ( new i=0;i<MAX_PLAYERS;i++ ) {
  397.         if ( !strcmp(pname, getName(i), true) ) {
  398.             return i;
  399.         }
  400.     }
  401.     return -1;
  402. }
  403.  
  404. getName(playerid)
  405. {
  406.     new n[25];
  407.     GetPlayerName(playerid, n, sizeof(n));
  408.     return n;
  409. }
  410.  
  411. stock phash(buf[])
  412. {
  413.     new length=strlen(buf);
  414.     new s1 = 1;
  415.     new s2 = 0;
  416.     new n;
  417.     for (n=0; n<length; n++)
  418.     {
  419.        s1 = (s1 + buf[n]) % 65521;
  420.        s2 = (s2 + s1)     % 65521;
  421.     }
  422.     return (s2 << 16) + s1;
  423. }
  424.  
  425. stock IsNumeric(string[])
  426. {
  427.     for (new i = 0, j = strlen(string); i < j; i++)
  428.     {
  429.         if (string[i] > '9' || string[i] < '0')
  430.         {
  431.             return 0;
  432.         }
  433.     }
  434.     return 1;
  435. }
Add Comment
Please, Sign In to add comment