Files
2025-09-29 00:52:08 +02:00

461 lines
13 KiB
Python
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_misc.sch"
// Do nothing in release mode
#IF IS_FINAL_BUILD
SCRIPT
ENDSCRIPT
#ENDIF
// Only include in debug mode
#IF IS_DEBUG_BUILD
USING "commands_camera.sch"
USING "commands_pad.sch"
USING "commands_script.sch"
USING "flow_public_core_override.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : streaming.sc
// AUTHOR : Klaas Schilstra
// DESCRIPTION : Streaming performance test script
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
NETWORK_INDEX netVeh
VECTOR v_car_pos = << -1649.5, -559.4, 33.1 >>
VECTOR vehicles_coords
FLOAT car_heading = 309
//FLOAT veh_speed = 60 //meters per second
BOOL density = FALSE
//SEQUENCE_INDEX SEQ
VEHICLE_INDEX veh_car
MODEL_NAMES model_car = ZENTORNO
ENUM eSCRIPT_STATE
SCRIPT_STATE_START = -1,
SCRIPT_STATE_CREATE_CAR = 0,
SCRIPT_STATE_WAIT_FOR_KEY,
SCRIPT_STATE_DRIVE_CAR,
SCRIPT_STATE_DRIVE_TO_POINT,
SCRIPT_STATE_SHOW_RESULTS,
SCRIPT_STATE_END
ENDENUM
eSCRIPT_STATE script_state = SCRIPT_STATE_START
BOOL automatic_mode = TRUE /*FALSE*/
INT automatic_flashy_timer = 0
INT automatic_countdown = 0
INT automatic_iteration = 0
STRUCT ServerBroadcastData
INT iServerData
ENDSTRUCT
ServerBroadcastData serverBD
STRUCT PlayerBroadcastData
INT iPlayerData
ENDSTRUCT
PlayerBroadcastData playerBD[NUM_NETWORK_PLAYERS]
// ===========================================================================================================
// Termination
// ===========================================================================================================
// -----------------------------------------------------------------------------------------------------------
// Mission Cleanup
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Cleanup()
PRINTSTRING("...Placeholder Mission Cleanup")
PRINTNL()
CLEAR_PRINTS()
CLEAR_HELP()
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
SET_VEHICLE_AS_NO_LONGER_NEEDED(veh_car)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE)
CLEAR_WEATHER_TYPE_PERSIST()
METRICS_ZONES_CLEAR()
METRICS_ZONES_HIDE()
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Pass
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Passed()
PRINTSTRING("...Placeholder Mission Passed")
PRINTNL()
// Mission_Flow_Mission_Passed()
Mission_Cleanup()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Fail
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Failed()
PRINTSTRING("...Placeholder Mission Failed")
PRINTNL()
//Mission_Flow_Mission_Failed()
Mission_Cleanup()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Setup
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Setup()
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
ENDIF
IF NETWORK_IS_GAME_IN_PROGRESS()
SET_OVERRIDE_WEATHER("EXTRASUNNY")
ELSE
SET_CLOCK_TIME(12,0,0)
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
ENDIF
//LOAD_SCENE(v_car_pos)
PRINTLN("Waiting for scene to load...")
SET_ENTITY_COORDS(PLAYER_PED_ID(), v_car_pos)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 0)
NEW_LOAD_SCENE_START_SPHERE(v_car_pos, 2500.0)
WAIT(0)
WHILE NOT IS_NEW_LOAD_SCENE_LOADED()
WAIT(0)
ENDWHILE
NEW_LOAD_SCENE_STOP()
CLEAR_HELP()
CLEAR_PRINTS()
CLEAR_AREA(v_car_pos, 1000, TRUE, TRUE)
INSTANTLY_FILL_PED_POPULATION()
INSTANTLY_FILL_VEHICLE_POPULATION()
AUTOMATED_TEST_BEGIN()
density = TRUE
ENDPROC
PROC CLEANUP_SCRIPT()
TERMINATE_THIS_THREAD()
ENDPROC
// ===========================================================================================================
// Script Loop
// ===========================================================================================================
SCRIPT
IF NETWORK_IS_GAME_IN_PROGRESS()
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
ENDIF
PRINTSTRING("...Placeholder Mission Launched")
PRINTNL()
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(500)
ENDIF
IF (HAS_FORCE_CLEANUP_OCCURRED())
PRINTSTRING("...Placeholder Mission Force Cleanup")
PRINTNL()
Mission_Cleanup()
ENDIF
SET_MISSION_FLAG(TRUE)
// MP Setup
IF NETWORK_IS_GAME_IN_PROGRESS()
PRINTLN(GET_THIS_SCRIPT_NAME(), ": PROCESS_PRE_GAME started in MP for ", GET_THIS_SCRIPT_NAME())
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(NUM_NETWORK_PLAYERS, FALSE)
// This makes sure the net script is active, waits untull it is.
IF NOT HANDLE_NET_SCRIPT_INITIALISATION(FALSE, -1, TRUE)
Mission_Cleanup()
ENDIF
NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(serverBD, SIZE_OF(serverBD))
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(playerBD, SIZE_OF(playerBD))
RESERVE_NETWORK_MISSION_VEHICLES(1)
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
// KGM: Wait for the first network broadcast before moving on - call this as the last instruction in pre-game
// (after Initialisation and Broadcast Variable Registration - Hosts can do this too)
IF NOT Wait_For_First_Network_Broadcast()
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Failed to receive initial network broadcast for ", GET_THIS_SCRIPT_NAME(), ". Cleaning up.")
Mission_Cleanup()
ENDIF
ENDIF
script_state = SCRIPT_STATE_START
Mission_Setup()
WHILE (TRUE)
SWITCH script_state
CASE SCRIPT_STATE_START
PRINTSTRING("...Going for a drive")
PRINTNL()
METRICS_ZONES_CLEAR()
script_state = SCRIPT_STATE_CREATE_CAR
BREAK
CASE SCRIPT_STATE_CREATE_CAR
PRINTSTRING("...Create car")
PRINTNL()
IF NOT DOES_ENTITY_EXIST(veh_car)
REQUEST_MODEL(model_car)
IF HAS_MODEL_LOADED(model_car)
IF NETWORK_IS_GAME_IN_PROGRESS()
IF CREATE_NET_VEHICLE(netVeh, model_car, v_car_pos, car_heading)
veh_car = NET_TO_VEH(netVeh)
SET_MODEL_AS_NO_LONGER_NEEDED(model_car)
ENDIF
ELSE
veh_car = CREATE_VEHICLE(model_car, v_car_pos, car_heading)
SET_MODEL_AS_NO_LONGER_NEEDED(model_car)
ENDIF
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(veh_car)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), veh_car)
SET_ENTITY_COORDS(veh_car, v_car_pos)
SET_ENTITY_HEADING(veh_car, car_heading)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
ENDIF
PRINTLN("Waiting for scene to load...")
NEW_LOAD_SCENE_START_SPHERE(v_car_pos, 2500.0)
WAIT(0)
WHILE NOT IS_NEW_LOAD_SCENE_LOADED()
WAIT(0)
ENDWHILE
NEW_LOAD_SCENE_STOP()
// SETTIMERB(0)
script_state = SCRIPT_STATE_WAIT_FOR_KEY
automatic_countdown = 100
ENDIF
BREAK
CASE SCRIPT_STATE_WAIT_FOR_KEY
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
SET_CLOCK_TIME(17, 0, 0)
ENDIF
// Display Pass and Fail instructions
// IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
// IF TIMERB() > 2000
// PRINTSTRING("...Gogogogo")
// PRINTNL()
// script_state = SCRIPT_STATE_DRIVE_CAR
// ENDIF
IF (automatic_mode)
IF (automatic_countdown > 0)
automatic_countdown = automatic_countdown - 1
ELSE
script_state = SCRIPT_STATE_DRIVE_CAR
ENDIF
ENDIF
BREAK
CASE SCRIPT_STATE_DRIVE_CAR
IF IS_VEHICLE_DRIVEABLE(veh_car)
METRICS_ZONE_START("Streaming")
//METRICS_ZONES_SHOW()
REQUEST_VEHICLE_RECORDING(1, "zentorno_streaming")
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "zentorno_streaming")
WAIT(0)
ENDWHILE
IF IS_VEHICLE_DRIVEABLE(veh_car)
START_PLAYBACK_RECORDED_VEHICLE(veh_car, 1, "zentorno_streaming")
ENDIF
script_state = SCRIPT_STATE_DRIVE_TO_POINT
// Test starts now
AUTOMATED_TEST_START_ITERATION()
ENDIF
BREAK
CASE SCRIPT_STATE_DRIVE_TO_POINT
IF IS_VEHICLE_DRIVEABLE(veh_car) AND NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(veh_car)
METRICS_ZONE_STOP()
METRICS_ZONE_SAVE_TO_FILE("StreamingTest")
AUTOMATED_TEST_NEXT_ITERATION()
SETTIMERA(0)
script_state = SCRIPT_STATE_SHOW_RESULTS
automatic_countdown = 120
ENDIF
IF TIMERA() > 180
vehicles_coords = GET_ENTITY_COORDS(PLAYER_PED_ID())
CLEAR_AREA(vehicles_coords, 16, TRUE)
SETTIMERA(0)
ENDIF
BREAK
CASE SCRIPT_STATE_SHOW_RESULTS
METRICS_ZONES_SHOW()
// PRINTSTRING("...PRESS P to exit or F to fail")
// IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
// IF TIMERB() > 5000
// METRICS_ZONES_CLEAR()
// CLEAR_AREA(v_car_pos, 5000, TRUE, TRUE)
// CLEAR_AREA_OF_VEHICLES(v_car_pos, 5000.0, TRUE)
// script_state = SCRIPT_STATE_CREATE_CAR
// script_state = SCRIPT_STATE_END
// ENDIF
IF TIMERA() > 180
vehicles_coords = GET_ENTITY_COORDS(PLAYER_PED_ID())
CLEAR_AREA(vehicles_coords, 16, TRUE)
SETTIMERA(0)
ENDIF
IF (automatic_mode)
IF (automatic_countdown > 0)
automatic_countdown = automatic_countdown - 1
ELSE
METRICS_ZONES_CLEAR()
script_state = SCRIPT_STATE_CREATE_CAR
automatic_iteration = automatic_iteration + 1
ENDIF
ENDIF
BREAK
CASE SCRIPT_STATE_END
PRINTSTRING("...The end")
PRINTNL()
Mission_Passed()
BREAK
ENDSWITCH
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_A))
IF automatic_mode
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", "Automatic Mode OFF", 1000, 1)
automatic_mode = FALSE
ELSE
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", "Automatic Mode ON", 1000, 1)
automatic_mode = TRUE
ENDIF
ENDIF
// Check for Fail
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
OR IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
METRICS_ZONE_STOP()
METRICS_ZONES_CLEAR()
Mission_Failed()
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_T))
IF NOT density
SET_VEHICLE_POPULATION_BUDGET(3)
SET_PED_POPULATION_BUDGET(3)
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", "Traffic ON", 1000, 1)
WAIT(500)
density = TRUE
ELSE
SET_VEHICLE_POPULATION_BUDGET(0)
SET_PED_POPULATION_BUDGET(0)
CLEAR_AREA(v_car_pos, 5000, TRUE, TRUE)
CLEAR_AREA_OF_VEHICLES(v_car_pos, 5000.0, TRUE)
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", "Traffic OFF", 1000, 1)
WAIT(500)
density = FALSE
ENDIF
ENDIF
IF NOT density
SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0)
SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0)
SET_SCENARIO_PED_DENSITY_MULTIPLIER_THIS_FRAME(0, 0)
ELSE
SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(1)
SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(1)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(1)
SET_SCENARIO_PED_DENSITY_MULTIPLIER_THIS_FRAME(1, 1)
ENDIF
IF (automatic_mode)
IF (automatic_flashy_timer < 30)
TEXT_LABEL_63 tlTemp = "AUTOMATIC MODE - press A to disable. Current lap: "
tlTemp += CONVERT_INT_TO_STRING(automatic_iteration)
DISPLAY_TEXT_WITH_LITERAL_STRING(0.3, 0.8, "STRING", tlTemp)
ELSE
IF (automatic_flashy_timer > 60)
automatic_flashy_timer = 0
ENDIF
ENDIF
automatic_flashy_timer = automatic_flashy_timer + 1
ELSE
PRINT_STRING_WITH_LITERAL_STRING_NOW("STRING", "Press P to restart test. F to fail, T to toggle traffic, A for automatic mode", 1000, 1)
ENDIF
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT
#ENDIF // IS_DEBUG_BUILD