Advertisement
Guest User

Untitled

a guest
May 24th, 2020
611
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.53 KB | None | 0 0
  1. #include <YSI\y_hooks>
  2. #define MAX_ATEME (30)
  3.  
  4. #define USAGE_MESSAGE "Use: {FFFFFF}"
  5.  
  6. // ATMS
  7. enum atmInfo
  8. {
  9. atmID, atmBroken, atmRepairTime,
  10. Float: fATMPos[3],
  11. Float: fATMPosRot[3],
  12. rObjectId, Text3D:atmLabel
  13. }
  14. new AtmInfo[MAX_ATEME][atmInfo];
  15. new Iterator: server_atms<MAX_ATEME>;
  16. new bomb_object, rob_pickup[3];
  17. new isplayerrobbing[MAX_PLAYERS];
  18.  
  19.  
  20.  
  21. hook OnGameModeInit() {
  22. LoadAtm();
  23. }
  24. hook OnPlayerConnect(playerid) {
  25.  
  26. isplayerrobbing[playerid] = 0;
  27. }
  28.  
  29. stock LoadAtm()
  30. {
  31. defer LoadAtmsOnInit();
  32. }
  33.  
  34. timer LoadAtmsOnInit[1500]()
  35. {
  36. mysql_tquery(handle, "SELECT * FROM `atms`", "LoadAtms", "");
  37. }
  38.  
  39. function LoadAtms()
  40. {
  41. new string[256], broken_string[32];
  42.  
  43. for(new i = 0; i < cache_num_rows(); i++)
  44. {
  45. if(i < MAX_ATEME)
  46. {
  47. new id = cache_get_field_content_int(i, "atmId");
  48.  
  49. AtmInfo[id][atmID] = id;
  50.  
  51. AtmInfo[id][fATMPos][0] = cache_get_field_content_float(i, "atmPosX");
  52. AtmInfo[id][fATMPos][1] = cache_get_field_content_float(i, "atmPosY");
  53. AtmInfo[id][fATMPos][2] = cache_get_field_content_float(i, "atmPosZ");
  54. AtmInfo[id][fATMPosRot][0] = cache_get_field_content_float(i, "atmPosRotX");
  55. AtmInfo[id][fATMPosRot][1] = cache_get_field_content_float(i, "atmPosRotY");
  56. AtmInfo[id][fATMPosRot][2] = cache_get_field_content_float(i, "atmPosRotZ");
  57.  
  58.  
  59. AtmInfo[id][rObjectId] = CreateDynamicObject(19526, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2], AtmInfo[id][fATMPosRot][0], AtmInfo[id][fATMPosRot][1], AtmInfo[id][fATMPosRot][2], -1, -1, -1, 500.0);
  60.  
  61. if(AtmInfo[id][atmBroken] == 1) {
  62. format(broken_string, sizeof(broken_string), "{A90606}Yes");
  63. }
  64. else {
  65. format(broken_string, sizeof(broken_string), "{0E9000}No");
  66. }
  67.  
  68.  
  69. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s", AtmInfo[id][atmID], broken_string);
  70. AtmInfo[id][atmLabel] = CreateDynamic3DTextLabel(string, COLOR_WHITE, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
  71.  
  72. Iter_Add(server_atms, id);
  73. }
  74. }
  75. printf("Loaded %d atms.", Iter_Count(server_atms));
  76. }
  77.  
  78. function UpdateAtmText(update, id)
  79. {
  80. if(update == 1)
  81. {
  82. DestroyDynamicObject(AtmInfo[id][rObjectId]);
  83. DestroyDynamic3DTextLabel(AtmInfo[id][atmLabel]);
  84.  
  85. new broken_string[32], string[256];
  86.  
  87.  
  88. if(AtmInfo[id][atmBroken] == 1 && AtmInfo[id][atmRepairTime] > 0) {
  89. format(broken_string, sizeof(broken_string), "{A90606}Yes");
  90. AtmInfo[id][rObjectId] = CreateDynamicObject(3067, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2]+0.5, AtmInfo[id][fATMPosRot][0], AtmInfo[id][fATMPosRot][1], AtmInfo[id][fATMPosRot][2], -1, -1, -1, 500.0);
  91. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s\nRepair Time: {A90606}%d seconds", AtmInfo[id][atmID], broken_string, AtmInfo[id][atmRepairTime]);
  92.  
  93. }
  94. else {
  95. format(broken_string, sizeof(broken_string), "{0E9000}No");
  96.  
  97. AtmInfo[id][rObjectId] = CreateDynamicObject(19526, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2], AtmInfo[id][fATMPosRot][0], AtmInfo[id][fATMPosRot][1], AtmInfo[id][fATMPosRot][2], -1, -1, -1, 500.0);
  98. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s", AtmInfo[id][atmID], broken_string);
  99. }
  100. AtmInfo[id][atmLabel] = CreateDynamic3DTextLabel(string, COLOR_WHITE, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
  101.  
  102. }
  103. }
  104.  
  105. function UpdateLabelAtmRob(update, id) {
  106. if(update == 1) {
  107. DestroyDynamic3DTextLabel(AtmInfo[id][atmLabel]);
  108.  
  109. new broken_string[32], string[256];
  110.  
  111.  
  112. if(AtmInfo[id][atmBroken] == 1 && AtmInfo[id][atmRepairTime] > 0) {
  113. format(broken_string, sizeof(broken_string), "{A90606}Yes");
  114. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s\n{FFFFFF}Repair Time: {A90606}%d {FFFFFF}seconds", AtmInfo[id][atmID], broken_string, AtmInfo[id][atmRepairTime]);
  115.  
  116. }
  117. else {
  118. format(broken_string, sizeof(broken_string), "{0E9000}No");
  119. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s", AtmInfo[id][atmID], broken_string);
  120. }
  121. AtmInfo[id][atmLabel] = CreateDynamic3DTextLabel(string, COLOR_WHITE, AtmInfo[id][fATMPos][0], AtmInfo[id][fATMPos][1], AtmInfo[id][fATMPos][2], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, -1, -1, -1, 50.0);
  122. }
  123. }
  124. is_valid_atm(id)
  125. {
  126. return Iter_Contains(server_atms, id);
  127. }
  128.  
  129. YCMD:gotoatm(playerid, params[], help)
  130. {
  131. check_owner
  132. new atm_id;
  133.  
  134. if(sscanf(params, "d", atm_id)) return SCM(playerid, COLOR_DARKNICERED, USAGE_MESSAGE"/gotoatm [atm id]");
  135.  
  136. if(!is_valid_atm(atm_id)) return SCM(playerid, COLOR_WHITE, "This id is invalid!");
  137.  
  138. SetPlayerPos(playerid, AtmInfo[atm_id][fATMPos][0], AtmInfo[atm_id][fATMPos][1],AtmInfo[atm_id][fATMPos][2]);
  139.  
  140. SCM(playerid, COLOR_WHITE, "You have been teleported.");
  141. return 1;
  142. }
  143.  
  144. StartAnimation(playerid, animlib[], animname[], Float:Speed, looping, lockx, locky, lockz, lp)
  145. {
  146. ApplyAnimation(playerid, animlib, animname, Speed, looping, lockx, locky, lockz, lp);
  147. }
  148. YCMD:giveme(playerid, params[], help)
  149. {
  150. playerVariables[playerid][pRobPoints] = 10;
  151. return 1;
  152. }
  153. YCMD:rob(playerid, params[], help)
  154. {
  155. if(playerVariables[playerid][pWanted] != 0) return SCM(playerid, COLOR_WHITE, "Because you have wanted, you can't use this command!");
  156. if(playerVariables[playerid][pRobPoints] < 10) return SCM(playerid, COLOR_WHITE, "You don't have enough rob points! Minimum points: 10!");
  157. if(isplayerrobbing[playerid] == 1) return SCM(playerid, COLOR_WHITE, "You are already involved in a robbery.");
  158. foreach(new i : server_atms)
  159. {
  160. if(AtmInfo[i][atmBroken] == 1) return SCM(playerid, COLOR_WHITE, "This ATM is broken, you can't steal from this!");
  161. if(AtmInfo[i][atmRepairTime] > 0) return SCM(playerid, COLOR_WHITE, "This ATM is still repairing! You can't rob here!");
  162. if(IsPlayerInRangeOfPoint(playerid, 2.0, AtmInfo[i][fATMPos][0], AtmInfo[i][fATMPos][1],AtmInfo[i][fATMPos][2]))
  163. {
  164. SCM(playerid, COLOR_DARKNICERED, "(Rob): {FFFFFF}You started planting the bomb...");
  165.  
  166. ClearAnimations(playerid);
  167. StartAnimation(playerid, "BOMBER", "BOM_Plant", 4.0, 0, 0, 0, 0, 0);
  168.  
  169. playerVariables[playerid][pRobPoints] -= 10;
  170.  
  171. AtmInfo[i][atmBroken] = 1;
  172.  
  173. isplayerrobbing[playerid] = 1;
  174.  
  175. defer TimberBomb(playerid, i);
  176. }
  177. }
  178.  
  179. return 1;
  180. }
  181. YCMD:clearme(playerid, params[], help)
  182. {
  183. check_owner
  184. playerVariables[playerid][pWanted] = 0;
  185. SetPlayerWantedLevel(playerid, 0);
  186. return 1;
  187. }
  188. timer TimberBomb[1300](playerid, atm_id)
  189. {
  190. new Float:X, Float:Y, Float:Z;
  191.  
  192. GetPlayerPos(playerid, X, Y, Z);
  193.  
  194. bomb_object = CreateDynamicObject(1654, X, Y, Z-1, 0.0, 1.0, 1.0, -1, -1, -1, 500.0);
  195.  
  196. defer TimerExplode(playerid, atm_id);
  197.  
  198. SCM(playerid, COLOR_DARKNICERED, "(Rob): {FFFFFF}Wait 10 seconds to detonate the bomb.");
  199.  
  200.  
  201. }
  202. timer TimerExplode[10000](playerid, atm_id)
  203. {
  204. new string[256], Float:X, Float:Y, Float:Z;
  205.  
  206. GetDynamicObjectPos(bomb_object, X, Y, Z);
  207.  
  208. CreateExplosionForPlayer(playerid, X, Y, Z, 1, 2);
  209.  
  210. DestroyDynamicObject(bomb_object);
  211. SCM(playerid, COLOR_DARKNICERED, "Bomb has been exploded! Collect the cash!");
  212.  
  213. AtmInfo[atm_id][atmRepairTime] = 120;
  214. UpdateAtmText(1, atm_id);
  215.  
  216. rob_pickup[0] = CreateDynamicPickup(1212, 23, X, Y, Z+1);
  217. rob_pickup[1] = CreateDynamicPickup(1212, 23, X+1, Y, Z+1);
  218. rob_pickup[2] = CreateDynamicPickup(1212, 23, X+2, Y, Z+1);
  219.  
  220. playerVariables[playerid][pWanted] = 6;
  221. SetPlayerWantedLevel(playerid, 6);
  222.  
  223. sendDutyCops(COLOR_BLUE, "Dispatch: %s has comitted a crime: 'ATM Robbery'. Reporter: AdmBot. W: +%d, new wanted level: %d.", GetName(playerid), playerVariables[playerid][pWanted]);
  224.  
  225. format(string, sizeof(string), "You have commited a crime: ATM Robbery. W: +6, new wanted level: %d. Reported by: AdmBot.", playerVariables[playerid][pWanted]);
  226. SCM(playerid, COLOR_WHITE, string);
  227.  
  228. GivePlayerWeapon(playerid, 42, 2000);
  229. SCM(playerid, COLOR_WHITE, "Extinguish the flames caused by the explosion.");
  230.  
  231. isplayerrobbing[playerid] = 0;
  232. }
  233. hook OnPlayerPickUpDynamicPickup(playerid, pickupid) {
  234. new money_collect = 45000 + random(30000), string[256];
  235. if(pickupid == rob_pickup[0]) {
  236. givePlayerMoney(playerid, money_collect);
  237. format(string, sizeof(string), "You collected %s$!", FormatNumber(money_collect));
  238. SCM(playerid, 0x0A8A07FF, string);
  239. DestroyDynamicPickup(rob_pickup[0]);
  240. }
  241. if(pickupid == rob_pickup[1]) {
  242. givePlayerMoney(playerid, money_collect);
  243. format(string, sizeof(string), "You collected %s$!", FormatNumber(money_collect));
  244. SCM(playerid, 0x0A8A07FF, string);
  245. DestroyDynamicPickup(rob_pickup[1]);
  246. }
  247. if(pickupid == rob_pickup[2]) {
  248. givePlayerMoney(playerid, money_collect);
  249. format(string, sizeof(string), "You collected %s$!", FormatNumber(money_collect));
  250. SCM(playerid, 0x0A8A07FF, string);
  251. DestroyDynamicPickup(rob_pickup[2]);
  252. }
  253. }
  254. task AtmRepairTime[1000]()
  255. {
  256. foreach(new i : server_atms)
  257. {
  258. new string[256], broken_string[32];
  259.  
  260. if(AtmInfo[i][atmRepairTime] > 0 && AtmInfo[i][atmBroken] > 0) {
  261. AtmInfo[i][atmRepairTime] --;
  262. format(string, sizeof(string), "ATM ID: {A90606}%d\n{FFFFFF}Use {A90606}/withdraw {FFFFFF}to get money\nOr use {A90606}/rob {FFFFFF}to rob this ATM\nBroken: %s\nRepair Time: {A90606}%d seconds", AtmInfo[i][atmID], broken_string, AtmInfo[i][atmRepairTime]);
  263.  
  264. UpdateLabelAtmRob(1, i);
  265.  
  266. if(AtmInfo[i][atmRepairTime] == 0) {
  267. repair_atm(i);
  268. }
  269. }
  270.  
  271. }
  272. }
  273. repair_atm(atm_id) {
  274. AtmInfo[atm_id][atmRepairTime] = 0;
  275. AtmInfo[atm_id][atmBroken] = 0;
  276. UpdateAtmText(1, atm_id);
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement