713 lines
22 KiB
Python
Executable File
713 lines
22 KiB
Python
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : gtest_boat.sc //
|
|
// AUTHOR : Gareth //
|
|
// DESCRIPTION : This is a test script to test the functionality of a //
|
|
// boatcopter in persuit of a player. //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#IF IS_FINAL_BUILD
|
|
SCRIPT
|
|
ENDSCRIPT
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "commands_path.sch"
|
|
USING "commands_ped.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_physics.sch"
|
|
USING "commands_decorator.sch"
|
|
USING "model_enums.sch"
|
|
|
|
|
|
// Data for the setup
|
|
// -the boat to be used
|
|
// -the driver to go into said car
|
|
STRUCT BoatVehicleData
|
|
|
|
VEHICLE_INDEX vindex
|
|
PED_INDEX pindex[5]
|
|
|
|
ENDSTRUCT
|
|
|
|
|
|
BoatVehicleData vehicleData[10]
|
|
int iSpawnedBoats = 0
|
|
int iSelectedBoat = 0
|
|
int iDriverIndex = 0
|
|
int iNumPassengers = 0
|
|
|
|
FLOAT fBoatSpeed = 20.0
|
|
FLOAT fRadius = 15.0
|
|
FLOAT fHeight = 0.0
|
|
|
|
BOOL bGotoPlayer = FALSE
|
|
BOOL bGotoPlayerAnyMeans = FALSE
|
|
BOOL bCombatPlayer = FALSE
|
|
BOOL bFollowPlayer = FALSE
|
|
BOOL bCirclePlayer = FALSE
|
|
BOOL bWander = FALSE
|
|
BOOL bFleePlayer = FALSE
|
|
BOOL bBlockEvents = true
|
|
bool bBlockEventsPreviousValue = true
|
|
BOOL bDisableAvoidance = FALSE
|
|
BOOL bDisableAvoidancePreviousValue = FALSE
|
|
|
|
|
|
BOOL bSpawn = FALSE
|
|
BOOL bDelete = FALSE
|
|
BOOL bExecute = TRUE
|
|
|
|
MODEL_NAMES eDriverModel = S_M_M_Pilot_02
|
|
MODEL_NAMES ePassengerModel = S_F_Y_STRIPPER_01
|
|
//int iSelectedBoat = 0
|
|
|
|
|
|
//
|
|
//
|
|
PROC SET_BOAT_PED_COMBAT_AI(PED_INDEX pedId)
|
|
|
|
GIVE_DELAYED_WEAPON_TO_PED(pedId, WEAPONTYPE_SNIPERRIFLE, 300, TRUE)
|
|
SET_PED_COMBAT_ATTRIBUTES(pedId, CA_ALWAYS_FIGHT, TRUE)
|
|
SET_PED_COMBAT_ATTRIBUTES(pedId, CA_ALWAYS_FIGHT, FALSE)
|
|
|
|
SET_PED_COMBAT_ATTRIBUTES(pedId, CA_CAN_FIGHT_ARMED_PEDS_WHEN_NOT_ARMED, true)
|
|
|
|
|
|
SET_PED_COMBAT_MOVEMENT(pedId, CM_WILLADVANCE)
|
|
SET_PED_COMBAT_ABILITY(pedId, CAL_AVERAGE)
|
|
SET_PED_COMBAT_RANGE(pedId, CR_FAR)
|
|
SET_PED_TARGET_LOSS_RESPONSE(pedId, TLR_NEVER_LOSE_TARGET)
|
|
SET_PED_HIGHLY_PERCEPTIVE(pedId, TRUE)
|
|
SET_PED_CAN_BE_TARGETTED(pedId, TRUE)
|
|
SET_PED_SEEING_RANGE(pedId, 300+100.0)
|
|
|
|
// SET_PED_VISUAL_FIELD_MIN_ANGLE(pedId, -90.0)
|
|
// SET_PED_VISUAL_FIELD_MAX_ANGLE(pedId, 90.0)
|
|
// SET_PED_VISUAL_FIELD_MIN_ELEVATION_ANGLE(pedId, -90.0)
|
|
// SET_PED_VISUAL_FIELD_MAX_ELEVATION_ANGLE(pedId, 90.0)
|
|
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE(pedId, 400.0)
|
|
|
|
//SET_COMBAT_FLOAT(pedId, CCF_BOAT_SENSES_RANGE, 400.0)
|
|
|
|
SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(pedId, true)
|
|
|
|
// Make peds a bit tougher.
|
|
SET_ENTITY_MAX_HEALTH(pedId, 250)
|
|
SET_ENTITY_HEALTH(pedId, 250)
|
|
SET_PED_ARMOUR(pedId, 250)
|
|
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(pedId, RELGROUPHASH_PLAYER)
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC DELETE_BOATS()
|
|
|
|
INT i
|
|
FOR i = 0 to iSpawnedBoats
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[i].vindex)
|
|
DELETE_VEHICLE(vehicleData[i].vindex)
|
|
ENDIF
|
|
|
|
int k
|
|
FOR k = 0 TO 5 - 1
|
|
IF DOES_ENTITY_EXIST(vehicleData[i].pindex[k])
|
|
DELETE_PED(vehicleData[i].pindex[k])
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDFOR
|
|
|
|
iSpawnedBoats = 0
|
|
ENDPROC
|
|
|
|
PROC GENERATE_BOAT_LOCATION(VECTOR& boatPosition)
|
|
|
|
// 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>>
|
|
boatPosition = playerPosition + ( playerForward * fRadius ) + (g_up * fHeight)
|
|
|
|
ENDPROC // GENERATE_BOAT_LOCATION
|
|
|
|
PROC CREATE_BOAT()
|
|
|
|
MODEL_NAMES eBoatModel = DINGHY
|
|
IF iSelectedBoat = 1
|
|
eBoatModel = JETMAX
|
|
ELIF iSelectedBoat = 2
|
|
eBoatModel = SEASHARK
|
|
|
|
ENDIF
|
|
|
|
// grab the car model
|
|
REQUEST_MODEL(eBoatModel)
|
|
|
|
// grab the driver model
|
|
REQUEST_MODEL(eDriverModel)
|
|
|
|
REQUEST_MODEL(ePassengerModel)
|
|
|
|
// load them
|
|
WHILE NOT (HAS_MODEL_LOADED(eBoatModel) AND HAS_MODEL_LOADED(eDriverModel) AND HAS_MODEL_LOADED(ePassengerModel))
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE // models loaded
|
|
|
|
// better have a player at this point
|
|
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 boatHeading = (playerHeading + 180 ) % 360
|
|
|
|
VECTOR boatPosition
|
|
GENERATE_BOAT_LOCATION(boatPosition)
|
|
|
|
// make the car and put in a driver
|
|
vehicleData[iSpawnedBoats].vindex = CREATE_VEHICLE(
|
|
eBoatModel,
|
|
boatPosition,
|
|
boatHeading )
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSpawnedBoats].vindex)
|
|
|
|
SET_ENTITY_VISIBLE(vehicleData[iSpawnedBoats].vindex, TRUE)
|
|
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehicleData[iSpawnedBoats].vindex, FALSE)
|
|
|
|
vehicleData[iSpawnedBoats].pindex[iDriverIndex] = CREATE_PED_INSIDE_VEHICLE(
|
|
vehicleData[iSpawnedBoats].vindex,
|
|
PEDTYPE_MISSION,
|
|
eDriverModel,
|
|
VS_DRIVER )
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(vehicleData[iSpawnedBoats].pindex[iDriverIndex], bBlockEvents)
|
|
|
|
|
|
int i = 0
|
|
FOR i = 0 TO iNumPassengers - 1
|
|
|
|
int passengerIndex = i + 1
|
|
VEHICLE_SEAT seatIndex = INT_TO_ENUM(VEHICLE_SEAT, ENUM_TO_INT(VS_DRIVER)+ passengerIndex)
|
|
IF IS_VEHICLE_SEAT_FREE(vehicleData[iSpawnedBoats].vindex, seatIndex )
|
|
|
|
vehicleData[iSpawnedBoats].pindex[passengerIndex] = CREATE_PED_INSIDE_VEHICLE(
|
|
vehicleData[iSpawnedBoats].vindex,
|
|
PEDTYPE_MISSION,
|
|
ePassengerModel,
|
|
seatIndex )
|
|
|
|
|
|
//SET_BOAT_PED_COMBAT_AI(vehicleData[iSpawnedBoats].pindex[passengerIndex])
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
|
|
|
|
|
|
iSelectedBoat = iSpawnedBoats
|
|
iSpawnedBoats++
|
|
|
|
ENDIF // car and driver set up
|
|
|
|
ENDIF // player uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC // CREATE_BOAT
|
|
|
|
PROC TASK_BOAT_WANDER()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
//TASK_VEHICLE_GOTO_NAVMESH(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 5.0 )
|
|
|
|
//TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedboat].pindex[iDriverIndex], targetPosition, 20.0, vehicleData[iSelectedboat].vindex)
|
|
TASK_VEHICLE_DRIVE_WANDER(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, 20.0, DRIVINGMODE_AVOIDCARS)
|
|
//TASK_VEHICLE_MISSION_COORS_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, MISSION_GOTO, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TASK_BOAT_COMBAT_PLAYER()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
|
|
int k
|
|
|
|
FOR k = 0 TO 5 - 1
|
|
IF DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[k])
|
|
TASK_COMBAT_PED(vehicleData[iSelectedBoat].pindex[k], PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
//TASK_BOAT_COMBAT_PLAYER()(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, NULL, PLAYER_PED_ID(), <<0.0,0.0,0.0>>, MISSION_GOTO, 20.0, 30.0, -1.0, 40, 40)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC
|
|
|
|
PROC TASK_BOAT_FLEE_PLAYER()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
|
|
//TASK_VEHICLE_MISSION_PED_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, GET_PLAYER_PED(GET_PLAYER_INDEX()), MISSION_FLEE, fBoatSpeed, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
|
|
//VECTOR targetPosition
|
|
//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>>
|
|
//targetPosition = playerPosition + ( playerForward * fRadius ) + (g_up * fHeight)
|
|
|
|
//TASK_VEHICLE_GOTO_NAVMESH(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 5.0 )
|
|
|
|
//TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedboat].pindex[iDriverIndex], targetPosition, 20.0, vehicleData[iSelectedboat].vindex)
|
|
|
|
//TASK_VEHICLE_MISSION_COORS_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, targetPosition, MISSION_FLEE, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
TASK_VEHICLE_MISSION_PED_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, GET_PLAYER_PED(GET_PLAYER_INDEX()), MISSION_FLEE, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC
|
|
|
|
PROC TASK_BOAT_GOTO_PLAYER_ANY_MEANS()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
//TASK_VEHICLE_GOTO_NAVMESH(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 5.0 )
|
|
|
|
TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedboat].pindex[iDriverIndex], playerPosition, 20.0, vehicleData[iSelectedboat].vindex)
|
|
|
|
//TASK_VEHICLE_MISSION_COORS_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, MISSION_GOTO, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
ENDPROC
|
|
|
|
PROC TASK_BOAT_GOTO_PLAYER()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
VECTOR playerPosition = GET_ENTITY_COORDS(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
//TASK_VEHICLE_GOTO_NAVMESH(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 5.0 )
|
|
|
|
//TASK_GO_TO_COORD_ANY_MEANS(vehicleData[iSelectedboat].pindex[iDriverIndex], targetPosition, 20.0, vehicleData[iSelectedboat].vindex)
|
|
|
|
|
|
//TASK_BOAT_MISSION(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, NULL, NULL, playerPosition, MISSION_GOTO
|
|
//, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, BCF_OPENOCEANSETTINGS )
|
|
|
|
TASK_BOAT_MISSION(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, NULL, NULL, playerPosition, MISSION_GOTO
|
|
, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, BCF_DEFAULTSETTINGS )
|
|
|
|
|
|
//TASK_VEHICLE_MISSION_COORS_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, playerPosition, MISSION_GOTO, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 0.0)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC
|
|
|
|
PROC ToggleBoatAvoidance()
|
|
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_BOAT_DISABLE_AVOIDANCE(vehicleData[iSelectedBoat].vindex, bDisableAvoidance)
|
|
|
|
ENDIF // vehicle is drivable
|
|
ENDIF // vehicle exists
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC TASK_BOAT_CHASE_PLAYER()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
TASK_VEHICLE_MISSION_PED_TARGET(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, PLAYER_PED_ID(), MISSION_FOLLOW, 20.0, DRIVINGMODE_PLOUGHTHROUGH, 50.0, 30.0)
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC // TASK_chase player
|
|
|
|
PROC TASK_BOAT_MISSION_CIRCLE()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
//TASK_VEHICLE_MISSION(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, NULL, GET_PLAYER_PED(GET_PLAYER_INDEX()), <<0,0,0>>, MISSION_CIRCLE, 20, 25, -1, 280, 10)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC // TASK_BOAT_MISSION_CIRCLE
|
|
|
|
PROC TASK_BOAT_MISSION_ATTACK()
|
|
|
|
// need a player, but could possibly be taken out?
|
|
IF DOES_ENTITY_EXIST(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
IF NOT IS_PED_INJURED(GET_PLAYER_PED(GET_PLAYER_INDEX()))
|
|
|
|
// do we have a vehicle?
|
|
IF (DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].vindex) AND DOES_ENTITY_EXIST(vehicleData[iSelectedBoat].pindex[iDriverIndex]) AND NOT IS_PED_INJURED(vehicleData[iSelectedBoat].pindex[iDriverIndex]))
|
|
|
|
// can it go fast-a?
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleData[iSelectedBoat].vindex)
|
|
|
|
//FREEZE_ENTITY_POSITION(vehicleData[iSelectedBoat].vindex, FALSE)
|
|
SET_ENTITY_DYNAMIC(vehicleData[iSelectedBoat].vindex, TRUE)
|
|
ACTIVATE_PHYSICS(vehicleData[iSelectedBoat].vindex)
|
|
|
|
SET_VEHICLE_ENGINE_ON(vehicleData[iSelectedBoat].vindex, TRUE, TRUE)
|
|
|
|
SET_PED_ACCURACY(vehicleData[iSelectedBoat].pindex[iDriverIndex], 0)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(vehicleData[iSelectedBoat].pindex[iDriverIndex], bBlockEvents)
|
|
|
|
TASK_VEHICLE_MISSION(vehicleData[iSelectedBoat].pindex[iDriverIndex], vehicleData[iSelectedBoat].vindex, GET_VEHICLE_PED_IS_IN(GET_PLAYER_PED(GET_PLAYER_INDEX())), GET_PLAYER_PED(GET_PLAYER_INDEX()), <<0,0,0>>, MISSION_ATTACK, 50, 50, -1, 10, 10)
|
|
|
|
//TASK_BOAT_MISSION(driver[7].ped,mission_veh[23].veh,mission_veh[0].veh,NULL,<<0,0,0>>,MISSION_ATTACK,25,50,-1,70,60)
|
|
|
|
|
|
ENDIF // vehicle is drivable
|
|
|
|
ENDIF // vehicle exists
|
|
|
|
ENDIF // player is uninjured
|
|
|
|
ENDIF // player exists
|
|
|
|
ENDPROC // TASK_BOAT_MISSION_CIRCLE
|
|
|
|
|
|
PROC CREATE_WIDGETS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
// create the widget
|
|
//WidgetID =
|
|
START_WIDGET_GROUP ("gtest_boat")
|
|
|
|
|
|
START_NEW_WIDGET_COMBO()
|
|
ADD_TO_WIDGET_COMBO ("DINGHY")
|
|
ADD_TO_WIDGET_COMBO ("JETMAX")
|
|
ADD_TO_WIDGET_COMBO ("SEASHARK")
|
|
|
|
STOP_WIDGET_COMBO("Boat Type", iSelectedBoat)
|
|
|
|
|
|
ADD_WIDGET_BOOL ("Spawn Boatcopter", bSpawn)
|
|
ADD_WIDGET_BOOL ("Clean Up", bDelete)
|
|
ADD_WIDGET_BOOL ("Goto Player", bGotoPlayer)
|
|
ADD_WIDGET_BOOL ("Goto Player Any Means", bGotoPlayerAnyMeans)
|
|
ADD_WIDGET_BOOL ("Wander", bWander)
|
|
ADD_WIDGET_BOOL ("Combat Player", bCombatPlayer)
|
|
ADD_WIDGET_BOOL ("Follow Player", bFollowPlayer)
|
|
ADD_WIDGET_BOOL ("Circle Player", bCirclePlayer)
|
|
ADD_WIDGET_BOOL ("Flee Player", bFleePlayer)
|
|
ADD_WIDGET_BOOL ("Block events", bBlockEvents)
|
|
ADD_WIDGET_BOOL ("Disable Avoidance", bDisableAvoidance)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Boat Speed", fBoatSpeed, 0.0, 200.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Distance to Player", fRadius, 0.0, 200.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Boat Height", fHeight, 0.0, 100.0, 1.0)
|
|
ADD_WIDGET_INT_SLIDER("Num Passengers", iNumPassengers, 0, 4, 1)
|
|
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
#ENDIF
|
|
|
|
ENDPROC //CREATE_WIDGETS
|
|
|
|
PROC PROCESS_WIDGETS()
|
|
|
|
IF bSpawn
|
|
|
|
bSpawn = FALSE
|
|
CREATE_BOAT()
|
|
|
|
ENDIF
|
|
|
|
IF bDelete
|
|
|
|
bDelete = FALSE
|
|
DELETE_BOATS()
|
|
|
|
ENDIF
|
|
|
|
IF bWander
|
|
bWander = false
|
|
TASK_BOAT_WANDER()
|
|
endif
|
|
|
|
IF bGotoPlayer
|
|
|
|
bGotoPlayer = FALSE
|
|
TASK_BOAT_GOTO_PLAYER()
|
|
ENDIF
|
|
|
|
IF bGotoPlayerAnyMeans
|
|
|
|
bGotoPlayerAnyMeans = FALSE
|
|
TASK_BOAT_GOTO_PLAYER_ANY_MEANS()
|
|
ENDIF
|
|
|
|
IF bCombatPlayer
|
|
|
|
bCombatPlayer = FALSE
|
|
TASK_BOAT_COMBAT_PLAYER()
|
|
ENDIF
|
|
|
|
IF bFollowPlayer
|
|
|
|
bFollowPlayer = FALSE
|
|
TASK_BOAT_CHASE_PLAYER()
|
|
|
|
ENDIF
|
|
|
|
IF bFleePlayer
|
|
bFleePlayer = FALSE
|
|
TASK_BOAT_FLEE_PLAYER()
|
|
|
|
ENDIF
|
|
|
|
|
|
IF bCirclePlayer
|
|
|
|
bCirclePlayer = FALSE
|
|
TASK_BOAT_MISSION_CIRCLE()
|
|
|
|
ENDIF
|
|
|
|
if bBlockEvents <> bBlockEventsPreviousValue
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(vehicleData[iSelectedBoat].pindex[iDriverIndex], bBlockEvents)
|
|
bBlockEventsPreviousValue = bBlockEvents
|
|
|
|
endif
|
|
|
|
if bDisableAvoidance <> bDisableAvoidancePreviousValue
|
|
|
|
bDisableAvoidancePreviousValue = bDisableAvoidance
|
|
ToggleBoatAvoidance()
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC //PROCESS_WIDGETS
|
|
|
|
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
|
|
|
|
// Cleanup
|
|
DELETE_BOATS()
|
|
|
|
ENDSCRIPT
|
|
|
|
#ENDIF // IS_DEBUG_BUILD |