ATMs.pwn 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. #include <YSI\y_hooks>
  2. #define ATM 10000
  3. #define ATM_AMOUNT 10001
  4. #define ATM_TRANSFER_TO 10002
  5. #define ATM_TRANSFER_AMT 10003
  6. new ATMPoint[43];
  7. LoadATMPoints() {
  8. ATMPoint[0] = CreateDynamicSphere(2065.439453125, -1897.5510253906, 13.19670009613, 3.0);
  9. ATMPoint[1] = CreateDynamicSphere(1497.7467041016, -1749.8747558594, 15.088212013245, 3.0);
  10. ATMPoint[2] = CreateDynamicSphere(2093.5124511719, -1359.5474853516, 23.62727355957, 3.0);
  11. ATMPoint[3] = CreateDynamicSphere(1155.6235351563, -1464.9141845703, 15.44321346283, 3.0);
  12. ATMPoint[4] = CreateDynamicSphere(1482.7761230469, -1010.3353881836, 26.48664855957, 3.0);
  13. ATMPoint[5] = CreateDynamicSphere(2139.4487304688, -1164.0811767578, 23.63508605957, 3.0);
  14. ATMPoint[6] = CreateDynamicSphere(1482.7761230469, -1010.3353881836, 26.48664855957, 3.0);
  15. ATMPoint[7] = CreateDynamicSphere(387.16552734375, -1816.0512695313, 7.4834146499634, 3.0);
  16. ATMPoint[8] = CreateDynamicSphere(-24.385023117065, -92.001075744629, 1003.1897583008, 3.0);
  17. ATMPoint[9] = CreateDynamicSphere(-31.811220169067, -58.106018066406, 1003.1897583008, 3.0);
  18. ATMPoint[10] = CreateDynamicSphere(1212.7785644531, 2.451762676239, 1000.5647583008, 3.0);
  19. ATMPoint[11] = CreateDynamicSphere(2324.4028320313, -1644.9445800781, 14.469946861267, 3.0);
  20. ATMPoint[12] = CreateDynamicSphere(2228.39, -1707.78, 13.25, 3.0);
  21. ATMPoint[13] = CreateDynamicSphere(651.19305419922, -520.48815917969, 15.978837013245, 3.0);
  22. ATMPoint[14] = CreateDynamicSphere(45.78035736084, -291.80926513672, 1.5024013519287, 3.0);
  23. ATMPoint[15] = CreateDynamicSphere(1275.7958984375, 368.31481933594, 19.19758605957, 3.0);
  24. ATMPoint[16] = CreateDynamicSphere(2303.4577636719, -13.539554595947, 26.12727355957, 3.0);
  25. ATMPoint[17] = CreateDynamicSphere(294.80, -84.01, 1001.0, 3.0);
  26. ATMPoint[18] = CreateDynamicSphere(691.08215332031, -618.5625, 15.978837013245, 3.0);
  27. ATMPoint[19] = CreateDynamicSphere(173.23471069336, -155.07606506348, 1.2210245132446, 3.0);
  28. ATMPoint[20] = CreateDynamicSphere(1260.8796386719, 209.30152893066, 19.19758605957, 3.0);
  29. ATMPoint[21] = CreateDynamicSphere(2316.1015625, -88.522567749023, 26.12727355957, 3.0);
  30. ATMPoint[22] = CreateDynamicSphere(1311.0361,-1446.2249,0.2216, 3.0);
  31. ATMPoint[23] = CreateDynamicSphere(2052.9246, -1660.6346, 13.1300, 3.0);
  32. ATMPoint[24] = CreateDynamicSphere(-2453.7600,754.8200,34.8000, 3.0);
  33. ATMPoint[25] = CreateDynamicSphere(-2678.6201,-283.3400,6.8000, 3.0);
  34. ATMPoint[26] = CreateDynamicSphere(519.8157,-2890.8601,4.4609, 3.0);
  35. ATMPoint[27] = CreateDynamicSphere(2565.667480, 1406.839355, 7699.584472, 3.0);
  36. ATMPoint[28] = CreateDynamicSphere(3265.30004883, -631.90002441, 8423.90039062, 3.0);
  37. ATMPoint[29] = CreateDynamicSphere(1829.5000, 1391.0000, 1464.0000, 3.0);
  38. ATMPoint[30] = CreateDynamicSphere(1755.8000, 1434.1000, 2013.4000, 3.0);
  39. ATMPoint[31] = CreateDynamicSphere(-665.975341, -4033.334716, 20.779014, 3.0);
  40. ATMPoint[32] = CreateDynamicSphere(-1619.9645996094,713.67535400391, 19995.501953125, 3.0);
  41. ATMPoint[33] = CreateDynamicSphere(883.7170, 1442.4282, -82.3370, 3.0);
  42. ATMPoint[34] = CreateDynamicSphere(986.4434,2056.2480,1085.8531, 3.0);
  43. ATMPoint[35] = CreateDynamicSphere(1014.1396,2060.8284,1085.8531, 3.0);
  44. ATMPoint[36] = CreateDynamicSphere(1013.4720,2023.8784,1085.8531, 3.0);
  45. ATMPoint[37] = CreateDynamicSphere(985.53719, 2056.1026, 1085.5, 3.0);
  46. ATMPoint[38] = CreateDynamicSphere(1014.48039, 2023.90137, 1085.5, 3.0);
  47. ATMPoint[39] = CreateDynamicSphere(1014.1004, 2061.80117, 1085.5, 3.0);
  48. ATMPoint[40] = CreateDynamicSphere(527.5063, 1417.8333, 11000.0996, 3.0);
  49. ATMPoint[41] = CreateDynamicSphere(1538.3831, -2785.1677, 15.3602, 3.0);
  50. ATMPoint[42] = CreateDynamicSphere(218.18401, 1809.87610, 2000.68555, 3.0); // Lucky Cowboy Casino
  51. // for(new i = 0; i < 37; i++) Streamer_SetIntData(STREAMER_TYPE_AREA, ATMPoint[i], E_STREAMER_EXTRA_ID, i);
  52. print("[Streamer] ATM Points Loaded");
  53. return 1;
  54. }
  55. hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
  56. if((newkeys & KEY_YES) && IsPlayerInAnyDynamicArea(playerid))
  57. {
  58. new areaid[1];
  59. GetPlayerDynamicAreas(playerid, areaid); //Assign nearest areaid.
  60. // new i = Streamer_GetIntData(STREAMER_TYPE_AREA, areaid[0], E_STREAMER_EXTRA_ID);
  61. for(new i; i < sizeof(ATMPoint); ++i) {
  62. if(areaid[0] == ATMPoint[i]) {
  63. format(szMiscArray, sizeof(szMiscArray), "{FF8000}** {C2A2DA}%s approaches the ATM, typing in their PIN.", GetPlayerNameEx(playerid));
  64. //ProxDetector(30.0, playerid, szMiscArray, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
  65. SetPlayerChatBubble(playerid, szMiscArray, COLOR_PURPLE, 15.0, 5000);
  66. ShowATMMenu(playerid);
  67. }
  68. }
  69. }
  70. return 1;
  71. }
  72. hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
  73. if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
  74. switch(dialogid) {
  75. case ATM: {
  76. if(!response) {
  77. TogglePlayerControllable(playerid, 1);
  78. return 1;
  79. }
  80. TogglePlayerControllable(playerid, 0);
  81. switch(listitem) {
  82. case 0: ShowATMMenu(playerid, 1);
  83. case 1: ShowATMMenu(playerid, 2);
  84. case 2: ShowATMMenu(playerid, 3);
  85. }
  86. }
  87. case ATM_AMOUNT: {
  88. if(!response) {
  89. DeletePVar(playerid, "ATMWithdraw");
  90. DeletePVar(playerid, "ATMDeposit");
  91. return ShowATMMenu(playerid);
  92. }
  93. new
  94. iAmount = strval(inputtext);
  95. if(GetPVarType(playerid, "ATMWithdraw")) {
  96. if(iAmount < 1) {
  97. SendClientMessageEx(playerid, COLOR_WHITE, " Negative amounts cannot be transfered!");
  98. return ShowATMMenu(playerid, 1);
  99. }
  100. if(iAmount > PlayerInfo[playerid][pAccount]) {
  101. SendClientMessageEx(playerid, COLOR_WHITE, " You are trying to withdraw more than you have!");
  102. return ShowATMMenu(playerid, 1);
  103. }
  104. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  105. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  106. return ShowATMMenu(playerid, 1);
  107. }
  108. SetPVarInt(playerid, "LastTransaction", gettime());
  109. if(!Bank_TransferCheck(-iAmount)) return 1;
  110. GivePlayerCash(playerid, iAmount);
  111. PlayerInfo[playerid][pAccount] -= iAmount;
  112. format(szMiscArray, sizeof(szMiscArray), " You have withdrawn $%s from your account. ", number_format(iAmount));
  113. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  114. if(PlayerInfo[playerid][pDonateRank] == 0) {
  115. new fee;
  116. fee = 3*iAmount/100;
  117. if(!Bank_TransferCheck(-fee)) return 1;
  118. PlayerInfo[playerid][pAccount] -= fee;
  119. format(szMiscArray, sizeof(szMiscArray), " You have been charged a 3 percent withdraw fee: -$%d.", fee);
  120. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  121. }
  122. OnPlayerStatsUpdate(playerid);
  123. DeletePVar(playerid, "ATMWithdraw");
  124. return ShowATMMenu(playerid);
  125. }
  126. else if(GetPVarType(playerid, "ATMDeposit")) {
  127. if(iAmount < 1) {
  128. SendClientMessageEx(playerid, COLOR_WHITE, " Negative amounts cannot be transfered!");
  129. return ShowATMMenu(playerid, 2);
  130. }
  131. if(iAmount > GetPlayerCash(playerid)) {
  132. SendClientMessageEx(playerid, COLOR_WHITE, " You are trying to deposit more than you have!");
  133. return ShowATMMenu(playerid, 2);
  134. }
  135. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  136. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  137. return ShowATMMenu(playerid, 2);
  138. }
  139. SetPVarInt(playerid, "LastTransaction", gettime());
  140. if(!Bank_TransferCheck(iAmount)) return 1;
  141. GivePlayerCash(playerid, -iAmount);
  142. PlayerInfo[playerid][pAccount] += iAmount;
  143. format(szMiscArray, sizeof(szMiscArray), " You have deposited $%s to your account. ", number_format(iAmount));
  144. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  145. if(PlayerInfo[playerid][pDonateRank] == 0) {
  146. new fee;
  147. fee = 3*iAmount/100;
  148. if(!Bank_TransferCheck(-fee)) return 1;
  149. PlayerInfo[playerid][pAccount] -= fee;
  150. format(szMiscArray, sizeof(szMiscArray), " You have been charged a 3 percent deposit fee: -$%d.", fee);
  151. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  152. }
  153. OnPlayerStatsUpdate(playerid);
  154. DeletePVar(playerid, "ATMDeposit");
  155. return ShowATMMenu(playerid);
  156. }
  157. }
  158. case ATM_TRANSFER_TO: {
  159. if(!response) {
  160. return ShowATMMenu(playerid);
  161. }
  162. new id = strval(inputtext);
  163. if(!IsPlayerConnected(id) || !gPlayerLogged{id}) {
  164. SendClientMessageEx(playerid, COLOR_WHITE, " The player you are trying to transfer to is not connected!");
  165. return ShowATMMenu(playerid, 3);
  166. }
  167. SetPVarInt(playerid, "ATMTransferTo", id);
  168. return ShowATMMenu(playerid, 4);
  169. }
  170. case ATM_TRANSFER_AMT: {
  171. if(!response) {
  172. DeletePVar(playerid, "ATMTransferTo");
  173. return ShowATMMenu(playerid, 3);
  174. }
  175. new
  176. id = GetPVarInt(playerid, "ATMTransferTo"),
  177. iAmount = strval(inputtext);
  178. if(restarting) {
  179. SendClientMessageEx(playerid, COLOR_GRAD2, "Transactions are currently disabled due to the server being restarted for maintenance.");
  180. return ShowATMMenu(playerid, 3);
  181. }
  182. if(PlayerInfo[playerid][pLevel] < 3) {
  183. SendClientMessageEx(playerid, COLOR_GRAD1, " You must be at least level 3 to use this feature!");
  184. return ShowATMMenu(playerid, 3);
  185. }
  186. if(gettime()-GetPVarInt(playerid, "LastTransaction") < 10) {
  187. SendClientMessageEx(playerid, COLOR_GRAD2, "You can only make a transaction once every 10 seconds, please wait!");
  188. return ShowATMMenu(playerid, 3);
  189. }
  190. if(iAmount > PlayerInfo[playerid][pAccount] || iAmount < 0) return SendClientMessageEx(playerid, COLOR_WHITE, "You are trying to send more than you have!");
  191. if(PlayerInfo[playerid][pDonateRank] == 0) {
  192. new fee;
  193. fee = 3*iAmount/100;
  194. PlayerInfo[playerid][pAccount] -= fee;
  195. format(szMiscArray, sizeof(szMiscArray), " You have been charged a 3 percent transfer fee: -$%d.", fee);
  196. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  197. }
  198. // Use these as they update the MySQL Directly with less function calls
  199. GivePlayerCashEx(playerid, TYPE_BANK, -iAmount);
  200. GivePlayerCashEx(id, TYPE_BANK, iAmount);
  201. format(szMiscArray, sizeof(szMiscArray), " You have transferred $%s to %s's account.", number_format(iAmount), GetPlayerNameEx(id));
  202. SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
  203. format(szMiscArray, sizeof(szMiscArray), " $%s has been transferred to your bank account from %s.", number_format(iAmount), GetPlayerNameEx(playerid));
  204. SendClientMessageEx(id, COLOR_YELLOW, szMiscArray);
  205. PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  206. PlayerPlaySound(id, 1052, 0.0, 0.0, 0.0);
  207. new ip[32], ipex[32];
  208. GetPlayerIp(playerid, ip, sizeof(ip));
  209. GetPlayerIp(id, ipex, sizeof(ipex));
  210. format(szMiscArray, sizeof(szMiscArray), "[ATM] %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);
  211. if(PlayerInfo[playerid][pAdmin] >= 2 || PlayerInfo[id][pAdmin] >= 2) Log("logs/adminpay.log", szMiscArray); else Log("logs/pay.log", szMiscArray);
  212. format(szMiscArray, sizeof(szMiscArray), "[ATM] %s (IP:%s) has transferred $%s to %s (IP:%s).", GetPlayerNameEx(playerid), ip, number_format(iAmount), GetPlayerNameEx(id), ipex);
  213. if(PlayerInfo[playerid][pAdmin] >= 2 || PlayerInfo[id][pAdmin] >= 2) {
  214. format(szMiscArray, sizeof(szMiscArray), "[ATM] Admin %s has transferred $%s to %s", GetPlayerNameEx(playerid), number_format(iAmount), GetPlayerNameEx(id));
  215. if(!strcmp(GetPlayerIpEx(playerid), GetPlayerIpEx(id), true)) strcat(szMiscArray, " (1)");
  216. ABroadCast(COLOR_YELLOW,szMiscArray, 4);
  217. }
  218. else ABroadCast(COLOR_YELLOW,szMiscArray,2);
  219. SetPVarInt(playerid, "LastTransaction", gettime());
  220. DeletePVar(playerid, "ATMTransferTo");
  221. return ShowATMMenu(playerid);
  222. }
  223. }
  224. return 0;
  225. }
  226. forward ForgetATM(playerid);
  227. public ForgetATM(playerid) {
  228. DeletePVar(playerid, "AtATM");
  229. return 1;
  230. }
  231. ShowATMMenu(playerid, menu = 0) {
  232. new szTitle[48];
  233. szMiscArray[0] = 0;
  234. format(szTitle, sizeof(szTitle), "ATM Menu ($%s)", number_format(PlayerInfo[playerid][pAccount]));
  235. if(PlayerInfo[playerid][pFreezeBank] == 1) return ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_MSGBOX, szTitle, "Your assets have been frozen! Contact judicial!", "Ok", "");
  236. switch(menu) {
  237. case 0: { // main menu
  238. ShowPlayerDialogEx(playerid, ATM, DIALOG_STYLE_LIST, szTitle, "Withdraw\nDeposit\nTransfer", "Select", "Cancel");
  239. }
  240. case 1: { // iAmount withdraw
  241. ShowPlayerDialogEx(playerid, ATM_AMOUNT, DIALOG_STYLE_INPUT, szTitle, "Please input how much you wish to withdraw from your account.", "Withdraw", "Cancel");
  242. SetPVarInt(playerid, "ATMWithdraw", 1);
  243. }
  244. case 2: { // iAmount deposit
  245. ShowPlayerDialogEx(playerid, ATM_AMOUNT, DIALOG_STYLE_INPUT, szTitle, "Please input how much you wish to deposit to your account.", "Deposit", "Cancel");
  246. SetPVarInt(playerid, "ATMDeposit", 1);
  247. }
  248. case 3: { // transfer to
  249. ShowPlayerDialogEx(playerid, ATM_TRANSFER_TO, DIALOG_STYLE_INPUT, szTitle, "Please input the player id you wish to transfer money to.", "Next", "Cancel");
  250. }
  251. case 4: { // transfer iAmount
  252. format(szMiscArray, sizeof(szMiscArray), "Please input the amount you wish to transfer to {FF0000}%s", GetPlayerNameEx(GetPVarInt(playerid, "ATMTransferTo")));
  253. ShowPlayerDialogEx(playerid, ATM_TRANSFER_AMT, DIALOG_STYLE_INPUT, szTitle, szMiscArray, "Transfer", "Cancel");
  254. }
  255. }
  256. return 1;
  257. }