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

5062 lines
214 KiB
Python
Executable File

/* ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// Date: 22/04/2014 //
// //
// Script: Celebrations.sc //
// //
// Description: Handles running the end celebration screen independently of the mission controller script. //
// Originally requested so we can do session to session transitions behind the celebration screen. //
// //
// Author: William.Kennedy@RockstarNorth.com //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */
// **************** //
// USING INCLUDES //
// **************** //
USING "globals.sch"
USING "commands_network.sch"
USING "script_player.sch"
USING "commands_path.sch"
USING "commands_fire.sch"
USING "building_control_public.sch"
USING "cutscene_public.sch"
USING "commands_streaming.sch"
USING "net_events.sch"
USING "MP_SkyCam.sch"
USING "net_spawn.sch"
USING "net_mission.sch"
USING "net_scoring_common.sch"
USING "net_ambience.sch"
USING "net_rank_ui.sch"
USING "net_hud_activating.sch"
USING "selector_public.sch"
USING "help_at_location.sch"
USING "net_objective_text.sch"
USING "net_cutscene.sch"
USING "carmod_shop_private.sch"
USING "freemode_header.sch"
USING "net_mission_locate_message.sch"
USING "NET_TAXI.sch"
USING "cheat_handler.sch"
USING "net_wait_zero.sch"
USING "net_celebration_screen.sch"
USING "net_heists_common.sch"
USING "net_heist_summary.sch"
#IF IS_DEBUG_BUILD
USING "net_debug_log.sch"
#ENDIF
// **************************** //
// ENUMS, STRUCTS & CONSTS //
// **************************** //
CONST_INT CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED 0
CONST_INT CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP 1
CONST_INT CELEB_GENERAL_BITSET_SETUP_WINNER_SCENE_MOVIE 2
CONST_INT CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE 3
CONST_INT CELEB_GENERAL_BITSET_TRANSITIONED_INTO_BW 4
CONST_INT CELEB_GENERAL_BITSET_TRANSITIONED_OUT_OF_BW 5
CONST_INT CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC 6
CONST_INT CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT 7
CONST_INT CELEB_GENERAL_STARTED_WHITE_RECTANGLE_FADE 8
CONST_INT CELEB_GENERAL_STARTED_STATS_SCREEN_MUSIC_EVENT 9
CONST_INT CELEB_GENERAL_STOPPED_STATS_SCREEN_MUSIC_EVENT 10
CONST_INT CELEB_GENERAL_PLAYED_SUCCESS_NEUTRAL_FX_STACK 11
CONST_INT CELEB_GENERAL_REQUESTED_CUTSCENE_MUSIC_EVENT 12
CONST_INT CELEB_GENERAL_SET_ALLOW_RADIO_OVER_FADE_FLAG 13
CONST_INT CELEB_GENERAL_SET_ALLOW_CUTSCENE_OVER_FADE_FLAG 14
CONST_INT CELEB_GENERAL_BITSET_FREEZE_MICROPHONE 15
CONST_INT CELEB_GENERAL_STARTED_FADE_BLACK_SCENE 16
CONST_INT CELEB_GENERAL_FIX_POSITION 17
CONST_INT HEIST_WINNER_SCENE_SET_PLAYER_FOR_MOCAP 0
CONST_INT HEIST_WINNER_SCENE_INITIALISED_DATA 1
CONST_INT HEIST_WINNER_SCENE_SWITCHED_OF_LOADING_SPINNER 2
CONST_INT HEIST_WINNER_SCENE_STARTED_WAITING_SPINNER 3
CONST_INT HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA 4
CONST_INT HEIST_WINNER_SCENE_CREATED_ENTITIES 5
CONST_INT HEIST_WINNER_SCENE_SET_FOCUS_POS 6
CONST_INT HEIST_WINNER_MOCAP_LOAD_FINISHED 9999
CONST_INT HEIST_MAX_WINNER_SCENE_OBJECTS 5
CONST_INT HEIST_WINNER_SCENE_STRIP_GLASS 0
CONST_INT HEIST_WINNER_SCENE_STRIP_GLASS_1 1
CONST_INT HEIST_WINNER_SCENE_STRIP_GLASS_2 2
CONST_INT HEIST_WINNER_SCENE_STRIP_GLASS_3 3
CONST_INT HEIST_WINNER_SCENE_STRIP_WHISKEY 4
CONST_INT HEIST_WINNER_SCENE_APT_CHAMP_2 0
CONST_INT HEIST_WINNER_SCENE_APT_CHAMP_3 1
CONST_INT HEIST_WINNER_SCENE_APT_CHAMP_4 2
CONST_INT HEIST_WINNER_SCENE_BAR_BOTTLE 0
CONST_INT HEIST_WINNER_SCENE_BAR_BOTTLE_1 1
CONST_INT WHITE_SCREEN_HOLD_TIME 3000
CONST_INT DELAY_FOR_MUSIC_TIME 2000
// Backup winner scene peds.
INT iNumPlayersInScene
CONST_INT NUM_PLAYERS_NEEDED_FOR_STRIP_SCENE 4
CONST_INT NUM_PLAYERS_NEEDED_FOR_TREVOR_SCENE 0
CONST_INT NUM_PLAYERS_NEEDED_FOR_ROOFTOP_SCENE 4
CONST_INT NUM_PLAYERS_NEEDED_FOR_APARTMENT_SCENE 4
CONST_INT NUM_PLAYERS_NEEDED_FOR_CASINO_HEIST 4
CONST_INT NUM_PLAYERS_NEEDED_FOR_BAR_SCENE 2
#IF FEATURE_HEIST_ISLAND
CONST_INT NUM_PLAYERS_NEEDED_FOR_ISLAND_HEIST 4
CONST_INT COMPANION_PED_ID 1
#ENDIF
//Scene specific vehicles/props
CONST_INT CASINO_HEIST_ROOF_SCENE_VEHICLES 13
CONST_INT CASINO_HEIST_BAR_SCENE_PROPS 3
CONST_INT CASINO_ISLAND_HEIST_SCENE_PROPS 4
// Game States
ENUM eGAME_STATE
eGAME_STATE_INI = 0,
eGAME_STATE_INI_SPAWN,
eGAME_STATE_RUNNING,
eGAME_STATE_END
ENDENUM
// Celebration States
ENUM eCELEBRATION_STATE
eCELEBRATIONSTATE_INIT_MOVIE = 0,
eCELEBRATIONSTATE_LOAD_MOVIE,
eCELEBRATIONSTATE_DRAW_MOVIE,
eCELEBRATIONSTATE_DO_WINNER_SCENE,
eCELEBRATIONSTATE_FADE_IN,
eCELEBRATIONSTATE_APARTMENT_FAILSAFE,
eCELEBRATIONSTATE_CLEANUP
ENDENUM
// Heist Winner Scene
ENUM eHEIST_WINNER_SCENE_STAGE
eHEISTWINNERSCENESTAGE_INIT = 0,
eHEISTWINNERSCENESTAGE_LOAD_SCENE,
eHEISTWINNERSCENESTAGE_LOAD_SIMPLE_INTERIOR,
eHEISTWINNERSCENESTAGE_DELAY_BEFORE_CUTSCENE_START,
eHEISTWINNERSCENESTAGE_START_SCENE,
eHEISTWINNERSCENESTAGE_START_CELEBRATION_MOVIE,
eHEISTWINNERSCENESTAGE_RUN_SCENE,
eHEISTWINNERSCENESTAGE_WARP_TO_OUTSIDE_STRIP_CLUB,
eHEISTWINNERSCENESTAGE_DO_JOINED_MISSION_AS_SPECTATOR_WARP,
eHEISTWINNERSCENESTAGE_WARP_TO_POST_MISSION_VECTOR,
eHEISTWINNERSCENESTAGE_SCTV_FADE_IN_DELAY,
eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE,
eHEISTWINNERSCENESTAGE_SHARD_OVER_PAUSED_RENDER,
eHEISTWINNERSCENESTAGE_END
ENDENUM
ENUM eHEIST_WINNER_SCENE_TYPE
eHEISTWINNERSCENETYPE_ROOFTOP = 0,
eHEISTWINNERSCENETYPE_BAR,
eHEISTWINNERSCENETYPE_APARTMENT,
eHEISTWINNERSCENETYPE_STRIP_CLUB,
eHEISTWINNERSCENETYPE_TREVOR,
eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF,
eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
,eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
ENDENUM
INT iCelebrationCloningStage
SCRIPT_TIMER timerFadeFlashDelay
SCRIPT_TIMER timerDelayForCutsceneMusic
SCRIPT_TIMER waitForApartmentFadeIntimer
//SCALEFORM_RETURN_INDEX movieLengthReturnIndex
INT iCelebrationGeneralBitset
INT iPreLoadStage
INT iApartmentFailsafeStage
INT iJoinedMissionAsSpectatorWarpStage
BOOL bActivateInteractionMenuOnCleanup
BOOL bWaitingOnPlayersTimeout
SCRIPT_TIMER timerWaitingOnPlayers
SCRIPT_TIMER timerFrozenForCelebrationScreen
SCRIPT_TIMER timerShardFallenAway
SCRIPT_TIMER timerSctvFadeInDelay
SCRIPT_TIMER timerPlaceCameraFailSafeTimer
// url:bugstar:2255042
INT iFreezeMicrophoneDelay = 0
STRUCT STAND_ALONE_CELEBRATION_DATA_STRUCT
eGAME_STATE eGameState
eCELEBRATION_STATE eCelebrationState
INT iGameState
INT iFlagsBitset
SCRIPT_TIMER timeTerminate
ENDSTRUCT
STRUCT STRUCT_HEIST_WINNER_SCENE_PED_DATA
PED_INDEX pedId
VECTOR vSpawnPosition
FLOAT fSpawnHeading
#IF IS_DEBUG_BUILD
VECTOR vPedPosDebug
FLOAT fPedHeadingDebug
BOOL bOverridePedWorldData
#ENDIF
ENDSTRUCT
STRUCT STRUCT_HEIST_WINNER_SCENE_EXTRA_PED_DATA
PED_INDEX pedId
VECTOR vSpawnPosition
FLOAT fSpawnHeading
MODEL_NAMES eModel
TEXT_LABEL_23 tl23_handle
BOOL bAppliedHeadBlood
ENDSTRUCT
STRUCT STRUCT_HEIST_WINNER_SCENE_OBJECT_DATA
ENTITY_INDEX entityId
VECTOR vSpawnPosition
FLOAT fSpawnHeading
MODEL_NAMES eModel
TEXT_LABEL_23 tl23_handle
ENDSTRUCT
ENUM SHARD_OVER_FADE_STAGE
SOF_FADE_OUT,
SOF_SETUP_SHARD,
SOF_DRAW,
SOF_CLEANUP
ENDENUM
STRUCT STRUCT_HEIST_END_WINNER_SCENE_DATA
eHEIST_WINNER_SCENE_TYPE eSceneType
eHEIST_WINNER_SCENE_STAGE eSceneStage
VECTOR vPlayerPosForLoadingScene
FLOAT fPlayerHeadingForLoadingScene
VECTOR vPlayerPosForAfterScene
FLOAT fPlayerHeadingForafterScene
VECTOR vFocusPosition
INT iMyScenePositionIndex
INT iLoadMocapStage
INT iMocapRegisteredPedsCount
STRUCT_HEIST_WINNER_SCENE_PED_DATA playerPedClone[4]
STRUCT_HEIST_WINNER_SCENE_EXTRA_PED_DATA extraPed
STRUCT_HEIST_WINNER_SCENE_OBJECT_DATA object[HEIST_MAX_WINNER_SCENE_OBJECTS]
INT iBitset
SCRIPT_TIMER sceneTimer
BOOL bCreatedPlayerPedClones
INTERIOR_INSTANCE_INDEX interiorIndex
STRING strInteriorName
STRING strRoomName
SCRIPT_TIMER mocapNotPlayingTimer
BOOL bInteriorNeedsReCapped
BOOL bInteriorNeedsDisabled
BOOL bDrawCongratsShard
BOOL bActivatedRequiredIpls
BOOL bSetupSceneEntities
SHARD_OVER_FADE_STAGE eShardOverFadeStage
SCRIPT_TIMER shardOverFadeDisplayTime
eCELEBRATION_AUDIO_STAGE eWinnerAudioScene
PLAYER_INDEX pOwner
SIMPLE_INTERIORS eTargetInteriorID
BOOL bPinnedAndRequestedInterior
GAMER_HANDLE playerLeader //Script launch data passes us the leader of the last mission
#IF FEATURE_HEIST_ISLAND
MODEL_NAMES eCompanionPedModel = DUMMY_MODEL_FOR_SCRIPT
#ENDIF
#IF IS_DEBUG_BUILD
BOOL bRunEndHeistScene
BOOL bTerminateEndHeistScene
BOOL bEditMode
#ENDIF
ENDSTRUCT
STRUCT_HEIST_END_WINNER_SCENE_DATA sHeistWinnerSceneData
STAND_ALONE_CELEBRATION_DATA_STRUCT standAloneData[1]
CELEBRATION_SCREEN_DATA sCelebrationData
// ******************** //
// LOCAL VARIABLES //
// ******************** //
CAMERA_INDEX pointAtPlayerCam
BOOL bPointAtPlayerCamSuccessfullyPlaced
INT iPointAtPlayerCameraCutStage
INTERIOR_INSTANCE_INDEX apartmentInteriorIndex
// ******************** //
// DEBUG VARIABLES //
// ******************** //
#IF IS_DEBUG_BUILD
BOOL bHostEndMissionNow
TEXT_WIDGET_ID twID_GameState
TEXT_WIDGET_ID twID_FailReason
TEXT_WIDGET_ID twID_LiteralFailReason
TEXT_WIDGET_ID twID_lbPlayerRating[4]
TEXT_WIDGET_ID twID_lbPlayerName[4]
INT iWidgetPlayerIds[4]
// ******************** //
// DEBUG FUNCTIONS //
// ******************** //
FUNC STRING GET_GAME_STATE_NAME(eGAME_STATE eState)
SWITCH eState
CASE eGAME_STATE_INI RETURN "eGAME_STATE_INI"
CASE eGAME_STATE_INI_SPAWN RETURN "eGAME_STATE_INI_SPAWN"
CASE eGAME_STATE_RUNNING RETURN "eGAME_STATE_RUNNING"
CASE eGAME_STATE_END RETURN "eGAME_STATE_END"
ENDSWITCH
RETURN "INVALID GAME STATE"
ENDFUNC
FUNC STRING GET_CELEBRATION_STATE_NAME(eCELEBRATION_STATE eState)
SWITCH eState
CASE eCELEBRATIONSTATE_INIT_MOVIE RETURN "eCELEBRATIONSTATE_INIT_MOVIE"
CASE eCELEBRATIONSTATE_LOAD_MOVIE RETURN "eCELEBRATIONSTATE_LOAD_MOVIE"
CASE eCELEBRATIONSTATE_DRAW_MOVIE RETURN "eCELEBRATIONSTATE_DRAW_MOVIE"
CASE eCELEBRATIONSTATE_DO_WINNER_SCENE RETURN "eCELEBRATIONSTATE_DO_WINNER_SCENE"
CASE eCELEBRATIONSTATE_FADE_IN RETURN "eCELEBRATIONSTATE_FADE_IN"
CASE eCELEBRATIONSTATE_APARTMENT_FAILSAFE RETURN "eCELEBRATIONSTATE_APARTMENT_FAILSAFE"
CASE eCELEBRATIONSTATE_CLEANUP RETURN "eCELEBRATIONSTATE_CLEANUP"
ENDSWITCH
RETURN "INVALID CELEBRATION STATE"
ENDFUNC
#ENDIF
#IF IS_DEBUG_BUILD
PROC ADD_HEIST_WINNER_SCENE_WIDGETS()
INT i
TEXT_LABEL_63 tl63
START_WIDGET_GROUP("Heist Winner Scene")
ADD_WIDGET_BOOL("Run Scene", sHeistWinnerSceneData.bRunEndHeistScene)
ADD_WIDGET_BOOL("Terminate Scene", sHeistWinnerSceneData.bTerminateEndHeistScene)
ADD_WIDGET_BOOL("Edit Mode Active", sHeistWinnerSceneData.bEditMode)
START_WIDGET_GROUP("Scene Peds")
REPEAT 4 i
tl63 = "Ped "
tl63 += i
tl63 += " Activate Override World Data"
ADD_WIDGET_BOOL(tl63, sHeistWinnerSceneData.playerPedClone[i].bOverridePedWorldData)
tl63 = "Ped "
tl63 += i
tl63 += " World Position"
ADD_WIDGET_VECTOR_SLIDER(tl63, sHeistWinnerSceneData.playerPedClone[i].vPedPosDebug, -10000.0, 10000.0, 0.01)
tl63 = "Ped "
tl63 += i
tl63 += " World Heading"
ADD_WIDGET_FLOAT_SLIDER(tl63, sHeistWinnerSceneData.playerPedClone[i].fPedHeadingDebug, -10000.0, 10000.0, 0.01)
ENDREPEAT
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
#ENDIF
// ************ //
// FUNCTIONS //
// ************ //
/// PURPOSE:
/// Helper function to get a clients game/mission state
/// PARAMS:
/// iPlayer - The player's game state you want.
/// RETURNS:
/// The game state.
FUNC eGAME_STATE GET_GAME_STATE(INT iParticipant)
RETURN standAloneData[iParticipant].eGameState
ENDFUNC
/// PURPOSE:
/// Sets the game state on the local participant.
/// PARAMS:
/// eState - state to set to.
PROC SET_GAME_STATE(eGAME_STATE eState)
#IF IS_DEBUG_BUILD
IF standAloneData[0].eGameState != eState
STRING sTemp = GET_GAME_STATE_NAME(eState)
PRINTLN("[SAC] - setting local participant game state to ", sTemp)
ENDIF
#ENDIF
standAloneData[0].eGameState = eState
ENDPROC
FUNC eCELEBRATION_STATE GET_CELEBRATION_STATE(INT iParticipant)
PRINTLN("[SAC] - get local participant celebration state is ", standAloneData[iParticipant].eCelebrationState)
RETURN standAloneData[iParticipant].eCelebrationState
ENDFUNC
/// PURPOSE:
/// Sets the game state on the local participant.
/// PARAMS:
/// eState - state to set to.
PROC SET_CELEBRATION_STATE(eCELEBRATION_STATE eState)
#IF IS_DEBUG_BUILD
IF standAloneData[0].eCelebrationState != eState
STRING sTemp = GET_CELEBRATION_STATE_NAME(eState)
PRINTLN("[SAC] - setting local participant celebration state to ", sTemp)
ENDIF
#ENDIF
standAloneData[0].eCelebrationState = eState
ENDPROC
FUNC BOOL GET_SHOULD_END_SCRIPT()
#IF IS_DEBUG_BUILD
IF bHostEndMissionNow
PRINTLN("[SAC] - bHostEndMissionNow = TRUE, making GET_SHOULD_END_SCRIPT return TRUE.")
RETURN TRUE
ENDIF
#ENDIF
RETURN FALSE
ENDFUNC
PROC SET_MY_SCENE_POSITION_INDEX(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT iPlayer, iCount
PLAYER_INDEX playerId
REPEAT NUM_NETWORK_PLAYERS iPlayer
IF IS_NET_PLAYER_OK(INT_TO_NATIVE(PLAYER_INDEX, iPlayer), FALSE)
playerId = INT_TO_NATIVE(PLAYER_INDEX, iPlayer)
IF NOT IS_PLAYER_SCTV(playerId)
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(playerId)].bJoinedMissionAsSpectator
IF playerId = PLAYER_ID()
IF iCount <= 3
sData.iMyScenePositionIndex = iCount
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - set my scene position index to ", sData.iMyScenePositionIndex)
#IF IS_DEBUG_BUILD
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - SET_MY_SCENE_POSITION_INDEX - iCount > 3. iCount = ", iCount)
#ENDIF
ENDIF
ENDIF
iCount++
ENDIF
ENDIF
ENDREPEAT
ENDPROC
PROC SET_APARTMENT_EXTERIOR_SPAWN_DATA(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
MP_PROP_OFFSET_STRUCT sOffsetStruct
INT iBuilding = GET_PROPERTY_BUILDING(g_TransitionSessionNonResetVars.iAptIndex)
INT iSpawnIndex
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
iSpawnIndex = sData.iMyScenePositionIndex
ELSE
iSpawnIndex = 0
ENDIF
GET_TRANSITION_ANIM_CUSTOM_EXIT_SPAWN_COORDS(iBuilding, 0, iSpawnIndex, sOffsetStruct)
sData.vPlayerPosForAfterScene = sOffsetStruct.vLoc
sData.fPlayerHeadingForafterScene = sOffsetStruct.vRot.z
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
GET_TRANSITION_ANIM_CUSTOM_EXIT_SPAWN_COORDS(iBuilding, 0, 0, sOffsetStruct)
sData.vPlayerPosForAfterScene = sOffsetStruct.vLoc
sData.fPlayerHeadingForafterScene = sOffsetStruct.vRot.z
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
IF IS_VECTOR_ZERO(sData.vPlayerPosForAfterScene)
GET_TRANSITION_ANIM_CUSTOM_EXIT_SPAWN_COORDS(1, 0, 0, sOffsetStruct)
sData.vPlayerPosForAfterScene = sOffsetStruct.vLoc
sData.fPlayerHeadingForafterScene = sOffsetStruct.vRot.z
PRINTLN("[SAC] - Something has gone wrong with getting apartment experior coords. Force getting for building 1, so we dont fall through the map.")
ENDIF
ENDIF
ENDIF
PRINTLN("[SAC] - Called GET_TRANSITION_ANIM_CUSTOM_EXIT_SPAWN_COORDS with the following args:")
PRINTLN("[SAC] - iAptIndex = ", g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - iApartmentVariation = ", g_TransitionSessionNonResetVars.iApartmentVariation)
PRINTLN("[SAC] - iBuilding = GET_PROPERTY_BUILDING(g_TransitionSessionNonResetVars.iAptIndex) = ", iBuilding)
PRINTLN("[SAC] - iEntrance = ", 0)
PRINTLN("[SAC] - iSpawnIndex = ", iSpawnIndex)
PRINTLN("[SAC] - GET_TRANSITION_ANIM_CUSTOM_EXIT_SPAWN_COORDS results: ")
PRINTLN("[SAC] - sData.vPlayerPosForAfterScene = sOffsetStruct.vLoc = ", sOffsetStruct.vLoc)
PRINTLN("[SAC] - sData.fPlayerHeadingForafterScene = sOffsetStruct.vRot.z = ", sOffsetStruct.vRot.z)
ENDPROC
PROC SET_APARTMENT_INTERIOR_SPAWN_DATA(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
sData.vPlayerPosForAfterScene = sData.vPlayerPosForLoadingScene
sData.fPlayerHeadingForafterScene = sData.fPlayerHeadingForLoadingScene
SET_POST_MISSION_PLACE_IN_APARTMENT_FLAG(TRUE)
PRINTLN("[SAC] - set vPlayerPosForAfterScene = vPlayerPosForLoadingScene = ", sData.vPlayerPosForAfterScene)
PRINTLN("[SAC] - set fPlayerHeadingForafterScene = fPlayerHeadingForLoadingScene = ", sData.fPlayerHeadingForafterScene)
ENDPROC
PROC INITIALISE_APARTMENT_SCENE_DATA(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT iBase
MP_PROP_OFFSET_STRUCT sOffsetStruct
IF IS_HEIST_PROPERTY_TYPE_DLC(g_TransitionSessionNonResetVars.iAptIndex)
sData.strInteriorName = "hei_dlc_apart_high2_new"
sData.strRoomName = "mp_apt_h_01_main"
iBase = PROPERTY_BUS_HIGH_APT_1
ELIF IS_PROPERTY_CUSTOM_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_1
sData.strInteriorName = "apa_v_mp_h_01"
sData.strRoomName = "mp_h_01_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_2
sData.strInteriorName = "apa_v_mp_h_02"
sData.strRoomName = "mp_h_02_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_3
sData.strInteriorName = "apa_v_mp_h_03"
sData.strRoomName = "mp_h_03_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_4
sData.strInteriorName = "apa_v_mp_h_04"
sData.strRoomName = "mp_h_04_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_5
sData.strInteriorName = "apa_v_mp_h_05"
sData.strRoomName = "mp_h_05_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_6
sData.strInteriorName = "apa_v_mp_h_06"
sData.strRoomName = "mp_h_06_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_7
sData.strInteriorName = "apa_v_mp_h_07"
sData.strRoomName = "mp_h_07_living"
ENDIF
IF g_TransitionSessionNonResetVars.iApartmentVariation = PROPERTY_VARIATION_8
sData.strInteriorName = "apa_v_mp_h_08"
sData.strRoomName = "mp_h_08_living"
ENDIF
iBase = PROPERTY_CUSTOM_APT_1_BASE
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_5_BASE_A)
sData.strInteriorName = "apa_v_mp_stilts_a"
sData.strRoomName = "mr_mp_stilts_a_living"
iBase = PROPERTY_STILT_APT_5_BASE_A
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_1_BASE_B)
sData.strInteriorName = "apa_v_mp_stilts_b"
sData.strRoomName = "mr_mp_stilts_b_living"
iBase = PROPERTY_STILT_APT_1_BASE_B
ELSE
sData.strInteriorName = "hei_dlc_apart_high_new"
sData.strRoomName = "rm_high_lounge"
iBase = PROPERTY_HIGH_APT_1
ENDIF
GET_POSITION_AS_OFFSET_FOR_PROPERTY(g_TransitionSessionNonResetVars.iAptIndex, MP_END_HEIST_WINNER_SCENE_PED_0_COORDS, sOffsetStruct, iBase)
sData.playerPedClone[0].vSpawnPosition = sOffsetStruct.vLoc
sData.playerPedClone[0].fSpawnHeading = sOffsetStruct.vRot.z
GET_POSITION_AS_OFFSET_FOR_PROPERTY(g_TransitionSessionNonResetVars.iAptIndex, MP_END_HEIST_WINNER_SCENE_PED_1_COORDS, sOffsetStruct, iBase)
sData.playerPedClone[1].vSpawnPosition = sOffsetStruct.vLoc
sData.playerPedClone[1].fSpawnHeading = sOffsetStruct.vRot.z
GET_POSITION_AS_OFFSET_FOR_PROPERTY(g_TransitionSessionNonResetVars.iAptIndex, MP_END_HEIST_WINNER_SCENE_PED_2_COORDS, sOffsetStruct, iBase)
sData.playerPedClone[2].vSpawnPosition = sOffsetStruct.vLoc
sData.playerPedClone[2].fSpawnHeading = sOffsetStruct.vRot.z
GET_POSITION_AS_OFFSET_FOR_PROPERTY(g_TransitionSessionNonResetVars.iAptIndex, MP_END_HEIST_WINNER_SCENE_PED_3_COORDS, sOffsetStruct, iBase)
sData.playerPedClone[3].vSpawnPosition = sOffsetStruct.vLoc
sData.playerPedClone[3].fSpawnHeading = sOffsetStruct.vRot.z
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_2].vSpawnPosition = sData.playerPedClone[0].vSpawnPosition
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_2].vSpawnPosition += << 0.5, 0.0, 0.0 >>
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_2].fSpawnHeading = sData.playerPedClone[0].fSpawnHeading
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_2].eModel = PROP_CS_CHAMP_FLUTE
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_2].tl23_handle = "MPH_CHAMP_2"
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_3].vSpawnPosition = sData.playerPedClone[0].vSpawnPosition
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_3].vSpawnPosition += << 0.0, 0.5, 0.0 >>
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_3].fSpawnHeading = sData.playerPedClone[0].fSpawnHeading
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_3].eModel = PROP_CS_CHAMP_FLUTE
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_3].tl23_handle = "MPH_CHAMP_3"
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_4].vSpawnPosition = sData.playerPedClone[0].vSpawnPosition
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_4].vSpawnPosition += << 0.0, 0.0, 0.5 >>
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_4].fSpawnHeading = sData.playerPedClone[0].fSpawnHeading
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_4].eModel = PROP_CS_CHAMP_FLUTE
sData.object[HEIST_WINNER_SCENE_APT_CHAMP_4].tl23_handle = "MPH_CHAMP_4"
sData.eWinnerAudioScene = eCAS_PRISON_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
SET_APARTMENT_INTERIOR_SPAWN_DATA(sData)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - iBase = ", iBase)
ENDPROC
PROC SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
IF IS_GAMER_HANDLE_VALID(sHeistWinnerSceneData.playerLeader)
sData.pOwner = NETWORK_GET_PLAYER_FROM_GAMER_HANDLE(sHeistWinnerSceneData.playerLeader)
IF sData.pOwner = INVALID_PLAYER_INDEX()
PRINTLN("[CASINO_HEIST_FLOW][CHF_CS][SAC] | SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER - Gamer handle is valid. Not able to convert to player ID!")
ELSE
sData.eTargetInteriorID = GET_OWNED_SIMPLE_INTERIOR_OF_TYPE(sData.pOwner, SIMPLE_INTERIOR_TYPE_ARCADE)
PRINTLN("[CASINO_HEIST_FLOW][CHF_CS][SAC] | SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER - Gamer handle is valid. Owner: ", NATIVE_TO_INT(sData.pOwner))
EXIT
ENDIF
ENDIF
IF NOT GB_IS_LOCAL_PLAYER_MEMBER_OF_A_GANG()
PRINTLN("[CASINO_HEIST_FLOW][CHF_CS][SAC] | SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER - Not in a gang, using local player.")
sData.pOwner = PLAYER_ID()
ELIF GB_GET_LOCAL_PLAYER_GANG_BOSS() != INVALID_PLAYER_INDEX()
AND NETWORK_IS_PLAYER_ACTIVE(GB_GET_LOCAL_PLAYER_GANG_BOSS())
PRINTLN("[CASINO_HEIST_FLOW][CHF_CS][SAC] | SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER - In a gang, using ths boss.")
sData.pOwner = GB_GET_LOCAL_PLAYER_GANG_BOSS()
ELSE
PRINTLN("[CASINO_HEIST_FLOW][CHF_CS][SAC] | SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER - Fallback check, using ths boss.")
sData.pOwner = GB_GET_LOCAL_PLAYER_GANG_BOSS()
ENDIF
sData.eTargetInteriorID = GET_OWNED_SIMPLE_INTERIOR_OF_TYPE(sData.pOwner, SIMPLE_INTERIOR_TYPE_ARCADE)
ENDIF
ENDPROC
PROC SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE(eHEIST_WINNER_SCENE_TYPE eSceneType)
IF NOT GB_IS_LOCAL_PLAYER_MEMBER_OF_A_GANG()
PRINTLN("[CHF_CS][SAC] | SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE - not in a gang!.")
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[0] = NETWORK_HASH_FROM_PLAYER_HANDLE(PLAYER_ID())
EXIT
ENDIF
PRINTLN("[CHF_CS][SAC] | SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE - Doing this.")
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[0] = NETWORK_HASH_FROM_PLAYER_HANDLE(GB_GET_LOCAL_PLAYER_GANG_BOSS())
INT i, iPlayerLoop
SWITCH eSceneType
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
iPlayerLoop = NUM_PLAYERS_NEEDED_FOR_CASINO_HEIST
BREAK
#IF FEATURE_HEIST_ISLAND
CASE eHEISTWINNERSCENETYPE_ISLAND_HEIST
iPlayerLoop = NUM_PLAYERS_NEEDED_FOR_ISLAND_HEIST
BREAK
#ENDIF
ENDSWITCH
REPEAT iPlayerLoop i
IF GlobalplayerBD_FM_3[NATIVE_TO_INT(GB_GET_LOCAL_PLAYER_GANG_BOSS())].sMagnateGangBossData.GangMembers[i] != INVALID_PLAYER_INDEX()
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[i + 1] = NETWORK_HASH_FROM_PLAYER_HANDLE(GlobalplayerBD_FM_3[NATIVE_TO_INT(GB_GET_LOCAL_PLAYER_GANG_BOSS())].sMagnateGangBossData.GangMembers[i] )
ENDIF
ENDREPEAT
ENDPROC
PROC SET_UP_STRAND_MISSION_FINISHED_FINAL_CUTSCENES()
IF NOT CHECK_TO_SEE_IF_THIS_IS_THE_LAST_STRAND_MISSION()
PRINTLN("[SAC] - Exiting - Not the last mission of a strand.")
EXIT
ENDIF
PRINTLN("[SAC] - This is the last mission of a strand.")
IF NOT CASINO_HEIST_FLOW_IS_CURRENT_MISSION_CASINO_HEIST_FINALE()
PRINTLN("[SAC] - Not the heist finale.")
EXIT
ENDIF
IF IS_BIT_SET(g_sCasinoHeistFlowData.iBitSet, ciCASINO_HEIST_FLOW_BITSET__PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE)
PRINTLN("[SAC] - PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE already set.")
EXIT
ENDIF
IF GB_GET_LOCAL_PLAYER_GANG_BOSS() = INVALID_PLAYER_INDEX()
PRINTLN("[SAC] - LOCAL_PLAYER_GANG_BOSS is invalid.")
EXIT
ENDIF
IF IS_BIT_SET(GlobalplayerBD_CasinoHeist[NATIVE_TO_INT(GB_GET_LOCAL_PLAYER_GANG_BOSS())].iFlowBitSet,
ciCASINO_HEIST_FLOW_STAT_BITSET__LESTER_POST_MISSION_ONE_TIME_SCENE_VIEWED)
PRINTLN("[SAC] - LESTER_POST_MISSION_ONE_TIME_SCENE_VIEWED already set in BD.")
EXIT
ENDIF
PRINTLN("[SAC] - Casino Heist - Setting ciCASINO_HEIST_FLOW_BITSET__PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE")
SET_BIT(g_sCasinoHeistFlowData.iBitSet, ciCASINO_HEIST_FLOW_BITSET__PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE)
ENDPROC
PROC SET_CASINO_HEIST_FINALE_VEHICLE_STAT()
IF GB_IS_PLAYER_BOSS_OF_A_GANG(PLAYER_ID())
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT")
INT iCasinoHeistFinaleVehicleBS = GET_MP_INT_CHARACTER_STAT(MP_STAT_H3_VEHICLESUSED)
IF GET_LOCAL_PLAYER_CASINO_HEIST_APPROACH() = CASINO_HEIST_APPROACH_TYPE__SUBTERFUGE
SWITCH INT_TO_ENUM(CASINO_HEIST_OUTFITS, GlobalplayerBD_CasinoHeist[NATIVE_TO_INT(PLAYER_ID())].sMissionConfig.iSubterfugeOutfitsIn)
CASE CASINO_HEIST_OUTFIT_IN__BUGSTAR
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_BURRITO2)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_BURRITO2")
BREAK
CASE CASINO_HEIST_OUTFIT_IN__CELEBRITY
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_FURIA)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_FURIA")
BREAK
CASE CASINO_HEIST_OUTFIT_IN__GRUPPE_SECHS
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_STOCKADE)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_STOCKADE")
BREAK
CASE CASINO_HEIST_OUTFIT_IN__MECHANIC
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_BOXVILLE)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_BOXVILLE")
BREAK
ENDSWITCH
SWITCH INT_TO_ENUM(CASINO_HEIST_OUTFITS, GlobalplayerBD_CasinoHeist[NATIVE_TO_INT(PLAYER_ID())].sMissionConfig.iSubterfugeOutfitsOut)
CASE CASINO_HEIST_OUTFIT_OUT__FIREMAN
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_FIRETRUK)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_FIRETRUK")
BREAK
ENDSWITCH
ENDIF
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_DRIVER()
CASE CASINO_HEIST_DRIVER__KARIM_DENZ
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_VEHICLE_SELECTION()
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_ASBO)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_ASBO")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_2
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_KANJO)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_KANJO")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_3
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_SENTINEL3)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_SENTINEL3")
BREAK
ENDSWITCH
BREAK
CASE CASINO_HEIST_DRIVER__TALIANA_MARTINEZ
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_VEHICLE_SELECTION()
CASE CASINO_HEIST_VEHICLE_SELECTION__DEFAULT
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_RETINUE2)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_RETINUE2")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_YOSEMITE2)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_YOSEMITE2")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_2
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_SUGOI)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_SUGOI")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_3
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_JUGULAR)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_JUGULAR")
BREAK
ENDSWITCH
BREAK
CASE CASINO_HEIST_DRIVER__EDDIE_TOH
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_VEHICLE_SELECTION()
CASE CASINO_HEIST_VEHICLE_SELECTION__DEFAULT
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_SULTAN2)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_SULTAN2")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_GAUNTLET3)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_GAUNTLET3")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_2
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_ELLIE)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_ELLIE")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_3
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_KOMODA)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_KOMODA")
BREAK
ENDSWITCH
BREAK
CASE CASINO_HEIST_DRIVER__ZACH
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_VEHICLE_SELECTION()
CASE CASINO_HEIST_VEHICLE_SELECTION__DEFAULT
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_MANCHEZ)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_MANCHEZ")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_STRYDER)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_STRYDER")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_2
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_DEFILER)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_DEFILER")
BREAK
ENDSWITCH
BREAK
CASE CASINO_HEIST_DRIVER__WEAPONS_EXPERT
SWITCH GET_LOCAL_PLAYER_CASINO_HEIST_VEHICLE_SELECTION()
CASE CASINO_HEIST_VEHICLE_SELECTION__DEFAULT
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_ZHABA)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_ZHABA")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_VAGRANT)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_VAGRANT")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_2
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_OUTLAW)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_OUTLAW")
BREAK
CASE CASINO_HEIST_VEHICLE_SELECTION__ALTERNATE_3
SET_BIT(iCasinoHeistFinaleVehicleBS, ciCASINO_HEIST_FINALE_EVERON)
PRINTLN("[SAC] - Casino Heist - SET_CASINO_HEIST_FINALE_VEHICLE_STAT - ciCASINO_HEIST_FINALE_EVERON")
BREAK
ENDSWITCH
BREAK
ENDSWITCH
SET_MP_INT_CHARACTER_STAT(MP_STAT_H3_VEHICLESUSED, iCasinoHeistFinaleVehicleBS)
ENDIF
ENDPROC
#IF FEATURE_HEIST_ISLAND
PROC SET_ISLAND_HEIST_COMPANION_PED_MODEL(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
IF HAS_PLAYER_COMPLETED_ISLAND_HEIST_AS_LEADER_FOR_SECOND_TIME(GB_GET_LOCAL_PLAYER_GANG_BOSS())
sData.eCompanionPedModel = INT_TO_ENUM(MODEL_NAMES, HASH("s_m_m_highsec_04"))
ENDIF
sData.eCompanionPedModel = INT_TO_ENUM(MODEL_NAMES, HASH("ig_miguelmadrazo"))
ENDPROC
#ENDIF
FUNC BOOL INITIALISE_HEIST_END_WINNER_SCENE_DATA(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType = ciCELEBRATION_HEIST_TYPE__PREP
PRINTLN("[SAC] - init winner scene data - iHeistType = 1 (setup).")
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
PRINTLN("[SAC] - init winner scene data - iPostMissionSceneId = SIS_POST_APARTMENT.")
INITIALISE_APARTMENT_SCENE_DATA(sData)
ELSE
PRINTLN("[SAC] - init winner scene data - iPostMissionSceneId != SIS_POST_APARTMENT.")
ENDIF
SET_BIT(sData.iBitset, HEIST_WINNER_SCENE_INITIALISED_DATA)
PRINTLN("[SAC] - init winner scene data - set bit HEIST_WINNER_SCENE_INITIALISED_DATA.")
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType = ciCELEBRATION_HEIST_TYPE__FINALE
PRINTLN("[SAC] - init winner scene data - iHeistType = 2 (finale).")
IF NOT IS_BIT_SET(sData.iBitset, HEIST_WINNER_SCENE_INITIALISED_DATA)
SWITCH g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType
CASE FMMC_CELEBRATION_TYPE_ROOFTOP
sData.eSceneType = eHEISTWINNERSCENETYPE_ROOFTOP
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_ROOFTOP.")
BREAK
CASE FMMC_CELEBRATION_TYPE_BAR
sData.eSceneType = eHEISTWINNERSCENETYPE_BAR
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_BAR.")
BREAK
CASE FMMC_CELEBRATION_TYPE_STRIP_CLUB
sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_STRIP_CLUB.")
BREAK
CASE FMMC_CELEBRATION_TYPE_APARTMENT
sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_APARTMENT.")
BREAK
CASE FMMC_CELEBRATION_TYPE_TREVOR
sData.eSceneType = eHEISTWINNERSCENETYPE_TREVOR
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_TREVOR.")
BREAK
#IF FEATURE_HEIST_ISLAND
CASE FMMC_CELEBRATION_TYPE_ISLAND_HEIST
sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_ISLAND_HEIST
SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE(sData.eSceneType)
SET_ISLAND_HEIST_COMPANION_PED_MODEL(sData)
PREPARE_MUSIC_EVENT("HEI4_CELEBRATION_CHEERS_MUSIC")
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_ISLAND_HEIST, setting to eHEISTWINNERSCENETYPE_ISLAND_HEIST.")
BREAK
#ENDIF
CASE FMMC_CELEBRATION_TYPE_DEFAULT
sData.eSceneType = eHEISTWINNERSCENETYPE_ROOFTOP
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_DEFAULT, setting to eHEISTWINNERSCENETYPE_ROOFTOP.")
BREAK
ENDSWITCH
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_DEFAULT
IF CASINO_HEIST_FLOW_IS_CURRENT_MISSION_CASINO_HEIST_FINALE()
SET_UP_STRAND_MISSION_FINISHED_FINAL_CUTSCENES()
SET_CASINO_HEIST_FINALE_VEHICLE_STAT()
IF IS_BIT_SET(g_sCasinoHeistFlowData.iBitSet, ciCASINO_HEIST_FLOW_BITSET__PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE)
sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_CASINO_HEIST
SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE(sData.eSceneType)
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = override to eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF.")
ELSE
sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_CASINO_HEIST_2
SET_NAME_HASHES_FOR_PLAYERS_IN_SCENE(sData.eSceneType)
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = override to eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR.")
ENDIF
CLEAR_BIT(g_sCasinoHeistFlowData.iBitSet, ciCASINO_HEIST_FLOW_BITSET__PLAY_LESTER_POST_MISSION_ONE_TIME_SCENE)
ENDIF
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT.")
PRINTLN("[SAC] - [NETCELEBRATION] - g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType = FMMC_CELEBRATION_TYPE_APARTMENT.")
ENDIF
// sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
SWITCH sData.eSceneType
#IF FEATURE_HEIST_ISLAND
CASE eHEISTWINNERSCENETYPE_ISLAND_HEIST
sData.playerPedClone[0].vSpawnPosition = <<-1754.7, 438.9, 127.8>>
sData.playerPedClone[0].fSpawnHeading = 237.2271
sData.playerPedClone[1].vSpawnPosition = <<-1755.7, 438.9, 127.8>>
sData.playerPedClone[1].fSpawnHeading = 245.8436
sData.playerPedClone[2].vSpawnPosition = <<-1756.7, 438.9, 127.8>>
sData.playerPedClone[2].fSpawnHeading = 242.1219
sData.playerPedClone[3].vSpawnPosition = <<-1757.7, 438.9, 127.8>>
sData.playerPedClone[3].fSpawnHeading = 238.3524
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
sData.eWinnerAudioScene = eCAS_FADE_WHITE_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
#ENDIF
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
sData.playerPedClone[0].vSpawnPosition = <<788.1093, 202.0296, 80.4982>>
sData.playerPedClone[0].fSpawnHeading = 237.2271
sData.playerPedClone[1].vSpawnPosition = <<787.3500, 200.9037, 80.4979>>
sData.playerPedClone[1].fSpawnHeading = 245.8436
sData.playerPedClone[2].vSpawnPosition = <<786.5688, 199.3651, 80.5096>>
sData.playerPedClone[2].fSpawnHeading = 242.1219
sData.playerPedClone[3].vSpawnPosition = <<785.8018, 197.8395, 80.5189>>
sData.playerPedClone[3].fSpawnHeading = 238.3524
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
sData.eWinnerAudioScene = eCAS_FADE_WHITE_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
sData.playerPedClone[0].vSpawnPosition = <<2726.3704, -381.3114, -49.9999>>
sData.playerPedClone[0].fSpawnHeading = 264.5209
sData.playerPedClone[1].vSpawnPosition = <<2726.8015, -383.3425, -49.9999>>
sData.playerPedClone[1].fSpawnHeading = 305.0945
sData.playerPedClone[2].vSpawnPosition = <<2726.7837, -385.0965, -49.9999>>
sData.playerPedClone[2].fSpawnHeading = 221.9951
sData.playerPedClone[3].vSpawnPosition = <<2727.0337, -386.7577, -49.9999>>
sData.playerPedClone[3].fSpawnHeading = 289.0450
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
sData.eWinnerAudioScene = eCAS_FADE_WHITE_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_ROOFTOP
sData.playerPedClone[0].vSpawnPosition = << 705.515, -964.901, 35.859 >>
sData.playerPedClone[0].fSpawnHeading = 74.187
sData.playerPedClone[1].vSpawnPosition = << 706.374, -964.040, 35.859 >>
sData.playerPedClone[1].fSpawnHeading = 80.000
sData.playerPedClone[2].vSpawnPosition = << 706.166, -962.865, 35.859 >>
sData.playerPedClone[2].fSpawnHeading = 90.000
sData.playerPedClone[3].vSpawnPosition = << 705.842, -965.960, 35.859 >>
sData.playerPedClone[3].fSpawnHeading = 70.652
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
sData.eWinnerAudioScene = eCAS_PACIFIC_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_STRIP_CLUB
sData.strInteriorName = "v_strip3"
sData.strRoomName = "strp3mainrm"
sData.playerPedClone[0].vSpawnPosition = <<115.3036, -1286.7184, 27.2615>>
sData.playerPedClone[0].fSpawnHeading = 106.5682
sData.playerPedClone[1].vSpawnPosition = <<114.7243, -1285.9166, 27.2625>>
sData.playerPedClone[1].fSpawnHeading = 103.7247
sData.playerPedClone[2].vSpawnPosition = <<114.2871, -1284.9615, 27.2642>>
sData.playerPedClone[2].fSpawnHeading = 135.9676
sData.playerPedClone[3].vSpawnPosition = <<113.8246, -1284.0287, 27.2658>>
sData.playerPedClone[3].fSpawnHeading = 152.4515
sData.extraPed.vSpawnPosition = <<115.3036, -1286.7184, 27.2615>>
sData.extraPed.fSpawnHeading = 106.5682
sData.extraPed.eModel = S_F_Y_Stripper_01
sData.extraPed.tl23_handle = "Bar_Maid"
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS].vSpawnPosition = <<115.3036, -1286.2184, 27.2615>>
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS].fSpawnHeading = 106.5682
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS].eModel = P_CS_Shot_Glass_2_S
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS].tl23_handle = "Glass"
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_1].vSpawnPosition = <<115.3036, -1286.4184, 27.2615>>
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_1].fSpawnHeading = 106.5682
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_1].eModel = P_CS_Shot_Glass_2_S
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_1].tl23_handle = "Glass_1"
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_2].vSpawnPosition = <<115.3036, -1286.6184, 27.2615>>
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_2].fSpawnHeading = 106.5682
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_2].eModel = P_CS_Shot_Glass_2_S
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_2].tl23_handle = "Glass_2"
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_3].vSpawnPosition = <<115.3036, -1286.8184, 27.2615>>
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_3].fSpawnHeading = 106.5682
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_3].eModel = P_CS_Shot_Glass_2_S
sData.object[HEIST_WINNER_SCENE_STRIP_GLASS_3].tl23_handle = "Glass_3"
sData.object[HEIST_WINNER_SCENE_STRIP_WHISKEY].vSpawnPosition = <<115.3036, -1286.7184, 27.6615>>
sData.object[HEIST_WINNER_SCENE_STRIP_WHISKEY].fSpawnHeading = 106.5682
sData.object[HEIST_WINNER_SCENE_STRIP_WHISKEY].eModel = P_Whiskey_Bottle_S
sData.object[HEIST_WINNER_SCENE_STRIP_WHISKEY].tl23_handle = "Whisky"
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
SWITCH sData.iMyScenePositionIndex
CASE 0
sData.vPlayerPosForAfterScene = <<132.4727, -1304.2257, 28.2104>>
sData.fPlayerHeadingForafterScene = 212.0879
BREAK
CASE 1
sData.vPlayerPosForAfterScene = <<129.9843, -1302.3949, 28.2327>>
sData.fPlayerHeadingForafterScene = 212.6229
BREAK
CASE 2
sData.vPlayerPosForAfterScene = <<135.6028, -1303.9547, 28.1685>>
sData.fPlayerHeadingForafterScene = 163.7941
BREAK
CASE 3
sData.vPlayerPosForAfterScene = <<128.0055, -1305.1724, 28.2327>>
sData.fPlayerHeadingForafterScene = 246.5913
BREAK
ENDSWITCH
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bBlockStripClubPedsForCongratsScreen = TRUE
sData.eWinnerAudioScene = eCAS_HUMANE_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_BAR
sData.strInteriorName = "v_rockclub"
sData.playerPedClone[0].vSpawnPosition = <<-562.7222, 285.1675, 84.3764>>
sData.playerPedClone[0].fSpawnHeading = 76.7772
sData.playerPedClone[1].vSpawnPosition = <<-562.6874, 286.8524, 84.3764>>
sData.playerPedClone[1].fSpawnHeading = 101.7949
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE].vSpawnPosition = <<-562.7222, 285.1675, 84.3764>>
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE].fSpawnHeading = 253.0338
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE].eModel = PROP_CS_BEER_BOT_01
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE].tl23_handle = "MPH_Bottle"
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE_1].vSpawnPosition = <<-562.7222, 285.1675, 84.7764>>
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE_1].fSpawnHeading = 253.0338
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE_1].eModel = PROP_CS_BEER_BOT_01
sData.object[HEIST_WINNER_SCENE_BAR_BOTTLE_1].tl23_handle = "MPH_Bottle^1"
sData.vPlayerPosForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[sData.iMyScenePositionIndex].fSpawnHeading
sData.eWinnerAudioScene = eCAS_FLEECA_SCENE
sData.vFocusPosition = sData.playerPedClone[0].vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_APARTMENT
INITIALISE_APARTMENT_SCENE_DATA(sData)
BREAK
CASE eHEISTWINNERSCENETYPE_TREVOR
sData.playerPedClone[0].vSpawnPosition = <<2825.8787, 4818.5977, 46.8845>>
sData.playerPedClone[0].fSpawnHeading = 45.8519
sData.playerPedClone[1].vSpawnPosition = <<2825.8787, 4818.5977, 46.8845>>
sData.playerPedClone[1].fSpawnHeading = 11.7321
sData.playerPedClone[2].vSpawnPosition = <<2825.8787, 4818.5977, 46.8845>>
sData.playerPedClone[2].fSpawnHeading = 81.2564
sData.playerPedClone[3].vSpawnPosition = <<2825.8787, 4818.5977, 46.8845>>
sData.playerPedClone[3].fSpawnHeading = 152.4515
sData.extraPed.vSpawnPosition = <<2825.8787, 4818.5977, 46.8845>>
sData.extraPed.fSpawnHeading = 303.5638
sData.extraPed.eModel = player_two
sData.extraPed.tl23_handle = "TREVOR"
sData.vPlayerPosForLoadingScene = sData.extraPed.vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.extraPed.fSpawnHeading
sData.eWinnerAudioScene = eCAS_SERIES_A_SCENE
sData.vFocusPosition = sData.extraPed.vSpawnPosition
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.vPlayerPosForLoadingScene = sData.playerPedClone[0].vSpawnPosition
sData.fPlayerHeadingForLoadingScene = sData.playerPedClone[0].fSpawnHeading
ENDIF
SWITCH sData.iMyScenePositionIndex
CASE 0
sData.vPlayerPosForAfterScene = <<2702.9031, 4335.1421, 44.8519>>
sData.fPlayerHeadingForafterScene = 45.8519
BREAK
CASE 1
sData.vPlayerPosForAfterScene = <<2698.0510, 4331.7847, 44.8526>>
sData.fPlayerHeadingForafterScene = 11.7321
BREAK
CASE 2
sData.vPlayerPosForAfterScene = <<2705.3345, 4339.2905, 44.8519>>
sData.fPlayerHeadingForafterScene = 81.2564
BREAK
CASE 3
sData.vPlayerPosForAfterScene = <<113.8246, -1284.0287, 27.2658>>
sData.fPlayerHeadingForafterScene = 152.4515
BREAK
ENDSWITCH
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
// Setup widget values.
sData.playerPedClone[0].vPedPosDebug = sData.playerPedClone[0].vSpawnPosition
sData.playerPedClone[0].fPedHeadingDebug = sData.playerPedClone[0].fSpawnHeading
sData.playerPedClone[1].vPedPosDebug = sData.playerPedClone[1].vSpawnPosition
sData.playerPedClone[1].fPedHeadingDebug = sData.playerPedClone[1].fSpawnHeading
sData.playerPedClone[2].vPedPosDebug = sData.playerPedClone[2].vSpawnPosition
sData.playerPedClone[2].fPedHeadingDebug = sData.playerPedClone[2].fSpawnHeading
sData.playerPedClone[3].vPedPosDebug = sData.playerPedClone[3].vSpawnPosition
sData.playerPedClone[3].fPedHeadingDebug = sData.playerPedClone[3].fSpawnHeading
// Print data values to logs.
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print")
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - strInteriorName = ", sData.strInteriorName)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - iAptIndex = ", g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - vPlayerPosForLoadingScene = ", sData.vPlayerPosForLoadingScene)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - fPlayerHeadingForLoadingScene = ", sData.fPlayerHeadingForLoadingScene)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[0].vSpawnPosition = ", sData.playerPedClone[0].vSpawnPosition)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[0].fSpawnHeading", sData.playerPedClone[0].fSpawnHeading)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[1].vSpawnPosition = ", sData.playerPedClone[1].vSpawnPosition)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[1].fSpawnHeading", sData.playerPedClone[1].fSpawnHeading)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[2].vSpawnPosition = ", sData.playerPedClone[2].vSpawnPosition)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[2].fSpawnHeading", sData.playerPedClone[2].fSpawnHeading)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[3].vSpawnPosition = ", sData.playerPedClone[3].vSpawnPosition)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - playerPedClone[3].fSpawnHeading", sData.playerPedClone[3].fSpawnHeading)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - vPlayerPosForAfterScene = ", sData.vPlayerPosForAfterScene)
PRINTLN("[SAC] - [NETCELEBRATION] - [PMC] - scene data print - fPlayerHeadingForafterScene", sData.fPlayerHeadingForafterScene)
#ENDIF
SET_BIT(sData.iBitset, HEIST_WINNER_SCENE_INITIALISED_DATA)
ENDIF
ELSE
PRINTLN("[SAC] - init winner scene data - iHeistType has invalid value. iHeistType = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType = ciCELEBRATION_HEIST_TYPE__PREP
PRINTLN("[SAC] - init winner scene data - defaulted iHeistType to 1 (setup) so we can continue into freemode.")
SCRIPT_ASSERT("iHeistType has invalid value. defaulted iHeistType to 1 (setup).")
ENDIF
RETURN IS_BIT_SET(sData.iBitset, HEIST_WINNER_SCENE_INITIALISED_DATA)
ENDFUNC
FUNC MODEL_NAMES GET_BACKUP_PED_MODEL(INT iBackupPed)
SWITCH iBackupPed
CASE 0
// RETURN A_F_Y_VINEWOOD_01
RETURN A_F_Y_GENHOT_01
CASE 1
// RETURN A_M_Y_VINEWOOD_01
RETURN A_F_Y_GENHOT_01
ENDSWITCH
RETURN A_F_Y_GENHOT_01
ENDFUNC
PROC DELETE_HEIST_END_WINNER_SCENE_ENTITIES(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT iObj
IF DOES_ENTITY_EXIST(sData.playerPedClone[0].pedId)
DELETE_PED(sData.playerPedClone[0].pedId)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_BACKUP_PED_MODEL(0))
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted clone ped 0.")
ENDIF
IF DOES_ENTITY_EXIST(sData.playerPedClone[1].pedId)
DELETE_PED(sData.playerPedClone[1].pedId)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_BACKUP_PED_MODEL(1))
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted clone ped 1.")
ENDIF
IF DOES_ENTITY_EXIST(sData.playerPedClone[2].pedId)
DELETE_PED(sData.playerPedClone[2].pedId)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_BACKUP_PED_MODEL(2))
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted clone ped 2.")
ENDIF
IF DOES_ENTITY_EXIST(sData.playerPedClone[3].pedId)
DELETE_PED(sData.playerPedClone[3].pedId)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_BACKUP_PED_MODEL(3))
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted clone ped 3.")
ENDIF
IF DOES_ENTITY_EXIST(sData.extraPed.pedId)
DELETE_PED(sData.extraPed.pedId)
SET_MODEL_AS_NO_LONGER_NEEDED(sData.extraPed.eModel)
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted extra ped.")
ENDIF
REPEAT HEIST_MAX_WINNER_SCENE_OBJECTS iObj
IF DOES_ENTITY_EXIST(sData.object[iObj].entityId)
DELETE_ENTITY(sData.object[iObj].entityId)
SET_MODEL_AS_NO_LONGER_NEEDED(sData.object[iObj].eModel)
PRINTLN("[SAC] - [NETCELEBRATION] - DELETE_HEIST_END_WINNER_SCENE_ENTITIES - deleted object ", iObj)
ENDIF
ENDREPEAT
ENDPROC
#IF IS_DEBUG_BUILD
PROC UPDATE_HEIST_END_WINNER_SCENE_PEDS_WITH_WIDGET_DATA(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT i
REPEAT 4 i
IF sData.playerPedClone[i].bOverridePedWorldData
IF DOES_ENTITY_EXIST(sData.playerPedClone[i].pedId)
IF NOT IS_ENTITY_DEAD(sData.playerPedClone[i].pedId)
SET_ENTITY_COORDS(sData.playerPedClone[i].pedId, sData.playerPedClone[i].vPedPosDebug)
SET_ENTITY_HEADING(sData.playerPedClone[i].pedId, sData.playerPedClone[i].fPedHeadingDebug)
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDPROC
#ENDIF
PROC TRIGGER_POST_HEIST_POSITION_SYSTEMS()
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
EXIT
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPostMissionSceneId = SIS_POST_APARTMENT.")
#IF IS_DEBUG_BUILD
INT i
REPEAT COUNT_OF(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash) i
PRINTLN("[RCC MISSION] - [SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPlayerNameHash[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[i])
PRINTLN("[RCC MISSION] - [SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - strLeaderBoardPlayerName[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.strLeaderBoardPlayerName[i])
ENDREPEAT
#ENDIF
CLEANUP_MP_CUTSCENE(TRUE, FALSE)
TRIGGER_APARTMENT_HANDOVER(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash, (NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene))
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_STRIP_CLUB
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPostMissionSceneId = SIS_POST_STRIP_CLUB.")
#IF IS_DEBUG_BUILD
INT i
REPEAT COUNT_OF(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash) i
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPlayerNameHash[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[i])
PRINTLN("[RCC MISSION] - [SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - strLeaderBoardPlayerName[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.strLeaderBoardPlayerName[i])
ENDREPEAT
#ENDIF
CLEANUP_MP_CUTSCENE(TRUE, FALSE)
// g_TransitionSessionNonResetVars.sGlobalCelebrationData.enumPostMissionScenePossibleResult = PMSP_FAILED
TRIGGER_STRIP_CLUB_POST_SCENE_SYSTEM(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash)
ELSE
#IF IS_DEBUG_BUILD
INT i
REPEAT COUNT_OF(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash) i
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPlayerNameHash[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[i])
PRINTLN("[RCC MISSION] - [SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - strLeaderBoardPlayerName[", i, "] = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.strLeaderBoardPlayerName[i])
ENDREPEAT
#ENDIF
SET_NO_LOADING_SCREEN(TRUE)
PRINTLN("[SAC] - called SET_NO_LOADING_SCREEN(TRUE). At request of Neil Ferguson for 2230423.")
START_SYNCED_INTERACTION_SCENE(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId, g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash)
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPostMissionSceneId != SIS_POST_STRIP_CLUB and != SIS_POST_APARTMENT, using START_SYNCED_INTERACTION_SCENE().")
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS - iPostMissionSceneId", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId)
ENDIF
DISABLE_INTERACTION_MENU()
SET_CELEBRATION_SCREEN_AS_ACTIVE(FALSE, FALSE)
THEFEED_FLUSH_QUEUE()
PRINTLN("[RCC MISSION] - [NETCELEBRATION] - [SAC] - called THEFEED_FLUSH_QUEUE.")
#IF IS_DEBUG_BUILD
PRINTLN("[SAC] - TRIGGER_POST_HEIST_POSITION_SYSTEMS has been called:")
DEBUG_PRINTCALLSTACK()
#ENDIF
ENDPROC
FUNC BOOL LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
#IF IS_DEBUG_BUILD
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
PRINTLN("[SAC] - LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE been called with player at pos ", vPlayerPos)
ENDIF
#ENDIF
IF NOT sData.bActivatedRequiredIpls
IF IS_PROPERTY_CUSTOM_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
ACTIVATE_IPLS_FOR_CUSTOM_PROPERTY(g_TransitionSessionNonResetVars.iAptIndex, g_TransitionSessionNonResetVars.iApartmentVariation)
PRINTLN("[SAC] - LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE is for custom apartment, activated ipls with ACTIVATE_IPLS_FOR_CUSTOM_PROPERTY(", g_TransitionSessionNonResetVars.iAptIndex, " ,", g_TransitionSessionNonResetVars.iApartmentVariation, ")")
ELIF g_TransitionSessionNonResetVars.iAptIndex = PROPERTY_STILT_APT_8_A
ACTIVATE_IPLS_FOR_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE is for PROPERTY_STILT_APT_8_A, activated ipls with ACTIVATE_IPLS_FOR_STILT_APARTMENT(", g_TransitionSessionNonResetVars.iAptIndex, ")")
ENDIF
sData.bActivatedRequiredIpls = TRUE
ELSE
IF NOT IS_VALID_INTERIOR(sData.interiorIndex)
PRINTLN("[SAC] - interior not valid yet, grabbing form coords ", sData.vPlayerPosForLoadingScene, ", interior type = ", sData.strInteriorName)
sData.interiorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(sData.vPlayerPosForLoadingScene, sData.strInteriorName)
ELSE
IF IS_INTERIOR_CAPPED(sData.interiorIndex)
CAP_INTERIOR(sData.interiorIndex, FALSE)
sData.bInteriorNeedsReCapped = TRUE
PRINTLN("[SAC] - Trying to load a capped interior,un-capping.")
ENDIF
IF IS_INTERIOR_DISABLED(sData.interiorIndex)
DISABLE_INTERIOR(sData.interiorIndex, FALSE)
sData.bInteriorNeedsDisabled = TRUE
PRINTLN("[SAC] - Trying to load a disabled interior, re-enabling.")
ENDIF
PIN_INTERIOR_IN_MEMORY(sData.interiorIndex)
IF IS_INTERIOR_READY(sData.interiorIndex)
RETAIN_ENTITY_IN_INTERIOR(PLAYER_PED_ID(), sData.interiorIndex)
PRINTLN("[SAC] - pinned interior into memory.")
RETURN TRUE
ELSE
PRINTLN("[SAC] - pinning interior into memory.")
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC STRING GET_MOCAP_CUTSCENE_NAME(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
SWITCH sData.eSceneType
#IF FEATURE_HEIST_ISLAND
CASE eHEISTWINNERSCENETYPE_ISLAND_HEIST
RETURN "HS4F_DRP_CEL"
BREAK
#ENDIF
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
RETURN "HS3_EXT"
BREAK
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
RETURN "HS3_CEL_ARC"
BREAK
CASE eHEISTWINNERSCENETYPE_ROOFTOP
RETURN "MPH_FIN_CEL_ROO"
BREAK
CASE eHEISTWINNERSCENETYPE_BAR
RETURN "MPH_FIN_CEL_BAR"
BREAK
CASE eHEISTWINNERSCENETYPE_APARTMENT
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] GET_MOCAP_CUTSCENE_NAME g_TransitionSessionNonResetVars.iAptIndex = ", g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] GET_MOCAP_CUTSCENE_NAME g_TransitionSessionNonResetVars.iApartmentVariation = ", g_TransitionSessionNonResetVars.iApartmentVariation)
IF IS_HEIST_PROPERTY_TYPE_DLC(g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[RCC BUSINESS] [KW CUTSCENES] playing MPH_FIN_CEL_APT1")
RETURN "MPH_FIN_CEL_APT1"
ELIF IS_PROPERTY_CUSTOM_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] - eHEISTWINNERSCENESTAGE_START_SCENE (IS_PROPERTY_CUSTOM_APARTMENT = TRUE), playing APA_FIN_CEL_APT4")
RETURN "APA_FIN_CEL_APT4"
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_5_BASE_A)
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] - eHEISTWINNERSCENESTAGE_START_SCENE (PROPERTY_STILT_APT_5_BASE_A = TRUE), playing APA_FIN_CEL_APT2")
RETURN "APA_FIN_CEL_APT2"
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_1_BASE_B)
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] - eHEISTWINNERSCENESTAGE_START_SCENE (PROPERTY_STILT_APT_1_BASE_B = TRUE), playing APA_FIN_CEL_APT3")
RETURN "APA_FIN_CEL_APT3"
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - [RCC BUSINESS] [KW CUTSCENES] playing MPH_FIN_CEL_APT")
RETURN "MPH_FIN_CEL_APT"
ENDIF
BREAK
CASE eHEISTWINNERSCENETYPE_STRIP_CLUB
RETURN "MPH_FIN_CEL_STR"
BREAK
CASE eHEISTWINNERSCENETYPE_TREVOR
RETURN "MPH_FIN_CEL_TRE"
BREAK
ENDSWITCH
RETURN ""
ENDFUNC
PROC SET_COMPONENT_VARIATIONS_FOR_CUTSCENE_PEDS()
SWITCH g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType
CASE FMMC_CELEBRATION_TYPE_ROOFTOP
#IF FEATURE_HEIST_ISLAND
CASE FMMC_CELEBRATION_TYPE_ISLAND_HEIST
#ENDIF
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_1", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_2", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_3", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_4", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
BREAK
CASE FMMC_CELEBRATION_TYPE_BAR
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_1", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_2", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
BREAK
CASE FMMC_CELEBRATION_TYPE_STRIP_CLUB
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_1", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_2", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_3", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_4", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("Bar_Maid", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
BREAK
CASE FMMC_CELEBRATION_TYPE_APARTMENT
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_1", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_2", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_3", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_4", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
BREAK
CASE FMMC_CELEBRATION_TYPE_TREVOR
BREAK
CASE FMMC_CELEBRATION_TYPE_DEFAULT
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_1", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_2", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_3", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
SET_CUTSCENE_ENTITY_STREAMING_FLAGS("MP_4", DUMMY_MODEL_FOR_SCRIPT, CES_DONT_STREAM_AND_APPLY_VARIATIONS)
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL HAS_MOCAP_CUTSCENE_LOADED(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
RETURN (sData.iLoadMocapStage = HEIST_WINNER_MOCAP_LOAD_FINISHED)
ENDFUNC
FUNC BOOL LOAD_WINNER_SCENE_MOCAP(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
STRING strCutscene = GET_MOCAP_CUTSCENE_NAME(sData)
SWITCH sData.iLoadMocapStage
CASE 0
REMOVE_CUTSCENE()
PRINTLN("[SAC] - called REMOVE_CUTSCENE.")
sData.iLoadMocapStage++
BREAK
CASE 1
IF NOT HAS_CUTSCENE_LOADED()
AND NOT IS_CUTSCENE_ACTIVE()
PRINTLN("[SAC] - HAS_CUTSCENE_LOADED = FALSE and IS_CUTSCENE_ACTIVE = FALSE.")
sData.iLoadMocapStage++
ENDIF
BREAK
CASE 2
IF HAS_THIS_CUTSCENE_LOADED(strCutscene)
PRINTLN("[SAC] - loaded cutscene ", strCutscene)
sData.iLoadMocapStage = HEIST_WINNER_MOCAP_LOAD_FINISHED
ELSE
PRINTLN("[SAC] - requesting cutscene ", strCutscene)
REQUEST_CUTSCENE(strCutscene)
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_REQUESTED_CUTSCENE_MUSIC_EVENT)
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
ENABLE_PREPARE_CELEBRATION_STRIP_CLUB_MUSIC_EVENT()
ELIF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
ENABLE_PREPARE_CELEBRATION_APARTMENT_MUSIC_EVENT()
ENDIF
PRINTLN("[SAC] - LOAD_WINNER_SCENE_MOCAP = requested prepare mmusic events for celebration winner scene.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_REQUESTED_CUTSCENE_MUSIC_EVENT)
ENDIF
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
PRINTLN("[SAC] - CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY = TRUE for cutscene ", strCutscene)
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType != FMMC_CELEBRATION_TYPE_TREVOR)
PRINTLN("[SAC] - calling SET_COMPONENT_VARIATIONS_FOR_CUTSCENE_PEDS for cutscene ", strCutscene)
SET_COMPONENT_VARIATIONS_FOR_CUTSCENE_PEDS()
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
RETURN HAS_MOCAP_CUTSCENE_LOADED(sData)
ENDFUNC
PROC SET_LOCAL_PLAYER_FOR_MOCAP(BOOL bSetInvisible = TRUE, BOOL bClearTasks = TRUE)
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF bSetInvisible
IF bClearTasks
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_CLEAR_TASKS | NSPC_REMOVE_FIRES | NSPC_REMOVE_EXPLOSIONS | NSPC_FREEZE_POSITION | NSPC_SET_INVISIBLE)
ELSE
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_REMOVE_FIRES | NSPC_REMOVE_EXPLOSIONS | NSPC_FREEZE_POSITION | NSPC_SET_INVISIBLE)
ENDIF
ELSE
IF bClearTasks
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_CLEAR_TASKS | NSPC_REMOVE_FIRES | NSPC_REMOVE_EXPLOSIONS | NSPC_FREEZE_POSITION)
ELSE
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_REMOVE_FIRES | NSPC_REMOVE_EXPLOSIONS | NSPC_FREEZE_POSITION)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC PLACE_PLAYER_AT_SYNCED_INTERACTION_SCENE_COORDS()
VECTOR vDestination
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_BAR // Special case so since post mission scene vector is inside an interior we need to cap, and we need to move the player out of it.
vDestination = << -565.4, 273.1, 90.0 >>
CLEAR_ROOM_FOR_ENTITY(PLAYER_PED_ID())
PRINTLN("[SAC] - doing eHEISTWINNERSCENETYPE_BAR, setting vDestination = ", vDestination)
ELIF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_TREVOR // url:bugstar:2208758 - [Series A - Finale] In the ending cutscene various foliage and textures pop into view.
vDestination = << 2828.7, 4810.4, 48.5 >>
PRINTLN("[SAC] - iPostMissionSceneId = eHEISTWINNERSCENETYPE_TREVOR, setting player to trevors coords = ", vDestination)
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = (-1)
vDestination = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
vDestination.z += 2.0 // Make sure we're not inside or below the ground.
PRINTLN("[SAC] - iPostMissionSceneId = -1, grabbing players current coords (= 2.0 on the z) = ", vDestination)
ELSE
vDestination = GET_SYNCED_INTERACTION_SCENE_COORDS(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId)
vDestination.z += 2.0 // Make sure we're not inside or below the ground.
PRINTLN("[SAC] - iPostMissionSceneId is valid, called GET_SYNCED_INTERACTION_SCENE_COORDS + 2.0m on the Z. Coords = ", vDestination)
ENDIF
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_CLEAR_TASKS | NSPC_FREEZE_POSITION | NSPC_NO_COLLISION | NSPC_SET_INVISIBLE)
IF NOT IS_VECTOR_ZERO(vDestination)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vDestination, FALSE)
PRINTLN("[SAC] - set player to coords ", vDestination)
ELSE
PRINTLN("[SAC] - leaving player at current coords, vDestination = ", vDestination)
ENDIF
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
PRINTLN("[SAC] - setting bit CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP.")
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION()
BOOL bLoadInterior
BOOL bWarpToPostMissionSceneLocation = TRUE
VECTOR vWarpToLocation
BOOL bSnapToGround = TRUE
BOOL bDoQuickWarp
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED)
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
IF ( g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene AND NOT IS_FAKE_MULTIPLAYER_MODE_SET() )
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SET_FOCUS_POS)
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
SET_FOCUS_POS_AND_VEL(sHeistWinnerSceneData.vFocusPosition, << 0.0, 0.0, 0.0 >>)
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - set focus pos to ", sHeistWinnerSceneData.vFocusPosition)
ELSE
SET_SPECTATOR_OVERRIDE_COORDS(sHeistWinnerSceneData.vFocusPosition)
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - set spectator override coords to ", sHeistWinnerSceneData.vFocusPosition)
ENDIF
SET_GAME_PAUSES_FOR_STREAMING(FALSE)
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - SET_GAME_PAUSES_FOR_STREAMING(FALSE).")
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SET_FOCUS_POS)
ENDIF
ENDIF
// If doing an end winner scene, don't warp to the post mission scene location.
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
vWarpToLocation = sHeistWinnerSceneData.vFocusPosition
bWarpToPostMissionSceneLocation = FALSE
ELSE
// If we need to go into an interior for a mocap, don't warp to the post mission scene location.
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_STRIP_CLUB
vWarpToLocation = sHeistWinnerSceneData.vPlayerPosForLoadingScene
bWarpToPostMissionSceneLocation = FALSE
ENDIF
ENDIF
IF bWarpToPostMissionSceneLocation
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
PLACE_PLAYER_AT_SYNCED_INTERACTION_SCENE_COORDS()
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - player not SCTV - completed warp to winner scene location. Setting bit CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
ELSE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - player is SCTV - completed warp to winner scene location. Setting bit CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
ENDIf
ELSE
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
SWITCH iPreLoadStage
CASE 0
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_BAR
bLoadInterior = TRUE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - eSceneType = eHEISTWINNERSCENETYPE_BAR, setting bLoadInterior = TRUE")
ENDIF
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
bLoadInterior = TRUE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB, setting bLoadInterior = TRUE")
ENDIF
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
bLoadInterior = TRUE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - eSceneType = eHEISTWINNERSCENETYPE_APARTMENT, setting bLoadInterior = TRUE")
ELSE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - eSceneType = eHEISTWINNERSCENETYPE_APARTMENT, player is SCTV, leaving bLoadInterior = FALSE")
ENDIF
ENDIF
IF NOT bLoadInterior
iPreLoadStage++
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - NOT bLoadInterior, set iPreLoadStage = ", iPreLoadStage)
ELSE
IF LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE(sHeistWinnerSceneData)
iPreLoadStage++
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - LOAD_INTERIOR_FOR_HEIST_END_WINNER_SCENE = TRUE, set iPreLoadStage = ", iPreLoadStage)
ENDIF
ENDIF
BREAK
CASE 1
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - IS_PLAYER_SCTV = TRUE, setting bit CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
ELSE
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
// bDoQuickWarp = TRUE
bSnapToGround = FALSE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - not snapping player to ground for warp.") //2220835
ENDIF
IF NET_WARP_TO_COORD(vWarpToLocation, sHeistWinnerSceneData.fPlayerHeadingForLoadingScene, FALSE, FALSE, TRUE, TRUE, FALSE, bDoQuickWarp, bSnapToGround, TRUE)
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - completed warp to winner scene location. Setting bit CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP.")
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT // url:bugstar:2226484 - ST
OR sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
ENDIF
iPreLoadStage++
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - completed warp, set iPreLoadStage = ", iPreLoadStage)
ELSE
PRINTLN("[SAC] - MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION - waiting on NET_WARP_TO_COORD.")
ENDIF
ENDIF
BREAK
CASE 2
// Done.
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MAINTAIN_DRAW_BLACK_RECTANGLE_FOR_FADED_MOCAP()
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDrawBlackRectangle[0]
DRAW_RECT(0.5, 0.5, 3.0, 3.0, 0, 0, 0, 255)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDrawBlackRectangle[1] = TRUE
ENDIF
ENDPROC
PROC MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT iCreatedCount
INT iPlayer
PLAYER_INDEX playerId
PED_INDEX pedId
VECTOR vPos = <<0,0,0>>
PED_INDEX piLocalPlayerPed = PLAYER_PED_ID()
SWITCH iCelebrationCloningStage
CASE 0
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bStreamingRequestsComplete
iCelebrationCloningStage++
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - bDoingHeistEndWinnerScene = TRUE. Going to stage ", iCelebrationCloningStage)
ENDIF
ENDIF
BREAK
CASE 1
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iWinnerSceneType != FMMC_CELEBRATION_TYPE_TREVOR)
REPEAT NUM_NETWORK_PLAYERS iPlayer
IF IS_NET_PLAYER_OK(INT_TO_NATIVE(PLAYER_INDEX, iPlayer), FALSE)
playerId = INT_TO_NATIVE(PLAYER_INDEX, iPlayer)
pedId = GET_PLAYER_PED(playerId)
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - player ", iPlayer, " is net ok.")
IF NOT IS_PLAYER_SCTV(playerId)
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(playerId)].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(playerId)].bJoinedMissionAsSpectator
IF IS_ENTITY_ALIVE(piLocalPlayerPed)
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - local player ped is alive, getting coords")
vPos = GET_ENTITY_COORDS(piLocalPlayerPed)
ENDIF
CREATE_CLONE_OF_PED_AT_COORDS(sData.playerPedClone[iCreatedCount].pedId, pedId, vPos + <<0.0,0.0,100.0>>, 0.0, iPlayer, TRUE)
iCreatedCount++
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - created clone of player ", iPlayer)
ENDIF
ENDIF
ENDREPEAT
iCelebrationCloningStage++
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - created clones of all players. Going to stage ", iCelebrationCloningStage)
ELSE
iCelebrationCloningStage++
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS - cut scene is Trevor one, not cloning any players. Going to stage ", iCelebrationCloningStage)
ENDIF
BREAK
CASE 2
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bCloningComplete = TRUE
BREAK
ENDSWITCH
ENDPROC
PROC SET_PED_BACKUP_PED_VARIATIONS(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData, INT iBackupPed)
SWITCH iBackupPed
CASE 0
// A_F_Y_VINEWOOD_01
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HEAD, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAIR, 1, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TORSO, 1, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_LEG, 1, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_JBIB, 0, 0)
BREAK
CASE 1
// A_M_Y_VINEWOOD_01
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HEAD, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TORSO, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_LEG, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_JBIB, 0, 0)
BREAK
CASE 2
// A_F_Y_GENHOT_01
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HEAD, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_LEG, 0, 2)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL, 1, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_JBIB, 0, 0)
BREAK
CASE 3
// A_F_Y_GENHOT_01
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAIR, 1, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TORSO, 0, 2)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_LEG, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.playerPedClone[iBackupPed].pedId, PED_COMP_JBIB, 0, 0)
BREAK
ENDSWITCH
ENDPROC
FUNC INT GET_NUM_PLAYER_PEDS_REQUIRED_FOR_SCENE(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
SWITCH sData.eSceneType
CASE eHEISTWINNERSCENETYPE_APARTMENT
RETURN NUM_PLAYERS_NEEDED_FOR_APARTMENT_SCENE
CASE eHEISTWINNERSCENETYPE_BAR
RETURN NUM_PLAYERS_NEEDED_FOR_BAR_SCENE
CASE eHEISTWINNERSCENETYPE_ROOFTOP
RETURN NUM_PLAYERS_NEEDED_FOR_ROOFTOP_SCENE
CASE eHEISTWINNERSCENETYPE_STRIP_CLUB
RETURN NUM_PLAYERS_NEEDED_FOR_STRIP_SCENE
CASE eHEISTWINNERSCENETYPE_TREVOR
RETURN NUM_PLAYERS_NEEDED_FOR_TREVOR_SCENE
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
CASE eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
RETURN NUM_PLAYERS_NEEDED_FOR_CASINO_HEIST
#IF FEATURE_HEIST_ISLAND
CASE eHEISTWINNERSCENETYPE_ISLAND_HEIST
RETURN NUM_PLAYERS_NEEDED_FOR_ISLAND_HEIST
#ENDIF
ENDSWITCH
RETURN NUM_PLAYERS_NEEDED_FOR_STRIP_SCENE
ENDFUNC
FUNC BOOL CREATE_HEIST_END_WINNER_SCENE_ENTITIES(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT i, iObj, iNumObjsToCreate, iNumExtraPedsToCreate, iObjsCreated, iNumExtraPedsCreated//, iNumPlayerClonesNeeded
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_CREATED_ENTITIES)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bCloningComplete
IF sData.eSceneType = eHEISTWINNERSCENETYPE_TREVOR
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
sData.bCreatedPlayerPedClones = TRUE
PRINTLN("[NETCELEBRATION] - [SAC] - winner scene = eHEISTWINNERSCENETYPE_TREVOR, skipping creating clones of players. Only Trevor is in the scene.")
#IF FEATURE_HEIST_ISLAND
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
IF DOES_ENTITY_EXIST(sData.playerPedClone[COMPANION_PED_ID].pedId)
sData.bCreatedPlayerPedClones = TRUE
PRINTLN("[NETCELEBRATION] - [SAC] - winner scene = eHEISTWINNERSCENETYPE_ISLAND_HEIST, skipping creating clones of players. This is handled elsewhere.")
ELSE
IF sData.eCompanionPedModel = DUMMY_MODEL_FOR_SCRIPT
sData.bCreatedPlayerPedClones = TRUE
PRINTLN("[NETCELEBRATION] - [SAC] - winner scene = eHEISTWINNERSCENETYPE_ISLAND_HEIST, skipping creating clones of players. Failed to clone companion.")
SCRIPT_ASSERT("Heist celebration - Failed to clone companion")
ELSE
//We do not have another player with us on the heist so we need to create someone to celebrate with
IF REQUEST_LOAD_MODEL(sData.eCompanionPedModel)
sData.playerPedClone[COMPANION_PED_ID].pedId = CREATE_PED(PEDTYPE_MISSION, sData.eCompanionPedModel, sData.playerPedClone[1].vSpawnPosition, sData.playerPedClone[1].fSpawnHeading, FALSE, FALSE)
IF DOES_ENTITY_EXIST(sData.playerPedClone[COMPANION_PED_ID].pedId)
SET_ENTITY_INVINCIBLE(sData.playerPedClone[COMPANION_PED_ID].pedId, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(sData.eCompanionPedModel)
sData.bCreatedPlayerPedClones = TRUE
PRINTLN("[NETCELEBRATION] - [SAC] - winner scene = eHEISTWINNERSCENETYPE_ISLAND_HEIST, skipping creating clones of players. Created a clone of companion ped.")
ENDIF
ELSE
PRINTLN("[NETCELEBRATION] - [SAC] - winner scene = eHEISTWINNERSCENETYPE_ISLAND_HEIST, Loading companion ped: ", sData.eCompanionPedModel)
ENDIF
ENDIF
ENDIF
#ENDIF
ELSE
IF NOT sData.bCreatedPlayerPedClones
iNumPlayersInScene = 0
REPEAT 4 i
IF NOT DOES_ENTITY_EXIST(sData.playerPedClone[i].pedId)
IF i <= (GET_NUM_PLAYER_PEDS_REQUIRED_FOR_SCENE(sData) - 1)
IF REQUEST_LOAD_MODEL(GET_BACKUP_PED_MODEL(i))
sData.playerPedClone[i].pedId = CREATE_PED(PEDTYPE_MISSION, GET_BACKUP_PED_MODEL(i), sData.playerPedClone[i].vSpawnPosition, sData.playerPedClone[i].fSpawnHeading, FALSE, FALSE)
// SET_PED_BACKUP_PED_VARIATIONS(sData, i)
SET_ENTITY_INVINCIBLE(sData.playerPedClone[i].pedId, TRUE)
ENDIF
ENDIF
ENDIF
ENDREPEAT
REPEAT 4 i
IF DOES_ENTITY_EXIST(sData.playerPedClone[i].pedId)
IF NOT IS_ENTITY_DEAD(sData.playerPedClone[i].pedId)
SET_ENTITY_COORDS(sData.playerPedClone[i].pedId, sData.playerPedClone[i].vSpawnPosition + <<0.0,0.0,1.0>>)
SET_ENTITY_HEADING(sData.playerPedClone[i].pedId, sData.playerPedClone[i].fSpawnHeading)
PRINTLN("[NETCELEBRATIONS] - [SAC] - moved cloned ped ", i, " since they exist. Set to coords ",
sData.playerPedClone[i].vSpawnPosition,
", and heading ",
sData.playerPedClone[i].fSpawnHeading)
iNumPlayersInScene++
ENDIF
ELSE
ENDIF
ENDREPEAT
IF iNumPlayersInScene = GET_NUM_PLAYER_PEDS_REQUIRED_FOR_SCENE(sData)
sData.bCreatedPlayerPedClones = TRUE
ENDIF
ENDIF
ENDIF
IF NOT ARE_VECTORS_EQUAL(<< 0.0, 0.0, 0.0 >>, sData.extraPed.vSpawnPosition)
iNumExtraPedsToCreate++
IF NOT DOES_ENTITY_EXIST(sData.extraPed.pedId)
IF REQUEST_LOAD_MODEL(sData.extraPed.eModel)
sData.extraPed.pedId = CREATE_PED(PEDTYPE_MISSION, sData.extraPed.eModel, sData.extraPed.vSpawnPosition, sData.extraPed.fSpawnHeading, FALSE, FALSE)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_HAIR, 2, 1)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_TORSO, 1, 2)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_LEG, 1, 1)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_SPECIAL, 0, 1)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(sData.extraPed.pedId, PED_COMP_JBIB, 0, 1)
ENDIF
PRINTLN("[NETCELEBRATIONS] - [SAC] - created extra ped at coords ", sData.extraPed.vSpawnPosition, " and heading ", sData.extraPed.fSpawnHeading)
ENDIF
ELSE
iNumExtraPedsCreated++
ENDIF
ENDIF
REPEAT HEIST_MAX_WINNER_SCENE_OBJECTS iObj
IF NOT ARE_VECTORS_EQUAL(<< 0.0, 0.0, 0.0 >>, sData.object[iObj].vSpawnPosition)
iNumObjsToCreate++
IF NOT DOES_ENTITY_EXIST(sData.object[iObj].entityId)
IF REQUEST_LOAD_MODEL(sData.object[iObj].eModel)
sData.object[iObj].entityId = CREATE_OBJECT(sData.object[iObj].eModel, sData.object[iObj].vSpawnPosition, FALSE, FALSE)
PRINTLN("[NETCELEBRATIONS] - [SAC] - created scene object ", iObj, " ped at coords ", sData.object[iObj].vSpawnPosition)
ENDIF
ELSE
iObjsCreated++
ENDIF
ENDIF
ENDREPEAT
IF (iNumObjsToCreate = iObjsCreated)
AND (iNumExtraPedsToCreate = iNumExtraPedsCreated)
AND sData.bCreatedPlayerPedClones
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_CREATED_ENTITIES)
ELSE
PRINTLN("[NETCELEBRATION] - [SAC] - iNumObjsToCreate = ", iNumObjsToCreate)
PRINTLN("[NETCELEBRATION] - [SAC] - iObjsCreated = ", iObjsCreated)
PRINTLN("[NETCELEBRATION] - [SAC] - iNumExtraPedsToCreate = ", iNumExtraPedsToCreate)
PRINTLN("[NETCELEBRATION] - [SAC] - iNumExtraPedsCreated = ", iNumExtraPedsCreated)
PRINTLN("[NETCELEBRATION] - [SAC] - sData.bCreatedPlayerPedClones = ", sData.bCreatedPlayerPedClones)
ENDIF
ELSE
PRINTLN("[NETCELEBRATION] - [SAC] - cannot create entities, cloning not complete.")
ENDIF
ENDIF
RETURN IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_CREATED_ENTITIES)
ENDFUNC
PROC REGISTER_PLAYER_PED_FOR_MOCAP(PED_INDEX ped, INT& iRegisterCount)
TEXT_LABEL_23 sPlayerString
IF NOT IS_PED_INJURED(ped)
sPlayerString = "MP_"
sPlayerString += iRegisterCount+1
SET_ENTITY_VISIBLE(ped, TRUE)
REGISTER_ENTITY_FOR_CUTSCENE(ped, sPlayerString, CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME)
PRINTLN("[NETCELEBRATIONS] - [SAC] - registered player ped ", sPlayerString, " with args (CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME).")
iRegisterCount++
ENDIF
ENDPROC
PROC REGISTER_EXTRA_PED_FOR_MOCAP(PED_INDEX ped, STRING strHandle)
IF NOT IS_PED_INJURED(ped)
SET_ENTITY_VISIBLE(ped, TRUE)
REGISTER_ENTITY_FOR_CUTSCENE(ped, strHandle, CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME)
PRINTLN("[NETCELEBRATIONS] - [SAC] - registered extra ped ", strHandle, " with args (CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME).")
ENDIF
ENDPROC
PROC REGISTER_OBJECT_FOR_MOCAP(ENTITY_INDEX entity, STRING strHandle)
IF DOES_ENTITY_EXIST(entity)
IF NOT IS_ENTITY_DEAD(entity)
SET_ENTITY_VISIBLE(entity, TRUE)
REGISTER_ENTITY_FOR_CUTSCENE(entity, strHandle, CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME)
PRINTLN("[NETCELEBRATIONS] - [SAC] - registered object ", strHandle, " with args (CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME).")
ENDIF
ENDIF
ENDPROC
PROC REMOVE_PED_FROM_MOCAP(INT iPed)
TEXT_LABEL_23 sPlayerString
iPed += 1
sPlayerString = "MP_"
sPlayerString += iPed
REGISTER_ENTITY_FOR_CUTSCENE(NULL, sPlayerString, CU_DONT_ANIMATE_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME)
PRINTLN("[NETCELEBRATIONS] - [SAC] - removed player ped ", sPlayerString, " by registering them as NULL entity with args (CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_IGNORE_MODEL_NAME).")
ENDPROC
PROC REGISTER_MOCAP_PEDS(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
// Add peds to mocap.
IF (sData.eSceneType != eHEISTWINNERSCENETYPE_TREVOR)
REGISTER_PLAYER_PED_FOR_MOCAP(sData.playerPedClone[0].pedId, sData.iMocapRegisteredPedsCount)
REGISTER_PLAYER_PED_FOR_MOCAP(sData.playerPedClone[1].pedId, sData.iMocapRegisteredPedsCount)
REGISTER_PLAYER_PED_FOR_MOCAP(sData.playerPedClone[2].pedId, sData.iMocapRegisteredPedsCount)
REGISTER_PLAYER_PED_FOR_MOCAP(sData.playerPedClone[3].pedId, sData.iMocapRegisteredPedsCount)
ENDIF
REGISTER_EXTRA_PED_FOR_MOCAP(sData.extraPed.pedId, sData.extraPed.tl23_handle)
// Remove unregistered peds from mocap.
IF (sData.eSceneType = eHEISTWINNERSCENETYPE_BAR)
IF sData.iMocapRegisteredPedsCount = 0
REMOVE_PED_FROM_MOCAP(0)
REMOVE_PED_FROM_MOCAP(1)
ELIF sData.iMocapRegisteredPedsCount = 1
REMOVE_PED_FROM_MOCAP(1)
ENDIF
ELIF (sData.eSceneType != eHEISTWINNERSCENETYPE_TREVOR)
IF sData.iMocapRegisteredPedsCount = 0
REMOVE_PED_FROM_MOCAP(0)
REMOVE_PED_FROM_MOCAP(1)
REMOVE_PED_FROM_MOCAP(2)
REMOVE_PED_FROM_MOCAP(3)
ELIF sData.iMocapRegisteredPedsCount = 1
REMOVE_PED_FROM_MOCAP(1)
REMOVE_PED_FROM_MOCAP(2)
REMOVE_PED_FROM_MOCAP(3)
ELIF sData.iMocapRegisteredPedsCount = 2
REMOVE_PED_FROM_MOCAP(2)
REMOVE_PED_FROM_MOCAP(3)
ELIF sData.iMocapRegisteredPedsCount = 3
REMOVE_PED_FROM_MOCAP(3)
ENDIF
ENDIF
ENDPROC
PROC REGISTER_MOCAP_OBJECTS(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
INT i
REPEAT HEIST_MAX_WINNER_SCENE_OBJECTS i
REGISTER_OBJECT_FOR_MOCAP(sData.object[i].entityId, sData.object[i].tl23_handle)
ENDREPEAT
ENDPROC
FUNC BOOL IS_MOCAP_FINISHED()
IF NOT IS_CUTSCENE_PLAYING()
RETURN TRUE
ENDIF
IF (GET_CUTSCENE_TOTAL_DURATION() - GET_CUTSCENE_TIME()) <= 250
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC SET_POST_MISSION_VECTOR_SPAWN_LOCATION()
FLOAT fRadius = 100
IF g_TransitionSessionNonResetVars.sPostMissionCleanupData.fPostMissionPosSearchRadius != 0
fRadius = g_TransitionSessionNonResetVars.sPostMissionCleanupData.fPostMissionPosSearchRadius
ENDIF
SETUP_SPECIFIC_SPAWN_LOCATION( g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPos, 0.0,
fRadius, TRUE, 1, FALSE, FALSE, 10, DEFAULT, g_TransitionSessionNonResetVars.sPostMissionCleanupData.bPostMissionPosIgnoreExclusionZones)
PRINTLN("[PMC] - [SAC] - SET_POST_MISSION_VECTOR_SPAWN_LOCATION - setup specific spawn near location. Position = ", g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPos, ", search radius = ", g_TransitionSessionNonResetVars.sPostMissionCleanupData.fPostMissionPosSearchRadius, ", visible checks = TRUE, min dis from coords = 1, consider interiors = FALSE, near roads = FALSE, min dis from other players = 65.")
SET_PLAYER_WILL_SPAWN_FACING_COORDS(g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPointOfInterest, TRUE, FALSE)
PRINTLN("[PMC] - [SAC] - SET_POST_MISSION_VECTOR_SPAWN_LOCATION - setup player will spoawn facing coords ", g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPointOfInterest)
// No being placed inside the grounds of the Humane Labs.
SET_MISSION_SPAWN_OCCLUSION_ANGLED_AREA(<<3410.697998,3751.923828,9.634556>>, <<3657.413818,3700.305420,72.006607>>, 250.000000, 0, TRUE)
PRINTLN("[PMC] - [SAC] - called SET_MISSION_SPAWN_OCCLUSION_ANGLED_AREA(<<3410.697998,3751.923828,9.634556>>, <<3657.413818,3700.305420,72.006607>>, 250.000000) - call 2.")
ENDPROC
FUNC BOOL SHOULD_DRAW_CONGRATS_CHARD()
IF NOT sHeistWinnerSceneData.bDrawCongratsShard
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.playerPedClone[0].pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.playerPedClone[0].pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[0].pedId, GET_HASH_KEY("CongratsSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 0, CongratsSplash event has fired.")
ENDIF
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[0].pedId, GET_HASH_KEY("CongratSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 0, CongratSplash event has fired.")
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.playerPedClone[1].pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.playerPedClone[1].pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[1].pedId, GET_HASH_KEY("CongratsSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 1, CongratsSplash event has fired.")
ENDIF
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[1].pedId, GET_HASH_KEY("CongratSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 1, CongratSplash event has fired.")
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.playerPedClone[2].pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.playerPedClone[2].pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[2].pedId, GET_HASH_KEY("CongratsSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 2, CongratsSplash event has fired.")
ENDIF
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[2].pedId, GET_HASH_KEY("CongratSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 2, CongratSplash event has fired.")
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.playerPedClone[3].pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.playerPedClone[3].pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[3].pedId, GET_HASH_KEY("CongratsSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 3, CongratsSplash event has fired.")
ENDIF
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.playerPedClone[3].pedId, GET_HASH_KEY("CongratSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - ped 3, CongratSplash event has fired.")
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.extraPed.pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.extraPed.pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.extraPed.pedId, GET_HASH_KEY("CongratsSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - extra ped, CongratsSplash event has fired.")
ENDIF
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.extraPed.pedId, GET_HASH_KEY("CongratSplash"))
sHeistWinnerSceneData.bDrawCongratsShard = TRUE
PRINTLN("[SAC] - extra ped, CongratSplash event has fired.")
ENDIF
ENDIF
ENDIF
ENDIF
RETURN sHeistWinnerSceneData.bDrawCongratsShard
ENDFUNC
PROC MAINTAIN_TREVOR_HEAD_BLOOD()
IF NOT sHeistWinnerSceneData.extraPed.bAppliedHeadBlood
IF DOES_ENTITY_EXIST(sHeistWinnerSceneData.extraPed.pedId)
IF NOT IS_ENTITY_DEAD(sHeistWinnerSceneData.extraPed.pedId)
IF HAS_ANIM_EVENT_FIRED(sHeistWinnerSceneData.extraPed.pedId, GET_HASH_KEY("forehead_blood"))
//APPLY_PED_BLOOD_SPECIFIC(sHeistWinnerSceneData.extraPed.pedId, ENUM_TO_INT(PDZ_HEAD), 0.500, 0.677, 144.815, 0.660, 2, 0.00, "SCR_TrevorTreeBang")
APPLY_PED_DAMAGE_PACK(sHeistWinnerSceneData.extraPed.pedId, "SCR_TrevorTreeBang", 1.0, 1.0)
sHeistWinnerSceneData.extraPed.bAppliedHeadBlood = TRUE
PRINTLN("[SAC] - anim event forehead_blood has fired, called APPLY_PED_DAMAGE_PACK(sHeistWinnerSceneData.extraPed.pedId, SCR_TrevorTreeBang, 1.0, 1.0). ")
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC SET_PLAYERS_INVISIBLE_THIS_FRAME()
INT i
SET_LOCAL_PLAYER_INVISIBLE_LOCALLY(TRUE)
REPEAT NUM_NETWORK_PLAYERS i
IF IS_NET_PLAYER_OK(INT_TO_NATIVE(PLAYER_INDEX, i), FALSE)
SET_PLAYER_INVISIBLE_LOCALLY(INT_TO_NATIVE(PLAYER_INDEX, i), TRUE)
ENDIF
ENDREPEAT
ENDPROC
FUNC BOOL WARP_TO_OUTSIDE_APARTMENT(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
RETURN NET_WARP_TO_COORD(sData.vPlayerPosForAfterScene, sData.fPlayerHeadingForafterScene,FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE)
ENDFUNC
FUNC STRING GET_CELEBRATION_SCREEN_NAME()
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingPilotSchoolCelebration
RETURN "ch"
ENDIF
RETURN "SUMMARY"
ENDFUNC
PROC MAINTAIN_GET_APARTMENT_INTERIOR_INSTANCE_INDEX_EARLY()
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
EXIT
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
IF NOT IS_VECTOR_ZERO(sHeistWinnerSceneData.vPlayerPosForLoadingScene)
IF NOT IS_VALID_INTERIOR(apartmentInteriorIndex)
apartmentInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(sHeistWinnerSceneData.vPlayerPosForLoadingScene, sHeistWinnerSceneData.strInteriorName)
PRINTLN("[SAC] - MAINTAIN_GET_APARTMENT_INTERIOR_INSTANCE_INDEX_EARLY - grabbed apartment interior.")
ENDIF
ENDIF
ENDIF
ENDPROC
// url:bugstar:2226484
PROC MAINTAIN_FREEZE_MICROPHONE()
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
// url:bugstar:2255042
SWITCH iFreezeMicrophoneDelay
CASE 0
PRINTLN("[SAC] [FREEZE_MICROPHONE] - Microphone is ***not***being Frozen within MAINTAIN_FREEZE_MICROPHONE")
iFreezeMicrophoneDelay++
BREAK
CASE 1
PRINTLN("[SAC] [FREEZE_MICROPHONE] - Microphone is ***not*** being Frozen within MAINTAIN_FREEZE_MICROPHONE")
iFreezeMicrophoneDelay++
BREAK
CASE 2
PRINTLN("[SAC] [FREEZE_MICROPHONE] - Microphone is ***not*** being Frozen within MAINTAIN_FREEZE_MICROPHONE")
iFreezeMicrophoneDelay++
BREAK
CASE 3
PRINTLN("[SAC] [FREEZE_MICROPHONE] - Microphone is being Frozen within MAINTAIN_FREEZE_MICROPHONE")
FREEZE_MICROPHONE()
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
bUseHeistTransitionInviteMic = TRUE // Set the apartment microphone to freeze too, so there's no gaps with it unfreezing for a few frames.
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
VECTOR vecTemp1 = GET_ENTITY_COORDS(PLAYER_PED_ID())
VECTOR vecTemp2 = GET_FINAL_RENDERED_CAM_COORD()
PRINTLN("[SAC] [FREEZE_MICROPHONE] - Player's current position for Microphone freeze: ", vecTemp1)
PRINTLN("[SAC] [FREEZE_MICROPHONE] - GET_FINAL_RENDERED_CAM_COORD for Microphone freeze: ", vecTemp2)
#ENDIF
ENDIF
ENDPROC
FUNC BOOL STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR()
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF IS_VALID_INTERIOR(apartmentInteriorIndex)
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = apartmentInteriorIndex
RETURN TRUE
ENDIF
ELSE
apartmentInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(sHeistWinnerSceneData.vPlayerPosForLoadingScene, sHeistWinnerSceneData.strInteriorName)
ENDIF
ENDIF
IF IS_VECTOR_ZERO(sHeistWinnerSceneData.vPlayerPosForLoadingScene)
RETURN FALSE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT()
IF IS_PLAYER_IN_MP_PROPERTY(PLAYER_ID(), FALSE)
RETURN TRUE
ENDIF
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iBS,PROPERTY_BROADCAST_BS_PLAYER_USING_PROPERTY)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL STAND_ALONE_CELEBRATION_IS_PLAYER_IN_AN_APARTMENT()
IF STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_AN_APARTMENT - STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT = TRUE.")
RETURN TRUE
ENDIF
IF STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_AN_APARTMENT - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR = TRUE.")
RETURN TRUE
ENDIF
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_AN_APARTMENT - RETURNING FALSE.")
RETURN FALSE
ENDFUNC
PROC SET_WINNER_SCENE_INTERIOR_TO_NORMAL_FREEMODE_STATE()
IF IS_VALID_INTERIOR(sHeistWinnerSceneData.interiorIndex)
IF IS_INTERIOR_READY(sHeistWinnerSceneData.interiorIndex)
UNPIN_INTERIOR(sHeistWinnerSceneData.interiorIndex)
PRINTLN("[SAC] - un-pinned interior.")
ENDIF
IF sHeistWinnerSceneData.bInteriorNeedsReCapped
IF NOT IS_INTERIOR_CAPPED(sHeistWinnerSceneData.interiorIndex)
CAP_INTERIOR(sHeistWinnerSceneData.interiorIndex, TRUE)
PRINTLN("[SAC] - re-capping interior.")
ENDIF
ENDIF
IF sHeistWinnerSceneData.bInteriorNeedsDisabled
IF IS_INTERIOR_DISABLED(sHeistWinnerSceneData.interiorIndex)
DISABLE_INTERIOR(sHeistWinnerSceneData.interiorIndex, TRUE)
PRINTLN("[SAC] - re-disabling interior.")
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL CAN_START_WINNER_SCENE()
BOOL bCanStart = TRUE
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_CREATED_ENTITIES)
PRINTLN("[SAC] - CAN_START_WINNER_SCENE = FALSE, HEIST_WINNER_SCENE_CREATED_ENTITIES bit not set.")
bCanStart = FALSE
ENDIF
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
PRINTLN("[SAC] - CAN_START_WINNER_SCENE = FALSE, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP bit not set.")
bCanStart = FALSE
ENDIF
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE)
PRINTLN("[SAC] - CAN_START_WINNER_SCENE = FALSE, CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE bit not set.")
bCanStart = FALSE
ENDIF
IF NOT HAS_MOCAP_CUTSCENE_LOADED(sHeistWinnerSceneData)
PRINTLN("[SAC] - CAN_START_WINNER_SCENE = FALSE, HAS_MOCAP_CUTSCENE_LOADED = FALSE")
bCanStart = FALSE
ENDIF
RETURN bCanStart
ENDFUNC
///PURPOSE: Should turn off all nightvision-related things
PROC CELEB_TURN_NIGHTVISION_OFF()
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
REMOVE_MP_HEIST_GEAR(PLAYER_PED_ID(), HEIST_GEAR_NIGHTVISION)
ENDIF
IF GET_REQUESTINGNIGHTVISION()
OR GET_USINGNIGHTVISION()
ENABLE_NIGHTVISION(VISUALAID_OFF)
ENDIF
DISABLE_NIGHT_VISION_CONTROLLER(TRUE) // Added under instruction of Alwyn for B*2196822
ENDPROC
PROC SETUP_JOINED_MISSION_AS_SPECTATOR_WARP()
INT iTemp
iTemp = GET_RANDOM_INT_IN_RANGE(0, 5)
VECTOR vWarpLoc
FLOAT fWarpHeading
SWITCH iTemp
CASE 0
vWarpLoc = <<-664.0847, 9.2700, 38.1992>>
fWarpHeading = 153.2955
BREAK
CASE 1
vWarpLoc = <<-224.8966, -38.2854, 48.5775>>
fWarpHeading = 140.1033
BREAK
CASE 2
vWarpLoc = <<-292.0316, -1455.0347, 30.3251>>
fWarpHeading = 305.0253
BREAK
CASE 3
vWarpLoc = <<-1227.5524, -1169.9088, 6.6146>>
fWarpHeading = 324.8094
BREAK
CASE 4
vWarpLoc = <<-1759.1628, -426.1342, 41.8913>>
fWarpHeading = 271.1274
BREAK
ENDSWITCH
SETUP_SPECIFIC_SPAWN_LOCATION(vWarpLoc, fWarpHeading, 250, TRUE, 1, FALSE, TRUE)
PRINTLN("[SAC] - SETUP_CREATOR_POST_MISSION_WARP_LOCATION - setup specific spawn near location. Position = ", vWarpLoc)
// No being placed inside the grounds of the Humane Labs.
SET_MISSION_SPAWN_OCCLUSION_ANGLED_AREA(<<3410.697998,3751.923828,9.634556>>, <<3657.413818,3700.305420,72.006607>>, 250.000000, 0, TRUE)
PRINTLN("[PMC] - [SAC] - called SET_MISSION_SPAWN_OCCLUSION_ANGLED_AREA(<<3410.697998,3751.923828,9.634556>>, <<3657.413818,3700.305420,72.006607>>, 250.000000) - call 2.")
ENDPROC
FUNC BOOL LOAD_SIMPLE_INTERIOR_SYSTEM_FOR_POST_HEIST_MOCAP(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
IF sData.eTargetInteriorID != SIMPLE_INTERIOR_INVALID
IF NOT sData.bPinnedAndRequestedInterior
INTERIOR_INSTANCE_INDEX interiorID = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<2730.0, -380.0, -50.0>>, "ch_DLC_Arcade")
IF PIN_INTERIOR_IN_MEMORY_VALIDATE(interiorID)
PRINTLN("[SAC] - LOAD_SIMPLE_INTERIOR_SYSTEM_FOR_POST_HEIST_MOCAP - Pinned ch_DLC_Arcade")
SET_BIT(g_SimpleInteriorData.iSeventhBS, BS7_SIMPLE_INTERIOR_ENTERING_INTERIOR_FOR_POST_HEIST_MOCAP)
SET_BIT(g_SimpleInteriorData.iSeventhBS, BS7_SIMPLE_INTERIOR_ENTERING_PLAYING_POST_HEIST_MOCAP)
SET_SIMPLE_INTERIOR_AUTOWARP_OVERRIDE(sData.pOwner)
REQUEST_SCRIPT("AM_MP_SMPL_INTERIOR_EXT")
REQUEST_SCRIPT("AM_MP_SMPL_INTERIOR_INT")
REQUEST_SCRIPT("AM_MP_ARCADE")
REQUEST_RELAUCHING_OF_SIMPLE_INTERIOR_INT_SCRIPT(sData.eTargetInteriorID)
sData.bPinnedAndRequestedInterior = TRUE
ENDIF
ELSE
RETURN NOT IS_BIT_SET(g_SimpleInteriorData.iSeventhBS, BS7_SIMPLE_INTERIOR_ENTERING_INTERIOR_FOR_POST_HEIST_MOCAP)
ENDIF
ELSE
sData.eTargetInteriorID = SIMPLE_INTERIOR_ARCADE_PALETO_BAY
SCRIPT_ASSERT("LOAD_SIMPLE_INTERIOR_SYSTEM_FOR_POST_HEIST_MOCAP - Invalid interior ID!")
ENDIF
RETURN FALSE
ENDFUNC
FUNC STRING GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NAME(INT iVehID)
STRING sReturn
SWITCH iVehID
CASE 0 sReturn = "Riot1" BREAK
CASE 1 sReturn = "Riot2" BREAK
CASE 2 sReturn = "Riot3" BREAK
CASE 3 sReturn = "Riot4" BREAK
CASE 4 sReturn = "Police1" BREAK
CASE 5 sReturn = "Police2" BREAK
CASE 6 sReturn = "Police3" BREAK
CASE 7 sReturn = "Police4" BREAK
CASE 8 sReturn = "Police5" BREAK
CASE 9 sReturn = "Police6" BREAK
CASE 10 sReturn = "Police7" BREAK
CASE 11 sReturn = "Police8" BREAK
CASE 12 sReturn = "NewsVan4" BREAK
ENDSWITCH
RETURN sReturn
ENDFUNC
FUNC STRING GET_CASINO_BAR_SCENE_PROP_NAME(INT iPropID)
STRING sReturn
SWITCH iPropID
CASE 0 sReturn = "player_bottle_4" BREAK
CASE 1 sReturn = "player_glass_3" BREAK
CASE 2 sReturn = "player_glass_4" BREAK
ENDSWITCH
RETURN sReturn
ENDFUNC
FUNC BOOL GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NEEDS_HEADLIGHTS_ON(INT iVehID)
IF iVehID = 10
OR iVehID = 11
OR iVehID = 12
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NEEDS_SIRENS_ON(INT iVehID)
IF iVehID = 12
RETURN FALSE
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL DOES_CASINO_BAR_SCENE_PROP_NEED_HIDING(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData, INT iPropID)
SWITCH iPropID
CASE 0
CASE 2
IF sData.iMocapRegisteredPedsCount <= 3
RETURN TRUE
ENDIF
BREAK
CASE 1 RETURN (sData.iMocapRegisteredPedsCount < 3) BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC STRING GET_ISLAND_HEIST_CELEBRATION_SCENE_PROP_NAME(INT iPropID)
STRING sReturn
SWITCH iPropID
CASE 0 sReturn = "Shot_Glass_3" BREAK
CASE 1 sReturn = "MP_3_Lime" BREAK
CASE 2 sReturn = "Shot_Glass_4" BREAK
CASE 3 sReturn = "MP_4_Lime" BREAK
ENDSWITCH
RETURN sReturn
ENDFUNC
FUNC BOOL DOES_ISLAND_HEIST_CELEBRATION_SCENE_PROP_NEED_HIDING(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData, INT iPropID)
SWITCH iPropID
CASE 0
CASE 1
IF sData.iMocapRegisteredPedsCount < 3
RETURN TRUE
ENDIF
BREAK
CASE 2
CASE 3
IF sData.iMocapRegisteredPedsCount < 4
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC SETUP_CUTSCENE_ENTITIES(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
//This mocap requires script to grab all vehicles and activate their lights
IF NOT sData.bSetupSceneEntities
INT i
REPEAT CASINO_HEIST_ROOF_SCENE_VEHICLES i
STRING sSceneEntityName = GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NAME(i)
ENTITY_INDEX sceneEntity = GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY(sSceneEntityName)
IF DOES_ENTITY_EXIST(sceneEntity)
IF IS_ENTITY_A_VEHICLE(sceneEntity)
VEHICLE_INDEX sceneVeh = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(sceneEntity)
IF IS_ENTITY_ALIVE(sceneVeh)
IF GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NEEDS_HEADLIGHTS_ON(i)
SET_VEHICLE_LIGHTS(sceneVeh, FORCE_VEHICLE_LIGHTS_ON)
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - Turn lights on for vehicle: ", i, " ", sSceneEntityName)
ENDIF
IF GET_CASINO_HEIST_ROOF_SCENE_VEHICLE_NEEDS_SIRENS_ON(i)
SET_VEHICLE_SIREN(sceneVeh, TRUE)
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - Turn sirens on for vehicle: ", i, " ", sSceneEntityName)
ENDIF
ELSE
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - FAILED to turn on lights for vehicle: ", i, " ", sSceneEntityName, " IS_ENTITY_ALIVE(sceneVeh) = FALSE")
ENDIF
ELSE
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - FAILED to turn on lights for vehicle: ", i, " ", sSceneEntityName, " IS_ENTITY_A_VEHICLE(sceneEntity) = FALSE")
ENDIF
ELSE
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - FAILED to turn on lights for vehicle: ", i, " ", sSceneEntityName, " DOES_ENTITY_EXIST(sceneEntity)= FALSE")
ENDIF
ENDREPEAT
sData.bSetupSceneEntities = TRUE
ENDIF
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
IF NOT sData.bSetupSceneEntities
AND sData.iMocapRegisteredPedsCount < 4
INT i
REPEAT CASINO_HEIST_BAR_SCENE_PROPS i
STRING sSceneEntityName = GET_CASINO_BAR_SCENE_PROP_NAME(i)
ENTITY_INDEX sceneEntity = GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY(sSceneEntityName)
IF DOES_ENTITY_EXIST(sceneEntity)
AND DOES_CASINO_BAR_SCENE_PROP_NEED_HIDING(sData, i)
SET_ENTITY_VISIBLE(sceneEntity, FALSE)
sData.bSetupSceneEntities = TRUE
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - hide ", sSceneEntityName)
ENDIF
ENDREPEAT
ENDIF
#IF FEATURE_HEIST_ISLAND
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
IF NOT sData.bSetupSceneEntities
AND sData.iMocapRegisteredPedsCount < 4
INT i
REPEAT CASINO_ISLAND_HEIST_SCENE_PROPS i
STRING sSceneEntityName = GET_ISLAND_HEIST_CELEBRATION_SCENE_PROP_NAME(i)
ENTITY_INDEX sceneEntity = GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY(sSceneEntityName)
IF DOES_ENTITY_EXIST(sceneEntity)
AND DOES_ISLAND_HEIST_CELEBRATION_SCENE_PROP_NEED_HIDING(sData, i)
SET_ENTITY_VISIBLE(sceneEntity, FALSE)
sData.bSetupSceneEntities = TRUE
PRINTLN("[SAC] - SETUP_CUTSCENE_ENTITIES - hide ", sSceneEntityName)
ENDIF
ENDREPEAT
ENDIF
#ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Returns the time from the end of the scene we should start fading the screen
FUNC INT GET_SCENE_FADE_OUT_START_TIME(eHEIST_WINNER_SCENE_TYPE eSceneType)
IF eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
#IF FEATURE_HEIST_ISLAND
OR eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
RETURN 3000
ENDIF
RETURN 1000
ENDFUNC
FUNC INT GET_SCENE_FADE_OUT_DURATION(eHEIST_WINNER_SCENE_TYPE eSceneType)
IF eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
#IF FEATURE_HEIST_ISLAND
OR eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
RETURN 3000
ENDIF
RETURN 500
ENDFUNC
FUNC BOOL DOES_SCENE_PAUSE_RENDER_ON_END(eHEIST_WINNER_SCENE_TYPE eSceneType)
IF eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
OR eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL SHOULD_SCENE_START_FADE_OUT_AUDIO_WITH_FADE(eHEIST_WINNER_SCENE_TYPE eSceneType)
IF eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL MAINTAIN_HEIST_END_WINNER_SCENE(STRUCT_HEIST_END_WINNER_SCENE_DATA &sData)
BOOL bBeginScene
BOOL bSkipSceneAndGoToEnd
#IF IS_DEBUG_BUILD
IF sHeistWinnerSceneData.bTerminateEndHeistScene
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
#ENDIF
SWITCH sData.eSceneStage
CASE eHEISTWINNERSCENESTAGE_INIT
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
DRAW_CELEBRATION_SCREEN_THIS_FRAME(sCelebrationData, FALSE)
IF CAN_START_WINNER_SCENE()
bBeginScene = TRUE
ENDIF
#IF IS_DEBUG_BUILD
IF sHeistWinnerSceneData.bRunEndHeistScene
bBeginScene = TRUE
ENDIF
#ENDIF
IF bBeginScene
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - bBeginScene = TRUE.")
IF IS_PLAYER_SCTV(PLAYER_ID())
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - bBeginScene - IS_PLAYER_SCTV(PLAYER_ID()) - TRUE")
IF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
// OR sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
bSkipSceneAndGoToEnd = TRUE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - set bSkipSceneAndGoToEnd = TRUE because we're doing the strip club or apartment scene.")
ENDIF
ENDIF
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - bBeginScene - bJoinedMissionAsSpectator - TRUE")
// IF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
// OR sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
bSkipSceneAndGoToEnd = TRUE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - set bSkipSceneAndGoToEnd = TRUE because we're doing the strip club or apartment scene.")
// ENDIF
ENDIF
IF bSkipSceneAndGoToEnd
TOGGLE_RENDERPHASES(TRUE)
ACTIVATE_RECTANGLE_FADE_IN(FALSE)
ACTIVATE_RECTANGLE_FADE_OUT(TRUE)
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
sData.eSceneStage = eHEISTWINNERSCENESTAGE_DO_JOINED_MISSION_AS_SPECTATOR_WARP
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_DO_JOINED_MISSION_AS_SPECTATOR_WARP.")
ELSE
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
ENDIF
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call 0.")
ELSE
SET_CELEBRATION_SCREEN_AS_ACTIVE(TRUE)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
SETUP_SIMPLE_INTERIOR_PROPERTY_OWNER(sData)
sData.eSceneStage = eHEISTWINNERSCENESTAGE_LOAD_SIMPLE_INTERIOR
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_LOAD_SIMPLE_INTERIOR.")
ELSE
sData.eSceneStage = eHEISTWINNERSCENESTAGE_LOAD_SCENE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_LOAD_SCENE.")
ENDIF
ENDIF
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_LOAD_SIMPLE_INTERIOR
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF LOAD_SIMPLE_INTERIOR_SYSTEM_FOR_POST_HEIST_MOCAP(sData)
sData.eSceneStage = eHEISTWINNERSCENESTAGE_LOAD_SCENE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_LOAD_SCENE.")
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_LOAD_SCENE
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
DRAW_CELEBRATION_SCREEN_THIS_FRAME(sCelebrationData, FALSE)
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
PRINTLN("[SAC] - CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP bit is set, player is in winner scene location.")
PRINTLN("[SAC] - going to stage eHEISTWINNERSCENESTAGE_DELAY_BEFORE_CUTSCENE_START.")
IF sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME(sData.strRoomName)
PRINTLN("[SAC] - SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME - ", sData.strRoomName)
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME(sData.strRoomName)
PRINTLN("[SAC] - SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME - ", sData.strRoomName)
IF NOT g_bChampaignCelebrationCutsceneIsActive
g_bChampaignCelebrationCutsceneIsActive = TRUE
PRINTLN("[SAC] - set g_bChampaignCelebrationCutsceneIsActive to TRUE.")
ENDIF
ENDIF
sData.eSceneStage = eHEISTWINNERSCENESTAGE_DELAY_BEFORE_CUTSCENE_START
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_DELAY_BEFORE_CUTSCENE_START
BOOL bGoToStartScene
bGoToStartScene = TRUE
IF NOT HAS_NET_TIMER_EXPIRED(timerFadeFlashDelay, WHITE_SCREEN_HOLD_TIME)
bGoToStartScene = FALSE
ENDIF
IF sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
IF NOT HAS_NET_TIMER_STARTED(timerDelayForCutsceneMusic)
START_NET_TIMER(timerDelayForCutsceneMusic)
START_CELEBRATION_STRIP_CLUB_MUSIC_EVENT()
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
PRINTLN("[SAC] - started net timer timerDelayForCutsceneMusic.")
PRINTLN("[SAC] - called START_CELEBRATION_STRIP_CLUB_MUSIC_EVENT().")
PRINTLN("[SAC] - set bit CELEB_GENERAL_BITSET_FREEZE_MICROPHONE.")
bGoToStartScene = FALSE
ELSE
IF NOT HAS_NET_TIMER_EXPIRED(timerDelayForCutsceneMusic, DELAY_FOR_MUSIC_TIME)
bGoToStartScene = FALSE
ENDIF
ENDIF
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
IF NOT HAS_NET_TIMER_STARTED(timerDelayForCutsceneMusic)
START_NET_TIMER(timerDelayForCutsceneMusic)
START_CELEBRATION_APARTMENT_MUSIC_EVENT()
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
PRINTLN("[SAC] - started net timer timerDelayForCutsceneMusic.")
PRINTLN("[SAC] - called START_CELEBRATION_APARTMENT_MUSIC_EVENT().")
PRINTLN("[SAC] - set bit CELEB_GENERAL_BITSET_FREEZE_MICROPHONE.")
bGoToStartScene = FALSE
ELSE
IF NOT HAS_NET_TIMER_EXPIRED(timerDelayForCutsceneMusic, DELAY_FOR_MUSIC_TIME)
bGoToStartScene = FALSE
ENDIF
ENDIF
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
#IF FEATURE_HEIST_ISLAND
OR sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
ENDIF
IF bGoToStartScene
sData.eSceneStage = eHEISTWINNERSCENESTAGE_START_SCENE
PRINTLN("[SAC] - going to stage eHEISTWINNERSCENESTAGE_START_SCENE.")
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_START_SCENE
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
SET_LOCAL_PLAYER_FOR_MOCAP()
PRINTLN("[SAC] - [NETCELEBRATION] - SET_LOCAL_PLAYER_FOR_MOCAP() call 0.")
ENDIF
PRINTLN("[SAC] - BUSY SPINNER OFF - call 6.")
BUSYSPINNER_OFF()
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SET_PLAYER_FOR_MOCAP)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - set HEIST_WINNER_SCENE_SET_PLAYER_FOR_MOCAP bit.")
CELEB_TURN_NIGHTVISION_OFF()
TOGGLE_RENDERPHASES(TRUE)
ANIMPOSTFX_STOP_ALL()
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call 1.")
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
RESET_CELEBRATION_DATA(sCelebrationData)
REGISTER_MOCAP_PEDS(sData)
REGISTER_MOCAP_OBJECTS(sData)
SET_LOCAL_PLAYER_VISIBLE_IN_CUTSCENE(FALSE, FALSE)
START_MP_CUTSCENE()
IF (sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT)
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT)")
IF IS_HEIST_PROPERTY_TYPE_DLC(g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (IS_HEIST_PROPERTY_TYPE_DLC = TRUE)")
// DLC high end apartment
Move_Heist_Cutscene_To_Heist_Apartment(1, g_TransitionSessionNonResetVars.iAptIndex, TRUE)
ELIF ( IS_PROPERTY_CUSTOM_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
OR IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_5_BASE_A)
OR IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_1_BASE_B) )
#IF IS_DEBUG_BUILD
IF IS_PROPERTY_CUSTOM_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex)
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (IS_PROPERTY_CUSTOM_APARTMENT = TRUE)")
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_5_BASE_A)
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (PROPERTY_STILT_APT_5_BASE_A = TRUE)")
ELIF IS_PROPERTY_STILT_APARTMENT(g_TransitionSessionNonResetVars.iAptIndex, PROPERTY_STILT_APT_1_BASE_B)
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (PROPERTY_STILT_APT_1_BASE_B = TRUE)")
ENDIF
#ENDIF
// Stilt or customisable apartments
Move_Heist_Cutscene_To_Heist_Apartment(1, g_TransitionSessionNonResetVars.iAptIndex, FALSE, MP_END_HEIST_WINNER_SCENE_CAMERA_COORDS)
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - eHEISTWINNERSCENESTAGE_START_SCENE (apartment is not high end, stilt or custom)")
// All other apartments
Move_Heist_Cutscene_To_Heist_Apartment(1, g_TransitionSessionNonResetVars.iAptIndex)
ENDIF
ELSE
START_CUTSCENE()
ENDIF
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDrawBlackRectangle[0] = FALSE
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDrawBlackRectangle[1] = FALSE
// TRIGGER_MUSIC_EVENT("MP_MC_SILENT")
// PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - called TRIGGER_MUSIC_EVENT('MP_MC_SILENT').")
#IF FEATURE_HEIST_ISLAND
IF sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
TRIGGER_MUSIC_EVENT("HEI4_CELEBRATION_CHEERS_MUSIC")
ENDIF
#ENDIF
ACTIVATE_RECTANGLE_FADE_IN(FALSE)
ACTIVATE_RECTANGLE_FADE_OUT(TRUE)
START_NET_TIMER(sData.sceneTimer)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - toggled renderphases, cleaned up old celebrations screen.")
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_START_CELEBRATION_MOVIE.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_START_CELEBRATION_MOVIE
BREAK
CASE eHEISTWINNERSCENESTAGE_START_CELEBRATION_MOVIE
BOOL bContinue
CELEBRATION_SCREEN_TYPE eCelebType
eCelebType = CELEBRATION_HEIST
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
eCelebType = CELEBRATION_GANGOPS
ENDIF
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
OR sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
eCelebType = CELEBRATION_HEIST
ENDIF
REQUEST_CELEBRATION_SCREEN(sCelebrationData, eCelebType)
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF HAS_CELEBRATION_SCREEN_LOADED(sCelebrationData)
IF NOT IS_CUTSCENE_PLAYING()
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - IS_CUTSCENE_PLAYING returning FALSE.")
IF NOT HAS_NET_TIMER_STARTED(sData.mocapNotPlayingTimer)
START_NET_TIMER(sData.mocapNotPlayingTimer, TRUE)
ELSE
IF HAS_NET_TIMER_EXPIRED(sData.mocapNotPlayingTimer, 5000, TRUE)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - IS_CUTSCENE_PLAYING has been returning FALSE for >= 5 seconds. Something wrong with the cutscene?")
SCRIPT_ASSERT("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - IS_CUTSCENE_PLAYING has been returning FALSE for >= 5 seconds. Something wrong with the cutscene?")
bContinue = TRUE
ENDIF
ENDIF
ELSE
bContinue = TRUE
ENDIF
IF bContinue
// url:bugstar:6151724
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
SET_TIMECYCLE_MODIFIER("bokeh_removebuzz")
PRINTLN("[SAC] - mocap start, adding timceycle modifier")
ENDIF
// IF HAS_NET_TIMER_EXPIRED(sData.sceneTimer, 2000)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_RUN_SCENE.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_RUN_SCENE
// ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - requesting congratulations scaleform movie.")
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_RUN_SCENE
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF SHOULD_DRAW_CONGRATS_CHARD()
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_SETUP_WINNER_SCENE_MOVIE)
CREATE_CELEBRATION_SCREEN(sCelebrationData, "WINNER", "HUD_COLOUR_HSHARD", FALSE)
SET_CELEBRATION_SCREEN_STAT_DISPLAY_TIME(sCelebrationData, CELEBRATION_SCREEN_WINNER_STAT_DISPLAY_TIME - CELEBRATION_SCREEN_STAT_WIPE_TIME)
ADD_FINALE_COMPLETE_TO_WALL(sCelebrationData, "WINNER")
ADD_BACKGROUND_TO_CELEBRATION_SCREEN(sCelebrationData, "WINNER", 0, 0)
SHOW_CELEBRATION_SCREEN(sCelebrationData, "WINNER")
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - populated movie with data.")
#IF IS_DEBUG_BUILD
INT iTempValue
iTempValue = GET_GLOBAL_ACTIONSCRIPT_FLAG(ACTIONSCRIPT_GLOBAL_ID)
PRINTLN("[SAC] - GET_GLOBAL_ACTIONSCRIPT_FLAG(ACTIONSCRIPT_GLOBAL_ID) = ", iTempValue)
#ENDIF
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_SETUP_WINNER_SCENE_MOVIE)
ENDIF
DRAW_CELEBRATION_SCREEN_THIS_FRAME(sCelebrationData, FALSE)
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_PLAYED_SUCCESS_NEUTRAL_FX_STACK)
IF HAS_CELEBRATION_SHARD_HEIST_COMPLETE_HIT_SCREEN_CENTRE()
//ANIMPOSTFX_PLAY("SuccessNeutral", 1000, TRUE)
PLAY_HEIST_PASS_FX("HeistCelebToast")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_PLAYED_SUCCESS_NEUTRAL_FX_STACK)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - played stack HeistCelebToast.")
ENDIF
ENDIF
ELSE
// Re-enable subtitles after shard
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_SUBTITLE_TEXT)
ENDIF
#IF IS_DEBUG_BUILD
UPDATE_HEIST_END_WINNER_SCENE_PEDS_WITH_WIDGET_DATA(sData)
#ENDIF
IF IS_CUTSCENE_PLAYING()
SETUP_CUTSCENE_ENTITIES(sData)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_STRIP_CLUB
OR sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_SET_ALLOW_RADIO_OVER_FADE_FLAG)
SET_CELEBRATION_ALLOW_OVER_RADIO_SCREEN_AUDIO_FLAG()
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_SET_ALLOW_RADIO_OVER_FADE_FLAG)
ENDIF
ENDIF
IF sData.eSceneType = eHEISTWINNERSCENETYPE_BAR
OR sData.eSceneType = eHEISTWINNERSCENETYPE_ROOFTOP
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
OR sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
OR sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_SET_ALLOW_CUTSCENE_OVER_FADE_FLAG)
SET_CELEBRATION_ALLOW_CUTSCENE_OVER_SCREEN_AUDIO_FLAG()
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_SET_ALLOW_CUTSCENE_OVER_FADE_FLAG)
ENDIF
ENDIF
IF DOES_SCENE_PAUSE_RENDER_ON_END(sData.eSceneType)
//Next stage will pause the render phases
IF (GET_CUTSCENE_TOTAL_DURATION() - GET_CUTSCENE_TIME()) <= 1000
//Preload the shard
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
OR sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
MAINTAIN_MISSION_END_SHARD(missionEndShardData, TRUE, TRUE)
REQUEST_STREAMED_TEXTURE_DICT("CommonMenu")
REQUEST_STREAMED_TEXTURE_DICT("MPLeaderboard")
REQUEST_STREAMED_TEXTURE_DICT("MPHud")
REQUEST_SCALEFORM_MOVIE("MP_BIG_MESSAGE_FREEMODE")
REQUEST_SCALEFORM_MOVIE_INSTANCE("INSTRUCTIONAL_BUTTONS")
ENDIF
ENDIF
ELSE
IF (GET_CUTSCENE_TOTAL_DURATION() - GET_CUTSCENE_TIME()) <= GET_SCENE_FADE_OUT_START_TIME(sData.eSceneType)
OR IS_MOCAP_FINISHED()
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
IF SHOULD_SCENE_START_FADE_OUT_AUDIO_WITH_FADE(sData.eSceneType)
PRINTLN("[SAC] - mocap near end fading and set eCAS_FADE_BLACK_SCENE.")
SET_CELEBRATION_AUDIO_STAGE(eCAS_FADE_BLACK_SCENE)
ENDIF
DO_SCREEN_FADE_OUT(GET_SCENE_FADE_OUT_DURATION(sData.eSceneType))
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_MOCAP_FINISHED()
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - scene timer has expired.")
IF IS_SCREEN_FADED_OUT()
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
CLEAR_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_FREEZE_MICROPHONE)
ENDIF
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
CLEAR_FOCUS()
PRINTLN("[SAC] - mocap finished, called CLEAR_FOCUS.")
ELSE
CLEAR_SPECTATOR_OVERRIDE_COORDS()
PRINTLN("[SAC] - mocap finished, called CLEAR_SPECTATOR_OVERRIDE_COORDS.")
ENDIF
// url:bugstar:6151724
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
PRINTLN("[SAC] - mocap finished, clearing time cycle modifier")
CLEAR_TIMECYCLE_MODIFIER()
ENDIF
DEACTIVATE_CELEBRATION_AUDIO_CELEB_SCREEN_SCENE()
SET_CELEBRATION_AUDIO_STAGE(eCAS_FADE_BLACK_SCENE)
RESET_NET_TIMER(timerFadeFlashDelay)
START_NET_TIMER(timerFadeFlashDelay)
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_STRIP_CLUB)
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_WARP_TO_OUTSIDE_STRIP_CLUB.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_WARP_TO_OUTSIDE_STRIP_CLUB
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
IF IS_GAMER_HANDLE_VALID(sHeistWinnerSceneData.playerLeader)
AND NETWORK_GET_PLAYER_FROM_GAMER_HANDLE(sHeistWinnerSceneData.playerLeader) = PLAYER_ID()
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_RUN_SCENE - eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF - Player is boss setting stat")
CASINO_HEIST_FLOW__SET_STAT_BIT(ciCASINO_HEIST_FLOW_STAT_BITSET__LESTER_POST_MISSION_ONE_TIME_SCENE_VIEWED)
ELSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_RUN_SCENE - eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF - Player is NOT boss dont't set stat")
ENDIF
sData.eShardOverFadeStage = SOF_FADE_OUT
sData.eSceneStage = eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE
ELSE
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT)
PLACE_PLAYER_AT_SYNCED_INTERACTION_SCENE_COORDS()
ENDIF
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
ELSE
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_STRIP_CLUB)
AND (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT)
PRINTLN("[SAC] - not doing strip club or apartment post mission scene, using Neil's system, calling DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB.")
DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB(TRUE)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - player is SCTV and not doing apartment or strip club, going to stage eHEISTWINNERSCENESTAGE_END.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ELSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - player is SCTV and is doing apartment or strip club, going to stage eHEISTWINNERSCENESTAGE_SCTV_FADE_IN_DELAY.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_SCTV_FADE_IN_DELAY
ENDIF
ENDIF
ELIF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
OR sData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_SHARD_OVER_PAUSED_RENDER.")
sData.eShardOverFadeStage = SOF_SETUP_SHARD
sData.eSceneStage = eHEISTWINNERSCENESTAGE_SHARD_OVER_PAUSED_RENDER
g_bDelayShardStart = FALSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - g_bDelayShardStart = FALSE.")
ENDIF
ELSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - IS_MOCAP_FINISHED returning FALSE.")
IF sData.eSceneType = eHEISTWINNERSCENETYPE_TREVOR
MAINTAIN_TREVOR_HEAD_BLOOD()
ENDIF
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_SCTV_FADE_IN_DELAY
IF NOT HAS_NET_TIMER_STARTED(timerSctvFadeInDelay)
START_NET_TIMER(timerSctvFadeInDelay)
PRINTLN("[SAC] - started timer timerSctvFadeInDelay.")
ELSE
IF HAS_NET_TIMER_EXPIRED(timerSctvFadeInDelay, WHITE_SCREEN_HOLD_TIME)
PRINTLN("[SAC] - timerSctvFadeInDelay has expired, calling DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB to trigger Ryan's SCTV fade in.")
DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB(TRUE)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_DO_JOINED_MISSION_AS_SPECTATOR_WARP
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(1000)
ELIF IS_SCREEN_FADED_OUT()
SETUP_JOINED_MISSION_AS_SPECTATOR_WARP()
sData.eSceneStage = eHEISTWINNERSCENESTAGE_WARP_TO_POST_MISSION_VECTOR
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_WARP_TO_POST_MISSION_VECTOR.")
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_WARP_TO_OUTSIDE_STRIP_CLUB
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.enumPostMissionScenePossibleResult = PMSP_PASSED
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.enumPostMissionScenePossibleResult = PMSP_FAILED
IF NET_WARP_TO_COORD(sData.vPlayerPosForAfterScene, sData.fPlayerHeadingForafterScene, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - completed warp to outside strip club.")
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - vPlayerPosForAfterScene = ", sData.vPlayerPosForAfterScene)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - fPlayerHeadingForafterScene", sData.fPlayerHeadingForafterScene)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
IF IS_NET_PLAYER_OK(PLAYER_ID())
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
bActivateInteractionMenuOnCleanup = TRUE
NET_SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(),TRUE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
CLEANUP_MP_CUTSCENE()
STOP_CUTSCENE_AUDIO()
Make_Ped_Drunk(PLAYER_PED_ID(), 60000)
Activate_Drunk_Camera(60000)
// force_ped_motion_state(player_ped_id(), ms_on_foot_walk, false)
SIMULATE_PLAYER_INPUT_GAIT(player_id(), pedmove_walk, 6000)
force_ped_ai_and_animation_update(player_ped_id(), true)
Player_Takes_Alcohol_Hit(player_ped_id())
ELSE
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call A.")
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_WARP_TO_POST_MISSION_VECTOR
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF WARP_TO_SPAWN_LOCATION(SPAWN_LOCATION_AT_SPECIFIC_COORDS_IF_POSSIBLE, FALSE, FALSE, FALSE, FALSE)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - completed warp to vPostMissionVector.")
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
ENDIF
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
bActivateInteractionMenuOnCleanup = TRUE
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
BREAK
CASE eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE
SWITCH sData.eShardOverFadeStage
CASE SOF_FADE_OUT
IF IS_SCREEN_FADED_OUT()
sData.eShardOverFadeStage = SOF_SETUP_SHARD
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE - completed fade out.")
ELIF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(GET_SCENE_FADE_OUT_DURATION(sData.eSceneType))
ENDIF
BREAK
CASE SOF_SETUP_SHARD
REINIT_NET_TIMER(sData.shardOverFadeDisplayTime)
MAINTAIN_MISSION_END_SHARD(missionEndShardData, TRUE)
sData.eShardOverFadeStage = SOF_DRAW
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE - Shard setup.")
BREAK
CASE SOF_DRAW
IF HAS_NET_TIMER_EXPIRED(sData.shardOverFadeDisplayTime, 10000)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE - Finished - Move to cleanup.")
CLEAR_ALL_BIG_MESSAGES()
sData.eShardOverFadeStage = SOF_CLEANUP
ELIF NOT HAS_NET_TIMER_STARTED(sData.shardOverFadeDisplayTime)
REINIT_NET_TIMER(sData.shardOverFadeDisplayTime)
ENDIF
BREAK
CASE SOF_CLEANUP
IF NOT IS_ANY_BIG_MESSAGE_BEING_DISPLAYED()
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT)
PLACE_PLAYER_AT_SYNCED_INTERACTION_SCENE_COORDS()
ENDIF
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ENDIF
BREAK
ENDSWITCH
BREAK
CASE eHEISTWINNERSCENESTAGE_SHARD_OVER_PAUSED_RENDER
SWITCH sData.eShardOverFadeStage
CASE SOF_SETUP_SHARD
sData.eShardOverFadeStage = SOF_DRAW
BREAK
CASE SOF_DRAW
IF g_bDelayShardStart
g_bDelayShardStart = FALSE
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - g_bDelayShardStart = FALSE.")
ELSE
IF GET_TOGGLE_PAUSED_RENDERPHASES_STATUS()
TOGGLE_RENDERPHASES(FALSE, TRUE)
FLOAT fNearCam
FLOAT fFarCam
fNearCam = GET_FINAL_RENDERED_CAM_NEAR_DOF()
fFarCam = GET_FINAL_RENDERED_CAM_FAR_DOF()
SET_HIDOF_OVERRIDE(TRUE, TRUE, 0, fNearCam, fFarCam, fFarCam + 25.0)
ENDIF
ENDIF
IF HAS_NET_TIMER_EXPIRED(sData.shardOverFadeDisplayTime, 10000)
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - eHEISTWINNERSCENESTAGE_SHARD_OVER_FADE - Finished - Move to cleanup.")
DO_SCREEN_FADE_OUT(500)
CLEAR_ALL_BIG_MESSAGES()
sData.eShardOverFadeStage = SOF_CLEANUP
ELIF NOT HAS_NET_TIMER_STARTED(sData.shardOverFadeDisplayTime)
REINIT_NET_TIMER(sData.shardOverFadeDisplayTime)
ENDIF
BREAK
CASE SOF_CLEANUP
IF IS_SCREEN_FADED_OUT()
TOGGLE_PAUSED_RENDERPHASES(TRUE)
IF sData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
CLEAR_BIT(g_SimpleInteriorData.iSeventhBS, BS7_SIMPLE_INTERIOR_ENTERING_PLAYING_POST_HEIST_MOCAP)
ENDIF
SET_HIDOF_OVERRIDE(FALSE,FALSE,0,0,0,0)
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT)
PLACE_PLAYER_AT_SYNCED_INTERACTION_SCENE_COORDS()
ENDIF
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - going to stage eHEISTWINNERSCENESTAGE_END.")
sData.eSceneStage = eHEISTWINNERSCENESTAGE_END
ELIF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(500)
ENDIF
BREAK
ENDSWITCH
BREAK
CASE eHEISTWINNERSCENESTAGE_END
IF HAS_NET_TIMER_EXPIRED(timerFadeFlashDelay, WHITE_SCREEN_HOLD_TIME)
IF NOT sCelebrationData.bCleanedUpEndWinnerScene
SET_WINNER_SCENE_INTERIOR_TO_NORMAL_FREEMODE_STATE()
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_MP_CUTSCENE(TRUE, FALSE)
DELETE_HEIST_END_WINNER_SCENE_ENTITIES(sData)
REMOVE_CUTSCENE()
TOGGLE_PLAYER_DAMAGE_OVERLAY(TRUE)
TOGGLE_RENDERPHASES(TRUE)
PRINTLN("[SAC] - TOGGLE_RENDERPHASES(TRUE)")
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call 2.")
sCelebrationData.bCleanedUpEndWinnerScene = TRUE
ENDIF
ENDIF
IF IS_SCREEN_FADED_IN()
IF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - IS_PLAYER_SCTV(PLAYER_ID()) = TRUE.")
STRUCT_HEIST_END_WINNER_SCENE_DATA sTemp
sData = sTemp
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - screen faded in, completed cleanup of end winner scene and movie.")
RETURN TRUE
ELSE
IF STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR = TRUE.")
IF STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT = TRUE.")
STRUCT_HEIST_END_WINNER_SCENE_DATA sTemp
sData = sTemp
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - screen faded in, completed cleanup of end winner scene and movie.")
RETURN TRUE
ENDIF
ELSE
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR = FALSE.")
STRUCT_HEIST_END_WINNER_SCENE_DATA sTemp
sData = sTemp
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - screen faded in, completed cleanup of end winner scene and movie.")
RETURN TRUE
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - sData.eSceneType != eHEISTWINNERSCENETYPE_APARTMENT.")
STRUCT_HEIST_END_WINNER_SCENE_DATA sTemp
sData = sTemp
PRINTLN("[SAC] - MAINTAIN_HEIST_END_WINNER_SCENE - screen faded in, completed cleanup of end winner scene and movie.")
RETURN TRUE
ENDIF
ELSE
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
IF sData.eSceneType = eHEISTWINNERSCENETYPE_APARTMENT
IF IS_SCREEN_FADED_OUT()
IF NOT HAS_NET_TIMER_STARTED(waitForApartmentFadeIntimer)
START_NET_TIMER(waitForApartmentFadeIntimer)
ELSE
IF HAS_NET_TIMER_EXPIRED(waitForApartmentFadeIntimer, 50000)
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_APARTMENT_FAILSAFE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Cleans up variables and calls any required commands just before the script terminates.
PROC SCRIPT_CLEANUP()
PRINTLN("[SAC] - starting script cleanup.")
DEBUG_PRINTCALLSTACK()
DELETE_HEIST_END_WINNER_SCENE_ENTITIES(sHeistWinnerSceneData)
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
g_sTransitionSessionData.bMaintainCelebrationsScript = FALSE
Clear_Any_Objective_Text_From_This_Script()
PRINTLN("[SAC] - BUSY SPINNER OFF - script cleanup - call 5.")
BUSYSPINNER_OFF()
IF IS_AUDIO_SCENE_ACTIVE("MP_CELEB_SCREEN_SCENE")
STOP_AUDIO_SCENE("MP_CELEB_SCREEN_SCENE")
ENDIF
SET_LOCAL_PLAYER_VISIBLE_IN_CUTSCENE(TRUE, TRUE)
IF DOES_CAM_EXIST(pointAtPlayerCam)
SET_CAM_ACTIVE(pointAtPlayerCam, FALSE)
DESTROY_CAM(pointAtPlayerCam)
PRINTLN("[SAC] - cleaned up pointAtPlayerCam.")
ENDIF
PRINTLN("[SAC] - reset flag bOkToKillCelebrationScript, call 1.")
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bOkToKillCelebrationScript = FALSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPos = << 0.0, 0.0, 0.0 >>
g_TransitionSessionNonResetVars.sPostMissionCleanupData.fPostMissionPosSearchRadius = 0.0
g_TransitionSessionNonResetVars.sPostMissionCleanupData.vPostMissionPointOfInterest = << 0.0, 0.0, 0.0 >>
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bPostMissionPosIgnoreExclusionZones = FALSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bForcePostMissionWarpCreatorPosition = FALSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.fDistanceFromFreemodeEvent = 0.0
g_TransitionSessionNonResetVars.sPostMissionCleanupData.vFreemodeActionCoords = << 0.0, 0.0, 0.0 >>
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bSpawnNearEvent = FALSE
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iWarpForPvAtEvent = 0
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bPausePvCreation = FALSE
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition = FALSE
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STOPPED_STATS_SCREEN_MUSIC_EVENT)
AND NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_STATS_SCREEN_MUSIC_EVENT)
TRIGGER_MUSIC_EVENT("HEIST_STATS_SCREEN_STOP")
PRINTLN("[SAC] - triggered music event HEIST_STATS_SCREEN_STOP.")
ENDIF
ENDIF
INT iCounter
REPEAT COUNT_OF(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash) iCounter
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[iCounter] = -1
PRINTLN("[SAC] - reset iPlayerNameHash[", iCounter, "] to -1.")
ENDREPEAT
g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = -1
GAMER_HANDLE tempHandle
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iPackedInt = 0
g_TransitionSessionNonResetVars.sPostMissionCleanupData.ownerHandle = tempHandle
SET_POST_MISSION_PLACE_IN_APARTMENT_FLAG(FALSE)
g_TransitionSessionNonResetVars.sPostMissionCleanupData.vApartmentCoords = << 0.0, 0.0, 0.0 >>
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iApartmentLocation = -1
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iInvitedPropertyNum = -1
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iInvitedPropertyInstance = -1
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iInvitedPropertyEntrance = -1
g_TransitionSessionNonResetVars.sPostMissionCleanupData.iApartmentCustomVariation = -1
g_TransitionSessionNonResetVars.sPostMissionCleanupData.bActivatedCutsomaprtmentIpls = FALSE
PRINTLN("[SAC] - reset packed int, call 0.")
CELEB_TURN_NIGHTVISION_OFF()
TOGGLE_PLAYER_DAMAGE_OVERLAY(TRUE)
CLEAR_ALL_CELEBRATION_POST_FX()
TOGGLE_RENDERPHASES(TRUE)
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called TOGGLE_PLAYER_DAMAGE_OVERLAY(TRUE)")
PRINTLN("[SAC] - called CLEAR_ALL_CELEBRATION_POST_FX()")
PRINTLN("[SAC] - TOGGLE_RENDERPHASES(TRUE)")
PRINTLN("[SAC] - CELEB_TURN_NIGHTVISION_OFF()")
PRINTLN("[SAC] - SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call 3.")
DISABLE_NIGHT_VISION_CONTROLLER(FALSE)
IF NOT IS_RECTANGLE_FADED_OUT()
AND NOT IS_RECTANGLE_FADING_OUT()
PRINTLN("[SAC] - rectangle is faded in while in script cleanup, setting to fade out.")
ACTIVATE_RECTANGLE_FADE_IN(FALSE)
ACTIVATE_RECTANGLE_FADE_OUT(TRUE)
ENDIF
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
//AND NOT GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
CLEAR_FOCUS()
PRINTLN("[SAC] - script_cleanup, called CLEAR_FOCUS.")
ELSE
CLEAR_SPECTATOR_OVERRIDE_COORDS()
PRINTLN("[SAC] - script_cleanup, called CLEAR_SPECTATOR_OVERRIDE_COORDS.")
ENDIF
IF IS_PLAYER_SCTV(PLAYER_ID())
//OR GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
CLEANUP_MP_CUTSCENE(TRUE, FALSE)
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingPilotSchoolCelebration
OR IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call B.")
STOP_CUTSCENE_AUDIO()
ENDIF
SET_HIDOF_OVERRIDE(FALSE, FALSE, 0, 0, 0, 0)
IF IS_NET_PLAYER_OK(PLAYER_ID(), FALSE)
//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bDoingHeistCelebration = FALSE
CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bDoingHeistCelebration)
//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bHeistCelebrationShardHasFallenAway = FALSE
CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bHeistCelebrationShardHasFallenAway)
ENDIF
RELEASE_NAMED_SCRIPT_AUDIO_BANK("HUD_321_GO")
RESET_CELEBRATION_DATA(sCelebrationData)
CLEANUP_STAND_ALONE_CELEBRATION_SCREEN_GLOBALS(FALSE)
SET_CELEBRATION_SCREEN_AS_ACTIVE(FALSE, bActivateInteractionMenuOnCleanup)
SET_CELEB_BLOCK_RESURRECT_RENDERPHASE_UNPAUSE(FALSE)
PRINTLN("[SAC] - completed script cleanup.")
TERMINATE_THIS_THREAD()
ENDPROC
PROC PLAY_HEIST_CELEB_PASS_POST_FX()
PLAY_HEIST_PASS_FX("HeistCelebPass")
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
ENDPROC
PROC FREEZE_SCREEN_FOR_CELEBRATION(BOOL bPlayHeistCelebPassPostFx = TRUE, BOOL bFreezeScreen = TRUE, BOOL bRemoveNightvision = TRUE, BOOL bTerminatePreLoadfx = TRUE)
#IF IS_DEBUG_BUILD
PRINTLN("[SAC] - FREEZE_SCREEN_FOR_CELEBRATION has been called:")
DEBUG_PRINTCALLSTACK()
#ENDIF
// Turn off some annoying overlays.
IF bRemoveNightvision
CELEB_TURN_NIGHTVISION_OFF()
TOGGLE_PLAYER_DAMAGE_OVERLAY(FALSE)
ENDIF
// Pause the rendering.
IF bFreezeScreen
PRINTLN("[SAC] - FREEZE_SCREEN_FOR_CELEBRATION - bFreezeScreen = TRUE")
TOGGLE_RENDERPHASES(FALSE, TRUE)
IF Is_Player_Currently_On_MP_Heist(PLAYER_ID())
OR Is_Player_Currently_On_MP_Heist_Planning(PLAYER_ID())
//2230247
FLOAT fNearCam = GET_FINAL_RENDERED_CAM_NEAR_DOF()
FLOAT fFarCam = GET_FINAL_RENDERED_CAM_FAR_DOF()
SET_HIDOF_OVERRIDE(TRUE, TRUE, 0, fNearCam, fFarCam, fFarCam + 25.0)
IF Is_Player_Currently_On_MP_Heist(PLAYER_ID())
PLAY_SOUND_FRONTEND(-1,"Pre_Screen_Stinger","DLC_HEISTS_FINALE_SCREEN_SOUNDS")
PRINTLN("[SAC] - [RCC MISSION] - [NETCELEBRATION] - [CELEB_AUDIO] - FREEZE_SCREEN_FOR_CELEBRATION - played Pre_Screen_Stinger, DLC_HEISTS_FINALE_SCREEN_SOUNDS")
ELIF Is_Player_Currently_On_MP_Heist_Planning(PLAYER_ID())
PLAY_SOUND_FRONTEND(-1,"Pre_Screen_Stinger","DLC_HEISTS_PREP_SCREEN_SOUNDS")
PRINTLN("[SAC] - [RCC MISSION] - [NETCELEBRATION] - [CELEB_AUDIO] - FREEZE_SCREEN_FOR_CELEBRATION - played Pre_Screen_Stinger, DLC_HEISTS_PREP_SCREEN_SOUNDS")
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - FREEZE_SCREEN_FOR_CELEBRATION - bFreezeScreen = FALSE")
ENDIF
IF bTerminatePreLoadfx
IF ANIMPOSTFX_IS_RUNNING("MP_Celeb_Preload_Fade")
ANIMPOSTFX_STOP("MP_Celeb_Preload_Fade")
ENDIF
ENDIF
// Stop any previous post fx and play the pass fx.
IF bPlayHeistCelebPassPostFx
PLAY_HEIST_CELEB_PASS_POST_FX()
ENDIF
// start timer for initial fx.
START_NET_TIMER(timerFrozenForCelebrationScreen)
ENDPROC
/// PURPOSE:
/// Do necessary pre game start initialisation.
PROC PROCESS_PRE_GAME()
//This marks the script as a net script, and handles any instancing setup.
//SETUP_MP_MISSION_FOR_NETWORK(GET_MAX_NUM_PARTICIPANTS_FOR_MP_MISSION(missionScriptArgs.mission), missionScriptArgs)
// NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(MAX_NUM_SCRIPT_PARTICIPANTS, FALSE)
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
g_sTransitionSessionData.bMaintainCelebrationsScript = TRUE
//This makes sure the net script is active, waits until it is.
// HANDLE_NET_SCRIPT_INITIALISATION()
// NETWORK_REGISTER_HOST_BROADCAST_VARIABLES(standAloneData, SIZE_OF(standAloneData))
// NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(standAloneData, SIZE_OF(standAloneData))
// KGM: Wait for the first network broadcast before moving on
// (after Initialisation and Broadcast Variable Registration - Hosts can do this too)
// IF NOT Wait_For_First_Network_Broadcast()
// PRINTLN("[SAC] - Wait_For_First_Network_Broadcast() returned FALSE, calling SCRIPT_CLEANUP and bailing.")
// SCRIPT_CLEANUP()
// ENDIF
//This script will not be paused if another script calls PAUSE_GAME
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
IF SHOULD_LAUNCH_HEIST_TUTORIAL_MID_STRAND_CUT_SCENE()
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration = TRUE
PRINTLN("[RCC MISSION] - [PMC] - [NETCELEBRATION] - [SAC] - GET_HEIST_TUTORIAL_MID_CUTSCENE_REQUIRED = TRUE, setting bDoingAfterApartmentPanHeistCelebration = TRUE.")
ENDIF
SET_MY_SCENE_POSITION_INDEX(sHeistWinnerSceneData)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT
AND g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_STRIP_CLUB
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHandOverToNeilCelebration = TRUE
PRINTLN("[SAC] - Set bDoingHandOverToNeilCelebration to TRUE.")
ELSE
PRINTLN("[SAC] - set bDoingHandOverToNeilCelebration to FALSE.")
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_STRIP_CLUB
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bBlockStripClubAssets = TRUE
PRINTLN("[SAC] - set bBlockStripClubAssets = TRUE.")
ENDIF
IF NOT IS_PLAYER_SCTV(PLAYER_ID())
AND NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
SET_LOCAL_PLAYER_FOR_MOCAP(FALSE, FALSE)
ENDIF
IF HAS_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION()
AND NOT SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
PRINTLN("[SAC] - HAS_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION = TRUE and SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS = FALSE, calling CLEAR_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION under instruction of Bobby.")
CLEAR_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION()
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
SET_GAME_PAUSES_FOR_STREAMING(FALSE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(FALSE).")
ENDIF
SET_CELEB_BLOCK_RESURRECT_RENDERPHASE_UNPAUSE(TRUE)
PRINTLN("[SAC] - Completed process pre game.")
SET_GAME_STATE(eGAME_STATE_INI)
ENDPROC
PROC MAINTAIN_POINT_AT_PLAYER_CAMERA_CUT()
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
BOOL bFailsafeEnabled
IF NOT HAS_NET_TIMER_STARTED(timerPlaceCameraFailSafeTimer)
START_NET_TIMER(timerPlaceCameraFailSafeTimer)
ELSE
IF HAS_NET_TIMER_EXPIRED(timerPlaceCameraFailSafeTimer, 5000)
bFailsafeEnabled = TRUE
ENDIF
ENDIF
IF bFailsafeEnabled
FREEZE_SCREEN_FOR_CELEBRATION(FALSE, TRUE, TRUE, TRUE)
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
PRINTLN("[SAC] - MAINTAIN_POINT_AT_PLAYER_CAMERA_CUT - bFailsafeEnabled - forcing freeze screen and setting bit CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT.")
SCRIPT_ASSERT("[SAC] - MAINTAIN_POINT_AT_PLAYER_CAMERA_CUT failsafe enabled.")
ELSE
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoFacePlayerCamCut
SWITCH iPointAtPlayerCameraCutStage
CASE 0
PRINTLN("[SAC] - bDoFacePlayerCamCut = FALSE.")
FREEZE_SCREEN_FOR_CELEBRATION(FALSE, FALSE, FALSE)
SET_CELEBRATION_AUDIO_STAGE(eCAS_BLUR_SCREEN_SCENE)
PRINTLN("[SAC] - started MP_BLUR_PRE_CELEB_SCREEN_SCENE.")
iPointAtPlayerCameraCutStage++
BREAK
CASE 1
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
PRINTLN("[SAC] - set bit CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT.")
BREAK
ENDSWITCH
ELSE
SWITCH iPointAtPlayerCameraCutStage
CASE 0
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF ACTIVATE_CINEMATIC_CAM_FOR_IN_VEHICLE_CELEBRATION_SCREEN()
PRINTLN("[SAC] - ACTIVATE_CINEMATIC_CAM_FOR_IN_VEHICLE_CELEBRATION_SCREEN(TRUE)")
SET_CELEBRATION_AUDIO_STAGE(eCAS_BLUR_SCREEN_SCENE)
FREEZE_SCREEN_FOR_CELEBRATION()
iPointAtPlayerCameraCutStage = 2
ENDIF
ELSE
IF PLACE_CAMERA_FOR_CELEBRATION_SCREEN(sCelebrationData, pointAtPlayerCam, bPointAtPlayerCamSuccessfullyPlaced)
PRINTLN("[SAC] - PLACE_CAMERA_FOR_CELEBRATION_SCREEN = TRUE, bPointAtPlayerCamSuccessfullyPlaced = ", bPointAtPlayerCamSuccessfullyPlaced)
IF bPointAtPlayerCamSuccessfullyPlaced
PRINTLN("[SAC] - bPointAtPlayerCamSuccessfullyPlaced = TRUE")
SET_CAM_ACTIVE(pointAtPlayerCam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
SET_CELEBRATION_AUDIO_STAGE(eCAS_BLUR_SCREEN_SCENE)
FREEZE_SCREEN_FOR_CELEBRATION(TRUE, FALSE, TRUE)
iPointAtPlayerCameraCutStage++
ELSE
PRINTLN("[SAC] - bPointAtPlayerCamSuccessfullyPlaced = FALSE")
FREEZE_SCREEN_FOR_CELEBRATION()
iPointAtPlayerCameraCutStage = 2
PRINTLN("[SAC] - set bit CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT.")
ENDIF
ENDIF
ENDIF
BREAK
CASE 1
IF IS_CAM_ACTIVE(pointAtPlayerCam)
IF IS_CAM_RENDERING(pointAtPlayerCam)
BOOL bPlayPostHeistPassedPostFx
BOOL bFreezeScreen
BOOL bRemoveNightVision
IF bPointAtPlayerCamSuccessfullyPlaced
bFreezeScreen = TRUE
ENDIF
FREEZE_SCREEN_FOR_CELEBRATION(bPlayPostHeistPassedPostFx, bFreezeScreen, bRemoveNightVision)
iPointAtPlayerCameraCutStage++
PRINTLN("[SAC] - set bit CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT.")
ENDIF
ENDIF
BREAK
CASE 2
IF NOT GET_TOGGLE_PAUSED_RENDERPHASES_STATUS()
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
PRINTLN("[SAC] - set bit CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT.")
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL IS_PLAYER_FROM_MY_HEIST_CELEBRATION(PLAYER_INDEX playerId)
INT iHashCount
REPEAT COUNT_OF(g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash) iHashCount
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPlayerNameHash[iHashCount] = NETWORK_HASH_FROM_PLAYER_HANDLE(playerId)
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL HAVE_ALL_PLAYERS_HEIST_CELEBRATION_SHARD_FALLEN_AWAY()
INT i
REPEAT NUM_NETWORK_PLAYERS i
IF IS_NET_PLAYER_OK(INT_TO_NATIVE(PLAYER_INDEX, i), FALSE)
IF IS_PLAYER_FROM_MY_HEIST_CELEBRATION(INT_TO_NATIVE(PLAYER_INDEX, i))
IF IS_BIT_SET(GlobalplayerBD_FM[i].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bDoingHeistCelebration)//GlobalplayerBD_FM[i].bDoingHeistCelebration
IF NOT IS_BIT_SET(GlobalplayerBD_FM[i].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bHeistCelebrationShardHasFallenAway)//GlobalplayerBD_FM[i].bHeistCelebrationShardHasFallenAway
PRINTLN("[SAC] - HAVE_ALL_PLAYERS_HEIST_CELEBRATION_SHARD_FALLEN_AWAY retuning FALSE for player ", i)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bHaveAllHeistPlayersCelebrationShardsFallenAway = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Processes server
PROC PROCESS_STAND_ALONE_CELEBRATION_LOGIC()
STRING strScreenName
STRING strColourBackground
STOP_CONTROL_SHAKE(PLAYER_CONTROL) // No shaky pads during the celebrations - B*1837406.
// No pausing the celebration screen.
IF IS_PAUSE_MENU_ACTIVE()
SET_FRONTEND_ACTIVE(FALSE)
PRINTLN("[RCC MISSION] - [SAC] - called SET_FRONTEND_ACTIVE(FALSE) to remove pause menu for celebration screen.")
ENDIF
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_PAUSE)
DISABLE_FRONTEND_THIS_FRAME()
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED)
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT) // Need this to be done first before we warp player around.
PRINTLN("[SAC] - CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT bit is set.")
INITIALISE_HEIST_END_WINNER_SCENE_DATA(sHeistWinnerSceneData)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
PRINTLN("[SAC] - bDoingHeistEndWinnerScene = TRUE, creating winner scene entities.")
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bCloningComplete
PRINTLN("[SAC] - bCloningComplete = TRUE, creating winner scene entities.")
IF CREATE_HEIST_END_WINNER_SCENE_ENTITIES(sHeistWinnerSceneData)
PRINTLN("[SAC] - CREATE_HEIST_END_WINNER_SCENE_ENTITIES = TRUE, setting CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED)
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - bDoingHeistEndWinnerScene = FALSE, setting CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PRE_LOAD_WARP_TRIGGERED)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// Update broadcast version of if I joined heist as spectator.
IF NETWORK_IS_GAME_IN_PROGRESS()
//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator = g_TransitionSessionNonResetVars.sGlobalCelebrationData.bJoinedMissionAsSpectator
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bJoinedMissionAsSpectator
SET_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)
ELSE
CLEAR_BIT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)
ENDIF
ENDIf
SWITCH GET_CELEBRATION_STATE(0)
CASE eCELEBRATIONSTATE_INIT_MOVIE
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT)
INITIALISE_CELEBRATION_SCREEN_DATA(sCelebrationData)
SET_CELEBRATION_SCREEN_AS_ACTIVE(TRUE)
KILL_UI_FOR_CELEBRATION_SCREEN()
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
IF NOT IS_SCREEN_FADED_IN()
IF NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
PRINTLN("[SAC] - screen not faded or fading in. Called DO_SCREEN_FADE_IN(1000).")
ENDIF
ENDIF
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
SET_PLAYER_CLOTHES_FOR_RETURN_TO_FREEMODE()
PRINTLN("[SAC] - called SET_PED_VARIATIONS and removed other props etc from the player.")
ENDIF
ENDIF
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_CLEAR_TASKS | NSPC_REMOVE_FIRES | NSPC_SET_INVISIBLE | NSPC_REMOVE_EXPLOSIONS | NSPC_FREEZE_POSITION)
PRINTLN("[SAC] - completed inititialisation of celebration data.")
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_LOAD_MOVIE)
ELSE
PRINTLN("[SAC] - CELEB_GENERAL_COMPLETED_POINT_AT_PLAYER_CAMERA_CUT not set.")
ENDIF
BREAK
CASE eCELEBRATIONSTATE_LOAD_MOVIE
INT iMoneyTexture
CELEBRATION_SCREEN_TYPE eCelebType
eCelebType = CELEBRATION_STANDARD
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
eCelebType = CELEBRATION_GANGOPS
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
eCelebType = CELEBRATION_HEIST
ENDIF
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_ROOF
OR sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_CASINO_HEIST_BAR
#IF FEATURE_HEIST_ISLAND
OR sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_ISLAND_HEIST
#ENDIF
eCelebType = CELEBRATION_HEIST
ENDIF
REQUEST_CELEBRATION_SCREEN(sCelebrationData, eCelebType)
IF HAS_CELEBRATION_SCREEN_LOADED(sCelebrationData)
AND REQUEST_SCRIPT_AUDIO_BANK("HUD_321_GO")
PRINTLN("[SAC] - celebration movies loaded.")
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MP_LEADERBOARD_SCENE")
STOP_AUDIO_SCENE("MP_LEADERBOARD_SCENE")
ENDIF
strScreenName = GET_CELEBRATION_SCREEN_NAME()
// Create celebration screen and add data to it.
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingPilotSchoolCelebration
SET_CELEBRATION_AUDIO_STAGE(eCAS_CELEB_SCREEN_SCENE)
CREATE_CELEBRATION_SCREEN(sCelebrationData, strScreenName, "HUD_COLOUR_BLACK")
ADD_PILOT_SCHOOL_DATA_TO_CELEBRATION_SCREEN(sCelebrationData)
ADD_BACKGROUND_TO_CELEBRATION_SCREEN(sCelebrationData, strScreenName, -1, iMoneyTexture)
SHOW_CELEBRATION_SCREEN(sCelebrationData, strScreenName)
SET_CHAT_ENABLED_FOR_CELEBRATION_SCREEN(TRUE)
RESET_NET_TIMER(sCelebrationData.sCelebrationTimer)
START_NET_TIMER(sCelebrationData.sCelebrationTimer, g_TransitionSessionNonResetVars.sGlobalCelebrationData.bInTestMode)
IF NOT IS_SCREEN_FADED_IN()
IF NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
PRINTLN("[SAC] - screen not faded or fading in. Called DO_SCREEN_FADE_IN(500).")
ENDIF
ENDIF
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_DRAW_MOVIE)
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
IF HAS_NET_TIMER_EXPIRED(timerFrozenForCelebrationScreen, 1000)
INT iCreateStatWallAudioType
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bPassedMission
iCreateStatWallAudioType = 2
PRINTLN("[SAC] - failed mission - set iCreateStatWallAudioType = ", iCreateStatWallAudioType)
ELSE
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType = ciCELEBRATION_HEIST_TYPE__PREP
iCreateStatWallAudioType = 1
PRINTLN("[SAC] - failed mission - set iCreateStatWallAudioType = ", iCreateStatWallAudioType)
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iHeistType = ciCELEBRATION_HEIST_TYPE__FINALE
iCreateStatWallAudioType = 3
PRINTLN("[SAC] - failed mission - set iCreateStatWallAudioType = ", iCreateStatWallAudioType)
ENDIF
ENDIF
strColourBackground = "HUD_COLOUR_HSHARD"
CREATE_CELEBRATION_SCREEN(sCelebrationData, strScreenName, strColourBackground, FALSE, iCreateStatWallAudioType)
ADD_END_HEIST_DATA_TO_CELEBRATION_SCREEN(sCelebrationData)
sCelebrationData.iEstimatedScreenDuration += 5000
iMoneyTexture = 2
#IF IS_DEBUG_BUILD
INT iTempValue
iTempValue = GET_GLOBAL_ACTIONSCRIPT_FLAG(ACTIONSCRIPT_GLOBAL_ID)
PRINTLN("[SAC] - GET_GLOBAL_ACTIONSCRIPT_FLAG(ACTIONSCRIPT_GLOBAL_ID) = ", iTempValue)
#ENDIF
ADD_BACKGROUND_TO_CELEBRATION_SCREEN(sCelebrationData, strScreenName, -1, iMoneyTexture)
SHOW_CELEBRATION_SCREEN(sCelebrationData, strScreenName)
SET_CHAT_ENABLED_FOR_CELEBRATION_SCREEN(TRUE)
RESET_NET_TIMER(sCelebrationData.sCelebrationTimer)
START_NET_TIMER(sCelebrationData.sCelebrationTimer, g_TransitionSessionNonResetVars.sGlobalCelebrationData.bInTestMode)
IF NOT IS_SCREEN_FADED_IN()
IF NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
PRINTLN("[SAC] - screen not faded or fading in. Called DO_SCREEN_FADE_IN(500).")
ENDIF
ENDIF
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_DRAW_MOVIE)
ENDIF
ELSE
PRINTLN("Celebrations - no celebration type has been set, don't know which data to add to movie.")
SCRIPT_ASSERT("Celebrations - no celebration type has been set, don't know which data to add to movie.")
ENDIF
ENDIF
BREAK
CASE eCELEBRATIONSTATE_DRAW_MOVIE
HIDE_UI_FOR_CELEBRATION_SCREEN_THIS_FRAME()
REQUEST_SCRIPT_AUDIO_BANK("HUD_321_GO")
DRAW_CELEBRATION_SCREEN_THIS_FRAME(sCelebrationData, FALSE)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingPilotSchoolCelebration
IF HAS_NET_TIMER_EXPIRED(sCelebrationData.sCelebrationTimer, sCelebrationData.iEstimatedScreenDuration, g_TransitionSessionNonResetVars.sGlobalCelebrationData.bInTestMode)
PRINTLN("[SAC] - celebration finished.")
PRINTLN("[SAC] - bDoingPilotSchoolCelebration = TRUE.")
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SWITCHED_OF_LOADING_SPINNER)
PRINTLN("[SAC] - BUSY SPINNER OFF - call 0.")
BUSYSPINNER_OFF()
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SWITCHED_OF_LOADING_SPINNER)
ENDIF
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
ELIF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_TRANSITIONED_INTO_BW)
IF HAS_CELEBRATION_SHARD_BEGAN_TO_FALL_IN()
ANIMPOSTFX_STOP("SuccessNeutral")
PLAY_HEIST_PASS_FX("HeistCelebPassBW")
SET_CELEBRATION_AUDIO_STAGE(eCAS_CELEB_SCREEN_SCENE)
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_TRANSITIONED_INTO_BW)
PRINTLN("[SAC] - set bit CELEB_GENERAL_BITSET_TRANSITIONED_INTO_BW.")
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
SET_LOCAL_PLAYER_FOR_MOCAP()
ENDIF
ENDIF
ENDIF
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_TRANSITIONED_OUT_OF_BW)
IF HAS_CELEBRATION_SHARD_BEGAN_TO_FALL_AWAY()
ANIMPOSTFX_STOP("SuccessNeutral")
PLAY_HEIST_PASS_FX("HeistCelebEnd")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_TRANSITIONED_OUT_OF_BW)
PRINTLN("[SAC] - set bit CELEB_GENERAL_BITSET_TRANSITIONED_OUT_OF_BW.")
ENDIF
ENDIF
IF HAS_CELEBRATION_SHARD_BEGAN_TO_FALL_IN()
SET_CELEBRATION_AUDIO_STAGE(eCAS_CELEB_SCREEN_SCENE)
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_STATS_SCREEN_MUSIC_EVENT)
SCRIPT_TRIGGER_MUSIC_EVENT_STOP()
PRINTLN("[SAC] - triggered music event MP_MC_STOP.")
TRIGGER_MUSIC_EVENT("HEIST_STATS_SCREEN_START")
PRINTLN("[SAC] - triggered music event HEIST_STATS_SCREEN_START.")
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
AND NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
// Prepare prep stop music event.
ENABLE_PREPARE_CELEBRATION_STATS_SCREEN_STOP_MUSIC_EVENT()
ENDIF
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_STATS_SCREEN_MUSIC_EVENT)
PRINTLN("[SAC] - set bit CELEB_GENERAL_STARTED_STATS_SCREEN_MUSIC_EVENT.")
ENDIF
ENDIF
IF HAS_CELEBRATION_SHARD_BEGAN_TO_FALL_AWAY()
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STOPPED_STATS_SCREEN_MUSIC_EVENT)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
TRIGGER_MUSIC_EVENT("HEIST_STATS_SCREEN_STOP")
PRINTLN("[SAC] - triggered music event HEIST_STATS_SCREEN_STOP.")
ENDIF
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_STOPPED_STATS_SCREEN_MUSIC_EVENT)
PRINTLN("[SAC] - set bit CELEB_GENERAL_STOPPED_STATS_SCREEN_MUSIC_EVENT.")
ENDIF
ENDIF
IF HAS_CELEBRATION_SHARD_FINISHED_FALL_AWAY()
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bGangOpsTransition
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
PRINTLN("[SAC] - GANG_OPS")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
ENDIF
ELIF NOT HAS_NET_TIMER_STARTED(timerShardFallenAway)
START_NET_TIMER(timerShardFallenAway)
PRINTLN("[SAC] - started net timer timerShardFallenAway.")
ELSE
IF HAS_NET_TIMER_EXPIRED(timerShardFallenAway, 2000)
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
PRINTLN("[SAC] - net timer timerShardFallenAway >= 2000")
PRINTLN("[SAC] - set bit CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC.")
ENDIF
ENDIF
ENDIF
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bHeistCelebrationShardHasFallenAway
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bHeistCelebrationShardHasFallenAway = TRUE
PRINTLN("[SAC] - set bHeistCelebrationShardHasFallenAway = TRUE.")
ENDIF
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bHaveAllHeistPlayersCelebrationShardsFallenAway
OR bWaitingOnPlayersTimeout // Assert fires if this gets set, something has gone wrong so we force our way through so nobody gets stuck.
// Sort fading out as soon as possible.
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
IF ( g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene AND NOT IS_FAKE_MULTIPLAYER_MODE_SET() )
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration
//PRINTLN("[SAC] - BUSY SPINNER OFF - call 2.")
BUSYSPINNER_OFF()
IF NOT IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_WHITE_RECTANGLE_FADE)
IF NOT IS_RECTANGLE_FADING_IN()
IF sHeistWinnerSceneData.eSceneType = eHEISTWINNERSCENETYPE_TREVOR
SET_RECTANGLE_COLOUR(FALSE)
ELSE
SET_RECTANGLE_COLOUR(TRUE)
ENDIF
ACTIVATE_RECTANGLE_FADE_OUT(FALSE)
ACTIVATE_RECTANGLE_FADE_IN(TRUE)
SET_CELEBRATION_AUDIO_STAGE(eCAS_FADE_WHITE_SCENE)
ENDIF
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_WHITE_RECTANGLE_FADE)
ENDIF
ELSE
PRINTLN("[SAC] - BUSY SPINNER OFF - call 20.")
BUSYSPINNER_OFF()
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(500)
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - BUSY SPINNER OFF - call 3.")
BUSYSPINNER_OFF()
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(500)
ENDIF
ENDIF
ENDIF
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bOkToKillCelebrationScript
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.bInTestMode
PRINTLN("[SAC] - celebration finished.")
PRINTLN("[SAC] - bDoingHeistCelebration = TRUE")
PRINTLN("[SAC] - bOkToKillCelebrationScript = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.bOkToKillCelebrationScript)
PRINTLN("[SAC] - bInTestMode = ", g_TransitionSessionNonResetVars.sGlobalCelebrationData.bInTestMode)
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SWITCHED_OF_LOADING_SPINNER)
PRINTLN("[SAC] - BUSY SPINNER OFF - call 1.")
BUSYSPINNER_OFF()
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_SWITCHED_OF_LOADING_SPINNER)
ENDIF
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC)
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
OR g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration
IF ( g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene AND NOT IS_FAKE_MULTIPLAYER_MODE_SET() )
IF IS_RECTANGLE_FADED_IN()
OR IS_SCREEN_FADED_OUT()
SET_CELEBRATION_AUDIO_STAGE(sHeistWinnerSceneData.eWinnerAudioScene)
START_NET_TIMER(timerFadeFlashDelay)
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_DO_WINNER_SCENE)
ELSE
PRINTLN("[SAC] - waiting on IS_RECTANGLE_FADED_IN.")
ENDIF
ELSE
PRINTLN("[SAC] - bDoingHeistEndWinnerScene = FALSE.")
IF NOT GET_HEIST_TUTORIAL_MID_CUTSCENE_PRELOAD()
PRINTLN("[SAC] - GET_HEIST_TUTORIAL_MID_CUTSCENE_PRELOAD = FALSE.")
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingAfterApartmentPanHeistCelebration
IF IS_SCREEN_FADED_OUT()
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_FADE_BLACK_SCENE)
SET_CELEBRATION_AUDIO_STAGE(eCAS_FADE_BLACK_SCENE)
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_STARTED_FADE_BLACK_SCENE)
ENDIF
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
SWITCH iJoinedMissionAsSpectatorWarpStage
CASE 0
SETUP_JOINED_MISSION_AS_SPECTATOR_WARP()
iJoinedMissionAsSpectatorWarpStage++
BREAK
CASE 1
IF WARP_TO_SPAWN_LOCATION(SPAWN_LOCATION_AT_SPECIFIC_COORDS_IF_POSSIBLE, FALSE, FALSE, FALSE, FALSE)
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
ENDIF
IF IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
BREAK
ENDSWITCH
ELSE
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
IF NOT STAND_ALONE_CELEBRATION_IS_PLAYER_IN_AN_APARTMENT()
PRINTLN("[SAC] - [NETCELEBRATION] - player is not already inside an apartment.")
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA)
SET_APARTMENT_EXTERIOR_SPAWN_DATA(sHeistWinnerSceneData)
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA)
PRINTLN("[SAC] - [NETCELEBRATION] - set HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA.")
ELSE
IF WARP_TO_OUTSIDE_APARTMENT(sHeistWinnerSceneData)
PRINTLN("[SAC] - [NETCELEBRATION] - WARP_TO_OUTSIDE_APARTMENT() complete.")
bActivateInteractionMenuOnCleanup = TRUE
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_FADE_IN)
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - waiting for WARP_TO_OUTSIDE_APARTMENT().")
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - player is already inside an apartment.")
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
ELSE
IF IS_PLAYER_SCTV(PLAYER_ID())
IF (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_STRIP_CLUB)
AND (g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId != SIS_POST_APARTMENT)
PRINTLN("[SAC] - not doing apartment setup post mission scene, using Neil's system, calling DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB.")
DO_SCTV_EXTERNAL_FADE_IN_AFTER_POST_CELEB(TRUE)
ENDIF
ENDIF
TRIGGER_POST_HEIST_POSITION_SYSTEMS()
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_RECTANGLE_FADED_OUT()
IF NOT IS_RECTANGLE_FADING_OUT()
ACTIVATE_RECTANGLE_FADE_IN(FALSE)
ACTIVATE_RECTANGLE_FADE_OUT(TRUE)
CLEAR_ALL_CELEBRATION_POST_FX() // url:bugstar:2221031 - clears up HeistCelebEnd animpostfx. ST.
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call C.")
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
TRIGGER_MUSIC_EVENT("HEIST_STATS_SCREEN_STOP")
PRINTLN("[SAC] - triggered music event HEIST_STATS_SCREEN_STOP for flow cutscene.")
// START_CELEBRATION_STATS_SCREEN_STOP_MUSIC_EVENT()
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
ENDIF
ELSE
CLEAR_ALL_CELEBRATION_POST_FX() // url:bugstar:2221031 - clears up HeistCelebEnd animpostfx. ST.
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
ENDIF
ELSE
IF IS_RECTANGLE_FADED_IN()
IF NOT HAS_NET_TIMER_STARTED(timerFadeFlashDelay)
START_NET_TIMER(timerFadeFlashDelay)
PRINTLN("[SAC] - [NETCELEBRATION] - started timer timerFadeFlashDelay.")
ELSE
IF HAS_NET_TIMER_EXPIRED(timerFadeFlashDelay, WHITE_SCREEN_HOLD_TIME)
PRINTLN("[SAC] - [NETCELEBRATION] - timer timerFadeFlashDelay has expired = ", WHITE_SCREEN_HOLD_TIME)
IF g_bCelebrationScreenIsActive
PRINTLN("[SAC] - [NETCELEBRATION] - calling SET_CELEBRATION_SCREEN_AS_ACTIVE(FALSE) so SET_HEIST_TUTORIAL_MID_CUTSCENE_PRELOAD can be set to FALSE.")
SET_CELEBRATION_SCREEN_AS_ACTIVE(FALSE, bActivateInteractionMenuOnCleanup)
ENDIF
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - waiting for IS_RECTANGLE_FADED_IN to return TRUE.")
ENDIF
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - waiting for pre-load warp to complete.")
ENDIF
ELSE
PRINTLN("[SAC] - waiting on CELEB_GENERAL_BITSET_PLAYED_CELEB_END_FOR_1_SEC.")
ENDIF
ENDIF
ELSE
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bHeistCelebrationShardHasFallenAway
IF NOT HAS_NET_TIMER_STARTED(timerWaitingOnPlayers)
START_NET_TIMER(timerWaitingOnPlayers)
PRINTLN("[SAC] - started timer timerWaitingOnPlayers.")
ELSE
IF HAS_NET_TIMER_EXPIRED(timerWaitingOnPlayers, 4000)
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_STARTED_WAITING_SPINNER)
IF NOT BUSYSPINNER_IS_ON()
BEGIN_TEXT_COMMAND_BUSYSPINNER_ON("CELEB_WPLYRS")
END_TEXT_COMMAND_BUSYSPINNER_ON(ENUM_TO_INT(LOADING_ICON_LOADING))
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_STARTED_WAITING_SPINNER)
PRINTLN("[SAC] - timer timerWaitingOnPlayers has expired (4000).")
PRINTLN("[SAC] - CELEB_WPLYRS BUSY SPINNER ON")
ENDIF
ENDIF
ENDIF
IF HAS_NET_TIMER_EXPIRED(timerWaitingOnPlayers, 60000)
bWaitingOnPlayersTimeout = TRUE
PRINTLN("[SAC] - other players have taken >= 60000 to finish their celebrations. Setting force through flag bWaitingOnPlayersTimeout.")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE eCELEBRATIONSTATE_DO_WINNER_SCENE
IF MAINTAIN_HEIST_END_WINNER_SCENE(sHeistWinnerSceneData)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bOkToKillCelebrationScript = FALSE
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
BREAK
CASE eCELEBRATIONSTATE_FADE_IN
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
TOGGLE_PLAYER_DAMAGE_OVERLAY(TRUE)
ANIMPOSTFX_STOP_ALL()
TOGGLE_RENDERPHASES(TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call D.")
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
IF IS_SCREEN_FADED_IN()
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
START_CELEBRATION_STATS_SCREEN_STOP_MUSIC_EVENT()
ENDIF
ENDIF
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
BREAK
CASE eCELEBRATIONSTATE_APARTMENT_FAILSAFE
SWITCH iApartmentFailsafeStage
CASE 0
IF NOT IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA)
SET_APARTMENT_EXTERIOR_SPAWN_DATA(sHeistWinnerSceneData)
SET_BIT(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA)
PRINTLN("[SAC] - [NETCELEBRATION] - set HEIST_WINNER_SCENE_INITIALISED_APARTMENT_DATA.")
ELSE
IF WARP_TO_OUTSIDE_APARTMENT(sHeistWinnerSceneData)
PRINTLN("[SAC] - [NETCELEBRATION] - eCELEBRATIONSTATE_APARTMENT_FAILSAFE - WARP_TO_OUTSIDE_APARTMENT() complete.")
bActivateInteractionMenuOnCleanup = TRUE
iApartmentFailsafeStage++
PRINTLN("[SAC] - [NETCELEBRATION] - eCELEBRATIONSTATE_APARTMENT_FAILSAFE - iApartmentFailsafeStage = ", iApartmentFailsafeStage)
ELSE
PRINTLN("[SAC] - [NETCELEBRATION] - eCELEBRATIONSTATE_APARTMENT_FAILSAFE - waiting for WARP_TO_OUTSIDE_APARTMENT().")
ENDIF
ENDIF
BREAK
CASE 1
TOGGLE_PLAYER_DAMAGE_OVERLAY(TRUE)
ANIMPOSTFX_STOP_ALL()
TOGGLE_RENDERPHASES(TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
PRINTLN("[SAC] - called SET_GAME_PAUSES_FOR_STREAMING(TRUE). Call Z.")
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
iApartmentFailsafeStage++
PRINTLN("[SAC] - [NETCELEBRATION] - eCELEBRATIONSTATE_APARTMENT_FAILSAFE - iApartmentFailsafeStage = ", iApartmentFailsafeStage)
BREAK
CASE 2
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(500)
ENDIF
IF IS_SCREEN_FADED_IN()
STOP_CELEBRATION_SCREEN_ANIM(sCelebrationData, GET_CELEBRATION_SCREEN_NAME())
CLEANUP_CELEBRATION_SCREEN(sCelebrationData, FALSE, GET_CELEBRATION_SCREEN_NAME())
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistCelebration
IF NOT g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
START_CELEBRATION_STATS_SCREEN_STOP_MUSIC_EVENT()
ENDIF
ENDIF
SET_CELEBRATION_AUDIO_STAGE(eCAS_OFF)
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_CLEANUP)
ENDIF
BREAK
ENDSWITCH
BREAK
CASE eCELEBRATIONSTATE_CLEANUP
BOOL bgoToGameStateEnd
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPostMissionSceneId = SIS_POST_APARTMENT
IF IS_PLAYER_SCTV(PLAYER_ID())
OR IS_BIT_SET(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].boolReplacementBS,GlobalPlayerBroadcastDataFM_BS_bJoinedMissionAsSpectator)//GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].bJoinedMissionAsSpectator
PRINTLN("[SAC] - IS_PLAYER_SCTV(PLAYER_ID()) = TRUE.")
bgoToGameStateEnd = TRUE
ELSE
IF STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR = TRUE.")
IF STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT()
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT = TRUE, bgoToGameStateEnd = TRUE")
bgoToGameStateEnd = TRUE
ELSE
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_RUNNING_APARTMENT_INTERIOR_SCRIPT = FALSE.")
ENDIF
ELSE
PRINTLN("[SAC] - STAND_ALONE_CELEBRATION_IS_PLAYER_IN_APARTMENT_INTERIOR = FALSE.")
ENDIF
IF IS_SCREEN_FADED_OUT()
IF NOT HAS_NET_TIMER_STARTED(waitForApartmentFadeIntimer)
START_NET_TIMER(waitForApartmentFadeIntimer)
ELSE
IF HAS_NET_TIMER_EXPIRED(waitForApartmentFadeIntimer, 50000)
SET_CELEBRATION_STATE(eCELEBRATIONSTATE_APARTMENT_FAILSAFE)
ENDIF
ENDIF
ELIF IS_SCREEN_FADED_IN()
PRINTLN("[SAC] - screen is faded in, bgoToGameStateEnd = TRUE")
bgoToGameStateEnd = TRUE
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - iPostMissionSceneId != SIS_POST_APARTMENT, bgoToGameStateEnd = TRUE")
bgoToGameStateEnd = TRUE
ENDIF
IF bgoToGameStateEnd
SET_GAME_STATE(eGAME_STATE_END)
ENDIF
BREAK
ENDSWITCH
ENDPROC
// ************ //
// WIDGETS //
// ************ //
#IF IS_DEBUG_BUILD
PROC CREATE_WIDGETS()
#IF IS_DEBUG_BUILD
INT i
TEXT_LABEL_63 tl63_temp
#ENDIF
START_WIDGET_GROUP("Stand Alone Celebrations")
ADD_WIDGET_BOOL("bHostEndMissionNow", bHostEndMissionNow)
#IF IS_DEBUG_BUILD
twID_GameState = ADD_TEXT_WIDGET("Game State")
#ENDIF
ADD_WIDGET_INT_READ_ONLY("Screen Estimated Duration", sCelebrationData.iEstimatedScreenDuration)
#IF IS_DEBUG_BUILD
ADD_HEIST_WINNER_SCENE_WIDGETS()
#ENDIF
START_WIDGET_GROUP("Global Values")
ADD_WIDGET_BOOL("bPassedMission", g_TransitionSessionNonResetVars.sGlobalCelebrationData.bPassedMission)
#IF IS_DEBUG_BUILD
ADD_WIDGET_BOOL("I am leader", g_TransitionSessionNonResetVars.sGlobalCelebrationData.bIAmHeistLeader)
ADD_WIDGET_INT_READ_ONLY("Num Peds Killed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iNumPedKills)
// ADD_WIDGET_INT_READ_ONLY("Num Choppers Destroyed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iChoppersDestroyed)
// ADD_WIDGET_INT_READ_ONLY("Max Choppers Can Be Destroyed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMaximumChoppersDestroyed)
// ADD_WIDGET_INT_READ_ONLY("Num Vehicles Destroyed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iVehiclesDestoryed)
// ADD_WIDGET_INT_READ_ONLY("Max Vehicles Can Be Destoryed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMaximumVehDestroyed)
// ADD_WIDGET_INT_READ_ONLY("Ending Accuracty", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iEndingAccuracy)
// ADD_WIDGET_INT_READ_ONLY("Num Prisoners Killed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iPrisonersKilled)
// ADD_WIDGET_INT_READ_ONLY("VIP Damage", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iVipDamage)
// ADD_WIDGET_INT_READ_ONLY("Lose Wanted Time", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iLoseWantedTime)
// ADD_WIDGET_INT_READ_ONLY("Bike highest Speed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iBikehighSpeed)
ADD_WIDGET_INT_READ_ONLY("Max Take", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMaximumTake)
ADD_WIDGET_INT_READ_ONLY("My Take", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMyTake)
// ADD_WIDGET_INT_READ_ONLY("Maximum Choppers Destroyed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMaximumChoppersDestroyed)
// ADD_WIDGET_INT_READ_ONLY("Maximum Vehicles Destroyed", g_TransitionSessionNonResetVars.sGlobalCelebrationData.iMaximumVehDestroyed)
ADD_WIDGET_BOOL("OK to Kill Celebration Script", g_TransitionSessionNonResetVars.sGlobalCelebrationData.bOkToKillCelebrationScript)
twID_FailReason = ADD_TEXT_WIDGET("Fail Reason")
twID_LiteralFailReason = ADD_TEXT_WIDGET("Literal Fail Reason")
START_WIDGET_GROUP("Player Details")
REPEAT 4 i
tl63_temp = "LB Player "
tl63_temp += i
tl63_temp += " ID"
ADD_WIDGET_INT_READ_ONLY(tl63_temp, iWidgetPlayerIds[i])
tl63_temp = "LB Player "
tl63_temp += i
tl63_temp += " name"
twID_lbPlayerName[i] = ADD_TEXT_WIDGET(tl63_temp)
tl63_temp = "LB Player "
tl63_temp += i
tl63_temp += " rating"
twID_lbPlayerRating[i] = ADD_TEXT_WIDGET(tl63_temp)
ENDREPEAT
STOP_WIDGET_GROUP()
#ENDIF
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
PROC UPDATE_WIDGETS()
#IF IS_DEBUG_BUILD
INT i
SET_CONTENTS_OF_TEXT_WIDGET(twID_GameState, GET_GAME_STATE_NAME(GET_GAME_STATE(0)))
SET_CONTENTS_OF_TEXT_WIDGET(twID_FailReason, g_TransitionSessionNonResetVars.sGlobalCelebrationData.strFailReason)
SET_CONTENTS_OF_TEXT_WIDGET(twID_LiteralFailReason, g_TransitionSessionNonResetVars.sGlobalCelebrationData.strFailReasonLiteral)
REPEAT 3 i
SET_CONTENTS_OF_TEXT_WIDGET(twID_lbPlayerName[i], g_TransitionSessionNonResetVars.sGlobalCelebrationData.strLeaderBoardPlayerName[i])
SET_CONTENTS_OF_TEXT_WIDGET(twID_lbPlayerRating[i], g_TransitionSessionNonResetVars.sGlobalCelebrationData.strRatingColour[i])
ENDREPEAT
#ENDIF
ENDPROC
#ENDIF
// ************************ //
// MAIN SCRIPT PROCESSING //
// ************************ //
SCRIPT (CELEBRATION_SCRIPT_DATA launchData)
// Carry out all the initial game starting duties.
PROCESS_PRE_GAME()
// Setup widgets. Make sure this is done after PROCESS_PRE_GAME()
#IF IS_DEBUG_BUILD
CREATE_WIDGETS()
#ENDIF
sHeistWinnerSceneData.playerLeader = launchData.leaderHandle
// Main loop.
WHILE TRUE
MP_LOOP_WAIT_ZERO()
// If we have a match end event, bail.
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
// PRINTLN("[SAC] - SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE(). NOt doing anything though as we want this script to continue during transitions.")
// SCRIPT_CLEANUP()
ENDIF
// Deal with the debug.
#IF IS_DEBUG_BUILD
UPDATE_WIDGETS()
#ENDIF
// If we need to leave the mission, make sure we just straight to the end stage and terminate the script.
IF SHOULD_PLAYER_LEAVE_MP_MISSION()
PRINTLN("[SAC] - SHOULD_PLAYER_LEAVE_MP_MISSION() = TRUE.")
SET_GAME_STATE(eGAME_STATE_END)
ENDIF
IF GET_SHOULD_END_SCRIPT()
PRINTLN("[SAC] - GET_SHOULD_END_SCRIPT = TRUE, going to game state end call 0.")
SET_GAME_STATE(eGAME_STATE_END)
ENDIF
IF NOT g_sTransitionSessionData.bMaintainCelebrationsScript
PRINTLN("[SAC] - bMaintainCelebrationsScript = FALSE, going to game state end call 7.")
SET_GAME_STATE(eGAME_STATE_END)
ENDIF
IF HAS_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION()
AND SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS()
PRINTLN("[SAC] - HAS_TRANSITION_SESSION_JIPED_FROM_OTHER_SESSION = TRUE and SHOULD_TRANSITION_SESSION_KILL_ALL_MP_SCRIPTS = TRUE, going to game state end call 8.")
SET_GAME_STATE(eGAME_STATE_END)
ENDIF
// Load the heist mocap as soon as possible.
IF NOT IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE)
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bDoingHeistEndWinnerScene
IF IS_BIT_SET(sHeistWinnerSceneData.iBitset, HEIST_WINNER_SCENE_INITIALISED_DATA)
IF LOAD_WINNER_SCENE_MOCAP(sHeistWinnerSceneData)
PRINTLN("[SAC] - LOAD_WINNER_SCENE_MOCAP = TRUE, setting CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE)
ENDIF
ENDIF
ELSE
PRINTLN("[SAC] - bDoingHeistEndWinnerScene = FALSE, setting CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE.")
SET_BIT(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_MOCAP_PRE_LOAD_COMPLETE)
ENDIF
ENDIF
// So the strip club will load it's assets if required, once the warp to location has completed.
IF g_TransitionSessionNonResetVars.sGlobalCelebrationData.bBlockStripClubAssets
IF IS_BIT_SET(iCelebrationGeneralBitset, CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP)
g_TransitionSessionNonResetVars.sGlobalCelebrationData.bBlockStripClubAssets = FALSE
PRINTLN("[SAC] - CELEB_GENERAL_BITSET_COMPLETED_PLAYER_PRE_LOAD_WARP bit is set, set bBlockStripClubAssets = FALSE.")
ENDIF
ENDIF
// Cut cam to face player if required (base don global set in misison controller.
MAINTAIN_POINT_AT_PLAYER_CAMERA_CUT()
// Maintain cloining players as early as possible.
MAINTAIN_CLONE_EVERYONE_FOR_HEIST_CELEBRATION_SCREENS(sHeistWinnerSceneData)
// Warp to the end of celebration location as soon as possible.
MAINTAIN_WARP_TO_POST_CELEB_STATS_SHARD_LOCATION()
// Draw black rectangle on faded mocaps so screen behind celebration stays black.
MAINTAIN_DRAW_BLACK_RECTANGLE_FOR_FADED_MOCAP()
// Maintain fake rectangle.
MAINTAIN_RECTANGLE()
// Get the apartment interior as early as posisble.
MAINTAIN_GET_APARTMENT_INTERIOR_INSTANCE_INDEX_EARLY()
// Freeze microphone for audio inapartment and strip club finle complete scenes.
MAINTAIN_FREEZE_MICROPHONE()
// -----------------------------------
// Process your game logic.....
SWITCH GET_GAME_STATE(0)
// Wait untill the server gives the all go before moving on.
CASE eGAME_STATE_INI
SET_GAME_STATE(eGAME_STATE_RUNNING)
BREAK
// Main gameplay state.
CASE eGAME_STATE_RUNNING
PROCESS_STAND_ALONE_CELEBRATION_LOGIC()
BREAK
//Cleans up then terminates the mission
CASE eGAME_STATE_END
SCRIPT_CLEANUP()
BREAK
ENDSWITCH
ENDWHILE
ENDSCRIPT