ylleron

YBANK v1.4a

Aug 15th, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.12 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. *                                                       Cheers Y
  8. */
  9.  
  10. #include <a_samp>
  11. #tryinclude <dini>
  12.  
  13. // Defines ---------------------------------------------------------------------
  14. //------------------------------------------------------------------------------
  15. #define MAX_BANK            50
  16. //-----------------------------|
  17. #define YBANK_FILE_PATH     "/ybank/users/%s.ini"
  18.  
  19. #define c_YBANK::           c_YBANK_
  20. #define YBANK::             YBANK_
  21. #define PDATA::             PDATA_
  22. //-----------------------------|
  23. #define YDIALOG             ShowPlayerDialog
  24. //-----------------------------|
  25. #define INPUT               DIALOG_STYLE_INPUT
  26. #define LIST                DIALOG_STYLE_LIST
  27. #define BOX                 DIALOG_STYLE_MSGBOX
  28. //-----------------------------|
  29. #define SCRIPT:%0(%1) \
  30.                     forward %0(%1); \
  31.                     public %0(%1)
  32.                    
  33. #define PRIVATE:%0(%1) \
  34.                     stock %0(%1)
  35. //-----------------------------|
  36. #define YD_DEPOSITACCOUNT   100
  37. #define YD_ACCOUNTSTATUS    101
  38. #define YD_TRANSACTAMOUT    102
  39. #define YD_DRAWACCOUNT      103
  40. #define YD_TRANSACTID       104
  41. #define YD_GETPASS          105
  42. #define YD_REGIST           106
  43. #define YD_DELACC           107
  44. #define YD_BASIC            108
  45. #define YD_LOGIN            109
  46.  
  47. //-----------------------------|
  48. #define C_RED       0xFF0000AA
  49. //-----------------------------|
  50.  
  51. enum e_ybank
  52. {
  53.     Float:Float_X,
  54.     Float:Float_Y,
  55.     Float:Float_Z,
  56.     NameBank[50],
  57.     IdDialog,
  58.     IdPickup,
  59.     Cash
  60. }
  61.  
  62. enum e_pData
  63. {
  64.     TransactID,
  65.     bool:Log
  66. }
  67.  
  68. new YBANK::[MAX_BANK][e_ybank];
  69. new YBANK::MAX_COUNT = 0;
  70.      
  71. static PDATA::[MAX_PLAYERS][e_pData];
  72.  
  73. SCRIPT: yOnDialogResponse ( playerid, dialogid, response, listitem, inputtext[] )
  74. {
  75.     for ( new i=0;i<YBANK::MAX_COUNT;i++ ) {
  76.         if ( dialogid == YBANK::[i][IdDialog] ) {
  77.             new nb[ 50 ];
  78.             format ( nb,50,"Bank %s", YBANK::[i][NameBank] );
  79.             switch ( listitem ) {
  80.                 case 0:
  81.                 {
  82.                     new _Str1 [ 80 ];
  83.                     format (_Str1, sizeof (_Str1), "YBANK: On your account is $%i", ybank_Money(playerid) );
  84.                     YDIALOG (playerid, YD_ACCOUNTSTATUS, BOX, nb, _Str1, "OK", "");
  85.                 }
  86.                 case 1:
  87.                 {
  88.                     YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, nb, "YBANK: Please type amout to draw", "OK", "" );
  89.                 }
  90.                 case 2:
  91.                 {
  92.                     YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, nb, "YBANK: Please type amout to deposit", "OK", "" );
  93.                 }
  94.                 case 3:
  95.                 {
  96.                     YDIALOG ( playerid, YD_TRANSACTID, INPUT, nb, "YBANK: Please type id of given player", "OK", "" );
  97.                 }
  98.                 case 4:
  99.                 {
  100.                     YDIALOG ( playerid, YD_DELACC, BOX, nb, "YBANK: Are you sure?", "Yes", "No" );
  101.                 }
  102.                 case 5:
  103.                 {
  104.                     return true;
  105.                 }
  106.             }
  107.         }
  108.     }
  109.     if ( dialogid == YD_BASIC ) {
  110.         if ( response ) return true;
  111.     }
  112.     if ( dialogid == YD_REGIST ) {
  113.         if ( response ) {
  114.             YDIALOG ( playerid, YD_GETPASS, INPUT, "Please fill following textfield", "Type your password to you account", "Submit", "" );
  115.         }
  116.     }
  117.     if ( dialogid == YD_LOGIN ) {
  118.         if ( response ) {
  119.             if (!strlen(inputtext)) return YDIALOG ( playerid, YD_LOGIN, INPUT, "Error", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  120.             else
  121.             {
  122.                 new pass[20];
  123.                 strcat( pass, dini_Get(fPath(playerid), "BankPass"), 20 );
  124.                 if ( !strcmp( inputtext, pass, false ) )
  125.                 {
  126.                     PDATA::[playerid][Log] = true;
  127.                     SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully logged in your account" );
  128.                 }
  129.             }
  130.         }
  131.     }
  132.     if ( dialogid == YD_GETPASS ) {
  133.         if ( response ) {
  134.             if (!strlen(inputtext) || strlen(inputtext) > 12) return SendClientMessage ( playerid, C_RED, "YBANK: Password lenght must be in 4-12 range" );
  135.             else
  136.             {
  137.                 dini_Create(fPath(playerid));
  138.                
  139.                 // Password
  140.                 dini_Set(fPath(playerid), "BankPass", inputtext);
  141.                
  142.                 // Bank cash
  143.                 dini_IntSet(fPath(playerid), "BankCash", 0);
  144.                
  145.                 SendClientMessage ( playerid, C_RED, "YBANK: You've been successfully registered in bank" );
  146.             }
  147.         }
  148.     }
  149.        
  150.     if ( dialogid == YD_DRAWACCOUNT ) {
  151.         if ( response ) {
  152.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DRAWACCOUNT, INPUT, "Bank" , "YBANK: Please type amout to draw", "OK", "" );
  153.             if ( ybank_Money( playerid ) < strval(inputtext) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have so much money on your account!" );
  154.             else
  155.             {
  156.                 new pDraw = strval(inputtext);
  157.                 GivePlayerMoney( playerid, pDraw );
  158.                 ybank_Delete ( playerid, pDraw );
  159.  
  160.                 new _Str [ 90 ];
  161.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou draw: $%i", ybank_Money ( playerid ), pDraw );
  162.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  163.             }
  164.         }
  165.     }
  166.     if ( dialogid == YD_DEPOSITACCOUNT ) {
  167.         if ( response ) {
  168.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_DEPOSITACCOUNT, INPUT, "Error", "YBANK: Please type amout to deposit", "OK", "" );
  169.             if ( GetPlayerMoney ( playerid ) < strval( inputtext ) ) return SendClientMessage ( playerid, C_RED, "YBANK: You don't have amout, you typed" );
  170.             else
  171.             {
  172.                 new pDeposit = strval( inputtext );
  173.                 GivePlayerMoney ( playerid, -pDeposit);
  174.                 ybank_Add ( playerid, pDeposit );
  175.                
  176.                 new _Str [ 90 ];
  177.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou deposit: $%i", ybank_Money ( playerid ), pDeposit );
  178.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  179.             }
  180.         }
  181.     }
  182.     if ( dialogid == YD_TRANSACTID ) {
  183.         if ( response ) {
  184.             new targetid = strval(inputtext);
  185.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTID, INPUT, "Error", "YBANK: Please type id of given player", "OK", "Cancel" );
  186.             if ( !IsNumeric ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTID, INPUT, "Error", "YBANK: Please type id of given player", "OK", "Cancel" );
  187.             if ( !IsPlayerConnected ( targetid ) ) return SendClientMessage(playerid, C_RED, "YBANK: This player is not connected!");
  188.             else
  189.             {
  190.                 PDATA::[playerid][TransactID] = strval(inputtext);
  191.                 YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Bank", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  192.                 return true;
  193.             }
  194.         }
  195.     }
  196.     if ( dialogid == YD_TRANSACTAMOUT ) {
  197.         if ( response ) {
  198.             new amout = strval(inputtext), targetid = PDATA::[playerid][TransactID];
  199.             if ( !strlen ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  200.             if ( !IsNumeric ( inputtext ) ) return YDIALOG ( playerid, YD_TRANSACTAMOUT, BOX, "Error", "YBANK: Type amout cash to transact", "OK", "Cancel" );
  201.             if ( !IsPlayerConnected ( targetid ) ) return SendClientMessage(playerid, C_RED, "YBANK: This player is not connected yet!");
  202.             else
  203.             {
  204.                 ybank_Add ( targetid, amout );
  205.                 ybank_Delete ( playerid, amout );
  206.                
  207.                 new _Str [ 90 ];
  208.                 format ( _Str, sizeof (_Str), "Cash in bank: $%i\nYou transact: $%i (ID: %i)", ybank_Money ( playerid ), amout, targetid );
  209.                 YDIALOG ( playerid, YD_BASIC, BOX, "Information", _Str, "OK", "" );
  210.             }
  211.         }
  212.     }
  213.     if ( dialogid == YD_DELACC ) {
  214.         if ( response ) {
  215.             fremove(fPath(playerid));
  216.             SendClientMessage(playerid, C_RED, "YBANK: Your account has been deleted!");
  217.         }
  218.     }
  219.     return true;
  220. }
  221.  
  222. SCRIPT: yOnPlayerPickUpPickup ( playerid, pickupid )
  223. {
  224.     for ( new i=0;i<YBANK::MAX_COUNT;i++ ) {
  225.         if ( pickupid == YBANK::[i][IdPickup] ) {
  226.             YBANK::[i][IdDialog] = i;
  227.             //-----------------------------------------
  228.             if (!dini_Exists(fPath(playerid)))
  229.             {
  230.                 new str[ 100 ];
  231.                 format( str, sizeof(str), "Welcome %s", getName(playerid));
  232.                 YDIALOG ( playerid, YD_REGIST, BOX, str, "Do you want create account in our bank?", "Yes", "No, thanks" );
  233.             }
  234.             else
  235.             {
  236.                 if (!PDATA::[playerid][Log])
  237.                 {
  238.                     YDIALOG ( playerid, YD_LOGIN, INPUT, "Login", "Welcome!\nPlease fill following field with your account password", "Login", "Cancel" );
  239.                 }
  240.                 else
  241.                 {
  242.                     new nb[ 50 ];
  243.                     format(nb,50,"Bank %s", YBANK::[i][NameBank]);
  244.                     YDIALOG ( playerid, YBANK::[i][IdDialog], LIST, nb, "Account status\nDraw from account\nDeposit to account\nTransact cash\nDelete Account\nCancel", "OK", "");
  245.                 }
  246.             }
  247.         }
  248.     }
  249.     return true;
  250. }
  251.  
  252. SCRIPT: CreateYBank( Float:X, Float:Y, Float:Z, bankname[] )
  253. {
  254.     if ( YBANK::MAX_COUNT <= MAX_BANK ) {
  255.         YBANK::MAX_COUNT++;
  256.        
  257.         new bankid = YBANK::MAX_COUNT;
  258.        
  259.         YBANK::[bankid][Float_X] = X;
  260.         YBANK::[bankid][Float_Y] = Y;
  261.         YBANK::[bankid][Float_Z] = Z;
  262.         strmid( YBANK::[bankid][NameBank], bankname, 0, strlen( bankname ), 50 );
  263.  
  264.         CreateYBankPickup( bankid, X, Y, Z);
  265.         printf ( "YBANK - Banks created %i", YBANK::MAX_COUNT );
  266.     }
  267.     else {
  268.         printf ( "YBANK says: BANK limit exceed! Banks created %i", YBANK::MAX_COUNT );
  269.         return false;
  270.     }
  271.     return true;
  272. }
  273.  
  274. SCRIPT: CreateYBankPickup( bankid, Float:X, Float:Y, Float:Z)
  275. {
  276.     YBANK::[bankid][IdPickup] = CreatePickup( 1318, 2, X, Y, Z, 0 );
  277.     return true;
  278. }
  279.  
  280. ybank_SetMoney( playerid, cash )
  281. {
  282.     if (dini_Exists(fPath(playerid)))
  283.         return dini_IntSet(fPath(playerid), "BankCash", cash);
  284.     return 1;
  285. }
  286.  
  287. ybank_Delete( playerid, cash )
  288. {
  289.     if (dini_Exists(fPath(playerid)))
  290.         return dini_IntSet(fPath(playerid), "BankCash", dini_Int(fPath(playerid), "BankCash")-cash);
  291.     return 1;
  292. }
  293.  
  294. ybank_Money( playerid )
  295. {
  296.     if (dini_Exists(fPath(playerid)))
  297.         return dini_Int(fPath(playerid), "BankCash");
  298.     return 1;
  299. }
  300.  
  301. ybank_Add( playerid, cash )
  302. {
  303.     if (dini_Exists(fPath(playerid)))
  304.         return dini_IntSet(fPath(playerid), "BankCash", dini_Int(fPath(playerid), "BankCash")+cash);
  305.     return 1;
  306. }
  307.  
  308. getName(playerid)
  309. {
  310.     new n[32];
  311.     GetPlayerName(playerid, n, sizeof(n));
  312.     return n;
  313. }
  314.  
  315. fPath(playerid)
  316. {
  317.     new fp[70];
  318.     format(fp, sizeof(fp), YBANK_FILE_PATH, getName(playerid));
  319.     return fp;
  320. }
  321.  
  322. stock IsNumeric (str[])
  323. {
  324.     for (new i=0;i<strlen(str);i++) {
  325.         if (str[i] >= 0 && str[i] <= 9 ) return true;
  326.         else return false;
  327.     }
  328.     return -1;
  329. }
Add Comment
Please, Sign In to add comment