Advertisement
Guest User

XF CH3WY's AC-130 Source GTA IV

a guest
Jun 17th, 2016
456
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 36.73 KB | None | 0 0
  1. /*--------------------------------------------------------------------------------------------------------------------------
  2.     AC-130 Source - XF CH3WY
  3.     *Do not change anything unless you know what you're doing
  4.     *Do not leech
  5.    
  6.     Credits:
  7.     K3R3D0R - Giving me the idea to create an object on the waypoint's coords and attaching the plane to it and spin the object.
  8.     Swizz - Some testing
  9.     xStormsnoutx - Helped with weapon options & making the video
  10.    
  11.     Information:
  12.     How this mod works is when toggled a helicopter with the plane object will be spawned. The pilot will always have a task,
  13.     either he will travel to your waypoint or he would travel around the map with the coordinates I placed. How the plane
  14.     circles is an object spawned on the waypoint's coordinates and the helicopter is simply attached to the object with certain
  15.     angles and the object spins to give the illusion it's flying in a circle. When you are either circling the waypoint or on
  16.     autopilot you will be able to access your guns. You can scroll through the weapons between a 25mm-50mm-105mm cannons. Enjoy!
  17.   --------------------------------------------------------------------------------------------------------------------------*/
  18.    
  19. ///Includes
  20. #include <natives.h>
  21. #include <common.h>
  22. #include <consts.h>
  23. #include <types.h>
  24. #include <strings.h>
  25.  
  26. ///Defines
  27. #define BUTTON_SELECT 0xD
  28. #define BUTTON_START 0xC
  29. #define BUTTON_X 0xE
  30. #define BUTTON_Y 0xF
  31. #define BUTTON_A 0x10
  32. #define BUTTON_B 0x11
  33. #define DPAD_UP 0x8
  34. #define DPAD_DOWN 0x9
  35. #define DPAD_LEFT 0xA
  36. #define DPAD_RIGHT 0xB
  37. #define BUTTON_L 0x5
  38. #define BUTTON_R 0x7
  39. #define BUTTON_LB 0x4
  40. #define BUTTON_RB 0x6
  41. #define STICK_LEFT 0x12
  42. #define STICK_RIGHT 0x13
  43.  
  44. ///Bools
  45. bool modon = false;
  46. bool controlling = false;
  47. bool coords = false;
  48. bool circle = false;
  49. bool turnoff = false;
  50. bool wander = false;
  51. bool showSelection = false;
  52. bool mm25 = true;
  53. bool mm50 = false;
  54. bool mm105 = false;
  55.  
  56. ///Declarations
  57. Ped pilot, driver;
  58. Vehicle pveh;
  59. Vector3 position;
  60. Object plane, dum, projectilesmm105;
  61. Object projectilesmm25[30], projectilesmm50[5];
  62.  
  63. ///Integers
  64. int maxDistance = 100;
  65. int task = 1, select = 1, pedID;
  66. int mm25number = 0, mm50number = 0;
  67. int projectileIDmm25, anotherNumber = 0;
  68. int projectileIDmm50, projectileIDmm105;
  69. uint projectile = 0x501811B6;
  70.  
  71. ///Floats
  72. float a, x, y, z, cx, cy, cz;
  73. float px, py, pz, ox, oy, oz, objHeading;
  74. float zGround, distance, dist, heading;
  75. float objRotX, objRotZ, objX, objY, objZ;
  76. float ch1X = 1232, ch1Y = 1822; //top right corner of the map
  77. float ch2X = 2786, ch2Y = 424; //airport
  78. float ch3X = 987, ch3Y = -497; //carnival area
  79. float ch4X = -43, ch4Y = -796; //bottom middle of the map
  80. float ch5X = -1534, ch5Y = -480; //bottom left corner of the map
  81. float ch6X = -1088, ch6Y = 1687; //top left corner of the map
  82.  
  83.  
  84. ////////////////////////////////////////////////////////////////////////////Start Source////////////////////////////////////////////////////////////////////////////
  85.  
  86. /*------------------------------------Control Panel------------------------------------*/
  87. void SET_UP_DRAW(float width, float height, uint r, uint g, uint b, uint a){
  88. #ifdef PC
  89.     SET_TEXT_FONT(7);
  90. #else
  91.     SET_TEXT_FONT(6);
  92. #endif
  93.     SET_TEXT_BACKGROUND(0);
  94.     SET_TEXT_DROPSHADOW(0, 0, 0, 0, 255);
  95.     SET_TEXT_EDGE(1, 0, 0, 0, 255);
  96.     SET_TEXT_COLOUR(r, g, b, a);
  97.     SET_TEXT_SCALE(width, height);
  98.     SET_TEXT_PROPORTIONAL(1);
  99.     SET_TEXT_JUSTIFY(0);
  100.     SET_TEXT_CENTRE(0);
  101.     SET_TEXT_RIGHT_JUSTIFY(0);
  102. }
  103.  
  104. void SET_UP_DRAW_1(float width, float height, uint r, uint g, uint b, uint a){
  105. #ifdef PC
  106.     SET_TEXT_FONT(7);
  107. #else
  108.     SET_TEXT_FONT(2);
  109. #endif
  110.     SET_TEXT_BACKGROUND(0);
  111.     SET_TEXT_DROPSHADOW(0, 0, 0, 0, 255);
  112.     SET_TEXT_EDGE(1, 0, 0, 0, 255);
  113.     SET_TEXT_COLOUR(r, g, b, a);
  114.     SET_TEXT_SCALE(width, height);
  115.     SET_TEXT_PROPORTIONAL(1);
  116.     SET_TEXT_JUSTIFY(0);
  117.     SET_TEXT_CENTRE(0);
  118.     SET_TEXT_RIGHT_JUSTIFY(0);
  119. }
  120.  
  121. void rect(void){
  122.     DRAW_RECT(0.0, 0.0, 0.8900, 0.6400, 0, 0, 0, 150);
  123. }
  124.  
  125. void control_show(void){
  126.     SET_UP_DRAW(0.3100, 0.4550, 255, 0, 0, 255);
  127.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.1150, 0.0340, "STRING", "CONTROLS");
  128. }
  129.  
  130. void close_show(void){
  131.     SET_UP_DRAW(0.3100, 0.4550, 255, 0, 0, 255);
  132.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.2900, 0.0340, "STRING", "CLOSE - ~PAD_RB~ + ~PAD_B~");
  133. }
  134.  
  135. void instructions(void){
  136.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 160, 34, 255);
  137.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0600, 0.0590, "STRING", "Set a waypoint or fly in auto pilot");
  138. }
  139.  
  140. void pilotPrint(void){
  141.     SET_UP_DRAW_1(0.3100, 0.4550, 76, 151, 176, 255);
  142.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0600, 0.0890, "STRING", "Pilot AC-130");
  143. }
  144.  
  145. void pilotButton(void){
  146.     SET_UP_DRAW_1(0.3150, 0.4550, 0, 0, 255, 255);
  147.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.1900, 0.0890, "STRING", "~PAD_RB~ + ~PAD_X~");
  148. }
  149.  
  150. void openWeaponPrint(void){
  151.     SET_UP_DRAW_1(0.3100, 0.4550, 161, 148, 51, 255);
  152.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0600, 0.1190, "STRING", "Open weapon options");
  153. }
  154.  
  155. void openWeaponButton(void){
  156.     SET_UP_DRAW_1(0.3150, 0.4550, 0, 0, 255, 255);
  157.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.2850, 0.1190, "STRING", "~PAD_LB~ + ~PAD_X~");
  158. }
  159.  
  160. void weaponScrollPrint(void){
  161.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 255, 0, 201);
  162.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0750, 0.1490, "STRING", "Scroll through weapons");
  163. }
  164.  
  165. void weaponScrollButton(void){
  166.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 0, 255, 255);
  167.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.3150, 0.1490, "STRING", "~PAD_DPAD_LEFT~ + ~PAD_DPAD_RIGHT~");
  168. }
  169.  
  170. void selectPrint(void){
  171.     SET_UP_DRAW_1(0.3100, 0.4550, 34, 201, 133, 255);
  172.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0750, 0.1790, "STRING", "Select weapon");
  173. }
  174.  
  175. void selectButton(void){
  176.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 0, 255, 255);
  177.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.2300, 0.1790, "STRING", "~PAD_A~");
  178. }
  179.  
  180. void zoomPrint(void){
  181.     SET_UP_DRAW_1(0.3100, 0.4550, 114, 41, 138, 255);
  182.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0750, 0.2090, "STRING", "Zoom In/Out");
  183. }
  184.  
  185. void zoomButton(void){
  186.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 0, 255, 255);
  187.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.2100, 0.2090, "STRING", "~PAD_LSTICK_ALL~");
  188. }
  189.  
  190. void aimPrint(void){
  191.     SET_UP_DRAW_1(0.3100, 0.4550,  234, 245, 0, 255);
  192.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0750, 0.2390, "STRING", "Aim Guns");
  193. }
  194.  
  195. void aimButton(void){
  196.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 0, 255, 255);
  197.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.1800, 0.2390, "STRING", "~PAD_LT~");
  198. }
  199.  
  200. void shootPrint(void){
  201.     SET_UP_DRAW_1(0.3100, 0.4550, 245, 20, 192, 255);
  202.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.0750, 0.2690, "STRING", "Shoot Guns");
  203. }
  204.  
  205. void shootButton(void){
  206.     SET_UP_DRAW_1(0.3100, 0.4550, 0, 0, 255, 255);
  207.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.2000, 0.2690, "STRING", "~PAD_X~");
  208. }
  209.  
  210. void controlsLoop(void){
  211.     if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_B)){
  212.         if(controlling){
  213.             controlling = false;
  214.         }
  215.         else{
  216.             controlling = true;
  217.         }
  218.     }
  219.     if(controlling){
  220.         rect();
  221.         control_show();
  222.         close_show();
  223.         instructions();
  224.         pilotPrint();
  225.         pilotButton();
  226.         openWeaponPrint();
  227.         openWeaponButton();
  228.         weaponScrollPrint();
  229.         weaponScrollButton();
  230.         selectPrint();
  231.         selectButton();
  232.         zoomPrint();
  233.         zoomButton();
  234.         aimPrint();
  235.         aimButton();
  236.         shootPrint();
  237.         shootButton();
  238.     }
  239. }
  240.  
  241.  
  242. /*--------------------------------------Functions--------------------------------------*/
  243. void printShort(char* text){
  244.     CLEAR_PRINTS();
  245.     PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", text,200, true);
  246. }
  247.  
  248. void print(char* text){
  249.     CLEAR_PRINTS();
  250.     PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", text,3000, true);
  251. }
  252.  
  253. bool NETWORK_CONTROL(int ID){
  254.     int tick = 0;
  255.     REQUEST_CONTROL_OF_NETWORK_ID(ID);
  256.     while(!HAS_CONTROL_OF_NETWORK_ID(ID) && tick <= 250){
  257.         tick++;
  258.     }
  259.     if(HAS_CONTROL_OF_NETWORK_ID(ID)){
  260.         return HAS_CONTROL_OF_NETWORK_ID(ID);
  261.     }
  262.     else{
  263.         return !HAS_CONTROL_OF_NETWORK_ID(ID);
  264.     }
  265. }
  266.  
  267. void SPAWN_PLANE(void){
  268.     Group groupName;
  269.     float h;
  270.     int pass;
  271.     print("~b~Loading.");
  272.     GET_CHAR_COORDINATES(GetPlayerPed(), &x, &y, &z);
  273.     if(IS_CHAR_IN_ANY_CAR(GetPlayerPed())){
  274.         GET_CAR_CHAR_IS_USING(GetPlayerPed(), &pveh);
  275.         GET_DRIVER_OF_CAR(pveh, &driver);
  276.         if(!DOES_CHAR_EXIST(driver) || GetPlayerPed() == driver){
  277.             WARP_CHAR_FROM_CAR_TO_COORD(GetPlayerPed(), x, y, z + 1);
  278.             DELETE_CAR(&pveh);
  279.             MARK_CAR_AS_NO_LONGER_NEEDED(&pveh);
  280.         }
  281.     }
  282.     REQUEST_MODEL(MODEL_ANNIHILATOR);
  283.     while(!HAS_MODEL_LOADED(MODEL_ANNIHILATOR)) WAIT(0);
  284.     CREATE_CAR(MODEL_ANNIHILATOR, x, y, z + maxDistance, &pveh, true);
  285.     MARK_MODEL_AS_NO_LONGER_NEEDED(MODEL_ANNIHILATOR);
  286.     SET_CAR_ENGINE_ON(pveh, false, false);
  287.     SET_CHAR_VISIBLE(GetPlayerPed(), false);
  288.     SET_CAR_AS_MISSION_CAR(pveh);
  289.     SET_HELI_BLADES_FULL_SPEED(pveh);
  290.     SET_CAR_COLLISION(pveh, true);
  291.     SET_CAR_HEADING(pveh, h);
  292.     SET_CAR_VISIBLE(pveh, false);
  293.     SET_CAR_CAN_BE_DAMAGED(pveh, false);
  294.     SET_CAR_CAN_BE_VISIBLY_DAMAGED(pveh, false);
  295.     SET_CAN_BURST_CAR_TYRES(pveh, false);
  296.     for(pass = 0;pass <= 2;pass++){
  297.         if(IS_CAR_PASSENGER_SEAT_FREE(pveh, pass)){
  298.             WARP_CHAR_INTO_CAR_AS_PASSENGER(GetPlayerPed(), pveh, pass);
  299.             LOCK_CAR_DOORS(pveh, VEHICLE_DOOR_LOCKED_BOTH_SIDES);
  300.         }
  301.     }
  302.     print("~b~Loading..");
  303.     REQUEST_MODEL(MODEL_CJ_PLANE_1);
  304.     while(!HAS_MODEL_LOADED(MODEL_CJ_PLANE_1)) WAIT(0);
  305.     CREATE_OBJECT(MODEL_CJ_PLANE_1, x, y, z + maxDistance, &plane, true);
  306.     SET_OBJECT_VISIBLE(plane, true);
  307.     MARK_MODEL_AS_NO_LONGER_NEEDED(MODEL_CJ_PLANE_1);
  308.     ATTACH_OBJECT_TO_CAR(plane, pveh, 0, 2, 12, 8, 0, 0, -3.150);
  309.     SET_OBJECT_LIGHTS(plane, true);
  310.     SET_OBJECT_INVINCIBLE(plane, true);
  311.     SET_OBJECT_COLLISION(plane, false);
  312.     GET_PLAYER_GROUP(GetPlayerIndex(), &groupName);
  313.     if(!DOES_GROUP_EXIST(groupName)){
  314.         CREATE_GROUP(0, groupName, true);
  315.         SET_GROUP_LEADER(groupName, GetPlayerPed());
  316.         SET_GROUP_FORMATION(groupName, 2);
  317.         SET_GROUP_FORMATION_SPACING(groupName, 5);
  318.     }  
  319.     if(!DOES_CHAR_EXIST(pilot)){
  320.         print("~b~Loading...");
  321.         REQUEST_MODEL(MODEL_M_M_HELIPILOT_01);
  322.         while(!HAS_MODEL_LOADED(MODEL_M_M_HELIPILOT_01)) WAIT(0);
  323.         GET_OFFSET_FROM_CHAR_IN_WORLD_COORDS(GetPlayerPed(), 0, 2, 0, &x, &y, &z);
  324.         CREATE_CHAR(26, MODEL_M_M_HELIPILOT_01, x,y,z, &pilot, true);
  325.         WAIT(100);
  326.         SET_CHAR_VISIBLE(pilot, false);
  327.         SET_CHAR_RANDOM_COMPONENT_VARIATION(pilot);
  328.         SET_GROUP_MEMBER(groupName, pilot);
  329.         SET_CHAR_NEVER_LEAVES_GROUP(pilot, true);
  330.         SET_CHAR_RELATIONSHIP_GROUP(pilot, 24);
  331.         SET_CHAR_RELATIONSHIP(pilot, 5, 0);
  332.         SET_CHAR_ACCURACY(pilot, 100);
  333.         SET_CHAR_KEEP_TASK(pilot, true);
  334.         GET_NETWORK_ID_FROM_PED(pilot, &pedID);
  335.         SET_NETWORK_ID_CAN_MIGRATE(pilot, false);
  336.         SET_SENSE_RANGE(pilot, 150.0);
  337.         SET_PED_GENERATES_DEAD_BODY_EVENTS(pilot, true);
  338.         SET_CHAR_SHOOT_RATE(pilot, 100);
  339.         SET_CHAR_WILL_USE_COVER(pilot, false);
  340.         SET_CHAR_WILL_DO_DRIVEBYS(pilot, true);
  341.         SET_CHAR_SIGNAL_AFTER_KILL(pilot, true);
  342.         SET_CHAR_WILL_USE_CARS_IN_COMBAT(pilot, true);
  343.         SET_CHAR_WILL_FLY_THROUGH_WINDSCREEN(pilot, false);
  344.         SET_CHAR_INVINCIBLE(pilot, true);
  345.         SET_CHAR_PROOFS(pilot, true, true, true, true, true);
  346.         SET_CHAR_PROVIDE_COVERING_FIRE(pilot, true);
  347.         SET_CHAR_CANT_BE_DRAGGED_OUT(pilot, true);
  348.         SET_CHAR_STAY_IN_CAR_WHEN_JACKED(pilot, true);
  349.         SET_PED_DONT_DO_EVASIVE_DIVES(pilot, true);
  350.         SET_PED_PATH_MAY_DROP_FROM_HEIGHT(pilot, true);
  351.         SET_PED_PATH_MAY_USE_CLIMBOVERS(pilot, true);
  352.         SET_PED_PATH_MAY_USE_LADDERS(pilot, true);
  353.         WARP_CHAR_INTO_CAR(pilot, pveh);
  354.         SET_CHAR_WILL_LEAVE_CAR_IN_COMBAT(pilot, false);
  355.         SET_CHAR_CAN_BE_SHOT_IN_VEHICLE(pilot, false);
  356.         SET_GROUP_CHAR_DUCKS_WHEN_AIMED_AT(pilot, false);
  357.         SET_CHAR_BULLETPROOF_VEST(pilot, true);
  358.         SET_PED_DIES_WHEN_INJURED(pilot, false);
  359.         SET_CHAR_CAN_SMASH_GLASS(pilot, false);
  360.     }
  361. }
  362.  
  363. void RESET_EVERYTHING(void){
  364.     SET_CHAR_VISIBLE(GetPlayerPed(), true);
  365.     if(DOES_OBJECT_EXIST(plane)){
  366.         DELETE_OBJECT(&plane);
  367.         MARK_OBJECT_AS_NO_LONGER_NEEDED(&plane);
  368.     }
  369.     if(DOES_CHAR_EXIST(pilot)){
  370.         GET_NETWORK_ID_FROM_PED(pilot, &pedID);
  371.         if(!NETWORK_CONTROL(pedID)){
  372.             print("~r~Error deleting pilot!");
  373.         }
  374.         FORCE_CHAR_TO_DROP_WEAPON(pilot);
  375.         WAIT(10);
  376.         DELETE_CHAR(&pilot);
  377.         MARK_CHAR_AS_NO_LONGER_NEEDED(&pilot);
  378.     }
  379.     LOCK_CAR_DOORS(pveh, VEHICLE_DOOR_UNLOCKED);
  380.     if(DOES_VEHICLE_EXIST(pveh)){
  381.         int vehID;
  382.         GET_NETWORK_ID_FROM_VEHICLE(pveh, &vehID);
  383.         if(!NETWORK_CONTROL(vehID)){
  384.             print("~r~Error deleting AC-130!");
  385.         }
  386.         WAIT(10);
  387.         DETACH_CAR(pveh);
  388.         DELETE_CAR(&pveh);
  389.         MARK_CAR_AS_NO_LONGER_NEEDED(&pveh);
  390.     }
  391.     GET_CHAR_COORDINATES(GetPlayerPed(), &x, &y, &z);
  392.     GET_GROUND_Z_FOR_3D_COORD(x, y, z, &zGround);
  393.     SET_CHAR_COORDINATES(GetPlayerPed(), x, y, zGround);
  394.     SET_GAME_CAM_HEADING(0.0);
  395.     LOAD_ALL_OBJECTS_NOW();
  396.     REQUEST_COLLISION_AT_POSN(x, y, zGround);
  397.     if(DOES_OBJECT_EXIST(dum)){
  398.         DELETE_OBJECT(&dum);
  399.         MARK_OBJECT_AS_NO_LONGER_NEEDED(&dum);
  400.     }
  401.     mm25number = 0;
  402.     mm50number = 0;
  403.     modon = false;
  404.     circle = false;
  405.     coords = false;
  406.     wander = false;
  407.     turnoff = false;
  408.     print("~r~AC-130 is now off!");
  409. }
  410.  
  411. void DUMMY(Vehicle veh, float x, float y, float z){
  412.     CREATE_OBJECT(0xFE520830, x, y, z, &dum, true);
  413.     SET_OBJECT_VISIBLE(dum, false);
  414.     MARK_MODEL_AS_NO_LONGER_NEEDED(0xFE520830);
  415.     FREEZE_OBJECT_POSITION(dum, true);
  416.     ATTACH_CAR_TO_OBJECT(veh, dum, 0, -maxDistance, 0, maxDistance, 0, 12.8, 0);
  417. }
  418.  
  419. void AIM(float *RotX, float *RotZ, float *createX, float *createY, float *createZ){
  420.     Camera game_cam;
  421.     GET_GAME_CAM(&game_cam);
  422.     if(IS_CAM_ACTIVE(game_cam)){
  423.         float camRotX, camRotY, camRotZ, camPosX, camPosY, camPosZ, adjacent;
  424.         GET_CAM_ROT(game_cam, &camRotX, &camRotY, &camRotZ);
  425.         GET_CAM_POS(game_cam, &camPosX, &camPosY, &camPosZ);
  426.         if (camRotX < 0.0)
  427.         {
  428.             *RotX = camRotX + 360.0;
  429.         }
  430.         else
  431.         {
  432.             *RotX = camRotX;
  433.         }
  434.         if (camRotZ < 0.0)
  435.         {
  436.             *RotZ = camRotZ + 360.0;
  437.         }
  438.         else
  439.         {
  440.             *RotZ = camRotZ;
  441.         }
  442.         adjacent = (6 * COS(camRotX));
  443.         *createX = camPosX - (adjacent * SIN(camRotZ));
  444.         *createY = camPosY + (adjacent * COS(camRotZ));
  445.         *createZ = camPosZ + (6 * SIN(camRotX));
  446.     }
  447. }
  448.  
  449. void EXPLODE_SMALL(float X,float Y,float Z){
  450.     ADD_EXPLOSION(X, Y, Z, EXPLOSION_GRENADE, 0.8f, 1, 0, 0.1f);
  451. }
  452.  
  453. void EXPLODE_MEDIUM(float X,float Y,float Z){
  454.     ADD_EXPLOSION(X, Y, Z, EXPLOSION_PETROL_PUMP, 0.8f, 1, 0, 0.1f);
  455. }
  456.  
  457. void EXPLODE_BIG(float X,float Y,float Z){
  458.     ADD_EXPLOSION(X, Y, Z, EXPLOSION_SHIP_DESTROY, 0.8f, 1, 0, 0.1f);
  459. }
  460.  
  461.  
  462. /*---------------------------------------Actions---------------------------------------*/
  463. void selectionLoop(void){
  464.     if(select == 1){
  465.         if(mm25){
  466.             if(IS_BUTTON_PRESSED(0, BUTTON_L)){
  467.                 if(IS_BUTTON_PRESSED(0, BUTTON_X)){
  468.                     if(mm25number < 30){
  469.                         REQUEST_MODEL(projectile);
  470.                         while(!HAS_MODEL_LOADED(projectile)){
  471.                             WAIT(0);
  472.                         }
  473.                         AIM(&objRotX, &objRotZ, &objX, &objY, &objZ);
  474.                         CREATE_OBJECT(projectile, objX, objY, objZ, &projectilesmm25[mm25number], true);
  475.                         SET_OBJECT_VISIBLE(projectilesmm25[mm25number], true);
  476.                         MARK_MODEL_AS_NO_LONGER_NEEDED(projectile);
  477.                         if(DOES_OBJECT_EXIST(projectilesmm25[mm25number])){
  478.                             GET_NETWORK_ID_FROM_OBJECT(projectilesmm25[mm25number], &projectileIDmm25);
  479.                             SET_NETWORK_ID_CAN_MIGRATE(projectileIDmm25, false);
  480.                             FREEZE_OBJECT_POSITION(projectilesmm25[mm25number], false);
  481.                             SET_OBJECT_QUATERNION(projectilesmm25[mm25number], 0, 0, 0, 0);
  482.                             SET_OBJECT_INVINCIBLE(projectilesmm25[mm25number], true);
  483.                             SET_OBJECT_DYNAMIC(projectilesmm25[mm25number], true);
  484.                             SET_OBJECT_COLLISION(projectilesmm25[mm25number], true);
  485.                             SET_OBJECT_RECORDS_COLLISIONS(projectilesmm25[mm25number], true);
  486.                             SET_OBJECT_AS_STEALABLE(projectilesmm25[mm25number], false);
  487.                             GET_CHAR_HEADING(GetPlayerPed(), &heading);
  488.                             if(heading < 90){
  489.                                 heading = (heading - 90) + 360;
  490.                             }
  491.                             else{
  492.                                 heading = heading - 90;
  493.                             }
  494.                             SET_OBJECT_HEADING(projectilesmm25[mm25number], heading);
  495.                             SET_OBJECT_ROTATION(projectilesmm25[mm25number], objRotX, 0.0, objRotZ);
  496.                             PLAY_SOUND_FROM_OBJECT(-1, "general_explosions_debris_1", projectilesmm25[mm25number]);
  497.                             STOP_SOUND(-1);
  498.                             WAIT(0); //not a mistake
  499.                             APPLY_FORCE_TO_OBJECT(projectilesmm25[mm25number], true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  500.                             mm25number++;
  501.                         }
  502.                     }
  503.                     else{
  504.                         print("~r~Reloading...");
  505.                     }
  506.                 }
  507.             }
  508.             anotherNumber++;
  509.             if(anotherNumber > 29){
  510.                 anotherNumber = 0;
  511.             }
  512.             if(DOES_OBJECT_EXIST(projectilesmm25[anotherNumber])){
  513.                 if(HAS_OBJECT_COLLIDED_WITH_ANYTHING(projectilesmm25[anotherNumber]) || IS_OBJECT_IN_WATER(projectilesmm25[anotherNumber]) || !IS_OBJECT_ON_SCREEN(projectilesmm25[anotherNumber])){
  514.                     FREEZE_OBJECT_POSITION(projectilesmm25[anotherNumber], true);
  515.                     GET_OBJECT_COORDINATES(projectilesmm25[anotherNumber], &ox, &oy, &oz);
  516.                     EXPLODE_SMALL(ox, oy, oz);
  517.                     DELETE_OBJECT(&projectilesmm25[anotherNumber]);
  518.                     MARK_OBJECT_AS_NO_LONGER_NEEDED(&projectilesmm25[anotherNumber]);
  519.                     mm25number--;
  520.                     anotherNumber--;
  521.                     if(anotherNumber < 0){
  522.                         anotherNumber = 0;
  523.                     }
  524.                     if(mm25number < 0){
  525.                         mm25number = 0;
  526.                     }
  527.                 }
  528.                 else{
  529.                     APPLY_FORCE_TO_OBJECT(projectilesmm25[anotherNumber], true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  530.                 }
  531.             }
  532.         }
  533.     }
  534.     if(select == 2){
  535.         if(mm50){
  536.             if(IS_BUTTON_PRESSED(0, BUTTON_L)){
  537.                 if(IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  538.                     if(mm50number < 5){
  539.                         REQUEST_MODEL(projectile);
  540.                         while(!HAS_MODEL_LOADED(projectile)){
  541.                             WAIT(0);
  542.                         }
  543.                         AIM(&objRotX, &objRotZ, &objX, &objY, &objZ);
  544.                         CREATE_OBJECT(projectile, objX, objY, objZ, &projectilesmm50[mm50number], true);
  545.                         SET_OBJECT_VISIBLE(projectilesmm50[mm50number], true);
  546.                         MARK_MODEL_AS_NO_LONGER_NEEDED(projectile);
  547.                         if(DOES_OBJECT_EXIST(projectilesmm50[mm50number])){
  548.                             GET_NETWORK_ID_FROM_OBJECT(projectilesmm50[mm50number], &projectileIDmm50);
  549.                             SET_NETWORK_ID_CAN_MIGRATE(projectileIDmm50, false);
  550.                             FREEZE_OBJECT_POSITION(projectilesmm50[mm50number], false);
  551.                             SET_OBJECT_QUATERNION(projectilesmm50[mm50number], 0, 0, 0, 0);
  552.                             SET_OBJECT_INVINCIBLE(projectilesmm50[mm50number], true);
  553.                             SET_OBJECT_DYNAMIC(projectilesmm50[mm50number], true);
  554.                             SET_OBJECT_COLLISION(projectilesmm50[mm50number], true);
  555.                             SET_OBJECT_RECORDS_COLLISIONS(projectilesmm50[mm50number], true);
  556.                             SET_OBJECT_AS_STEALABLE(projectilesmm50[mm50number], false);
  557.                             GET_CHAR_HEADING(GetPlayerPed(), &heading);
  558.                             if(heading < 90){
  559.                                 heading = (heading - 90) + 360;
  560.                             }
  561.                             else{
  562.                                 heading = heading - 90;
  563.                             }
  564.                             SET_OBJECT_HEADING(projectilesmm50[mm50number], heading);
  565.                             SET_OBJECT_ROTATION(projectilesmm50[mm50number], objRotX, 0.0, objRotZ);
  566.                             PLAY_SOUND_FROM_OBJECT(-1, "shotgun_fire", projectilesmm50[mm50number]);
  567.                             STOP_SOUND(-1);
  568.                             START_PTFX_ON_OBJ("weap_molotov_trail", projectilesmm50[mm50number], 0.00000000, -0.04000000, 0.00000000, 0.00000000, 0.00000000, 2.00000000, 1);
  569.                             WAIT(0); //not a mistake
  570.                             APPLY_FORCE_TO_OBJECT(projectilesmm50[mm50number], true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  571.                             mm50number++;
  572.                         }
  573.                     }
  574.                     else{
  575.                         print("~r~Reloading...");
  576.                     }
  577.                 }
  578.             }
  579.             anotherNumber++;
  580.             if(anotherNumber > 4){
  581.                 anotherNumber = 0;
  582.             }
  583.             if(DOES_OBJECT_EXIST(projectilesmm50[anotherNumber])){
  584.                 if(HAS_OBJECT_COLLIDED_WITH_ANYTHING(projectilesmm50[anotherNumber]) || IS_OBJECT_IN_WATER(projectilesmm50[anotherNumber]) || !IS_OBJECT_ON_SCREEN(projectilesmm50[anotherNumber])){
  585.                     FREEZE_OBJECT_POSITION(projectilesmm50[anotherNumber], true);
  586.                     GET_OBJECT_COORDINATES(projectilesmm50[anotherNumber], &ox, &oy, &oz);
  587.                     EXPLODE_MEDIUM(ox, oy, oz);
  588.                     DELETE_OBJECT(&projectilesmm50[anotherNumber]);
  589.                     MARK_OBJECT_AS_NO_LONGER_NEEDED(&projectilesmm50[anotherNumber]);
  590.                     anotherNumber--;
  591.                     mm50number--;
  592.                     if(anotherNumber < 0){
  593.                         anotherNumber = 0;
  594.                     }
  595.                     if(mm50number < 0){
  596.                         mm50number = 0;
  597.                     }
  598.                 }
  599.                 else{
  600.                     APPLY_FORCE_TO_OBJECT(projectilesmm50[anotherNumber], true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  601.                 }
  602.             }
  603.         }
  604.     }
  605.     if(select == 3){
  606.         if(mm105){
  607.             if(IS_BUTTON_PRESSED(0, BUTTON_L)){
  608.                 if(IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  609.                     if(!DOES_OBJECT_EXIST(projectilesmm105)){
  610.                         REQUEST_MODEL(projectile);
  611.                         while(!HAS_MODEL_LOADED(projectile)){
  612.                             WAIT(0);
  613.                         }
  614.                         AIM(&objRotX, &objRotZ, &objX, &objY, &objZ);
  615.                         CREATE_OBJECT(projectile, objX, objY, objZ, &projectilesmm105, true);
  616.                         SET_OBJECT_VISIBLE(projectilesmm105, true);
  617.                         MARK_MODEL_AS_NO_LONGER_NEEDED(projectile);
  618.                         if(DOES_OBJECT_EXIST(projectilesmm105)){
  619.                             GET_NETWORK_ID_FROM_OBJECT(projectilesmm105, &projectileIDmm105);
  620.                             SET_NETWORK_ID_CAN_MIGRATE(projectileIDmm105, false);
  621.                             FREEZE_OBJECT_POSITION(projectilesmm105, false);
  622.                             SET_OBJECT_QUATERNION(projectilesmm105, 0, 0, 0, 0);
  623.                             SET_OBJECT_INVINCIBLE(projectilesmm105, true);
  624.                             SET_OBJECT_DYNAMIC(projectilesmm105, true);
  625.                             SET_OBJECT_COLLISION(projectilesmm105, true);
  626.                             SET_OBJECT_RECORDS_COLLISIONS(projectilesmm105, true);
  627.                             SET_OBJECT_AS_STEALABLE(projectilesmm105, false);
  628.                             GET_CHAR_HEADING(GetPlayerPed(), &heading);
  629.                             if(heading < 90){
  630.                                 heading = (heading - 90) + 360;
  631.                             }
  632.                             else{
  633.                                 heading = heading - 90;
  634.                             }
  635.                             SET_OBJECT_HEADING(projectilesmm105, heading);
  636.                             SET_OBJECT_ROTATION(projectilesmm105, objRotX, 0.0, objRotZ);
  637.                             PLAY_SOUND_FROM_OBJECT(-1, "ROCKET_LAUNCH", projectilesmm105);
  638.                             STOP_SOUND(-1);
  639.                             START_PTFX_ON_OBJ("weap_rocket_player", projectilesmm105, 0.00000000, -0.04000000, 0.00000000, 0.00000000, 0.00000000, 2.00000000, 1);
  640.                             WAIT(0); //not a mistake
  641.                             APPLY_FORCE_TO_OBJECT(projectilesmm105, true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  642.                         }
  643.                     }
  644.                     else{
  645.                         print("~r~Reloading...");
  646.                     }
  647.                 }
  648.             }
  649.             if(DOES_OBJECT_EXIST(projectilesmm105)){
  650.                 if(HAS_OBJECT_COLLIDED_WITH_ANYTHING(projectilesmm105) || IS_OBJECT_IN_WATER(projectilesmm105) || !IS_OBJECT_ON_SCREEN(projectilesmm105)){
  651.                     FREEZE_OBJECT_POSITION(projectilesmm105, true);
  652.                     GET_OBJECT_COORDINATES(projectilesmm105, &ox, &oy, &oz);
  653.                     EXPLODE_BIG(ox, oy, oz);
  654.                     DELETE_OBJECT(&projectilesmm105);
  655.                     MARK_OBJECT_AS_NO_LONGER_NEEDED(&projectilesmm105);
  656.                 }
  657.                 else{
  658.                     APPLY_FORCE_TO_OBJECT(projectilesmm105, true, 0, 1000, 0, 0, 0, 0, true, true, true, true);
  659.                 }
  660.             }
  661.         }
  662.     }
  663. }
  664.  
  665. void selections(void){
  666.     if(modon){
  667.         if(DOES_VEHICLE_EXIST(pveh) && DOES_CHAR_EXIST(pilot) && IS_CHAR_IN_ANY_HELI(pilot)){
  668.             if(IS_BUTTON_PRESSED(0, BUTTON_LB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  669.                 if(showSelection){
  670.                     showSelection = false;
  671.                 }
  672.                 else{
  673.                     showSelection = true;
  674.                 }
  675.             }
  676.             if(showSelection){
  677.                 if(IS_BUTTON_JUST_PRESSED(0, BUTTON_B)){
  678.                     showSelection = false;
  679.                 }
  680.                 if(IS_BUTTON_JUST_PRESSED(0, DPAD_LEFT)){
  681.                     select--;
  682.                 }
  683.                 if(IS_BUTTON_JUST_PRESSED(0, DPAD_RIGHT)){
  684.                     select++;
  685.                 }
  686.                 if(select > 3){
  687.                     select = 1;
  688.                 }
  689.                 if(select < 1){
  690.                     select = 3;
  691.                 }
  692.                 if(select == 1){
  693.                     if(mm25){
  694.                         printShort("~b~25mm Cannons ~g~[Enabled]");
  695.                     }
  696.                     else{
  697.                         printShort("~b~25mm Cannons ~r~[Disabled]");
  698.                     }
  699.                     if(IS_BUTTON_JUST_PRESSED(0, BUTTON_A)){
  700.                         if(mm25){
  701.                             mm25 = false;
  702.                         }
  703.                         else{
  704.                             print("~g~25mm Cannons are now actiavted! Hold ~PAD_X~ to shoot!");
  705.                             showSelection = false;
  706.                             mm25 = true;
  707.                             mm50 = false;
  708.                             mm105 = false;
  709.                         }
  710.                     }
  711.                 }
  712.                 if(select == 2){
  713.                     if(mm50){
  714.                         printShort("~b~50mm Cannons ~g~[Enabled]");
  715.                     }
  716.                     else{
  717.                         printShort("~b~50mm Cannons ~r~[Disabled]");
  718.                     }
  719.                     if(IS_BUTTON_JUST_PRESSED(0, BUTTON_A)){
  720.                         if(mm50){
  721.                             mm50 = false;
  722.                         }
  723.                         else{
  724.                             print("~g~50mm Cannons are now actiavted! Press ~PAD_X~ to shoot!");
  725.                             showSelection = false;
  726.                             mm50 = true;
  727.                             mm25 = false;
  728.                             mm105 = false;
  729.                         }
  730.                     }
  731.                 }
  732.                 if(select == 3){
  733.                     if(mm105){
  734.                         printShort("~b~105mm Cannons ~g~[Enabled]");
  735.                     }
  736.                     else{
  737.                         printShort("~b~105mm Cannons ~r~[Disabled]");
  738.                     }
  739.                     if(IS_BUTTON_JUST_PRESSED(0, BUTTON_A)){
  740.                         if(mm105){
  741.                             mm105 = false;
  742.                         }
  743.                         else{
  744.                             print("~g~105mm Cannons are now actiavted! Press ~PAD_X~ to shoot!");
  745.                             showSelection = false;
  746.                             mm105 = true;
  747.                             mm25 = false;
  748.                             mm50 = false;
  749.                         }
  750.                     }
  751.                 }
  752.             }
  753.         }
  754.     }
  755. }
  756.  
  757. void drawShootingScreenCircle(void){
  758.     //Shoot screen will glitch if they are set to if statements for the pilots task
  759.     HIDE_HELP_TEXT_THIS_FRAME();
  760.     SET_UP_DRAW_1(0.4000, 0.5100, 145, 151, 153, 255);
  761.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.3900, 0.0500, "STRING", "Circling Waypoint");
  762.     if(mm25){
  763.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  764.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "25mm Cannons");
  765.         DRAW_RECT(0.5125, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  766.         DRAW_RECT(0.5000, 0.5213, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  767.     }
  768.     if(mm50){
  769.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  770.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "50mm Cannons");
  771.         DRAW_RECT(0.5000, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  772.         DRAW_RECT(0.5000, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  773.     }
  774.     if(mm105){
  775.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  776.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4200, 0.1000, "STRING", "105mm Cannons");
  777.         DRAW_RECT(0.5000, 0.5200, 0.0300, 0.0100, 0, 0, 0, 50); //bottom x line
  778.         DRAW_RECT(0.5175, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //right y line
  779.         DRAW_RECT(0.5000, 0.4800, 0.0300, 0.0100, 0, 0, 0, 50); //top x line
  780.         DRAW_RECT(0.4825, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //left y line
  781.     }
  782. }
  783.  
  784. void drawShootingScreenTravel(void){
  785.     HIDE_HELP_TEXT_THIS_FRAME();
  786.     SET_UP_DRAW_1(0.4000, 0.5100, 145, 151, 153, 255);
  787.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.3700, 0.0500, "STRING", "Traveling to Waypoint");
  788.         if(mm25){
  789.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  790.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "25mm Cannons");
  791.         DRAW_RECT(0.5125, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  792.         DRAW_RECT(0.5000, 0.5213, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  793.     }
  794.     if(mm50){
  795.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  796.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "50mm Cannons");
  797.         DRAW_RECT(0.5000, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  798.         DRAW_RECT(0.5000, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  799.     }
  800.     if(mm105){
  801.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  802.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4200, 0.1000, "STRING", "105mm Cannons");
  803.         DRAW_RECT(0.5000, 0.5200, 0.0300, 0.0100, 0, 0, 0, 50); //bottom x line
  804.         DRAW_RECT(0.5175, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //right y line
  805.         DRAW_RECT(0.5000, 0.4800, 0.0300, 0.0100, 0, 0, 0, 50); //top x line
  806.         DRAW_RECT(0.4825, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //left y line
  807.     }
  808. }
  809.  
  810. void drawShootingScreenWander(void){
  811.     HIDE_HELP_TEXT_THIS_FRAME();
  812.     SET_UP_DRAW_1(0.4000, 0.5100, 145, 151, 153, 255);
  813.     DISPLAY_TEXT_WITH_LITERAL_STRING(0.4370, 0.0500, "STRING", "Auto Pilot");
  814.         if(mm25){
  815.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  816.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "25mm Cannons");
  817.         DRAW_RECT(0.5125, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  818.         DRAW_RECT(0.5000, 0.5213, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  819.     }
  820.     if(mm50){
  821.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  822.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4280, 0.1000, "STRING", "50mm Cannons");
  823.         DRAW_RECT(0.5000, 0.5000, 0.0300, 0.0100, 0, 0, 0, 50); //x cross
  824.         DRAW_RECT(0.5000, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //y cross
  825.     }
  826.     if(mm105){
  827.         SET_UP_DRAW_1(0.3100, 0.4550, 145, 151, 153, 255);
  828.         DISPLAY_TEXT_WITH_LITERAL_STRING(0.4200, 0.1000, "STRING", "105mm Cannons");
  829.         DRAW_RECT(0.5000, 0.5200, 0.0300, 0.0100, 0, 0, 0, 50); //bottom x line
  830.         DRAW_RECT(0.5175, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //right y line
  831.         DRAW_RECT(0.5000, 0.4800, 0.0300, 0.0100, 0, 0, 0, 50); //top x line
  832.         DRAW_RECT(0.4825, 0.5000, 0.0050, 0.0500, 0, 0, 0, 50); //left y line
  833.     }
  834. }
  835.  
  836. void characterLoop(void){
  837.     if(HAS_CHAR_GOT_WEAPON(GetPlayerPed(), WEAPON_DEAGLE)){
  838.         SET_CURRENT_CHAR_WEAPON(GetPlayerPed(), WEAPON_DEAGLE, true);
  839.         BLOCK_PED_WEAPON_SWITCHING(GetPlayerPed(), true);
  840.     }
  841.     else{
  842.         GIVE_WEAPON_TO_CHAR(GetPlayerPed(), WEAPON_DEAGLE, 9999, false);
  843.     }
  844. }
  845.  
  846. void soundsLoop(void){
  847.     if(modon){
  848.         DISABLE_FRONTEND_RADIO();
  849.     }
  850.     else{
  851.         ENABLE_FRONTEND_RADIO();
  852.     }
  853. }
  854.  
  855. void toggleLoop(void){
  856.     if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  857.         if(!modon){
  858.             modon = true;
  859.             SPAWN_PLANE();
  860.         }
  861.     }
  862. }
  863.  
  864. void circleCoords(void){
  865.     if(modon){
  866.         if(DOES_VEHICLE_EXIST(pveh) && DOES_CHAR_EXIST(pilot) && IS_CHAR_IN_ANY_HELI(pilot) && IS_CHAR_IN_ANY_HELI(GetPlayerPed())){
  867.             if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  868.                 while(circle){
  869.                     WAIT(0);
  870.                     for(a = 360; a >= 0;a = a - 0.3){
  871.                         WAIT(0); //not a mistake must be here otherwise you will lag like a motherfucker
  872.                         if(a == 0){
  873.                             a = 360;
  874.                         }
  875.                         drawShootingScreenCircle();
  876.                         selections();
  877.                         selectionLoop();
  878.                         controlsLoop();
  879.                         characterLoop();
  880.                         SET_OBJECT_HEADING(dum, a);
  881.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  882.                             DETACH_CAR(pveh);
  883.                             if(DOES_OBJECT_EXIST(dum)){
  884.                                 DELETE_OBJECT(&dum);
  885.                                 MARK_OBJECT_AS_NO_LONGER_NEEDED(&dum);
  886.                             }
  887.                             FREEZE_CAR_POSITION(pveh, false);
  888.                             SET_VEHICLE_QUATERNION(pveh, 0, 0, 0, 0);
  889.                             circle = false;
  890.                             turnoff = true;
  891.                             break;
  892.                         }
  893.                         if(!DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  894.                             DETACH_CAR(pveh);
  895.                             if(DOES_OBJECT_EXIST(dum)){
  896.                                 DELETE_OBJECT(&dum);
  897.                                 MARK_OBJECT_AS_NO_LONGER_NEEDED(&dum);
  898.                             }
  899.                             FREEZE_CAR_POSITION(pveh, false);
  900.                             SET_VEHICLE_QUATERNION(pveh, 0, 0, 0, 0);
  901.                             circle = false;
  902.                             break;
  903.                         }
  904.                     }
  905.                 }
  906.                 if(turnoff){
  907.                     RESET_EVERYTHING();
  908.                 }
  909.             }
  910.         }
  911.     }
  912. }
  913.  
  914. void goToCoords(void){
  915.     if(modon){
  916.         if(DOES_VEHICLE_EXIST(pveh) && DOES_CHAR_EXIST(pilot) && IS_CHAR_IN_ANY_HELI(pilot)){
  917.             if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  918.                 print("~g~Traveling to location!");
  919.                 WAIT(5);
  920.                 coords = true;
  921.                 while(coords){
  922.                     WAIT(0);
  923.                     if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  924.                         coords = false;
  925.                         turnoff = true;
  926.                     }
  927.                     if(!DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  928.                         coords = false;
  929.                     }
  930.                     drawShootingScreenTravel();
  931.                     selections();
  932.                     selectionLoop();
  933.                     controlsLoop();
  934.                     characterLoop();
  935.                     GET_BLIP_COORDS(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT), &position);
  936.                     GET_GROUND_Z_FOR_3D_COORD(position.x, position.y, position.z, &zGround);
  937.                     TASK_HELI_MISSION(pilot, pveh, 0, 0, position.x, position.y, zGround + maxDistance, 4, 30.0f, 5, -1, (ROUND(zGround + maxDistance) + 1), 40);
  938.                     GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  939.                     GET_DISTANCE_BETWEEN_COORDS_2D(px, py, position.x, position.y, &distance);
  940.                     if(distance <= maxDistance){
  941.                         SET_CAR_FORWARD_SPEED(pveh, 0);
  942.                         DUMMY(pveh, position.x, position.y, zGround);
  943.                         coords = false;
  944.                         circle = true;
  945.                         break;
  946.                     }
  947.                 }
  948.             }
  949.             else{ //This is just to fly around the map if you don't want to set a waypoint
  950.                 print("~g~Auto pilot!");
  951.                 wander = true;
  952.                 while(wander){
  953.                     WAIT(0);
  954.                     if(task == 1){
  955.                         drawShootingScreenWander();
  956.                         selections();
  957.                         selectionLoop();
  958.                         controlsLoop();
  959.                         characterLoop();
  960.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  961.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  962.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch1X, ch1Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  963.                         if(IS_CHAR_IN_AREA_2D(pilot, ch1X + 20, ch1Y + 20, ch1X - 20, ch1Y - 20, false)){
  964.                             task++;
  965.                         }
  966.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  967.                             task = 1;
  968.                             wander = false;
  969.                             turnoff = true;
  970.                         }
  971.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  972.                             task = 1;
  973.                             wander = false;
  974.                         }
  975.                     }
  976.                     if(task == 2){
  977.                         drawShootingScreenWander();
  978.                         selections();
  979.                         selectionLoop();
  980.                         controlsLoop();
  981.                         characterLoop();
  982.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  983.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  984.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch2X, ch2Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  985.                         if(IS_CHAR_IN_AREA_2D(pilot, ch2X + 20, ch2Y + 20, ch2X - 20, ch2Y - 20, false)){
  986.                             task++;
  987.                         }
  988.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  989.                             task = 1;
  990.                             wander = false;
  991.                             turnoff = true;
  992.                         }
  993.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  994.                             task = 1;
  995.                             wander = false;
  996.                         }
  997.                     }
  998.                     if(task == 3){
  999.                         characterLoop();
  1000.                         drawShootingScreenWander();
  1001.                         selections();
  1002.                         selectionLoop();
  1003.                         controlsLoop();
  1004.                         characterLoop();
  1005.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  1006.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  1007.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch3X, ch3Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  1008.                         if(IS_CHAR_IN_AREA_2D(pilot, ch3X + 20, ch3Y + 20, ch3X - 20, ch3Y - 20, false)){
  1009.                             task++;
  1010.                         }
  1011.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  1012.                             task = 1;
  1013.                             wander = false;
  1014.                             turnoff = true;
  1015.                         }
  1016.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  1017.                             task = 1;
  1018.                             wander = false;
  1019.                         }
  1020.                     }
  1021.                     if(task == 4){
  1022.                         drawShootingScreenWander();
  1023.                         selections();
  1024.                         selectionLoop();
  1025.                         controlsLoop();
  1026.                         characterLoop();
  1027.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  1028.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  1029.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch4X, ch4Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  1030.                         if(IS_CHAR_IN_AREA_2D(pilot, ch4X + 20, ch4Y + 20, ch4X - 20, ch4Y - 20, false)){
  1031.                             task++;
  1032.                         }
  1033.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  1034.                             task = 1;
  1035.                             wander = false;
  1036.                             turnoff = true;
  1037.                         }
  1038.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  1039.                             task = 1;
  1040.                             wander = false;
  1041.                         }
  1042.                     }
  1043.                     if(task == 5){
  1044.                         drawShootingScreenWander();
  1045.                         selections();
  1046.                         selectionLoop();
  1047.                         controlsLoop();
  1048.                         characterLoop();
  1049.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  1050.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  1051.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch5X, ch5Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  1052.                         if(IS_CHAR_IN_AREA_2D(pilot, ch5X + 20, ch5Y + 20, ch5X - 20, ch5Y - 20, false)){
  1053.                             task++;
  1054.                         }
  1055.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  1056.                             task = 1;
  1057.                             wander = false;
  1058.                             turnoff = true;
  1059.                         }
  1060.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  1061.                             task = 1;
  1062.                             wander = false;
  1063.                         }
  1064.                     }
  1065.                     if(task == 6){
  1066.                         drawShootingScreenWander();
  1067.                         selections();
  1068.                         selectionLoop();
  1069.                         controlsLoop();
  1070.                         characterLoop();
  1071.                         GET_CAR_COORDINATES(pveh, &px, &py, &pz);
  1072.                         GET_GROUND_Z_FOR_3D_COORD(px, py, pz, &zGround);
  1073.                         TASK_HELI_MISSION(pilot, pveh, 0, 0, ch6X, ch6Y, (zGround + maxDistance), 4, 10.0f, 5, -1, (ROUND(maxDistance) + 1), 40);
  1074.                         if(IS_CHAR_IN_AREA_2D(pilot, ch6X + 20, ch6Y + 20, ch6X - 20, ch6Y - 20, false)){
  1075.                             task++;
  1076.                         }
  1077.                         if(IS_BUTTON_PRESSED(0, BUTTON_RB) && IS_BUTTON_JUST_PRESSED(0, BUTTON_X)){
  1078.                             task = 1;
  1079.                             wander = false;
  1080.                             turnoff = true;
  1081.                         }
  1082.                         if(DOES_BLIP_EXIST(GET_FIRST_BLIP_INFO_ID(BLIP_WAYPOINT))){
  1083.                             task = 1;
  1084.                             wander = false;
  1085.                         }
  1086.                     }
  1087.                     if(task > 6){
  1088.                         task = 1;
  1089.                     }
  1090.                 }
  1091.                 if(turnoff){
  1092.                     RESET_EVERYTHING();
  1093.                 }
  1094.             }
  1095.         }
  1096.     }
  1097. }
  1098.  
  1099.  
  1100. /*----------------------------------------Start----------------------------------------*/
  1101. void main(void){
  1102.     THIS_SCRIPT_IS_SAFE_FOR_NETWORK_GAME();
  1103.     print("~g~AC-130 by XF CH3WY!");
  1104.     WAIT(2500);
  1105.     print("~b~Press ~PAD_RB~ + ~PAD_B~ for controls!");
  1106.     GIVE_WEAPON_TO_CHAR(GetPlayerPed(), WEAPON_DEAGLE, 9999, false);
  1107.     do{
  1108.         toggleLoop();
  1109.         controlsLoop();
  1110.         soundsLoop();
  1111.         goToCoords();
  1112.         circleCoords();
  1113.         WAIT(0);
  1114.     }while(true);
  1115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement