Files
gtav-src/script/dev_ng/singleplayer/scripts/Ambient/Misc/emergencycalllauncher.sc
T
2025-09-29 00:52:08 +02:00

293 lines
9.4 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
CONST_INT USE_TU_CHANGES 1
//////////////////////////////////////////////////////////////////////////////////////////
// //
// AUTHOR : //
// DESCRIPTION : Choose and emergency service //
// //
//////////////////////////////////////////////////////////////////////////////////////////
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "ambience_run_checks.sch"
USING "commands_misc.sch"
USING "script_player.sch"
USING "commands_pad.sch"
USING "commands_path.sch"
USING "cellphone_public.sch"
USING "dialogue_public.sch"
USING "emergency_call.sch"
USING "flow_public_GAME.sch"
// Variables ----------------------------------------------//
ENUM EMERGENCY_MAIN_ENUM
WAIT_FOR_CALL = 0,
CLEANUP
ENDENUM
EMERGENCY_MAIN_ENUM emergency_main_stages = WAIT_FOR_CALL
ENUM callStageFlag
callphoneup,
callwaitforscript
ENDENUM
callStageFlag callStage = callphoneup
structPedsForConversation emergencyPedStruct
TEXT_LABEL_23 suppressingScript
BOOL bDisableCalls
enumConversationPriority callPriority
// Functions ----------------------------------------------//
PROC take_call()
SWITCH callStage
CASE callphoneup
IF IS_CALLING_CONTACT (CHAR_CALL911)
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_BIKER_BUY
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_BIKER_CONTRABAND_SELL
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_BIKER_CONTRABAND_DEFEND
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_GUNRUNNING_BUY
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_GUNRUNNING_SELL
AND GB_GET_PLAYER_CURRENT_GANG_BOSS_MISSION(PLAYER_ID()) != FMMC_TYPE_GUNRUNNING_DEFEND
IF g_bEmergencyCallPriorityIsHigh
callPriority = CONV_PRIORITY_CELLPHONE
ELSE
callPriority = CONV_PRIORITY_NON_CRITICAL_CALL
ENDIF
IF NOT g_bForceEmergencyCallAnswerphone
#if USE_TU_CHANGES
IF IS_CURRENT_MISSION_DLC() //Added by Steve T to make emergency calls DLC compliant. 11.02.14
IF PLAYER_CALL_EMERGENCY_SERVICES_USING_V_CONTENT_IN_DLC (emergencyPedStruct, CHAR_CALL911, "LOCAUD", "LOC_CALLQ", callPriority, "CELL_601", "LOC_CALLA", "LOC_CALLF", "LOC_CALLP") //The calls are already exported and in the XLS sheet.
#if IS_DEBUG_BUILD
cdPrintstring ("ECLauncher - Using_V_Content_in_DLC")
cdPrintnl()
#endif
IF NOT ARE_EMERGENCY_CALLS_SUPPRESSED()
REQUEST_SCRIPT("emergencycall")
WHILE NOT HAS_SCRIPT_LOADED("emergencycall")
WAIT(0)
ENDWHILE
START_NEW_SCRIPT("emergencycall", MINI_STACK_SIZE)
ENDIF
callStage = callwaitforscript
ENDIF
ELSE
#endif
#if IS_DEBUG_BUILD
cdPrintstring ("ECLauncher - Now using_V_content functionality...")
cdPrintnl()
#endif
//
IF PLAYER_CALL_EMERGENCY_SERVICES_USING_V_CONTENT_IN_DLC (emergencyPedStruct, CHAR_CALL911, "LOCAUD", "LOC_CALLQ", callPriority, "CELL_601", "LOC_CALLA", "LOC_CALLF", "LOC_CALLP") //The calls are already exported and in the XLS sheet.
IF NOT ARE_EMERGENCY_CALLS_SUPPRESSED()
REQUEST_SCRIPT("emergencycall")
WHILE NOT HAS_SCRIPT_LOADED("emergencycall")
WAIT(0)
ENDWHILE
START_NEW_SCRIPT("emergencycall", MINI_STACK_SIZE)
ENDIF
callStage = callwaitforscript
ENDIF
#if USE_TU_CHANGES
ENDIF
#endif
ENDIF
ENDIF
BREAK
CASE callwaitforscript
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("emergencycall")) = 0
IF NOT IS_CALLING_CONTACT (CHAR_CALL911)
emergency_main_stages = CLEANUP
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC checkForSuppression()
IF ARE_EMERGENCY_CALLS_SUPPRESSED()
suppressingScript = EMERGENCY_CALLS_SUPPRESSING_SCRIPT()
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(suppressingScript)) = 0
RELEASE_SUPPRESSED_EMERGENCY_CALLS()
ELSE
g_bForceEmergencyCallAnswerphone = TRUE
ENDIF
ELSE
g_bForceEmergencyCallAnswerphone = FALSE
ENDIF
ENDPROC
PROC emergencyCall_Cleanup() //Unload assests and reset flags
IF g_bEmergencyCallPriorityIsHigh
FORCE_EMERGENCY_CALL_PRIORITY_HIGH(FALSE)
ENDIF
emergency_main_stages = WAIT_FOR_CALL
callStage = callphoneup
PRINTSTRING ("emergencycalllauncher.sc - Cleanup")
PRINTNL()
ENDPROC
PROC SETUP_DEBUG()
#if IS_DEBUG_BUILD
START_WIDGET_GROUP("Emergency Call Launcher")
ADD_WIDGET_BOOL("Enable or Disable Emergency Call Toggle", bDisableCalls)
STOP_WIDGET_GROUP()
#ENDIF
ENDPROC
PROC RUN_DEBUG()
IF bDisableCalls
IF ARE_EMERGENCY_CALLS_SUPPRESSED()
RELEASE_SUPPRESSED_EMERGENCY_CALLS()
ELSE
SUPPRESS_EMERGENCY_CALLS()
ENDIF
bDisableCalls = FALSE
ENDIF
ENDPROC
// Mission Script -----------------------------------------//
SCRIPT
//Copied from bootycallhandler.sc by DavidG 01/02/2013
// KEITH 21/12/12: This script now terminates when the game is moving between SP and MP and back again, so need different cleanup checks.
// Also had to remove the NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() call - it clashes with FORCE_CLEANUP_FLAG_SP_TO_MP leading to an assert.
BOOL isInMultiplayer = NETWORK_IS_GAME_IN_PROGRESS()
// This script needs to cleanup only when the game moves from SP to MP
IF NOT (isInMultiplayer)
// KEITH 21/12/12: Terminate this script when moving from SP to MP
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP | FORCE_CLEANUP_FLAG_MAGDEMO)
#IF IS_DEBUG_BUILD
PRINTSTRING("...EmergencyCallHandler.sc has been forced to cleanup (SP to MP)")
PRINTNL()
#ENDIF
TERMINATE_THIS_THREAD()
ENDIF
ELSE
// Ensure this script persists during network game
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
ENDIF
ADD_PED_FOR_DIALOGUE(emergencyPedStruct, 1, NULL, "EMSDispatch")
SETUP_DEBUG()
// Mission Loop -------------------------------------------//
WHILE TRUE
WAIT(0)
//Copied from bootycallhandler.sc by DavidG 01/02/2013
// KEITH 21/12/12: Terminate this script when moving from MP to SP
IF (isInMultiplayer)
IF NOT (NETWORK_IS_GAME_IN_PROGRESS())
#IF IS_DEBUG_BUILD
PRINTSTRING("...EmergencyCallHandler.sc has been forced to cleanup (MP to SP)")
PRINTNL()
#ENDIF
TERMINATE_THIS_THREAD()
ENDIF
ENDIF
RUN_DEBUG()
IF IS_PLAYER_PLAYING(PLAYER_ID())
SWITCH emergency_main_stages
CASE WAIT_FOR_CALL
take_call()
checkForSuppression()
BREAK
CASE CLEANUP
emergencyCall_Cleanup()
BREAK
ENDSWITCH
ENDIF
/*
IF IS_CURRENT_MISSION_DLC()
DISPLAY_TEXT_WITH_LITERAL_STRING (0.10, 0.14, "STRING", "ECL - Is CurrMiss_DLC")
ELSE
DISPLAY_TEXT_WITH_LITERAL_STRING (0.10, 0.14, "STRING", "ECL - Not CurrMiss_DLC")
ENDIF
*/
ENDWHILE
ENDSCRIPT