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

5276 lines
260 KiB
Python
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
//
// SCRIPT NAME : main_persistent.sc
// AUTHOR : Keith McLeman
// DESCRIPTION : This script will always remain active, even during MP.
// It will handle the transition between SP and MP
// from the SP side - tidying up any SP stuff on entering MP
// and then reactivating any SP stuff on return from MP,
// including the SP main.
//
//////////////////////////////////////////////////////////////////////////////////////////
USING "rage_builtins.sch"
USING "globals.sch"
USING "global_block_defines.sch"
USING "commands_brains.sch"
USING "commands_script.sch"
USING "script_player.sch"
USING "player_ped_public.sch"
USING "selector_public.sch"
USING "shop_public.sch"
USING "net_transition_sessions.sch"
USING "leader_board_common.sch"
USING "fmmc_corona_controller.sch"
USING "properties_public.sch"
USING "FM_Post_Mission_Cleanup.sch"
USING "Transition_Controller.sch"
USING "streamed_scripts.sch"
USING "weapons_public.sch"
USING "script_misc.sch"
USING "net_clouds.sch"
USING "beast_secret_fight.sch"
USING "net_process_events.sch"
#IF FEATURE_FREEMODE_ARCADE
USING "mphud_landing_page.sch"
#ENDIF
BOOL m_launchSPMain = FALSE
STRUCT TRANSITION_SESSION_VARS
BOOL bRequestScripts
BOOL bRequestSpinner
BOOL bRequestScriptsJip
BOOL bToggelRender
ENDSTRUCT
TRANSITION_SESSION_VARS sTranVars
#IF IS_DEBUG_BUILD
BOOL m_doForceCleanupSPtoMP = FALSE
#ENDIF
BOOL bShownMarstonTicker
CONST_INT BIT_SP_CLEANUP_COMPLETED 0
CONST_INT BIT_SP_CLEANUP_RAN_FORCE_CLEANUP 1
CONST_INT BIT_SP_CLEANUP_RAN_MISSION_CLEANUP 2
CONST_INT BIT_SP_CLEANUP_STOPPED_CUTSCENES 3
INT iSPCleanupStateBitset = 0
INT iFramesWaitingForCutscenes
INT iClockHours
BOOL bPlayerHasScopedWeapon
WEAPON_TYPE ePlayerCurWeapon
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID main_pers_widget
BOOL bForceMarstonTicker
BOOL bForceMPSpecialTicker
BOOL bForceMpCollectorsTicker
BOOL bPrintMartsonTickerWidgets
INT iStackSizeForScriptLaunch = 2
TEXT_WIDGET_ID twScriptName
BOOL bKillScriptsWithName
BOOL bLaunchScriptWithName
BOOL bRefreshBgNow, bRefreshTuneNow
BOOL bDebugScriptRequestedForRelaunch
INT iErrorListenerShutdownTime
BOOL bHaveLaunchedErrorListener = FALSE
#ENDIF
CONST_INT ciERROR_LISTENER_RELAUNCH_DELAY 1000
// -----------------------------------------------------------------------------------------------------------
#IF IS_DEBUG_BUILD
FUNC INT GET_STACK_SIZE_FROM_INT_WIDGET()
SWITCH iStackSizeForScriptLaunch
CASE 0 RETURN MICRO_STACK_SIZE BREAK//(128) // 20
CASE 1 RETURN MINI_STACK_SIZE BREAK//(512) // 20
CASE 2 RETURN DEFAULT_STACK_SIZE BREAK//(1024) // 68 ?
CASE 3 RETURN SPECIAL_ABILITY_STACK_SIZE BREAK//(1828) // 5
CASE 4 RETURN FRIEND_STACK_SIZE BREAK//(2020) // 10
CASE 5 RETURN SHOP_STACK_SIZE BREAK//(2024) // 6
CASE 6 RETURN CELLPHONE_STACK_SIZE BREAK//(2552) // 2
CASE 7 RETURN VEHICLE_SPAWN_STACK_SIZE BREAK//(2556) // 1
CASE 8 RETURN PAUSE_MENU_SCRIPT_STACK_SIZE BREAK//(3076) // 2
CASE 9 RETURN APP_INTERNET_STACK_SIZE BREAK//(3584) // 1
CASE 10 RETURN MULTIPLAYER_MISSION_STACK_SIZE BREAK//(3650) // 9
CASE 11 RETURN CONTACTS_APP_STACK_SIZE BREAK//(3800) // 1
CASE 12 RETURN DEBUG_SCRIPT_STACK_SIZE BREAK//(4080) // 1
CASE 13 RETURN INTERACTION_MENU_STACK_SIZE BREAK//(4150) // 1
CASE 14 RETURN SCRIPT_XML_STACK_SIZE BREAK//(8344) // 3
CASE 15 RETURN INGAMEHUD_STACK_SIZE BREAK//(4600) //1 //Brenda Needs this for the ingame hud.
CASE 16 RETURN PROPERTY_INT_STACK_SIZE BREAK//(10024) // 1 //4626
CASE 17 RETURN TRANSITION_STACK_SIZE BREAK//(8032) //1
CASE 18 RETURN FMMC_LAUNCHER_STACK_SIZE BREAK//(14000) // 1
CASE 19 RETURN MULTIPLAYER_FREEMODE_STACK_SIZE BREAK//(21000) // 1
CASE 20 RETURN MISSION_STACK_SIZE BREAK//(15000) // 1
CASE 21 RETURN DEBUG_MENU_STACK_SIZE BREAK//(32000) // 1
CASE 22 RETURN SHOP_CONTROLLER_STACK_SIZE BREAK//(2200) // 1
ENDSWITCH
RETURN DEFAULT_STACK_SIZE
ENDFUNC
FUNC STRING GET_BAIL_RESPONSE_STRING(JOIN_RESPONSE_CODE aResponse)
SWITCH aResponse
CASE RESPONSE_ACCEPT RETURN "RESPONSE_ACCEPT"
CASE RESPONSE_DENY_UNKNOWN RETURN "RESPONSE_DENY_UNKNOWN"
CASE RESPONSE_DENY_WRONG_SESSION RETURN "RESPONSE_DENY_WRONG_SESSION"
CASE RESPONSE_DENY_NOT_HOSTING RETURN "RESPONSE_DENY_NOT_HOSTING"
CASE RESPONSE_DENY_NOT_READY RETURN "RESPONSE_DENY_NOT_READY"
CASE RESPONSE_DENY_BLACKLISTED RETURN "RESPONSE_DENY_BLACKLISTED"
CASE RESPONSE_DENY_INVALID_REQUEST_DATA RETURN "RESPONSE_DENY_INVALID_REQUEST_DATA"
CASE RESPONSE_DENY_INCOMPATIBLE_ASSETS RETURN "RESPONSE_DENY_INCOMPATIBLE_ASSETS"
CASE RESPONSE_DENY_SESSION_FULL RETURN "RESPONSE_DENY_SESSION_FULL"
CASE RESPONSE_DENY_WRONG_VERSION RETURN "RESPONSE_DENY_WRONG_VERSION"
CASE RESPONSE_DENY_NOT_VISIBLE RETURN "RESPONSE_DENY_NOT_VISIBLE"
CASE RESPONSE_DENY_BLOCKING RETURN "RESPONSE_DENY_BLOCKING"
CASE RESPONSE_DENY_AIM_PREFERENCE RETURN "RESPONSE_DENY_AIM_PREFERENCE"
CASE RESPONSE_DENY_CHEATER RETURN "RESPONSE_DENY_CHEATER"
CASE RESPONSE_DENY_TIMEOUT RETURN "RESPONSE_DENY_TIMEOUT"
CASE RESPONSE_DENY_DATA_HASH RETURN "RESPONSE_DENY_DATA_HASH"
CASE RESPONSE_DENY_CREW_LIMIT RETURN "RESPONSE_DENY_CREW_LIMIT"
CASE RESPONSE_DENY_POOL_NORMAL RETURN "RESPONSE_DENY_POOL_NORMAL"
CASE RESPONSE_DENY_POOL_BAD_SPORT RETURN "RESPONSE_DENY_POOL_BAD_SPORT"
CASE RESPONSE_DENY_POOL_CHEATER RETURN "RESPONSE_DENY_POOL_CHEATER"
CASE RESPONSE_DENY_NOT_JOINABLE RETURN "RESPONSE_DENY_NOT_JOINABLE"
CASE RESPONSE_DENY_PRIVATE_ONLY RETURN "RESPONSE_DENY_PRIVATE_ONLY"
CASE RESPONSE_DENY_DIFFERENT_BUILD RETURN "RESPONSE_DENY_DIFFERENT_BUILD"
CASE RESPONSE_DENY_DIFFERENT_CONTENT_SETTING RETURN "RESPONSE_DENY_DIFFERENT_CONTENT_SETTING"
CASE RESPONSE_DENY_NOT_FRIEND RETURN "RESPONSE_DENY_NOT_FRIEND"
CASE RESPONSE_DENY_REPUTATION RETURN "RESPONSE_DENY_REPUTATION"
CASE RESPONSE_DENY_FAILED_TO_ESTABLISH RETURN "RESPONSE_DENY_FAILED_TO_ESTABLISH"
CASE RESPONSE_DENY_PREMIUM RETURN "RESPONSE_DENY_PREMIUM"
ENDSWITCH
RETURN ""
ENDFUNC
#ENDIF
/// PURPOSE:
/// Requests any persistent script, waits for them to stream in, then launches them
PROC Request_And_Launch_Persistent_Scripts_With_Wait()
CPRINTLN(DEBUG_INIT, "Starting mode independent persistant scripts.")
REQUEST_SCRIPT("social_controller")
REQUEST_SCRIPT("cellphone_controller")
REQUEST_SCRIPT("dialogue_handler")
REQUEST_SCRIPT("shop_controller")
REQUEST_SCRIPT("selector")
REQUEST_SCRIPT("InGameHud")
REQUEST_SCRIPT("context_controller")
REQUEST_SCRIPT("stats_controller")
REQUEST_SCRIPT("achievement_controller")
REQUEST_SCRIPT("building_controller")
//Steve T - It may be the case that this needs to be persistent as certain minor tasks, something like shooting pigeons for example, that contribute
//to 100 percent completion can be progressed within multiplayer as well as singleplayer.
//REQUEST_SCRIPT("CompletionPercentage_controller") - Moved to initial.sc on a trial basis... Steve T 02.05.13
// #IF IS_DEBUG_BUILD
// REQUEST_SCRIPT("coordinate_recorder")
// #ENDIF
WHILE NOT HAS_SCRIPT_LOADED("social_controller")
OR NOT HAS_SCRIPT_LOADED("cellphone_controller") // if normal game mode check cellphone controller
OR NOT HAS_SCRIPT_LOADED("dialogue_handler") // if normal game mode check dialogue_handler
OR NOT HAS_SCRIPT_LOADED("shop_controller") // if normal game mode check shop controller
OR NOT HAS_SCRIPT_LOADED("selector") // if normal game mode check selector
OR NOT HAS_SCRIPT_LOADED("InGameHud")
OR NOT HAS_SCRIPT_LOADED("context_controller")
OR NOT HAS_SCRIPT_LOADED("stats_controller")
OR NOT HAS_SCRIPT_LOADED("achievement_controller")
OR NOT HAS_SCRIPT_LOADED("building_controller") // if normal game mode check building controller
// #IF IS_DEBUG_BUILD
// OR NOT HAS_SCRIPT_LOADED("coordinate_recorder")
// #ENDIF
#IF IS_DEBUG_BUILD
IF NOT HAS_SCRIPT_LOADED("cellphone_controller")
CPRINTLN(DEBUG_INIT, "...waiting for - cellphone_controller")
ENDIF
IF NOT HAS_SCRIPT_LOADED("dialogue_handler")
CPRINTLN(DEBUG_INIT, "...waiting for - dialogue_handler")
ENDIF
IF NOT HAS_SCRIPT_LOADED("selector")
CPRINTLN(DEBUG_INIT, "...waiting for - selector")
ENDIF
IF NOT (HAS_SCRIPT_LOADED("social_controller"))
CPRINTLN(DEBUG_INIT, "...waiting for - social_controller")
ENDIF
IF NOT (HAS_SCRIPT_LOADED("InGameHud"))
CPRINTLN(DEBUG_INIT, "...waiting for - InGameHud")
ENDIF
IF NOT HAS_SCRIPT_LOADED("shop_controller")
CPRINTLN(DEBUG_INIT, "...waiting for - shop_controller")
ENDIF
IF NOT (HAS_SCRIPT_LOADED("context_controller"))
CPRINTLN(DEBUG_INIT, "...waiting for - context_controller")
ENDIF
IF NOT (HAS_SCRIPT_LOADED("stats_controller"))
CPRINTLN(DEBUG_INIT, "...waiting for - stats_controller")
ENDIF
IF NOT (HAS_SCRIPT_LOADED("achievement_controller"))
CPRINTLN(DEBUG_INIT, "...waiting for - achievement_controller")
ENDIF
IF NOT HAS_SCRIPT_LOADED("building_controller")
CPRINTLN(DEBUG_INIT, "...waiting for - building_controller")
ENDIF
#ENDIF
WAIT(0)
REQUEST_SCRIPT("social_controller")
REQUEST_SCRIPT("cellphone_controller")
REQUEST_SCRIPT("dialogue_handler")
REQUEST_SCRIPT("shop_controller")
REQUEST_SCRIPT("selector")
REQUEST_SCRIPT("InGameHud")
REQUEST_SCRIPT("context_controller")
REQUEST_SCRIPT("stats_controller")
REQUEST_SCRIPT("achievement_controller")
REQUEST_SCRIPT("building_controller")
ENDWHILE
START_NEW_SCRIPT("cellphone_controller", DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("dialogue_handler", DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("selector", DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("InGameHud", MULTIPLAYER_MISSION_STACK_SIZE ) //INGAMEHUD_STACK_SIZE )//DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("context_controller", DEFAULT_STACK_SIZE)
// Kenneth R.
// Setting up level check so that the following scripts only get launched in the gta5 level.
// This prevents asserts when trying to use assets that have not been set up for the test levels.
#IF IS_DEBUG_BUILD
IF g_eCachedLevel = LEVEL_GTA5
#ENDIF
START_NEW_SCRIPT("social_controller", SPECIAL_ABILITY_STACK_SIZE)
START_NEW_SCRIPT("stats_controller", DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("achievement_controller", DEFAULT_STACK_SIZE)
START_NEW_SCRIPT("shop_controller", SHOP_CONTROLLER_STACK_SIZE)
START_NEW_SCRIPT("building_controller", DEFAULT_STACK_SIZE)
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
CPRINTLN(DEBUG_INIT, "All mode independent persistant scripts started.")
ENDPROC
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Requests the 'main' script, and launches it if it has streamed in
/// RETURN VALUE:
/// BOOL TRUE if main loaded and launched, otherwise FALSE
FUNC BOOL Request_And_Launch_Main_Script()
INT theScriptNameHash
theScriptNameHash = HASH("main")
// Always request the script so that there is a record of it in code being required by scripts
REQUEST_SCRIPT_WITH_NAME_HASH(theScriptNameHash)
IF NOT (HAS_SCRIPT_WITH_NAME_HASH_LOADED(theScriptNameHash))
RETURN FALSE
ENDIF
// Main script is in memory, so ensure it is not about to launch a second instance
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(theScriptNameHash) > 0)
IF g_TransitionData.bCouldNotJoinNetworkGame = FALSE
NET_NL()PRINTSTRING(" About to launch main thread but its already launched. Used to be an assert but is now VALID if NETWORK_BAIL Happened ")NET_NL()
ENDIF
RETURN TRUE
ENDIF
// Launch a new instance of main.sc
//START_NEW_SCRIPT(theScriptName, DEFAULT_STACK_SIZE) //Steve T. Needed to increase the stack size to handle cross session processing of MP Joblist into SP.
START_NEW_SCRIPT_WITH_NAME_HASH(theScriptNameHash, MULTIPLAYER_MISSION_STACK_SIZE)
SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(theScriptNameHash)
#IF FEATURE_GEN9_STANDALONE
// Launching SP script, post start SP UDS activity
NETWORK_POST_UDS_ACTIVITY_START("LaunchStoryMode")
#ENDIF // FEATURE_GEN9_STANDALONE
RETURN TRUE
ENDFUNC
PROC PROCESS_NET_SIGN_IN_STATE_CHANGED_EVENT(STRUCT_NETWORK_SIGN_IN_STATE_CHANGED Event)
NET_NL() NET_PRINT("PROCESS_NET_SIGN_IN_STATE_CHANGED_EVENT - called...") NET_NL()
g_SignInStructDetails = Event
IF ARE_PROFILE_SETTINGS_VALID()
IF GET_PROFILE_SETTING(PROLOGUE_COMPLETE) = 0
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_PROLOGUE)
CPRINTLN(DEBUG_INIT_SP, "Loading a save that has Prologue complete without MP unlocked. Unlocking MP as we init.")
SET_PROFILE_SETTING_PROLOGUE_COMPLETE()
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC STRING GET_NET_APP_LAUNCHED_EVENT_STRING(STRUCT_NETWORK_APP_LAUNCHED Event)
SWITCH Event.nFlags
CASE LAUNCH_STRAIGHT_INTO_FREEMODE RETURN "LAUNCH_STRAIGHT_INTO_FREEMODE"
CASE LAUNCH_FROM_LIVE_AREA RETURN "LAUNCH_FROM_LIVE_AREA"
CASE LAUNCH_DIRECT_TO_CONTENT RETURN "LAUNCH_DIRECT_TO_CONTENT"
ENDSWITCH
RETURN ""
ENDFUNC
PROC PROCESS_NET_APP_LAUNCHED_EVENT(STRUCT_NETWORK_APP_LAUNCHED Event)
NET_NL() NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - called... with flags = ")NET_PRINT_INT(ENUM_TO_INT(Event.nFlags))
NET_PRINT(" called ")NET_PRINT(GET_NET_APP_LAUNCHED_EVENT_STRING(Event))
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("PROCESS_NET_APP_LAUNCHED_EVENT - called... with flags = ", ENUM_TO_INT(Event.nFlags), " called ", GET_NET_APP_LAUNCHED_EVENT_STRING(Event), " ")
#ENDIF
STRUCT_INVITE_EVENT InviteEvent
IF LOBBY_AUTO_MULTIPLAYER_FREEMODE() = FALSE
AND GET_IS_LAUNCH_FROM_LIVE_AREA() = FALSE
AND GET_IS_LIVE_AREA_LAUNCH_WITH_CONTENT() = FALSE
IF SHOULD_BLOCK_INVITE(InviteEvent, TRUE, TRUE)
NET_NL()NET_PRINT("BC: PROCESS_NET_APP_LAUNCHED_EVENT - SHOULD_BLOCK_INVITE = TRUE, exit ")
EXIT
ENDIF
ENDIF
PRINTLN("[TS] *****************************************************************")
PRINTLN("[TS] * PROCESS_NET_APP_LAUNCHED_EVENT - ", GET_CLOUD_TIME_AS_INT(), ", F - ", GET_FRAME_COUNT(), " *")
#IF USE_FINAL_PRINTS PRINTLN_FINAL("[TS] * PROCESS_NET_APP_LAUNCHED_EVENT - ", GET_CLOUD_TIME_AS_INT(), ", F - ", GET_FRAME_COUNT(), " *")#ENDIF
PRINTLN("[TS] *****************************************************************")
IF SHOULD_DO_TRANSITION_TO_GAME_RUN()
PRINTLN("[TS] * PROCESS_NET_APP_LAUNCHED_EVENT - Bail as we're already transitioning")
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING()
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING_MP()
CLEAR_PS4_LIVE_STREAM_LAUNCH_ACTIVE()
EXIT
ENDIF
g_AppLaunchStructDetails = Event
// IF ENUM_TO_INT(Event.nFlags) = 3
// NET_PRINT(" Since the flag is 3, force it to be LAUNCH_FROM_LIVE_AREA as this is what needs to happen ")
// g_AppLaunchStructDetails.nFlags = LAUNCH_FROM_LIVE_AREA
// ENDIF
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_STRAIGHT_INTO_FREEMODE = ")NET_PRINT_BOOL(IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_STRAIGHT_INTO_FREEMODE)))
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_FROM_LIVE_AREA = ")NET_PRINT_BOOL(IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_FROM_LIVE_AREA)))
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_DIRECT_TO_CONTENT = ")NET_PRINT_BOOL(IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_DIRECT_TO_CONTENT)))
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - GET_IS_LOADING_SCREEN_ACTIVE = ")NET_PRINT_BOOL(GET_IS_LOADING_SCREEN_ACTIVE())
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_STRAIGHT_INTO_FREEMODE = ", IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_STRAIGHT_INTO_FREEMODE)))
PRINTLN_FINAL("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_FROM_LIVE_AREA = ", IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_FROM_LIVE_AREA)))
PRINTLN_FINAL("PROCESS_NET_APP_LAUNCHED_EVENT - IS_BIT_SET LAUNCH_DIRECT_TO_CONTENT = ", IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_DIRECT_TO_CONTENT)))
PRINTLN_FINAL("PROCESS_NET_APP_LAUNCHED_EVENT - GET_IS_LOADING_SCREEN_ACTIVE = ", GET_IS_LOADING_SCREEN_ACTIVE())
#ENDIF
IF IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_DIRECT_TO_CONTENT))
AND NOT GET_IS_LOADING_SCREEN_ACTIVE()
IF NETWORK_IS_GAME_IN_PROGRESS()
SET_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING_MP()
ENDIF
IF IS_ONLINE_POLICIES_MENU_ACTIVE() = FALSE
IF GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU
#IF IS_DEBUG_BUILD
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT: GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU ")
#ENDIF
CLOSE_SOCIAL_CLUB_MENU()
ENDIF
ENDIF
SET_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING()
IF IS_TRANSITION_ACTIVE()
NET_NL() NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - called while the transition is processing. Turn it all off and wait, then do it again. ")
SET_LAUNCHED_LIVETILE_WHILE_TRANSITIONING(TRUE)
RESET_EVENT_APP_LAUNCH_FLAG_RECIEVED()
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING_MP()
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING()
ELSE
IF IS_PLAYER_SPECTATING(PLAYER_ID())
NET_NL() NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - called while not transition is processing, but while spectating. Now going to some content ")
SET_SKYFREEZE_FROZEN(TRUE)
ENDIF
ENDIF
ENDIF
IF IS_BIT_SET(ENUM_TO_INT(g_AppLaunchStructDetails.nFlags), ENUM_TO_INT(LAUNCH_FROM_LIVE_AREA))
AND NOT GET_IS_LOADING_SCREEN_ACTIVE()
IF IS_ONLINE_POLICIES_MENU_ACTIVE() = FALSE
IF GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU
#IF IS_DEBUG_BUILD
NET_NL()NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT: SET_SKYSWOOP_UP: GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU ")
#ENDIF
CLOSE_SOCIAL_CLUB_MENU()
ENDIF
ENDIF
IF IS_TRANSITION_ACTIVE()
NET_NL() NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - called while the transition is processing. Turn it all off and wait, then do it again. ")
SET_LAUNCHED_LIVETILE_WHILE_TRANSITIONING(TRUE)
RESET_EVENT_APP_LAUNCH_FLAG_RECIEVED()
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING_MP()
CLEAR_TRANSITION_SESSION_LAUNCHED_LIVE_TILE_WHEN_GAME_RUNNING()
ELSE
IF IS_PLAYER_SPECTATING(PLAYER_ID())
NET_NL() NET_PRINT("PROCESS_NET_APP_LAUNCHED_EVENT - called while not transition is processing, but while spectating. Now going to the live area ")
SET_SKYFREEZE_FROZEN(TRUE)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC SET_ARM_WRESTLING_RADIO_EMITTER_STATE()
PRINTLN("SET_ARM_WRESTLING_EMITTER_STATE() turning off for SP")
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_01",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_02",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_03",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_04",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_05",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_06",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_07",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_08",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_09",FALSE)
SET_STATIC_EMITTER_ENABLED("MP_ARM_WRESTLING_RADIO_10",FALSE)
SET_STATIC_EMITTER_ENABLED("DLC_h4_SE_MPJO",FALSE)
ENDPROC
PROC RESERT_TRANSITION_SESSION_MAIN_PERSISTANT_VARS()
PRINTLN("[TS] RESERT_TRANSITION_SESSION_MAIN_PERSISTANT_VARS called")
TRANSITION_SESSION_VARS sTranVarsTemp
sTranVars = sTranVarsTemp
ENDPROC
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Resets some of the game settings and makes a call to the launch main script command
FUNC BOOL Setup_Main_Script_And_Reset_Settings()
#IF FEATURE_GEN9_STANDALONE
IF g_Private_Gamemode_Joining = GAMEMODE_FM
CPRINTLN(DEBUG_INIT_SP, "Setup_Main_Script_And_Reset_Settings - Cancelling as we are joining freemode.")
m_launchSPMain = FALSE
RESET_SINGLEPLAYER_RUNNING_NOW()
RETURN TRUE
ENDIF
#ENDIF
// Kenneth R.
// Make sure any network game has cleaned up before starting the main singleplayer script.
// This was initially added to resolve bug #33155.
#IF IS_DEBUG_BUILD
IF g_eCachedLevel != LEVEL_NET_TEST
#ENDIF
IF NETWORK_IS_SESSION_ACTIVE()
NET_NL()NET_PRINT("MAIN_PERSISTANT: IN WHILE NETWORK_IS_SESSION_ACTIVE()")
IF NETWORK_CAN_SESSION_END()
NET_PRINT_TIME() NET_PRINT("MAIN_PERSISTANT: - called NETWORK_SESSION_END()") NET_NL()
NETWORK_SESSION_END()
ENDIF
RETURN FALSE
ENDIF
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
// Wait for any multi-part switches to end
IF (IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT IS_SWITCH_TO_MULTI_FIRSTPART_FINISHED())
PRINTLN("Setup_Main_Script_And_Reset_Settings - waiting for multipart switch to finish before we start SP.")
RETURN FALSE
ENDIF
IF (Request_And_Launch_Main_Script())
PRINTLN("Setup_Main_Script_And_Reset_Settings: (Request_And_Launch_Main_Script())")
m_launchSPMain = FALSE
RESET_SINGLEPLAYER_RUNNING_NOW()
#IF FEATURE_GEN9_STANDALONE
// url:bugstar:7208104 - Gen9 - Ignorable Assert - [Script_DEBUG_NET_CHARACTER] Error: Assert: SCRIPT: Script Name = MainTransition : Program Counter = 173690 : GET_TATTOO_CURRENT_BITSET_ENUM - Current Gamemode=GAMEMODE_EMPTY, Joining Gamemode=GAMEMODE_SP, - ENUM_INDEX=2
// We need to find a safe place to clear the joining gamemode when we enter SP from the Landing Page. This seems like the safest place to do it.
IF GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY
AND GET_JOINING_GAMEMODE() = GAMEMODE_SP
PRINTLN("Setup_Main_Script_And_Reset_Settings - setting the joining gamemode to EMPTY now that we are in SP.")
SET_JOINING_GAMEMODE(GAMEMODE_EMPTY)
ENDIF
#ENDIF
CLEAR_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_COMPLETED)
CLEANUP_LEADERBOARD_CAM()
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
SHOW_GAME_TOOL_TIPS(FALSE)
THEFEED_FLUSH_QUEUE()
g_b_ReapplyStickySaveFailedFeed = FALSE
// Refresh_MP_Script_Tunables(TUNE_CONTEXT_BASE_GLOBALS) // William Kennedy@RockstarNorth.com - refreshes base global tuneables used for both sp and mp - shops for Kenneth.
// Main has been launched so reset some settings
SET_MISSION_NAME(FALSE)
SET_MAX_WANTED_LEVEL(5)
SET_WANTED_LEVEL_MULTIPLIER(1.0)
SET_AUDIO_FLAG("PoliceScannerDisabled", FALSE)
SET_CREATE_RANDOM_COPS(TRUE)
SET_DITCH_POLICE_MODELS(FALSE)
SET_HEALTH_HUD_DISPLAY_VALUES(-1, -1)
SET_ABILITY_BAR_VALUE(-1, -1)
UNLOCK_MINIMAP_POSITION()
CLEAR_PLAYER_PARACHUTE_MODEL_OVERRIDE(PLAYER_ID())
CLEAR_PLAYER_PARACHUTE_VARIATION_OVERRIDE(PLAYER_ID())
RESET_CACHED_PARACHUTE_DRAWABLE_FOR_MP_VARIABLES()
g_iOrbitalCannonRefundBS = 0
IF g_bIsStartUp //Don't want to do this on the first time round, but every time hereafter
g_bIsStartUp = FALSE
ELSE
SET_INSTANCE_PRIORITY_MODE(INSTANCE_MODE_SINGLEPLAYER)
ENDIF
SET_ARM_WRESTLING_RADIO_EMITTER_STATE()
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE)
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_VEHICLE_REQUEST, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE)
ENABLE_DISPATCH_SERVICE(DT_SWAT_HELICOPTER, TRUE)
IF DOES_SCENARIO_GROUP_EXIST("MP_POLICE")
IF IS_SCENARIO_GROUP_ENABLED("MP_POLICE")
SET_SCENARIO_GROUP_ENABLED("MP_POLICE", TRUE)
ENDIF
ENDIF
RESET_AI_WEAPON_DAMAGE_MODIFIER()
RESET_AI_MELEE_WEAPON_DAMAGE_MODIFIER()
SET_ALL_VEHICLE_GENERATORS_ACTIVE()
//Turn on dogs barking around Lester's house.
SET_AMBIENT_ZONE_LIST_STATE_PERSISTENT("AZL_LESTERS_DOGS", TRUE, TRUE)
// Fix for bug #502654 - Unsuppressing MP player vehicle models in SP.
SET_VEHICLE_MODEL_IS_SUPPRESSED(CAVALCADE, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(DAEMON, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(POLICE3, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(SENTINEL2, FALSE)
// Get all the shop scripts to re-initialise
REACTIVATE_ALL_OBJECT_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
REACTIVATE_ALL_WORLD_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
RESET_SHOP_CONTROLLER_SCRIPT()
Initialise_Train_Lines_On_SP_Startup()
//#1600378 - Enable assisted line for Trevor's trailer in SP only.
ASSISTED_MOVEMENT_REQUEST_ROUTE("trev_steps")
// Fix for bug #483366 - Set Vagos Spray Booth door to Open position
//// IF (GET_INDEX_OF_CURRENT_LEVEL() != LEVEL_NET_TEST) //BC: Fix as this asserts in the test bed
//// ADD_DOOR_TO_SYSTEM(MP_DOOR_VAGOS_PNS,V_ILEV_SPRAYDOOR,<<974.91,-1851.2,31.57>>,FALSE)
//// DOOR_SYSTEM_SET_HOLD_OPEN(MP_DOOR_VAGOS_PNS,TRUE)
//// ENDIF
ENABLE_SELECTOR()
// Make sure the save garages are re-enabled when we return from MP
INT iSavehouse
if !g_bLoadedClifford and !g_bLoadedNorman
REPEAT ENUM_TO_INT(NUMBER_OF_SAVEHOUSE_LOCATIONS) iSavehouse
Update_Savehouse_Respawn_Garage(INT_TO_ENUM(SAVEHOUSE_NAME_ENUM, iSavehouse), TRUE)
ENDREPEAT
endif
// url:bugstar:4064514 - Silo - Stealth Tank - When destroying vehicles inside this interior the vehicle cleans up on it's own right after the explosion.
DISABLE_TIDYING_UP_IN_GARAGE(HASH("Lockup_PSY_01"), TRUE)
DISABLE_TIDYING_UP_IN_GARAGE(HASH("Lockup_PSY_02"), TRUE)
DISABLE_TIDYING_UP_IN_GARAGE(HASH("Lockup_PSY_03"), TRUE)
#IF IS_DEBUG_BUILD
IF g_eCachedLevel != LEVEL_NET_TEST
#ENDIF
SET_MINIMAP_IN_PROLOGUE_AND_HANDLE_STATIC_BLIPS(FALSE)
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
//SP Intialisation saved bit state restoration.
IF DOES_SCENARIO_GROUP_EXIST("LOST_BIKERS")
SET_SCENARIO_GROUP_ENABLED("LOST_BIKERS", IS_BIT_SET(g_savedGlobals.sFlowCustom.spInitBitset, SP_INIT_TURN_ON_LOST_BIKER_GROUP))
ENDIF
IF IS_BIT_SET(g_savedGlobals.sFlowCustom.spInitBitset, SP_INIT_RESTORE_SLEEP_MODE)
IF NOT IS_CURRENT_PLAYER_IN_SLEEP_MODE()
SET_CELLPHONE_PROFILE_TO_SLEEP()
ENDIF
ENDIF
IF IS_BIT_SET(g_savedGlobals.sFlowCustom.spInitBitset, SP_INIT_UNLOCK_SHINE_A_LIGHT)
UNLOCK_RADIO_STATION_TRACK_LIST("RADIO_16_SILVERLAKE", "MIRRORPARK_LOCKED")
ENDIF
IF g_Private_ReturningFromActivitySession
#IF IS_DEBUG_BUILD
IF g_FMSP_Race_Data.bActive
PRINTLN("<", GET_THIS_SCRIPT_NAME(), "> ResetLastKnownPedInfo(",
"dont reset, g_Private_ReturningFromActivitySession = TRUE ",
").")
ENDIF
#ENDIF
ELSE
// Reset last known ped info - for a clean slate when switching/creating ambient player peds
ResetLastKnownPedInfo(g_savedGlobals.sPlayerData.sInfo, SP_MISSION_NONE)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_MAX_ARMOUR(PLAYER_ID(), 100)
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_DisableLockonToRandomPeds, FALSE)
ENDIF
//Sets length of time it take before request for voice session times out.
//Used for player to player calls
NETWORK_SESSION_VOICE_SET_TIMEOUT(MP_VOICE_SESSION_TIMEOUT)
PRINTLN("CDM MP: Setting NETWORK_SESSION_VOICE_SET_TIMEOUT to ", MP_VOICE_SESSION_TIMEOUT)
//url:bugstar:3904336
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL GET_SHOULD_DISPLAY_MARSTON_TICKER()
#IF IS_DEBUG_BUILD
IF bForceMarstonTicker
RETURN TRUE
ENDIF
#ENDIF
IF NOT bShownMarstonTicker
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - bShownMarstonTicker = TRUE") ENDIF #ENDIF
IF NETWORK_IS_GAME_IN_PROGRESS()
OR (GET_MISSION_COMPLETE_STATE(SP_MISSION_ARMENIAN_1) AND NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE())
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - In MP game or off-mission in SP game = TRUE") ENDIF #ENDIF
IF NOT IS_PAUSE_MENU_ACTIVE_EX()
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - IS_PAUSE_MENU_ACTIVE_EX() = FALSE") ENDIF #ENDIF
IF IS_GTA_ONLINE_AVAILABLE()
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - IS_GTA_ONLINE_AVAILABLE() = TRUE") ENDIF #ENDIF
IF ARE_PROFILE_SETTINGS_VALID()
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - ARE_PROFILE_SETTINGS_VALID() = TRUE") ENDIF #ENDIF
IF GET_PROFILE_SETTING(TICKER_JOHN_MARSTON_IS_AVAILABLE) = 0
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - GET_PROFILE_SETTING(TICKER_JOHN_MARSTON_IS_AVAILABLE) = 0") ENDIF #ENDIF
IF IS_GAME_LINKED_TO_SOCIAL_CLUB(FALSE, TRUE)
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - IS_GAME_LINKED_TO_SOCIAL_CLUB(FALSE, TRUE) = TRUE") ENDIF #ENDIF
RETURN TRUE
ENDIF
ELSE
bShownMarstonTicker = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL ARE_SP_COMMS_SAFE()
IF GET_PLAYER_MODEL() = PLAYER_ZERO
OR GET_PLAYER_MODEL() = PLAYER_ONE
OR GET_PLAYER_MODEL() = PLAYER_TWO
RETURN PRIVATE_Is_Safe_To_Start_Communication(BIT_MICHAEL|BIT_TREVOR|BIT_FRANKLIN, CHAR_BLANK_ENTRY, CPR_HIGH)
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL IS_IT_SAFE_TO_DISPLAY_CHEATER_FEED_MESSAGE()
NET_NL()NET_PRINT("DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE - Checking if it's safe to display a feed message...")
IF IS_PED_INJURED(PLAYER_PED_ID())
OR IS_PLAYER_SWITCH_IN_PROGRESS()
OR IS_CUTSCENE_PLAYING()
OR NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
OR IS_SCREEN_FADING_OUT() OR IS_SCREEN_FADED_OUT() // #1382357
OR IS_INTERIOR_SCENE()
OR NOT ARE_SP_COMMS_SAFE()
#IF IS_DEBUG_BUILD
NET_NL()NET_PRINT("[ROSCRED] IS_PED_INJURED(PLAYER_PED_ID()) = ")NET_PRINT_BOOL(IS_PED_INJURED(PLAYER_PED_ID()))
NET_NL()NET_PRINT("[ROSCRED] IS_PLAYER_SWITCH_IN_PROGRESS = ")NET_PRINT_BOOL(IS_PLAYER_SWITCH_IN_PROGRESS())
NET_NL()NET_PRINT("[ROSCRED] IS_CUTSCENE_PLAYING = ")NET_PRINT_BOOL(IS_CUTSCENE_PLAYING())
NET_NL()NET_PRINT("[ROSCRED] IS_PLAYER_CONTROL_ON = ")NET_PRINT_BOOL(IS_PLAYER_CONTROL_ON(PLAYER_ID()))
NET_NL()NET_PRINT("[ROSCRED] IS_SCREEN_FADING_OUT = ")NET_PRINT_BOOL(IS_SCREEN_FADING_OUT())
NET_NL()NET_PRINT("[ROSCRED] IS_SCREEN_FADED_OUT = ")NET_PRINT_BOOL(IS_SCREEN_FADED_OUT())
NET_NL()NET_PRINT("[ROSCRED] IS_INTERIOR_SCENE = ")NET_PRINT_BOOL(IS_INTERIOR_SCENE())
NET_NL()NET_PRINT("[ROSCRED] ARE_SP_COMMS_SAFE = ")NET_PRINT_BOOL(ARE_SP_COMMS_SAFE())
#ENDIF
RETURN FALSE
ENDIF
NET_NL()NET_PRINT("DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE - Safe to display.")
RETURN TRUE
ENDFUNC
PROC DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE()
IF g_b_DisplayCheaterPoolTimeFeedMessage = FALSE
IF NETWORK_IS_SIGNED_ONLINE()
#IF IS_DEBUG_BUILD
IF g_b_displayROSCredentialsDroppedPrint
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_PED_INJURED(PLAYER_PED_ID()) = ")NET_PRINT_BOOL(IS_PED_INJURED(PLAYER_PED_ID()))
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_PLAYER_SWITCH_IN_PROGRESS = ")NET_PRINT_BOOL(IS_PLAYER_SWITCH_IN_PROGRESS())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_CUTSCENE_PLAYING = ")NET_PRINT_BOOL(IS_CUTSCENE_PLAYING())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_PLAYER_CONTROL_ON = ")NET_PRINT_BOOL(IS_PLAYER_CONTROL_ON(PLAYER_ID()))
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_SCREEN_FADING_OUT = ")NET_PRINT_BOOL(IS_SCREEN_FADING_OUT())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_SCREEN_FADED_OUT = ")NET_PRINT_BOOL(IS_SCREEN_FADED_OUT())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: IS_INTERIOR_SCENE = ")NET_PRINT_BOOL(IS_INTERIOR_SCENE())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: ARE_SP_COMMS_SAFE() = ")NET_PRINT_BOOL(ARE_SP_COMMS_SAFE())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: NETWORK_HAS_VALID_ROS_CREDENTIALS() = ")NET_PRINT_BOOL(NETWORK_HAS_VALID_ROS_CREDENTIALS())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: NETWORK_HAVE_ROS_BANNED_PRIV() = ")NET_PRINT_BOOL(NETWORK_HAVE_ROS_BANNED_PRIV())
NET_NL()NET_PRINT("[ROSCRED] DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE: NETWORK_HAVE_ROS_MULTIPLAYER_PRIV() = ")NET_PRINT_BOOL(NETWORK_HAVE_ROS_MULTIPLAYER_PRIV())
ENDIF
#ENDIF
IF (NETWORK_HAS_VALID_ROS_CREDENTIALS() = FALSE
OR NETWORK_HAVE_ROS_BANNED_PRIV() = TRUE
OR NETWORK_HAVE_ROS_MULTIPLAYER_PRIV() = FALSE
OR NETWORK_PLAYER_IS_CHEATER())
#IF IS_DEBUG_BUILD
IF g_b_displayROSCredentialsDroppedPrint
NET_NL()NET_PRINT("[ROSCRED] Counting down ")
NET_NL()NET_PRINT("[ROSCRED] MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP = ")NET_PRINT_INT(MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP)
NET_NL()NET_PRINT("[ROSCRED] GET_GAME_TIMER() = ")NET_PRINT_INT(GET_GAME_TIMER())
NET_NL()NET_PRINT("[ROSCRED] GET_GAME_TIMER()-iCheaterTimeLeftTimerSP = ")NET_PRINT_INT(GET_GAME_TIMER()-MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP )
ENDIF
#ENDIF
IF (GET_GAME_TIMER() - MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP) > 5000
NET_NL()NET_PRINT("[ROSCRED] NETWORK_HAVE_ROS_BANNED_PRIV = ")NET_PRINT_BOOL(NETWORK_HAVE_ROS_BANNED_PRIV())
NET_NL()NET_PRINT("[ROSCRED] NETWORK_HAVE_ROS_MULTIPLAYER_PRIV = ")NET_PRINT_BOOL(NETWORK_HAVE_ROS_MULTIPLAYER_PRIV())
NET_NL()NET_PRINT("[ROSCRED] NETWORK_PLAYER_IS_CHEATER = ")NET_PRINT_BOOL(NETWORK_PLAYER_IS_CHEATER())
NET_NL()NET_PRINT("[ROSCRED] NETWORK_HAS_VALID_ROS_CREDENTIALS = ")NET_PRINT_BOOL(NETWORK_HAS_VALID_ROS_CREDENTIALS())
BOOL bShowCheaterMessage = FALSE
NETWORK_ROS_PRIVILEGEID PrivID = RLROS_PRIVILEGEID_BANNED
IF NETWORK_PLAYER_IS_CHEATER()
PrivID = RLROS_PRIVILEGEID_CHEATER_POOL
bShowCheaterMessage = TRUE
NET_NL()NET_PRINT("[ROSCRED] GET_GAME_TIMER() Check RLROS_PRIVILEGEID_CHEATER_POOL ")
ELSE
NET_NL()NET_PRINT("[ROSCRED] GET_GAME_TIMER() Check RLROS_PRIVILEGEID_BANNED ")
ENDIF
INT isGranted
UGC_DATE aDate
IF NETWORK_HAS_VALID_ROS_CREDENTIALS() = TRUE //Need to be signed in. Hold until you are.
IF NETWORK_HAS_ROS_PRIVILEGE_END_DATE(PrivID, isGranted, aDate)
NET_NL()NET_PRINT("DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE - called isGranted = ")NET_PRINT_INT(isGranted)
NET_NL()NET_PRINT("DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE - called Date = ")NET_PRINT_UGC_DATE(aDate)NET_NL()
IF isGranted = 1
IF IS_IT_SAFE_TO_DISPLAY_CHEATER_FEED_MESSAGE()
STRING FeedMessage = "HUD_CHTFEED"
IF bShowCheaterMessage = FALSE
FeedMessage = "HUD_BANFEED"
ENDIF
IF IS_LANGUAGE_NON_ROMANIC()
PRINT_TICKER_WITH_THREE_INTS(FeedMessage, aDate.nYear, aDate.nMonth, aDate.nDay)
ELIF GET_CURRENT_LANGUAGE() = LANGUAGE_ENGLISH
PRINT_TICKER_WITH_THREE_INTS(FeedMessage, aDate.nMonth, aDate.nDay, aDate.nYear)
ELSE
PRINT_TICKER_WITH_THREE_INTS(FeedMessage, aDate.nDay, aDate.nMonth, aDate.nYear)
ENDIF
g_b_DisplayCheaterPoolTimeFeedMessage = TRUE
ELSE
NET_NL()NET_PRINT("[ROSCRED] Resetting timer as it isn't safe to display a feed message. Checking again in 5 seconds.")
MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP = GET_GAME_TIMER()
ENDIF
ELSE
g_b_DisplayCheaterPoolTimeFeedMessage = TRUE
ENDIF
ELSE
#IF IS_DEBUG_BUILD
IF g_b_displayROSCredentialsDroppedPrint
NET_NL()NET_PRINT("[ROSCRED] NETWORK_HAS_ROS_PRIVILEGE_END_DATE = FALSE ")
ENDIF
#ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
IF g_b_displayROSCredentialsDroppedPrint
NET_NL()NET_PRINT("[ROSCRED] NETWORK_HAS_VALID_ROS_CREDENTIALS = FALSE, hold and reset timer ")
ENDIF
#ENDIF
MPGlobalsHud_TitleUpdate.iCheaterTimeLeftTimerSP = GET_GAME_TIMER()
ENDIF
ENDIF
ELSE
NET_NL()NET_PRINT("[ROSCRED] Not Banned in any way, closing off feed message. ")
g_b_DisplayCheaterPoolTimeFeedMessage = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_CONTENT_UNLOCK_MP_TICKERS()
// If linked to the social club, tell the player John Marston is available.
IF GET_SHOULD_DISPLAY_MARSTON_TICKER()
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - GET_SHOULD_DISPLAY_MARSTON_TICKER() = TRUE") ENDIF #ENDIF
BEGIN_TEXT_COMMAND_THEFEED_POST("MARSTON_TICK2")
END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", FALSE, TEXT_ICON_BLANK, "CONTENT_TICK")
IF (GET_CURRENT_GAMEMODE() = GAMEMODE_FM) // Alwyn's stuff handles printing this ticker in SP - PROC MAINTAIN_CONTENT_UNLOCK_MP_TICKERS().
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - GET_CURRENT_GAMEMODE() = GAMEMODE_FM") ENDIF #ENDIF
BEGIN_TEXT_COMMAND_THEFEED_POST("CONTENT_NEW_SC")
END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", FALSE, TEXT_ICON_BLANK, "CONTENT_TICK")
ENDIF
SET_TICKER_JOHNMARSTON_IS_DONE()
bShownMarstonTicker = TRUE
#IF IS_DEBUG_BUILD bForceMarstonTicker = FALSE #ENDIF
ELSE
#IF IS_DEBUG_BUILD IF bPrintMartsonTickerWidgets PRINTLN("[WJK] - Marston Ticker - GET_SHOULD_DISPLAY_MARSTON_TICKER() = FALSE") ENDIF #ENDIF
ENDIF
DISPLAY_CHEATER_DAYS_LEFT_FEED_MESSAGE()
#IF FEATURE_FREEMODE_ARCADE
IF IS_FREEMODE_ARCADE()
#IF FEATURE_COPS_N_CROOKS
IF GET_ARCADE_MODE() = ARC_COPS_CROOKS
EXIT
ENDIF
#ENDIF
ENDIF
#ENDIF
ENDPROC
// ===========================================================================================================
FUNC BOOL END_SINGLEPLAYER_READY_TO_START_MP()
IF NOT IS_BIT_SET(iSPCleanupStateBitset, BIT_SP_CLEANUP_COMPLETED)
CDEBUG1LN(DEBUG_CLEANUP_SP, "Running SP cleanup this frame...")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("<2140379> Running SP cleanup this frame...")
#ENDIF
//Wait for initial thread to end.
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initial")) > 0
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for GTAV intial thread to end.")
RETURN FALSE
ENDIF
//Wait for startup_positioning thread to end.
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("startup_positioning")) > 0
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for GTAV startup_positioning thread to end.")
RETURN FALSE
ENDIF
//Wait for Director Mode to terminate, if we have to
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("director_mode")) > 0
g_bDirectorTerminateOnSpCleanup = TRUE
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for Director Mode to end.")
RETURN FALSE
ENDIF
g_bDirectorTerminateOnSpCleanup = FALSE
//Start SP threads cleaning up.
IF NOT IS_BIT_SET(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_FORCE_CLEANUP)
FORCE_CLEANUP(FORCE_CLEANUP_FLAG_SP_TO_MP)
// Run one time cleanup here to get it out the way as soon as possible.
SET_BITMASK_AS_ENUM(g_PropertySystemData.iSystemBit, PROPERTY_SYSTEM_BIT_RESET_FOR_MULTIPLAYER) //Reset property system.
DISABLE_SCRIPT_BRAIN_SET(SCRIPT_BRAIN_GROUP_SINGLE_PLAYER) //Turn off SP world points.
Cleanup_Train_Lines_On_SP_End() //Turn off train lines.
ASSISTED_MOVEMENT_REMOVE_ROUTE("trev_steps") //#1600378 - Enable assisted line for Trevor's trailer in SP only. Clean them up as we transition into MP.
SAVE_EMAIL_SYSTEM_STATE() //Ensure email state is saved
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) //#2171916 Ensure player air drag is cleaned up going into MP.
ENDIF
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_FORCE_CLEANUP)
CLEAR_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_STOPPED_CUTSCENES)
//Give SP scripts a frame to process the force cleanup before allowing the transition to continue.
//Clean up the stop cut scene flag
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting to allow force cleanup to run for one frame.")
RETURN FALSE
ENDIF
//Wait for akward mission specific cleanup.
IF NOT IS_BIT_SET(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_MISSION_CLEANUP)
IF GET_CURRENT_GAMEMODE() != GAMEMODE_CREATOR
IF g_eRunningMission = SP_MISSION_MICHAEL_1
OR g_eMissionRunningOnMPSwitchStart = SP_MISSION_MICHAEL_1
IF NOT IS_SCREEN_FADED_OUT()
AND GET_CURRENT_HUD_STATE() != HUD_STATE_SELECT_CHARACTER_FM
AND GET_CURRENT_HUD_STATE() != HUD_STATE_CREATE_FACE
IF NOT IS_SCREEN_FADING_OUT()
CDEBUG1LN(DEBUG_CLEANUP_SP, "Starting screen fade out for Michael 1.")
//Ensure the MP HUD can draw on top of this fade.
SET_NO_LOADING_SCREEN(TRUE)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE)
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_LONG)
ENDIF
ELSE
IF NOT IS_TRANSITION_HEADING_FOR_CREATOR()
CDEBUG1LN(DEBUG_CLEANUP_SP, "Running delayed cleanup for Michael 1.")
RUN_RCI_MICHAEL1()
ENDIF
g_eTriggerRCI = RCI_NONE
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup for Michael 1 complete.")
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_MISSION_CLEANUP)
ENDIF
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for Michael 1 mission cleanup.")
RETURN FALSE
ENDIF
IF g_eRunningMission = SP_MISSION_PROLOGUE
OR g_eMissionRunningOnMPSwitchStart = SP_MISSION_PROLOGUE
IF NOT IS_SCREEN_FADED_OUT()
AND GET_CURRENT_HUD_STATE() != HUD_STATE_SELECT_CHARACTER_FM
AND GET_CURRENT_HUD_STATE() != HUD_STATE_CREATE_FACE
IF NOT IS_SCREEN_FADING_OUT()
CDEBUG1LN(DEBUG_CLEANUP_SP, "Starting screen fade out for Prologue 1.")
//Ensure the MP HUD can draw on top of this fade.
SET_NO_LOADING_SCREEN(TRUE)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE)
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_LONG)
ENDIF
ELSE
IF NOT IS_TRANSITION_HEADING_FOR_CREATOR()
CDEBUG1LN(DEBUG_CLEANUP_SP, "Running cleanup for Prologue 1.")
#IF IS_DEBUG_BUILD
IF g_AreBirdsDisplaying
CDEBUG1LN(DEBUG_CLEANUP_SP, "Running cleanup for Prologue 1 with g_AreBirdsDisplaying = TRUE so skip fade out.")
ENDIF
#ENDIF
RUN_RCI_PROLOGUE()
ENDIF
g_eTriggerRCI = RCI_NONE
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_MISSION_CLEANUP)
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup for Prologue 1 complete.")
RETURN FALSE
ENDIF
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for Prologue1 mission cleanup.")
RETURN FALSE
ENDIF
#IF IS_DEBUG_BUILD
ELSE
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_MISSION_CLEANUP)
CDEBUG1LN(DEBUG_CLEANUP_SP, "Gamemode is currently GAMEMODE_CREATOR. Skipping mission specific cleanup.")
#ENDIF
ENDIF
ENDIF
//Halt any running cutscenes.
IF NOT IS_BIT_SET(iSPCleanupStateBitset, BIT_SP_CLEANUP_STOPPED_CUTSCENES)
IF IS_CUTSCENE_ACTIVE()
CDEBUG1LN(DEBUG_CLEANUP_SP, "Telling cutscenes to clean up.")
STOP_CUTSCENE_IMMEDIATELY()
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_STOPPED_CUTSCENES)
ENDIF
ENDIF
//Wait for cutscenes to finish cleaning up.
IF IS_CUTSCENE_ACTIVE()
iFramesWaitingForCutscenes++
IF iFramesWaitingForCutscenes > 60
CDEBUG1LN(DEBUG_CLEANUP_SP, "Running emergency stop cutscene after 60 frames of waiting.")
STOP_CUTSCENE_IMMEDIATELY()
iFramesWaitingForCutscenes = 0
ENDIF
CDEBUG1LN(DEBUG_CLEANUP_SP, "Cleanup waiting for cutscenes to end.")
RETURN FALSE
ENDIF
iFramesWaitingForCutscenes = 0
// Cleanup mission flag
Force_Mission_Over()
//Informs SP initial it is not starting from a fresh load.
g_bHaveBeenInMultiplayer = TRUE
g_bInMultiplayer = TRUE
SET_CHARACTER_MODEL_CHECK_DONE(TRUE) // This is to make sure we dont get stuck later on because this flag was never set. see url:bugstar:6478922 - Local player became stuck on skycam after changing session while sat in the drug vehicle
CPRINTLN(DEBUG_CLEANUP_SP, "SP cleanup finished.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("<2140379> SP cleanup finished.")
#ENDIF
CLEAR_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_FORCE_CLEANUP)
CLEAR_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_RAN_MISSION_CLEANUP)
CLEAR_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_STOPPED_CUTSCENES)
//url:bugstar:3964887 - [PUBLIC] [EXPLOIT] Fast Run cheat can still be brought online with specific timing
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
//Flag cleanup as complete so we can't run it again until SP restarts.
SET_BIT(iSPCleanupStateBitset, BIT_SP_CLEANUP_COMPLETED)
#IF FEATURE_GEN9_STANDALONE
// Singleplayer script cleanup completed, post end SP UDS activity
NETWORK_POST_UDS_ACTIVITY_END("LaunchStoryMode")
#ENDIF // FEATURE_GEN9_STANDALONE
ELSE
CPRINTLN(DEBUG_CLEANUP_SP, "SP cleanup has already run. Skipping cleanup this time.")
ENDIF
RETURN TRUE
ENDFUNC
//Make the bail enum print readable
#IF IS_DEBUG_BUILD
/// PURPOSE: Requests the 'Debug' script, waits for it to stream in, then launches it
///
PROC Request_And_Launch_Debug_Script_With_Wait()
INT debugScriptNameHash
IF g_bLoadedClifford
debugScriptNameHash = HASH("debugCLF")
ELIF g_bLoadedNorman
debugScriptNameHash = HASH("debugNRM")
ELSE
debugScriptNameHash = HASH("debug")
ENDIF
REQUEST_SCRIPT_WITH_NAME_HASH(debugScriptNameHash)
WHILE NOT (HAS_SCRIPT_WITH_NAME_HASH_LOADED(debugScriptNameHash))
CPRINTLN(DEBUG_CLEANUP_SP, "Request_And_Launch_Debug_Script_With_Wait in Loop...")
REQUEST_SCRIPT_WITH_NAME_HASH(debugScriptNameHash)
WAIT(0)
ENDWHILE
START_NEW_SCRIPT_WITH_NAME_HASH(debugScriptNameHash, DEBUG_MENU_STACK_SIZE)
SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(debugScriptNameHash)
ENDPROC
FUNC BOOL Request_And_Launch_Debug_Script_Async()
INT debugScriptNameHash
IF g_bLoadedClifford
debugScriptNameHash = HASH("debugCLF")
ELIF g_bLoadedNorman
debugScriptNameHash = HASH("debugNRM")
ELSE
debugScriptNameHash = HASH("debug")
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(debugScriptNameHash) = 0
IF NOT bDebugScriptRequestedForRelaunch
REQUEST_SCRIPT_WITH_NAME_HASH(debugScriptNameHash)
bDebugScriptRequestedForRelaunch = FALSE
ENDIF
IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(debugScriptNameHash)
START_NEW_SCRIPT_WITH_NAME_HASH(debugScriptNameHash, DEBUG_MENU_STACK_SIZE)
SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(debugScriptNameHash)
bDebugScriptRequestedForRelaunch = FALSE
CPRINTLN(DEBUG_CLEANUP_SP, "Request_And_Launch_Debug_Script_With_Wait - Debug.sc relaunched!")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
#ENDIF
//Is the player in a safe room for respawn
FUNC BOOL IS_LOCAL_PLAYER_IN_A_SAFE_ROOM()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF g_sShopSettings.playerInterior != NULL
INTERIOR_INSTANCE_INDEX interiorID_Lester = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<1274.7242, -1713.8298, 53.7715>>, "v_lesters")
IF g_sShopSettings.playerInterior != interiorID_Lester
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
#IF FEATURE_GEN9_STANDALONE
/// PURPOSE:
/// Determine whether an end session END_REASON should cause a bail from a transition during PROCESS_EVENT_NETWORK_SESSION_END_EVENT
/// PARAMS:
/// eEndReason - the reason to check
/// RETURNS:
/// True if transition should bail for eEndReason
FUNC BOOL SHOULD_NETWORK_SESSION_END_REASON_BAIL_TRANSITION(END_REASON eEndReason)
SWITCH eEndReason
CASE END_KICKED
CASE END_ERROR
CASE END_KICKED_ADMIN
PRINTLN("SHOULD_NETWORK_SESSION_END_REASON_BAIL_TRANSITION - returning TRUE")
RETURN TRUE
ENDSWITCH
PRINTLN("SHOULD_NETWORK_SESSION_END_REASON_BAIL_TRANSITION - returning FALSE")
RETURN FALSE
ENDFUNC
#ENDIF //FEATURE_GEN9_STANDALONE
PROC PROCESS_EVENT_NETWORK_SESSION_END_EVENT(INT iCount)
STRUCT_SESSION_END_EVENT sEvent
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, sEvent, SIZE_OF(sEvent))
//got this reason then return to the same freemode
IF sEvent.nEndReason = END_RESERVING_SLOT
CLEAR_GETTING_CONTENT_BY_ID()
CLEAR_CORONA_IS_DOWNLOADING_FROM_UGC_SERVER()
//If the fake MP mode is not reset
IF NOT IS_FAKE_MULTIPLAYER_MODE_SET()
SET_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
SET_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
SET_TRANSITION_SESSION_LAUNCH_MAIN_FM_SCRIPT()
HANG_UP_AND_PUT_AWAY_PHONE()
//If we're starting an on-call then set it to clean up
IF AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL()
OR HAS_ON_CALL_TRANSITION_SESSION_BEEN_SET_UP()
SET_TRANSITION_SESSIONS_CLEAN_UP_ON_CALL_NOW()
ENDIF
//If the flag is set to store the players vehicle
IF SHOULD_TRANSITION_SESSIONS_RESTORE_VEHICLE()
// Fix for bug # 1826290 - We handle this in the carmod_shop cleanup with more vigorous checks, so lets skip.
//SAVE_MY_EOM_VEHICLE_DATA(NULL, FALSE, TRUE, 4)
// But we should still handle the end pos.
CLEAR_TRANSITION_SESSION_END_SESSION_POS()
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
SET_TRANSITION_SESSION_END_SESSION_POS(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE))
ENDIF
ELSE
CLEAR_TRANSITION_SESSION_END_SESSION_POS()
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
SET_TRANSITION_SESSION_END_SESSION_POS(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE))
IF IS_LOCAL_PLAYER_IN_A_SAFE_ROOM()
OR SHOULD_TRANSITION_SESSION_RESTORE_SHOP_STATE_ON_RESPAWN(FALSE)
SET_TRANSITION_SESSION_CONSIDER_INTERIORS_ON_RESPAWN()
ELSE
CLEAR_TRANSITION_SESSION_CONSIDER_INTERIORS_ON_RESPAWN()
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
//otherwise just print about is
ELSE
PRINTSTRING("[TS] PROCESS_EVENT_NETWORK_SESSION_END_EVENT - IS_FAKE_MULTIPLAYER_MODE_SET")
#ENDIF
ENDIF
//Get end session event
// Re-launch SP Main
ELIF sEvent.nEndReason != END_TRANSITION_LAUNCH
// IF sEvent.nEndReason = END_KICKED_ADMIN
// PRINTLN("[TS] END_KICKED_ADMIN")
// NETWORK_REQUEST_CLOUD_TUNABLES()
// PRINTLN("[TS] NETWORK_REQUEST_CLOUD_TUNABLES - EVENT_NETWORK_SESSION_END")
// ENDIF
IF DOES_TRANSITION_SESSIONS_NEED_TO_CLEANUP_FM_AFTER_INVITE()
IF sEvent.nEndReason = END_NORMAL
PRINTSTRING("[TS] (New Transition) Main Persistent Event Queue - Session End ignored because DOES_TRANSITION_SESSIONS_NEED_TO_CLEANUP_FM_AFTER_INVITE")
EXIT
ENDIF
ENDIF
//NOT IS_TRANSITION_SESSION_LAUNCHING()
#IF IS_DEBUG_BUILD
PRINTSTRING("...KGM: (New Transition) Main Persistent Event Queue - Session End")
PRINTNL()
PRINTSTRING("... GET_END_REASON_STRING = ")
PRINTSTRING(GET_END_REASON_STRING(sEvent.nEndReason))
PRINTNL()
#ENDIF
IF sEvent.nEndReason = END_KICKED
PRINTSTRING("[BCFORCE] sEvent.nEndReason = END_KICKED g_Private_Am_Kicked (HAVE_I_BEEN_KICKED) = TRUE")
g_Private_Am_Kicked = TRUE
ENDIF
SET_PLAYER_HAVE_PRIVILEGES(HAS_ONLINE_PRIVILAGES())
//Clean up every thing.
IF NOT AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE_FROM_MP()
RESET_TRANSITION_SESSION_NON_RESET_VARS()
RESET_TRANSITION_SESSION_CORONA_BISET()
ENDIF
// IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
IF IS_TRANSITION_ACTIVE()
IF GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_FM_TRANSITION_CREATE_PLAYER
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_IS_FM_AND_TRANSITION_READY
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_FM_SWOOP_DOWN
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_FM_FINAL_SETUP_PLAYER
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_MOVE_FM_TO_RUNNING_STATE
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_FM_HOW_TO_TERMINATE
#IF FEATURE_GEN9_STANDALONE
// RM DND: url:bugstar:7375854 Check end reason for bail
OR SHOULD_NETWORK_SESSION_END_REASON_BAIL_TRANSITION(sEvent.nEndReason)
#ENDIF //FEATURE_GEN9_STANDALONE
TRANSITION_CHANGE_STATE(TRANSITION_STATE_TERMINATE_SESSION)
PRINTLN("BC: EVENT_NETWORK_SESSION_END - Code has called END_SESSION Head stright to the bail screen for default reason. ")
HUD_CHANGE_STATE(HUD_STATE_BAIL)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_BAILED)
SET_BAIL_HAPPENED_DURING_JOIN(TRUE)
ELSE
NET_NL()NET_PRINT(" BC: EVENT_NETWORK_SESSION_END - Player has called END_SESSION but the transition is active, so don't do much. ")
ENDIF
//Set global tracking boolean for a Bail session happened. This is
// currently used and cleared in transition_controller.sch.
//If you want to use it then probably best to also clear it ureself..
g_Private_BailSessionHappened = TRUE
//Maintransition needs to launch freemode, as this will kill fm dead. 2096079
SET_TRANSITION_TO_IGNORE_LAUNCH_SCRIPT_START(FALSE)
// IF LOBBY_LEAVE_MULTIPLAYER() //Remvoed as you can't quit back to SP in the code new game option. Script handles the script one
// TELL_TRANSITION_MAYBE_FRONTEND_QUIT_MP(TRUE)
// g_bInMultiplayer = FALSE
// SET_TRANSITION_STRING("HUD_QUITTING")
// TRANSITION_CHANGE_STATE(TRANSITION_STATE_MP_SWOOP_UP)
// HUD_CHANGE_STATE(HUD_STATE_LOADING)
// NET_NL()NET_PRINT(" BC: EVENT_NETWORK_SESSION_END - Player has quit the game in the pause menu while the transition menu was up... ")
// ENDIF
ELSE
//Done outside the MPHUD/Transition //Remvoed as you can't quit back to SP in the code new game option. Script handles the script one
// IF LOBBY_LEAVE_MULTIPLAYER()
// TELL_TRANSITION_MAYBE_FRONTEND_QUIT_MP(TRUE) //Commented out as when you're going from CNC to freemode this would send you to SP.
// ENDIF
g_bInMultiplayer = FALSE
IF g_Private_MultiplayerCreatorNeedsToEnd = FALSE
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
IF GET_CONFIRM_INVITE_INTO_GAME_STATE() = FALSE
AND HAVE_I_BEEN_KICKED() = FALSE
SET_EMERGENCY_SKYCAM_UP_RUNNING(TRUE)
SET_BAILED_HAPPENED_SOMEHOW(TRUE)
SET_END_SESSION_REASON(sEvent.nEndReason)
ENDIF
NET_NL()NET_PRINT(" BC: EVENT_NETWORK_SESSION_END - Player has Quit the game somehow, bringing up the hud now. ")
ELSE
SET_FAKE_MULTIPLAYER_MODE(FALSE)
ENDIF
g_Private_MultiplayerCreatorNeedsToEnd = FALSE
ENDIF
//Got launch transition session
ELSE
SET_VARS_FOR_END_TRANSITION_LAUNCH()
ENDIF
ENDPROC
CONST_INT ciMESSAGE_TYPE_CRASH -1198671041 //crash
CONST_INT ciMESSAGE_TYPE_TUNABLE_REFRESH -1494736646 //tunable
PROC PROCESS_EVENT_NETWORK_PRESENCE_STAT_UPDATE_EVENT(INT iCount)
STRUCT_GAME_PRESENCE_EVENT_STAT_UPDATE sei
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, sei, SIZE_OF(sei))
//Switch the stat type
SWITCH sei.statHash
//If it's a crash
CASE ciMESSAGE_TYPE_CRASH
//And their tunable says no!
IF NOT NETWORK_ACCESS_TUNABLE_BOOL("BASE_GLOBALS", "MULTIPLAYER_DISABLED")
//Not sure we want to have this power as hackers might get a hold of it.
//KILLING_YOU_SOFTLY_WITH_RECURSION()
ENDIF
BREAK
//If it's a tunable refresh
CASE ciMESSAGE_TYPE_TUNABLE_REFRESH
NETWORK_REQUEST_CLOUD_TUNABLES()
PRINTLN("[BGSCRIPT] - NETWORK_REQUEST_CLOUD_TUNABLES - ciMESSAGE_TYPE_TUNABLE_REFRESH")
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC PROCESS_EVENT_NETWORK_NETWORK_ROS_CHANGED(INT iCount)
STRUCT_NETWORK_ROS_CHANGED sEvent
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, sEvent, SIZE_OF(sEvent))
#IF IS_DEBUG_BUILD
NET_NL()NET_PRINT("PROCESS_EVENT_NETWORK_NETWORK_ROS_CHANGED - ")
NET_NL()NET_PRINT(" - sEvent.bValidCredentials = ")NET_PRINT_BOOL(sEvent.bValidCredentials)
NET_NL()NET_PRINT(" - sEvent.bValidRockstarID = ")NET_PRINT_BOOL(sEvent.bValidRockstarID)
NET_NL()NET_PRINT(" - g_b_IsRockstarIDValidLastFrame = ")NET_PRINT_BOOL(g_b_IsRockstarIDValidLastFrame)
NET_NL()NET_PRINT(" - IS_TRANSITION_ACTIVE = ")NET_PRINT_BOOL(IS_TRANSITION_ACTIVE())
#ENDIF
IF g_b_IsRockstarIDValidLastFrame != sEvent.bValidRockstarID
AND sEvent.bValidRockstarID = TRUE
//Refresh the last gen checks.
SET_CHARACTER_LAST_GEN_CHECK(LAST_GEN_STATUS_NONE)
SET_PLAYER_LAST_GEN_CHECK(LAST_GEN_STATUS_NONE)
g_i_Private_LastGenCharacterAttempt = 0
NET_NL()NET_PRINT("[LASTGEN] PROCESS_EVENT_NETWORK_NETWORK_ROS_CHANGED - bValidRockstarID is TRUE. Reset all the checks to run again. ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("[LASTGEN] PROCESS_EVENT_NETWORK_NETWORK_ROS_CHANGED - bValidRockstarID is TRUE. Reset all the checks to run again. ")
#ENDIF
ENDIF
g_b_IsRockstarIDValidLastFrame = sEvent.bValidRockstarID
//DO nothing just now, as we like having no cloud now.
// //sEvent.bValidCredentials = False, no cloud connection.
// SET_FRONTEND_ACTIVE(FALSE)
// SET_SKYFREEZE_FROZEN()
// SET_NETWORK_ROS_CHANGED(TRUE)
//
// SET_QUIT_CURRENT_GAME(TRUE)
//
//
// IF IS_TRANSITION_ACTIVE() = FALSE
// TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
// ENDIF
ENDPROC
PROC PROCESS_TRANSITION_LOAD_SCENE()
IF (GET_CURRENT_GAMEMODE() = GAMEMODE_FM)
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
IF NOT IS_PLAYER_WATCHING_A_MOCAP(PLAYER_ID())
AND NOT IS_CUTSCENE_PLAYING()
AND NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
AND NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete
IF NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete
IF NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.bStartedFirstLoadScene
IF NOT IS_VECTOR_ZERO(g_TransitionSessionNonResetVars.sPostMissionCleanupData.vLoadSceneCoords)
IF NEW_LOAD_SCENE_START_SPHERE(g_TransitionSessionNonResetVars.sPostMissionCleanupData.vLoadSceneCoords, 150.0)
PRINTLN("TRANSITION TIME - FREEMODE - TRANSITION NEW LOAD SCENE - FRAME COUNT = (", GET_FRAME_COUNT(), ") POSIX TIME = ", GET_CLOUD_TIME_AS_INT(), ")")
NET_PRINT("[PMC] - [SAC] - TRANSITION TIME - started new load scene at coords: ")NET_PRINT_VECTOR(g_TransitionSessionNonResetVars.sPostMissionCleanupData.vLoadSceneCoords)NET_NL()
g_vInitialSpawnLocation = g_TransitionSessionNonResetVars.sPostMissionCleanupData.vLoadSceneCoords
PRINTLN("[PMC] - [SAC] - g_vInitialSpawnLocation = ", g_vInitialSpawnLocation)
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bStartedFirstLoadScene = TRUE
ENDIF
ENDIF
ELSE
IF NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete
IF IS_NEW_LOAD_SCENE_ACTIVE()
IF IS_NEW_LOAD_SCENE_LOADED()
NEW_LOAD_SCENE_STOP()
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete = TRUE
NET_PRINT("[PMC] - [SAC] - TRANSITION TIME - completed new load scene.")NET_NL()
ENDIF
ELSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete = TRUE
NET_PRINT("[PMC] - [SAC] - TRANSITION TIME - completed new load scene because it became inactive.")NET_NL()
ENDIF
ELSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete = TRUE
NET_PRINT("[WJK] - TRANSITION TIME - completed new load scene because it became inactive.")NET_NL()
ENDIF
ENDIF
ENDIF
ELSE
IF NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete
#IF IS_DEBUG_BUILD
IF IS_PLAYER_WATCHING_A_MOCAP(player_id())
PRINTLN("[PMC] - [SAC] - TRANSITION TIME - IS_PLAYER_WATCHING_A_MOCAP, set bFirstLoadSceneComplete = TRUE but HAVE NOT done a load scene. Just setting flag TRUE so script can continue.")
ENDIF
IF IS_CUTSCENE_PLAYING()
PRINTLN("[PMC] - [SAC] - TRANSITION TIME - IS_CUTSCENE_PLAYING, set bFirstLoadSceneComplete = TRUE but HAVE NOT done a load scene. Just setting flag TRUE so script can continue.")
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
PRINTLN("[PMC] - [SAC] - TRANSITION TIME - sGlobalCelebrationData bDoingHeistCelebration, set bFirstLoadSceneComplete = TRUE but HAVE NOT done a load scene. Just setting flag TRUE so script can continue.")
ENDIF
#ENDIF
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bFirstLoadSceneComplete = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC PROCESS_EVENT_NETWORK_ATM_LOG(INT iCount)
IF g_iMPAtmLogEntryPendingIndex != -1
PRINTLN("PROCESS_EVENT_NETWORK_ATM_LOG(", iCount, ") pending, g_iMPAtmLogEntryPendingIndex: ", g_iMPAtmLogEntryPendingIndex)
EXIT
ENDIF
STRUCT_CASH_TRANSACTION_LOG_EVENT sEvent
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, sEvent, SIZE_OF(sEvent))
#IF IS_DEBUG_BUILD
TEXT_LABEL_31 sLogEventId = "", sLogEventType = "", sLogEventItemId = ""
SWITCH sEvent.iId
CASE CASH_TRANSACTION_ATM sLogEventId = "ATM" BREAK
CASE CASH_TRANSACTION_GAMER sLogEventId = "GAMER" BREAK
CASE CASH_TRANSACTION_STORE sLogEventId = "STORE" BREAK
CASE CASH_TRANSACTION_BANK sLogEventId = "BANK" BREAK
DEFAULT
sLogEventId = "ID_"
sLogEventId += ENUM_TO_INT(sEvent.iId)
BREAK
ENDSWITCH
SWITCH sEvent.iType
CASE CASH_TRANSACTION_DEPOSIT
sLogEventType = "DEPOSIT"
sLogEventItemId = DEBUG_GET_STRING_FROM_EARN_CATEGORIES(INT_TO_ENUM(EARN_CATEGORIES, sEvent.ItemId))
IF IS_STRING_NULL_OR_EMPTY(sLogEventItemId)
sLogEventItemId = "LogDataUnknown_"
sLogEventItemId += sEvent.ItemId
ENDIF
BREAK
CASE CASH_TRANSACTION_WITHDRAW
sLogEventType = "WITHDRAW"
sLogEventItemId = DEBUG_GET_STRING_FROM_SPEND_CATEGORIES(INT_TO_ENUM(SPEND_CATEGORIES, sEvent.ItemId))
IF IS_STRING_NULL_OR_EMPTY(sLogEventItemId)
sLogEventItemId = "LogDataUnknown_"
sLogEventItemId += sEvent.ItemId
ENDIF
BREAK
DEFAULT
sLogEventType = "TYPE_"
sLogEventType += ENUM_TO_INT(sEvent.iType)
BREAK
ENDSWITCH
PRINTLN("PROCESS_EVENT_NETWORK_ATM_LOG(", iCount, "): trans = ", sEvent.iTransactionId,
" ID = ", sLogEventId,
" type = ", sLogEventType,
" amount = $", sEvent.iAmount,
" ItemID = ", sLogEventItemId) //" gamer = '", gmr,"'")
#ENDIF
#IF NOT IS_DEBUG_BUILD
PRINTLN("PROCESS_EVENT_NETWORK_ATM_LOG(", iCount, "): trans = ", sEvent.iTransactionId,
" ID = ", sEvent.iId,
" type = ", sEvent.iType,
" amount = $", sEvent.iAmount,
" ItemID = ", sEvent.ItemId)
#ENDIF
//trigger log entry
INT c = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogValues[c] = sEvent.iAmount
MP_ATM_LOG_ACTION_TYPE t
eTransactionIds tId = INT_TO_ENUM(eTransactionIds, sEvent.iId)
SWITCH tId
CASE CASH_TRANSACTION_ATM //Money deposited/withdrawn by the player - this is relation to VC commands - So deposit or withdraw from BANk Account.
SWITCH INT_TO_ENUM(eTransactionTypes, sEvent.iType)
CASE CASH_TRANSACTION_DEPOSIT
t = MALA_DEPOSIT
BREAK
CASE CASH_TRANSACTION_WITHDRAW
t = MALA_WITHDRAW
BREAK
DEFAULT
SCRIPT_ASSERT("PROCESS_EVENT_NETWORK_ATM_LOG: invalid eventID") //= ", sLogEventId, " type = ", sLogEventType, " for amount $", sEvent.iAmount)
BREAK
ENDSWITCH
BREAK
CASE CASH_TRANSACTION_GAMER //Money received/paid from friends.
SWITCH INT_TO_ENUM(eTransactionTypes, sEvent.iType)
CASE CASH_TRANSACTION_DEPOSIT
t = MALA_CASH_RECIEVED
BREAK
CASE CASH_TRANSACTION_WITHDRAW
t = MALA_CASH_SENT
BREAK
DEFAULT
SCRIPT_ASSERT("PROCESS_EVENT_NETWORK_ATM_LOG: invalid eventID") //= ", sLogEventId, " type = ", sLogEventType, " for amount $", sEvent.iAmount)
BREAK
ENDSWITCH
BREAK
CASE CASH_TRANSACTION_STORE //STORE money always credits the BANK account
SWITCH INT_TO_ENUM(eTransactionTypes, sEvent.iType)
CASE CASH_TRANSACTION_DEPOSIT
t = MALA_CASH_BOUGHT
SET_BIT(MPGlobalsAmbience.iFmNmhBitSet2, BI_FM_NMH2_DEPOSITED_CASH) // Dave W, for help text
BREAK
CASE CASH_TRANSACTION_WITHDRAW
BREAK
DEFAULT
SCRIPT_ASSERT("PROCESS_EVENT_NETWORK_ATM_LOG: invalid eventID") //= ", sLogEventId, " type = ", sLogEventType, " for amount $", sEvent.iAmount)
BREAK
ENDSWITCH
BREAK
CASE CASH_TRANSACTION_BANK
//purchase
SWITCH INT_TO_ENUM(eTransactionTypes, sEvent.iType)
CASE CASH_TRANSACTION_WITHDRAW //they bought something
t = MALA_PURCHASE
BREAK
CASE CASH_TRANSACTION_DEPOSIT //they got a refund of some kind
t = MALA_REFUND
BREAK
DEFAULT
SCRIPT_ASSERT("PROCESS_EVENT_NETWORK_ATM_LOG: invalid eventID") //= ", sLogEventId, " type = ", sLogEventType, " for amount $", sEvent.iAmount)
BREAK
ENDSWITCH
BREAK
DEFAULT
SCRIPT_ASSERT("PROCESS_EVENT_NETWORK_ATM_LOG: invalid eventID") //= ", sLogEventId, " type = ", sLogEventType, " for amount $", sEvent.iAmount)
EXIT
ENDSWITCH
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogActionType[c] = t
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogSourceNames[c] = ""
IF INT_TO_ENUM(eTransactionIds, sEvent.iId) = CASH_TRANSACTION_GAMER //Money received/paid from friends.
PRINTLN("PROCESS_EVENT_NETWORK_ATM_LOG: Getting player name process initiated.")
//this has to be done outside since we can't wait in here 1627644
IF g_iMPAtmLogEntryPendingIndex = -1
g_iMPAtmLogEntryPendingIndex = c
//the following because not messing with the stucture of the headers for this
g_iMPAtmLogHandle[0] = sEvent.hGamer.Data1
g_iMPAtmLogHandle[1] = sEvent.hGamer.Data2
g_iMPAtmLogHandle[2] = sEvent.hGamer.Data3
g_iMPAtmLogHandle[3] = sEvent.hGamer.Data4
g_iMPAtmLogHandle[4] = sEvent.hGamer.Data5
g_iMPAtmLogHandle[5] = sEvent.hGamer.Data6
g_iMPAtmLogHandle[6] = sEvent.hGamer.Data7
g_iMPAtmLogHandle[7] = sEvent.hGamer.Data8
g_iMPAtmLogHandle[8] = sEvent.hGamer.Data9
g_iMPAtmLogHandle[9] = sEvent.hGamer.Data10
g_iMPAtmLogHandle[10] = sEvent.hGamer.Data11
g_iMPAtmLogHandle[11] = sEvent.hGamer.Data12
g_iMPAtmLogHandle[12] = sEvent.hGamer.Data13
ENDIF
ELSE
//update item assignment if its a valid value
INT id = sEvent.ItemId
IF id != 0
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[c] = 0
IF sEvent.iType = CASH_TRANSACTION_WITHDRAW
SPEND_CATEGORIES s = INT_TO_ENUM(SPEND_CATEGORIES, id)
SWITCH s
CASE MONEY_SPENT_CONTACT_SERVICE
CASE MONEY_SPENT_PROPERTY_UTIL
CASE MONEY_SPENT_JOB_ACTIVITY
CASE MONEY_SPENT_BETTING
CASE MONEY_SPENT_STYLE_ENT
CASE MONEY_SPENT_HEALTHCARE
CASE MONEY_SPENT_FROM_DEBUG
CASE MONEY_SPENT_DROPPED_STOLEN
CASE MONEY_SPENT_VEH_MAINTENANCE
CASE MONEY_SPENT_HOLDUPS
CASE MONEY_SPENT_PASSIVEMODE
CASE MONEY_SPENT_BANKINTEREST
CDEBUG1LN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: MpSavedATM.LogData[", c, "] spend:", DEBUG_GET_STRING_FROM_SPEND_CATEGORIES(s))
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[c] = id
BREAK
CASE MONEY_SPENT_WEAPON_ARMOR
CASE MONEY_SPENT_NOCOPS
CASE MONEY_SPENT_ROCKSTAR_AWARD
//do nothing
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(DEBUG_GET_STRING_FROM_SPEND_CATEGORIES(s))
CASSERTLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: unknown spend activity \"", DEBUG_GET_STRING_FROM_SPEND_CATEGORIES(s), "\"")
ELSE
#ENDIF
CWARNINGLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: unknown spend activity [", s, "]")
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
BREAK
ENDSWITCH
ELIF sEvent.iType = CASH_TRANSACTION_DEPOSIT
EARN_CATEGORIES e = INT_TO_ENUM(EARN_CATEGORIES,id)
SWITCH e
CASE MONEY_EARN_JOBS
CASE MONEY_EARN_SELLING_VEH
CASE MONEY_EARN_BETTING
CASE MONEY_EARN_GOOD_SPORT
CASE MONEY_EARN_PICKED_UP
CASE MONEY_EARN_SHARED
CASE MONEY_EARN_JOBSHARED
CASE MONEY_EARN_ROCKSTAR_AWARD
CASE MONEY_EARN_REFUND
CASE MONEY_EARN_FROM_HEIST_JOB
CASE MONEY_EARN_FROM_JOB_BONUS
CDEBUG1LN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: MpSavedATM.LogData[", c, "] earn:", DEBUG_GET_STRING_FROM_EARN_CATEGORIES(e))
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[c] = id
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(DEBUG_GET_STRING_FROM_EARN_CATEGORIES(e))
CASSERTLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: unknown earn activity \"", DEBUG_GET_STRING_FROM_EARN_CATEGORIES(e), "\"")
ELSE
#ENDIF
CWARNINGLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: unknown earn activity [", e, "]")
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF
BREAK
ENDSWITCH
ELSE
CWARNINGLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: unknown event type \"", sEvent.iType, "\"")
ENDIF
ELSE
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.LogData[c] = 0
CWARNINGLN(DEBUG_INTERNET, "PROCESS_EVENT_NETWORK_ATM_LOG: invalid event item ID \"", sEvent.ItemId, "\"")
ENDIF
ENDIF
++g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret
IF g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret >= MP_TOTAL_ATM_LOG_ENTRIES
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedATM.iLogCaret = 0
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
FUNC STRING GET_CLOUD_EVENT_ID_DEBUG_PRINT(CLOUD_EVENT_ID nEventID)
SWITCH nEventID
CASE CLOUD_EVENT_TUNABLES_ADDED RETURN "CLOUD_EVENT_TUNABLES_ADDED"
CASE CLOUD_EVENT_BGSCRIPT_ADDED RETURN "CLOUD_EVENT_BGSCRIPT_ADDED"
ENDSWITCH
PRINTLN("PROCESS_EVENT_NETWORK_CLOUD_EVENT - GET_CLOUD_EVENT_ID_DEBUG_PRINT out of range nEventID = ", ENUM_TO_INT(nEventID))
RETURN ""
ENDFUNC
#ENDIF
//Process a cloud event
PROC PROCESS_EVENT_NETWORK_CLOUD_EVENT(INT iCount)
STRUCT_NETWORK_CLOUD_EVENT sei
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, sei, SIZE_OF(sei))
#IF IS_DEBUG_BUILD
PRINTLN("PROCESS_EVENT_NETWORK_CLOUD_EVENT - sei.nEventID = ", GET_CLOUD_EVENT_ID_DEBUG_PRINT(sei.nEventID))
PRINTLN("PROCESS_EVENT_NETWORK_CLOUD_EVENT - sei.nEventParam1 = ", sei.nEventParam1)
PRINTLN("PROCESS_EVENT_NETWORK_CLOUD_EVENT - sei.nEventParam2 = ", sei.nEventParam2)
PRINTLN("PROCESS_EVENT_NETWORK_CLOUD_EVENT - sei.szEventString = ", sei.szEventString)
#ENDIF
//Switch the event type
SWITCH sei.nEventID
//If it's a crash
CASE CLOUD_EVENT_TUNABLES_ADDED
PRINTLN("[BTTUN] - PROCESS_EVENT_NETWORK_CLOUD_EVENT - CLOUD_EVENT_TUNABLES_ADDED - g_sTunableLoadingStruct.bRefreshNow = TRUE")
g_sTunableLoadingStruct.bRefreshNow = TRUE
BREAK
//If it's a tunable refresh
CASE CLOUD_EVENT_BGSCRIPT_ADDED
PRINTLN("[BTTUN] - PROCESS_EVENT_NETWORK_CLOUD_EVENT - CLOUD_EVENT_BGSCRIPT_ADDED - g_sTunableLoadingStruct.bRefreshNow = TRUE")
g_sBackGroundStruct.bKillActive = TRUE
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC PROCESS_MAINPER_NETWORK_EMAIL_RECEIVED_EVENT()
IF NOT IS_ACCOUNT_OVER_17()
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Eyefind Email Event but Account is not over 17. No feed creation.")
cdPrintnl()
#endif
EXIT
ENDIF
IF IS_ACCOUNT_OVER_17_FOR_CHAT(PLAYER_ID()) //Fix for 2437163. Make sure that no feed message appears if the user account does not have communication privileges.
IF (GET_PROFILE_SETTING(PROFILE_FEED_FRIENDS) = 1)
PRINTLN("Main_Persistent - PROCESS_NETWORK_EMAIL_RECEIVED_EVENT - Displaying feed notification of Eyefind message received.")
BEGIN_TEXT_COMMAND_THEFEED_POST ("CELL_EMAIL_EVENT")
END_TEXT_COMMAND_THEFEED_POST_TICKER(TRUE)
ELSE
IF GET_PROFILE_SETTING(PROFILE_FEED_FRIENDS) <> 1
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Eyefind Email Event but PROFILE_FEED_FRIENDS did not equal 1. No feed creation.")
cdPrintnl()
#endif
ENDIF
ENDIF
ELSE
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Eyefind Email Event but Account does not have chat privileges. No feed creation.")
cdPrintnl()
#endif
ENDIF
ENDPROC
PROC PROCESS_MAINPER_NETWORK_MARKETING_EMAIL_RECEIVED_EVENT()
//This should be fired from EVENT_NETWORK_MARKETING_EMAIL_RECEIVED
IF NOT IS_ACCOUNT_OVER_17()
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Marketing Email Event but Account is not over 17. No feed creation.")
cdPrintnl()
#endif
EXIT
ENDIF
IF IS_ACCOUNT_OVER_17_FOR_CHAT(PLAYER_ID()) //Fix for 2437163. Make sure that no feed message appears if the user account does not have communication privileges.
AND g_bInMultiplayer = TRUE //Do not display this feed message in SP. #2606359
//IF (GET_PROFILE_SETTING(PROFILE_FEED_FRIENDS) = 1)
IF IS_BIT_SET (BitSet_CellphoneTU, g_BSTU_MARKETING_EVENT_CUED_THIS_SESSION)
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Process Marketing Email Received Event not displaying feed message as Cued This Session bit is already set.")
cdPrintnl()
#endif
ELSE
PRINTLN("Main_Persistent - PROCESS_MAINPER_NETWORK_MARKETING_EMAIL_RECEIVED_EVENT - Displaying feed notification of Eyefind message received and setting Cued This Session bit.")
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Process Marketing Email Received Event - Will display feed notification and set Cued This Session bit.")
cdPrintnl()
#endif
SET_BIT (BitSet_CellphoneTU, g_BSTU_MARKETING_EVENT_CUED_THIS_SESSION)
/* Simplifying notification for 2534125. Remove Social Club branding.
BEGIN_TEXT_COMMAND_THEFEED_POST ("CELL_EMKT_EVENT")
//END_TEXT_COMMAND_THEFEED_POST_TICKER(TRUE)
TEXT_LABEL_63 s_SocialClubConstruct
//Check for Social Club sender here. If so, colour yellow. #1562653
s_SocialClubConstruct = "~HUD_COLOUR_SOCIAL_CLUB~"
s_SocialClubConstruct += "Social Club"
END_TEXT_COMMAND_THEFEED_POST_MESSAGETEXT ("CHAR_SOCIAL_CLUB", "CHAR_SOCIAL_CLUB", FALSE, TEXT_ICON_EMAIL, s_SocialClubConstruct)
*/
//Simplifying notification for 2534125. Just displaying a standard ticker.
BEGIN_TEXT_COMMAND_THEFEED_POST ("CELL_EMKT_EVENT")
END_TEXT_COMMAND_THEFEED_POST_TICKER(TRUE)
g_NumberOfUnreadMarketingEmailsThisSession ++ //Increment this for 2606295 and refresh the phone homescreen.
REQUEST_DYNAMIC_UPDATE_OF_CELLPHONE_APPLIST()
ENDIF
/*
ELSE
IF GET_PROFILE_SETTING(PROFILE_FEED_FRIENDS) <> 1
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Marketing Email Event but PROFILE_FEED_FRIENDS did not equal 1. No feed creation.")
cdPrintnl()
#endif
ENDIF
ENDIF
*/
ELSE
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Marketing Email Event but Account does not have chat privileges or is not in MP. No feed creation.")
cdPrintnl()
#endif
ENDIF
ENDPROC
// ===========================================================================================================
// Joblist NextGen Check Permissions Event Handling
// ===========================================================================================================
// PURPOSE: Process the event that returns the result of an Asynchronous check for an invite from a blocked player
PROC Process_Event_Network_Permission_Check_Result(INT paramEventID)
// Retrieve the data
STRUCT_NETWORK_PERMISSION_CHECK_RESULT theEventData
IF NOT (GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, paramEventID, theEventData, SIZE_OF(theEventData)))
PRINTLN(".KGM [JobList]: Process_Event_Network_Permission_Check_Result() - ERROR: Failed to retrieve the event data")
SCRIPT_ASSERT("Process_Event_Network_Permission_Check_Result(): FAILED TO RETRIEVE EVENT DATA. Tell Keith.")
EXIT
ENDIF
INT checkID = theEventData.nCheckID
BOOL isAllowed = theEventData.bIsAllowed
#IF IS_DEBUG_BUILD
NET_PRINT(".KGM [JobList]: Retrieved Asynchronous Blocking Check Result for checkID: ")
NET_PRINT_INT(checkID)
NET_PRINT(" - is Allowed? ")
NET_PRINT_BOOL(isAllowed)
NET_NL()
#ENDIF
//Deal with book marks!
//Only if the UGC block is loaded!
IF g_sCURRENT_UGC_STATUS.g_bUgcGlobalsBlockLoaded
IF(g_iBookMarkCheckPermissionsBitSet[0] != 0
OR g_iBookMarkCheckPermissionsBitSet[1] != 0)
PRINTLN("[UGC TYPE] PROCESS_EVENT_NETWORK_PERMISSION_CHECK_RESULT_FOR_UGC")
INT iloop, iArray, iBit, iRemoveLoop
INT iMaxLoop = MAX_NUMBER_FMMC_SAVES+MAX_NUMBER_FMMC_SAVES
REPEAT iMaxLoop iLoop
//Find the event ID!
IF g_FMMC_HEADER_STRUCT_PAUSE_MENU_BOOKMARKS.iCheckPermission[iLoop] = theEventData.nCheckID
//Clear the bit!
iBit = iLoop%32
iArray = FLOOR(TO_FLOAT(iLoop)/32.0)
PRINTLN("[UGC TYPE] PROCESS_EVENT_NETWORK_PERMISSION_CHECK_RESULT_FOR_UGC - CLEAR_BIT(sGetUGC_content.iCheckPermissionsBitSet[", iArray, "], ", iBit, ")")
CLEAR_BIT(g_iBookMarkCheckPermissionsBitSet[iArray], iBit)
//Clear the permission checks!
g_FMMC_HEADER_STRUCT_PAUSE_MENU_BOOKMARKS.iCheckPermission[iLoop] = 0
//If it's allowed we don't care, just move on
IF theEventData.bIsAllowed = TRUE
PRINTLN("[UGC TYPE] PROCESS_EVENT_NETWORK_PERMISSION_CHECK_RESULT_FOR_UGC - theEventData.bIsAllowed = TRUE")
EXIT
//If it's not allowed we need to loop and remove it from the array!
ELSE
FOR iRemoveLoop = iLoop TO (iMaxLoop - 2)
g_FMMC_HEADER_STRUCT_PAUSE_MENU_BOOKMARKS.sMyMissionHeaderVars[iRemoveLoop] = g_FMMC_HEADER_STRUCT_PAUSE_MENU_BOOKMARKS.sMyMissionHeaderVars[iRemoveLoop + 1]
ENDFOR
//Get out
EXIT
ENDIF
ELIF g_FMMC_HEADER_STRUCT.iCheckPermission[iLoop] = theEventData.nCheckID
//Clear the bit!
iBit = iLoop%32
iArray = FLOOR(TO_FLOAT(iLoop)/32.0)
PRINTLN("[UGC TYPE] PROCESS_EVENT_NETWORK_PERMISSION_CHECK_RESULT_FOR_UGC - CLEAR_BIT(sGetUGC_content.iCheckPermissionsBitSet[", iArray, "], ", iBit, ")")
CLEAR_BIT(g_iBookMarkCheckPermissionsBitSet[iArray], iBit)
//Clear the permission checks!
g_FMMC_HEADER_STRUCT.iCheckPermission[iLoop] = 0
//If it's allowed we don't care, just move on
IF theEventData.bIsAllowed = TRUE
PRINTLN("[UGC TYPE] PROCESS_EVENT_NETWORK_PERMISSION_CHECK_RESULT_FOR_UGC - theEventData.bIsAllowed = TRUE")
EXIT
//If it's not allowed we need to loop and remove it from the array!
ELSE
FOR iRemoveLoop = iLoop TO (iMaxLoop - 2)
g_FMMC_HEADER_STRUCT.sMyMissionHeaderVars[iRemoveLoop] = g_FMMC_HEADER_STRUCT.sMyMissionHeaderVars[iRemoveLoop + 1]
ENDFOR
//Get out
EXIT
ENDIF
ENDIF
ENDREPEAT
ENDIF
ENDIF
// Find this checkID within the same session Invite array
INT tempLoop = 0
REPEAT g_numMPJobListInvitations tempLoop
IF (g_sJLInvitesMP[tempLoop].jliDoingPermissionCheck)
IF (g_sJLInvitesMP[tempLoop].jliPermissionCheckID = checkID)
// ...found it
// Is this invite blocked or allowed?
IF (isAllowed)
// ...allowed, so clear the variables to allow the invitation to be processed
g_sJLInvitesMP[tempLoop].jliPermissionCheckID = 0
g_sJLInvitesMP[tempLoop].jliDoingPermissionCheck = FALSE
g_sJLInvitesMP[tempLoop].jliPermissionCheckFail = FALSE
PRINTLN(".KGM [JobList]: Invite is NOT asynchronously blocked in array position: ", tempLoop)
EXIT
ENDIF
// ...not allowed, so blocking the invite
g_sJLInvitesMP[tempLoop].jliPermissionCheckID = 0
g_sJLInvitesMP[tempLoop].jliDoingPermissionCheck = FALSE
g_sJLInvitesMP[tempLoop].jliPermissionCheckFail = TRUE
PRINTLN(".KGM [JobList]: Invite is asynchronously blocked in array position: ", tempLoop)
EXIT
ENDIF
ENDIF
ENDREPEAT
// Find this checkID within the Basic Invite array
REPEAT g_numMPRVInvites tempLoop
IF (g_sJLRVInvitesMP[tempLoop].jrviDoingPermissionCheck)
IF (g_sJLRVInvitesMP[tempLoop].jrviPermissionCheckID = checkID)
// ...found it
// Is this invite blocked or allowed?
IF (isAllowed)
// ...allowed, so clear the variables to allow the Basic Invite to be processed
g_sJLRVInvitesMP[tempLoop].jrviPermissionCheckID = 0
g_sJLRVInvitesMP[tempLoop].jrviDoingPermissionCheck = FALSE
g_sJLRVInvitesMP[tempLoop].jrviPermissionCheckFail = FALSE
PRINTLN(".KGM [JobList]: Basic Invite is NOT asynchronously blocked in array position: ", tempLoop)
EXIT
ENDIF
// ...not allowed, so blocking the invite
g_sJLRVInvitesMP[tempLoop].jrviPermissionCheckID = 0
g_sJLRVInvitesMP[tempLoop].jrviDoingPermissionCheck = FALSE
g_sJLRVInvitesMP[tempLoop].jrviPermissionCheckFail = TRUE
PRINTLN(".KGM [JobList]: Basic Invite is asynchronously blocked in array position: ", tempLoop)
EXIT
ENDIF
ENDIF
ENDREPEAT
#IF IS_DEBUG_BUILD
NET_PRINT(".KGM [JobList]: Asynchronous Blocking CheckID: ")
NET_PRINT_INT(checkID)
NET_PRINT(" - NOT FOUND ON SAME-SESSION INVITE OR BASIC INVITE ARRAYS")
NET_NL()
#ENDIF
ENDPROC
STRUCT_INVITE_EVENT CachedInviteEvent
BOOL bCachedInvite
PROC Process_cached_invite()
IF (bCachedInvite)
PRINTLN("Process_cached_invite - active")
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
PROCESS_INVITE_EVENTS(CachedInviteEvent, bCachedInvite)
ENDIF
ENDPROC
/// PURPOSE:
/// Clears out the event queue - deals with any MP->SP transistion events
PROC CLEAR_EVENT_QUEUE()
EVENT_NAMES eventType
INT iCount = 0
BOOL bGoBackToSP = FALSE
BOOL bDoCameraUp = TRUE
STRUCT_INVITE_EVENT InviteEvent
STRUCT_SUMMON_EVENTS SummonEvent
STRUCT_PLAYER_SCRIPT_EVENTS data
STRUCT_NETWORK_SIGN_IN_STATE_CHANGED SignInEvent
STRUCT_NETWORK_APP_LAUNCHED AppLaunchEvent
STRUCT_INVITE_VIA_PRESENCE_EVENT PresenceInviteEvent
STRUCT_ADMIN_INVITED_EVENT AdminInviteEvent
STRUCT_NETWORK_SPECTATE_LOCAL SpecLocalEvent
STRUCT_NETWORK_SYSTEM_SERVICE_EVENT SystemServiceEvent
STRUCT_NETWORK_REQUEST_DELAY NetworkRequestDelayEvent
SCADMIN_UPDATE_EVENT ScAdminPlayerUpdated
EventReceivedCash scEventReceivedCash
MULTIPLAYER_ACCESS_CODE nAccessCode
INT I
INT FindPlayerInt
BOOL inventoryRefresh, PlayerBalanceRefresh
PLAYER_INDEX FindPlayerIndex
// Go through the event queue getting the head of the queue
REPEAT GET_NUMBER_OF_EVENTS(SCRIPT_EVENT_QUEUE_NETWORK) iCount
eventType = GET_EVENT_AT_INDEX(SCRIPT_EVENT_QUEUE_NETWORK, iCount)
// HANDLE ALL EVENTS THAT THIS SCRIPT NEEDS TO KNOW ABOUT
IF NOT ShouldBGScriptInterceptCodeEvent(eventType)
SWITCH (eventType)
// The 'Session Start' event gets triggered when the MP game launches
CASE EVENT_NETWORK_SESSION_START
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SESSION_START")
IF IS_FAKE_MULTIPLAYER_MODE_SET() = FALSE
AND (GET_CURRENT_GAMEMODE() = GAMEMODE_SP OR GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY) //Added this as it also launches between missions.
//END_SINGLEPLAYER_READY_TO_START_MP()
SET_SINGLEPLAYER_END_NOW()
ENDIF
BREAK
//When we get a cloud event
CASE EVENT_NETWORK_CLOUD_EVENT
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_CLOUD_EVENT")
PROCESS_EVENT_NETWORK_CLOUD_EVENT(iCount)
BREAK
// The 'session end' event triggers when MP is quit normally through the game
CASE EVENT_NETWORK_SESSION_END
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SESSION_END")
PROCESS_EVENT_NETWORK_SESSION_END_EVENT(iCount)
BREAK
//If we get a presence stat update that is for a crash or for a tunable refresh then deal with it
CASE EVENT_NETWORK_PRESENCE_STAT_UPDATE
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PRESENCE_STAT_UPDATE")
PROCESS_EVENT_NETWORK_PRESENCE_STAT_UPDATE_EVENT(iCount)
BREAK
// The 'bail' event triggers when the game quits unexpectedly (ie: player signs out of PSN)
CASE EVENT_NETWORK_NETWORK_BAIL
PRINTLN("[TS] *****************************************************************")
PRINTLN("[TS] * NETWORK_BAIL - T - ", GET_CLOUD_TIME_AS_INT(), ", F - ", GET_FRAME_COUNT(), " *")
#IF USE_FINAL_PRINTS PRINTLN_FINAL("[TS] * NETWORK_BAIL - T - ", GET_CLOUD_TIME_AS_INT(), ", F - ", GET_FRAME_COUNT(), " *")#ENDIF
PRINTLN("[TS] *****************************************************************")
IF GET_CURRENT_GAMEMODE() != GAMEMODE_CREATOR
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, g_BailEvent, SIZE_OF(g_BailEvent))
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - g_BailEvent.nBailReason = ", GET_BAIL_REASON_STRING(g_BailEvent.nBailReason))
RESET_SKYCAM_HOLD()
IF GET_CURRENT_HUD_STATE() = HUD_STATE_CREATE_FACE
OR GET_CURRENT_HUD_STATE() = HUD_STATE_SELECT_CHARACTER_FM
// TRANSITION_CHANGE_STATE(TRANSITION_STATE_CREATION_ENTER_SESSION)
PRINTLN("BC: CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - IGNORE BAIL JUST TRY AGAIN, ON CHAR SELECT OR CREATE SCREEN ", GET_BAIL_REASON_STRING(g_BailEvent.nBailReason))
BREAK
ENDIF
IF GET_CURRENT_TRANSITION_BAILING_OPTIONS() = BAILING_OPTIONS_TIMEOUT_WAITING_TO_JOIN
PRINTLN("BC: CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - IGNORE BAIL, FORCING DISCONNECT AS IT TIMED OUT WHILE TRYING TO CONNECT BAIL SCREEN SHOULD ALREADY BE COMING UP THROUGH OTHER MEANS. ", GET_BAIL_REASON_STRING(g_BailEvent.nBailReason))
BREAK
ENDIF
RESERT_TRANSITION_SESSION_MAIN_PERSISTANT_VARS()
SET_PLAYER_HAVE_PRIVILEGES(HAS_ONLINE_PRIVILAGES())
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
//SET_TRANSITION_SESSIONS_CAM_DOWN_AFTER_END_RESERVING_SLOT()
IF IS_WARNING_SCREEN_BAIL(WARNINGSCREEN_BAIL_TRANSITION_JOIN_FAILED) = TRUE
AND g_BailEvent.nBailReason = BAIL_FROM_SCRIPT
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - script Bail is already handled, skip TELL_TRANSITION_BAIL_HAPPENED(TRUE)")
ELSE
TELL_TRANSITION_BAIL_HAPPENED(TRUE)
ENDIF
g_bInMultiplayer = FALSE
//So the hud resets when you bail, and knows you're not online still.
SET_QUIT_CURRENT_GAME(TRUE)
SET_EMERGENCY_SKYCAM_UP_RUNNING(TRUE)
SET_BAIL_STILL_VALID(TRUE)
IF g_BailEvent.nBailReason = BAIL_SYSTEM_SUSPENDED
SET_HAS_KICKED_CONSTRAINED_TRANSITION(TRUE)
ENDIF
IF IS_TRANSITION_ACTIVE() = FALSE
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
ELSE
IF GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_WAIT_JOIN_FM_SESSION
OR GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_LOOK_FOR_FRESH_JOIN_FM
TRANSITION_CHANGE_STATE(TRANSITION_STATE_TERMINATE_SESSION)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - Head stright to the bail screen ", GET_BAIL_REASON_STRING(g_BailEvent.nBailReason))
HUD_CHANGE_STATE(HUD_STATE_BAIL)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_BAILED)
SET_BAIL_HAPPENED_DURING_JOIN(TRUE)
ENDIF
ENDIF
SET_JOINING_GAMEMODE(GAMEMODE_EMPTY)
SET_CURRENT_GAMEMODE(GAMEMODE_EMPTY)
//Set the transition sessions to clear up
IF IS_TRANSITION_SESSIONS_CORONA_CONTROLLER_IS_RUNNING()
SET_TRANSITION_SESSIONS_RECEIVED_BAIL_EVENT()
ELSE
RESET_TRANSITION_SESSION_NON_RESET_VARS()
RESET_TRANSITION_SESSION_CORONA_BISET()
ENDIF
SET_SKYFREEZE_FROZEN()
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_NETWORK_BAIL - Ignore it when in the Creators")
ENDIF
BREAK
/* BC: 08/05/2012 - Commented out as the hud chooses if the player needs to press a button to head back to SP.
g_TransitionData.bCouldNotJoinNetworkGame = TRUE
//BC 11/02/2012 added this so when a bail happens in MP or joining MP, SP will launch back up ok.
m_launchSPMain = TRUE
#IF IS_DEBUG_BUILD
PRINTSTRING("...KGM: Main Persistent Event Queue - Bail")
PRINTNL()
#ENDIF
// If not in MP, do nothing, let the game resume
// If in MP, then request a hotswap to the previous player character
IF (g_bInMultiplayer)
// ...was in MP, so sets up a hotswap to keep the return to SP consistent
MAKE_PLAYER_PED_SWITCH_REQUEST_FROM_MP_KICK(GET_LAST_KNOWN_PLAYER_PED_ENUM(), PR_TYPE_AMBIENT)
// ...re-launch SP Main
// m_launchSPMain = TRUE
ENDIF
// An MP bailout can occur at any time (ie: the player signs out using the PSN dashboard)
// We need to reset some stuff on return to SP.
ENABLE_SELECTOR()
g_bPerformingSessionChange = FALSE // incase the network fails while player is changing session. (added by Neil)
#IF IS_DEBUG_BUILD
PRINTSTRING("g_bPerformingSessionChange - set to FALSE in main_persistent")
PRINTNL()
#ENDIF
g_bInMultiplayer = FALSE
BREAK
*/
CASE EVENT_NETWORK_JOIN_SESSION_RESPONSE
PRINTLN("...KGM: CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_JOIN_SESSION_RESPONSE = ", GET_BAIL_RESPONSE_STRING(g_JoinResponseEvent.nResponseCode))
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, g_JoinResponseEvent, SIZE_OF(g_JoinResponseEvent))
BREAK
CASE EVENT_NETWORK_INVITE_ACCEPTED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_INVITE_ACCEPTED")
GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, InviteEvent, SIZE_OF(InviteEvent))
IF HAS_AIMTYPE_ALTERED_BY_INVITE()
PUT_AIMTYPE_BACK_TO_WHERE_IT_WAS()
SET_AIMTYPE_ALTERED_BY_INVITE(FALSE)
PRINTLN("[AIMPREF] CLEAR_EVENT_QUE - Another Invite being processed - put aimtype back ")
ENDIF
IF IS_PED_INJURED(PLAYER_PED_ID())
DO_SCREEN_FADE_OUT(0)
ENDIF
FORCE_PLAYER_BACK_INTO_PLAYING_STATE()
PRINTLN("...KGM: CLEAR_EVENT_QUE - (New Transition) Main Persistent Event Queue - EVENT_NETWORK_INVITE_ACCEPTED = ", GET_BAIL_RESPONSE_STRING(g_JoinResponseEvent.nResponseCode))
IF SHOULD_BLOCK_INVITE(InviteEvent, TRUE, FALSE) = FALSE
//Is the pause menu is active, then close it
IF NETWORK_IS_GAME_IN_PROGRESS()
AND NOT IS_PLAYER_IN_CORONA()
IF GET_PAUSE_MENU_STATE() != PM_INACTIVE
OR IS_PAUSE_MENU_ACTIVE()
OR IS_WARNING_MESSAGE_ACTIVE()
CLEAR_DYNAMIC_PAUSE_MENU_ERROR_MESSAGE()
PRINTLN("[TS] CLEAR_DYNAMIC_PAUSE_MENU_ERROR_MESSAGE")
IF GET_CURRENT_HUD_STATE() != HUD_STATE_SELECT_CHARACTER_FM
PRINTLN("[TS] CLEAR_EVENT_QUE - GET_PAUSE_MENU_STATE() != PM_INACTIVE - SET_FRONTEND_ACTIVE")
SET_FRONTEND_ACTIVE(FALSE)
ELSE
PRINTLN("[TS] CLEAR_EVENT_QUE - GET_PAUSE_MENU_STATE() != PM_INACTIVE - Trying to call SET_FRONTEND_ACTIVE(FALSE) but we're in the character selector screen.")
ENDIF
ENDIF
ENDIF
IF IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_WATCHING_MP_TV)
IF IS_PLAYER_SPECTATING(PLAYER_ID())
SET_BIT(MPSpecGlobals.iBailBitset, GLOBAL_SPEC_BAIL_BS_STOP_MPTV_SPECTATE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_INVITE_ACCEPTED: MP_TV - GLOBAL_SPEC_BAIL_BS_STOP_MPTV_SPECTATE SET")
ENDIF
ENDIF
IF IS_REPEAT_PLAY_ACTIVE()
// [10/08/21] Alex P (Dundee) - Appears that this should actually call SET_SINGLEPLAYER_END_NOW
// This section was added in CL 4813265 to address bugstar://1641900, almost 8 years old at this point so leaving as is
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_INVITE_ACCEPTED: IS_REPEAT_PLAY_ACTIVE = TRUE so calling SHOULD_END_SINGLEPLAYER")
SHOULD_END_SINGLEPLAYER()
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_INVITE_ACCEPTED: IS_REPEAT_PLAY_ACTIVE = FALSE ")
ENDIF
ENDIF
BREAK
CASE EVENT_NETWORK_INVITE_CONFIRMED
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, InviteEvent, SIZE_OF(InviteEvent))
RESET_SKYCAM_HOLD()
IF NOT (bCachedInvite)
PROCESS_INVITE_EVENTS(InviteEvent, bCachedInvite)
IF (bCachedInvite)
CachedInviteEvent = InviteEvent
PRINTLN("CLEAR_EVENT_QUE - caching invite event ")
ENDIF
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_INVITE_CONFIRMED: already processing a chached invite. ")
ENDIF
ENDIF
BREAK
CASE EVENT_NETWORK_INVITE_REJECTED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_INVITE_REJECTED")
IF GET_CURRENT_HUD_STATE() = HUD_STATE_SELECT_CHARACTER_FM
SET_SKYFREEZE_CLEAR(TRUE)
PRINTLN("CLEAR_EVENT_QUE - Invite rejected while on the character select screen - unfreeze the game. ")
ENDIF
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
IF STAT_IS_STATS_TRACKING_ENABLED()
PRINTLN("[BCLOAD] CLEAR_EVENT_QUE - EVENT_NETWORK_INVITE_REJECTED: Player is in director mode. calling STAT_DISABLE_STATS_TRACKING() ")
STAT_DISABLE_STATS_TRACKING()
ENDIF
ENDIF
IF HAS_AIMTYPE_ALTERED_BY_INVITE()
PUT_AIMTYPE_BACK_TO_WHERE_IT_WAS()
SET_AIMTYPE_ALTERED_BY_INVITE(FALSE)
PRINTLN("[AIMPREF] CLEAR_EVENT_QUE - Invite rejected - put aimtype back ")
ENDIF
BREAK
CASE EVENT_NETWORK_SUMMON
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SUMMON")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, SummonEvent, SIZE_OF(SummonEvent))
PROCESS_NETWORK_SUMMON_EVENT(SummonEvent)
ENDIF
BREAK
#IF NOT FEATURE_GEN9_STANDALONE
CASE EVENT_NETWORK_SIGN_IN_STATE_CHANGED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SIGN_IN_STATE_CHANGED")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, SignInEvent, SIZE_OF(SignInEvent))
#IF IS_DEBUG_BUILD
PRINTLN("...KGM: CLEAR_EVENT_QUE - (New Transition) Main Persistent Event Queue - Sign In Changed")
PRINTLN("EVENT_NETWORK_SIGN_IN_STATE_CHANGED -called ")
#ENDIF
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("...KGM: CLEAR_EVENT_QUE - (New Transition) Main Persistent Event Queue - Sign In Changed")
PRINTLN_FINAL("EVENT_NETWORK_SIGN_IN_STATE_CHANGED -called ")
#ENDIF
RESET_SKYCAM_HOLD()
IF GET_CONTRAINED_EVENT_ACTIVE()
PRINTLN("CLEAR_EVENT_QUE - GET_CONTRAINED_EVENT_ACTIVE = TRUE so ignore this signin event.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - GET_CONTRAINED_EVENT_ACTIVE = TRUE so ignore this signin event.")
#ENDIF
SET_CONTRAINED_EVENT_ACTIVE(FALSE)
EXIT
ENDIF
IF SignInEvent.bIsActiveUser
IF IS_ONLINE_POLICIES_MENU_ACTIVE() = FALSE
IF GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU
#IF IS_DEBUG_BUILD
PRINTLN("EVENT_NETWORK_SIGN_IN_STATE_CHANGED: GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU , calling CLOSE_SOCIAL_CLUB_MENU ")
#ENDIF
CLOSE_SOCIAL_CLUB_MENU()
ENDIF
ENDIF
RESET_SKYCAM_HOLD()
PROCESS_NET_SIGN_IN_STATE_CHANGED_EVENT(SignInEvent)
SET_PLAYER_HAVE_PRIVILEGES(HAS_ONLINE_PRIVILAGES())
g_b_Check_Chat_Restrictions_For_Message = FALSE // Run Chat restriction message Checks again.
IF GET_CURRENT_GAMEMODE() = GAMEMODE_SP
OR GET_CURRENT_GAMEMODE() = GAMEMODE_CREATOR
SET_ALL_CODE_STATS_NOT_LOADED()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: All Save data is being flattend, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: All Save data is being flattend, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
ENDIF
IF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IN FM All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IN FM All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
ENDIF
IF HAS_IMPORTANT_STATS_LOADED()
AND IS_TRANSITION_ACTIVE()
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: HAS_IMPORTANT_STATS_LOADED() and in the transition so flatten all the stats - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: HAS_IMPORTANT_STATS_LOADED() and in the transition so flatten all the stats - called ")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
ENDIF
ELSE
NET_NL()NET_PRINT("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bIsActiveUser = FALSE ")
ENDIF
//if we were on line and not is on line, i.e. in the store
IF SignInEvent.bWasOnline
AND NOT SignInEvent.bIsOnline
//And we're in the store
AND SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
//reset for SP bail
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
IF IS_TRANSITION_ACTIVE() = FALSE
IF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
OR GET_CURRENT_GAMEMODE() = GAMEMODE_CREATOR
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: in FM or the creates and lost bIsOnline connection, head back to SP")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: in FM or the creates and lost bIsOnline connection, head back to SP")
#ENDIF
SET_FRONTEND_ACTIVE(FALSE)
SET_SKYFREEZE_FROZEN()
REQUEST_TRANSITION(GET_CURRENT_TRANSITION_STATE(), GAMEMODE_SP, GET_CURRENT_HUD_STATE())
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: we're in SP, ignore event BUG 2624445")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: we're in SP, ignore event - BUG 2624445")
#ENDIF
ENDIF
ENDIF
//fix for - 1984182 - Stuck transitioning back to freemode after losing PSN connection while in the game store
ENDIF
IF SignInEvent.bIsActiveUser
IF (SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, mark flag to suppres the invites again when heading back to SP. \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, mark flag to suppres the invites again when heading back to SP. \n")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
IF IS_XBOX_PLATFORM()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_XBOX_PLATFORM() so freeze the camera ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_XBOX_PLATFORM() so freeze the camera ")
#ENDIF
//Only do this if we're in MP
IF IS_PLAYER_A_SP_CHARACTER() = FALSE
AND GET_IS_PLAYER_IN_ANIMAL_FORM() = FALSE
AND IS_TRANSITION_ACTIVE() = FALSE
AND IS_PLAYER_SWITCH_IN_PROGRESS() = FALSE
SET_SKYFREEZE_FROZEN(TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_TRANSITION_ACTIVE()
AND NOT HAVE_ANY_TRANSITION_BAILS_HAPPENED() = FALSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_TRANSITION_ACTIVE All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_TRANSITION_ACTIVE All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#ENDIF
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
IF NETWORK_IS_SIGNED_ONLINE() = FALSE
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE, but already handling something going wrong, ignore \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ELIF ((IS_PS3_VERSION() OR IS_PLAYSTATION_PLATFORM()) AND NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline)
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ELIF ((IS_PS3_VERSION() OR IS_PLAYSTATION_PLATFORM()) AND SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline)
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
SET_QUICKLAUNCH_STATE(QUICKLAUNCH_EMPTY)
#ENDIF
TELL_TRANSITION_BAIL_HAPPENED(TRUE)
ELSE
#IF USE_FINAL_PRINTS
IF HAVE_ANY_TRANSITION_BAILS_HAPPENED()
PRINTLN("EVENT_NETWORK_SIGN_IN_STATE_CHANGED: ignore transition action as HAVE_ANY_TRANSITION_BAILS_HAPPENED = TRUE \n ")
ENDIF
#ENDIF
ENDIF
ENDIF
BREAK
#ENDIF // NOT FEATURE_GEN9_STANDALONE
#IF FEATURE_GEN9_STANDALONE
CASE EVENT_NETWORK_SIGN_IN_STATE_CHANGED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SIGN_IN_STATE_CHANGED")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, SignInEvent, SIZE_OF(SignInEvent))
RESET_SKYCAM_HOLD()
IF GET_CONTRAINED_EVENT_ACTIVE()
PRINTLN("CLEAR_EVENT_QUE - GET_CONTRAINED_EVENT_ACTIVE = TRUE so ignore this signin event.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - GET_CONTRAINED_EVENT_ACTIVE = TRUE so ignore this signin event.")
#ENDIF
SET_CONTRAINED_EVENT_ACTIVE(FALSE)
EXIT
ENDIF
IF SignInEvent.bIsActiveUser
IF IS_ONLINE_POLICIES_MENU_ACTIVE() = FALSE
IF GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU
#IF IS_DEBUG_BUILD
PRINTLN("EVENT_NETWORK_SIGN_IN_STATE_CHANGED: GET_PAUSE_MENU_STATE() = PM_IN_SC_MENU , calling CLOSE_SOCIAL_CLUB_MENU ")
#ENDIF
CLOSE_SOCIAL_CLUB_MENU()
ENDIF
ENDIF
g_b_Check_Chat_Restrictions_For_Message = FALSE // Run Chat restriction message Checks again.
IF GET_CURRENT_GAMEMODE() = GAMEMODE_SP
OR GET_CURRENT_GAMEMODE() = GAMEMODE_CREATOR
SET_ALL_CODE_STATS_NOT_LOADED()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: All Save data is being flattend, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: All Save data is being flattend, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
ENDIF
IF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IN FM All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IN FM All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
ENDIF
IF HAS_IMPORTANT_STATS_LOADED()
AND IS_TRANSITION_ACTIVE()
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: HAS_IMPORTANT_STATS_LOADED() and in the transition so flatten all the stats - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: HAS_IMPORTANT_STATS_LOADED() and in the transition so flatten all the stats - called ")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
ENDIF
ENDIF
//if we were on line and not is on line, i.e. in the store
IF SignInEvent.bWasOnline
AND NOT SignInEvent.bIsOnline
//And we're in the store
AND SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
//reset for SP bail
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
IF IS_TRANSITION_ACTIVE() = FALSE
IF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
OR GET_CURRENT_GAMEMODE() = GAMEMODE_CREATOR
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: in FM or the creates and lost bIsOnline connection, head back to SP")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: in FM or the creates and lost bIsOnline connection, head back to SP")
#ENDIF
SET_FRONTEND_ACTIVE(FALSE)
SET_SKYFREEZE_FROZEN()
REQUEST_TRANSITION(GET_CURRENT_TRANSITION_STATE(), GAMEMODE_SP, GET_CURRENT_HUD_STATE())
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: we're in SP, ignore event BUG 2624445")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: we're in SP, ignore event - BUG 2624445")
#ENDIF
ENDIF
ENDIF
//fix for - 1984182 - Stuck transitioning back to freemode after losing PSN connection while in the game store
ENDIF
IF SignInEvent.bIsActiveUser
IF (SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, mark flag to suppres the invites again when heading back to SP. \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, mark flag to suppres the invites again when heading back to SP. \n")
#ENDIF
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
IF IS_XBOX_PLATFORM()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_XBOX_PLATFORM() so freeze the camera ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_XBOX_PLATFORM() so freeze the camera ")
#ENDIF
//Only do this if we're in MP
IF IS_PLAYER_A_SP_CHARACTER() = FALSE
AND GET_IS_PLAYER_IN_ANIMAL_FORM() = FALSE
AND IS_TRANSITION_ACTIVE() = FALSE
AND IS_PLAYER_SWITCH_IN_PROGRESS() = FALSE
SET_SKYFREEZE_FROZEN(TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_TRANSITION_ACTIVE()
AND NOT HAVE_ANY_TRANSITION_BAILS_HAPPENED() = FALSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_TRANSITION_ACTIVE All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: IS_TRANSITION_ACTIVE All Save data is being flatted, also add in the invite so this goes back to being TRUE NETWORK_SUPPRESS_INVITE(TRUE) - called ")
#ENDIF
SET_ALL_CODE_STATS_NOT_LOADED_AND_MARK_FOR_RELOAD()
SET_HAS_ENTERED_GTAO_THIS_BOOT(FALSE)
SET_BEEN_IN_GTAO_THIS_BOOT(FALSE)
NETWORK_SUPPRESS_INVITE(TRUE)
RESET_NET_TIMER(SignInLoadStatsTimer)
g_Private_Is_Running_Boot_Invite_Supress = TRUE
SET_RETURN_TO_SP_RELOAD(FALSE)
IF NETWORK_IS_SIGNED_ONLINE() = FALSE
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE, but already handling something going wrong, ignore \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NETWORK_IS_SIGNED_ONLINE() = FALSE, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ELIF ((IS_PROSPERO_VERSION()) AND NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline)
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: NOT SignInEvent.bWasOnline AND SignInEvent.bIsOnline, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ELIF ((IS_PROSPERO_VERSION()) AND SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline)
IF GET_CURRENT_HUD_STATE() != HUD_STATE_CLOUD_FAIL
AND GET_CURRENT_HUD_STATE() != HUD_STATE_NOT_ONLINE
AND GET_CURRENT_TRANSITION_STATE() != TRANSITION_STATE_WAIT_FOR_SINGLEPLAYER_TO_START
SET_BAIL_STILL_VALID(FALSE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline \n")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline \n ")
#ENDIF
HUD_CHANGE_STATE(HUD_STATE_NOT_ONLINE)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ELSE
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED: SignInEvent.bWasOnline AND NOT SignInEvent.bIsOnline, but already handling something going wrong, ignore \n ")
#ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
SET_QUICKLAUNCH_STATE(QUICKLAUNCH_EMPTY)
#ENDIF
TELL_TRANSITION_BAIL_HAPPENED(TRUE)
ELSE
#IF USE_FINAL_PRINTS
IF HAVE_ANY_TRANSITION_BAILS_HAPPENED()
PRINTLN("EVENT_NETWORK_SIGN_IN_STATE_CHANGED: ignore transition action as HAVE_ANY_TRANSITION_BAILS_HAPPENED = TRUE \n ")
ENDIF
#ENDIF
ENDIF
IF NOT SignInEvent.bIsSignedIn AND SignInEvent.bWasSignedIn
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SIGN_IN_STATE_CHANGED - EventData valid, requesting transition to IIS")
CLEAR_SCRIPT_ROUTER_LINK()
REQUEST_TRANSITION_TO_IIS()
ENDIF
ENDIF
BREAK
#ENDIF // NOT FEATURE_GEN9_STANDALONE
CASE EVENT_NETWORK_APP_LAUNCHED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_APP_LAUNCHED")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, AppLaunchEvent, SIZE_OF(AppLaunchEvent))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - App Launched. EVENT_NETWORK_APP_LAUNCHED - called")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - App Launched. EVENT_NETWORK_APP_LAUNCHED - called")
#ENDIF
PROCESS_NET_APP_LAUNCHED_EVENT(AppLaunchEvent)
ENDIF
BREAK
CASE EVENT_NETWORK_SYSTEM_SERVICE_EVENT
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SYSTEM_SERVICE_EVENT")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, SystemServiceEvent, SIZE_OF(SystemServiceEvent))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - called")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - called")
#ENDIF
IF IS_PLAYSTATION_PLATFORM()
AND NETWORK_IS_NP_AVAILABLE() = FALSE
AND SystemServiceEvent.nEventID != ENUM_TO_INT(EVENT_SUSPENDED)
AND SystemServiceEvent.nEventID != ENUM_TO_INT(EVENT_RESUMING)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_PLAYSTATION_PLATFORM() AND NETWORK_IS_NP_AVAILABLE() = FALSE - NETWORK_GET_NP_UNAVAILABLE_REASON = ", NETWORK_GET_NP_UNAVAILABLE_REASON())
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_PLAYSTATION_PLATFORM() AND NETWORK_IS_NP_AVAILABLE() = FALSE - NETWORK_GET_NP_UNAVAILABLE_REASON = ", NETWORK_GET_NP_UNAVAILABLE_REASON())
#ENDIF
IF SystemServiceEvent.nEventID = ENUM_TO_INT(EVENT_INVITATION_RECEIVED)
IF (NETWORK_GET_NP_UNAVAILABLE_REASON() = REASON_AGE)
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_UNDERAGE_NEXTGEN, TRUE)
bGoBackToSP = TRUE
ELIF (NETWORK_GET_NP_UNAVAILABLE_REASON() = REASON_GAME_UPDATE)
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_GAME_UPDATE, TRUE)
bGoBackToSP = TRUE
ELIF (NETWORK_GET_NP_UNAVAILABLE_REASON() = REASON_SYSTEM_UPDATE)
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_SYSTEM_UPDATE, TRUE)
bGoBackToSP = TRUE
ELIF (NETWORK_GET_NP_UNAVAILABLE_REASON() = REASON_CONNECTION)
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_SYSTEM_NP_CONNECTION, TRUE)
#IF FEATURE_GEN9_EXCLUSIVE
IF IS_PROSPERO_VERSION()
AND NOT NETWORK_IS_SIGNED_IN()
AND (GET_CURRENT_GAMEMODE() = GAMEMODE_SP OR GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY)
//PS5 is no longer showing the sign in UI like PS4 so setting this will bring up the sign in screen
SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_BAIL_DROPINVITE_SIGNIN, TRUE)
ELSE
#ENDIF
bGoBackToSP = TRUE
#IF FEATURE_GEN9_EXCLUSIVE
ENDIF
#ENDIF
#IF FEATURE_GEN9_EXCLUSIVE
ELIF (NETWORK_GET_NP_UNAVAILABLE_REASON() = REASON_SIGNED_OUT)
AND IS_PROSPERO_VERSION()
AND (GET_CURRENT_GAMEMODE() = GAMEMODE_SP OR GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY)
//PS5 is no longer showing the sign in UI like PS4 so setting this will bring up the sign in screen
SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_BAIL_DROPINVITE_SIGNIN, TRUE)
#ENDIF
ENDIF
ENDIF
ELIF IS_PLAYSTATION_PLATFORM()
AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE
AND SystemServiceEvent.nEventID != ENUM_TO_INT(EVENT_SUSPENDED)
AND SystemServiceEvent.nEventID != ENUM_TO_INT(EVENT_RESUMING)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_PLAYSTATION_PLATFORM() AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_PLAYSTATION_PLATFORM() AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE")
#ENDIF
IF GET_CURRENT_GAMEMODE() = GAMEMODE_SP
OR GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY
bDoCameraUp = FALSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - Skip Camera up as we're in SP and the player isn't going anywhere")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - Skip Camera up as we're in SP and the player isn't going anywhere")
#ENDIF
ENDIF
NETWORK_SHOW_ACCOUNT_UPGRADE_UI()
g_bSystem_Service_event_Shown_Upgrade = TRUE
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_NO_SUBSCRIPTION, TRUE)
bGoBackToSP = TRUE
ELIF IS_XBOX_PLATFORM()
AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE
AND NETWORK_IS_SIGNED_IN()
AND GET_CURRENT_GAMEMODE() = GAMEMODE_FM
IF SCRIPT_NETWORK_CAN_ACCESS_MULTIPLAYER(nAccessCode) = FALSE
AND nAccessCode = ACCESS_DENIED_NO_ONLINE_PRIVILEGE
DOES_PLAYER_HAVE_XBOX_PERMISSIONS(TRUE)
ELSE
DOES_PLAYER_HAVE_XBOX_GOLD_MEMBERSHIP(TRUE)
ENDIF
g_bSystem_Service_event_Shown_Upgrade = TRUE
// SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_TRANSITION_UNDERAGE,TRUE)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_XBOX_PLATFORM() AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - IS_XBOX_PLATFORM() AND NETWORK_HAVE_PLATFORM_SUBSCRIPTION() = FALSE ")
#ENDIF
IF IS_TRANSITION_ACTIVE() = FALSE
AND NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE() = FALSE
AND NETWORK_HAS_CONFIRMED_INVITE() = FALSE
AND LOBBY_AUTO_MULTIPLAYER_FREEMODE() = FALSE
SET_SYSTEM_SERVICE_TRIGGERED(TRUE)
ENDIF
bGoBackToSP = TRUE
ELIF IS_XBOX_PLATFORM()
AND SystemServiceEvent.nEventID = ENUM_TO_INT(EVENT_RESUMING)
AND GET_CURRENT_HUD_STATE() = HUD_STATE_SELECT_CHARACTER_FM
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - SystemServiceEvent.nEventID = ENUM_TO_INT(EVENT_RESUMING) ")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT - SystemServiceEvent.nEventID = ENUM_TO_INT(EVENT_RESUMING) ")
#ENDIF
SET_CONTRAINED_EVENT_ACTIVE(TRUE)
HUD_CHANGE_STATE(HUD_STATE_CONSTRAINED)
SET_CURRENT_TRANSITION_BAILING_OPTIONS(BAILING_OPTIONS_NOT_CONNECTED)
TRANSITION_CHANGE_STATE(TRANSITION_STATE_WAIT_HUD_EXIT)
ENDIF
IF bGoBackToSP
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("startup_positioning")) > 0
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("startup_positioning")
CPRINTLN(DEBUG_INIT_SP, "<Main_Persistent> CLEAR_EVENT_QUE - EVENT_NETWORK_SYSTEM_SERVICE_EVENT has come in, Maintransition will cleanup so kill <startup_positioning> now ")
PRINTLN(" EVENT_NETWORK_SYSTEM_SERVICE_EVENT - Event came in while SP is still setting up, no need as the transition will setup SP again, so shutdown startup_positioning.sc ")
ENDIF
//reset for SP bail
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
IF IS_TRANSITION_ACTIVE() = FALSE
SET_FRONTEND_ACTIVE(FALSE)
IF bDoCameraUp
SET_EMERGENCY_SKYCAM_UP_RUNNING(TRUE)
ENDIF
SET_SKYFREEZE_FROZEN()
IF (GET_CURRENT_TRANSITION_STATE() = TRANSITION_STATE_TERMINATE_SESSION)
PRINTLN("EVENT_NETWORK_SYSTEM_SERVICE_EVENT - calling REQUEST_TRANSITION_TERMINATE_MP_SESSION")
REQUEST_TRANSITION_TERMINATE_MP_SESSION()
ELSE
PRINTLN("EVENT_NETWORK_SYSTEM_SERVICE_EVENT - calling REQUEST_TRANSITION")
REQUEST_TRANSITION(GET_CURRENT_TRANSITION_STATE(), GAMEMODE_SP, GET_CURRENT_HUD_STATE())
ENDIF
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
ENDIF
ENDIF
bGoBackToSP = FALSE
bDoCameraUp = TRUE
ENDIF
BREAK
CASE EVENT_NETWORK_REQUEST_DELAY
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_REQUEST_DELAY")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, NetworkRequestDelayEvent, SIZE_OF(NetworkRequestDelayEvent))
PRINTLN("...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_REQUEST_DELAY - called")
SET_SERVER_REQUEST_DELAY_TIME(NetworkRequestDelayEvent.delayTimeMs)
ENDIF
BREAK
CASE EVENT_NETWORK_PRESENCE_INVITE
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PRESENCE_INVITE")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, PresenceInviteEvent, SIZE_OF(PresenceInviteEvent))
PRINTLN("...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_PRESENCE_INVITE -called ")
ENDIF
BREAK
CASE EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED")
//IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, PresenceInviteEvent, SIZE_OF(PresenceInviteEvent))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED -called ")
IF NETWORK_HAS_SOCIAL_CLUB_ACCOUNT()
SET_CHARACTER_LAST_GEN_CHECK(LAST_GEN_STATUS_NONE)
SET_PLAYER_LAST_GEN_CHECK(LAST_GEN_STATUS_NONE)
g_i_Private_LastGenCharacterAttempt = 0
PRINTLN("[LASTGEN] CLEAR_EVENT_QUE - EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED - NETWORK_HAS_SOCIAL_CLUB_ACCOUNT is TRUE. Reset all the checks to run again.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("[LASTGEN] CLEAR_EVENT_QUE - EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED - NETWORK_HAS_SOCIAL_CLUB_ACCOUNT is TRUE. Reset all the checks to run again.")
#ENDIF
ELSE
NET_NL()NET_PRINT("[LASTGEN] CLEAR_EVENT_QUE - EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED - NETWORK_HAS_SOCIAL_CLUB_ACCOUNT is FALSE. Do nothing.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("[LASTGEN] CLEAR_EVENT_QUE - EVENT_NETWORK_SOCIAL_CLUB_ACCOUNT_LINKED - NETWORK_HAS_SOCIAL_CLUB_ACCOUNT is FALSE. Do nothing.")
#ENDIF
ENDIF
// ENDIF
BREAK
CASE EVENT_NETWORK_SCADMIN_RECEIVED_CASH
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SCADMIN_RECEIVED_CASH")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, scEventReceivedCash, SIZE_OF(scEventReceivedCash))
CPRINTLN(DEBUG_SYSTEM,"CLEAR_EVENT_QUE - Player ",scEventReceivedCash.characterId, " received cash value ",scEventReceivedCash.cashAmount," from SCAdmin")
CREDIT_BANK_ACCOUNT(INT_TO_ENUM(enumCharacterList,scEventReceivedCash.characterId),BAAC_CASH_DEPOSIT,scEventReceivedCash.cashAmount)
ENDIF
BREAK
CASE EVENT_NETWORK_SCADMIN_PLAYER_UPDATED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SCADMIN_PLAYER_UPDATED")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, ScAdminPlayerUpdated, SIZE_OF(ScAdminPlayerUpdated))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED -called ")
inventoryRefresh = FALSE
PlayerBalanceRefresh = FALSE
//Possible hashes are : CASH, ITEMS, XP
IF ScAdminPlayerUpdated.m_awardTypeHash = 1
//Miguel will give me the hash, cash or items
PRINTLN("[NET_SHOP] CLEAR_EVENT_QUE - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED: m_awardTypeHash = ", ScAdminPlayerUpdated.m_awardTypeHash, " ")
ENDIF
IF ScAdminPlayerUpdated.m_awardAmount != 0
//Cash amount
PRINTLN("[NET_SHOP] CLEAR_EVENT_QUE - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED: m_awardAmount = ", ScAdminPlayerUpdated.m_awardAmount, " ")
IF ScAdminPlayerUpdated.m_awardAmount = -99
g_i_DoCashGiftMessageAmount = -99
g_i_DoCashGiftACTUALAmount = ScAdminPlayerUpdated.m_awardAmount
ELIF ScAdminPlayerUpdated.m_awardAmount < 0
g_i_DoCashGiftMessageAmount = -1
g_i_DoCashGiftACTUALAmount = ScAdminPlayerUpdated.m_awardAmount
ELIF ScAdminPlayerUpdated.m_awardAmount > 0
g_i_DoCashGiftMessageAmount = 1
g_i_DoCashGiftACTUALAmount = ScAdminPlayerUpdated.m_awardAmount
ENDIF
PlayerBalanceRefresh = TRUE
ENDIF
FOR I = 0 TO MAX_NUM_ITEMS-1
IF ScAdminPlayerUpdated.m_items[I] != 0
//Item
PRINTLN("[NET_SHOP] CLEAR_EVENT_QUE - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED: m_items[", I, "] = ", ScAdminPlayerUpdated.m_awardAmount, " ")
inventoryRefresh = TRUE
ENDIF
ENDFOR
//more might come through here.
IF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
//in SP ignore this
//this will start a session refresh
IF ScAdminPlayerUpdated.m_fullRefreshRequested = 1
//call native command
PRINTLN("[NET_SHOP] CLEAR_EVENT_QUE - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED: m_fullRefreshRequested = TRUE , inventoryRefresh = ",inventoryRefresh, " , PlayerBalanceRefresh = ", PlayerBalanceRefresh, " ")
NET_GAMESERVER_START_SESSION_RESTART(inventoryRefresh, PlayerBalanceRefresh)
ENDIF
//in SP ignore this
//in MP get the update player balance
IF ScAdminPlayerUpdated.m_updatePlayerBalance = 1
PRINTLN("[NET_SHOP] CLEAR_EVENT_QUE - EVENT_NETWORK_SCADMIN_PLAYER_UPDATED: m_updatePlayerBalance = TRUE ")
ENDIF
ENDIF
ENDIF
BREAK
CASE EVENT_NETWORK_ADMIN_INVITED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_ADMIN_INVITED")
//players in the session about to recieve an R* admin player are sent this.
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, AdminInviteEvent, SIZE_OF(AdminInviteEvent))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_ADMIN_INVITED -called ")
IF NETWORK_IS_HOST()
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_ADMIN_INVITED: IS HOST - NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = ")NET_PRINT_INT(NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV))
IF NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = 0
// AdminInviteEvent.hInviter
//
FOR FindPlayerInt = 0 TO NUM_NETWORK_PLAYERS-1
FindPlayerIndex = INT_TO_NATIVE(PLAYER_INDEX, FindPlayerInt)
IF IS_PLAYER_SCTV(FindPlayerIndex)
AND NETWORK_PLAYER_IS_ROCKSTAR_DEV(FindPlayerIndex) = FALSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_ADMIN_INVITED: KICKING Spectator ", GET_PLAYER_NAME(FindPlayerIndex), " player index = ", FindPlayerInt)
BROADCAST_SCRIPT_EVENT_BAIL_ME_FOR_SCTV(FindPlayerIndex)
FindPlayerInt = NUM_NETWORK_PLAYERS
ENDIF
ENDFOR
ENDIF
ELSE
PRINTLN("EVENT_NETWORK_ADMIN_INVITED: NOT HOST - NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = ", NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV))
ENDIF
ENDIF
BREAK
CASE EVENT_NETWORK_SPECTATE_LOCAL
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SPECTATE_LOCAL")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, SpecLocalEvent, SIZE_OF(SpecLocalEvent))
PRINTLN("CLEAR_EVENT_QUE - ...KGM: (New Transition) Main Persistent Event Queue - EVENT_NETWORK_SPECTATE_LOCAL -called ")
IF NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) > 0
IF IS_GAMER_HANDLE_VALID(SpecLocalEvent.hGamer)
//ThePlayerForSpecLocal = NETWORK_GET_PLAYER_FROM_GAMER_HANDLE(SpecLocalEvent.hGamer)
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SPECTATE_LOCAL: NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = ", NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV))
IF NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = 0
FOR FindPlayerInt = 0 TO NUM_NETWORK_PLAYERS-1
FindPlayerIndex = INT_TO_NATIVE(PLAYER_INDEX, FindPlayerInt)
IF IS_PLAYER_SCTV(FindPlayerIndex)
AND NETWORK_PLAYER_IS_ROCKSTAR_DEV(FindPlayerIndex) = FALSE
PRINTLN("EVENT_NETWORK_SPECTATE_LOCAL: KICKING Spectator ", GET_PLAYER_NAME(FindPlayerIndex), " player index = ", FindPlayerInt)
BROADCAST_SCRIPT_EVENT_BAIL_ME_FOR_SCTV(FindPlayerIndex)
FindPlayerInt = NUM_NETWORK_PLAYERS
ENDIF
ENDFOR
ENDIF
SET_FRONTEND_ACTIVE(FALSE)
NETWORK_SESSION_SET_MATCHMAKING_GROUP(MM_GROUP_SCTV)
FindPlayerIndex = NETWORK_GET_PLAYER_FROM_GAMER_HANDLE(SpecLocalEvent.hGamer)
IF FindPlayerIndex != INVALID_PLAYER_INDEX()
MPSpecGlobals.pedDesiredFocus = GET_PLAYER_PED(FindPlayerIndex)
MPSpecGlobals.pedCurrentFocus = GET_PLAYER_PED(FindPlayerIndex)
PRINTLN("EVENT_NETWORK_SPECTATE_LOCAL: MPSpecGlobals.pedDesiredFocus = ", GET_PLAYER_NAME(FindPlayerIndex))
PRINTLN("EVENT_NETWORK_SPECTATE_LOCAL: MPSpecGlobals.pedCurrentFocus = ", GET_PLAYER_NAME(FindPlayerIndex))
SET_SCTV_FOLLOW_TARGET(FindPlayerIndex)
ENDIF
//2473835, pause the renderphase if we're in chris's special SCTV camera
IF NATIVE_TO_INT(PLAYER_ID()) > -1
IF IS_BIT_SET(GlobalplayerBD_FM_3[NATIVE_TO_INT(PLAYER_ID())].iFmAmbientEventBitSet, ciSET_PLAYER_IS_PENNED_IN_SPECTATOR)
SET_SKYFREEZE_FROZEN(TRUE)
ENDIF
ENDIF
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SPECTATE_LOCAL: SET_PLAYER_TEAM(PLAYER_ID(), TEAM_SCTV)")
SET_ENTERED_GAME_AS_SCTV(TRUE)
IF IS_ROCKSTAR_DEV()
SET_ENTERED_GAME_AS_PRIVATE_SCTV(TRUE)
ENDIF
SET_PLAYER_TEAM(PLAYER_ID(), TEAM_SCTV)
ENDIF
ELSE
PRINTLN("CLEAR_EVENT_QUE - EVENT_NETWORK_SPECTATE_LOCAL: NETWORK_SESSION_GET_MATCHMAKING_GROUP_FREE(MM_GROUP_SCTV) = 0, not moving.")
SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_NO_SPECTATE_SPACES, TRUE)
ENDIF
ENDIF
BREAK
//Transition session events.
CASE EVENT_NETWORK_PLAYER_LEFT_SESSION
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PLAYER_LEFT_SESSION")
IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, iCount, data, SIZE_OF(data))
PROCESS_EVENT_NETWORK_TRANSITION_PLAYER_LEFT(data)
#IF IS_DEBUG_BUILD
ELSE
SCRIPT_ASSERT("IF GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_NETWORK, eventID, data, SIZE_OF(data))")
#ENDIF
ENDIF
BREAK
CASE EVENT_NETWORK_TRANSITION_STARTED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_STARTED")
PROCESS_EVENT_NETWORK_TRANSITION_STARTED(iCount)
IF NETWORK_IS_TRANSITION_HOST()
PRINTLN("[TS] - CLEAR_EVENT_QUE - EVENT_NETWORK_TRANSITION_STARTED - NETWORK_SET_ACTIVITY_SPECTATOR_MAX(", GET_MAX_NUMBER_OF_SPECTATORS(), ")")
NETWORK_SET_ACTIVITY_SPECTATOR_MAX(GET_MAX_NUMBER_OF_SPECTATORS())
ENDIF
BREAK
CASE EVENT_NETWORK_TRANSITION_EVENT
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_PARAMETER_CHANGED")
PROCESS_EVENT_NETWORK_TRANSITION_EVENT(iCount)
BREAK
CASE EVENT_NETWORK_TRANSITION_PARAMETER_CHANGED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_PARAMETER_CHANGED")
PROCESS_EVENT_NETWORK_TRANSITION_PARAMETER_CHANGED(iCount)
BREAK
CASE EVENT_NETWORK_TRANSITION_STRING_CHANGED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_STRING_CHANGED")
PROCESS_EVENT_NETWORK_TRANSITION_STRING_CHANGED(iCount)
BREAK
CASE EVENT_NETWORK_TRANSITION_MEMBER_JOINED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_MEMBER_JOINED")
PROCESS_EVENT_NETWORK_TRANSITION_MEMBER_JOINED(iCount)
BREAK
CASE EVENT_NETWORK_TRANSITION_MEMBER_LEFT
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_MEMBER_LEFT")
PROCESS_EVENT_NETWORK_TRANSITION_MEMBER_LEFT(iCount)
BREAK
CASE EVENT_NETWORK_TRANSITION_GAMER_INSTRUCTION
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_TRANSITION_GAMER_INSTRUCTION")
PROCESS_EVENT_NETWORK_TRANSITION_GAMER_INSTRUCTION(iCount)
BREAK
CASE EVENT_NETWORK_PRESENCE_INVITE_REPLY
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PRESENCE_INVITE_REPLY")
PROCESS_EVENT_NETWORK_INVITE_REPLY(iCount)
BREAK
CASE EVENT_NETWORK_PRESENCE_TRIGGER
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PRESENCE_TRIGGER")
PROCESS_EVENT_NETWORK_PRESENCE_TRIGGER(iCount)
BREAK
CASE EVENT_NETWORK_PRESENCE_INVITE_REMOVED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PRESENCE_INVITE_REMOVED")
PROCESS_EVENT_NETWORK_INVITE_REMOVED(iCount)
BREAK
CASE EVENT_NETWORK_CASH_TRANSACTION_LOG
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_CASH_TRANSACTION_LOG")
PROCESS_EVENT_NETWORK_ATM_LOG(iCount)
BREAK
CASE EVENT_NETWORK_NETWORK_ROS_CHANGED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_NETWORK_ROS_CHANGED")
PROCESS_EVENT_NETWORK_NETWORK_ROS_CHANGED(iCount)
BREAK
CASE EVENT_NETWORK_FOLLOW_INVITE_RECEIVED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_FOLLOW_INVITE_RECEIVED")
PROCESS_EVENT_NETWORK_FOLLOW_INVITE_RECEIVED(iCount)
BREAK
//Added by Steve T 16/01/15. We need to support Eyefind email notifications regardless of Social Club account linking. See #2195214
CASE EVENT_NETWORK_EMAIL_RECEIVED
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_EMAIL_RECEIVED")
PROCESS_MAINPER_NETWORK_EMAIL_RECEIVED_EVENT()
BREAK
//Added by Steve T 14/10/15. We need to support email notifications for Marketing events. #2534125 and #2556742
CASE EVENT_NETWORK_MARKETING_EMAIL_RECEIVED//We need the new Event from Camille put in here.
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_MARKETING_EMAIL_RECEIVED")
#if IS_DEBUG_BUILD
cdPrintString("Main_Persistent - Received Marketing Email Event. Processing..,")
cdPrintnl()
#endif
PROCESS_MAINPER_NETWORK_MARKETING_EMAIL_RECEIVED_EVENT()
BREAK
// KGM 12/7/14: To Handle the asynchonous checking for blocked players when receiving a same-session Invite or Basic Invite from a player
CASE EVENT_NETWORK_PERMISSION_CHECK_RESULT
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_PERMISSION_CHECK_RESULT")
Process_Event_Network_Permission_Check_Result(iCount)
BREAK
CASE EVENT_NETWORK_SHOP_TRANSACTION
PRINTLN("CLEAR_EVENT_QUE - Process event: EVENT_NETWORK_SHOP_TRANSACTION")
PRINTLN("[CASH] RECEIVED SHOP TRANSACTION EVENT: EVENT_NETWORK_SHOP_TRANSACTION")
PROCESS_EVENT_NETWORK_SHOP_TRANSACTION(iCount)
BREAK
#IF FEATURE_GTAO_MEMBERSHIP
CASE EVENT_NETWORK_SC_BENEFITS_STATUS
PROCESS_EVENT_NETWORK_SC_BENEFITS_STATUS(iCount)
BREAK
#ENDIF
ENDSWITCH
ENDIF
ENDREPEAT
ENDPROC
USING "streamed_scripts.sch"
USING "transition_common.sch"
//Relaunch the main freemode script
FUNC BOOL MAINTAIN_LAUNCHING_FREEMODE_SCRIPT()
SET_CURRENT_GAMEMODE(GAMEMODE_FM)
IF NETWORK_IS_SCRIPT_ACTIVE(GET_LAUNCH_SCRIPT_NAME(), -1, TRUE) = FALSE
PRINTLN("MAINTAIN_LAUNCHING_FREEMODE_SCRIPT - main_persistant - GET_FRAME_COUNT START_LAUNCH_SCRIPT = ", GET_FRAME_COUNT())
IF START_LAUNCH_SCRIPT()
DISABLE_SCRIPT_BRAIN_SET(SCRIPT_BRAIN_GROUP_SINGLE_PLAYER)
DISABLE_SCRIPT_BRAIN_SET(SCRIPT_BRAIN_GROUP_CNC)
ENABLE_SCRIPT_BRAIN_SET(SCRIPT_BRAIN_GROUP_MULTIPLAYER)
ENABLE_SCRIPT_BRAIN_SET(SCRIPT_BRAIN_GROUP_FREEMODE)
SET_TRANSITION_TO_IGNORE_LAUNCH_SCRIPT_START(TRUE)
ENTERING_FRESH_GAME()
PRINTLN("MAINTAIN_LAUNCHING_FREEMODE_SCRIPT - main_persistant - START_LAUNCH_SCRIPT = TRUE = ", GET_FRAME_COUNT())
RETURN TRUE
ENDIF
ELSE
PRINTLN("[TS] NETWORK_IS_SCRIPT_ACTIVE(GET_LAUNCH_SCRIPT_NAME(), -1, TRUE) = TRUE")
ENDIF
RETURN FALSE
ENDFUNC
PROC MAINTAIN_RELAUNCHING_FREEMODE_AFTER_JIP()
//wait for the network game to be in progress and to have recieved the event that launch is done
IF NETWORK_IS_GAME_IN_PROGRESS()
AND HAS_TRANSITION_SESSION_HAS_RECIEVED_EVENT_TRANSITION_END_LAUNCH()
//If we've reguested the scripts
IF sTranVars.bRequestScriptsJip = TRUE
//load and launch freemode
IF MAINTAIN_LAUNCHING_FREEMODE_SCRIPT()
//clean up
RESET_TRANSITION_SESSION_NON_RESET_VARS()
CLEAR_TRANSITION_SESSIONS_BITSET()
CLEAR_TRANSITION_SESSION_LAUNCHING()
//set up the jip flag
SET_TRANSITION_SESSION_USED_JIP()
sTranVars.bRequestScriptsJip = FALSE
ENDIF
ELSE
PRINTLN("[TS] main_persistant - waiting for NETWORK_IS_GAME_IN_PROGRESS to be false")
ENDIF
ELSE
//Network game not in progress request script and wait
PRINTLN("[TS] main_persistant - NETWORK_IS_GAME_IN_PROGRESS = FALSE")
IF sTranVars.bRequestScriptsJip = FALSE
SET_CURRENT_GAMEMODE(GAMEMODE_FM)
REQUEST_FM_RESTART_SCRIPTS()
PRINTLN("[TS] main_persistant - REQUEST_FM_RESTART_SCRIPTS")
sTranVars.bRequestScriptsJip = TRUE
ENDIF
ENDIF
ENDPROC
//Need to load all the MP scripts for Davie G
PROC MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH()
//If the flag to kill is still true
IF SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
IF NOT NETWORK_IS_SCRIPT_ACTIVE(GET_LAUNCH_SCRIPT_NAME(), -1, TRUE)
AND NOT NETWORK_IS_SCRIPT_ACTIVE("fake_interiors", -1, TRUE)
AND NOT NETWORK_IS_SCRIPT_ACTIVE("emergencycalllauncher", -1, TRUE)
AND NOT NETWORK_IS_SCRIPT_ACTIVE("net_cloud_mission_loader", -1, TRUE)
AND NOT NETWORK_IS_SCRIPT_ACTIVE("FMMC_Launcher", -1, TRUE)
CLEAR_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
SET_CURRENT_GAMEMODE(GAMEMODE_FM)
REQUEST_FM_RESTART_SCRIPTS()
#IF IS_DEBUG_BUILD
ELSE
IF NETWORK_IS_SCRIPT_ACTIVE(GET_LAUNCH_SCRIPT_NAME(), -1, TRUE)
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - GET_LAUNCH_SCRIPT_NAME")
ENDIF
IF NETWORK_IS_SCRIPT_ACTIVE("fake_interiors", -1, TRUE)
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - fake_interiors")
ENDIF
IF NETWORK_IS_SCRIPT_ACTIVE("emergencycalllauncher", -1, TRUE)
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - emergencycalllauncher")
ENDIF
IF NETWORK_IS_SCRIPT_ACTIVE("net_cloud_mission_loader", -1, TRUE)
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - net_cloud_mission_loader")
ENDIF
IF NETWORK_IS_SCRIPT_ACTIVE("FMMC_Launcher", -1, TRUE)
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - FMMC_Launcher")
ENDIF
#ENDIF
ENDIF
//Everything is dead then re quest scripts
ELSE
//load and launch freemode
IF MAINTAIN_LAUNCHING_FREEMODE_SCRIPT()
//clean up
RESET_TRANSITION_SESSION_NON_RESET_VARS()
CLEAR_TRANSITION_SESSIONS_BITSET()
CLEAR_TRANSITION_SESSION_LAUNCHING()
CLEAR_KILL_ALL_MP_SCRIPTS_FOR_SCTV_SWITCH()
SET_TRANSITION_SESSION_ENTERING_FM_AFTER_SCRIPTS_KILLED_FOR_SCTV_SWITCH()
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - MAINTAIN_LAUNCHING_FREEMODE_SCRIPT")
#IF IS_DEBUG_BUILD
ELSE
PRINTLN("[TS] main_persistant - MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH - MAINTAIN_LAUNCHING_FREEMODE_SCRIPT = FALSE")
#ENDIF
ENDIF
ENDIF
ENDPROC
BOOL bPlayerFrosen
BOOL bWarpPlayer
BOOL bSetWarpPosition
BOOL bSpawnLocationNeedsCleared
INT iControlTimer
FUNC BOOL HAS_WALK_OUT_TIME_EXPIRED()
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
RETURN TRUE
ENDIF
IF GET_GAME_TIMER() - iControlTimer > 0
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
//Pull the cam up for a transition session change
PROC MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE()
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - called ")
//hide stuff
THEFEED_HIDE_THIS_FRAME()
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FEED)
HIDE_HUD_AND_RADAR_THIS_FRAME()
IF IS_SKYCAM_PAST_FIRST_CUT()
IF bPlayerFrosen = FALSE
bWarpPlayer = TRUE
IF iControlTimer = 0
iControlTimer = GET_GAME_TIMER() + 500
ENDIF
IF HAS_WALK_OUT_TIME_EXPIRED()
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_SET_INVISIBLE | NSPC_CLEAR_TASKS | NSPC_NO_COLLISION | NSPC_FREEZE_POSITION)
bPlayerFrosen = TRUE
iControlTimer = 0
ENDIF
ENDIF
ELSE
IF NETWORK_IS_GAME_IN_PROGRESS()
HIDE_ALL_OTHER_PLAYERS_FOR_CORONA()
ENDIF
bWarpPlayer = FALSE
bPlayerFrosen = FALSE
bSetWarpPosition = FALSE
iControlTimer = 0
ENDIF
IF bWarpPlayer
IF IS_VECTOR_ZERO(g_vSafeLocationOutsideApartment)
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - g_vSafeLocationOutsideApartment is zero! ")
bWarpPlayer = FALSE
ELSE
IF SHOULD_TRANSITION_SESSION_SPAWN_PLAYER_OUTSIDE_PROPERTY()
IF NOT bSetWarpPosition
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - Setup specific spawn location: ", g_vSafeLocationOutsideApartment)
FLOAT fHeading = 0.0
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
fHeading = GET_ENTITY_HEADING(PLAYER_PED_ID())
ENDIF
SETUP_SPECIFIC_SPAWN_LOCATION(g_vSafeLocationOutsideApartment, fHeading, 10.0, FALSE, 0, FALSE)
bSetWarpPosition = TRUE
bSpawnLocationNeedsCleared = TRUE
MOVE_SPECIFIC_SPAWN_LOCATION_OUTSIDE_EXCLUSION_ZONES()
ELSE
VECTOR vSpawnLocation
FLOAT fSpawnHeading
IF HAS_GOT_SPAWN_LOCATION(vSpawnLocation, fSpawnHeading, SPAWN_LOCATION_NEAR_SPECIFIC_COORDS, FALSE, FALSE, FALSE, FALSE, TRUE)
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - Warping outside property: ", vSpawnLocation, fSpawnHeading)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vSpawnLocation, FALSE, FALSE, FALSE)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_HEADING(PLAYER_PED_ID(), fSpawnHeading)
SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(PLAYER_PED_ID(), TRUE)
ENDIF
bWarpPlayer = FALSE
CLEAR_TRANSITION_SESSION_SPAWN_PLAYER_OUTSIDE_PROPERTY()
bSpawnLocationNeedsCleared = FALSE
CLEAR_SPECIFIC_SPAWN_LOCATION()
#IF IS_DEBUG_BUILD
ELSE
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - HAS_GOT_SPAWN_LOCATION() = FALSE")
#ENDIF
ENDIF
ENDIF
ELIF SHOULD_TRANSITION_SESSION_SPAWN_PLAYER_AT_PROPERTY_COORDS()
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - Warping to property coords: ", g_vSafeLocationOutsideApartment, g_fSafeLocationOutsideApartmentHeading)
SET_ENTITY_COORDS(PLAYER_PED_ID(), g_vSafeLocationOutsideApartment, FALSE, FALSE, FALSE)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_HEADING(PLAYER_PED_ID(), g_fSafeLocationOutsideApartmentHeading)
ENDIF
bWarpPlayer = FALSE
CLEAR_TRANSITION_SESSION_SPAWN_PLAYER_AT_PROPERTY_COORDS()
//If we are under the map, and we're quitting the lobby we should prbably mve the player.
ELIF IS_TRANSITION_SESSION_QUITING_CORONA()
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - IS_TRANSITION_SESSION_QUITING_CORONA ")
VECTOR vPos = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
IF vPos.z < 0.00
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - IS_TRANSITION_SESSION_QUITING_CORONA - Warping to property coords: ", g_vSafeLocationOutsideApartment, g_fSafeLocationOutsideApartmentHeading)
SET_ENTITY_COORDS(PLAYER_PED_ID(), g_vSafeLocationOutsideApartment, FALSE, FALSE, FALSE)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_HEADING(PLAYER_PED_ID(), g_fSafeLocationOutsideApartmentHeading)
ENDIF
ENDIF
bWarpPlayer = FALSE
ELSE
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - Don't need to warp: ", g_vSafeLocationOutsideApartment)
bWarpPlayer = FALSE
ENDIF
ENDIF
ENDIF
//Pull the cam up
IF SET_SKYSWOOP_UP(FALSE, FALSE, DEFAULT, DEFAULT, SHOULD_TRANSITION_SESSION_PULL_CAM_UP_SKIP_INTRO())
AND NOT bWarpPlayer
CLEAR_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE()
CLEAR_TRANSITION_SESSION_SPAWN_PLAYER_OUTSIDE_PROPERTY()
CLEAR_TRANSITION_SESSION_SPAWN_PLAYER_AT_PROPERTY_COORDS()
CLEAR_TRANSITION_SESSION_PULL_CAM_UP_SKIP_INTRO()
SET_TRANSITION_SESSION_PUT_CAM_IN_SKY_FOR_SESSION_CHANGE()
bPlayerFrosen = FALSE
bWarpPlayer = FALSE
bSetWarpPosition = FALSE
IF GET_HEIST_SKIP_FIRST_SKYSWOOP_UP_CUT()
PRINTLN("MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE - Clear heist flags for skyswoop.")
CLEAR_HEIST_SKIP_FIRST_SKYSWOOP_UP_CUT()
ENDIF
ENDIF
ENDPROC
//Pull the cam up for a transition session change
PROC MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE()
//hide stuff
THEFEED_HIDE_THIS_FRAME()
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FEED)
HIDE_HUD_AND_RADAR_THIS_FRAME()
//If we need to hold the camera for the apratment script then do so
IF TRANSITION_SESSION_HOLD_CAM_FOR_APARTMENT_SCRIPT()
//If the apartment script is ready
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS, PROPERTY_BROADCAST_BS_PLAYER_USING_PROPERTY)
//Clear flag and move on
CLEAR_TRANSITION_SESSION_HOLD_CAM_FOR_APARTMENT_SCRIPT()
ELSE
//Drop out
PRINTLN("main_persistant - TRANSITION_SESSION_HOLD_CAM_FOR_APARTMENT_SCRIPT - Not PROPERTY_BROADCAST_BS_PLAYER_USING_PROPERTY")
EXIT
ENDIF
ENDIF
IF g_SimpleInteriorData.bHoldSkycam
PRINTLN("main_persistant - MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE - g_SimpleInteriorData.bHoldSkycam")
EXIT
ENDIF
IF g_sTransitionSessionData.iTransitionSessionHoldForSMPLintRestart > -1
SIMPLE_INTERIOR_INSIDE_BOUNDING_BOX intBounds
GET_SIMPLE_INTERIOR_INSIDE_BOUNDING_BOX(INT_TO_ENUM(SIMPLE_INTERIORS, g_sTransitionSessionData.iTransitionSessionHoldForSMPLintRestart), intBounds, FALSE )
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
AND IS_ENTITY_IN_AREA(PLAYER_PED_ID(), intBounds.vInsideBBoxMin, intBounds.vInsideBBoxMax)
PRINTLN("main_persistant - MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE - iTransitionSessionHoldForSMPLintRestart")
EXIT
ELSE
PRINTLN("main_persistant - MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE - setting iTransitionSessionHoldForSMPLintRestart != -1. Player is not in the area. Are they alive? ",
IS_ENTITY_ALIVE(PLAYER_PED_ID()), " Are they in the interior? ", IS_PLAYER_IN_ANY_SIMPLE_INTERIOR(PLAYER_ID()))
g_sTransitionSessionData.iTransitionSessionHoldForSMPLintRestart = -1
ENDIF
ENDIF
IF IS_PLAYER_SPECTATING(PLAYER_ID())
PRINTLN("main_persistant - MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE - player is spectating")
EXIT
ENDIF
//Pull the cam down
IF SET_SKYSWOOP_DOWN(NULL, FALSE)
CLEAR_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE()
CLEAR_TRANSITION_SESSION_PUT_CAM_IN_SKY_FOR_SESSION_CHANGE()
IF TRANSITION_SESSION_RETURN_PLAYER_CONTROL_AFTER_CAM_DOWN()
SET_SKYFREEZE_CLEAR(TRUE)
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
CLEAR_TRANSITION_SESSION_RETURN_PLAYER_CONTROL_AFTER_CAM_DOWN()
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM()
PRINTLN("main_persistant - MAINTAIN_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM - I'm hiding Things")
//wait for the network game to be in progress and to have recieved the event that launch is done
HIDE_HUD_AND_RADAR_THIS_FRAME()
DISABLE_HUD_ELEMENTS_DURING_TRANSITION_SESSION_CHANGE(SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT() = FALSE)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
THEFEED_HIDE_THIS_FRAME()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
//If the player is back in freemode running the clean up the hide radar flag.
IF GET_CLIENT_SCRIPT_GAME_STATE(PLAYER_ID()) = MAIN_GAME_STATE_RUNNING
AND NOT SHOULD_DO_TRANSIITON_TO_NEW_FREEMODE_SESSION_AFER_CORONA_AND_HEIST_CUTSCENE()
CLEAR_TRANSITION_SESSION_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM()
ENDIF
ENDPROC
//Hide the radar if the sky cam is not at the ground.
PROC MAINTAIN_HIDE_RADAR_WHEN_SKY_CAM_ACTIVE()
IF NETWORK_IS_GAME_IN_PROGRESS()
IF NOT IS_SKYSWOOP_AT_GROUND()
// PRINTLN("main_persistant - MAINTAIN_HIDE_RADAR_WHEN_SKY_CAM_ACTIVE - I'm hiding Things")
HIDE_ALL_SKYCAM_HUD_THIS_FRAME()
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_RELAUNCHING_FREEMODE_AFTER_TRANSITION_TO_GAME_JOINED()
//wait for the network game to be in progress and to have recieved the event that launch is done
//Hide the radra and disable the cell phone
HIDE_HUD_AND_RADAR_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_PAUSE) //Added for Exploit 2423584
IF SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT()
OR SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
OR SHOULD_TRANSITION_SESSIONS_RESTART_AFTER_DO_TRANSITION_TO_NEW_GAME()
OR SHOULD_TRANSITION_SESSIONS_DO_TUT_MISSION_QUICKMATCH()
OR TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
OR TRANSITION_SESSIONS_WAS_JOINING_WHEN_GOT_START_LAUNCH_EVENT()
DISABLE_HUD_ELEMENTS_DURING_TRANSITION_SESSION_CHANGE(SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT() = FALSE)
DISABLE_SELECTOR_THIS_FRAME()
ENDIF
//Pull the camera up after exiting FM after going into the store
IF SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
//Clean up the transition session if we're starting on Call
IF AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL()
IF CLEAN_UP_TRANSITION_SESSION_ONLY()
CLEAR_TRANSITION_SESSIONS_STARTING_ON_CALL()
g_TransitionSessionNonResetVars.sTransVars.bCleanedUpAndWait = FALSE
ENDIF
ENDIF
//If the main transition is active
IF IS_TRANSITION_ACTIVE()
CLEAR_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
IF SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT_IS_CAM_UP()
CLEAR_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT_IS_CAM_UP()
ENDIF
PRINTLN("[TS] MAINTAIN_RELAUNCHING_FREEMODE_AFTER_TRANSITION_TO_GAME_JOINED - calling RESET_STORE_NETWORK_GAME_TRACKING")
RESET_STORE_NETWORK_GAME_TRACKING()
ENDIF
//Pull the camera up
IF NOT SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT_IS_CAM_UP()
//If we've not toggeled the render
IF NOT sTranVars.bToggelRender
//And the spinner is up
AND sTranVars.bRequestSpinner
AND NOT g_bStoreTransitionForCash
TOGGLE_RENDERPHASES(TRUE)
TOGGLE_RENDERPHASES(TRUE)
sTranVars.bToggelRender = TRUE
ENDIF
//add that spinner
DO_FMMC_CORONA_SPINNER(sTranVars.bRequestSpinner, "FMMC_PLYLOAD", ENUM_TO_INT(LOADING_ICON_LOADING), "")
//delay the store opening
DELAY_MP_STORE_OPEN()
BOOL bComplete = FALSE
IF g_bStoreTransitionForCash
bComplete = SET_SKYSWOOP_UP(TRUE, TRUE, FALSE, DEFAULT, TRUE, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, TRUE)
ELSE
bComplete = SET_SKYSWOOP_UP(FALSE, FALSE, TRUE, SWITCH_TYPE_LONG, TRUE, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, TRUE)
ENDIF
#IF USE_FINAL_PRINTS PRINTLN_FINAL("MAINTAIN_RELAUNCHING_FREEMODE_AFTER_TRANSITION_TO_GAME_JOINED: 7799618 bComplete = ",bComplete) #ENDIF
IF bComplete
g_bStoreTransitionForCash = FALSE
sTranVars.bRequestSpinner = FALSE
sTranVars.bToggelRender = FALSE
BUSYSPINNER_OFF()
PRELOAD_BUSYSPINNER()
SHOW_GAME_TOOL_TIPS(TRUE)
SET_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT_IS_CAM_UP()
//if the down flag is set then clear it.
// IF IS_TRANSITION_SESSIONS_CAM_DOWN_AFTER_END_RESERVING_SLOT()
// CLEAR_TRANSITION_SESSIONS_CAM_DOWN_AFTER_END_RESERVING_SLOT()
// ENDIF
ENDIF
ENDIF
ENDIF
//Maintain the button if the news feed is active
MAINTAIN_LAUNCHING_COMMUNITY_PLAYLIST_DURING_TRANSITION()
//If we're back in the game and ready
IF IS_TRANSITION_SESSION_READY_FOR_TO_GAME_LAUNCH(sTranVars.bRequestScripts)
//If we've reguested the scripts
IF sTranVars.bRequestScripts = TRUE
DO_FMMC_CORONA_SPINNER(sTranVars.bRequestSpinner, "FMMC_PLYLOAD", ENUM_TO_INT(LOADING_ICON_LOADING), "FMMC_STTRANOC")
//load and launch freemode
IF MAINTAIN_LAUNCHING_FREEMODE_SCRIPT()
//clean up
CLEAR_TRANSITION_SESSION_LAUNCH_MAIN_FM_SCRIPT()
CLEAR_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
//clear we got the event if we're waiting for it
IF HAS_TRANSITION_SESSIONS_GOT_EVENT_TRANSITION_TO_GAME_FINISH()
CLEAR_TRANSITION_SESSIONS_GOT_EVENT_TRANSITION_TO_GAME_FINISH()
ENDIF
//If we are cleaning up after a corona walk out
IF SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT()
//Nothing
ELIF SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
//kill the spinner
sTranVars.bRequestSpinner = FALSE
sTranVars.bToggelRender = FALSE
IF TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE_SET_UP()
CLEAR_TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE_SET_UP()
ENDIF
//If we accepted an invite when in the end reserve slot state then kill it all!
IF TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
SET_SKIP_WAIT_FOR_TRANSITION_CAMERA()
SET_TRANSITION_SESSIONS_ACCEPTING_INVITE_FROM_SP()
CLEAR_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
CLEAR_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT_IS_CAM_UP()
CLEAR_TRANSITION_SESSIONS_RESTORE_VEHICLE()
CLEAR_TRANSITION_SESSION_END_SESSION_POS()
ENDIF
//If we are cleaning up after a late join to a transition session
ELIF TRANSITION_SESSIONS_WAS_JOINING_WHEN_GOT_START_LAUNCH_EVENT()
//Nothing
//joinin a launched mission
ELIF TRANSITION_SESSION_JOINING_LAUNCHED_TRANSITION_SESSION()
SET_SKIP_WAIT_FOR_TRANSITION_CAMERA()
//If the sky cam needs to clean up
ELIF SHOULD_SKIP_WAIT_FOR_TRANSITION_CAMERA()
OR SHOULD_TRANSITION_SESSIONS_RESTART_AFTER_DO_TRANSITION_TO_NEW_GAME()
//Nothing
ELSE
//a clean up after a mission it is then
SET_SKIP_WAIT_FOR_TRANSITION_CAMERA()
IF NOT IS_TRANSITION_SESSION_LAUNCHING()
//Set williams camera to start the clean up
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bCleanUpReadyToMoveOn = TRUE
PRINTLN("[TS] [PMC] - g_TransitionSessionNonResetVars.sPostMissionCleanupData.bCleanUpReadyToMoveOn = TRUE - called from main persistants")
//set the clean up stage to the correct stage
g_TransitionSessionNonResetVars.sPostMissionCleanupData.eStage = ePOSTMISSIONCLEANUPSTAGE_FREEMODE_DEAD
PRINTLN("[TS] [PMC] - Going to stage ePOSTMISSIONCLEANUPSTAGE_FREEMODE_DEAD - called from main persistants")
ENDIF
//If we were in the store and we've got here then we need to clean up the flag to push back into the post mission clean up
IF TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
PRINTLN("[TS] [PMC] - Calling ")
CLEAR_TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
ENDIF
ENDIF
//set that we need to hide the hud
SET_TRANSITION_SESSION_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM()
//If we are not a spectator the clean it all up!
IF NOT AM_I_A_TRANSITION_SESSION_SPECTATOR()
AND NOT TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
AND NOT AM_I_TRANSITION_SESSIONS_STARTING_ON_CALL()
AND NOT TRANSITION_SESSIONS_QUICK_JOB_JOINING_LAUNCHED()
AND NOT QM_LAUNCHED_TRANSITION_FROM_PAUSE_MENU()
CLEAR_TRANSITION_SESSION_LAUNCHING()
CLEAR_TRANSITION_SESSIONS_BITSET()
RESET_TRANSITION_SESSION_NON_RESET_VARS()
ENDIF
//Clear the script loaded flag
sTranVars.bRequestScripts = FALSE
ENDIF
ELSE
PRINTLN("[TS]main_persistant - TRANSITION_TO_GAME_JOINED - waiting for NETWORK_IS_GAME_IN_PROGRESS to be false")
#IF USE_FINAL_PRINTS PRINTLN_FINAL("MAINTAIN_RELAUNCHING_FREEMODE_AFTER_TRANSITION_TO_GAME_JOINED: TRANSITION_TO_GAME_JOINED - waiting for NETWORK_IS_GAME_IN_PROGRESS to be false") #ENDIF
//Call do trasnrition to game if the game is dead
IF g_TransitionSessionNonResetVars.sPostMissionCleanupData.eStage = ePOSTMISSIONCLEANUPSTAGE_PREPARE_FOR_FREMODE_DEATH
IF GET_HASH_OF_LAUNCH_SCRIPT_NAME_SCRIPT() != 0
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_OF_LAUNCH_SCRIPT_NAME_SCRIPT()) = 0
//IF SET_UP_DO_TRANSITION_TO_GAME(g_TransitionSessionNonResetVars.sPostMissionCleanupData.sTranToGameVars)
NET_PRINT("[PMC] - SHOULD_DO_TRANSITION_TO_GAME_RUN() = TRUE.")NET_NL()
GOTO_POST_MISSION_CLEANUP_STAGE(g_TransitionSessionNonResetVars.sPostMissionCleanupData.eStage, ePOSTMISSIONCLEANUPSTAGE_FREEMODE_DEAD)
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iPrepareForFreemodeDeathStage = 0
g_TransitionSessionNonResetVars.sPostMissionCleanupData.sTranToGameVars.iTranisitionSessionSetUpStage = 0
PRINTLN("[TS] SET_UP_DO_TRANSITION_TO_GAME - g_TransitionSessionNonResetVars.sPostMissionCleanupData.iPrepareForFreemodeDeathStage = 0")
PRINTLN("[TS] SET_UP_DO_TRANSITION_TO_GAME - g_TransitionSessionNonResetVars.sPostMissionCleanupData.sTranToGameVars.iTranisitionSessionSetUpStage = 0")
//ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
// WARNING_SCREEN_RETURN aWarningScreen = RUN_WARNINGSCREEN_BAIL_TRANSITION_JOIN_FAILED_SCREEN_ONLY()
//
// IF aWarningScreen = WARNING_SCREEN_RETURN_NONE
// NET_NL()NET_PRINT("[TS] main_persistant.sc -: Waiting on the player accepting joing failed warning screen: g_JoinResponseEvent.nResponseCode = ")NET_PRINT_INT(ENUM_TO_INT(g_JoinResponseEvent.nResponseCode))NET_PRINT(" (g_Private_BailWarningScreenEventParam = ")NET_PRINT_INT(g_Private_BailWarningScreenEventParam)NET_NL()
// EXIT
// ENDIF
//Network game not in progress request script and wait
PRINTLN("[TS]main_persistant - TRANSITION_TO_GAME_JOINED - NETWORK_IS_GAME_IN_PROGRESS = FALSE")
IF sTranVars.bRequestScripts = FALSE
IF NOT SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT()
AND NOT SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
AND NOT TRANSITION_SESSIONS_CLEANUP_AFTER_JIP_BACK_OUT()
AND NOT TRANSITION_SESSIONS_WAS_JOINING_WHEN_GOT_START_LAUNCH_EVENT()
AND NOT TRANSITION_SESSION_JOINING_LAUNCHED_TRANSITION_SESSION()
AND NOT AM_I_A_TRANSITION_SESSION_SPECTATOR()
AND NOT TRANSITION_SESSIONS_QUICK_JOB_JOINING_LAUNCHED()
PRINTLN("[TS] main_persistant - TRANSITION_TO_GAME_JOINED - SHOULD_TRANSITION_SESSIONS_CLEANUP_AFTER_CORONA_WALK_OUT() = FALSE, setting g_TransitionSessionNonResetVars.sPostMissionCleanupData.iForceIntoFreemodeDeadStage = 1.")
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iForceIntoFreemodeDeadStage = 1
ENDIF
IF TRANSITION_SESSIONS_QUICK_JOB_JOINING_LAUNCHED()
TOGGLE_RENDERPHASES(FALSE)
TOGGLE_RENDERPHASES(FALSE)
DO_SCREEN_FADE_OUT(SPEC_FADE_LOAD_TIME_SHORT)
ENDIF
CLEAR_AREA(<<0.0, 0.0, 0.0>>, 10000, TRUE, FALSE, FALSE, FALSE)
PRINTLN("[TS] main_persistant - TRANSITION_TO_GAME_JOINED - CLEAR_AREA(<<0.0, 0.0, 0.0>>, 10000, TRUE, FALSE, FALSE, FALSE)")
SET_CURRENT_GAMEMODE(GAMEMODE_FM)
REQUEST_FM_RESTART_SCRIPTS()
PRINTLN("[TS] main_persistant - TRANSITION_TO_GAME_JOINED")
sTranVars.bRequestScripts = TRUE
//clear we got the event if we're waiting for it
IF HAS_TRANSITION_SESSIONS_GOT_EVENT_TRANSITION_TO_GAME_FINISH()
CLEAR_TRANSITION_SESSIONS_GOT_EVENT_TRANSITION_TO_GAME_FINISH()
ENDIF
//If we are accepting an invite to a transition session and we are in the store:
ELIF TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE()
//If we've got the started event
IF DID_TRANSITION_SESSION_RECIEVED_STARTED()
//And it's not set up
IF NOT TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE_SET_UP()
//And we didn't join a launched one
IF NOT TRANSITION_SESSIONS_END_RESERVING_SLOT_GOT_JOINED_LAUNCHED()
PRINTLN("[TS] PROCESS_EVENT_TRANSITION_JOINED_EVENT - NETWORK_IS_GAME_IN_PROGRESS = FALSE")
SET_PAUSE_MENU_REQUESTING_A_WARP()
SET_PAUSE_MENU_REQUESTING_A_NEW_SESSION()
SET_PAUSE_MENU_WARP_TO_MODE(GAMEMODE_FM)
IF SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
CLEAR_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
ENDIF
//if we killed freemode we now need to reboot it
IF DOES_TRANSITION_SESSIONS_NEED_TO_CLEANUP_FM_AFTER_INVITE()
CLEAR_TRANSITION_SESSIONS_NEED_TO_CLEANUP_FM_AFTER_INVITE()
ENDIF
g_IsSomethingElseExittingMP = TRUE
g_Private_Players_FM_Menu_Choice = FM_MENU_CHOICE_JOIN_NEW_SESSION
g_Private_Players_FM_SESSION_Menu_Choice = FM_SESSION_MENU_CHOICE_JOIN_CLOSED_ME_ONLY
SET_JOINING_GAMEMODE(GAMEMODE_FM)
IF IS_TRANSITION_ACTIVE() = FALSE
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
ENDIF
SET_TRANSITION_SESSIONS_ACCEPTING_INVITE_FROM_SP()
g_bMissionCreatorPauseMenuActive = FALSE // May not be the place to reset this.
ENDIF
//Set that I need to warp to the start of the mission
SET_TRANSITION_SESSIONS_NEED_TO_WARP_TO_START()
SET_TRANSITION_SESSIONS_END_RESERVING_SLOT_ACEPTING_INVITE_SET_UP()
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_KILL_FRONT_END()
PRINTLN("[TS]MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE() - MAINTAIN_KILL_FRONT_END")
//Kill all controls.
DISABLE_ALL_CONTROL_ACTIONS(PLAYER_CONTROL)
DISABLE_ALL_CONTROL_ACTIONS(CAMERA_CONTROL)
PRINTLN("[TS]MAINTAIN_KILL_FRONT_END - DISABLE_ALL_CONTROL_ACTIONS(CAMERA_CONTROL)")
IF NOT IS_ONLINE_POLICIES_MENU_ACTIVE()
DISABLE_ALL_CONTROL_ACTIONS(FRONTEND_CONTROL)
//Kill the front end
DISABLE_FRONTEND_THIS_FRAME()
PRINTLN("[TS]MAINTAIN_KILL_FRONT_END - Frontend disabled")
ELSE
//If the front end is active, kill it
IF IS_PAUSE_MENU_ACTIVE()
SET_FRONTEND_ACTIVE(FALSE)
ENDIF
PRINTLN("[TS]MAINTAIN_KILL_FRONT_END - Frontend left on for online policies menu")
ENDIF
ENDPROC
FUNC BOOL NEED_TO_BAIL_BECAUSE_FREEMODE_DEAD()
IF g_TransitionData.SwoopStage = SKYSWOOP_NONE
AND NOT g_sTransitionSessionData.bLaunchingTransitionSession
AND IS_GAMEPLAY_CAM_RENDERING()
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(FREEMODE_HASH()) = 0
AND NOT g_b_IsInTransition
AND g_Private_Gamemode_Current = GAMEMODE_FM
AND g_b_IsFreemodeRunningActive = TRUE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC MAINTAIN_FREEMODE_RUNNING_CHECK()
#IF IS_DEBUG_BUILD
IF GET_COMMANDLINE_PARAM_EXISTS("sc_DisableFMDeadKick")
EXIT
ENDIF
#ENDIF
IF g_B_TurnOnIsFreemodeRunningChecks = TRUE
IF NEED_TO_BAIL_BECAUSE_FREEMODE_DEAD()
IF HAS_NET_TIMER_EXPIRED(g_st_IsFreemodeRunningTimer, g_i_IsFreemodeRunningTimeoutTime, TRUE)
PRINTLN("[TS] * BC: !!!! MAINTAIN_FREEMODE_RUNNING_CHECK = TRUE - bail !!!! ")
#IF USE_FINAL_PRINTS PRINTLN_FINAL("[TS] * BC: !!!! MAINTAIN_FREEMODE_RUNNING_CHECK = TRUE - bail !!!! ")#ENDIF
SET_FRONTEND_ACTIVE(FALSE)
SET_SKYFREEZE_FROZEN()
SET_HAS_KICKED_FOR_FM_DEAD(TRUE)
SET_QUIT_CURRENT_GAME(TRUE)
RESET_EVERYTHING_TRANSITION_SESSION_FOR_SP_BAIL()
SET_SCRIPT_BAILS_PROCESSING(TRUE)
REQUEST_TRANSITION(GET_CURRENT_TRANSITION_STATE(), GAMEMODE_SP, GET_CURRENT_HUD_STATE())
TRIGGER_TRANSITION_MENU_ACTIVE(TRUE)
PLAYSTATS_BACKGROUND_SCRIPT_ACTION("FREEMODE_DEAD_KICK", 1)
ENDIF
ELSE
IF HAS_NET_TIMER_STARTED(g_st_IsFreemodeRunningTimer)
RESET_NET_TIMER(g_st_IsFreemodeRunningTimer)
ENDIF
ENDIF
ENDIF
ENDPROC
//Maintain cleaning old transition session and accepting an invite
PROC MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE()
//If we are not in the store
IF NOT IS_TRANSITION_SESSIONS_ACCEPTING_INVITE_WAIT_FOR_CLEAN()
MAINTAIN_KILL_FRONT_END()
ENDIF
//Wait for the invite to be ready
IF CLEAN_UP_TRANSITION_SESSION_AND_WAIT()
//If we are in a fake MP
IF IS_FAKE_MULTIPLAYER_MODE_SET()
//Set that we are waiting for the clean up
SET_TRANSITION_SESSIONS_WAIT_FOR_FAKE_MP_CLEANUP()
//Then clear the fake MP mode
SET_FAKE_MULTIPLAYER_MODE(FALSE)
NET_PRINT_TIME() NET_PRINT("[TS]MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE called SET_FAKE_MULTIPLAYER_MODE - FALSE ") NET_NL()
PRINTLN("[TS]MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE - EXIT")
//Get out
EXIT
//If we are waiting for the clean up
ELIF TRANSITION_SESSIONS_WAIT_FOR_FAKE_MP_CLEANUP()
//And a net session is acticve
IF NETWORK_IS_SESSION_ACTIVE()
//Then get out
PRINTLN("[TS]MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE - NETWORK_IS_SESSION_ACTIVE = TRUE")
EXIT
ENDIF
//Net session is not active, then clean up that we need to wait
PRINTLN("[TS]MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE - NETWORK_IS_SESSION_ACTIVE = FALSE")
CLEAR_TRANSITION_SESSIONS_WAIT_FOR_FAKE_MP_CLEANUP()
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY
AND (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID()))
PRINTLN("[TS] MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE - in SP and never been in MP. ")
SET_SKYFREEZE_FROZEN(TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ENDIF
ENDIF
//Set all the vars needed when accepting an invite
SET_VARS_WHEN_ACCEPTING_TRANSITION_SESSION_INVITE()
NETWORK_SESSION_JOIN_INVITE()
// SET_TRANSITION_SESSION_INVITER()
ENDIF
ENDPROC
PROC DO_DRUNK_CONTROLLER_CHECKS()
#IF IS_DEBUG_BUILD
IF NOT g_bDebug_KeepDrunkControllerRunning
IF GET_COMMANDLINE_PARAM_EXISTS("sc_KeepDrunkControllerRunning")
CPRINTLN(DEBUG_DRUNK, "...main_persistant.sc has activated sc_KeepDrunkControllerRunning = TRUE (command line param)")
g_bDebug_KeepDrunkControllerRunning = TRUE
ENDIF
ENDIF
#ENDIF
IF Should_Drunk_Controller_Be_Running()
#IF IS_DEBUG_BUILD
OR g_bDebug_KeepDrunkControllerRunning
#ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("drunk_controller")) = 0
REQUEST_SCRIPT("drunk_controller")
IF HAS_SCRIPT_LOADED("drunk_controller")
START_NEW_SCRIPT("drunk_controller", DEFAULT_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED("drunk_controller")
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL SAFE_TO_CLEAN_ARENA_BACKGROUND_IMAGE()
IF IS_THIS_A_ROUNDS_MISSION_FOR_CORONA()
AND NOT IS_SKYSWOOP_AT_GROUND()
RETURN FALSE
ENDIF
IF NOT g_bMissionEnding
AND GET_TRANSITION_SESSION_VOTE_STATUS() != ciFMMC_EOM_VOTE_STATUS_RANDOM
AND GET_TRANSITION_SESSION_VOTE_STATUS() != ciFMMC_EOM_VOTE_STATUS_RESTART
AND GET_TRANSITION_SESSION_VOTE_STATUS() != ciFMMC_EOM_VOTE_STATUS_ROUNDS_MISSION
AND NOT IS_PLAYER_IN_CORONA()
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC MAINTAIN_ARENA_BACKGROUND_IMAGE()
SWITCH GET_ARENA_LOBBY_BACKGROUND_STAGE()
CASE ciDRAW_ARENA_BACKGROUND_STAGE_WAIT
IF g_bMissionEnding
AND DOES_CORONA_MISSION_HAVE_LOBBY_VIDEO()
AND NETWORK_IS_ACTIVITY_SESSION()
PREPARE_ARENA_LOBBY_BACKGROUND()
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_WAIT_FOR_CELEBRATION)
g_sArenaBgVars.iAlpha = 0
FALLTHRU
ENDIF
BREAK
CASE ciDRAW_ARENA_BACKGROUND_STAGE_WAIT_FOR_CELEBRATION
IF g_bCelebrationScreenIsActive
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_WAIT_FOR_CELEBRATION_END)
FALLTHRU
ENDIF
IF g_sFMMCEOM.iVoteStatus = ciFMMC_EOM_VOTE_STATUS_ROUNDS_MISSION
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_DRAW)
FALLTHRU
ENDIF
IF NOT NETWORK_IS_ACTIVITY_SESSION()
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_WAIT)
ENDIF
BREAK
CASE ciDRAW_ARENA_BACKGROUND_STAGE_WAIT_FOR_CELEBRATION_END
IF NOT NETWORK_IS_ACTIVITY_SESSION()
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_WAIT)
ENDIF
IF NOT g_bCelebrationScreenIsActive
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_DRAW)
FALLTHRU
ENDIF
BREAK
CASE ciDRAW_ARENA_BACKGROUND_STAGE_DRAW
MAINTAIN_ARENA_LOBBY_BACKGROUND(IS_PLAYER_IN_CORONA(), 255)
IF SAFE_TO_CLEAN_ARENA_BACKGROUND_IMAGE()
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_FADE_OUT)
g_sArenaBgVars.iAlpha = 255
ENDIF
BREAK
CASE ciDRAW_ARENA_BACKGROUND_STAGE_FADE_OUT
MAINTAIN_ARENA_LOBBY_BACKGROUND(FALSE, g_sArenaBgVars.iAlpha)
g_sArenaBgVars.iAlpha -= 10
IF g_sArenaBgVars.iAlpha < 0
g_sArenaBgVars.iAlpha = 0
ENDIF
PRINTLN("[TS][ARENA_BG] ciDRAW_ARENA_BACKGROUND_STAGE_CLEAN_UP, g_sArenaBgVars.iAlpha = ", g_sArenaBgVars.iAlpha)
IF g_sArenaBgVars.iAlpha = 0
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_CLEAN_UP)
ENDIF
BREAK
CASE ciDRAW_ARENA_BACKGROUND_STAGE_CLEAN_UP
SET_ARENA_LOBBY_BACKGROUND_STAGE(ciDRAW_ARENA_BACKGROUND_STAGE_WAIT)
CLEAN_UP_ARENA_LOBBY_BACKGROUND()
BREAK
ENDSWITCH
ENDPROC
//Maintain bailing out of a transition session
PROC MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL()
// //If we are on our way into a transition
IF (AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE()
OR AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE_FROM_SP()
OR AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE_FROM_MP())
//And it's not a launched transition session
AND NOT TRANSITION_SESSION_JOINING_LAUNCHED_TRANSITION_SESSION()
//And the launch time is greater than 0
AND GET_TRANSITION_SESSION_LAUNCH_TIME() > 0
//And the invite time more than 0
AND GET_TRANSITION_SESSIONS_ACCEPTING_INVITE_POSIX_TIME() > 0
PRINTLN("[TS]main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL ")
//If the current cloud time - the coroana start time is more than one and a half minutes then we're stuck
CONST_INT ciInviteTimeOut 120
INT iCloudTime = GET_CLOUD_TIME_AS_INT()
//If the timers have expired
IF iCloudTime - GET_TRANSITION_SESSION_LAUNCH_TIME() > ciInviteTimeOut
AND iCloudTime - GET_TRANSITION_SESSIONS_ACCEPTING_INVITE_POSIX_TIME() > ciInviteTimeOut
PRINTLN("[TS]main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - GET_CLOUD_TIME_AS_INT() = ", GET_CLOUD_TIME_AS_INT())
PRINTLN("[TS]main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - GET_TRANSITION_SESSION_LAUNCH_TIME() = ", GET_TRANSITION_SESSION_LAUNCH_TIME())
SCRIPT_ASSERT("[TS]main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - NT/PT for BOBBY WRIGHT")
//Get out as we are in a bad shituation!
PRINTLN("[TS]main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - calling NETWORK_BAIL")
RESET_TRANSITION_SESSION_NON_RESET_VARS()
CLEAR_TRANSITION_SESSIONS_BITSET()
SET_TRANSITION_SESSIONS_INVITE_TIMED_OUT()
CLEAR_TRANSITION_SESSIONS_ACCEPTING_INVITE_POSIX_TIME()
IF NETWORK_CAN_BAIL()
PRINTLN("[TS] main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - calling NETWORK_BAIL")
NETWORK_BAIL(ENUM_TO_INT(NETWORK_BAIL_TS_SAFETY_BAIL))
#IF IS_DEBUG_BUILD
ELSE
PRINTLN("[TS] main_persistant - MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL - calling NETWORK_BAIL")
#ENDIF
ENDIF
CLEAR_TRANSITION_SESSION_MAINTAIN_SAFETY_BAIL()
ENDIF
ENDIF
ENDPROC
BOOL bBailFromMP = FALSE
SCRIPT_TIMER stDirectorModeTimer
PROC MAINTAIN_BAIL_CHECKS()
IF IS_SKYSWOOP_AT_GROUND()
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
AND IS_PLAYER_CONTROL_ON(PLAYER_ID())
AND NOT g_bDirectorModeRunning
AND GET_JOINING_GAMEMODE() != GAMEMODE_FM
AND NOT IS_TRANSITION_STARTED_IN_MP()
IF GET_CURRENT_GAMEMODE() = GAMEMODE_SP
OR GET_CURRENT_GAMEMODE() = GAMEMODE_EMPTY
IF GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_M_FREEMODE_01
OR GET_ENTITY_MODEL(PLAYER_PED_ID()) = MP_F_FREEMODE_01
IF NOT bBailFromMP
IF NOT HAS_NET_TIMER_STARTED(stDirectorModeTimer)
PRINTLN("MAINTAIN_BAIL_CHECKS - Starting timer")
START_NET_TIMER(stDirectorModeTimer)
ELIF HAS_NET_TIMER_EXPIRED(stDirectorModeTimer, 100)
PRINTLN("MAINTAIN_BAIL_CHECKS - Readying bail")
bBailFromMP = TRUE
PRINTLN("MAINTAIN_BAIL_CHECKS - Reset timer 1")
RESET_NET_TIMER(stDirectorModeTimer)
ENDIF
ENDIF
ELSE
IF HAS_NET_TIMER_STARTED(stDirectorModeTimer)
PRINTLN("MAINTAIN_BAIL_CHECKS - Reset timer 2")
bBailFromMP = FALSE
RESET_NET_TIMER(stDirectorModeTimer)
ENDIF
ENDIF
ELIF GET_CURRENT_GAMEMODE() = GAMEMODE_FM
IF bBailFromMP
PRINTLN("MAINTAIN_BAIL_CHECKS - Bailing")
bBailFromMP = FALSE
NETWORK_BAIL(ENUM_TO_INT(NETWORK_BAIL_TS_SAFETY_BAIL))
ENDIF
IF HAS_NET_TIMER_STARTED(stDirectorModeTimer)
PRINTLN("MAINTAIN_BAIL_CHECKS - Reset timer 3")
RESET_NET_TIMER(stDirectorModeTimer)
ENDIF
ENDIF
ELSE
IF HAS_NET_TIMER_STARTED(stDirectorModeTimer)
PRINTLN("MAINTAIN_BAIL_CHECKS - Reset timer 4")
RESET_NET_TIMER(stDirectorModeTimer)
ENDIF
IF IS_TRANSITION_STARTED_IN_MP()
PRINTLN("MAINTAIN_BAIL_CHECKS - IS_TRANSITION_STARTED_IN_MP - cancel bail")
bBailFromMP = FALSE
ENDIF
ENDIF
ENDPROC
//Maintain the transition sessions in FM/SP
PROC MAINTAIN_TRANSITION_SESSIONS()
//Re launch freemode if it's been told to relaunch
IF HAS_TRANSITION_SESSION_TOLD_FREEMODE_TO_RESTART()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - HAS_TRANSITION_SESSION_TOLD_FREEMODE_TO_RESTART = TRUE")
MAINTAIN_RELAUNCHING_FREEMODE_AFTER_JIP()
ENDIF
//Need to kill for SCTV
IF SHOULD_KILL_ALL_MP_SCRIPTS_FOR_SCTV_SWITCH()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_KILL_ALL_MP_SCRIPTS_FOR_SCTV_SWITCH = TRUE")
MAINTAIN_RELAUNCHING_FREEMODE_AFTER_SCTV_SWITCH()
ENDIF
//Hide the mini map when the sky cam is at the top
MAINTAIN_HIDE_RADAR_WHEN_SKY_CAM_ACTIVE()
//Pull the cam up for a transition session change
IF SHOULD_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE = TRUE")
MAINTAIN_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE()
ELIF SHOULD_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE = TRUE")
MAINTAIN_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE()
//If the spawn location needs cleared up
ELIF bSpawnLocationNeedsCleared
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - bSpawnLocationNeedsCleared = TRUE")
bSpawnLocationNeedsCleared = FALSE
CLEAR_SPECIFIC_SPAWN_LOCATION()
ENDIF
//relaunch Freemode if needed
IF SHOULD_TRANSITION_SESSION_LAUNCH_MAIN_FM_SCRIPT()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_LAUNCH_MAIN_FM_SCRIPT = TRUE")
MAINTAIN_RELAUNCHING_FREEMODE_AFTER_TRANSITION_TO_GAME_JOINED()
ELSE
//PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM = FALSE")
IF SHOULD_TRANSITION_SESSION_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM()
//PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM = TRUE")
MAINTAIN_HIDE_HUD_ELEMENTS_DURING_TRANSITION_BACK_TO_FM()
//Maintain the button if the news feed is active
MAINTAIN_LAUNCHING_COMMUNITY_PLAYLIST_DURING_TRANSITION()
ENDIF
sTranVars.bRequestScripts = FALSE
ENDIF
//clean up old transition
IF IS_TRANSITION_SESSIONS_ACCEPTING_INVITE_WAIT_FOR_CLEAN()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - IS_TRANSITION_SESSIONS_ACCEPTING_INVITE_WAIT_FOR_CLEAN = TRUE")
MAINTAIN_CLEAN_TRANSITION_WHEN_ACCEPTING_INVITE()
ELIF AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - AM_I_ACCEPTING_TRANSITION_SESSIONS_INVITE = TRUE")
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
AND NOT SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
//AND HAS_TRANSITION_SESSIONS_STARTED_SKYCAM_SWOOP()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - calling MAINTAIN_KILL_FRONT_END")
MAINTAIN_KILL_FRONT_END()
ENDIF
ENDIF
IF HAS_UGC_GLOBAL_BLOCK_LOADED()
//PRINTLN("MAINTAIN_TRANSITION_SESSIONS - HAS_UGC_GLOBAL_BLOCK_LOADED = TRUE")
MAINTAIN_ARENA_BACKGROUND_IMAGE()
#IF FEATURE_COPS_N_CROOKS
MAINTAIN_CNC_TRANSITION_BACKGROUND()
#ENDIF
//Maintain the transition session safty bail
IF SHOULD_TRANSITION_SESSION_MAINTAIN_SAFETY_BAIL()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSION_MAINTAIN_SAFETY_BAIL = TRUE")
MAINTAIN_TRANSITION_SESSION_SAFETY_BAIL()
ENDIF
ENDIF
//hide that bastard radar!
IF SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT()
PRINTLN("MAINTAIN_TRANSITION_SESSIONS - SHOULD_TRANSITION_SESSIONS_RESTART_FM_AFTER_END_RESERVING_SLOT = TRUE")
DISABLE_HUD_ELEMENTS_DURING_TRANSITION_SESSION_CHANGE()
ENDIF
MAINTAIN_BAIL_CHECKS()
ENDPROC
// ===========================================================================================================
//BOOL bAccountSetDone = FALSE
//INT iAccountValueLast[3]
CONST_INT CLOSE_TO_MAX_SIGNED_INT 2100000000
/// PURPOSE:
/// To cope with the fact that code doesn't bother to check if incrementing
/// the finance value would overflow to minus on pickups. (Thanks Miguel)
PROC DO_CHECK_FOR_PICKUPS_OVERFLOWING_ACCOUNTS()
INT ic
STAT_GET_INT(SP0_TOTAL_CASH, ic)
IF ic < -CLOSE_TO_MAX_SIGNED_INT
INT iFix = g_BankAccounts[0].iBalance
IF iFix < 0
iFix = 2147483647
ENDIF
STAT_SET_INT(SP0_TOTAL_CASH, iFix)
ENDIF
STAT_GET_INT(SP1_TOTAL_CASH, ic)
IF ic < -CLOSE_TO_MAX_SIGNED_INT
INT iFix = g_BankAccounts[1].iBalance
IF iFix < 0
iFix = 2147483647
ENDIF
STAT_SET_INT(SP1_TOTAL_CASH, iFix)
ENDIF
STAT_GET_INT(SP2_TOTAL_CASH, ic)
IF ic < -CLOSE_TO_MAX_SIGNED_INT
INT iFix = g_BankAccounts[2].iBalance
IF iFix < 0
iFix = 2147483647
ENDIF
STAT_SET_INT(SP2_TOTAL_CASH, iFix)
ENDIF
ENDPROC
//Maintain sending data to the cloud!
PROC MAINTAIN_SEND_DATA_JSON_TO_CLOUD()
//If we should send some data
IF g_sSendDataJson.bDoSendDataJson
//Then do so
IF SEND_DATA_JSON_TO_CLOUD(g_sSendDataJson)
//Clean up
PRINTLN("[TS] ciEVENT_UPLOAD_DATA_JSON - g_sSendDataJson.bDoSendDataJson = FALSE")
g_sSendDataJson.bDoSendDataJson = FALSE
g_sSendDataJson.bStatus = FALSE
g_sSendDataJson.iDoSendJson = 0
ENDIF
ENDIF
ENDPROC
BOOL bResetControl
SCRIPT_TIMER stNoFmTimer
PROC MAINTAIN_FM_NOT_RUNNING_BAIL()
IF g_sMPTunables.bDisableFmBootCheck
EXIT
ENDIF
#IF FEATURE_FREEMODE_ARCADE
IF IS_ARCADE_PREVIEW_LOBBY_RUNNING()
EXIT
ENDIF
#ENDIF
//If we're in a network game, the aky cam is at the ground and Fm is not running
IF NETWORK_IS_GAME_IN_PROGRESS()
AND IS_SKYSWOOP_AT_GROUND()
AND GET_HASH_OF_LAUNCH_SCRIPT_NAME_SCRIPT() != 0
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_OF_LAUNCH_SCRIPT_NAME_SCRIPT()) = 0
//Start a timer
IF !HAS_NET_TIMER_STARTED(stNoFmTimer)
START_NET_TIMER(stNoFmTimer)
PRINTLN("[TS] MAINTAIN_FM_NOT_RUNNING_BAIL - START_NET_TIMER(stNoFmTimer)")
bResetControl = FALSE
//If 10 seconds have passed, then turn off control
ELIF NOT bResetControl
AND HAS_NET_TIMER_EXPIRED(stNoFmTimer, 10000)
PRINTLN("[TS] MAINTAIN_FM_NOT_RUNNING_BAIL - NET_SET_PLAYER_CONTROL")
bResetControl = TRUE
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_SET_INVISIBLE | NSPC_CLEAR_TASKS | NSPC_NO_COLLISION | NSPC_FREEZE_POSITION)
//If 120 seconds has passed then call network bail, main transtion will pick up on it.
ELIF HAS_NET_TIMER_EXPIRED(stNoFmTimer, g_sMPTunables.iFmBootCheckTimeOut)
PRINTLN("[TS] * MAINTAIN_FM_NOT_RUNNING_BAIL - NETWORK_BAIL")
RESET_NET_TIMER(stNoFmTimer)
bResetControl = FALSE
NETWORK_BAIL(ENUM_TO_INT(NETWORK_BAIL_FM_NOT_RUNNING))
ENDIF
ELSE
IF HAS_NET_TIMER_STARTED(stNoFmTimer)
PRINTLN("[TS] MAINTAIN_FM_NOT_RUNNING_BAIL - RESET_NET_TIMER")
RESET_NET_TIMER(stNoFmTimer)
ENDIF
bResetControl = FALSE
ENDIF
ENDPROC
PROC MAINTAIN_OUT_OF_JOB_TRANSITIONS_FRONT_END_RADIO()
g_bPlayEndOfJobRadioFrontEnd = FALSE
//
// SWITCH g_iPlayEndOfJobRadioFrontEndState
//
// CASE 0
// IF g_bPlayEndOfJobRadioFrontEnd
// SET_AUDIO_FLAG("MobileRadioInGame", TRUE)
// SET_MOBILE_PHONE_RADIO_STATE(TRUE)
// SET_AUDIO_FLAG("AllowRadioDuringSwitch", TRUE)
// g_iPlayEndOfJobRadioFrontEndState++
// PRINTLN("[WJK] - MAINTAIN_OUT_OF_JOB_TRANSITIONS_FRONT_END_RADIO - front end radio requested on.")
// ENDIF
// BREAK
//
// CASE 1
// IF NOT g_bPlayEndOfJobRadioFrontEnd
// SET_AUDIO_FLAG("MobileRadioInGame", FALSE)
// SET_MOBILE_PHONE_RADIO_STATE(FALSE)
// SET_AUDIO_FLAG("AllowRadioDuringSwitch", FALSE)
// g_iPlayEndOfJobRadioFrontEndState = 0
// PRINTLN("[WJK] - MAINTAIN_OUT_OF_JOB_TRANSITIONS_FRONT_END_RADIO - front end radio requested off.")
// ENDIF
// BREAK
//
// ENDSWITCH
//
ENDPROC
// Ensures that the player can't zoom their scope in and out unless they are holding the aim key.
// Resolves conflicts between other button inputs (phone/selector) if a scope view is locked on
// screen without INPUT_AIM being held. -BenR
PROC MAINTAIN_BLOCK_ZOOM_INPUT_FOR_LOCKED_SCOPE_VIEWS()
IF GET_ALLOW_MOVEMENT_WHILE_ZOOMED()
PED_INDEX piPlayerPed = PLAYER_PED_ID()
IF NOT IS_PED_INJURED(piPlayerPed)
AND NOT IS_CELLPHONE_CAMERA_IN_USE()
WEAPON_TYPE ePlayerWeapon = WEAPONTYPE_INVALID
GET_CURRENT_PED_WEAPON(piPlayerPed, ePlayerWeapon)
IF ePlayerWeapon = WEAPONTYPE_UNARMED
EXIT
ENDIF
//only need to update this on weapon change
IF ePlayerWeapon != ePlayerCurWeapon
bPlayerHasScopedWeapon = HAS_PED_WEAPON_GOT_A_SCOPE(piPlayerPed, ePlayerWeapon)
ePlayerCurWeapon = ePlayerWeapon
ENDIF
//Player has a scoped weapon in their hand.
IF bPlayerHasScopedWeapon
//Player isn't holding aim. If the scope is up then it must
//be locked on screen by script.
IF NOT IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_AIM)
AND NOT IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN_ONLY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_OUT_ONLY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN_SECONDARY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_OUT_SECONDARY)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// Fix for 2413528: Block free cam recording while sniping from helis. The player's model
// is contorted while they shoot like this but is usually hidden behind the camera. We
// don't want the player seeing it in Director Mode. -BenR
PROC MAINTAIN_BLOCK_FREECAM_RECORDING_WHILE_HELI_SNIPING()
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
//Player is in a heli.
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())))
WEAPON_TYPE ePlayerWeapon = WEAPONTYPE_INVALID
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), ePlayerWeapon)
//Player has a scoped weapon in their hand.
IF HAS_PED_WEAPON_GOT_A_SCOPE(PLAYER_PED_ID(), ePlayerWeapon)
//Player is aiming.
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_AIM)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_MP_POST_MISSION_TRANSITION_AUDIO()
SWITCH g_TransitionSessionNonResetVars.sPostMissionCleanupData.sPostMissionTransitionAudioData.eState
CASE MP_POST_MISSION_TRANSITION_AUDIO_STATE_OFF
IF g_TransitionSessionNonResetVars.sPostMissionCleanupData.sPostMissionTransitionAudioData.bRunPostMatchTransitionScene
START_AUDIO_SCENE("MP_POST_MATCH_TRANSITION_SCENE")
g_TransitionSessionNonResetVars.sPostMissionCleanupData.sPostMissionTransitionAudioData.eState = MP_POST_MISSION_TRANSITION_AUDIO_STATE_ON
PRINTLN("[PMC] - MAINTAIN_MP_POST_MISSION_TRANSITION_AUDIO - called START_AUDIO_SCENE(MP_POST_MATCH_TRANSITION_SCENE).")
ENDIF
BREAK
CASE MP_POST_MISSION_TRANSITION_AUDIO_STATE_ON
IF NOT g_TransitionSessionNonResetVars.sPostMissionCleanupData.sPostMissionTransitionAudioData.bRunPostMatchTransitionScene
IF IS_AUDIO_SCENE_ACTIVE("MP_POST_MATCH_TRANSITION_SCENE")
STOP_AUDIO_SCENE("MP_POST_MATCH_TRANSITION_SCENE")
g_TransitionSessionNonResetVars.sPostMissionCleanupData.sPostMissionTransitionAudioData.eState = MP_POST_MISSION_TRANSITION_AUDIO_STATE_OFF
PRINTLN("[PMC] - MAINTAIN_MP_POST_MISSION_TRANSITION_AUDIO - called STOP_AUDIO_SCENE(MP_POST_MATCH_TRANSITION_SCENE).")
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC MAINTAIN_SCRIPT_EVENT_LISTENER()
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("error_listener")) <= 0
#IF IS_DEBUG_BUILD
IF iErrorListenerShutdownTime = -1
iErrorListenerShutdownTime = GET_GAME_TIMER()
ENDIF
IF NOT bHaveLaunchedErrorListener
OR GET_GAME_TIMER() - iErrorListenerShutdownTime >= ciERROR_LISTENER_RELAUNCH_DELAY
#ENDIF //IS_DEBUG_BUILD
REQUEST_SCRIPT("error_listener")
IF HAS_SCRIPT_LOADED("error_listener")
START_NEW_SCRIPT( "error_listener", DEFAULT_STACK_SIZE)
PRINTLN("[error_listener] Launching error_listener.sc")
SET_SCRIPT_AS_NO_LONGER_NEEDED("error_listener")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("[error_listener] Launching error_listener.sc")
#ENDIF
#IF IS_DEBUG_BUILD
iErrorListenerShutdownTime = -1
bHaveLaunchedErrorListener = TRUE
#ENDIF //IS_DEBUG_BUILD
ENDIF
#IF IS_DEBUG_BUILD
ENDIF
#ENDIF //IS_DEBUG_BUILD
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
BOOL bSkyCamUp
BOOL bSkyCamDown
BOOL bFadeScreenIn
BOOL bToggleRender
BOOL bPlayerControlOn
BOOL bPostFxStopAll
PROC MAINTAIN_SKY_CAM_WIDGETS()
IF bSkyCamUp
bSkyCamUp = FALSE
SET_TRANSITION_SESSION_PULL_CAM_UP_FOR_SESSION_CHANGE()
ENDIF
IF bSkyCamDown
bSkyCamDown = FALSE
SET_TRANSITION_SESSION_PULL_CAM_DOWN_FOR_SESSION_CHANGE()
ENDIF
IF bFadeScreenIn
bFadeScreenIn = FALSE
IF IS_SCREEN_FADED_OUT()
OR IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_IN(500)
ENDIF
ENDIF
IF bToggleRender
bToggleRender = FALSE
TOGGLE_PAUSED_RENDERPHASES(TRUE)
TOGGLE_PAUSED_RENDERPHASES(TRUE)
RESET_PAUSED_RENDERPHASES()
ENDIF
IF bPlayerControlOn
bPlayerControlOn = FALSE
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
IF bPostFxStopAll
ANIMPOSTFX_STOP_ALL()
bPostFxStopAll = FALSE
ENDIF
ENDPROC
// DEBUG: Set up a 'Force Cleanup' tickbox widget
PROC SET_UP_MAIN_Persistent_Widgets()
IF (g_eCachedLevel != LEVEL_NET_TEST)
main_pers_widget = main_pers_widget
STRING stWidgetGroup = "Main Persistent Widgets"
IF GET_COMMANDLINE_PARAM_EXISTS("sc_skyCamWidgets")
stWidgetGroup = " Main Persistent Widgets"
ENDIF
main_pers_widget = START_WIDGET_GROUP(stWidgetGroup)
IF GET_COMMANDLINE_PARAM_EXISTS("sc_skyCamWidgets")
START_WIDGET_GROUP(" Sky Cam Widgets")
ADD_WIDGET_BOOL("Fade In", bFadeScreenIn)
ADD_WIDGET_BOOL("Sky Cam Down", bSkyCamDown)
ADD_WIDGET_BOOL("Sky Cam Up", bSkyCamUp)
ADD_WIDGET_BOOL("Player Control On", bPlayerControlOn)
ADD_WIDGET_BOOL("Toggle Render Phase", bToggleRender)
ADD_WIDGET_BOOL("ANIMPOSTFX_STOP_ALL", bPostFxStopAll)
STOP_WIDGET_GROUP()
ENDIF
ADD_WIDGET_BOOL("bDoSendDataJson", g_sSendDataJson.bDoSendDataJson)
ADD_WIDGET_BOOL("RefreshTuneNow", bRefreshTuneNow)
ADD_WIDGET_BOOL("RefreshBgNow", bRefreshBgNow)
ADD_WIDGET_BOOL("Force Cleanup (SP to MP)", m_doForceCleanupSPtoMP)
ADD_WIDGET_BOOL("Force Relaunch (MP to SP)", m_launchSPMain)
START_WIDGET_GROUP("MP Content Tickers")
ADD_WIDGET_BOOL("bForceMarstonTicker", bForceMarstonTicker)
ADD_WIDGET_BOOL("bForceMPSpecialTicker", bForceMPSpecialTicker)
ADD_WIDGET_BOOL("bForceMpCollectorsTicker", bForceMpCollectorsTicker)
ADD_WIDGET_BOOL("bPrintMartsonTickerWidgets", bPrintMartsonTickerWidgets)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("Script Relaunch")
TEXT_LABEL_63 tlStack
START_NEW_WIDGET_COMBO()
tlStack = "MICRO_STACK_SIZE (" tlStack += MICRO_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MINI_STACK_SIZE (" tlStack += MINI_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEFAULT_STACK_SIZE (" tlStack += DEFAULT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SPECIAL_ABILITY_STACK_SIZE (" tlStack += SPECIAL_ABILITY_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "FRIEND_STACK_SIZE (" tlStack += FRIEND_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SHOP_STACK_SIZE (" tlStack += SHOP_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "CELLPHONE_STACK_SIZE (" tlStack += CELLPHONE_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "VEHICLE_SPAWN_STACK_SIZE (" tlStack += VEHICLE_SPAWN_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "PAUSE_MENU_SCRIPT_STACK_SIZE (" tlStack += PAUSE_MENU_SCRIPT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "APP_INTERNET_STACK_SIZE (" tlStack += APP_INTERNET_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MP_MISSION_STACK_SIZE (" tlStack += MULTIPLAYER_MISSION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "CONTACTS_APP_STACK_SIZE (" tlStack += CONTACTS_APP_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEBUG_SCRIPT_STACK_SIZE (" tlStack += DEBUG_SCRIPT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "INTERACTION_MENU_STACK_SIZE (" tlStack += INTERACTION_MENU_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SCRIPT_XML_STACK_SIZE (" tlStack += SCRIPT_XML_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "INGAMEHUD_STACK_SIZE (" tlStack += INGAMEHUD_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "PROPERTY_INT_STACK_SIZE (" tlStack += PROPERTY_INT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "TRANSITION_STACK_SIZE (" tlStack += TRANSITION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "FMMC_LAUNCHER_STACK_SIZE (" tlStack += FMMC_LAUNCHER_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MP_FREEMODE_STACK_SIZE (" tlStack += MULTIPLAYER_FREEMODE_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MISSION_STACK_SIZE (" tlStack += MISSION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEBUG_MENU_STACK_SIZE (" tlStack += DEBUG_MENU_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SHOP_CONTROLLER_STACK_SIZE (" tlStack += SHOP_CONTROLLER_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
STOP_WIDGET_COMBO("Stack Size", iStackSizeForScriptLaunch)
twScriptName = ADD_TEXT_WIDGET("Script name")
ADD_WIDGET_BOOL("Kill scripts with name", bKillScriptsWithName)
ADD_WIDGET_BOOL("Launch script with name", bLaunchScriptWithName)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDIF
ENDPROC
#ENDIF
SCRIPT
CPRINTLN(DEBUG_INIT, "main_persistant.sc started.")
// Ensure this script persists during network game
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
#IF IS_DEBUG_BUILD
if g_bLoadedClifford
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("debugCLF")) = 0
Request_And_Launch_Debug_Script_With_Wait()
ENDIF
elif g_bLoadedNorman
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("debugNRM")) = 0
Request_And_Launch_Debug_Script_With_Wait()
ENDIF
else
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("debug")) = 0
Request_And_Launch_Debug_Script_With_Wait()
ENDIF
endif
#ENDIF
// SET_CURRENT_GAMEMODE(GAMEMODE_EMPTY)
#IF IS_DEBUG_BUILD
VALIDATE_ENUM_VALUES()
#ENDIF
// Load and launch all persistent scripts
Request_And_Launch_Persistent_Scripts_With_Wait()
// The SP Main script needs launched on startup (and then relaunched on return from MP)
m_launchSPMain = TRUE
g_bHaveBeenInMultiplayer = FALSE
#IF IS_DEBUG_BUILD
// DEBUG: Set up a 'Force Cleanup' tickbox widget
IF g_eCachedLevel != LEVEL_NET_TEST
main_pers_widget = main_pers_widget
main_pers_widget = START_WIDGET_GROUP("Main Persistent Widgets")
ADD_WIDGET_BOOL("bDoSendDataJson", g_sSendDataJson.bDoSendDataJson)
ADD_WIDGET_BOOL("RefreshTuneNow", bRefreshTuneNow)
ADD_WIDGET_BOOL("RefreshBgNow", bRefreshBgNow)
ADD_WIDGET_BOOL("Force Cleanup (SP to MP)", m_doForceCleanupSPtoMP)
ADD_WIDGET_INT_SLIDER("PosixTimeMigrateCreationDate", g_iPosixTimeMigrateCreationDate, 0, 1920392540, 1)
ADD_WIDGET_BOOL("Force Relaunch (MP to SP)", m_launchSPMain)
ADD_WIDGET_BOOL("g_b_DoIntroDLCBink", g_b_DoIntroDLCBink)
ADD_WIDGET_BOOL("g_b_ClearIntroDLCBinkPackedStat", g_b_ClearIntroDLCBinkPackedStat)
ADD_WIDGET_BOOL("g_b_DontSpawnAtCasinoAfterBink", g_b_DontSpawnAtCasinoAfterBink)
#IF FEATURE_COPS_N_CROOKS
ADD_WIDGET_BOOL("g_b_DontSpawnAtPoliceStationAfterBink",g_b_DontSpawnAtIntroDLCLocAfterBink)
#ENDIF
START_WIDGET_GROUP("MP Content Tickers")
ADD_WIDGET_BOOL("bForceMarstonTicker", bForceMarstonTicker)
ADD_WIDGET_BOOL("bForceMPSpecialTicker", bForceMPSpecialTicker)
ADD_WIDGET_BOOL("bForceMpCollectorsTicker", bForceMpCollectorsTicker)
ADD_WIDGET_BOOL("bPrintMartsonTickerWidgets", bPrintMartsonTickerWidgets)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("Script Relaunch")
TEXT_LABEL_63 tlStack
START_NEW_WIDGET_COMBO()
tlStack = "MICRO_STACK_SIZE (" tlStack += MICRO_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MINI_STACK_SIZE (" tlStack += MINI_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEFAULT_STACK_SIZE (" tlStack += DEFAULT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SPECIAL_ABILITY_STACK_SIZE (" tlStack += SPECIAL_ABILITY_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "FRIEND_STACK_SIZE (" tlStack += FRIEND_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SHOP_STACK_SIZE (" tlStack += SHOP_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "CELLPHONE_STACK_SIZE (" tlStack += CELLPHONE_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "VEHICLE_SPAWN_STACK_SIZE (" tlStack += VEHICLE_SPAWN_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "PAUSE_MENU_SCRIPT_STACK_SIZE (" tlStack += PAUSE_MENU_SCRIPT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "APP_INTERNET_STACK_SIZE (" tlStack += APP_INTERNET_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MP_MISSION_STACK_SIZE (" tlStack += MULTIPLAYER_MISSION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "CONTACTS_APP_STACK_SIZE (" tlStack += CONTACTS_APP_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEBUG_SCRIPT_STACK_SIZE (" tlStack += DEBUG_SCRIPT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "INTERACTION_MENU_STACK_SIZE (" tlStack += INTERACTION_MENU_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SCRIPT_XML_STACK_SIZE (" tlStack += SCRIPT_XML_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "INGAMEHUD_STACK_SIZE (" tlStack += INGAMEHUD_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "PROPERTY_INT_STACK_SIZE (" tlStack += PROPERTY_INT_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "TRANSITION_STACK_SIZE (" tlStack += TRANSITION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "FMMC_LAUNCHER_STACK_SIZE (" tlStack += FMMC_LAUNCHER_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MP_FREEMODE_STACK_SIZE (" tlStack += MULTIPLAYER_FREEMODE_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "MISSION_STACK_SIZE (" tlStack += MISSION_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "DEBUG_MENU_STACK_SIZE (" tlStack += DEBUG_MENU_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
tlStack = "SHOP_CONTROLLER_STACK_SIZE (" tlStack += SHOP_CONTROLLER_STACK_SIZE tlStack += ")" ADD_TO_WIDGET_COMBO(tlStack)
STOP_WIDGET_COMBO("Stack Size", iStackSizeForScriptLaunch)
twScriptName = ADD_TEXT_WIDGET("Script name")
ADD_WIDGET_BOOL("Kill scripts with name", bKillScriptsWithName)
ADD_WIDGET_BOOL("Launch script with name", bLaunchScriptWithName)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD
NET_NL()NET_PRINT("[TS] * BC: NEW GAME STARTING HERE! ")
NET_NL()NET_PRINT("MAINPERSIST_START: NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE = ")NET_PRINT_BOOL(NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE())
NET_NL()NET_PRINT("MAINPERSIST_START: NETWORK_HAS_CONFIRMED_INVITE = ")NET_PRINT_BOOL(NETWORK_HAS_CONFIRMED_INVITE())
NET_NL()NET_PRINT("MAINPERSIST_START: NETWORK_IS_SIGNED_ONLINE = ")NET_PRINT_BOOL(NETWORK_IS_SIGNED_ONLINE())
NET_NL()NET_PRINT("MAINPERSIST_START: NETWORK_IS_SIGNED_IN = ")NET_PRINT_BOOL(NETWORK_IS_SIGNED_IN())
NET_NL()NET_PRINT("MAINPERSIST_START: LOBBY_AUTO_MULTIPLAYER_FREEMODE = ")NET_PRINT_BOOL(LOBBY_AUTO_MULTIPLAYER_FREEMODE())
#ENDIF
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("MAINPERSIST_START: NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE = ", NETWORK_SESSION_IS_AWAITING_INVITE_RESPONSE())
PRINTLN_FINAL("MAINPERSIST_START: NETWORK_HAS_CONFIRMED_INVITE = ", NETWORK_HAS_CONFIRMED_INVITE())
PRINTLN_FINAL("MAINPERSIST_START: NETWORK_IS_SIGNED_ONLINE = ", NETWORK_IS_SIGNED_ONLINE())
PRINTLN_FINAL("MAINPERSIST_START: NETWORK_IS_SIGNED_IN = ", NETWORK_IS_SIGNED_IN())
PRINTLN_FINAL("MAINPERSIST_START: LOBBY_AUTO_MULTIPLAYER_FREEMODE = ", LOBBY_AUTO_MULTIPLAYER_FREEMODE())
#ENDIF
#IF FEATURE_SP_DLC_BEAST_SECRET
#IF NOT FEATURE_SP_DLC_BEAST_SECRET_DEBUG
Reset_Beast_Finale_Variables()
#IF IS_DEBUG_BUILD
Create_Beast_Finale_Widgets(main_pers_widget)
#ENDIF
#ENDIF
#ENDIF
SET_PLAYER_HAVE_PRIVILEGES(HAS_ONLINE_PRIVILAGES())
g_Private_Is_Running_Boot_Invite_Supress = TRUE
REINIT_NET_TIMER(SignInLoadStatsTimer, TRUE)
NETWORK_SUPPRESS_INVITE(TRUE)
NET_NL()NET_PRINT("MAINPERSIST_START: DONT_RENDER_IN_GAME_UI(FALSE) ")
DONT_RENDER_IN_GAME_UI(FALSE)
// Tell code that we're ready
NETWORK_SET_SCRIPT_READY_FOR_EVENTS(TRUE)
BOOL bLoadGlobalBlock
IF (NETWORK_HAS_CONFIRMED_INVITE())
bLoadGlobalBlock = TRUE
NET_NL()NET_PRINT(" NETWORK_REQUEST_INVITE_CONFIRMED_EVENT - called from main_persistent.sc ")
NETWORK_REQUEST_INVITE_CONFIRMED_EVENT()
SET_INVITED_PROCESSING_AFTER_REPLAY(TRUE)
CLEAR_SUPPRESS_INVITE_AT_BOOT()
//IF joinging a transition invite
SET_TRANSITION_SESSIONS_ACCEPTING_INVITE()
//Set taht it's from boots
SET_TRANSITION_SESSIONS_ACCEPTING_INVITE_FROM_BOOT()
ENDIF
INT iCouponStep = 60000
INT iCouponTick = GET_GAME_TIMER() + iCouponStep
REMOVE_RELATIONSHIP_GROUP(RELGROUPHASH_FAMILY_M)
ADD_RELATIONSHIP_GROUP("RELGROUPHASH_FAMILY_M", RELGROUPHASH_FAMILY_M)
REMOVE_RELATIONSHIP_GROUP(RELGROUPHASH_FAMILY_F)
ADD_RELATIONSHIP_GROUP("RELGROUPHASH_FAMILY_F", RELGROUPHASH_FAMILY_F)
REMOVE_RELATIONSHIP_GROUP(RELGROUPHASH_FAMILY_T)
ADD_RELATIONSHIP_GROUP("RELGROUPHASH_FAMILY_T", RELGROUPHASH_FAMILY_T)
if g_bLoadedClifford
UPDATE_PLAYER_CHARACTER_RELATIONSHIPS(GET_CURRENT_PLAYER_PED_ENUMCLF())
elif g_bLoadedNorman
UPDATE_PLAYER_CHARACTER_RELATIONSHIPS(GET_CURRENT_PLAYER_PED_ENUMNRM())
else
UPDATE_PLAYER_CHARACTER_RELATIONSHIPS(GET_CURRENT_PLAYER_PED_ENUM())
endif
IF NETWORK_IS_OFFLINE_INVITE_PENDING()
CPRINTLN(DEBUG_INIT, "NETWORK_IS_OFFLINE_INVITE_PENDING = TRUE")
SET_WARNING_SCREEN_BAIL(WARNINGSCREEN_BAIL_DROPINVITE_SIGNIN, TRUE, -2)
NETWORK_CLEAR_OFFLINE_INVITE_PENDING()
ENDIF
// Main loop
WHILE (TRUE)
MP_LOOP_WAIT_ZERO()
#IF FEATURE_GEN9_STANDALONE
// gen9 introduces the conecept of script router links, process any pending links now
PROCESS_PENDING_SCRIPT_ROUTER_LINK()
#ENDIF
IF bLoadGlobalBlock
IF HAS_UGC_GLOBAL_BLOCK_LOADED()
OR LAUNCH_REGISTER_UGC_GLOBALS_SCRIPT()
SET_UGC_GLOBAL_BLOCK_LOADED()
bLoadGlobalBlock = FALSE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF g_bCleanupInGameHud = TRUE
SET_SCRIPT_AS_NO_LONGER_NEEDED("InGameHud")
g_bCleanupInGameHud = FALSE
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD
IF g_eCachedLevel != LEVEL_NET_TEST
#ENDIF
IF SHOULD_END_SINGLEPLAYER()
IF END_SINGLEPLAYER_READY_TO_START_MP()
RESET_SINGLEPLAYER_END_NOW()
PRINTLN("SHOULD_END_SINGLEPLAYER() - set to TRUE in main_persistent.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("<2140379> SHOULD_END_SINGLEPLAYER() set to TRUE in main_persistent.")
#ENDIF
ENDIF
ELIF START_UP_SINGLEPLAYER()
m_launchSPMain = TRUE
g_bInMultiplayer = FALSE
PRINTLN("START_UP_SINGLEPLAYER() - set to TRUE in main_persistent.")
#IF USE_FINAL_PRINTS
PRINTLN_FINAL("<2140379> START_UP_SINGLEPLAYER() set to TRUE in main_persistent.")
#ENDIF
ENDIF
// Skip launching the singleplayer main thread if
// running the MP test bed.
#IF IS_DEBUG_BUILD
ELIF m_launchSPMain
RESET_SINGLEPLAYER_END_NOW()
m_launchSPMain = FALSE
g_bInMultiplayer = FALSE
ENDIF
#ENDIF
// Process any script events
Process_cached_invite()
Clear_Event_Queue()
DO_DRUNK_CONTROLLER_CHECKS() //moved from DO_SCRIPT_LAUNCH_CHECKS() so it runs in MP
//Purposefully "hidden" in amongst this script. We want it to be hard
//for hackers to spot these scripts in decompiled output. -BenR
#IF FEATURE_SP_DLC_BEAST_SECRET
#IF NOT FEATURE_SP_DLC_BEAST_SECRET_DEBUG
Maintain_Beast_Finale()
#IF IS_DEBUG_BUILD
Update_Beast_Finale_Widgets(FALSE)
#ENDIF
#ENDIF
#ENDIF
// Maintain the transition sessions in FM/SP
MAINTAIN_TRANSITION_SESSIONS()
//Maintain sending data to the cloud
MAINTAIN_SEND_DATA_JSON_TO_CLOUD()
// For mp. will put this into a stand alone script.
PROCESS_LEADERBOARD_CAM()
// Early load scene for MP session transitions when exiting jobs. to help speed up transitions by starting the load scene as soon as possible.
PROCESS_TRANSITION_LOAD_SCENE()
// Fake screen fade that we can make white. Used for white fades to cover transitions in special case MP situations.
MAINTAIN_RECTANGLE()
// 2193949 clouds alpha
MAINTAIN_CLOUD_ALPHA()
//Deal with FM not running
MAINTAIN_FM_NOT_RUNNING_BAIL()
//For both SP and mp check for new coupons that need to be updated
IF iCouponTick < GET_GAME_TIMER()
UPDATE_COUPONS()
iCouponTick = GET_GAME_TIMER() + iCouponStep
ENDIF
// Shows Marston unlock ticker as soon as player is in the game and connected to the social club.
MAINTAIN_CONTENT_UNLOCK_MP_TICKERS()
MAINTAIN_TRAIN_LINE_ACTIVATION()
DO_CHECK_FOR_PICKUPS_OVERFLOWING_ACCOUNTS()
MAINTAIN_OUT_OF_JOB_TRANSITIONS_FRONT_END_RADIO()
MAINTAIN_BLOCK_ZOOM_INPUT_FOR_LOCKED_SCOPE_VIEWS()
MAINTAIN_MP_POST_MISSION_TRANSITION_AUDIO()
MAINTAIN_CELEBRATION_AUDIO()
MAINTAIN_FREEMODE_RUNNING_CHECK()
MAINTAIN_SCRIPT_EVENT_LISTENER()
iClockHours = GET_CLOCK_HOURS()
g_TransitionSessionNonResetVars.sMagnateGangBossData.iClockHours = iClockHours
// Replay Camera Movement Blocking
IF IS_REPLAY_RECORDING()
//(Strip Club)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("stripclub")) > 0
OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("stripclub_mp")) > 0
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY) //Fix for bugs 2209274, 2198600, 2195133, 2194867
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), <<115.93143, -1290.48279, 27.94359>>) < (70*70)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2209617
ENDIF
ENDIF
ENDIF
//(Ghost)
IF iClockHours = 23
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), <<3122.3154, 5549.0068, 188.4373>>) < (150*150)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2238683
ENDIF
ENDIF
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), GET_GUNRUN_ENTITY_SPAWN_COORDS(GRV_CRASH_SITE_2, GunrunLocation_CrashSite2_Zancudo, 0)) < (500*500)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2238683
ENDIF
ENDIF
// Check if the SP Main script needs to be launched
IF (m_launchSPMain)
WHILE NOT Setup_Main_Script_And_Reset_Settings()
MP_LOOP_WAIT_ZERO()
// Process any script events
Process_cached_invite()
Clear_Event_Queue()
ENDWHILE
ENDIF
// KGM
// NOTE: Not doing anything with this variable yet: g_bMPTutorialIsActive
// Check for Forcing a Cleanup as though moving from SP to MP.
#IF IS_DEBUG_BUILD
IF (g_b_ClearIntroDLCBinkPackedStat)
#IF FEATURE_COPS_N_CROOKS
SET_PACKED_STAT_BOOL(PACKED_MP_STAT_HAS_SHOWN_CNC_INTRO_BINK, FALSE)
PRINTLN("[DLC_INTRO_BINK] clearing PACKED_MP_STAT_HAS_SHOWN_CNC_INTRO_BINK ")
#ENDIF
g_b_ClearIntroDLCBinkPackedStat = FALSE
ENDIF
IF (m_doForceCleanupSPtoMP)
INT iNoIntialThreads = 0
iNoIntialThreads = GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initial"))
WHILE iNoIntialThreads > 0
CPRINTLN(DEBUG_INIT_SP, "number of \"initial\" threads is ", iNoIntialThreads, ".")
WAIT(0)
ENDWHILE
iNoIntialThreads = GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initialCLF"))
WHILE iNoIntialThreads > 0
CPRINTLN(DEBUG_INIT_SP, "number of \"initialCLF\" threads is ", iNoIntialThreads, ".")
WAIT(0)
ENDWHILE
iNoIntialThreads = GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initialNRM"))
WHILE iNoIntialThreads > 0
CPRINTLN(DEBUG_INIT_SP, "number of \"initialNRM\" threads is ", iNoIntialThreads, ".")
WAIT(0)
ENDWHILE
FORCE_CLEANUP(FORCE_CLEANUP_FLAG_SP_TO_MP)
m_doForceCleanupSPtoMP = FALSE
ENDIF
//Allow re-launching of the debug thread if it somehow dies.
INT debugScriptNameHash
IF g_bLoadedClifford
debugScriptNameHash = HASH("debugCLF")
ELIF g_bLoadedNorman
debugScriptNameHash = HASH("debugNRM")
ELSE
debugScriptNameHash = HASH("debug")
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(debugScriptNameHash) = 0
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F1,KEYBOARD_MODIFIER_SHIFT,"Start debug")
Request_And_Launch_Debug_Script_With_Wait()
ENDIF
ENDIF
IF bKillScriptsWithName
bKillScriptsWithName = FALSE
IF NOT IS_STRING_NULL_OR_EMPTY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))
AND DOES_SCRIPT_EXIST(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))) > 0
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))
ENDIF
ELSE
SCRIPT_ASSERT("Unable to launch script - invalid script name")
ENDIF
ENDIF
IF bLaunchScriptWithName
bLaunchScriptWithName = FALSE
IF NOT IS_STRING_NULL_OR_EMPTY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))
AND DOES_SCRIPT_EXIST(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName))
IF GET_NUMBER_OF_FREE_STACKS_OF_THIS_SIZE(GET_STACK_SIZE_FROM_INT_WIDGET()) > 0
REQUEST_SCRIPT_WITH_NAME_HASH(GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName)))
IF HAS_SCRIPT_WITH_NAME_HASH_LOADED(GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName)))
START_NEW_SCRIPT_WITH_NAME_HASH(GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName)), GET_STACK_SIZE_FROM_INT_WIDGET())
SET_SCRIPT_WITH_NAME_HASH_AS_NO_LONGER_NEEDED(GET_HASH_KEY(GET_CONTENTS_OF_TEXT_WIDGET(twScriptName)))
ELSE
bLaunchScriptWithName = TRUE
ENDIF
ELSE
SCRIPT_ASSERT("Unable to launch script - stack size not available")
ENDIF
ELSE
SCRIPT_ASSERT("Unable to launch script - invalid script name")
ENDIF
ENDIF
IF bRefreshBgNow
// IF NATIVE_TO_INT(PLAYER_ID()) != -1
// GlobalplayerBD_FM_2[NATIVE_TO_INT(PLAYER_ID())].iBgScriptTime = 0
// ENDIF
PRINTLN("[TS] PROCESS_EVENT_NETWORK_PRESENCE_TRIGGER - NETWORK_REQUEST_CLOUD_BACKGROUND_SCRIPTS()")
//For 1881326
NETWORK_REQUEST_CLOUD_BACKGROUND_SCRIPTS()
//g_sBackGroundStruct.bKillActive = TRUE
bRefreshBgNow = FALSE
ENDIF
IF bRefreshTuneNow
PRINTLN("[TS] bRefreshTuneNow - NETWORK_REQUEST_CLOUD_TUNABLES ()")
NETWORK_REQUEST_CLOUD_TUNABLES()
bRefreshTuneNow = FALSE
ENDIF
IF g_dRestartDebugSc
IF Request_And_Launch_Debug_Script_Async()
g_dRestartDebugSc = FALSE
ENDIF
ENDIF
#ENDIF
ENDWHILE
ENDSCRIPT