ylleron

YBANK v1.6

Aug 22nd, 2011
613
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.95 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.6
  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_pData
  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_pData];
  75.  
  76. SCRIPT: yOnDialogResponse ( playerid, dialogid, response, listitem, inputtext[] )
  77. {
  78.     for ( new i=0;i<YBANK::MAX_COUNT;i++ ) {
  79.         if ( dialogid == YBANK::[i][IdDialog] ) {
  80.             new nb[ 50 ];
  81.             format ( nb,50,"Bank %s", YBANK::[i][NameBank] );
  82.             switch ( listitem ) {
  83.                 case 0:
  84.                 {
  85.                     new _Str1 [ 80 ];
  86.                     format (_Str1, sizeof (_Str1), "YBANK: On your account is $%i", ybank_Money(playerid) );
  87.                     YDIALOG (playerid, YD_ACCOUNTSTATUS, BOX, nb, _Str1, "OK", "");
  88.                 }
  89.                 case 1:
  90.                 {
  91.                     YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, nb, "YBANK: Please type amout to draw", "OK", "" );
  92.                 }
  93.                 case 2:
  94.                 {
  95.                     YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, nb, "YBANK: Please type amout to deposit", "OK", "" );
  96.                 }
  97.                 case 3:
  98.                 {
  99.                     YDIALOG ( playerid, YD_TRANSACTID, INPUT, nb, "YBANK: Please type id of given player", "OK", "" );
  100.                 }
  101.                 case 4:
  102.                 {
  103.                     YDIALOG ( playerid, YD_DELACC, BOX, nb, "YBANK: Are you sure?", "Yes", "No" );
  104.                 }
  105.                 case 5:
  106.                 {
  107.                     YDIALOG ( playerid, YD_CHANGEPASS, INPUT, nb, "YBANK: Please type your new password", "OK", "Cancel" );
  108.                 }
  109.                 case 6:
  110.                 {
  111.                     return true;
  112.                 }
  113.             }
  114.         }
  115.     }
  116.     if ( dialogid == YD_BASIC ) {
  117.         if ( response ) return true;
  118.     }
  119.     if ( dialogid == YD_REGIST ) {
  120.         if ( response ) {
  121.             YDIALOG ( playerid, YD_GETPASS, INPUT, "Please fill following textfield", "Type your password to you account", "Submit", "" );
  122.         }
  123.     }
  124.     if ( dialogid == YD_LOGIN ) {
  125.         if ( response ) {
  126.             if (!strlen(inputtext)) return YDIALOG ( playerid, YD_LOGIN, INPUT, "Error", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  127.             else
  128.             {
  129.                 new pass[20];
  130.                 strcat( pass, dini_Get(fPath(playerid), "BankPass"), 20 );
  131.                 if (phash(inputtext) == strval(pass)) {
  132.                     PDATA::[playerid][Log] = true;
  133.                     SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully logged in your account" );
  134.                 }
  135.             }
  136.         }
  137.     }
  138.     if ( dialogid == YD_GETPASS ) {
  139.         if ( response ) {
  140.             if (!strlen(inputtext) || strlen(inputtext) > 12) return SendClientMessage ( playerid, C_RED, "YBANK: Password lenght must be in 4-12 range" );
  141.             else
  142.             {
  143.                 dini_Create(fPath(playerid));
  144.                
  145.                 // Password
  146.                 dini_IntSet(fPath(playerid), "BankPass", phash(inputtext));
  147.                
  148.                 // Bank cash
  149.                 dini_IntSet(fPath(playerid), "BankCash", 0);
  150.                
  151.                 SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully registered in bank" );
  152.             }
  153.         }
  154.     }
  155.        
  156.     if ( dialogid == YD_DRAWACCOUNT ) {
  157.         if ( response ) {
  158.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, "Bank" , "YBANK: Please type amout to draw", "OK", "" );
  159.             if ( ybank_Money( playerid ) < strval(inputtext) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have so much money on your account!" );
  160.             else
  161.             {
  162.                 new pDraw = strval(inputtext);
  163.                 GivePlayerMoney( playerid, pDraw );
  164.                 ybank_Delete ( playerid, pDraw );
  165.  
  166.                 new _Str [ 90 ];
  167.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou draw: $%i", ybank_Money ( playerid ), pDraw );
  168.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  169.             }
  170.         }
  171.     }
  172.     if ( dialogid == YD_DEPOSITACCOUNT ) {
  173.         if ( response ) {
  174.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, "Error", "YBANK: Please type amout to deposit", "OK", "" );
  175.             if ( GetPlayerMoney ( playerid ) < strval( inputtext ) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have amout, you typed" );
  176.             else
  177.             {
  178.                 new pDeposit = strval( inputtext );
  179.                 GivePlayerMoney ( playerid, -pDeposit);
  180.                 ybank_Add ( playerid, pDeposit );
  181.                
  182.                 new _Str [ 90 ];
  183.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou deposit: $%i", ybank_Money ( playerid ), pDeposit );
  184.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  185.             }
  186.         }
  187.     }
  188.     if ( dialogid == YD_TRANSACTID ) {
  189.         if ( response ) {
  190.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTID, INPUT, "Error", "YBANK: Please type id/name of given player", "OK", "Cancel" );
  191.             if (IsNumeric(inputtext))
  192.             {
  193.                 new targetid = strval(inputtext);
  194.                 if ( IsPlayerConnected(targetid) ) {
  195.                     PDATA::[playerid][TransactID] = targetid;
  196.                 }
  197.             }
  198.             else {
  199.                 strcat( PDATA::[playerid][TransactName], inputtext, 32 );
  200.  
  201.                 YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Bank", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  202.                 return true;
  203.             }
  204.         }
  205.     }
  206.     if ( dialogid == YD_TRANSACTAMOUT ) {
  207.         if ( response ) {
  208.             new amout = strval(inputtext);
  209.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  210.             if ( !IsNumeric ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  211.             else
  212.             {
  213.                 new targetid = PDATA::[playerid][TransactID];
  214.                 if ( IsPlayerConnected (targetid) ) {
  215.                    
  216.                     ybank_Add ( targetid, amout );
  217.                     ybank_Delete ( playerid, amout );
  218.                 }
  219.                 else {
  220.                     if ( dini_Exists(fPath(getId(inputtext))) ) {
  221.                         ybank_Add ( getId(inputtext), amout );
  222.                         ybank_Delete ( playerid, amout );
  223.                     }
  224.                 }
  225.                 new _Str [ 90 ];
  226.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou transact: $%i (ID: %i)", ybank_Money ( playerid ), amout, targetid );
  227.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  228.             }
  229.         }
  230.     }
  231.     if ( dialogid == YD_DELACC ) {
  232.         if ( response ) {
  233.             fremove(fPath(playerid));
  234.             SendClientMessage(playerid, C_RED, "YBANK: Your account has been deleted!");
  235.         }
  236.     }
  237.     if ( dialogid == YD_CHANGEPASS ) {
  238.         if ( response ) {
  239.             if ( dini_Exists (fPath(playerid)) ) {
  240.                 dini_IntSet(fPath(playerid), "BankPass", phash(inputtext));
  241.             }
  242.         }
  243.     }
  244.     return true;
  245. }
  246.  
  247. SCRIPT: yOnPlayerPickUpPickup ( playerid, pickupid )
  248. {
  249.     for ( new i=0;i<YBANK::MAX_COUNT;i++ ) {
  250.         if ( pickupid == YBANK::[i][IdPickup] ) {
  251.             YBANK::[i][IdDialog] = i;
  252.             //-----------------------------------------
  253.             if (!dini_Exists(fPath(playerid)))
  254.             {
  255.                 new str[ 100 ];
  256.                 format( str, sizeof(str), "Welcome %s", getName(playerid));
  257.                 YDIALOG ( playerid, YD_REGIST, BOX, str, "Do you want create account in our bank?", "Yes", "No, thanks" );
  258.             }
  259.             else
  260.             {
  261.                 if (!PDATA::[playerid][Log])
  262.                 {
  263.                     YDIALOG ( playerid, YD_LOGIN, INPUT, "Login", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  264.                 }
  265.                 else
  266.                 {
  267.                     new nb[ 50 ];
  268.                     format(nb,50,"Bank %s", YBANK::[i][NameBank]);
  269.                     YDIALOG ( playerid, YBANK::[i][IdDialog], LIST, nb, "Account status\nDraw from account\nDeposit to account\nTransact cash\nDelete Account\nCancel", "OK", "");
  270.                 }
  271.             }
  272.         }
  273.     }
  274.     return true;
  275. }
  276.  
  277. SCRIPT: CreateYBank( Float:X, Float:Y, Float:Z, bankname[] )
  278. {
  279.     if ( YBANK::MAX_COUNT <= MAX_BANK ) {
  280.         YBANK::MAX_COUNT++;
  281.        
  282.         new bankid = YBANK::MAX_COUNT;
  283.        
  284.         YBANK::[bankid][Float_X] = X;
  285.         YBANK::[bankid][Float_Y] = Y;
  286.         YBANK::[bankid][Float_Z] = Z;
  287.         strmid( YBANK::[bankid][NameBank], bankname, 0, strlen( bankname ), 50 );
  288.  
  289.         CreateYBankPickup( bankid, X, Y, Z);
  290.         printf ( "YBANK - Banks created %i", YBANK::MAX_COUNT );
  291.     }
  292.     else {
  293.         printf ( "YBANK says: BANK limit exceed! Banks created %i", YBANK::MAX_COUNT );
  294.         return false;
  295.     }
  296.     return true;
  297. }
  298.  
  299. SCRIPT: CreateYBankPickup( bankid, Float:X, Float:Y, Float:Z)
  300. {
  301.     YBANK::[bankid][IdPickup] = CreatePickup( 1318, 2, X, Y, Z, 0 );
  302.     return true;
  303. }
  304.  
  305. ybank_SetMoney( playerid, cash )
  306. {
  307.     if ( dini_Exists(fPath(playerid) ) )
  308.         return dini_IntSet( fPath(playerid), "BankCash", cash );
  309.     return 1;
  310. }
  311.  
  312. ybank_Delete( playerid, cash )
  313. {
  314.     if ( dini_Exists(fPath(playerid) ) )
  315.         return dini_IntSet( fPath(playerid), "BankCash", dini_Int( fPath(playerid), "BankCash")-cash );
  316.     return 1;
  317. }
  318.  
  319. ybank_Money( playerid )
  320. {
  321.     if ( dini_Exists(fPath(playerid) ) )
  322.         return dini_Int(fPath(playerid), "BankCash");
  323.     return 1;
  324. }
  325.  
  326. ybank_Add( playerid, cash )
  327. {
  328.     if ( dini_Exists(fPath(playerid) ) )
  329.         return dini_IntSet( fPath(playerid), "BankCash", dini_Int(fPath(playerid), "BankCash" )+cash );
  330.     return 1;
  331. }
  332.  
  333. getName(playerid)
  334. {
  335.     new n[32];
  336.     GetPlayerName( playerid, n, sizeof(n));
  337.     return n;
  338. }
  339.  
  340. getId(pname[])
  341. {
  342.     for ( new i=0;i<MAX_PLAYERS;i++ ) {
  343.         if ( !strcmp(pname, getName(i), true) ) {
  344.             return i;
  345.         }
  346.     }
  347.     return -1;
  348. }
  349.  
  350. fPath(playerid)
  351. {
  352.     new fp[70];
  353.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  354.     return fp;
  355. }
  356.  
  357. stock IsNumeric (str[])
  358. {
  359.     for (new i=0;i<strlen(str);i++) {
  360.         if (str[i] >= 0 && str[i] <= 9 ) return true;
  361.         else return false;
  362.     }
  363.     return -1;
  364. }
  365.  
  366. stock phash (buf[])
  367. {
  368.     new length = strlen( buf );
  369.     new s1 = 1;
  370.     new s2 = 0;
  371.     new n;
  372.     for ( n=0; n<length; n++ ) {
  373.        s1 = ( s1 + buf[n] ) % 65521;
  374.        s2 = ( s2 + s1 )     % 65521;
  375.     }
  376.     return ( s2 << 16 ) + s1;
  377. }
Add Comment
Please, Sign In to add comment