// Do nothing in release mode #IF IS_FINAL_BUILD SCRIPT ENDSCRIPT #ENDIF // Only include in debug mode #IF IS_DEBUG_BUILD USING "rage_builtins.sch" USING "script_xml.sch" USING "commands_ped.sch" USING "commands_task.sch" USING "commands_streaming.sch" USING "commands_graphics.sch" USING "commands_cutscene.sch" USING "commands_debug.sch" USING "test_tools.sch" USING "commands_vehicle.sch" USING "commands_camera.sch" USING "commands_player.sch" USING "script_DEBUG.sch" USING "commands_script.sch" //Notes: This is script is to allow easy setup of test scenarios for the code department. It works in conjunction with test_tools.sch //It is a data driven system //Defaults values when the test is reset to factory the standard values are used //vector gvMapOffset //Level menu STRING XMLMenu = "Testbed/TestVehicleAiMenu" //Ped Vars CONST_INT MAX_NUMBER_OF_PEDS 10 peds_struct TestPeds [MAX_NUMBER_OF_PEDS] //Vehicle Vars CONST_INT MAX_NUMBER_OF_VEHICLES 10 vehicle_struct TestVehicles[MAX_NUMBER_OF_VEHICLES] //Route Vars CONST_INT MAX_NUMBER_OF_NODES 7 RouteStruct Route[MAX_NUMBER_OF_NODES] //Camera Vars CONST_INT MAX_NUMBER_OF_CAMERAS 2 CONST_INT FixedCamera 0 CONST_INT TrackingCamera 1 StCameraData TestCams[MAX_NUMBER_OF_CAMERAS] //FLOAT fCarBootAngleRatio VECTOR PlaneTargetCoord = << 150.0000 , 40.0000 , 10.9393 >> VECTOR PlaneTargetCoord1 = << 600.3486, 40.0000 , 60.9393 >> VECTOR PlaneTargetCoord2 = << 10000.3486, 40.0000 , 60.9393 >> VECTOR HeliTargetCoord = << 50.3486, 100.0366, 30.8365 >> VECTOR HeliTargetCoord1 = << 50.3486, 180.0366,30.8365 >> VECTOR HeliTargetCoord2 = << -44.3486, 241.0366, 30.8365 >> VECTOR HeliTargetCoord3 = << -100.3486, 156.0366, 30.8365 >> VECTOR HeliTargetCoord4 = << 8.3486, 35.0366, 10.8365 >> BOOL gAnimPlayed = FALSE BOOL gAllowDebugging = TRUE SEQUENCE_INDEX TEST_SEQ //OBJECT_INDEX Object //bool gBootOpen = TRUE bool testprint = FALSE bool flushFile = FALSE PROC CREATE_TEST_WIDGET () START_WIDGET_GROUP("General Tests") SETUP_WIDGET () START_WIDGET_GROUP("Navigation") ADD_WIDGET_BOOL ("Start scenario", gBeginCombatScenario) ADD_WIDGET_BOOL ("Restart scenario", gResetCombatScenario) ADD_WIDGET_BOOL ("Reset to default", gResetToDefault) ADD_WIDGET_BOOL ("Debug scenario", gRun_debuggig) ADD_WIDGET_BOOL ("Print all setup info", gPrintAllIinfo) ADD_WIDGET_BOOL ("Test print", testprint) ADD_WIDGET_BOOL ("flushFilet", flushFile) STOP_WIDGET_GROUP () STOP_WIDGET_GROUP() ENDPROC // Functions end: WIDGET //Mission flow House keeping //PUPROSE: REmoves all the scenarios and resets all the relationships PROC Cleanup_Scenario_Entities () int index = 0 for index = 0 to MAX_NUMBER_OF_PEDS -1 CLEAN_UP_PED_ENTITIES (TestPeds[index].ped) ENDFOR for index = 0 to MAX_NUMBER_OF_VEHICLES -1 CLEAN_UP_VEHICLE_ENTITIES (TestVehicles[index].Vehicle ) ENDFOR Set_Gang_Relationships (FALSE) ENDPROC PROC Terminate_test_script () if IS_KEYBOARD_KEY_JUST_PRESSED (KEY_S) CLEAR_PRINTS () CLEAR_HELP () Cleanup_Scenario_Entities () Temp_cleanup_scenario_cams () SET_PLAYER_COLISION(scplayer, true) IF NOT IS_PED_INJURED (scplayer) SET_PED_COORDS_KEEP_VEHICLE(scplayer, GET_PLAYER_START_POS () ) ENDIF TERMINATE_THIS_THREAD () ENDIF ENDPROC //END: House Keeping //Test Specific Functions: //EXAMPLE OF IMPLEMTING A SEQUENCE FUNC SEQUENCE_INDEX TEST_TASK_OPEN_VEHICLE_DOOR(VEHICLE_INDEX vehicle, int time = -2) SEQUENCE_INDEX TEST_SEQUENCE OPEN_SEQUENCE_TASK (TEST_SEQUENCE) TASK_OPEN_VEHICLE_DOOR (NULL, vehicle, time ) CLOSE_SEQUENCE_TASK (TEST_SEQUENCE) RETURN TEST_SEQUENCE ENDFUNC PROC SET_CAMERA(VECTOR vPos, VECTOR vRot) IF DOES_CAM_EXIST (TestCams[FixedCamera].cam) SET_CAM_COORD (TestCams[FixedCamera].cam , vPos) SET_CAM_ROT (TestCams[FixedCamera].cam , vRot ) SET_CAM_ACTIVE (TestCams[FixedCamera].cam, TRUE ) ELSE TestCams[FixedCamera].cam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vPos, vRot, 60.0, TRUE ) RENDER_SCRIPT_CAMS (TRUE, FALSE) SET_CAM_ACTIVE (TestCams[FixedCamera].cam, TRUE ) ENDIF ENDPROC //point route test PROC DRIVE_TO_POINT_SEQUENCE (PED_INDEX ped, VEHICLE_INDEX veh) SEQUENCE_INDEX SEQ OPEN_SEQUENCE_TASK (SEQ) TASK_FLUSH_ROUTE() TASK_EXTEND_ROUTE(<< -0.0012, 40.0009, 7.9393>>) TASK_EXTEND_ROUTE(<<20.0012, 40.0009, 7.9393 >>) TASK_EXTEND_ROUTE(<<20.0012, 10.0009, 7.9393>>) TASK_EXTEND_ROUTE(<<-0.0012, 10.0009, 7.9393>>) TASK_DRIVE_POINT_ROUTE (NULL, veh, 5.0 ) SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER) CLOSE_SEQUENCE_TASK(SEQ) IF NOT IS_PED_INJURED (ped) TASK_PERFORM_SEQUENCE (ped, seq) CLEAR_SEQUENCE_TASK (seq) ENDIF ENDPROC //End Test Specific Functions //These enums must match with the testNavmenu.xml PROC INITALISE_TEST_STATE() SingleTaskStatus = startSingleTask ENDPROC ENUM Scenarios TestExample, PointRouteTest, HeliStrafe, CarSetTempAction, CarDrive, CarDriveWander, PlaneTest, TrainTest, PlaneDriveBy, HeliDriveBy, DefaultTest = 1000 ENDENUM // END_SCENARIO: SquadOfPedsMovingBetweenVehicles PROC SETUP_TEST_DATA () SWITCH int_to_enum (scenarios, gcurrentselection) CASE TestExample CASE CarSetTempAction CASE CarDrive //fCarBootAngleRatio = 1.0 //Create a vehicle TestVehicles [0].vehicleCoords = << 80.0012, 66.0009, 1.9393>> TestVehicles [0].vehicleHeading = 90.0001 TestVehicles [0].vehiclemodel = SANCHEZ gAnimPlayed = FALSE //Create a ped TestPeds[0].PedsCoords = << 80.0000 , 57.0000, 10.1959>> TestPeds[0].PedHeading = 359.6439 TestPeds[0].Pedrelgrp = 1 TestPeds[0].PedModel = S_M_Y_COP_01 TestPeds[0].PedsWeapon = WEAPONTYPE_PISTOL Break CASE CarDriveWander //Create a vehicle TestVehicles [0].vehicleCoords = << 34.0012, 66.0009, 1.9393>> TestVehicles [0].vehicleHeading = 90.0001 TestVehicles [0].vehiclemodel = TAILGATER TestVehicles [1].vehicleCoords = << 34.0000 , 66.0000 , 1.9393>> TestVehicles [1].vehicleHeading = 90.0001 TestVehicles [1].vehiclemodel = TOWTRUCK //Create a ped TestPeds[0].PedsCoords = << 30.4167, 66.4273, 8.1959>> TestPeds[0].PedHeading = 359.6439 TestPeds[0].Pedrelgrp = 1 TestPeds[0].PedModel = S_M_Y_COP_01 TestPeds[0].PedsWeapon = WEAPONTYPE_PISTOL Break CASE PointRouteTest //Create a vehicle TestVehicles [0].vehicleCoords = << 0.0000 , 61.0000 , 8 >> TestVehicles [0].vehicleHeading = 90 TestVehicles [0].vehiclemodel = PACKER TestVehicles [1].vehicleCoords = << 14.0000 , 60.0000 , 8 >> TestVehicles [1].vehicleHeading = 90 TestVehicles [1].vehiclemodel = TRAILERS //Create a ped TestPeds[0].PedsCoords = << -2.4167, -1.4273, 1.1959>> TestPeds[0].PedHeading = 359.6439 TestPeds[0].Pedrelgrp = 1 TestPeds[0].PedModel = S_M_Y_COP_01 TestPeds[0].PedsWeapon = WEAPONTYPE_PISTOL Break CASE HeliStrafe //create heli for strafing TestVehicles [0].vehicleCoords = << 0.0000 , 30.0000 , 1.9393 >> TestVehicles [0].vehicleHeading = 90.0 TestVehicles [0].vehiclemodel = BUZZARD //Create a ped TestPeds[0].PedsCoords = << -2.4167, -1.4273, 1.1959>> TestPeds[0].PedHeading = 359.6439 TestPeds[0].Pedrelgrp = 1 TestPeds[0].PedModel = S_M_Y_COP_01 TestPeds[0].PedsWeapon = WEAPONTYPE_PISTOL Break CASE PlaneTest //create plane for strafing TestVehicles [0].vehicleCoords = << 100.0000 , 40.0000 , 12.9393 >> TestVehicles [0].vehicleHeading = -93.0 TestVehicles [0].vehiclemodel = TITAN SET_VEHICLE_DOOR_OPEN(TestVehicles [0].Vehicle, SC_DOOR_BOOT) TestVehicles [1].vehicleCoords = << 80.0000 , 40.0000 , 9.9393 >> TestVehicles [1].vehicleHeading = -93.0 TestVehicles [1].vehiclemodel = FELTZER2 //REQUEST_VEHICLE_RECORDING(1, "titan") //Create a ped TestPeds[0].PedsCoords = << 80.0000 , 57.0000, 10.1959>> TestPeds[0].PedHeading = 359.6439 TestPeds[0].Pedrelgrp = 1 TestPeds[0].PedModel = S_M_Y_COP_01 TestPeds[0].PedsWeapon = WEAPONTYPE_PISTOL Break CASE TrainTest TestVehicles [0].vehicleCoords = << 20.0000 , 30.0000 , 10.9393 >> TestVehicles [0].vehicleHeading = 0.0 TestVehicles [0].vehiclemodel = FREIGHT BREAK CASE PlaneDriveBy PlayerStartPos = <<664.56,48.84,7.36>> TestPeds[0].PedsCoords = <<642.49, 49.29, 7.36>> TestPeds[0].PedHeading = 60.0001 TestPeds[0].PedModel = S_M_M_GAFFER_01 TestVehicles[0].VehicleCoords = <<642.61, 38.08, 7.36>> TestVehicles[0].VehicleHeading = 0.0 TestVehicles[0].Vehiclemodel = LAZER // VULKAN // This test will probably no longer work correctly as the LAZER is not a VTOL vehicle TestVehicles[1].VehicleCoords = <<373.67, 19.61, 7.36>> TestVehicles[1].VehicleHeading = 30.0001 TestVehicles[1].Vehiclemodel = TAILGATER TestVehicles[2].VehicleCoords = <<373.67, 29.61, 7.36>> TestVehicles[2].VehicleHeading = 30.0001 TestVehicles[2].Vehiclemodel = TAILGATER BREAK CASE HeliDriveBy PlayerStartPos = <<664.56,48.84,7.36>> TestPeds[0].PedsCoords = <<642.49, 49.29, 7.36>> TestPeds[0].PedHeading = 60.0001 TestPeds[0].PedModel = S_M_M_GAFFER_01 TestVehicles[0].VehicleCoords = <<642.61, 38.08, 7.36>> TestVehicles[0].VehicleHeading = 0.0 TestVehicles[0].Vehiclemodel = BUZZARD TestVehicles[1].VehicleCoords = <<373.67, 19.61, 7.36>> TestVehicles[1].VehicleHeading = 30.0001 TestVehicles[1].Vehiclemodel = TAILGATER BREAK ENDSWITCH ENDPROC PROC RUN_TEST () SWITCH int_to_enum (scenarios, gcurrentselection) // the ENUM corresponds to the values from the XML file //setup scenario CASE TestExample //Here we add some test cases IF NOT IS_PED_INJURED(TestPeds[0].ped) if IS_VEHICLE_DRIVEABLE(TestVehicles[0].Vehicle) TEST_SEQ = TEST_TASK_OPEN_VEHICLE_DOOR (TestVehicles[0].vehicle, 0) PedPerformsSequence (TestPeds[0].ped, TEST_SEQ) Set_Test_State_To_Default() ENDIF ENDIF BREAK CASE PointRouteTest IF NOT IS_PED_INJURED (TestPeds[0].ped) //IF IS_VEHICLE_DRIVEABLE (TestVehicles [0].Vehicle) //IF IS_VEHICLE_DRIVEABLE (TestVehicles [1].Vehicle) //SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //DRIVE_TO_POINT_SEQUENCE (TestPeds[0].ped, TestVehicles [0].Vehicle) // Load the models //REQUEST_MODEL(PACKER) //REQUEST_MODEL(TRAILERS) //REQUEST_PTFX_ASSET("script") //LOAD_ALL_OBJECTS_NOW() //WHILE NOT HAS_MODEL_LOADED(PACKER) //OR NOT HAS_MODEL_LOADED(TR3) //ENDWHILE //DISPLAY_RADAR(TRUE) //DISPLAY_HUD(TRUE) // IF IS_PLAYER_PLAYING(PLAYER_ID()) // SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // SET_PED_COORDS_KEEP_VEHICLE(player_ped_id(), <<717.3974, -979.5804, 23.0563>>) // SET_ENTITY_HEADING(player_ped_id(), 257.9481) // ENDIF //TestVehicles [0].Vehicle = CREATE_VEHICLE(PACKER, << 0.0000 , 61.0000 , 8 >> , 15) //TestVehicles [1].Vehicle = CREATE_VEHICLE(TRAILERS, << 14.0000 , 60.0000 , 8 >> , 30) ATTACH_VEHICLE_TO_TRAILER(TestVehicles [0].Vehicle, TestVehicles [1].Vehicle) SET_VEHICLE_ON_GROUND_PROPERLY(TestVehicles [0].Vehicle) //ENDIF //ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE CarSetTempAction IF NOT IS_PED_INJURED (TestPeds[0].ped) IF IS_VEHICLE_DRIVEABLE (TestVehicles [0].Vehicle) //Block_Peds_Temp_Events (TestPeds[0], TRUE) SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //TASK_VEHICLE_TEMP_ACTION (TestPeds[0].ped, TestVehicles [0].Vehicle, TEMPACT_REVERSE,2000) ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE CarDrive //SET_VEHICLE_DOOR_CONTROL(TestVehicles [0].Vehicle, SC_DOOR_BOOT, DT_DOOR_INTACT, 1.25) //fAbilityGunCarBootAngle = GET_VEHICLE_DOOR_ANGLE_RATIO(AbilityGunCarID, SC_DOOR_BOOT) /* SET_VEHICLE_DOOR_OPEN(TestVehicles [0].Vehicle, SC_DOOR_FRONT_LEFT) SET_VEHICLE_TYRE_FIXED(TestVehicles [0].Vehicle, SC_WHEEL_CAR_FRONT_LEFT) IF IS_KEYBOARD_KEY_JUST_PRESSED (KEY_S) gBootOpen = !gBootOpen ENDIF IF gBootOpen SET_VEHICLE_DOOR_OPEN(TestVehicles [0].Vehicle, SC_DOOR_BOOT) ELSE SET_VEHICLE_DOOR_SHUT(TestVehicles [0].Vehicle, SC_DOOR_BOOT) ENDIF */ //DrawLiteralStringFloat("fCarBootAngleRatio ", fCarBootAngleRatio, 2, HUD_COLOUR_BLUE) //DrawLiteralStringFloat("fAbilityGunCarBootAngle ", fAbilityGunCarBootAngle, 3, HUD_COLOUR_BLUE) //TASK_VEHICLE_DRIVE_TO_COORD(TestPeds[0].ped,TestVehicles [0].Vehicle,HeliTargetCoord,30.0,DRIVINGSTYLE_NORMAL,SQUALO,DRIVINGMODE_PLOUGHTHROUGH,10.0,10) //SET_VEHICLE_DOOR_CONTROL(TestVehicles [0].Vehicle, SC_DOOR_BOOT, DT_DOOR_SWINGING_FREE, 0.05) IF GET_CONVERTIBLE_ROOF_STATE( TestVehicles[0].Vehicle ) = CRS_LOWERED RAISE_CONVERTIBLE_ROOF( TestVehicles[0].Vehicle) ENDIF IF NOT gAnimPlayed LOWER_CONVERTIBLE_ROOF( TestVehicles[0].Vehicle, TRUE ) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF( TestVehicles [0].Vehicle, SC_DOOR_BONNET, FALSE ) gAnimPlayed = TRUE /*IF HAS_ANIM_DICT_LOADED("FELTZER2") TASK_VEHICLE_PLAY_ANIM( TestVehicles[0].Vehicle, "FELTZER2", "FELTZER2_ROOF" ) ENDIF*/ //SET_VEHICLE_DIGGER_ARM_POSITION(TestVehicles[0].Vehicle, 1.0) ENDIF BREAK CASE CarDriveWander IF NOT IS_PED_INJURED (TestPeds[0].ped) IF IS_VEHICLE_DRIVEABLE (TestVehicles [1].Vehicle) //Block_Peds_Temp_Events (TestPeds[0], TRUE) //SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //TASK_VEHICLE_TEMP_ACTION (TestPeds[0].ped, TestVehicles [0].Vehicle, TEMPACT_REVERSE,2000) //TASK_VEHICLE_DRIVE_WANDER(TestPeds[0].ped, TestVehicles [0].Vehicle, 5, DRIVINGMODE_STOPFORCARS ) IF IS_BUTTON_JUST_PRESSED(PAD1, RIGHTSHOULDER1) SET_VEHICLE_TOW_TRUCK_ARM_POSITION(TestVehicles [1].Vehicle, 1.0) ENDIF IF IS_BUTTON_JUST_PRESSED(PAD1, LEFTSHOULDER1) SET_VEHICLE_TOW_TRUCK_ARM_POSITION(TestVehicles [1].Vehicle, 0.5) ENDIF IF IS_BUTTON_JUST_PRESSED(PAD1, RIGHTSHOULDER2) SET_VEHICLE_TOW_TRUCK_ARM_POSITION(TestVehicles [1].Vehicle, 0.0) ENDIF SET_VEHICLE_TOW_TRUCK_ARM_POSITION(TestVehicles [1].Vehicle, 0.0) //IF IS_KEYBOARD_KEY_JUST_PRESSED (KEY_3) //ATTACH_VEHICLE_TO_TOW_TRUCK(TestVehicles [1].Vehicle, TestVehicles [0].Vehicle, GET_ENTITY_BONE_INDEX_BY_NAME(TestVehicles [0].Vehicle,"overheat"), <<0.5,0,0>> ) //ENDIF //IF IS_KEYBOARD_KEY_JUST_PRESSED (KEY_4) // DETACH_VEHICLE_FROM_TOW_TRUCK(TestVehicles [1].Vehicle, TestVehicles [0].Vehicle) //ENDIF //ATTACH_VEHICLE_TO_TOW_TRUCK(vehTowtruck, vehTowed, GET_ENTITY_BONE_INDEX_BY_NAME(vehTowed,"overheat"), <<0.5,0,0>>) ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE HeliStrafe IF NOT IS_PED_INJURED (TestPeds[0].ped) IF IS_VEHICLE_DRIVEABLE (TestVehicles [0].Vehicle) Block_Peds_Temp_Events (TestPeds[0], TRUE) SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //Gets a reference to the player Get_The_Player () SEQUENCE_INDEX TEST_SEQUENCE OPEN_SEQUENCE_TASK (TEST_SEQUENCE) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, HeliTargetCoord, MISSION_GOTO, 120.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, HeliTargetCoord1, MISSION_GOTO, 120.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, HeliTargetCoord2, MISSION_GOTO, 120.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, HeliTargetCoord3, MISSION_GOTO, 120.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, HeliTargetCoord4, MISSION_GOTO, 120.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) CLOSE_SEQUENCE_TASK(TEST_SEQUENCE) TASK_PERFORM_SEQUENCE(TestPeds[0].ped, TEST_SEQUENCE) CLEAR_SEQUENCE_TASK(TEST_SEQUENCE) // TASK_VEHICLE_DRIVE_TO_COORD(TestPeds[0].ped,TestVehicles [0].Vehicle,HeliTargetCoord,30.0,DRIVINGSTYLE_NORMAL,BUZZARD,DRIVINGMODE_PLOUGHTHROUGH,10.0,10) // SET_PED_KEEP_TASK(TestPeds[0].ped,TRUE) ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE PlaneTest IF NOT IS_PED_INJURED (TestPeds[0].ped) IF IS_VEHICLE_DRIVEABLE (TestVehicles [0].Vehicle) SET_VEHICLE_DOOR_OPEN(TestVehicles [0].Vehicle, SC_DOOR_BOOT) Block_Peds_Temp_Events (TestPeds[0], TRUE) SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //Gets a reference to the player Get_The_Player () SET_PED_COORDS_KEEP_VEHICLE(scplayer , << 92.0000 , 40.0000, 9.1959>>) //SET_PED_INTO_VEHICLE (scplayer, TestVehicles [1].Vehicle ) //SET_VEHICLE_FORWARD_SPEED(TestVehicles [0].Vehicle, 0.0) //POP_OUT_VEHICLE_WINDSCREEN(TestVehicles [1].Vehicle) //Object = CREATE_OBJECT (Prop_BoxPile_03A , << 95.0000 , 40.0000 , 7.9393 >> ) //SET_ACTIVATE_OBJECT_PHYSICS_AS_SOON_AS_IT_IS_UNFROZEN(Object, TRUE) //FREEZE_ENTITY_POSITION( Object, FALSE) //APPLY_FORCE_TO_ENTITY(Object, APPLY_TYPE_FORCE, <<0.0, -0.1, 0.0>>, <<0.0, 0.0, 0.0>>, 0, FALSE, TRUE, TRUE) SEQUENCE_INDEX TEST_SEQUENCE OPEN_SEQUENCE_TASK (TEST_SEQUENCE) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord, MISSION_GOTO, 1.0, DRIVINGMODE_PLOUGHTHROUGH, 20, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord1, MISSION_GOTO, 60.0, DRIVINGMODE_PLOUGHTHROUGH, 100, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord2, MISSION_GOTO, 60.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) CLOSE_SEQUENCE_TASK(TEST_SEQUENCE) TASK_PERFORM_SEQUENCE(TestPeds[0].ped, TEST_SEQUENCE) CLEAR_SEQUENCE_TASK(TEST_SEQUENCE) ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE TrainTest IF NOT IS_PED_INJURED (TestPeds[0].ped) IF IS_VEHICLE_DRIVEABLE (TestVehicles [0].Vehicle) Block_Peds_Temp_Events (TestPeds[0], TRUE) SET_PED_INTO_VEHICLE (TestPeds[0].ped, TestVehicles [0].Vehicle ) //Gets a reference to the player Get_The_Player () SET_VEHICLE_FORWARD_SPEED(TestVehicles [0].Vehicle, 10.0) SEQUENCE_INDEX TEST_SEQUENCE OPEN_SEQUENCE_TASK (TEST_SEQUENCE) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord, MISSION_GOTO, 60.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord1, MISSION_GOTO, 60.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TestVehicles [0].Vehicle, PlaneTargetCoord2, MISSION_GOTO, 60.0, DRIVINGMODE_PLOUGHTHROUGH, 50, -1) CLOSE_SEQUENCE_TASK(TEST_SEQUENCE) TASK_PERFORM_SEQUENCE(TestPeds[0].ped, TEST_SEQUENCE) CLEAR_SEQUENCE_TASK(TEST_SEQUENCE) ENDIF ENDIF Set_Test_State_To_Default() BREAK CASE PlaneDriveBy // Warp ped into driver seat of first vehicle IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[0].Vehicle) SET_PED_INTO_VEHICLE(TestPeds[0].Ped, TestVehicles[0].Vehicle, VS_DRIVER) WAIT(100) ENDIF // Fly plane to designated coord IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[0].Vehicle) PlaneTargetCoord = <<444.45,24.65,17.05>> TASK_PLANE_GOTO_PRECISE_VTOL(TestPeds[0].Ped, TestVehicles[0].Vehicle, PlaneTargetCoord ) WAIT(100) ENDIF // Task with drive by IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[0].Vehicle) AND NOT IS_ENTITY_DEAD( TestVehicles[1].Vehicle) PlaneTargetCoord1 = <<0.0,0.0,0.0>> TASK_DRIVE_BY( TestPeds[0].Ped, NULL, TestVehicles[1].Vehicle, PlaneTargetCoord1, 10000, 20, TRUE ) WAIT(10000) ENDIF IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[2].Vehicle) PlaneTargetCoord1 = <<0.0,0.0,0.0>> SET_DRIVEBY_TASK_TARGET( TestPeds[0].Ped, NULL, TestVehicles[2].Vehicle, PlaneTargetCoord1 ) WAIT(5000) ENDIF Set_Test_State_To_Default() BREAK CASE HeliDriveBy // Warp ped into driver seat of first vehicle IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[0].Vehicle) SET_PED_INTO_VEHICLE(TestPeds[0].Ped, TestVehicles[0].Vehicle, VS_DRIVER) //SET_PED_FIRING_PATTERN(TestPeds[0].Ped, FIRING_PATTERN_FULL_AUTO ) WAIT(100) ENDIF // Task heli to attack IF NOT IS_ENTITY_DEAD(TestPeds[0].Ped) AND NOT IS_ENTITY_DEAD( TestVehicles[0].Vehicle) AND NOT IS_ENTITY_DEAD( TestVehicles[1].Vehicle) TASK_HELI_MISSION(TestPeds[0].Ped, TestVehicles[0].Vehicle, TestVehicles[1].Vehicle, NULL, <<0,0,0>>, MISSION_ATTACK, 10.0, 6.0, -1, 2, 8) WAIT(100) ENDIF Set_Test_State_To_Default() BREAK ENDSWITCH ENDPROC //Purpose: Runs the main scenarios PROC Run_Test_Scenario () int index = 0 SWITCH TestScenarioAStatus //setps up all the data for the sceanrio, this is only called once or if selected in widget CASE InitialiseScenarioData PlayerStartPos = GET_PLAYER_START_POS() //sets the players start coords at the default Bscenario_running = FALSE INITIALISE_PED_DATA (Testpeds) INITIALISE_VEHICLE_DATA (TestVehicles) INITIALISE_CAM_DATA(TestCams ) SETUP_TEST_DATA () HELP_TEXT_STATE = HTF_SCENARIO_SELECTED_NOT_STARTED TestScenarioAStatus = CreateScenarioEntities Temp_Update_Player_With_Scenario(TestCams, scplayer, FALSE, PlayerStartPos) //sets the BREAK // Creates all the scenario data CASE CreateScenarioEntities Bscenario_running = FALSE Set_Gang_Relationships (TRUE) Temp_Update_Player_With_Scenario(TestCams, scplayer, true, PlayerStartPos) //peds FOR index = 0 to MAX_NUMBER_OF_PEDS - 1 CREATE_PED_ENTITY(Testpeds[index]) GiveBlipsToPedsGrps (Testpeds[index]) ALTER_COMBAT_STATS (Testpeds[index] ) SWAP_PED_WEAPONS (Testpeds[index]) ADD_RELATIONSHIP_GROUP_TO_STRUCT (Testpeds[index]) Block_Peds_Temp_Events (Testpeds[index], TRUE) SET_PED_DEFENSIVE_AREAS(Testpeds[index] ) ENDFOR //TestVehicles FOR Index = 0 to MAX_NUMBER_OF_VEHICLES -1 CREATE_VEHICLE_ENTITY (TestVehicles[index] ) ENDFOR //TestCams for index = 0 to MAX_NUMBER_OF_CAMERAS -1 CREATE_CAM_ENTITY (TestCams[index]) ENDFOR TestScenarioAStatus = SetScenarioEntities BREAK CASE SetScenarioEntities Temp_Update_Player_With_Scenario(TestCams, scplayer, true, PlayerStartPos) Start_And_Reset_Test () IF gBeginCombatScenario TestScenarioAStatus = RunScenario gBeginCombatScenario = FALSE gRun_debuggig = FALSE Bscenario_running = TRUE INITALISE_TEST_STATE() TEMP_ACTIVATE_CAMS (TestCams[FixedCamera].cam ) IF DOES_CAM_EXIST (TestCams[FixedCamera].cam ) HELP_TEXT_STATE = HTF_SCENARIO_RUNNING_FIXED_CAM ELSE HELP_TEXT_STATE = HTF_STARTED_RUNNING_NO_CAMS ENDIF ENDIF BREAK //Runs the actual selected scenario CASE RunScenario Temp_Run_Scenario_Tracking_Cam (TestPeds, MAX_NUMBER_OF_PEDS, TestCams[TrackingCamera].cam) Temp_Update_Player_With_Scenario(TestCams, scplayer, true, PlayerStartPos) Start_And_Reset_Test () Check_For_Scenario_Reset () IF DOES_CAM_EXIST (TestCams[TrackingCamera].cam) if IS_CAM_RENDERING (TestCams[TrackingCamera].cam) HELP_TEXT_STATE = HTF_SCENARIO_RUNNING_TRACKING_CAM ELSE HELP_TEXT_STATE = HTF_SCENARIO_RUNNING_FIXED_CAM ENDIF ENDIF RUN_TEST () //run the main tests BREAK CASE CleanupScenario HELP_TEXT_STATE = HTF_SCENARIO_SELECTED_NOT_STARTED Cleanup_Scenario_Entities () IF gResetToDefault Temp_cleanup_scenario_cams () //here we are changing scenarios so we need to reset cams TestScenarioAStatus = InitialiseScenarioData gResetToDefault = FALSE ENDIF IF gResetCombatScenario Temp_Update_Player_With_Scenario(TestCams, scplayer, FALSE, PlayerStartPos) gcurrentselection = gSelection IF DOES_CAM_EXIST (TestCams[FixedCamera].cam) ACTIVATE_CAM (TestCams[FixedCamera].cam) ELSE Temp_cleanup_scenario_cams () ENDIF TestScenarioAStatus = CreateScenarioEntities gResetCombatScenario = FALSE ENDIF BREAK ENDSWITCH ENDPROC SCRIPT SET_DEBUG_ACTIVE (TRUE) //gvMapOffset = GET_PLAYER_START_POS () SETUP_MISSION_XML_MENU (XMLMenu, KEY_Q ) //defined at the top of the file SETUP_AREA_FOR_MISSION (<<0.0, 0.0, 0.0>>) //Gets a reference to the player Get_The_Player () //set player collios SET_PLAYER_COLISION(scplayer, true) //Sets the test widget from the test tools CREATE_TEST_WIDGET () //request the test anim bank //REQUEST_TEST_ANIM_DICT ("FELTZER2") WHILE TRUE // controls the help text hides if xml menu is active TEXT_CONTROLLER () // Can set all scenario peds invincible from the widget Set_Scenario_Peds_Invincible (TestPeds, MAX_NUMBER_OF_PEDS, gsetpedsinvincible ) //User can create a debug cam for setting sceanrios Temp_Create_Debug_Cam (TestCams[FixedCamera]) //Runs the selected option from the XML menu Run_Selection_From_XML_input () //Checks that a valid selection has been input and runs the scenario IF (gcurrentselection <> InvalidSelection) Draw_Debug_Info ( ) //Sets the test scenario into debug mode IF (gAllowDebugging) Set_To_Debug () ENDIF if (gRun_debuggig) Temp_Debug_Scenario (TestPeds, TestVehicles, Route, TestCams[FixedCamera].cam, S_M_Y_COP_01) //Allows the entities in the scneario to be adjusted Print_Scenario_Data (TestPeds, TestVehicles, Route, TestCams) ENDIF Run_Test_Scenario () SWITCH_BETWEEN_FIXED_AND_TRACKING (TestCams[FixedCamera].cam) PRINT_ACTIVE_TEST (Bscenario_running, gRun_debuggig) ENDIF Terminate_test_script () WAIT (0) ENDWHILE ENDSCRIPT #ENDIF // IS_DEBUG_BUILD