Files
gtav-src/script/dev_ng/Code/ainewengland_test/gtest_boat.sc
T
2025-09-29 00:52:08 +02:00

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