751 lines
22 KiB
Python
Executable File
751 lines
22 KiB
Python
Executable File
#IF IS_FINAL_BUILD
|
|
SCRIPT
|
|
ENDSCRIPT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "commands_path.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_physics.sch"
|
|
USING "commands_decorator.sch"
|
|
USING "model_enums.sch"
|
|
|
|
|
|
// Data for the plane
|
|
STRUCT PlaneVehicleData
|
|
VEHICLE_INDEX vindex
|
|
PED_INDEX pindex
|
|
ENDSTRUCT
|
|
|
|
PlaneVehicleData vehicleData[10]
|
|
int iSpawnedPlanes = 0
|
|
|
|
FLOAT fPlaneHeight = 20.0
|
|
FLOAT fPlaneSpeed = 20.0
|
|
FLOAT fPlaneRadius = 20.0
|
|
FLOAT fOrientation = -1.0
|
|
BOOL bSpawn = FALSE
|
|
bool bDelete = FALSE
|
|
BOOL bTeleport = FALSE
|
|
bool bTaskChasePlayer = FALSE
|
|
bool bTaskChasePlane = FALSE
|
|
bool bTaskGotoPlayer = FALSE
|
|
BOOL bGotoPlayerAnyMeans = FALSE
|
|
bool bTaskPlaneLand = FALSE
|
|
bool bPlaneAttack = FALSE
|
|
bool bPlaneSequence = FALSE
|
|
bool bPlaneDriveOnGround = FALSE
|
|
bool bFleePlayer = FALSE
|
|
bool bLandingGear = true
|
|
bool bPreviousLandingGear = true
|
|
|
|
|
|
BOOL bExecute = TRUE
|
|
int iSpawnPlaneType = 0
|
|
|
|
int iPlaneMinHeightAboveTerrain = 20
|
|
int iPreviousPlaneMinHeightAboveTerrain = 20
|
|
|
|
int iSelectedPlane = 0
|
|
int iPreviousSelectedPlane = 20
|
|
|
|
int iChasePlane = 0
|
|
int iPreviousChasePlane = 20
|
|
SEQUENCE_INDEX seqPlaneLeave
|
|
|
|
PROC GENERATE_PLANE_LOCATION(VECTOR& planePosition)
|
|
|
|
// grab the player's position for offsetting the scenario
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
VECTOR playerForward = GET_ENTITY_FORWARD_VECTOR(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
Vector g_up = <<0, 0, 1.0>>
|
|
planePosition = playerPosition + ( playerForward * fPlaneRadius ) + (g_up * fPlaneHeight)
|
|
|
|
ENDPROC // GENERATE_HELI_LOCATION
|
|
|
|
PROC DELETE_PLANES()
|
|
|
|
CLEAR_SEQUENCE_TASK(seqPlaneLeave)
|
|
|
|
INT i
|
|
FOR i = 0 to iSpawnedPlanes
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[i].vindex)
|
|
DELETE_VEHICLE(vehicleData[i].vindex)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[i].pindex)
|
|
DELETE_PED(vehicleData[i].pindex)
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
iSpawnedPlanes = 0
|
|
ENDPROC
|
|
|
|
PROC CREATE_PLANE()
|
|
|
|
MODEL_NAMES model = CARGOPLANE
|
|
IF iSpawnPlaneType = 1
|
|
model = CUBAN800
|
|
ELIF iSpawnPlaneType = 2
|
|
model = DUSTER
|
|
ELIF iSpawnPlaneType = 3
|
|
model = JET
|
|
ELIF iSpawnPlaneType = 4
|
|
model = LAZER
|
|
ELIF iSpawnPlaneType = 5
|
|
model = LUXOR
|
|
ELIF iSpawnPlaneType = 6
|
|
model = MAMMATUS
|
|
ELIF iSpawnPlaneType = 7
|
|
model = SHAMAL
|
|
ELIF iSpawnPlaneType = 8
|
|
model = STUNT
|
|
ELIF iSpawnPlaneType = 9
|
|
model = TITAN
|
|
ELIF iSpawnPlaneType = 10
|
|
model = VELUM
|
|
|
|
ENDIF
|
|
|
|
MODEL_NAMES pilot = S_M_Y_MARINE_01 //S_M_M_Pilot_02
|
|
|
|
|
|
REQUEST_MODEL(model)
|
|
REQUEST_MODEL(pilot)
|
|
while not (HAS_MODEL_LOADED(model) and HAS_MODEL_LOADED(pilot))
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
|
|
FLOAT playerHeading = GET_ENTITY_HEADING(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
FLOAT planeHeading = (playerHeading + 180 ) % 360
|
|
|
|
VECTOR planePosition
|
|
GENERATE_PLANE_LOCATION(planePosition)
|
|
|
|
// make the car and put in a driver
|
|
vehicleData[iSpawnedplanes].vindex = CREATE_VEHICLE(
|
|
model,
|
|
planePosition,
|
|
planeHeading )
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSpawnedPlanes].vindex)
|
|
|
|
SET_ENTITY_VISIBLE(vehicleData[iSpawnedPlanes].vindex, TRUE)
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSpawnedPlanes].vindex, TRUE)
|
|
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehicleData[iSpawnedPlanes].vindex, FALSE)
|
|
|
|
|
|
vehicleData[iSpawnedPlanes].pindex = CREATE_PED_INSIDE_VEHICLE(vehicleData[iSpawnedPlanes].vindex,PEDTYPE_MISSION,pilot,VS_DRIVER)
|
|
|
|
iSelectedPlane = iSpawnedPlanes
|
|
iSpawnedPlanes++
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TELEPORT_PLANE()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
playerPosition.z += fPlaneHeight
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_ENTITY_COORDS_NO_OFFSET(vehicleData[iSelectedPlane].vindex, playerPosition)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TASK_PLANE_GOTO_PLAYER
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
playerPosition.z += fPlaneHeight
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF fPlaneHeight > 2
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
ENDIF
|
|
|
|
//TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedPlane].pindex,playerPosition,PEDMOVEBLENDRATIO_RUN,GET_VEHICLE_PED_IS_IN(vehicleData[iSelectedPlane].pindex))
|
|
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
TASK_PLANE_MISSION(vehicleData[iSelectedPlane].pindex, vehicleData[iSelectedPlane].vindex
|
|
, NULL, NULL, playerPosition
|
|
, MISSION_GOTO, fPlaneSpeed, -1, fOrientation, iPlaneMinHeightAboveTerrain, iPreviousPlaneMinHeightAboveTerrain)
|
|
|
|
|
|
/*
|
|
TASK_VEHICLE_DRIVE_TO_COORD(vehicleData[iSelectedPlane].pindex
|
|
, vehicleData[iSelectedPlane].vindex
|
|
, playerPosition
|
|
, fPlaneSpeed
|
|
, DRIVINGSTYLE_NORMAL
|
|
, GET_ENTITY_MODEL(vehicleData[iSelectedPlane].vindex)
|
|
, DRIVINGMODE_PLOUGHTHROUGH
|
|
, -1
|
|
, -1 )
|
|
*/
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TASK_PLANE_GOTO_PLAYER_ANY_MEANS
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
playerPosition.z += fPlaneHeight
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF fPlaneHeight > 2
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
ENDIF
|
|
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
|
|
TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedPlane].pindex,playerPosition,PEDMOVEBLENDRATIO_RUN,GET_VEHICLE_PED_IS_IN(vehicleData[iSelectedPlane].pindex))
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TASK_PLANE_CHASE_PLAYER
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
|
|
TASK_PLANE_CHASE(vehicleData[iSelectedPlane].pindex, GET_PLAYER_PED(GET_PLAYER_INDEX()), <<0,-20, 20>> )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TASK_PLANE_CHASE_PLANE
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iChasePlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iChasePlane].pindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
TASK_PLANE_CHASE(vehicleData[iSelectedPlane].pindex, vehicleData[iChasePlane].pindex, <<0,-20, 20>> )
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TEST_TASK_PLANE_ATTACK
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iChasePlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iChasePlane].pindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
|
|
IF ( iChasePlane <> iSelectedPlane )
|
|
|
|
TASK_PLANE_MISSION(vehicleData[iSelectedPlane].pindex, vehicleData[iSelectedPlane].vindex
|
|
, vehicleData[iChasePlane].vindex, vehicleData[iChasePlane].pindex, GET_ENTITY_COORDS(vehicleData[iChasePlane].pindex)
|
|
, MISSION_ATTACK, fPlaneSpeed, -1, 30.0, 500, 50)
|
|
|
|
ELSE
|
|
|
|
TASK_PLANE_MISSION(vehicleData[iSelectedPlane].pindex, vehicleData[iSelectedPlane].vindex
|
|
, NULL, GET_PLAYER_PED(GET_PLAYER_INDEX()), GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
, MISSION_ATTACK, fPlaneSpeed, -1, 30.0, 500, 50)
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
//TASK_PLANE_CHASE(vehicleData[iSelectedPlane].pindex, vehicleData[iChasePlane].pindex, <<0,-20, 20>> )
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TEST_TASK_PLANE_FLEE_PLAYER()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
|
|
TASK_PLANE_MISSION(vehicleData[iSelectedPlane].pindex, vehicleData[iSelectedPlane].vindex
|
|
, NULL, GET_PLAYER_PED(GET_PLAYER_INDEX()), GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
, MISSION_FLEE, fPlaneSpeed, -1, 30.0, 500, 500)
|
|
|
|
|
|
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TEST_TASK_PLANE_LAND()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
TASK_PLANE_LAND(vehicleData[iSelectedPlane].pindex, vehicleData[iSelectedPlane].vindex, <<1061.6,3071.7, 41.0>>, <<1703.5,3261.8,40.9>> )
|
|
|
|
//TASK_PLANE_MISSION(vehicleData.pindex,vehicleData.vindex,NULL,NULL,<<1600,3211,40.5>>,MISSION_LAND_AND_WAIT,30,5,294,40,0)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC TEST_TASK_PLANE_DRIVE_ON_GROUND()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
TASK_VEHICLE_DRIVE_TO_COORD(vehicleData[iSelectedPlane].pindex
|
|
, vehicleData[iSelectedPlane].vindex
|
|
, playerPosition
|
|
, fPlaneSpeed
|
|
, DRIVINGSTYLE_NORMAL
|
|
, GET_ENTITY_MODEL(vehicleData[iSelectedPlane].vindex)
|
|
, DF_PlaneTaxiMode | DF_PreferNavmeshRoute | DF_PreventBackgroundPathfinding
|
|
, 2
|
|
, 40 )
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TEST_TASK_PLANE_SEQUENCE()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].vindex)
|
|
if IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedPlane].vindex)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedPlane].pindex)
|
|
IF NOT IS_PED_INJURED(vehicleData[iSelectedPlane].pindex)
|
|
|
|
FREEZE_ENTITY_POSITION(vehicleData[iSelectedPlane].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedPlane].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedPlane].vindex)
|
|
|
|
SET_VEHICLE_FORWARD_SPEED(vehicleData[iSelectedPlane].vindex, fPlaneSpeed)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedPlane].vindex, TRUE, TRUE)
|
|
SET_HELI_BLADES_FULL_SPEED(vehicleData[iSelectedPlane].vindex)
|
|
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
playerPosition.z += fPlaneHeight
|
|
|
|
OPEN_SEQUENCE_TASK(seqPlaneLeave)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, vehicleData[iSelectedPlane].vindex
|
|
, playerPosition, fPlaneSpeed
|
|
, DRIVINGSTYLE_NORMAL
|
|
, GET_ENTITY_MODEL(vehicleData[iSelectedPlane].vindex)
|
|
, DRIVINGMODE_PLOUGHTHROUGH
|
|
, 17.5
|
|
, -1)
|
|
|
|
|
|
TASK_VEHICLE_DRIVE_WANDER(NULL, vehicleData[iSelectedPlane].vindex, fPlaneSpeed, DRIVINGMODE_PLOUGHTHROUGH) //TASK_VEHICLE_TEMP_ACTION(NULL, NET_TO_VEH(serverBD.CrateDropData.PlaneData.Plane.niVeh), TEMPACT_GOFORWARD, 999999)
|
|
CLOSE_SEQUENCE_TASK(seqPlaneLeave)
|
|
|
|
|
|
TASK_PERFORM_SEQUENCE(vehicleData[iSelectedPlane].pindex, seqPlaneLeave)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC CREATE_WIDGETS()
|
|
START_WIDGET_GROUP ("gtest_airplane")
|
|
ADD_WIDGET_INT_SLIDER("Selected Plane", iSelectedPlane, 0, 10, 1)
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO ("CARGOPLANE")
|
|
ADD_TO_WIDGET_COMBO ("CUBAN800")
|
|
ADD_TO_WIDGET_COMBO ("DUSTER")
|
|
ADD_TO_WIDGET_COMBO ("JET")
|
|
ADD_TO_WIDGET_COMBO ("LAZER")
|
|
ADD_TO_WIDGET_COMBO ("LUXOR")
|
|
ADD_TO_WIDGET_COMBO ("MAMMATUS")
|
|
ADD_TO_WIDGET_COMBO ("SHAMAL")
|
|
ADD_TO_WIDGET_COMBO ("STUNT")
|
|
ADD_TO_WIDGET_COMBO ("TITAN")
|
|
ADD_TO_WIDGET_COMBO ("VELUM")
|
|
|
|
STOP_WIDGET_COMBO("Plane Type", iSpawnPlaneType)
|
|
ADD_WIDGET_BOOL ("Spawn", bSpawn)
|
|
ADD_WIDGET_BOOL ("Delete", bDelete)
|
|
ADD_WIDGET_BOOL ("Teleport", bTeleport)
|
|
ADD_WIDGET_BOOL ("TaskGotoPlayer", bTaskGotoPlayer)
|
|
ADD_WIDGET_BOOL ("TaskGotoPlayerAnyMeans", bGotoPlayerAnyMeans)
|
|
ADD_WIDGET_BOOL ("TaskChasePlane", bTaskChasePlane)
|
|
ADD_WIDGET_INT_SLIDER("Selected Plane", iChasePlane, 0, 10, 1)
|
|
ADD_WIDGET_BOOL ("TaskChasePlayer", bTaskChasePlayer)
|
|
ADD_WIDGET_BOOL ("TaskPlaneLand", bTaskPlaneLand)
|
|
ADD_WIDGET_BOOL ("PlaneAttack", bPlaneAttack)
|
|
ADD_WIDGET_BOOL ("PlaneSequence", bPlaneSequence)
|
|
ADD_WIDGET_BOOL ("PlaneDriveOnGround", bPlaneDriveOnGround)
|
|
ADD_WIDGET_BOOL ("FleePlayer", bFleePlayer)
|
|
ADD_WIDGET_BOOL ("LandingGear", bLandingGear)
|
|
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("PlaneHeight", fPlaneHeight, 0.0, 100.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("PlaneSpeed", fPlaneSpeed, 0.0, 200.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("fOrientation", fOrientation, -1.0, 360.0, 1.0)
|
|
ADD_WIDGET_INT_SLIDER("MinHeightAboveTerrain", iPlaneMinHeightAboveTerrain, -100, 100, 1)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
PROC PROCESS_WIDGETS()
|
|
|
|
IF bSpawn
|
|
bSpawn = FALSE
|
|
CREATE_PLANE()
|
|
ENDIF
|
|
|
|
IF bDelete
|
|
bDelete = FALSE
|
|
DELETE_PLANES()
|
|
ENDIF
|
|
|
|
IF bTeleport
|
|
bTeleport = FALSE
|
|
TELEPORT_PLANE()
|
|
ENDIF
|
|
|
|
IF bTaskGotoPlayer
|
|
bTaskGotoPlayer = FALSE
|
|
TASK_PLANE_GOTO_PLAYER()
|
|
ENDIF
|
|
|
|
IF bGotoPlayerAnyMeans
|
|
bGotoPlayerAnyMeans = FALSE
|
|
TASK_PLANE_GOTO_PLAYER_ANY_MEANS()
|
|
ENDIF
|
|
|
|
IF bTaskChasePlayer
|
|
bTaskChasePlayer = FALSE
|
|
TASK_PLANE_CHASE_PLAYER()
|
|
ENDIF
|
|
|
|
IF bTaskChasePlane
|
|
bTaskChasePlane = FALSE
|
|
TASK_PLANE_CHASE_PLANE()
|
|
ENDIF
|
|
|
|
IF bTaskPlaneLand
|
|
bTaskPlaneLand = FALSE
|
|
TEST_TASK_PLANE_LAND()
|
|
|
|
ENDIF
|
|
|
|
IF bPlaneAttack
|
|
bPlaneAttack = FALSE
|
|
TEST_TASK_PLANE_ATTACK()
|
|
|
|
ENDIF
|
|
|
|
IF bPlaneSequence
|
|
bPlaneSequence = FALSE
|
|
TEST_TASK_PLANE_SEQUENCE()
|
|
|
|
ENDIF
|
|
|
|
IF bPlaneDriveOnGround
|
|
bPlaneDriveOnGround = FALSE
|
|
TEST_TASK_PLANE_DRIVE_ON_GROUND()
|
|
ENDIF
|
|
|
|
IF bFleePlayer
|
|
bFleePlayer = FALSE
|
|
TEST_TASK_PLANE_FLEE_PLAYER()
|
|
ENDIF
|
|
|
|
if bLandingGear <> bPreviousLandingGear
|
|
bPreviousLandingGear = bLandingGear
|
|
|
|
if bLandingGear
|
|
CONTROL_LANDING_GEAR(vehicleData[iSelectedPlane].vindex, LGC_DEPLOY)
|
|
else
|
|
CONTROL_LANDING_GEAR(vehicleData[iSelectedPlane].vindex, LGC_RETRACT)
|
|
endif
|
|
|
|
Endif
|
|
|
|
if iSelectedPlane <> iPreviousSelectedPlane
|
|
|
|
IF iSelectedPlane >= iSpawnedPlanes
|
|
iSelectedPlane = iSpawnedPlanes-1
|
|
ENDIF
|
|
|
|
IF iSelectedPlane < 0
|
|
iSelectedPlane = 0
|
|
ENDIF
|
|
|
|
iPreviousSelectedPlane = iSelectedPlane
|
|
|
|
ENDIF
|
|
|
|
if iChasePlane <> iPreviousChasePlane
|
|
|
|
IF iChasePlane >= iSpawnedPlanes
|
|
iChasePlane = iSpawnedPlanes-1
|
|
ENDIF
|
|
|
|
IF iChasePlane = iSelectedPlane
|
|
iChasePlane = iSelectedPlane-1
|
|
ENDIF
|
|
|
|
IF iChasePlane < 0
|
|
iChasePlane = 0
|
|
ENDIF
|
|
|
|
iPreviousChasePlane = iChasePlane
|
|
|
|
ENDIF
|
|
|
|
if iPlaneMinHeightAboveTerrain<> iPreviousPlaneMinHeightAboveTerrain
|
|
|
|
iPreviousPlaneMinHeightAboveTerrain = iPlaneMinHeightAboveTerrain
|
|
|
|
INT i
|
|
FOR i = 0 to iSpawnedPlanes
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[i].vindex)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[i].vindex)
|
|
|
|
SET_TASK_VEHICLE_GOTO_PLANE_MIN_HEIGHT_ABOVE_TERRAIN(vehicleData[i].vindex, iPlaneMinHeightAboveTerrain )
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC PROCESS_DECORATORS()
|
|
bExecute = FALSE
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF DECOR_EXIST_ON(GET_PLAYER_PED(GET_PLAYER_INDEX()), "rsne_testscript_active")
|
|
bExecute = DECOR_GET_BOOL(GET_PLAYER_PED(GET_PLAYER_INDEX()),"rsne_testscript_active")
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
SCRIPT
|
|
|
|
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
|
|
CREATE_WIDGETS()
|
|
|
|
WHILE bExecute
|
|
PROCESS_DECORATORS()
|
|
PROCESS_WIDGETS()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
DELETE_PLANES()
|
|
|
|
ENDSCRIPT
|
|
|
|
#ENDIF // IS_DEBUG_BUILD |