429 lines
13 KiB
Python
Executable File
429 lines
13 KiB
Python
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : ambient_MrsPhilips.sc //
|
|
// AUTHOR : //
|
|
// DESCRIPTION : Detects the player getting into a cargen with //
|
|
// the Deludamol pharmaceuticals //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
// Includes
|
|
USING "commands_entity.sch"
|
|
USING "RC_helper_functions.sch"
|
|
USING "RC_launcher_public.sch"
|
|
USING "rich_presence_public.sch"
|
|
USING "savegame_public.sch"
|
|
|
|
// Enums
|
|
ENUM MAIN_STATE
|
|
MS_INIT,
|
|
MS_CHECK_FOR_VAN,
|
|
MS_LAUNCH_MISSION,
|
|
MS_ON_MISSION,
|
|
MS_CLEANUP
|
|
ENDENUM
|
|
|
|
ENUM SUB_STATE
|
|
SS_SETUP,
|
|
SS_UPDATE,
|
|
SS_CLEANUP
|
|
ENDENUM
|
|
|
|
// Consts
|
|
CONST_INT XVERSION_NUMBER(101)
|
|
|
|
// Variables
|
|
MAIN_STATE eStage = MS_INIT
|
|
SUB_STATE sProgress = SS_SETUP
|
|
MODEL_NAMES drugVanModel = RUMPO2
|
|
BOOL bAttemptToLaunchScript = FALSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID mWidgetGroup
|
|
BOOL bWarpIntoVan
|
|
BOOL bDebugQuitScript
|
|
#ENDIF
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Debug
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
/// PURPOSE:
|
|
/// Setups Debug Widgets
|
|
PROC SETUP_DEBUG_WIDGETS()
|
|
|
|
mWidgetGroup = START_WIDGET_GROUP("Ambient: Mrs Philips")
|
|
ADD_WIDGET_BOOL("Warp Player Into Van", bWarpIntoVan)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Updates all The Widgets
|
|
PROC UPDATE_DEBUG_WIDGETS()
|
|
IF (bWarpIntoVan)
|
|
|
|
MODEL_NAMES vanModel = RUMPO2
|
|
|
|
// Request van
|
|
REQUEST_MODEL(vanModel)
|
|
WHILE NOT HAS_MODEL_LOADED(vanModel)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Take out of existing vehicle and place into van
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
VEHICLE_INDEX oldCar
|
|
oldCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF DOES_ENTITY_EXIST(oldCar)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(oldCar)
|
|
SET_ENTITY_AS_MISSION_ENTITY(oldCar)
|
|
ENDIF
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
DELETE_VEHICLE(oldCar)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
VEHICLE_INDEX newCar
|
|
newCar = CREATE_VEHICLE(vanModel, <<2031.3892, 3777.4849, 31.3308>>, 32.5615)
|
|
IF DOES_ENTITY_EXIST(newCar)
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), newCar)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(newCar)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Release model
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vanModel)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
|
|
bWarpIntoVan = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans up All The Widgets
|
|
PROC CLEANUP_DEBUG_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(mWidgetGroup)
|
|
DELETE_WIDGET_GROUP(mWidgetGroup)
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
/// PURPOSE:
|
|
/// Turn on or off mission vehicle gens
|
|
PROC SET_MISSION_VEHICLE_GENS_AVAILABLE(BOOL b_turn_on)
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: mission vehicle gens are : ", b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_PHARMACY1, b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_PHARMACY2, b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_HOSPITAL1, b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_HOSPITAL2, b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_HOSPITAL3, b_turn_on)
|
|
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MRSP_HOSPITAL4, b_turn_on)
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Script Cleanup
|
|
PROC SCRIPT_CLEANUP()
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Cleanup!")
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CLEANUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
SET_MISSION_VEHICLE_GENS_AVAILABLE(FALSE)
|
|
|
|
// No longer require the script to be relaunched when loading from a savegame.
|
|
IF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_MRS_PHILIPS_2)
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_RC_AMB_MRS_PHILIPS)
|
|
ENDIF
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Functions
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Request and launch RCM script
|
|
PROC CUSTOM_REQUEST_AND_LAUNCH_RC()
|
|
|
|
// Get correct script name
|
|
STRING sScriptName = "MrsPhilips2"
|
|
|
|
// Load script
|
|
REQUEST_SCRIPT(sScriptName)
|
|
WHILE NOT HAS_SCRIPT_LOADED(sScriptName)
|
|
REQUEST_SCRIPT(sScriptName)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Setup common requirements
|
|
RC_MISSION_STARTING(RC_MRS_PHILIPS_2)
|
|
|
|
// Launch script
|
|
START_NEW_SCRIPT(sScriptName, MISSION_STACK_SIZE)
|
|
|
|
// Allow script to be released when no longer running
|
|
SET_SCRIPT_AS_NO_LONGER_NEEDED(sScriptName)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//In debug build inform the autoplay system we are on a RC mission now.
|
|
g_txtFlowAutoplayRunningMission = sScriptName
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Launch RCM through entering the drug van
|
|
FUNC BOOL CUSTOM_LAUNCH_RC_MISSION()
|
|
|
|
// NOTE: Need to stay in this loop until the mission is given permission to run.
|
|
// After first asking permission to run, a decision is usually made
|
|
// within a few frames - if it returns FALSE, check if it should terminate or not.
|
|
WHILE NOT RC_REQUEST_PERMISSION_TO_RUN(RC_MRS_PHILIPS_2)
|
|
|
|
// Not yet given permission to run, should the script terminate?
|
|
IF SHOULD_RC_TERMINATE(RC_MRS_PHILIPS_2)
|
|
PRINT_LAUNCHER_DEBUG("LAUNCH_RC_MISSION - Script denied by RC Controller")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// NOTE: The Random Character mission is now safe to start so request the script and launch.
|
|
// The activity MUST trigger because scripts now think the game is OnMission.
|
|
CUSTOM_REQUEST_AND_LAUNCH_RC()
|
|
|
|
// Tell the playstats system that we're starting an RC mission.
|
|
g_structRCMissionsStatic sRCMissionDetails
|
|
Retrieve_Random_Character_Static_Mission_Details(RC_MRS_PHILIPS_2, sRCMissionDetails)
|
|
TEXT_LABEL tStatLabel = GET_RC_STAT_ID(RC_MRS_PHILIPS_2)
|
|
SCRIPT_PLAYSTATS_MISSION_STARTED(tStatLabel, sRCMissionDetails.rcStatVariation)
|
|
CPRINTLN(DEBUG_FLOW, "Flagging playstat MISSION STARTED for RC mission. Script:", sRCMissionDetails.rcScriptName, " Variation:", sRCMissionDetails.rcStatVariation, " RC Stat ID = ",tStatLabel)
|
|
|
|
// Set console rich presence values as we go on mission (friend dashboard status message).
|
|
SET_RICH_PRESENCE_FOR_SP_RC_MISSION(RC_MRS_PHILIPS_2)
|
|
|
|
// Store start snapshot if this isn't a replay
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
Store_RC_Replay_Starting_Snapshot("MrsPhilips2", TRUE)
|
|
ENDIF
|
|
|
|
// Setup mission ready for stats
|
|
PRIME_STATS_FOR_RC_MISSION(RC_MRS_PHILIPS_2, sRCMissionDetails.rcScriptName)
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Updates the mission state and substate
|
|
PROC SET_STAGE(MAIN_STATE state)
|
|
eStage = state
|
|
sProgress = SS_SETUP
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// State Functions
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Initialization
|
|
PROC DO_INITALIZE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
SET_MISSION_VEHICLE_GENS_AVAILABLE(TRUE)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Setting stage to MS_CHECK_FOR_VAN")
|
|
SET_STAGE(MS_CHECK_FOR_VAN)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Detect Trevor getting into a suitable van
|
|
PROC STAGE_CHECK_FOR_VAN()
|
|
|
|
SWITCH sProgress
|
|
|
|
CASE SS_SETUP
|
|
bAttemptToLaunchScript = FALSE
|
|
sProgress = SS_UPDATE
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_RC_MRS_PHILIPS_FIND_VAN)
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS() // B*1260505 Don't display while switching
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Displaying MRSP_01_HELP help text")
|
|
ADD_HELP_TO_FLOW_QUEUE("MRSP_01_HELP", FHP_MEDIUM, 0, FLOW_HELP_NEVER_EXPIRES, DEFAULT_HELP_TEXT_TIME, BIT_TREVOR) // Find a van with the Deludamol pharmaceuticals logo.
|
|
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_RC_MRS_PHILIPS_FIND_VAN)
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
// Player is in drug van - attempt to launch mission
|
|
MODEL_NAMES vehModel
|
|
vehModel = GET_ENTITY_MODEL(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF (vehModel = drugVanModel)
|
|
bAttemptToLaunchScript = TRUE
|
|
SET_STAGE(MS_LAUNCH_MISSION)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Attempt to launch Mrs Philips 2
|
|
PROC STAGE_LAUNCH_MISSION()
|
|
|
|
// Is the player close enough to start the mission off
|
|
IF IS_IT_SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_RANDOM_CHARACTER)
|
|
|
|
// Launch the mission script
|
|
IF CUSTOM_LAUNCH_RC_MISSION()
|
|
|
|
// We are now on mission - keep ambient script running to detect completion
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Setting stage to MS_ON_MISSION()")
|
|
bAttemptToLaunchScript = FALSE
|
|
SET_STAGE(MS_ON_MISSION)
|
|
ELSE
|
|
SET_STAGE(MS_CHECK_FOR_VAN)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Monitor mission script whilst it is running
|
|
PROC STAGE_MONITOR_MISSION()
|
|
|
|
// Mission script has finished...
|
|
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_RANDOM_CHAR)
|
|
|
|
// Phone call missions have been completed
|
|
IF IS_THIS_RANDOM_CHARACTER_MISSION_COMPLETED(RC_MRS_PHILIPS_2)
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Setting stage to MS_CLEANUP()")
|
|
SET_STAGE(MS_CLEANUP)
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Setting stage to MS_CHECK_FOR_VAN")
|
|
SET_STAGE(MS_CHECK_FOR_VAN)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Main Script
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
SCRIPT
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP)
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: FORCE CLEANUP")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH (HASH("ambient_MrsPhilips")) > 1
|
|
PRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Attempting to launch with an instance already active...")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
// Register the script so that it can be relaunched when loading from a savegame.
|
|
Register_Script_To_Relaunch_List(LAUNCH_BIT_RC_AMB_MRS_PHILIPS)
|
|
|
|
// We are a go-go!
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Initializing version ", XVERSION_NUMBER)
|
|
|
|
// Main loop
|
|
WHILE (TRUE)
|
|
|
|
// Entity check
|
|
IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
// Update current player
|
|
enumCharacterList ePlayer
|
|
ePlayer = GET_CURRENT_PLAYER_PED_ENUM()
|
|
|
|
FLOAT fReplayBlockRange = REPLAY_GET_MAX_DISTANCE_ALLOWED_FROM_PLAYER() + 5.0
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), <<1973.323730, 3815.593994, 31.429359>>) < (fReplayBlockRange*fReplayBlockRange) //30.0f range for replay recording
|
|
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2197988
|
|
ENDIF
|
|
|
|
// Current player is Franklin or Michael
|
|
IF ePlayer <> CHAR_TREVOR
|
|
|
|
SWITCH eStage
|
|
CASE MS_INIT
|
|
CASE MS_CHECK_FOR_VAN
|
|
CASE MS_LAUNCH_MISSION
|
|
// No need to run these states while not Trevor. Sleep for 5 seconds.
|
|
WAIT(5000)
|
|
BREAK
|
|
|
|
CASE MS_ON_MISSION
|
|
STAGE_MONITOR_MISSION()
|
|
WAIT(0)
|
|
BREAK
|
|
|
|
CASE MS_CLEANUP
|
|
SCRIPT_CLEANUP()
|
|
WAIT(0)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Only allow mission to trigger if we are Franklin
|
|
ELSE
|
|
SWITCH eStage
|
|
CASE MS_INIT
|
|
DO_INITALIZE()
|
|
BREAK
|
|
|
|
CASE MS_CHECK_FOR_VAN
|
|
STAGE_CHECK_FOR_VAN()
|
|
BREAK
|
|
|
|
CASE MS_LAUNCH_MISSION
|
|
STAGE_LAUNCH_MISSION()
|
|
BREAK
|
|
|
|
CASE MS_ON_MISSION
|
|
STAGE_MONITOR_MISSION()
|
|
BREAK
|
|
|
|
CASE MS_CLEANUP
|
|
SCRIPT_CLEANUP()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Debug widgets
|
|
#IF IS_DEBUG_BUILD
|
|
UPDATE_DEBUG_WIDGETS()
|
|
IF (bDebugQuitScript)
|
|
CPRINTLN(DEBUG_AMBIENT, "Ambient - Mrs Philips: Quitting script via debug...")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
// No need to update every frame
|
|
IF NOT bAttemptToLaunchScript
|
|
WAIT(1000)
|
|
ELSE
|
|
WAIT(0)
|
|
ENDIF
|
|
ENDIF
|
|
ENDWHILE
|
|
ENDSCRIPT
|