Banks.pwn 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. #include <YSI\y_hooks>
  2. #define BANK 10004
  3. #define BANK_AMOUNT 10005
  4. #define BANK_TRANSFER_TO 10006
  5. #define BANK_TRANSFER_AMT 10007
  6. // use the below for bank VWs so that all actors are created properly.
  7. #define BANK_RODEO 1
  8. #define BANK_MULLHOLLAND 2
  9. #define BANK_SF 3
  10. #define BANK_LV 4
  11. #define BANK_DILLIMORE 5
  12. #define BANK_LASBARANCAS 6
  13. new Bankers[12];
  14. new BankPoint[12];
  15. LoadBanks() {
  16. // rodeo
  17. Bankers[0] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  18. Bankers[1] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  19. SetActorVirtualWorld(Bankers[0], BANK_RODEO);
  20. SetActorVirtualWorld(Bankers[1], BANK_RODEO);
  21. // mullholland
  22. Bankers[2] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  23. Bankers[3] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  24. SetActorVirtualWorld(Bankers[2], BANK_MULLHOLLAND);
  25. SetActorVirtualWorld(Bankers[3], BANK_MULLHOLLAND);
  26. // san fierro
  27. Bankers[4] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  28. Bankers[5] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  29. SetActorVirtualWorld(Bankers[4], BANK_SF);
  30. SetActorVirtualWorld(Bankers[5], BANK_SF);
  31. // las venturas
  32. Bankers[6] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  33. Bankers[7] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  34. SetActorVirtualWorld(Bankers[6], BANK_LV);
  35. SetActorVirtualWorld(Bankers[7], BANK_LV);
  36. // dillimore
  37. Bankers[8] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  38. Bankers[9] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  39. SetActorVirtualWorld(Bankers[8], BANK_DILLIMORE);
  40. SetActorVirtualWorld(Bankers[9], BANK_DILLIMORE);
  41. // las barrancas
  42. Bankers[10] = CreateActor(150, 2319.2590,-15.7090,26.7496, 90);
  43. Bankers[11] = CreateActor(150, 2319.1768,-7.2503,26.7496, 90);
  44. SetActorVirtualWorld(Bankers[10], BANK_LASBARANCAS);
  45. SetActorVirtualWorld(Bankers[11], BANK_LASBARANCAS);
  46. // pickups for interaction.
  47. BankPoint[0] = CreateDynamicSphere(2316.2263,-7.3651, 26.7422, 3.0);
  48. BankPoint[1] = CreateDynamicSphere(2316.4480,-15.4179,26.7422, 3.0);
  49. print("[Streamer] Bank System Loaded");
  50. return 1;
  51. }
  52. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  53. if((newkeys & KEY_YES) && (IsPlayerInDynamicArea(playerid, BankPoint[0]) || IsPlayerInDynamicArea(playerid, BankPoint[1]))) {
  54. format(szMiscArray, sizeof(szMiscArray), "{FF8000}** {C2A2DA}%s approaches the banker and begins speaking with them.", GetPlayerNameEx(playerid));
  55. //ProxDetector(30.0, playerid, szMiscArray, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
  56. SetPlayerChatBubble(playerid, szMiscArray, COLOR_PURPLE, 15.0, 5000);
  57. ShowBankMenu(playerid);
  58. }
  59. return 1;
  60. }
  61. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  62. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  63. switch(dialogid) {
  64. case BANK: {
  65. if(!response) {
  66. TogglePlayerControllable(playerid, 1);
  67. return SendClientMessageEx(playerid, COLOR_YELLOW, " You are no longer being attended by the banker.");
  68. }
  69. TogglePlayerControllable(playerid, 0);
  70. switch(listitem) {
  71. case 0: ShowBankMenu(playerid, 1);
  72. case 1: ShowBankMenu(playerid, 2);
  73. case 2: ShowBankMenu(playerid, 3);
  74. case 3: {
  75. if(PlayerInfo[playerid][pCheckCash] > 0) {
  76. //GivePlayerCash(playerid,PlayerInfo[playerid][pCheckCash]);
  77. GivePlayerCashEx(playerid, TYPE_BANK, PlayerInfo[playerid][pCheckCash]);
  78. PlayerInfo[playerid][pCheckCash] = 0;
  79. SendClientMessageEx(playerid, COLOR_YELLOW, " You have successfully cashed-in all your checks to your bank.");
  80. return ShowBankMenu(playerid);
  81. }
  82. else {
  83. SendClientMessageEx(playerid, COLOR_YELLOW, " You did not have any undeposited checks on hand.");
  84. return ShowBankMenu(playerid);
  85. }
  86. }
  87. }
  88. }
  89. case BANK_AMOUNT: {
  90. if(!response) {
  91. DeletePVar(playerid, "BankWithdraw");
  92. DeletePVar(playerid, "BankDeposit");
  93. return ShowBankMenu(playerid);
  94. }
  95. new
  96. iAmount = strval(inputtext);
  97. if(GetPVarType(playerid, "BankWithdraw")) {
  98. if(iAmount < 1) {
  99. SendClientMessageEx(playerid, COLOR_WHITE, " Negative amounts cannot be transfered!");
  100. return ShowBankMenu(playerid, 1);
  101. }
  102. if(iAmount > PlayerInfo[playerid][pAccount]) {
  103. SendClientMessageEx(playerid, COLOR_WHITE, " You are trying to withdraw more than you have!");
  104. return ShowBankMenu(playerid, 1);
  105. }
  106. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  107. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  108. ShowBankMenu(playerid, 1);
  109. }
  110. SetPVarInt(playerid, "LastTransaction", gettime());
  111. if(!Bank_TransferCheck(-iAmount)) return 1;
  112. GivePlayerCash(playerid, iAmount);
  113. PlayerInfo[playerid][pAccount] -= iAmount;
  114. format(szMiscArray, sizeof(szMiscArray), " You have withdrawn $%s from your account. ", number_format(iAmount));
  115. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  116. if(PlayerInfo[playerid][pTut] == 16)
  117. {
  118. PlayerInfo[playerid][pTut]++;
  119. AdvanceTutorial(playerid);
  120. }
  121. OnPlayerStatsUpdate(playerid);
  122. DeletePVar(playerid, "BankWithdraw");
  123. return ShowBankMenu(playerid);
  124. }
  125. else if(GetPVarType(playerid, "BankDeposit")) {
  126. if(iAmount < 1) {
  127. SendClientMessageEx(playerid, COLOR_WHITE, " Negative amounts cannot be transfered!");
  128. return ShowBankMenu(playerid, 2);
  129. }
  130. if(iAmount > GetPlayerCash(playerid)) {
  131. SendClientMessageEx(playerid, COLOR_WHITE, " You are trying to deopsit more than you have!");
  132. return ShowBankMenu(playerid, 2);
  133. }
  134. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  135. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  136. ShowBankMenu(playerid, 2);
  137. }
  138. SetPVarInt(playerid, "LastTransaction", gettime());
  139. if(!Bank_TransferCheck(iAmount)) return 1;
  140. GivePlayerCash(playerid, -iAmount);
  141. PlayerInfo[playerid][pAccount] += iAmount;
  142. format(szMiscArray, sizeof(szMiscArray), " You have deposited $%s to your account. ", number_format(iAmount));
  143. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  144. OnPlayerStatsUpdate(playerid);
  145. DeletePVar(playerid, "BankDeposit");
  146. return ShowBankMenu(playerid);
  147. }
  148. }
  149. case BANK_TRANSFER_TO: {
  150. if(!response) {
  151. return ShowBankMenu(playerid);
  152. }
  153. new id = strval(inputtext);
  154. if(!IsPlayerConnected(id) || !gPlayerLogged{id}) {
  155. SendClientMessageEx(playerid, COLOR_WHITE, " The player you are trying to transfer to is not connected!");
  156. return ShowBankMenu(playerid, 3);
  157. }
  158. SetPVarInt(playerid, "BankTransferTo", id);
  159. return ShowBankMenu(playerid, 4);
  160. }
  161. case BANK_TRANSFER_AMT: {
  162. if(!response) {
  163. DeletePVar(playerid, "BankTransferTo");
  164. return ShowBankMenu(playerid, 3);
  165. }
  166. new
  167. id = GetPVarInt(playerid, "BankTransferTo"),
  168. iAmount = strval(inputtext);
  169. if(restarting) {
  170. SendClientMessageEx(playerid, COLOR_GRAD2, "Transactions are currently disabled due to the server being restarted for maintenance.");
  171. return ShowBankMenu(playerid, 3);
  172. }
  173. if(PlayerInfo[playerid][pLevel] < 3) {
  174. SendClientMessageEx(playerid, COLOR_GRAD1, " You must be at least level 3 to use this feature!");
  175. return ShowBankMenu(playerid, 3);
  176. }
  177. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  178. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  179. return ShowBankMenu(playerid, 3);
  180. }
  181. if(iAmount > PlayerInfo[playerid][pAccount] || iAmount < 0) return SendClientMessageEx(playerid, COLOR_WHITE, "You are trying to send more than you have!");
  182. // Use these as they update the MySQL Directly with less function calls
  183. GivePlayerCashEx(playerid, TYPE_BANK, -iAmount);
  184. GivePlayerCashEx(id, TYPE_BANK, iAmount);
  185. format(szMiscArray, sizeof(szMiscArray), " You have transferred $%s to %s's account.", number_format(iAmount), GetPlayerNameEx(id));
  186. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  187. format(szMiscArray, sizeof(szMiscArray), " $%s has been transferred to your bank account from %s.", number_format(iAmount), GetPlayerNameEx(playerid));
  188. SendClientMessageEx(id, COLOR_YELLOW, szMiscArray);
  189. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  190. PlayerPlaySound(id, 1052, 0.0, 0.0, 0.0);
  191. new ip[32], ipex[32];
  192. GetPlayerIp(playerid, ip, sizeof(ip));
  193. GetPlayerIp(id, ipex, sizeof(ipex));
  194. format(szMiscArray, sizeof(szMiscArray), "[Bank] %s(%d) (IP:%s) has transferred $%s to %s(%d) (IP:%s).", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), ip, number_format(iAmount), GetPlayerNameEx(id), GetPlayerSQLId(id), ipex);
  195. if(PlayerInfo[playerid][pAdmin] >= 2 || PlayerInfo[id][pAdmin] >= 2) Log("logs/adminpay.log", szMiscArray); else Log("logs/pay.log", szMiscArray);
  196. format(szMiscArray, sizeof(szMiscArray), "[Bank] %s (IP:%s) has transferred $%s to %s (IP:%s).", GetPlayerNameEx(playerid), ip, number_format(iAmount), GetPlayerNameEx(id), ipex);
  197. if(PlayerInfo[playerid][pAdmin] >= 2 || PlayerInfo[id][pAdmin] >= 2) {
  198. format(szMiscArray, sizeof(szMiscArray), "[Bank] Admin %s has transferred $%s to %s", GetPlayerNameEx(playerid), number_format(iAmount), GetPlayerNameEx(id));
  199. if(!strcmp(GetPlayerIpEx(playerid), GetPlayerIpEx(id), true)) strcat(szMiscArray, " (1)");
  200. ABroadCast(COLOR_YELLOW,szMiscArray, 4);
  201. }
  202. else ABroadCast(COLOR_YELLOW,szMiscArray,2);
  203. SetPVarInt(playerid, "LastTransaction", gettime());
  204. DeletePVar(playerid, "BankTransferTo");
  205. return ShowBankMenu(playerid);
  206. }
  207. }
  208. return 0;
  209. }
  210. ShowBankMenu(playerid, menu = 0) {
  211. new szTitle[48];
  212. szMiscArray[0] = 0;
  213. format(szTitle, sizeof(szTitle), "Bank Menu ($%s)", number_format(PlayerInfo[playerid][pAccount]));
  214. if(PlayerInfo[playerid][pFreezeBank] == 1) return ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_MSGBOX, szTitle, "Your assets have been frozen! Contact judicial!", "Ok", "");
  215. switch(menu) {
  216. case 0: { // main menu
  217. ShowPlayerDialogEx(playerid, BANK, DIALOG_STYLE_LIST, szTitle, "Withdraw\nDeposit\nTransfer\nCash-in Checks", "Select", "Cancel");
  218. }
  219. case 1: { // iAmount withdraw
  220. ShowPlayerDialogEx(playerid, BANK_AMOUNT, DIALOG_STYLE_INPUT, szTitle, "Please input how much you wish to withdraw from your account.", "Withdraw", "Cancel");
  221. SetPVarInt(playerid, "BankWithdraw", 1);
  222. }
  223. case 2: { // iAmount deposit
  224. ShowPlayerDialogEx(playerid, BANK_AMOUNT, DIALOG_STYLE_INPUT, szTitle, "Please input how much you wish to deposit to your account.", "Deposit", "Cancel");
  225. SetPVarInt(playerid, "BankDeposit", 1);
  226. }
  227. case 3: { // transfer to
  228. ShowPlayerDialogEx(playerid, BANK_TRANSFER_TO, DIALOG_STYLE_INPUT, szTitle, "Please input the player id you wish to transfer money to.", "Next", "Cancel");
  229. }
  230. case 4: { // transfer iAmount
  231. format(szMiscArray, sizeof(szMiscArray), "Please input the amount you wish to transfer to {FF0000}%s", GetPlayerNameEx(GetPVarInt(playerid, "BankTransferTo")));
  232. ShowPlayerDialogEx(playerid, BANK_TRANSFER_AMT, DIALOG_STYLE_INPUT, szTitle, szMiscArray, "Transfer", "Cancel");
  233. }
  234. }
  235. return 1;
  236. }