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

354 lines
11 KiB
Python
Executable File

// 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 "globals.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
//USING "script_player.sch"
//USING "scumminess.sch"
//USING "streamed_scripts.sch"
//USING "respawn_location_data.sch"
USING "Mission_Flow_Initialiser.sch"
// All the registration headers required to specify which global variables need to be saved
//USING "flow_globals_reg.sch"
// Allow the globals to be created
GLOBALS TRUE
FLOAT fInitialPlayerHeading, groundZ
VECTOR vInitialPlayerCoord, current_coords, closest_safe_position, TESTvInitialPlayerCoord
INT index, random_closest_node
BOOL timeout
VEHICLE_INDEX test_veh[60]
PED_INDEX test_ped[90]
MODEL_NAMES testVehModel[10]
MODEL_NAMES testPedModel[4]
CONST_INT VehModelsNums 10
CONST_INT PedModelsNums 4
FLOAT sc_newcoord[4]
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE: Creates the player ped and places him in the world
/// NOTES: The 'playercoords.txt' file (used by the artists) will override these player creation coords
PROC Create_The_Player()
// Don't load the scene in Release mode -//depot/gta4_japanese/script/dev/Demo/coderTest.sc speeds up loading because Player is usually re-positioned
// by the first mission script anyway leading to two warps
sc_newcoord[0] = 201.3993
PRINTLN("Default start x = ", sc_newcoord[0])
sc_newcoord[1] = -924.1564
PRINTLN("Default start y = ", sc_newcoord[1])
sc_newcoord[2] = 820.0
PRINTLN("Default start Z = ", sc_newcoord[2])
sc_newcoord[3] = 0.0
PRINTLN("Default start Heading = ", sc_newcoord[3])
IF GET_COMMANDLINE_PARAM_EXISTS("sc_CreationStartup")
sc_newcoord[0] = GET_COMMANDLINE_PARAM_FLOAT_BY_INDEX("sc_CreationStartup", 0)
PRINTLN("sc_CreationStartupX = ", sc_newcoord[0])
sc_newcoord[1] = GET_COMMANDLINE_PARAM_FLOAT_BY_INDEX("sc_CreationStartup", 1)
PRINTLN("sc_CreationStartupY = ", sc_newcoord[1])
sc_newcoord[2] = GET_COMMANDLINE_PARAM_FLOAT_BY_INDEX("sc_CreationStartup", 2)
PRINTLN("sc_CreationStartupZ = ", sc_newcoord[2])
sc_newcoord[3] = GET_COMMANDLINE_PARAM_FLOAT_BY_INDEX("sc_CreationStartup", 3)
PRINTLN("sc_CreationStartupH = ", sc_newcoord[3])
ELSE
PRINTLN("sc_CreationStartup doesn't exist")
ENDIF
vInitialPlayerCoord = <<sc_newcoord[0], sc_newcoord[1], sc_newcoord[2]>>
fInitialPlayerHeading = sc_newcoord[3]
SET_CLOCK_TIME(17,0,0)
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
//stop ambient creation of vehicles
PRINTSTRING("Stop ambient creation of vehicles")PRINTNL()
SET_NUMBER_OF_PARKED_VEHICLES(0)
SET_VEHICLE_POPULATION_BUDGET(0)
SET_GARBAGE_TRUCKS(FALSE)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-9999.9, -9999.9, -9999.9>>, <<9999.9, 9999.9, 9999.9>>, FALSE)
CLEAR_AREA_OF_VEHICLES(vInitialPlayerCoord, 1000.0)
//stop ambient creation of peds
PRINTSTRING("Stop ambient creation of peds")PRINTNL()
SET_PED_POPULATION_BUDGET(0)
CLEAR_AREA_OF_PEDS(vInitialPlayerCoord, 1000.0)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vInitialPlayerCoord)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), TRUE)
SET_PED_CAN_RAGDOLL(PLAYER_PED_ID(), FALSE)
LOAD_SCENE(vInitialPlayerCoord)
SETTIMERA(0)
WHILE NOT GET_GROUND_Z_FOR_3D_COORD(vInitialPlayerCoord, groundZ)
AND NOT timeout
WAIT(0)
TESTvInitialPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
PRINTLN("Finding Ground Z for 3d coord", " - players position = ", TESTvInitialPlayerCoord)
IF TIMERA() > 20000
timeout = TRUE
PRINTLN("No ground Z found")
ENDIF
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.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)
ENDWHILE
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<vInitialPlayerCoord.x, vInitialPlayerCoord.y, groundZ>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fInitialPlayerHeading)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
vInitialPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
PRINTLN("Players Start Position = ", vInitialPlayerCoord)
LOAD_SCENE(vInitialPlayerCoord)
LOAD_ALL_OBJECTS_NOW()
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(0)
ENDIF
ENDPROC
/// PURPOSE:
/// (stop ambient creation of vehicles, peds, create player in star junction,
/// create 20 vehicles, 20 peds).
/// see bug #
PROC Initialise_Test_Startup_Settings_With_Wait()
INT i
testVehModel[0] = double
testVehModel[1] = banshee
testVehModel[2] = tailgater
testVehModel[3] = hexer
testVehModel[4] = bison
testVehModel[5] = taxi
testVehModel[6] = packer
testVehModel[7] = POLICE2
testVehModel[8] = cavalcade
testVehModel[9] = dominator
testPedModel[0] = A_M_O_Tramp_01
testPedModel[1] = A_F_Y_Business_02
testPedModel[2] = A_M_M_Business_01
testPedModel[3] = A_F_M_BevHills_01
REQUEST_MODEL(double)
REQUEST_MODEL(banshee)
REQUEST_MODEL(tailgater)
REQUEST_MODEL(hexer)
REQUEST_MODEL(bison)
REQUEST_MODEL(taxi)
REQUEST_MODEL(packer)
REQUEST_MODEL(POLICE2)
REQUEST_MODEL(cavalcade)
REQUEST_MODEL(dominator)
REQUEST_MODEL(A_M_O_Tramp_01)
REQUEST_MODEL(A_F_Y_Business_02)
REQUEST_MODEL(A_M_M_Business_01)
REQUEST_MODEL(A_F_M_BevHills_01)
LOAD_ALL_OBJECTS_NOW()
// WHILE NOT HAS_MODEL_LOADED(testVehModel)
// OR NOT HAS_MODEL_LOADED(testPedModel)
// WAIT(0)
// ENDWHILE
FLOAT fCurrentCount
//create 60 vehicles
REPEAT COUNT_OF(test_veh) i
IF NOT DOES_ENTITY_EXIST(test_veh[i])
fCurrentCount = (i / TO_FLOAT(COUNT_OF(test_veh))) * 360.0
FLOAT fModCount = (fCurrentCount % 359.0) + fInitialPlayerHeading
FLOAT fMult = 55.0+(ROUND(fCurrentCount/90) * 6.0) //fMult = 20.0
VECTOR vTest_veh_coord = vInitialPlayerCoord+(<<SIN(fModCount), COS(fModCount), 0.0>>*fMult)
FLOAT fTest_veh_head = GET_HEADING_FROM_VECTOR_2D(vInitialPlayerCoord.x-vTest_veh_coord.x, vInitialPlayerCoord.y-vTest_veh_coord.y)
// index = GET_RANDOM_INT_IN_RANGE(0, VehModelsNums) //Probably remove. Needs to be more consistent
index ++
IF index >= VehModelsNums
index = 0
ENDIF
test_veh[i] = CREATE_VEHICLE(testVehModel[index], <<vTest_veh_coord.x, vTest_veh_coord.y, INVALID_WORLD_Z>>, fTest_veh_head)
SET_VEHICLE_CAN_BE_VISIBLY_DAMAGED(test_veh[i], FALSE)
SET_ENTITY_HEALTH(test_veh[i], 9999)
ENDIF
ENDREPEAT
//create 90 peds
REPEAT COUNT_OF(test_ped) i
IF NOT DOES_ENTITY_EXIST(test_ped[i])
// fCurrentCount = (i / TO_FLOAT(COUNT_OF(test_ped))) * 360.0
//
// VECTOR vTest_ped_coord = vInitialPlayerCoord+(<<SIN(fCurrentCount), COS(fCurrentCount), 0.0>>*7.5)
// FLOAT fTest_ped_head = GET_HEADING_FROM_VECTOR_2D(vInitialPlayerCoord.x-vTest_ped_coord.x, vInitialPlayerCoord.y-vTest_ped_coord.y)
fCurrentCount = (i / TO_FLOAT(COUNT_OF(test_ped))) * 360.0
FLOAT fModCount = (fCurrentCount % 359.0) + fInitialPlayerHeading
FLOAT fMult = 22.5+(ROUND(fCurrentCount/90) * 6.0) //fMult = 7.5
VECTOR vTest_ped_coord = vInitialPlayerCoord+(<<SIN(fModCount), COS(fModCount), 0.0>>*fMult)
FLOAT fTest_ped_head = GET_HEADING_FROM_VECTOR_2D(vInitialPlayerCoord.x-vTest_ped_coord.x, vInitialPlayerCoord.y-vTest_ped_coord.y)
// index = GET_RANDOM_INT_IN_RANGE(0, PedModelsNums)
index ++
IF index >= PedModelsNums
index = 0
ENDIF
test_ped[i] = CREATE_PED(PEDTYPE_MISSION, testPedModel[index], <<vTest_ped_coord.x, vTest_ped_coord.y, INVALID_WORLD_Z>>, fTest_ped_head)
TASK_STAND_STILL(test_ped[i], -1)
SET_PED_KEEP_TASK(test_ped[i], TRUE)
SET_ENTITY_HEALTH(test_ped[i], 999)
ENDIF
ENDREPEAT
//Give a handful of peds weapons
IF DOES_ENTITY_EXIST(test_ped[1])
GIVE_WEAPON_TO_PED(test_ped[1], WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(test_ped[2])
GIVE_WEAPON_TO_PED(test_ped[2], WEAPONTYPE_PISTOL, INFINITE_AMMO, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(test_ped[3])
GIVE_WEAPON_TO_PED(test_ped[3], WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO, TRUE)
ENDIF
REPEAT VehModelsNums i
SET_MODEL_AS_NO_LONGER_NEEDED(testVehModel[i])
ENDREPEAT
REPEAT PedModelsNums i
SET_MODEL_AS_NO_LONGER_NEEDED(testPedModel[i])
ENDREPEAT
// Fade the screen in
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(0)
ENDIF
// FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
ENDPROC
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Requests the 'Main Persistent' script, waits for it to stream in, then launches it
PROC Request_And_Launch_Main_Persistent_Script_With_Wait()
STRING theScriptName = "main_persistent"
REQUEST_SCRIPT(theScriptName)
WHILE NOT HAS_SCRIPT_LOADED(theScriptName)
WAIT(0)
REQUEST_SCRIPT(theScriptName)
ENDWHILE
START_NEW_SCRIPT(theScriptName, DEFAULT_STACK_SIZE)
ENDPROC
// ===========================================================================================================
SCRIPT
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP)
TERMINATE_THIS_THREAD()
ENDIF
Create_The_Player()
SET_DEBUG_ACTIVE(FALSE)
// IMPORTANT: THERE SHOULD BE NO 'WAIT' COMMANDS BEFORE HERE
WAIT (0)
Initialise_Test_Startup_Settings_With_Wait()
WHILE TRUE
WAIT(0)
IF random_closest_node < 200
//Check if entity is colliding with anything and try to resapwn on a safe node
REPEAT COUNT_OF(test_veh) index
IF DOES_ENTITY_EXIST(test_veh[index])
IF IS_VEHICLE_DRIVEABLE(test_veh[index])
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(test_veh[index])
OR IS_ENTITY_IN_WATER(test_veh[index])
OR IS_ENTITY_UPSIDEDOWN(test_veh[index])
// OR IS_ENTITY_IN_AIR(test_veh[index])
current_coords = GET_ENTITY_COORDS(test_veh[index])
random_closest_node ++
GET_NTH_CLOSEST_VEHICLE_NODE(current_coords, random_closest_node, closest_safe_position)
SET_ENTITY_COORDS(test_veh[index], closest_safe_position)
PRINTLN("Resetting Vehicle #", index)
WAIT(0)
ENDIF
ENDIF
ENDIF
ENDREPEAT
//Check if entity is colliding with anything and try to resapwn on a safe node
REPEAT COUNT_OF(test_ped) index
IF DOES_ENTITY_EXIST(test_ped[index])
IF NOT IS_PED_INJURED(test_ped[index])
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(test_ped[index])
OR IS_ENTITY_IN_WATER(test_ped[index])
// OR IS_ENTITY_IN_AIR(test_ped[index])
current_coords = GET_ENTITY_COORDS(test_ped[index])
random_closest_node ++
GET_NTH_CLOSEST_VEHICLE_NODE(current_coords, random_closest_node, closest_safe_position)
SET_ENTITY_COORDS(test_ped[index], closest_safe_position)
PRINTLN("Resetting Ped #", index)
WAIT(0)
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDIF
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.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)
ENDWHILE
// Allow Startup to terminate
TERMINATE_THIS_THREAD()
ENDSCRIPT
#ENDIF // IS_DEBUG_BUILD