////////////////////////////////////////////////////////////////////////////////////////// // // // SCRIPT NAME : script_launch_control.sch // // AUTHOR : Kenneth Ross // // DESCRIPTION : Checks if any controller scripts should be launched when // // required. This was set up to reduce the number of // // controller scripts that constantly run. // // // ////////////////////////////////////////////////////////////////////////////////////////// USING "rage_builtins.sch" USING "globals.sch" USING "commands_script.sch" USING "script_player.sch" USING "wardrobe_private.sch" USING "random_events_public.sch" USING "director_mode_public.sch" #IF NOT USE_SP_DLC USING "photographyWildlife.sch" USING "randomChar_Public.sch" #ENDIF STRUCT ScriptLaunchVars INT iLaunchCheckStage INT iCurrentWardrobeFrame INT iWardrobeScriptRequestedBitset INT iDirectorModeLaunchState FEATURE_BLOCK_REASON eDirectorModeBlockLastFrame BOOL bWardrobeScriptRequested BOOL bFirstSpawnDone int iDelayLaunchTime ENDSTRUCT CONST_INT BIT_DM_LAUNCH_GAME_PAUSED 0 CONST_INT BIT_DM_LAUNCH_PRE_CLEANUP 1 CONST_INT BIT_DM_LAUNCH_CONTROL_WAS_OFF 2 //////////////////////////////////////////////////// /// WARDROBE CONST_INT MAX_FRAMES_TO_PROCESS_WARDROBES 30 CONST_FLOAT CABLE_CAR_RESTART_MIN_X -800.0 // if player x is bigger than this - restart CONST_FLOAT CABLE_CAR_RESTART_MAX_X 640.0 // if player x is smaller than this - restart CONST_FLOAT CABLE_CAR_RESTART_MIN_Y 5300.0 // if player y is bigger than this - restart CONST_FLOAT CABLE_CAR_RESTART_MAX_Y 5800.0 // if player y is smaller than this - restart #IF NOT USE_SP_DLC VECTOR vAmbSolLaunchCenter = <<-1124.392212,-514.700134,33.214931>> FLOAT fAmbSolLaunchRadius = 200.0 #endif VECTOR vAmbUFOPosition0 = <<2490.0, 3777.0, 2402.879>> VECTOR vAmbUFOPosition1 = <<-2052.0, 3237.0, 1450.078>> // OLD <<-2366.379, 2962.758, 1448.873>> CONST_FLOAT AMBIENT_UFO_SCRIPT_TRIGGER_RANGE 290.0 // increased range for B*1686895 FUNC BOOL REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH(INT paramScriptHash, #IF IS_DEBUG_BUILD STRING paramScriptName, #ENDIF INT paramStackSize = DEFAULT_STACK_SIZE) REQUEST_SCRIPT_WITH_NAME_HASH(paramScriptHash) IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(paramScriptHash) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Starting new \"", paramScriptName, "\" thread.") #ENDIF START_NEW_SCRIPT_WITH_NAME_HASH(paramScriptHash, paramStackSize) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(paramScriptHash) RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC DO_PLAYER_CONTROLLER_B_CHECKS() BOOL bPreventPlayerControllerBForMPStart = FALSE IF g_bInMultiplayer CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Prevent player_controller_b for g_bInMultiplayer") bPreventPlayerControllerBForMPStart = TRUE ENDIF IF MPGlobals.g_bEndSingleplayerNow CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Prevent player_controller_b for g_bEndSingleplayerNow") bPreventPlayerControllerBForMPStart = TRUE ENDIF IF g_TransitionData.SwoopStage = SKYSWOOP_GOINGUP CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Prevent player_controller_b for g_TransitionData.SwoopStage") bPreventPlayerControllerBForMPStart = TRUE ENDIF IF g_bRunMultiplayerOnStartup CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Prevent player_controller_b for g_bRunMultiplayerOnStartup") bPreventPlayerControllerBForMPStart = TRUE ENDIF IF (CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) AND NOT bPreventPlayerControllerBForMPStart) #IF IS_DEBUG_BUILD OR g_bDebug_KeepPlayerControllerBRunning #ENDIF #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("player_controller_bCLF")) = 0 //#1356702 IF IS_PLAYER_PED_SWITCH_IN_PROGRESS() OR IS_PLAYER_SWITCH_IN_PROGRESS() DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) DISABLE_FRONTEND_THIS_FRAME() ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("player_controller_bCLF"), #IF IS_DEBUG_BUILD "player_controller_bCLF", #ENDIF MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("player_controller_bCLF")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("player_controller_bCLF")) #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("player_controller_bNRM")) = 0 //#1356702 IF IS_PLAYER_PED_SWITCH_IN_PROGRESS() OR IS_PLAYER_SWITCH_IN_PROGRESS() DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) DISABLE_FRONTEND_THIS_FRAME() ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("player_controller_bNRM"), #IF IS_DEBUG_BUILD "player_controller_bNRM", #ENDIF MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("player_controller_bNRM")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("player_controller_bNRM")) #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("player_controller_b")) = 0 //#1356702 IF IS_PLAYER_PED_SWITCH_IN_PROGRESS() OR IS_PLAYER_SWITCH_IN_PROGRESS() DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE) DISABLE_FRONTEND_THIS_FRAME() ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("player_controller_b"), #IF IS_DEBUG_BUILD "player_controller_b", #ENDIF MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("player_controller_b")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("player_controller_b")) #ENDIF ENDIF ENDPROC PROC DO_FRIENDS_CONTROLLER_CHECKS() IF Should_Friends_Controller_Be_Running() #IF IS_DEBUG_BUILD OR g_bDebug_KeepFriendsControllerRunning #ENDIF IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("friends_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("friends_controller"), #IF IS_DEBUG_BUILD "friends_controller", #ENDIF FRIEND_STACK_SIZE) ENDIF ENDIF ENDPROC PROC DO_AUTOSAVE_CONTROLLER_CHECKS() // Check if code are wanting us to make an autosave. IF HAS_CODE_REQUESTED_AUTOSAVE() MAKE_AUTOSAVE_REQUEST() CLEAR_CODE_REQUESTED_AUTOSAVE() ENDIF IF g_sAutosaveData.iQueuedRequests > 0 #IF IS_DEBUG_BUILD OR g_bDebug_KeepAutoSaveControllerRunning #ENDIF #if USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("autosave_controllerCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("autosave_controllerCLF") #IF IS_DEBUG_BUILD ,"autosave_controllerCLF" #ENDIF ) ENDIF #endif #if USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("autosave_controllerNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("autosave_controllerNRM") #IF IS_DEBUG_BUILD ,"autosave_controllerNRM" #ENDIF ) ENDIF #endif #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("autosave_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("autosave_controller") #IF IS_DEBUG_BUILD ,"autosave_controller" #ENDIF ) ENDIF #endif ENDIF ENDPROC PROC DO_RESPAWN_CONTROLLER_CHECKS() #if FEATURE_SP_DLC_DIRECTOR_MODE if !g_bRockstarEditorActive #endif #IF USE_CLF_DLC CONST_INT paramScriptHash HASH("respawn_controllerCLF") #ENDIF #IF USE_NRM_DLC CONST_INT paramScriptHash HASH("respawn_controllerNRM") #ENDIF #IF NOT USE_SP_DLC CONST_INT paramScriptHash HASH("respawn_controller") #ENDIF #IF IS_DEBUG_BUILD g_bDebug_IsRespawnControllerRunning = GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(paramScriptHash) > 0 #ENDIF IF NOT IS_CURRENT_MINIGAME_SET_TO_BYPASS_RESPAWN_CUTSCENE() AND NOT IS_REPEAT_PLAY_ACTIVE() //Disable the respawn controller during repeat plays #IF IS_DEBUG_BUILD OR g_bDebug_KeepRespawnControllerRunning #ENDIF REQUEST_SCRIPT_WITH_NAME_HASH(paramScriptHash) IF IS_PED_INJURED(PLAYER_PED_ID()) OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE) #IF IS_DEBUG_BUILD OR g_bDebug_KeepRespawnControllerRunning #ENDIF IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(paramScriptHash) = 0 #IF IS_DEBUG_BUILD IF IS_PED_INJURED(PLAYER_PED_ID()) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PED_INJURED(PLAYER_PED_ID()).") ENDIF IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE).") ENDIF IF g_bDebug_KeepRespawnControllerRunning CPRINTLN(DEBUG_SCRIPT_LAUNCH, "g_bDebug_KeepRespawnControllerRunning.") ENDIF #ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( paramScriptHash #IF IS_DEBUG_BUILD ,"respawn_controllerCLF" #ENDIF ) ENDIF #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(paramScriptHash) = 0 #IF IS_DEBUG_BUILD IF IS_PED_INJURED(PLAYER_PED_ID()) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PED_INJURED(PLAYER_PED_ID()).") ENDIF IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE).") ENDIF IF g_bDebug_KeepRespawnControllerRunning CPRINTLN(DEBUG_SCRIPT_LAUNCH, "g_bDebug_KeepRespawnControllerRunning.") ENDIF #ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( paramScriptHash #IF IS_DEBUG_BUILD ,"respawn_controllerNRM" #ENDIF ) ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(paramScriptHash) = 0 #IF IS_DEBUG_BUILD IF IS_PED_INJURED(PLAYER_PED_ID()) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PED_INJURED(PLAYER_PED_ID()).") ENDIF IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE).") ENDIF IF g_bDebug_KeepRespawnControllerRunning CPRINTLN(DEBUG_SCRIPT_LAUNCH, "g_bDebug_KeepRespawnControllerRunning.") ENDIF #ENDIF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( paramScriptHash #IF IS_DEBUG_BUILD ,"respawn_controller" #ENDIF ) ENDIF #ENDIF #IF IS_DEBUG_BUILD ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "IS_PLAYER_SWITCH_IN_PROGRESS().") #ENDIF ENDIF ENDIF ELSE SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(paramScriptHash) ENDIF #if FEATURE_SP_DLC_DIRECTOR_MODE endif #endif ENDPROC PROC DO_WARDROBE_SCRIPT_CHECKS(ScriptLaunchVars &sVars) WARDROBE_LAUNCHER_STRUCT sWardrobeLauncherData // Update the frame that we are processing if not loading for the current IF NOT sVars.bWardrobeScriptRequested sVars.iCurrentWardrobeFrame = (sVars.iCurrentWardrobeFrame+1) % MAX_FRAMES_TO_PROCESS_WARDROBES ENDIF INT i, j REPEAT (NUM_PLAYER_PED_WARDROBES / MAX_FRAMES_TO_PROCESS_WARDROBES)+1 j i = sVars.iCurrentWardrobeFrame+(j*MAX_FRAMES_TO_PROCESS_WARDROBES) // Only perform an update if this wardrobe is within the range IF i < NUM_PLAYER_PED_WARDROBES sWardrobeLauncherData.eWardrobe = INT_TO_ENUM(PLAYER_WARDROBE_ENUM, i) // Cleanup IF g_bWardrobeScriptLaunched[i] IF NOT g_bWardrobeScriptRunning[i] g_bWardrobeScriptLaunched[i] = FALSE ENDIF // Request ELIF NOT g_bWardrobeScriptRunning[i] AND NOT IS_BIT_SET(sVars.iWardrobeScriptRequestedBitset, i) IF GET_DISTANCE_BETWEEN_COORDS(GET_PLAYER_PED_WARDROBE_COORDS(sWardrobeLauncherData.eWardrobe), GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)) < 20.0 CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Requesting wardrobe_sp script ", i) REQUEST_SCRIPT_WITH_NAME_HASH(HASH("wardrobe_sp")) SET_BIT(sVars.iWardrobeScriptRequestedBitset, i) sVars.bWardrobeScriptRequested = TRUE ENDIF // Launch ELSE IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("wardrobe_sp")) IF GET_NUMBER_OF_FREE_STACKS_OF_THIS_SIZE(SHOP_STACK_SIZE) > 1 CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Launching wardrobe script ", i) g_bWardrobeScriptRunning[i] = TRUE g_bWardrobeScriptLaunched[i] = TRUE CLEAR_BIT(sVars.iWardrobeScriptRequestedBitset, i) // Set the launcher data and start script START_NEW_SCRIPT_WITH_NAME_HASH_AND_ARGS(HASH("wardrobe_sp"), sWardrobeLauncherData, SIZE_OF(sWardrobeLauncherData), SHOP_STACK_SIZE) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("wardrobe_sp")) #IF IS_DEBUG_BUILD ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Unable to launch wardrobe_sp script ", i, " - no free stacks") #ENDIF ENDIF ENDIF ENDIF ENDIF ENDREPEAT IF sVars.bWardrobeScriptRequested AND sVars.iWardrobeScriptRequestedBitset = 0 SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("wardrobe_sp")) sVars.bWardrobeScriptRequested = FALSE ENDIF ENDPROC PROC DO_MODEL_SUPPRESS_CHECKS() IF g_bAmbientModelSuppressActive BOOL bModelSuppressed = FALSE INT i REPEAT COUNT_OF(g_eAmbientModelSuppress) i IF g_eAmbientModelSuppress[i] != DUMMY_MODEL_FOR_SCRIPT IF (GET_GAME_TIMER() - g_iAmbientModelSuppressTimer[i]) > 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SCRIPT_LAUNCH, "SET_MODEL_IS_SUPPRESSED_FOR_DURATION - No longer suppressing model ", GET_MODEL_NAME_FOR_DEBUG(g_eAmbientModelSuppress[i])) #ENDIF IF g_bAmbientModelSuppressVehicle[i] SET_VEHICLE_MODEL_IS_SUPPRESSED(g_eAmbientModelSuppress[i], FALSE) ELSE SET_PED_MODEL_IS_SUPPRESSED(g_eAmbientModelSuppress[i], FALSE) ENDIF g_eAmbientModelSuppress[i] = DUMMY_MODEL_FOR_SCRIPT ELSE IF g_bAmbientModelSuppressVehicle[i] SET_VEHICLE_MODEL_IS_SUPPRESSED(g_eAmbientModelSuppress[i], TRUE) ELSE SET_PED_MODEL_IS_SUPPRESSED(g_eAmbientModelSuppress[i], TRUE) ENDIF bModelSuppressed = TRUE ENDIF ENDIF ENDREPEAT IF NOT bModelSuppressed CPRINTLN(DEBUG_SCRIPT_LAUNCH, "SET_MODEL_IS_SUPPRESSED_FOR_DURATION - No more models to suppress") g_bAmbientModelSuppressActive = FALSE ENDIF ENDIF ENDPROC PROC DO_MISSION_TRIGGERER_CHECKS() IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE) #IF USE_CLF_DLC //If the game has been completed there is never a need to launch the triggerer. IF NOT g_savedGlobalsClifford.sFlow.flowCompleted //Don't launch anything until the flow has settled. IF NOT g_flowUnsaved.bFlowControllerBusy //Only start the mission trigger if the game is in a state where story missions can trigger. IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) AND NOT IS_REPEAT_PLAY_ACTIVE() IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_trigger_CLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_trigger_CLF") #IF IS_DEBUG_BUILD ,"mission_trigger_CLF" #ENDIF ) ENDIF ELSE //We're on mission. Make sure to unload any loaded mission triggers. IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_trigger_CLF")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_trigger_CLF")) ENDIF ENDIF IF g_savedGlobalsClifford.sFlow.flowCompleted IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_trigger_CLF")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_trigger_CLF")) ENDIF ENDIF ENDIF ENDIF #ENDIF #IF USE_NRM_DLC //If the game has been completed there is never a need to launch the triggerer. IF NOT g_savedGlobalsnorman.sFlow.flowCompleted //Don't launch anything until the flow has settled. IF NOT g_flowUnsaved.bFlowControllerBusy //Only start the mission trigger if the game is in a state where story missions can trigger. IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) AND NOT IS_REPEAT_PLAY_ACTIVE() IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_triggerNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_triggerNRM") #IF IS_DEBUG_BUILD ,"mission_triggerNRM" #ENDIF ) ENDIF ELSE //We're on mission. Make sure to unload any loaded mission triggers. IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerNRM")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerNRM")) ENDIF ENDIF IF g_savedGlobalsnorman.sFlow.flowCompleted IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerNRM")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerNRM")) ENDIF ENDIF ENDIF ENDIF #ENDIF #IF NOT USE_SP_DLC //If the game has been completed there is never a need to launch the triggerer. IF NOT g_savedGlobals.sFlow.flowCompleted //Don't launch anything until the flow has settled. IF NOT g_flowUnsaved.bFlowControllerBusy //Only start the mission trigger if the game is in a state where story missions can trigger. IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) AND NOT IS_REPEAT_PLAY_ACTIVE() //Load the mission triggerer with mission data up to the end of Trevor1. IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_1) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_triggerer_A")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_triggerer_A") #IF IS_DEBUG_BUILD ,"mission_triggerer_A" #ENDIF , MULTIPLAYER_MISSION_STACK_SIZE) ENDIF //Load the mission triggerer with mission data from Trevor2 to the end of FIB4. ELIF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_4) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_triggerer_B")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_triggerer_B") #IF IS_DEBUG_BUILD ,"mission_triggerer_B" #ENDIF , MULTIPLAYER_MISSION_STACK_SIZE) ENDIF //Load the mission triggerer with mission data from Carsteal1 to the end of The Big Score 1. ELIF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_MICHAEL_1) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_triggerer_C")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_triggerer_C") #IF IS_DEBUG_BUILD ,"mission_triggerer_C" #ENDIF , MULTIPLAYER_MISSION_STACK_SIZE) ENDIF //Load the mission triggerer with mission data for the rest of the game. ELSE IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_triggerer_D")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_triggerer_D") #IF IS_DEBUG_BUILD ,"mission_triggerer_D" #ENDIF , MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ENDIF ELSE //We're on mission. Make sure to unload any loaded mission triggers. IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_A")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_A")) ENDIF IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_B")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_B")) ENDIF IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_C")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_C")) ENDIF IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_D")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_D")) ENDIF ENDIF IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_1) IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_A")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_A")) ENDIF ELIF GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_4) IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_B")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_B")) ENDIF ELIF GET_MISSION_COMPLETE_STATE(SP_MISSION_MICHAEL_1) IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_C")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_C")) ENDIF ELIF g_savedGlobals.sFlow.flowCompleted IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("mission_triggerer_D")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("mission_triggerer_D")) ENDIF ENDIF ENDIF ENDIF #ENDIF ENDIF ENDPROC PROC DO_MISSION_REPEAT_CHECKS() IF IS_REPEAT_PLAY_ACTIVE(TRUE) //Ignore the benchmark script, not actually a mission #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_repeat_controllerCLF")) = 0 IF NOT IS_BIT_SET(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) CPRINTLN(DEBUG_REPEAT, "Pausing game to launch repeat play.") SET_GAME_PAUSED(TRUE) SET_BIT(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) ENDIF IF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_repeat_controllerCLF") #IF IS_DEBUG_BUILD ,"mission_repeat_controllerCLF" #ENDIF , FRIEND_STACK_SIZE) CPRINTLN(DEBUG_REPEAT, "Unpausing game as repeat play script launched.") SET_GAME_PAUSED(FALSE) ENDIF ENDIF #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_repeat_controllerNRM")) = 0 IF NOT IS_BIT_SET(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) CPRINTLN(DEBUG_REPEAT, "Pausing game to launch repeat play.") SET_GAME_PAUSED(TRUE) SET_BIT(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) ENDIF IF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_repeat_controllerNRM") #IF IS_DEBUG_BUILD ,"mission_repeat_controllerNRM" #ENDIF , FRIEND_STACK_SIZE) CPRINTLN(DEBUG_REPEAT, "Unpausing game as repeat play script launched.") SET_GAME_PAUSED(FALSE) ENDIF ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_repeat_controller")) = 0 IF NOT IS_BIT_SET(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) CPRINTLN(DEBUG_REPEAT, "Pausing game to launch repeat play.") SET_GAME_PAUSED(TRUE) SET_BIT(g_iRepeatPlayBits, ENUM_TO_INT(RPB_PAUSED_GAME)) ENDIF IF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("mission_repeat_controller") #IF IS_DEBUG_BUILD ,"mission_repeat_controller" #ENDIF , FRIEND_STACK_SIZE) CPRINTLN(DEBUG_REPEAT, "Unpausing game as repeat play script launched.") SET_GAME_PAUSED(FALSE) ENDIF ENDIF #ENDIF ENDIF ENDPROC PROC DO_CODE_CONTROLLER_CHECKS() #IF USE_CLF_DLC IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("code_controllerCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("code_controllerCLF") #IF IS_DEBUG_BUILD ,"code_controllerCLF" #ENDIF ) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("code_controllerCLF")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("code_controllerCLF")) ENDIF #ENDIF #IF USE_NRM_DLC IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("code_controllerNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("code_controllerNRM") #IF IS_DEBUG_BUILD ,"code_controllerNRM" #ENDIF ) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("code_controllerNRM")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("code_controllerNRM")) ENDIF #ENDIF #IF NOT USE_SP_DLC IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_STORY) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("code_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("code_controller") #IF IS_DEBUG_BUILD ,"code_controller" #ENDIF ) ENDIF ELIF HAS_SCRIPT_WITH_NAME_HASH_LOADED(HASH("code_controller")) SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(HASH("code_controller")) ENDIF #ENDIF ENDPROC PROC DO_RC_CONTROLLER_CHECKS() IF NOT IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_RANDOM_CHAR) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("RandomChar_Controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("RandomChar_Controller") #IF IS_DEBUG_BUILD ,"RandomChar_Controller" #ENDIF ) ENDIF ENDIF ENDPROC PROC DO_RACE_CONTROLLER_CHECKS() #IF NOT USE_SP_DLC IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_STREET_RACES)) OR GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_SEA_RACES)) IF NOT IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("controller_Races")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("controller_Races") #IF IS_DEBUG_BUILD ,"controller_Races" #ENDIF ) ENDIF ENDIF ENDIF #endif ENDPROC PROC DO_FLOW_HELP_CHECKS() IF g_OnMissionState = MISSION_TYPE_FRIEND_ACTIVITY OR g_OnMissionState = MISSION_TYPE_OFF_MISSION OR g_bHeistBoardViewActive #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("flow_helpCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("flow_helpCLF") #IF IS_DEBUG_BUILD ,"flow_helpCLF" #ENDIF , MICRO_STACK_SIZE ) ENDIF #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("flow_helpNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("flow_helpNRM") #IF IS_DEBUG_BUILD ,"flow_helpNRM" #ENDIF , MICRO_STACK_SIZE ) ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("flow_help")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("flow_help") #IF IS_DEBUG_BUILD ,"flow_help" #ENDIF , MICRO_STACK_SIZE ) ENDIF #ENDIF ENDIF ENDPROC PROC DO_BOOTY_CALL_HANDLER_CHECKS() IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE() IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("bootycallhandler")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("bootycallhandler") #IF IS_DEBUG_BUILD ,"bootycallhandler" #ENDIF) ENDIF ENDIF ENDPROC PROC DO_COMMS_CONTROLLER_CHECKS() IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE() #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("comms_controllerCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("comms_controllerCLF") #IF IS_DEBUG_BUILD ,"comms_controllerCLF" #ENDIF ) ENDIF #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("comms_controllerNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("comms_controllerNRM") #IF IS_DEBUG_BUILD ,"comms_controllerNRM" #ENDIF ) ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("comms_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("comms_controller") #IF IS_DEBUG_BUILD ,"comms_controller" #ENDIF ) ENDIF #ENDIF ENDIF ENDPROC PROC DO_REPLAY_CONTROLLER_CHECKS() IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_FRIENDS) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_PREP) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_RANDOM_CHAR) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME_FRIENDS) #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("replay_controllerCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("replay_controllerCLF") #IF IS_DEBUG_BUILD ,"replay_controllerCLF" #ENDIF ) ENDIF #ENDIF #IF USE_NRM_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("replay_controllerNRM")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("replay_controllerNRM") #IF IS_DEBUG_BUILD ,"replay_controllerNRM" #ENDIF ) ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("replay_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("replay_controller") #IF IS_DEBUG_BUILD ,"replay_controller" #ENDIF ) ENDIF #ENDIF ENDIF ENDPROC PROC DO_SAVE_ANYWHERE_CHECKS() IF g_HasCellphoneRequestedSave IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("save_anywhere")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("save_anywhere") #IF IS_DEBUG_BUILD ,"save_anywhere" #ENDIF ) ENDIF ENDIF ENDPROC #IF FEATURE_SP_DLC_DIRECTOR_MODE PROC DO_DIRECTOR_MODE_CHECKS(ScriptLaunchVars &sVars) IF HAS_DIRECTOR_MODE_BEEN_LAUNCHED_BY_CODE() CPRINTLN(DEBUG_DIRECTOR, "Detected director mode launch coming from code.") g_bLaunchDirectorMode = TRUE SET_DIRECTOR_MODE_LAUNCHED_BY_SCRIPT() ENDIF FEATURE_BLOCK_REASON eBlockReasonThisFrame = GET_FEATURE_BLOCKED_REASON(TRUE,default,DEBUG_DIRECTOR) // #IF IS_DEBUG_BUILD // CDEBUG3LN(DEBUG_DIRECTOR, " - script_launch_control - DO_DIRECTOR_MODE_CHECKS - eBlockReasonThisFrame: ", eBlockReasonThisFrame) // CDEBUG3LN(DEBUG_DIRECTOR, " - script_launch_control - DO_DIRECTOR_MODE_CHECKS - sVars.eDirectorModeBlockLastFrame: ", sVars.eDirectorModeBlockLastFrame) // #ENDIF IF eBlockReasonThisFrame != sVars.eDirectorModeBlockLastFrame IF eBlockReasonThisFrame = FBR_NONE CPRINTLN(DEBUG_DIRECTOR, "Detected Director Mode is no longer blocked. Setting available.") SET_DIRECTOR_MODE_AVAILABLE(TRUE) ELSE CPRINTLN(DEBUG_DIRECTOR, "Detected Director Mode is now blocked (Reason:", DEBUG_GET_FEATURE_BLOCK_REASON_STRING(eBlockReasonThisFrame,DEBUG_DIRECTOR), "). Setting unavailable.") SET_DIRECTOR_MODE_AVAILABLE(FALSE) ENDIF sVars.eDirectorModeBlockLastFrame = eBlockReasonThisFrame ENDIF IF g_bLaunchDirectorMode IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR) CPRINTLN(DEBUG_DIRECTOR, "Main thread detected request to launch the Director Mode script...") IF eBlockReasonThisFrame = FBR_NONE SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(),TRUE) //Director Mode is allowed to launch. Fire the script now. IF NOT IS_SCREEN_FADED_OUT() AND NOT IS_SCREEN_FADING_OUT() CPRINTLN(DEBUG_DIRECTOR, "Fading screen out in peraparation for launching Director Mode.") DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME) ELSE IF NOT IS_BIT_SET(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_PRE_CLEANUP) CPRINTLN(DEBUG_DIRECTOR, "Running Director Mode pre-launch cleanup..") HANG_UP_AND_PUT_AWAY_PHONE(TRUE) //Turn player control off, remember if it used to be on IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID()) SET_BIT(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_CONTROL_WAS_OFF) ENDIF CPRINTLN(DEBUG_DIRECTOR,"Setting player control OFF as we launch DM, it used to be ",IS_PLAYER_CONTROL_ON(PLAYER_ID())) SET_PLAYER_CONTROL(PLAYER_ID(),FALSE) SET_BIT(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_PRE_CLEANUP) ENDIF IF REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("director_mode") #IF IS_DEBUG_BUILD ,"director_mode" #ENDIF, MISSION_STACK_SIZE) sVars.iDirectorModeLaunchState = 0 g_bLaunchDirectorMode = FALSE ENDIF ENDIF ELSE if GET_GAME_TIMER() - sVars.iDelayLaunchTime >= 250 //Draw the warning screen. SET_GAME_PAUSED(TRUE) HIDE_LOADING_ON_FADE_THIS_FRAME() SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE) SET_INPUT_EXCLUSIVE(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) STRING strFBLabel = GET_FEATURE_BLOCK_MESSAGE_TEXT(eBlockReasonThisFrame,DEBUG_DIRECTOR) SET_WARNING_MESSAGE("FBR_GENERIC", FE_WARNING_CONTINUE, DEFAULT, DEFAULT, DEFAULT, "FBR_DIR_MODE", strFBLabel) CDEBUG3LN(DEBUG_DIRECTOR, "Displaying ", DEBUG_GET_FEATURE_BLOCK_REASON_STRING(eBlockReasonThisFrame,DEBUG_DIRECTOR), " block screen.") CDEBUG3LN(DEBUG_DIRECTOR, "now able to clear alert screen") if !IS_BIT_SET(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_GAME_PAUSED) SET_BIT(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_GAME_PAUSED) ELSE IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT) IF IS_BIT_SET(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_GAME_PAUSED) CLEAR_BIT(sVars.iDirectorModeLaunchState, BIT_DM_LAUNCH_GAME_PAUSED) ENDIF SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(),FALSE) //Disable temporary invulnerability in case of exiting SET_PLAYER_CONTROL(PLAYER_ID(),TRUE) SET_GAME_PAUSED(FALSE) CPRINTLN(DEBUG_DIRECTOR, "Cleaning up Director Mode launch due to block reason.") sVars.iDirectorModeLaunchState = 0 g_bLaunchDirectorMode = FALSE IF NOT IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF ENDIF ENDIF ENDIF ELSE CPRINTLN(DEBUG_DIRECTOR, "Director Mode is already launched. Flagging to return to trailer instead of launching.") CDEBUG1LN(DEBUG_DIRECTOR,"DO_DIRECTOR_MODE_CHECKS: setting g_bDirectorSwitchToCastingTrailer to TRUE") g_bDirectorSwitchToCastingTrailer = TRUE g_bDirectorSwitchToCastingTrailerFromCode = TRUE g_bLaunchDirectorMode = FALSE ENDIF ELSE sVars.iDelayLaunchTime = GET_GAME_TIMER() ENDIF ENDPROC #ENDIF PROC DO_CABLECAR_LAUNCH_CHECKS() IF (g_bInMultiplayer = FALSE) AND (g_bForceNoCableCar = FALSE) AND NOT GET_MISSION_FLAG() IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) VECTOR plyrPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) IF (plyrPos.x >= CABLE_CAR_RESTART_MIN_X) AND (plyrPos.y >= CABLE_CAR_RESTART_MIN_Y) AND (plyrPos.x <= CABLE_CAR_RESTART_MAX_X) AND (plyrPos.y <= CABLE_CAR_RESTART_MAX_Y) #IF USE_CLF_DLC IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("cablecarCLF")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("cablecarCLF") #IF IS_DEBUG_BUILD ,"cablecarCLF" #ENDIF ) ENDIF EXIT #ENDIF #IF NOT USE_SP_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) = TRUE IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("cablecar")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("cablecar") #IF IS_DEBUG_BUILD ,"cablecar" #ENDIF ) ENDIF ENDIF #ENDIF ENDIF ENDIF ENDIF /* IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("cablecar")) = 0) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) #IF NOT USE_SP_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) = TRUE #endif VECTOR plyrPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) IF (plyrPos.x >= CABLE_CAR_RESTART_MIN_X) AND (plyrPos.y >= CABLE_CAR_RESTART_MIN_Y) AND (plyrPos.x <= CABLE_CAR_RESTART_MAX_X) AND (plyrPos.y <= CABLE_CAR_RESTART_MAX_Y) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("cablecar") #IF IS_DEBUG_BUILD ,"cablecar" #ENDIF ) ENDIF #IF NOT USE_SP_DLC ENDIF #endif ENDIF ENDIF */ ENDPROC PROC DO_AMBIENT_UFOS_LAUNCH_CHECKS() IF (g_bInMultiplayer = FALSE) AND (g_bForceNoAmbientUFO = FALSE) IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("ambient_ufos")) = 0) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF (g_savedGlobals.sCompletionPercentageData.b_g_OneHundredPercentReached = TRUE) IF (GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vAmbUFOPosition0) < AMBIENT_UFO_SCRIPT_TRIGGER_RANGE) OR (GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vAmbUFOPosition1) < AMBIENT_UFO_SCRIPT_TRIGGER_RANGE) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("ambient_ufos") #IF IS_DEBUG_BUILD ,"ambient_ufos" #ENDIF ) ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC PROC DO_AMBIENT_SOLOMON_LAUNCH_CHECKS() #IF NOT USE_SP_DLC IF (g_bInMultiplayer = FALSE) AND NOT GET_MISSION_FLAG() IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN) = FALSE IF GET_MISSION_COMPLETE_STATE(SP_MISSION_SOLOMON_1) = FALSE IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("ambient_solomon")) = 0) IF IS_MISSION_AVAILABLE(SP_MISSION_SOLOMON_1) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), vAmbSolLaunchCenter) <= (fAmbSolLaunchRadius * fAmbSolLaunchRadius) IF (GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("ambient_solomon") #IF IS_DEBUG_BUILD ,"ambient_solomon" #ENDIF ) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF #ENDIF ENDPROC #IF NOT USE_SP_DLC PROC DO_PHOTOGRAPHY_WILDLIFE_LAUNCH_CHECKS() IF IS_LAST_GEN_PLAYER() AND NOT IS_REPEAT_PLAY_ACTIVE() AND NOT IS_DIRECTOR_MODE_RUNNING() IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_WILDLIFE_PHOTOGRAPHY_UNLOCKED) #IF IS_DEBUG_BUILD AND !g_bBlockPhotographyWildlifeRelaunch #ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("photographyWildlife")) = 0 AND NOT IS_BIT_SET(g_SavedGlobals.sAmbient.iWildlifePhotographsFlags, BIT_SET_COLLECT_WILDLIFE_PHOTOGRAPHS_FINISHED) AND NOT g_flowUnsaved.bUpdatingGameflow REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH(HASH("photographyWildlife") #IF IS_DEBUG_BUILD , "photographyWildlife" #ENDIF) ENDIF ENDIF ENDIF ENDIF ENDPROC #ENDIF PROC DO_MINIGAME_LAUNCH_CHECKS() IF NOT IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) IF NOT g_HasPerformedMiniGameRangeChecks VECTOR vMyCurrentPlayerCoords STRING launcherScriptName IF NOT IS_PED_INJURED(PLAYER_PED_ID()) vMyCurrentPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID()) ELSE EXIT // Leave if the ped is injured. ENDIF //BASE Jumping Helicopter launcherScriptName = "launcher_BasejumpHeli" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_BasejumpHeli")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_BJ_HELI_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //BASE Jumping Pack launcherScriptName = "launcher_BasejumpPack" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_BasejumpPack")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_BJ_PACK_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_MEDIUM) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Golf launcherScriptName = "launcher_golf" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_golf")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_GOLF_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Hunting launcherScriptName = "launcher_Hunting_Ambient" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_Hunting_Ambient")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_HUNTING_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Off Road Racing launcherScriptName = "launcher_OffroadRacing" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_OffroadRacing")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_OFFROAD_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Racing launcherScriptName = "launcher_Racing" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_Racing")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_RACING_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Rampage launcherScriptName = "launcher_rampage" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_rampage")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_RAMPAGE_LAUNCHER(vMyCurrentPlayerCoords, FLOOR(RC_BRAIN_ACTIVATION_RANGE_EXTRA)) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Flight school launcherScriptName = "launcher_pilotschool" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_pilotschool")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_PILOT_SCHOOL_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_MEDIUM) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Shooting Range launcherScriptName = "launcher_range" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_range")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_RANGE_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_SMALL) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Stunt plane time trials launcherScriptName = "launcher_stunts" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_stunts")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_STUNTS_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_LARGE) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Tennis launcherScriptName = "launcher_tennis" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_tennis")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_TENNIS_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_MEDIUM) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Triathlon launcherScriptName = "launcher_Triathlon" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_Triathlon")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_TRIATHLON_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_MEDIUM) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Yoga launcherScriptName = "launcher_Yoga" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_Yoga")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_YOGA_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_SMALL) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF //Darts launcherScriptName = "launcher_Darts" CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Checking promximity to ", launcherScriptName) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("launcher_Darts")) = 0 //check if im in range of one of the points IF IS_PLAYER_WITHIN_RANGE_OF_DARTS_LAUNCHER(vMyCurrentPlayerCoords, MG_BRAIN_ACTIVATION_RANGE_MEDIUM) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Reactivating script brains for", launcherScriptName) //object attached, so using object_brains reactivation instead of world_brains REACTIVATE_NAMED_OBJECT_BRAINS_WAITING_TILL_OUT_OF_RANGE(launcherScriptName) ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, "player isn't within range of any ", launcherScriptName, " points") ENDIF ELSE CPRINTLN(DEBUG_SCRIPT_LAUNCH, launcherScriptName, " currently has at least one script already running") ENDIF CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Finished performing mini game launch script checks ") g_HasPerformedMiniGameRangeChecks = TRUE //set a flag that we've completed the checks ENDIF ELIF g_HasPerformedMiniGameRangeChecks g_HasPerformedMiniGameRangeChecks = FALSE //clear the flag that we've completed the checks ENDIF ENDPROC #IF NOT USE_SP_DLC PROC DO_PHOTOGRAPHY_MONKEY_LAUNCH_CHECKS() IF( g_SavedGlobals.sAmbient.iPhotographyMonkeyFlags[ 1 ] <> -1 ) IF NOT g_bInMultiplayer IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("photographyMonkey")) = 0 AND NOT g_flowUnsaved.bUpdatingGameflow REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("photographyMonkey") #IF IS_DEBUG_BUILD ,"photographyMonkey" #ENDIF , FRIEND_STACK_SIZE) ENDIF ENDIF ENDIF ENDPROC #ENDIF PROC DO_BLIMP_LAUNCH_CHECKS() #IF NOT USE_SP_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) IF IS_BIT_SET(g_savedGlobals.sShopData.iContentChecks_Game, NCU_BLIMP) IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_BLIMP_UNLOCK) OR GLOBAL_CHARACTER_SHEET_GET_PHONEBOOK_STATE(CHAR_BLIMP, 0) != LISTED OR GLOBAL_CHARACTER_SHEET_GET_PHONEBOOK_STATE(CHAR_BLIMP, 1) != LISTED OR GLOBAL_CHARACTER_SHEET_GET_PHONEBOOK_STATE(CHAR_BLIMP, 2) != LISTED IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("ambientblimp")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("ambientblimp") #IF IS_DEBUG_BUILD ,"ambientblimp" #ENDIF ) ENDIF ENDIF ENDIF ENDIF #ENDIF ENDPROC PROC DO_ENVIRO_LAUNCH_CHECK() #IF USE_NRM_DLC IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("enviro_controllerNRM")) = 0) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("enviro_controllerNRM") #IF IS_DEBUG_BUILD ,"enviro_controllerNRM" #ENDIF ) ENDIF IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("norman_controller")) = 0) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("norman_controller") #IF IS_DEBUG_BUILD ,"norman_controller" #ENDIF ) ENDIF IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("hostile_controller")) = 0) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("hostile_controller") #IF IS_DEBUG_BUILD ,"hostile_controller" #ENDIF ) ENDIF #ENDIF ENDPROC PROC DO_ANIMAL_CONTROLLER_LAUNCH_CHECKS() #IF NOT USE_SP_DLC #IF IS_DEBUG_BUILD IF NOT g_flowUnsaved.bUpdatingGameflow AND GET_GAME_TIMER() > g_iDebugPeyoteBlockControllerUntil #ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) IF CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_ANIMAL) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("animal_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("animal_controller") #IF IS_DEBUG_BUILD ,"animal_controller" #ENDIF, MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ENDIF ENDIF #IF IS_DEBUG_BUILD ENDIF #ENDIF #ENDIF ENDPROC #IF USE_CLF_DLC PROC DO_JETPACK_LAUNCH_CHECK IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("jetpack_controller")) = 0) AND (GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_JP_UNLOCKED)) AND ((NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()) OR g_sjpData.bJPEnabledOnMission) AND (NOT IS_PED_DEAD_OR_DYING(PLAYER_PED_ID())) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH(HASH("jetpack_controller") #IF IS_DEBUG_BUILD ,"jetpack_controller" #ENDIF) ENDIF ENDPROC #ENDIF PROC DO_PI_MENU_LAUNCH_CHECKS() //add terminate conditions in here #IF USE_CLF_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_CLF_TRAIN) IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("PI_MENUCLF")) = 0) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("PI_MENUCLF") #IF IS_DEBUG_BUILD ,"PI_MENUCLF" #ENDIF ) ENDIF ENDIF #ENDIF #IF USE_NRM_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_NRM_SUR_START) IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("PI_MENUNRM")) = 0) REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("PI_MENUNRM") #IF IS_DEBUG_BUILD ,"PI_MENUNRM" #ENDIF ) ENDIF ENDIF #ENDIF #IF NOT USE_SP_DLC IF GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) IF NOT HAS_ONE_TIME_HELP_DISPLAYED(FHM_PIMENU_ACTIVATE) SWITCH GET_FLOW_HELP_MESSAGE_STATUS("PIMENU_ACTIVATE") CASE FHS_EXPIRED ADD_HELP_TO_FLOW_QUEUE("PIMENU_ACTIVATE", FHP_LOW,60000) BREAK CASE FHS_DISPLAYED // Autosave and terminate script SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FHM_PIMENU_ACTIVATE) BREAK ENDSWITCH ENDIF IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("PI_MENU")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("PI_MENU") #IF IS_DEBUG_BUILD ,"PI_MENU" #ENDIF,MULTIPLAYER_MISSION_STACK_SIZE) ENDIF ENDIF #ENDIF ENDPROC PROC DO_COUNTRY_RACE_CONTROLLER_LAUNCH_CHECKS() #IF NOT USE_SP_DLC //CGtoNG only content. IF IS_LAST_GEN_PLAYER() IF NOT GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_COUNTRY_RACE)) IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_1) IF NOT g_savedGlobals.sCountryRaceData.bTextRegistered Execute_Code_ID(CID_ACTIVATE_MINIGAME_COUNTRY_RACE, 0) ENDIF //Fix for 2820744: It is possible we register the text message from Trevor to unlock the MG but //the player chooses to kill Trevor before it sends. At this point the MG would never unlock. //Detect this situation and auto unlock it. IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_TREVOR_KILLED) CPRINTLN(DEBUG_FLOW, "Detected player killed Trevor without Country Races being unlocked. Unlocking.") Execute_Code_ID(CID_COUNTRY_RACE_TEXT_RECEIVED, 0) ENDIF ENDIF ELSE IF NOT IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME) IF NOT IS_MISSION_AVAILABLE(SP_MISSION_CHINESE_2) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), g_GameBlips[STATIC_BLIP_MINIGAME_COUNTRY_RACE].vCoords[0]) < 90000 // 300^2 IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("country_race_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("country_race_controller") #IF IS_DEBUG_BUILD ,"country_race_controller" #ENDIF) ENDIF ELSE //If the player is away from the trigger and the controller isn't running, set blip active. IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("country_race_controller")) = 0 IF g_savedGlobals.sCountryRaceData.bDisrupted g_savedGlobals.sCountryRaceData.bDisrupted = FALSE ENDIF IF g_savedGlobals.sCountryRaceData.bRaceJustCompleted g_savedGlobals.sCountryRaceData.bRaceJustCompleted = FALSE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_COUNTRY_RACE)) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Disabling country races minigame as the player is no longer a Last-Gen player.") SET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_COUNTRY_RACE), FALSE) SET_STATIC_BLIP_ACTIVE_STATE(STATIC_BLIP_MINIGAME_COUNTRY_RACE, FALSE) ENDIF ENDIF #ENDIF ENDPROC #IF IS_DEBUG_BUILD PROC DO_FRIENDS_DEBUG_CONTROLLER_CHECKS() IF g_bDebug_KeepFriendsDebugControllerRunning IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("friends_debug_controller")) = 0 REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("friends_debug_controller"), #IF IS_DEBUG_BUILD "friends_debug_controller", #ENDIF CELLPHONE_STACK_SIZE) ENDIF ENDIF ENDPROC #ENDIF PROC INITIALISE_SCRIPT_LAUNCH_CHECKS( #IF IS_DEBUG_BUILD WIDGET_GROUP_ID main_widget #ENDIF ) CPRINTLN(DEBUG_SCRIPT_LAUNCH, "Script launch checks initialising.") #IF IS_DEBUG_BUILD SET_CURRENT_WIDGET_GROUP(main_widget) START_WIDGET_GROUP("Script Launch Controller") ADD_WIDGET_BOOL("Keep player_controller_b running", g_bDebug_KeepPlayerControllerBRunning) ADD_WIDGET_BOOL("Keep autosave_controller running", g_bDebug_KeepAutoSaveControllerRunning) ADD_WIDGET_BOOL("Keep respawn_controller running", g_bDebug_KeepRespawnControllerRunning) ADD_WIDGET_BOOL("Is respawn_controller running", g_bDebug_IsRespawnControllerRunning) ADD_WIDGET_BOOL("Keep drunk_controller running", g_bDebug_KeepDrunkControllerRunning) ADD_WIDGET_BOOL("Keep friends_controller running", g_bDebug_KeepFriendsControllerRunning) ADD_WIDGET_BOOL("Keep friends_debug_controller running", g_bDebug_KeepFriendsDebugControllerRunning) STOP_WIDGET_GROUP() CLEAR_CURRENT_WIDGET_GROUP(main_widget) #ENDIF // Cleanup previous autosave flags g_sAutosaveData.bRequest = FALSE g_sAutosaveData.iQueuedRequests = 0 ENDPROC PROC DO_SCRIPT_LAUNCH_CHECKS(ScriptLaunchVars &sVars) IF sVars.bFirstSpawnDone //Don't check during a debug launch. //Schedule a set of checks per frame. SWITCH sVars.iLaunchCheckStage CASE 0 DO_MISSION_TRIGGERER_CHECKS() DO_PLAYER_CONTROLLER_B_CHECKS() DO_PI_MENU_LAUNCH_CHECKS() DO_COUNTRY_RACE_CONTROLLER_LAUNCH_CHECKS() #IF NOT USE_SP_DLC DO_FRIENDS_CONTROLLER_CHECKS() DO_BLIMP_LAUNCH_CHECKS() #ENDIF BREAK CASE 1 DO_AUTOSAVE_CONTROLLER_CHECKS() DO_WARDROBE_SCRIPT_CHECKS(sVars) DO_MODEL_SUPPRESS_CHECKS() DO_MISSION_REPEAT_CHECKS() DO_ANIMAL_CONTROLLER_LAUNCH_CHECKS() BREAK CASE 2 DO_FLOW_HELP_CHECKS() DO_COMMS_CONTROLLER_CHECKS() DO_REPLAY_CONTROLLER_CHECKS() DO_SAVE_ANYWHERE_CHECKS() #IF USE_NRM_DLC DO_ENVIRO_LAUNCH_CHECK() #ENDIF #IF USE_CLF_DLC DO_JETPACK_LAUNCH_CHECK() #ENDIF #IF NOT USE_SP_DLC DO_BOOTY_CALL_HANDLER_CHECKS() #ENDIF BREAK CASE 3 #IF NOT USE_SP_DLC DO_AMBIENT_UFOS_LAUNCH_CHECKS() DO_RC_CONTROLLER_CHECKS() DO_RACE_CONTROLLER_CHECKS() DO_AMBIENT_SOLOMON_LAUNCH_CHECKS() DO_PHOTOGRAPHY_WILDLIFE_LAUNCH_CHECKS() DO_PHOTOGRAPHY_MONKEY_LAUNCH_CHECKS() #ENDIF DO_CABLECAR_LAUNCH_CHECKS() DO_MINIGAME_LAUNCH_CHECKS() BREAK ENDSWITCH sVars.iLaunchCheckStage++ IF sVars.iLaunchCheckStage > 3 sVars.iLaunchCheckStage = 0 ENDIF #IF IS_DEBUG_BUILD #IF NOT USE_SP_DLC DO_FRIENDS_DEBUG_CONTROLLER_CHECKS() #ENDIF #ENDIF //Check during a debug launch. DO_CODE_CONTROLLER_CHECKS() DO_RESPAWN_CONTROLLER_CHECKS() #IF FEATURE_SP_DLC_DIRECTOR_MODE DO_DIRECTOR_MODE_CHECKS(sVars) #ENDIF //Wait until the player has spawned the first time before //running checks. Might be returning from dead MP player. ELIF NOT IS_PED_INJURED(PLAYER_PED_ID()) sVars.bFirstSpawnDone = TRUE ENDIF ENDPROC