////////////////////////////////////////////////////////////////////////////////////////// // // // SCRIPT NAME : player_ped_scenes.sch // // AUTHOR : Kenneth Ross & Alwyn Roberts // // DESCRIPTION : Contains the players timetable and procs to set up the // // scenes for each slot in the timetable. // // // ////////////////////////////////////////////////////////////////////////////////////////// USING "rage_builtins.sch" USING "globals.sch" USING "commands_clock.sch" USING "player_ped_public.sch" USING "blip_control_public.sch" USING "selector_public.sch" USING "cellphone_public.sch" USING "flow_public_core_override.sch" #IF IS_DEBUG_BUILD USING "player_ped_debug.sch" #ENDIF #if USE_CLF_DLC USING "player_scene_scheduleCLF.sch" #endif #if USE_NRM_DLC USING "player_scene_scheduleNRM.sch" #endif #if not USE_CLF_DLC #if not USE_NRM_DLC USING "player_scene_schedule.sch" #endif #endif USING "player_scene_coords.sch" USING "player_scene_vehicle.sch" USING "player_scene_camera.sch" USING "player_scene_objects.sch" #if USE_CLF_DLC USING "player_scene_compCLF.sch" #endif #if USE_NRM_DLC USING "player_scene_compNRM.sch" #endif #if not USE_CLF_DLC #if not USE_NRM_DLC USING "player_scene_component.sch" #endif #endif USING "familySpeech_private.sch" USING "TimeLapse.sch" USING "commands_streaming.sch" USING "code_control_public.sch" USING "building_control_public.sch" // ******************************************************************************************* // SCENE TIMETABLE // ******************************************************************************************* FUNC BOOL get_NOT_PlayerHasStartedNewScene() IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() OR GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT RETURN FALSE ENDIF IF (GET_PLAYER_SWITCH_STATE() > SWITCH_STATE_JUMPCUT_DESCENT) IF (GET_PLAYER_SWITCH_STATE() <> SWITCH_STATE_ESTABLISHING_SHOT) RETURN FALSE ENDIF IF (GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT) IF (GET_PLAYER_SWITCH_INTERP_OUT_DURATION() > 0) IF (GET_PLAYER_SWITCH_INTERP_OUT_CURRENT_TIME() > 0100) RETURN FALSE ENDIF ENDIF ENDIF ENDIF RETURN TRUE ENDFUNC TYPEDEF FUNC BOOL SceneGlobalFunc(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags) TYPEDEF FUNC PED_SCENE_STRUCT SceneGlobalFuncIndex(PED_SCENE_STRUCT &sPedScene) FUNC BOOL GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(PED_REQUEST_SCENE_ENUM eScene, enumCharacterList &ePed) SWITCH eScene CASE PR_SCENE_DEAD #IF IS_DEBUG_BUILD TEXT_LABEL_63 sDead sDead = "Dead eScene for player char: " sDead += Get_String_From_Ped_Request_Scene_Enum(eScene) CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sDead) CASSERTLN(DEBUG_SWITCH, sDead) #ENDIF ePed = g_sPlayerPedRequest.ePed RETURN FALSE BREAK CASE PR_SCENE_HOSPITAL ePed = CHAR_MULTIPLAYER RETURN TRUE BREAK //url:bugstar:1015706 CASE PR_SCENE_FTa_FRANKLIN1a FALLTHRU // CASE PR_SCENE_FTa_FRANKLIN1b FALLTHRU CASE PR_SCENE_FTa_FRANKLIN1c FALLTHRU CASE PR_SCENE_FTa_FRANKLIN1d FALLTHRU CASE PR_SCENE_FTa_FRANKLIN1e ePed = CHAR_MULTIPLAYER RETURN TRUE BREAK CASE PR_SCENE_M_DEFAULT FALLTHRU CASE PR_SCENE_M_OVERRIDE FALLTHRU // CASE PR_SCENE_Ma_ARM3 FALLTHRU CASE PR_SCENE_Ma_FAMILY1 FALLTHRU CASE PR_SCENE_Ma_RURAL1 FALLTHRU CASE PR_SCENE_M4_WASHFACE FALLTHRU CASE PR_SCENE_Ma_EXILE2 FALLTHRU CASE PR_SCENE_Ma_EXILE3 FALLTHRU // CASE PR_SCENE_Ma_FRANKLIN2 FALLTHRU CASE PR_SCENE_Ma_DOCKS2A FALLTHRU CASE PR_SCENE_Ma_DOCKS2B FALLTHRU CASE PR_SCENE_Ma_FINALE1 FALLTHRU CASE PR_SCENE_Ma_FINALE2A FALLTHRU CASE PR_SCENE_Ma_FINALEC FALLTHRU CASE PR_SCENE_Ma_FINALE2B FALLTHRU // CASE PR_SCENE_Ma_SOLOMON4 FALLTHRU CASE PR_SCENE_Ma_FRANKLIN2 FALLTHRU CASE PR_SCENE_Ma_FBI1end FALLTHRU CASE PR_SCENE_Ma_TREVOR3 FALLTHRU CASE PR_SCENE_Ma_FBI3 FALLTHRU CASE PR_SCENE_Ma_FBI4intro FALLTHRU CASE PR_SCENE_Ma_FBI5 FALLTHRU // CASE PR_SCENE_Ma_MARTIN1 FALLTHRU CASE PR_SCENE_M_MD_FBI2 FALLTHRU CASE PR_SCENE_M2_BEDROOM FALLTHRU CASE PR_SCENE_M2_SAVEHOUSE0_b FALLTHRU CASE PR_SCENE_M2_SAVEHOUSE1_a FALLTHRU CASE PR_SCENE_M2_SAVEHOUSE1_b FALLTHRU CASE PR_SCENE_M2_SMOKINGGOLF FALLTHRU CASE PR_SCENE_M4_WAKEUPSCREAM FALLTHRU CASE PR_SCENE_M4_WAKESUPSCARED FALLTHRU // CASE PR_SCENE_M4_HOUSEBED_b FALLTHRU CASE PR_SCENE_M6_HOUSEBED FALLTHRU CASE PR_SCENE_M4_WATCHINGTV FALLTHRU // CASE PR_SCENE_M6_HOUSETV_b FALLTHRU CASE PR_SCENE_M2_KIDS_TV FALLTHRU CASE PR_SCENE_M_POOLSIDE_a FALLTHRU CASE PR_SCENE_M_POOLSIDE_b FALLTHRU CASE PR_SCENE_M_PIER_a FALLTHRU CASE PR_SCENE_M_PIER_b FALLTHRU CASE PR_SCENE_M2_WIFEEXITSCAR FALLTHRU CASE PR_SCENE_M2_DROPOFFDAU_a FALLTHRU CASE PR_SCENE_M2_DROPOFFDAU_b FALLTHRU CASE PR_SCENE_M2_DROPOFFSON_a FALLTHRU CASE PR_SCENE_M2_DROPOFFSON_b FALLTHRU CASE PR_SCENE_M2_DRIVING_a FALLTHRU CASE PR_SCENE_M2_DRIVING_b FALLTHRU CASE PR_SCENE_M2_LUNCH_a FALLTHRU // CASE PR_SCENE_M7_LUNCH_b FALLTHRU CASE PR_SCENE_M4_EXITRESTAURANT FALLTHRU CASE PR_SCENE_M4_LUNCH_b FALLTHRU CASE PR_SCENE_M4_CINEMA FALLTHRU CASE PR_SCENE_M_BENCHCALL_a FALLTHRU CASE PR_SCENE_M_BENCHCALL_b FALLTHRU CASE PR_SCENE_M2_CARSLEEP_a FALLTHRU CASE PR_SCENE_M2_CARSLEEP_b FALLTHRU CASE PR_SCENE_M_CANAL_a FALLTHRU CASE PR_SCENE_M_CANAL_b FALLTHRU CASE PR_SCENE_M_CANAL_c FALLTHRU // CASE PR_SCENE_M_BAR_a FALLTHRU // CASE PR_SCENE_M_BAR_b FALLTHRU CASE PR_SCENE_M_VWOODPARK_a FALLTHRU CASE PR_SCENE_M_VWOODPARK_b FALLTHRU CASE PR_SCENE_M_PARKEDHILLS_a FALLTHRU CASE PR_SCENE_M_PARKEDHILLS_b FALLTHRU CASE PR_SCENE_M6_PARKEDHILLS_a FALLTHRU CASE PR_SCENE_M6_PARKEDHILLS_b FALLTHRU CASE PR_SCENE_M6_PARKEDHILLS_c FALLTHRU CASE PR_SCENE_M6_PARKEDHILLS_d FALLTHRU CASE PR_SCENE_M6_PARKEDHILLS_e FALLTHRU CASE PR_SCENE_M6_DRIVING_a FALLTHRU CASE PR_SCENE_M6_DRIVING_b FALLTHRU CASE PR_SCENE_M6_DRIVING_c FALLTHRU CASE PR_SCENE_M6_DRIVING_d FALLTHRU CASE PR_SCENE_M6_DRIVING_e FALLTHRU CASE PR_SCENE_M6_DRIVING_f FALLTHRU CASE PR_SCENE_M6_DRIVING_g FALLTHRU CASE PR_SCENE_M6_DRIVING_h FALLTHRU CASE PR_SCENE_M6_RONBORING FALLTHRU CASE PR_SCENE_M2_CYCLING_a FALLTHRU CASE PR_SCENE_M2_CYCLING_b FALLTHRU CASE PR_SCENE_M2_CYCLING_c FALLTHRU CASE PR_SCENE_M2_MARINA FALLTHRU CASE PR_SCENE_M2_ARGUEWITHWIFE FALLTHRU CASE PR_SCENE_M4_PARKEDBEACH FALLTHRU CASE PR_SCENE_M_HOOKERMOTEL FALLTHRU // CASE PR_SCENE_M_HOOKERCAR FALLTHRU CASE PR_SCENE_M_COFFEE_a FALLTHRU CASE PR_SCENE_M_COFFEE_b FALLTHRU CASE PR_SCENE_M_COFFEE_c FALLTHRU CASE PR_SCENE_M2_PHARMACY FALLTHRU // CASE PR_SCENE_M4_DOORSTUMBLE FALLTHRU CASE PR_SCENE_M_TRAFFIC_a FALLTHRU CASE PR_SCENE_M_TRAFFIC_b FALLTHRU CASE PR_SCENE_M_TRAFFIC_c FALLTHRU CASE PR_SCENE_M6_MORNING_a FALLTHRU // CASE PR_SCENE_M6_MORNING_b FALLTHRU CASE PR_SCENE_M6_CARSLEEP FALLTHRU CASE PR_SCENE_M6_HOUSETV_a FALLTHRU CASE PR_SCENE_M6_SUNBATHING FALLTHRU CASE PR_SCENE_M6_DRINKINGBEER FALLTHRU CASE PR_SCENE_M6_ONPHONE FALLTHRU CASE PR_SCENE_M6_DEPRESSED FALLTHRU CASE PR_SCENE_M6_BOATING FALLTHRU CASE PR_SCENE_M6_LIQUORSTORE FALLTHRU CASE PR_SCENE_M7_RESTAURANT FALLTHRU CASE PR_SCENE_M7_LOUNGECHAIRS FALLTHRU CASE PR_SCENE_M7_BYESOLOMON_a FALLTHRU CASE PR_SCENE_M7_BYESOLOMON_b FALLTHRU CASE PR_SCENE_M7_WIFETENNIS FALLTHRU CASE PR_SCENE_M7_ROUNDTABLE FALLTHRU CASE PR_SCENE_M7_REJECTENTRY FALLTHRU CASE PR_SCENE_M7_HOOKERS FALLTHRU CASE PR_SCENE_M7_EXITBARBER FALLTHRU CASE PR_SCENE_M7_EXITFANCYSHOP FALLTHRU CASE PR_SCENE_M7_FAKEYOGA FALLTHRU CASE PR_SCENE_M7_COFFEE FALLTHRU CASE PR_SCENE_M7_GETSREADY FALLTHRU // CASE PR_SCENE_M7_PARKEDHILLS FALLTHRU CASE PR_SCENE_M7_READSCRIPT FALLTHRU CASE PR_SCENE_M7_EMPLOYEECONVO FALLTHRU CASE PR_SCENE_M7_TALKTOGUARD FALLTHRU CASE PR_SCENE_M7_LOT_JIMMY FALLTHRU CASE PR_SCENE_M7_KIDS_TV FALLTHRU CASE PR_SCENE_M7_KIDS_GAMING FALLTHRU CASE PR_SCENE_M7_OPENDOORFORAMA FALLTHRU CASE PR_SCENE_M7_DROPPINGOFFJMY FALLTHRU CASE PR_SCENE_M7_BIKINGJIMMY FALLTHRU CASE PR_SCENE_M_S_FAMILY4 FALLTHRU CASE PR_SCENE_M7_TRACEYEXITSCAR ePed = CHAR_MICHAEL RETURN TRUE BREAK ENDSWITCH SWITCH eScene CASE PR_SCENE_F_DEFAULT FALLTHRU CASE PR_SCENE_F_OVERRIDE FALLTHRU CASE PR_SCENE_Fa_PHONECALL_ARM3 FALLTHRU CASE PR_SCENE_Fa_PHONECALL_FAM1 FALLTHRU CASE PR_SCENE_Fa_PHONECALL_FAM3 FALLTHRU CASE PR_SCENE_Fa_STRIPCLUB_ARM3 FALLTHRU // CASE PR_SCENE_Fa_STRIPCLUB_FAM1 FALLTHRU // CASE PR_SCENE_Fa_STRIPCLUB_FAM3 FALLTHRU CASE PR_SCENE_Fa_EXILE2 FALLTHRU CASE PR_SCENE_Fa_EXILE3 FALLTHRU CASE PR_SCENE_Fa_FAMILY3 FALLTHRU CASE PR_SCENE_Fa_CARSTEAL1 FALLTHRU CASE PR_SCENE_Fa_FBI1 FALLTHRU CASE PR_SCENE_Fa_FBI4intro FALLTHRU CASE PR_SCENE_Fa_FBI4 FALLTHRU CASE PR_SCENE_Fa_FBI5 FALLTHRU CASE PR_SCENE_Fa_AGENCY1 FALLTHRU CASE PR_SCENE_Fa_AGENCYprep1 FALLTHRU CASE PR_SCENE_Fa_MARTIN1 FALLTHRU CASE PR_SCENE_Fa_AGENCY3B FALLTHRU CASE PR_SCENE_Fa_FINALE2intro FALLTHRU CASE PR_SCENE_Fa_RURAL2A FALLTHRU CASE PR_SCENE_Fa_MICHAEL3 FALLTHRU CASE PR_SCENE_Fa_DOCKS2A FALLTHRU CASE PR_SCENE_Fa_FINALE1 FALLTHRU CASE PR_SCENE_Fa_TREVOR3 FALLTHRU CASE PR_SCENE_Fa_AGENCY3A FALLTHRU CASE PR_SCENE_Fa_AGENCY2 FALLTHRU CASE PR_SCENE_Fa_FINALEA FALLTHRU CASE PR_SCENE_Fa_FINALEB FALLTHRU CASE PR_SCENE_Fa_FINALEC FALLTHRU CASE PR_SCENE_F_MD_FRANKLIN2 FALLTHRU CASE PR_SCENE_F0_SH_ASLEEP FALLTHRU CASE PR_SCENE_F1_SH_ASLEEP FALLTHRU CASE PR_SCENE_F1_NAPPING FALLTHRU CASE PR_SCENE_F1_GETTINGREADY FALLTHRU CASE PR_SCENE_F0_SH_READING FALLTHRU CASE PR_SCENE_F1_SH_READING FALLTHRU CASE PR_SCENE_F0_SH_PUSHUP_a FALLTHRU CASE PR_SCENE_F0_SH_PUSHUP_b FALLTHRU CASE PR_SCENE_F1_SH_PUSHUP FALLTHRU CASE PR_SCENE_F_KUSH_DOC_a FALLTHRU CASE PR_SCENE_F_MD_KUSH_DOC FALLTHRU CASE PR_SCENE_F_KUSH_DOC_b FALLTHRU CASE PR_SCENE_F_KUSH_DOC_c FALLTHRU CASE PR_SCENE_F0_GARBAGE FALLTHRU CASE PR_SCENE_F1_GARBAGE FALLTHRU CASE PR_SCENE_F_THROW_CUP FALLTHRU CASE PR_SCENE_F_HIT_CUP_HAND FALLTHRU CASE PR_SCENE_F_GYM FALLTHRU CASE PR_SCENE_F0_WALKCHOP FALLTHRU CASE PR_SCENE_F0_PLAYCHOP FALLTHRU // CASE PR_SCENE_F1_WALKCHOP FALLTHRU CASE PR_SCENE_F0_TANISHAFIGHT FALLTHRU CASE PR_SCENE_F1_NEWHOUSE FALLTHRU CASE PR_SCENE_F_WALKCHOP_a FALLTHRU CASE PR_SCENE_F_WALKCHOP_b FALLTHRU CASE PR_SCENE_F1_PLAYCHOP FALLTHRU CASE PR_SCENE_F_TRAFFIC_a FALLTHRU CASE PR_SCENE_F_TRAFFIC_b FALLTHRU CASE PR_SCENE_F_TRAFFIC_c FALLTHRU CASE PR_SCENE_F0_BIKE FALLTHRU CASE PR_SCENE_F0_CLEANCAR FALLTHRU CASE PR_SCENE_F1_BIKE FALLTHRU CASE PR_SCENE_F1_CLEANCAR FALLTHRU CASE PR_SCENE_F1_BYETAXI FALLTHRU CASE PR_SCENE_F_BIKE_c FALLTHRU CASE PR_SCENE_F_BIKE_d FALLTHRU CASE PR_SCENE_F_CLUB FALLTHRU CASE PR_SCENE_F_CS_CHECKSHOE FALLTHRU CASE PR_SCENE_F_CS_WIPEHANDS FALLTHRU CASE PR_SCENE_F_CS_WIPERIGHT FALLTHRU CASE PR_SCENE_F_BAR_a_01 FALLTHRU CASE PR_SCENE_F_BAR_b_01 FALLTHRU CASE PR_SCENE_F_BAR_c_02 FALLTHRU CASE PR_SCENE_F_BAR_d_02 FALLTHRU CASE PR_SCENE_F_BAR_e_01 FALLTHRU CASE PR_SCENE_F_LAMTAUNT_P1 FALLTHRU CASE PR_SCENE_F_LAMTAUNT_P3 FALLTHRU CASE PR_SCENE_F_LAMTAUNT_P5 FALLTHRU CASE PR_SCENE_F_LAMTAUNT_NIGHT FALLTHRU CASE PR_SCENE_F1_POOLSIDE_a FALLTHRU CASE PR_SCENE_F1_POOLSIDE_b FALLTHRU CASE PR_SCENE_F1_CLEANINGAPT FALLTHRU CASE PR_SCENE_F1_ONCELL FALLTHRU CASE PR_SCENE_F1_SNACKING FALLTHRU CASE PR_SCENE_F1_ONLAPTOP FALLTHRU CASE PR_SCENE_F1_IRONING FALLTHRU // CASE PR_SCENE_F0_WATCHINGTV FALLTHRU CASE PR_SCENE_F1_WATCHINGTV FALLTHRU CASE PR_SCENE_F_S_AGENCY_2A_a FALLTHRU CASE PR_SCENE_F_S_AGENCY_2A_b FALLTHRU // CASE PR_SCENE_F_S_FBI1end FALLTHRU CASE PR_SCENE_F_S_EXILE2 //FALLTHRU ePed = CHAR_FRANKLIN RETURN TRUE BREAK CASE PR_SCENE_T_DEFAULT FALLTHRU CASE PR_SCENE_T_OVERRIDE FALLTHRU CASE PR_SCENE_Ta_CARSTEAL1 FALLTHRU CASE PR_SCENE_Ta_CARSTEAL2 FALLTHRU CASE PR_SCENE_Ta_FAMILY4 FALLTHRU CASE PR_SCENE_Ta_FINALEC FALLTHRU CASE PR_SCENE_Ta_FBI2 FALLTHRU CASE PR_SCENE_Ta_RURAL2A FALLTHRU CASE PR_SCENE_Ta_RC_MRSP2 FALLTHRU CASE PR_SCENE_Ta_FINALE1 FALLTHRU CASE PR_SCENE_Ta_CARSTEAL4 FALLTHRU CASE PR_SCENE_Ta_FINALE2intro FALLTHRU CASE PR_SCENE_Ta_MICHAEL3 FALLTHRU // CASE PR_SCENE_Ta_MARTIN1 FALLTHRU CASE PR_SCENE_Ta_FRANKLIN2 FALLTHRU CASE PR_SCENE_Ta_FINALE2A FALLTHRU CASE PR_SCENE_Ta_FINALE2B FALLTHRU CASE PR_SCENE_T_SC_MOCKLAPDANCE FALLTHRU CASE PR_SCENE_T_SC_BAR FALLTHRU CASE PR_SCENE_T_SC_CHASE FALLTHRU CASE PR_SCENE_T_STRIPCLUB_out FALLTHRU CASE PR_SCENE_T_ESCORTED_OUT FALLTHRU CASE PR_SCENE_T_CN_CHATEAU_b FALLTHRU CASE PR_SCENE_T_CN_CHATEAU_c FALLTHRU CASE PR_SCENE_T_CR_CHATEAU_d FALLTHRU CASE PR_SCENE_T_GARBAGE_FOOD FALLTHRU CASE PR_SCENE_T_THROW_FOOD FALLTHRU #IF NOT IS_JAPANESE_BUILD CASE PR_SCENE_T_SHIT FALLTHRU CASE PR_SCENE_T_JERKOFF FALLTHRU #ENDIF CASE PR_SCENE_T_HEADINSINK FALLTHRU CASE PR_SCENE_T_SMOKEMETH FALLTHRU CASE PR_SCENE_T_FIGHTBBUILD FALLTHRU CASE PR_SCENE_T_ANNOYSUNBATHERS FALLTHRU CASE PR_SCENE_T_CR_BLOCK_CAMERA FALLTHRU CASE PR_SCENE_T_GUITARBEATDOWN FALLTHRU CASE PR_SCENE_T_DOCKS_a FALLTHRU CASE PR_SCENE_T_DOCKS_b FALLTHRU CASE PR_SCENE_T_DOCKS_c FALLTHRU CASE PR_SCENE_T_DOCKS_d FALLTHRU CASE PR_SCENE_T_CR_LINGERIE FALLTHRU CASE PR_SCENE_T_CR_FUNERAL FALLTHRU CASE PR_SCENE_T_CR_DUMPSTER FALLTHRU CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU CASE PR_SCENE_T_CR_WAKEROOFTOP FALLTHRU CASE PR_SCENE_T_CN_WAKEMOUNTAIN FALLTHRU CASE PR_SCENE_T_CR_ALLEYDRUNK FALLTHRU CASE PR_SCENE_T_SC_ALLEYDRUNK FALLTHRU CASE PR_SCENE_T_PUKEINTOFOUNT FALLTHRU CASE PR_SCENE_T_CN_PARK_b FALLTHRU // CASE PR_SCENE_T_CN_PARK_c FALLTHRU CASE PR_SCENE_T_CR_POLICE_a FALLTHRU CASE PR_SCENE_T_CN_POLICE_b FALLTHRU CASE PR_SCENE_T_CN_POLICE_c FALLTHRU CASE PR_SCENE_T_NAKED_BRIDGE FALLTHRU CASE PR_SCENE_T_NAKED_GARDEN FALLTHRU CASE PR_SCENE_T_NAKED_ISLAND FALLTHRU CASE PR_SCENE_T_CR_CHASECAR_a FALLTHRU CASE PR_SCENE_T_CN_CHASECAR_b FALLTHRU CASE PR_SCENE_T_CR_CHASEBIKE FALLTHRU CASE PR_SCENE_T_CR_CHASESCOOTER FALLTHRU CASE PR_SCENE_T_CR_BRIDGEDROP FALLTHRU CASE PR_SCENE_T_FIGHTBAR_a FALLTHRU CASE PR_SCENE_T_FIGHTBAR_b FALLTHRU CASE PR_SCENE_T_FIGHTBAR_c FALLTHRU CASE PR_SCENE_T_YELLATDOORMAN FALLTHRU CASE PR_SCENE_T_FIGHTYAUCLUB_b FALLTHRU CASE PR_SCENE_T_FIGHTCASINO FALLTHRU CASE PR_SCENE_T_CR_RUDEATCAFE FALLTHRU CASE PR_SCENE_T_CR_RAND_TEMPLE FALLTHRU CASE PR_SCENE_T_UNDERPIER FALLTHRU CASE PR_SCENE_T_KONEIGHBOUR FALLTHRU CASE PR_SCENE_T_SCARETRAMP FALLTHRU CASE PR_SCENE_T_DRUNKHOWLING FALLTHRU CASE PR_SCENE_T_SC_DRUNKHOWLING FALLTHRU CASE PR_SCENE_T_FLOYDSAVEHOUSE FALLTHRU CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU CASE PR_SCENE_T_FLOYDSPOON_B2 FALLTHRU CASE PR_SCENE_T_FLOYDSPOON_A2 FALLTHRU CASE PR_SCENE_T_FLOYDCRYING_A FALLTHRU CASE PR_SCENE_T_FLOYDCRYING_E0 FALLTHRU CASE PR_SCENE_T_FLOYDCRYING_E1 FALLTHRU CASE PR_SCENE_T_FLOYDCRYING_E2 FALLTHRU CASE PR_SCENE_T_FLOYDCRYING_E3 FALLTHRU CASE PR_SCENE_T_FLOYD_BEAR FALLTHRU CASE PR_SCENE_T_FLOYD_DOLL FALLTHRU CASE PR_SCENE_T_FLOYDPINEAPPLE FALLTHRU CASE PR_SCENE_T6_SMOKECRYSTAL FALLTHRU // CASE PR_SCENE_T6_BLOWSHITUP FALLTHRU // CASE PR_SCENE_T6_EVENING FALLTHRU CASE PR_SCENE_T6_METHLAB FALLTHRU CASE PR_SCENE_T6_HUNTING1 FALLTHRU CASE PR_SCENE_T6_HUNTING2 FALLTHRU CASE PR_SCENE_T6_HUNTING3 FALLTHRU CASE PR_SCENE_T6_TRAF_AIR FALLTHRU // CASE PR_SCENE_T6_DISPOSEBODY_A FALLTHRU CASE PR_SCENE_T6_DIGGING FALLTHRU CASE PR_SCENE_T6_FLUSHESFOOT FALLTHRU CASE PR_SCENE_T_CN_PIER FALLTHRU CASE PR_SCENE_T6_LAKE FALLTHRU CASE PR_SCENE_T_FLYING_PLANE ePed = CHAR_TREVOR RETURN TRUE BREAK ENDSWITCH #IF IS_DEBUG_BUILD TEXT_LABEL_63 sInvalid sInvalid = "invalid eScene for player char: " sInvalid += Get_String_From_Ped_Request_Scene_Enum(eScene) CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sInvalid) CASSERTLN(DEBUG_SWITCH, sInvalid) #ENDIF ePed = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(g_sPlayerPedRequest.sSelectorPeds.eNewSelectorPed) RETURN FALSE ENDFUNC // ******************************************************************************************* // SCENE PROCESS FUNCS // ******************************************************************************************* FUNC BOOL SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL_31 &sPlayerTimetableAdditional_script) SWITCH eScene // CASE PR_SCENE_Fa_STRIPCLUB_ARM3 sPlayerTimetableAdditional_script = "player_scene_f_stripclub" RETURN TRUE BREAK // CASE PR_SCENE_Fa_STRIPCLUB_FAM1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_Fa_STRIPCLUB_ARM3, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_STRIPCLUB_FAM3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_Fa_STRIPCLUB_ARM3, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_FAMILY1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_FAMILY3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_FBI1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_FBI4 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_Fa_AGENCY1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Ma_FAMILY4 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Ma_CARSTEAL1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Fa_RURAL2A RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_Ta_RURAL2A RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_FTa_FRANKLIN1a sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK // CASE PR_SCENE_FTa_FRANKLIN1b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_FTa_FRANKLIN1c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_FTa_FRANKLIN1d RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_FTa_FRANKLIN1e RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M_MD_FBI2 sPlayerTimetableAdditional_script = "player_scene_m_fbi2" RETURN TRUE BREAK CASE PR_SCENE_F_MD_FRANKLIN2 sPlayerTimetableAdditional_script = "player_scene_m_fbi2" RETURN TRUE BREAK CASE PR_SCENE_M_TRAFFIC_a sPlayerTimetableAdditional_script = "player_scene_mf_traffic" RETURN TRUE BREAK CASE PR_SCENE_M_TRAFFIC_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M_TRAFFIC_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M2_WIFEEXITSCAR sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK CASE PR_SCENE_M2_DROPOFFDAU_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M2_DROPOFFDAU_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M2_DROPOFFSON_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M2_DROPOFFSON_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M7_OPENDOORFORAMA RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M7_DROPPINGOFFJMY RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M7_TRACEYEXITSCAR RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M_VWOODPARK_a sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_M_VWOODPARK_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_VWOODPARK_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M7_REJECTENTRY sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_M7_TALKTOGUARD sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_M7_EMPLOYEECONVO sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_M4_CINEMA sPlayerTimetableAdditional_script = "player_scene_m_cinema" RETURN TRUE BREAK CASE PR_SCENE_M7_HOOKERS RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M4_CINEMA, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_M2_KIDS_TV sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK CASE PR_SCENE_M7_KIDS_TV sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK CASE PR_SCENE_M7_BIKINGJIMMY sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK CASE PR_SCENE_M7_ROUNDTABLE sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK CASE PR_SCENE_M2_LUNCH_a sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK CASE PR_SCENE_M7_RESTAURANT sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK CASE PR_SCENE_M7_LOUNGECHAIRS sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK CASE PR_SCENE_M4_WASHFACE sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK // CASE PR_SCENE_F_GYM sPlayerTimetableAdditional_script = "player_scene_f_gym" RETURN TRUE BREAK CASE PR_SCENE_F_TRAFFIC_a sPlayerTimetableAdditional_script = "player_scene_mf_traffic" RETURN TRUE BREAK CASE PR_SCENE_F_TRAFFIC_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F_TRAFFIC_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_F_LAMGRAFF sPlayerTimetableAdditional_script = "player_scene_f_lamgraff" RETURN TRUE BREAK // CASE PR_SCENE_F_CLUB sPlayerTimetableAdditional_script = "player_scene_f_club" RETURN TRUE BREAK // CASE PR_SCENE_F_TAUNT RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F_LAMTAUNT_P1 sPlayerTimetableAdditional_script = "player_scene_f_lamtaunt" RETURN TRUE BREAK // CASE PR_SCENE_F_LAMTAUNT_P2 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F_LAMTAUNT_P3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F_LAMTAUNT_P5 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F_LAMTAUNT_NIGHT RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_F1_BYETAXI sPlayerTimetableAdditional_script = "player_scene_f_taxi" RETURN TRUE BREAK CASE PR_SCENE_F0_TANISHAFIGHT sPlayerTimetableAdditional_script = "player_scene_f_taxi" RETURN TRUE BREAK CASE PR_SCENE_T_SC_MOCKLAPDANCE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_ESCORTED_OUT sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_T_ANNOYSUNBATHERS sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK // CASE PR_SCENE_T_CR_FUNERAL sPlayerTimetableAdditional_script = "player_scene_t_funeral" RETURN TRUE BREAK // CASE PR_SCENE_T_CR_THEATRE sPlayerTimetableAdditional_script = "player_scene_t_theatre" RETURN TRUE BREAK CASE PR_SCENE_T_CR_CHASECAR_a sPlayerTimetableAdditional_script = "player_scene_t_chasecar" RETURN TRUE BREAK CASE PR_SCENE_T_CN_CHASECAR_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_CR_CHASEBIKE RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_CR_CHASESCOOTER RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_CR_POLICE_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_CN_POLICE_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_CN_POLICE_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_PUKEINTOFOUNT sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK CASE PR_SCENE_T_SMOKEMETH sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK CASE PR_SCENE_Ta_RC_MRSP2 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_SMOKEMETH, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T6_DIGGING sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK CASE PR_SCENE_T6_FLUSHESFOOT sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK CASE PR_SCENE_T_HEADINSINK sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK CASE PR_SCENE_T_CN_PARK_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_T_CN_PARK_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, sPlayerTimetableAdditional_script) BREAK // CASE PR_SCENE_T_CR_BRIDGEDROP sPlayerTimetableAdditional_script = "player_scene_t_bridrop" RETURN TRUE BREAK CASE PR_SCENE_T_CR_RUDEATCAFE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_UNDERPIER sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_NAKED_ISLAND sPlayerTimetableAdditional_script = "player_scene_t_tie" RETURN TRUE BREAK CASE PR_SCENE_T_CR_BRIDGEDROP sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBBUILD sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBAR_a sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBAR_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_FIGHTBAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_FIGHTBAR_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_FIGHTBAR_a, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_YELLATDOORMAN sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTYAUCLUB_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_YELLATDOORMAN, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_FIGHTCASINO RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_YELLATDOORMAN, sPlayerTimetableAdditional_script) BREAK CASE PR_SCENE_T_SCARETRAMP sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_THROW_FOOD sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_SC_CHASE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK CASE PR_SCENE_T_CN_WAKETRAIN sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK // CASE PR_SCENE_F_S_FBI1end sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC TEXT_LABEL CreateRandomSpeechLabel(STRING sSceneSpeechLabel, INT iRANGE = 3) TEXT_LABEL tSceneSpeechLabel = sSceneSpeechLabel SWITCH GET_RANDOM_INT_IN_RANGE(0,iRANGE) CASE 0 tSceneSpeechLabel += "a" BREAK CASE 1 tSceneSpeechLabel += "b" BREAK CASE 2 tSceneSpeechLabel += "c" BREAK DEFAULT tSceneSpeechLabel += "X" BREAK ENDSWITCH RETURN tSceneSpeechLabel ENDFUNC FUNC BOOL SETUP_TIMETABLE_SPEECH_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL &tVoiceID, TEXT_LABEL &tBuddyVoiceID, TEXT_LABEL &tSceneSpeechBlock, TEXT_LABEL &tSceneSpeechLabel, FLOAT &fSceneSpeechPhase) tSceneSpeechBlock = "PRSAUD" tBuddyVoiceID = "" fSceneSpeechPhase = 0.0 SWITCH eScene CASE PR_SCENE_Fa_STRIPCLUB_ARM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK CASE PR_SCENE_Fa_PHONECALL_ARM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_A" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK // CASE PR_SCENE_Ma_ARM3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_ARM3" RETURN TRUE BREAK // CASE PR_SCENE_Fa_STRIPCLUB_FAM1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK CASE PR_SCENE_Fa_PHONECALL_FAM1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_B" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK // CASE PR_SCENE_Fa_STRIPCLUB_FAM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK CASE PR_SCENE_Fa_PHONECALL_FAM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_C" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK CASE PR_SCENE_Fa_FAMILY3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FAM3" RETURN TRUE BREAK CASE PR_SCENE_Ta_FBI2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FBI2" RETURN TRUE BREAK CASE PR_SCENE_Ma_FAMILY1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FAM1" RETURN TRUE BREAK CASE PR_SCENE_Fa_FBI4intro tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI4_0" RETURN TRUE BREAK CASE PR_SCENE_Ma_FBI4intro tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI4_0" RETURN TRUE BREAK // CASE PR_SCENE_Ma_FBI5 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI5" RETURN TRUE BREAK CASE PR_SCENE_Ma_FBI3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI3" RETURN TRUE BREAK CASE PR_SCENE_Fa_FBI4 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI4" RETURN TRUE BREAK CASE PR_SCENE_Fa_FBI5 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI5" RETURN TRUE BREAK CASE PR_SCENE_Ta_FAMILY4 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FAM4" RETURN TRUE BREAK // CASE PR_SCENE_Ta_FINALEC tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FINC" RETURN TRUE BREAK CASE PR_SCENE_Fa_AGENCY1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE1" RETURN TRUE BREAK CASE PR_SCENE_Fa_AGENCYprep1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGEp" RETURN TRUE BREAK // CASE PR_SCENE_Fa_AGENCY3B tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE3b" RETURN TRUE BREAK CASE PR_SCENE_Ma_FRANKLIN2 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FRA2" RETURN TRUE BREAK CASE PR_SCENE_Ta_FRANKLIN2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FRA2" RETURN TRUE BREAK CASE PR_SCENE_Ma_FBI1end tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBIend" RETURN TRUE BREAK // CASE PR_SCENE_Ma_MARTIN1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_MAR1" RETURN TRUE BREAK // CASE PR_SCENE_Ta_MARTIN1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MAR1" RETURN TRUE BREAK CASE PR_SCENE_Fa_CARSTEAL1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_CARST1" RETURN TRUE BREAK CASE PR_SCENE_Ta_CARSTEAL1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CARST1" RETURN TRUE BREAK CASE PR_SCENE_Fa_AGENCY2 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE2" RETURN TRUE BREAK CASE PR_SCENE_Ta_CARSTEAL2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CARST2" RETURN TRUE BREAK CASE PR_SCENE_Fa_RURAL2A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_RUR2A" RETURN TRUE BREAK // CASE PR_SCENE_Ta_RURAL2A tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_RUR2A" fSceneSpeechPhase = 0.60 RETURN TRUE BREAK CASE PR_SCENE_Ma_RURAL1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_RUR1" RETURN TRUE BREAK // CASE PR_SCENE_Ma_EXILE2 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_EXILE2" RETURN TRUE BREAK CASE PR_SCENE_Fa_EXILE2 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_EXILE2" RETURN TRUE BREAK CASE PR_SCENE_Fa_EXILE3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI5b" RETURN TRUE BREAK CASE PR_SCENE_Ma_EXILE3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_EXILE3" RETURN TRUE BREAK CASE PR_SCENE_M4_WASHFACE tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_MIC2" RETURN TRUE BREAK // CASE PR_SCENE_Fa_MICHAEL3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_MIC3" RETURN TRUE BREAK CASE PR_SCENE_Ta_MICHAEL3 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MIC3b" RETURN TRUE BREAK CASE PR_SCENE_Ma_DOCKS2A tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_DOC2A" RETURN TRUE BREAK CASE PR_SCENE_Fa_DOCKS2A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_DOC2A" RETURN TRUE BREAK CASE PR_SCENE_Ma_DOCKS2B tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_DOC2B" RETURN TRUE BREAK CASE PR_SCENE_Ma_FINALE1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FIN1" RETURN TRUE BREAK // CASE PR_SCENE_Fa_AGENCY3A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE3A" RETURN TRUE BREAK CASE PR_SCENE_Ta_FINALE2A tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2A" RETURN TRUE BREAK CASE PR_SCENE_Ma_FINALE2B tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FIN2B" RETURN TRUE BREAK CASE PR_SCENE_Ta_FINALE2B tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2B" RETURN TRUE BREAK CASE PR_SCENE_Ta_RC_MRSP2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MRSP" RETURN TRUE BREAK CASE PR_SCENE_Ta_FINALE1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN1" RETURN TRUE BREAK CASE PR_SCENE_Ta_CARSTEAL4 tSceneSpeechBlock = "MIFLAUD" tSceneSpeechLabel = "MIFL_CALL3" tVoiceID = "TREVOR" tBuddyVoiceID = "LESTER" RETURN TRUE BREAK CASE PR_SCENE_Fa_FINALE2intro tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FIN2i" RETURN TRUE BREAK CASE PR_SCENE_Ta_FINALE2intro tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2i" RETURN TRUE BREAK CASE PR_SCENE_M2_LUNCH_a tVoiceID = "MICHAEL" tBuddyVoiceID = "AMANDA" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS1_IG_4") RETURN TRUE BREAK CASE PR_SCENE_M2_WIFEEXITSCAR tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_5" RETURN TRUE BREAK CASE PR_SCENE_M_BENCHCALL_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_9a" RETURN TRUE BREAK CASE PR_SCENE_M_BENCHCALL_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_9b" RETURN TRUE BREAK CASE PR_SCENE_M_PIER_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_BEACH" RETURN TRUE BREAK CASE PR_SCENE_M_TRAFFIC_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_7" RETURN TRUE BREAK CASE PR_SCENE_M_TRAFFIC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_M_TRAFFIC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_M_VWOODPARK_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_8" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M_VWOODPARK_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_8b" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M2_PHARMACY tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_11" fSceneSpeechPhase = 0.15 tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK CASE PR_SCENE_M2_MARINA tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_16" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M2_ARGUEWITHWIFE tVoiceID = "MICHAEL" tBuddyVoiceID = "AMANDA" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS1_IG_18") fSceneSpeechPhase = 0.0 IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18a") //You are really pathetic, Michael. Pathetic. fSceneSpeechPhase = 0.05 ENDIF IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18b") //I'm tired of your bullshit, Michael. Tired. fSceneSpeechPhase = 0.05 ENDIF IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18c") //Just leave us all alone, Michael. Please. fSceneSpeechPhase = 0.05 ENDIF RETURN TRUE BREAK // CASE PR_SCENE_F0_TANISHAFIGHT tVoiceID = "FRANKLIN" // tBuddyVoiceID = "TANISHA" // tSceneSpeechLabel = "PSF_TANISHA" // RETURN TRUE // BREAK CASE PR_SCENE_F1_NEWHOUSE tVoiceID = "FRANKLIN" tBuddyVoiceID = "LESTER" tSceneSpeechLabel = "FRAS2_IG_12" RETURN TRUE BREAK CASE PR_SCENE_M4_EXITRESTAURANT IF NOT g_bMagDemoActive tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4REST" fSceneSpeechPhase = 0.20 RETURN TRUE ENDIF BREAK CASE PR_SCENE_M4_LUNCH_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4LUNCHb" RETURN TRUE BREAK CASE PR_SCENE_M4_CINEMA tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4LUNCHc" fSceneSpeechPhase = 0.45 RETURN TRUE BREAK CASE PR_SCENE_M_HOOKERMOTEL tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_HOOKM" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_M6_HOUSEBED tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_DESERT" fSceneSpeechPhase = 0.5 RETURN TRUE BREAK CASE PR_SCENE_M7_RESTAURANT tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7LUNCHa" tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK CASE PR_SCENE_M7_LOUNGECHAIRS tVoiceID = "MICHAEL" tBuddyVoiceID = "AMANDA" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_9") RETURN TRUE CASE PR_SCENE_M7_BYESOLOMON_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_5a" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M7_BYESOLOMON_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_5b" RETURN TRUE BREAK CASE PR_SCENE_M7_WIFETENNIS tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_18" tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK // CASE PR_SCENE_M7_ROUNDTABLE_DOUCH tVoiceID = "MICHAEL" // tBuddyVoiceID = "TRACEY" // tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_12") // RETURN TRUE BREAK // CASE PR_SCENE_M7_ROUNDTABLE tVoiceID = "MICHAEL" // tBuddyVoiceID = "TRACEY" // tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_12") // RETURN TRUE BREAK CASE PR_SCENE_M7_REJECTENTRY tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_6" RETURN TRUE BREAK CASE PR_SCENE_M7_HOOKERS tVoiceID = "MICHAEL" // tSceneSpeechLabel = "PSM_7HOOKER" fSceneSpeechPhase = 0.20 tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_7HOOKER") tBuddyVoiceID = "HOOKER" RETURN TRUE BREAK // CASE PR_SCENE_M7_EXITBARBER tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7HAIR" RETURN TRUE BREAK CASE PR_SCENE_M7_FAKEYOGA tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_13" RETURN TRUE BREAK CASE PR_SCENE_M_COFFEE_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM2_COFFEE" RETURN TRUE BREAK CASE PR_SCENE_M_COFFEE_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_COFFEE_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_M_COFFEE_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_COFFEE_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_M7_COFFEE tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM7_COFFEE" RETURN TRUE BREAK CASE PR_SCENE_M7_GETSREADY tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7SVHOUSE" fSceneSpeechPhase = 0.50 RETURN TRUE BREAK // CASE PR_SCENE_M7_EMPLOYEECONVO // tVoiceID = "MICHAEL" // tBuddyVoiceID = "PREMPLOYEE" // tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_2") // fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M7_TALKTOGUARD tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_3" RETURN TRUE BREAK CASE PR_SCENE_M7_LOT_JIMMY tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY" tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_7LOT_C") RETURN TRUE BREAK CASE PR_SCENE_M4_WATCHINGTV tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_2" RETURN TRUE BREAK CASE PR_SCENE_M7_KIDS_TV tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_15" RETURN TRUE BREAK CASE PR_SCENE_M7_KIDS_GAMING tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_11") fSceneSpeechPhase = 0.20 RETURN TRUE CASE PR_SCENE_M7_OPENDOORFORAMA tVoiceID = "MICHAEL" tBuddyVoiceID = "AMANDA" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_17") RETURN TRUE CASE PR_SCENE_M7_DROPPINGOFFJMY tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY" tSceneSpeechLabel = "PSM_7SHOPb" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK // CASE PR_SCENE_M7_BIKINGJIMMY tVoiceID = "MICHAEL" // tBuddyVoiceID = "JIMMY" // tSceneSpeechLabel = "MICS3_IG_10" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK CASE PR_SCENE_M7_TRACEYEXITSCAR tVoiceID = "MICHAEL" tBuddyVoiceID = "TRACEY" tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_21") fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_F0_SH_ASLEEP tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1" RETURN TRUE BREAK CASE PR_SCENE_F1_SH_ASLEEP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_ASLEEP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F0_SH_PUSHUP_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1c" RETURN TRUE BREAK CASE PR_SCENE_F0_SH_PUSHUP_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_PUSHUP_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F1_SH_PUSHUP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_PUSHUP_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F0_SH_READING tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1b" RETURN TRUE BREAK CASE PR_SCENE_F1_SH_READING RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_READING, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_LAMTAUNT_P5 tVoiceID = "FRANKLIN" tBuddyVoiceID = "LAMAR" tSceneSpeechLabel = "FRAS_IG_6_P5" RETURN TRUE BREAK CASE PR_SCENE_F_KUSH_DOC_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_2" RETURN TRUE BREAK CASE PR_SCENE_F_KUSH_DOC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_KUSH_DOC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_KUSH_DOC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_KUSH_DOC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F0_BIKE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_BIKEa" RETURN TRUE BREAK CASE PR_SCENE_F1_BIKE RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BIKE_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BIKE_d RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F0_GARBAGE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_3" RETURN TRUE BREAK CASE PR_SCENE_F1_GARBAGE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSM_TRASH" RETURN TRUE BREAK CASE PR_SCENE_F_CLUB tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_8" fSceneSpeechPhase = 0.35 RETURN TRUE BREAK // CASE PR_SCENE_F_CLUB tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_8" fSceneSpeechPhase = 0.35 RETURN TRUE BREAK CASE PR_SCENE_F_TRAFFIC_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_TRAFF" RETURN TRUE BREAK CASE PR_SCENE_F_TRAFFIC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_TRAFFIC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F0_WALKCHOP tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_9" RETURN TRUE BREAK CASE PR_SCENE_F0_PLAYCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK // CASE PR_SCENE_F1_WALKCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_WALKCHOP_a RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_WALKCHOP_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F1_PLAYCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BAR_a_01 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_BAR" RETURN TRUE BREAK CASE PR_SCENE_F_BAR_b_01 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BAR_c_02 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BAR_d_02 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_F_BAR_e_01 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK // CASE PR_SCENE_T_STRIPCLUB_a tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_28a" RETURN TRUE BREAK CASE PR_SCENE_T_SC_MOCKLAPDANCE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_28b" RETURN TRUE BREAK CASE PR_SCENE_T_ESCORTED_OUT tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12a" RETURN TRUE BREAK CASE PR_SCENE_T_CN_CHATEAU_b tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12b" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_T_CN_CHATEAU_c tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12c" RETURN TRUE BREAK CASE PR_SCENE_T_CR_CHATEAU_d tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12d" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBBUILD tVoiceID = "TREVOR" tSceneSpeechLabel = CreateRandomSpeechLabel("TRVS_IG_5") RETURN TRUE BREAK CASE PR_SCENE_T_ANNOYSUNBATHERS tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_6" fSceneSpeechPhase = 0.45 RETURN TRUE BREAK CASE PR_SCENE_T_CR_BRIDGEDROP tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_29" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK CASE PR_SCENE_T_NAKED_BRIDGE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_BRDGEWKa" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_T_NAKED_GARDEN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_BRDGEWKb" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_NAKED_ISLAND tVoiceID = "TREVOR" IF NOT g_bMagDemoActive tSceneSpeechLabel = "PST_BRDGEWKc" ELSE tSceneSpeechLabel = "PST_MAGDEMO" ENDIF fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_SC_ALLEYDRUNK tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WSTRIP" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CN_WAKETRASH_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHb" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CR_WAKEBEACH tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHc" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CN_WAKEBARN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHd" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CN_WAKETRAIN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHe" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CR_WAKEROOFTOP tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHf" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK CASE PR_SCENE_T_CN_WAKEMOUNTAIN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHg" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK // CASE PR_SCENE_T_SC_CHASE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_35" RETURN TRUE BREAK CASE PR_SCENE_T_CR_FUNERAL tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_11" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK CASE PR_SCENE_T_CN_CHASECAR_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRb" RETURN TRUE BREAK CASE PR_SCENE_T_CR_BLOCK_CAMERA tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_7" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_T_GUITARBEATDOWN tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_8" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK CASE PR_SCENE_T_CR_CHASECAR_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRa" RETURN TRUE BREAK CASE PR_SCENE_T_CR_CHASEBIKE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRc" RETURN TRUE BREAK CASE PR_SCENE_T_CR_CHASESCOOTER tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRd" RETURN TRUE BREAK CASE PR_SCENE_T_CR_POLICE_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLa" RETURN TRUE BREAK CASE PR_SCENE_T_CN_POLICE_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLb" RETURN TRUE BREAK CASE PR_SCENE_T_CN_POLICE_c tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLc" RETURN TRUE BREAK CASE PR_SCENE_T_PUKEINTOFOUNT tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_PARK" fSceneSpeechPhase = 0.50 RETURN TRUE BREAK CASE PR_SCENE_T_CN_PARK_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK // CASE PR_SCENE_T_CN_PARK_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_T_CR_LINGERIE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_9" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK // CASE PR_SCENE_T_CR_MACHINE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MACHINE" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBAR_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARa" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBAR_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARb" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTBAR_c tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARc" RETURN TRUE BREAK CASE PR_SCENE_T_YELLATDOORMAN tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_21" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTYAUCLUB_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIYAUGHb" RETURN TRUE BREAK CASE PR_SCENE_T_FIGHTCASINO tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIYAUGHc" RETURN TRUE BREAK CASE PR_SCENE_T_CR_RUDEATCAFE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_23" RETURN TRUE BREAK CASE PR_SCENE_T_UNDERPIER tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_22" fSceneSpeechPhase = 0.30 RETURN TRUE BREAK CASE PR_SCENE_T_KONEIGHBOUR tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_19" RETURN TRUE BREAK CASE PR_SCENE_T_SCARETRAMP tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_20" RETURN TRUE BREAK CASE PR_SCENE_T_DRUNKHOWLING tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_18" fSceneSpeechPhase = 0.2140 RETURN TRUE BREAK CASE PR_SCENE_T_SC_DRUNKHOWLING tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_HSTRIP" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_A tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30a" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_B tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30b" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_B2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30c" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_A2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30d" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDCRYING_A tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34a" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDCRYING_E0 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34b" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDCRYING_E1 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34c" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDCRYING_E2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34d" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDCRYING_E3 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34e" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYD_BEAR tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_31" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYD_DOLL tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_32" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDPINEAPPLE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_33" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK // CASE PR_SCENE_T6_SMOKECRYSTAL tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MORN" RETURN TRUE BREAK CASE PR_SCENE_T6_METHLAB tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_METH" RETURN TRUE BREAK CASE PR_SCENE_T6_HUNTING1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_HUNT" RETURN TRUE BREAK CASE PR_SCENE_T6_HUNTING2 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T6_HUNTING1, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_T6_HUNTING3 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T6_HUNTING1, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK CASE PR_SCENE_T6_TRAF_AIR tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_ARMS" RETURN TRUE BREAK CASE PR_SCENE_T_CN_PIER tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_PIER" RETURN TRUE BREAK CASE PR_SCENE_T_FLYING_PLANE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FLY" RETURN TRUE BREAK CASE PR_SCENE_M4_WAKEUPSCREAM tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_1" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK CASE PR_SCENE_M4_WAKESUPSCARED tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_1" RETURN TRUE BREAK CASE PR_SCENE_F1_ONCELL tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_2" RETURN TRUE BREAK CASE PR_SCENE_T_CR_RAND_TEMPLE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_24" RETURN TRUE BREAK #IF NOT IS_JAPANESE_BUILD CASE PR_SCENE_T_JERKOFF tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_2c" RETURN TRUE BREAK #ENDIF CASE PR_SCENE_T6_FLUSHESFOOT tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_27" RETURN TRUE BREAK CASE PR_SCENE_F1_BYETAXI tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_7" tBuddyVoiceID = "PRLADY" RETURN TRUE BREAK CASE PR_SCENE_F1_SNACKING tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_CRISP" fSceneSpeechPhase = 0.75 RETURN TRUE BREAK ENDSWITCH SWITCH eScene CASE PR_SCENE_M2_DROPOFFDAU_a tVoiceID = "MICHAEL" tBuddyVoiceID = "TRACEY" tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPb_") RETURN TRUE BREAK CASE PR_SCENE_M2_DROPOFFDAU_b tVoiceID = "MICHAEL" tBuddyVoiceID = "TRACEY" tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPc_") RETURN TRUE BREAK CASE PR_SCENE_M2_DROPOFFSON_a tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY" tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPd_") RETURN TRUE BREAK CASE PR_SCENE_M2_DROPOFFSON_b tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY" tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPe_") RETURN TRUE BREAK CASE PR_SCENE_M6_ONPHONE tVoiceID = "MICHAEL" tBuddyVoiceID = "" tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events! // INT iPhoneSpeechBit tSceneSpeechLabel = "MIC_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit) tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel) RETURN TRUE BREAK CASE PR_SCENE_M6_DEPRESSED tVoiceID = "MICHAEL" tBuddyVoiceID = "" tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events! // INT iPhoneSpeechBit tSceneSpeechLabel = "MIC_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit) tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel) RETURN TRUE BREAK CASE PR_SCENE_M6_SUNBATHING tVoiceID = "MICHAEL" tBuddyVoiceID = "" tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events! INT iPhoneSpeechCount, iPhoneSpeechBit, iPlayerBitset tSceneSpeechLabel = Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_sunbathing, iPhoneSpeechCount, iPhoneSpeechBit, iPlayerBitset) RETURN TRUE BREAK CASE PR_SCENE_F_S_AGENCY_2A_b tVoiceID = "FRANKLIN" tSceneSpeechBlock = "FB3aAUD" tSceneSpeechLabel = "F3A_INTRO" RETURN TRUE BREAK BREAK CASE PR_SCENE_M6_RONBORING tVoiceID = "MICHAEL" tBuddyVoiceID = Get_VoiceID_From_FamilyMember(FM_TREVOR_0_RON) tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events! // INT iPhoneSpeechBit tSceneSpeechLabel = "RONEX_IG_5" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit) tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel, 2) RETURN TRUE BREAK BREAK #IF NOT IS_JAPANESE_BUILD CASE PR_SCENE_T_SHIT tVoiceID = "TREVOR" tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events! // INT iPhoneSpeechBit tSceneSpeechLabel = "TRV_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit) RETURN TRUE BREAK BREAK #ENDIF ENDSWITCH #IF IS_DEBUG_BUILD TEXT_LABEL_63 sMissing sMissing = "no speech for eScene: " sMissing += Get_String_From_Ped_Request_Scene_Enum(eScene) CDEBUG3LN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sMissing) /* CASSERTLN(DEBUG_SWITCH, sMissing) */ #ENDIF tVoiceID = "null" tSceneSpeechBlock = "null" tSceneSpeechLabel = "null" fSceneSpeechPhase = -1.0 RETURN FALSE ENDFUNC FUNC BOOL SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL_31 &tContext, FLOAT &fSceneSpeechPhase, BOOL &bPlayerSpeaks) bPlayerSpeaks = TRUE SWITCH eScene // CASE PR_SCENE_F1_SNACKING tContext = "GENERIC_EAT" fSceneSpeechPhase = 0.75 RETURN TRUE BREAK CASE PR_SCENE_T_KONEIGHBOUR tContext = "GENERIC_INSULT_HIGH" fSceneSpeechPhase = 0.9 RETURN TRUE BREAK CASE PR_SCENE_M7_HOOKERS tContext = "HOOKER_DECLINED" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK CASE PR_SCENE_T_CR_BLOCK_CAMERA tContext = "GENERIC_INSULT_MED" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK CASE PR_SCENE_F_GYM tContext = "WORKOUT_FINISHED" fSceneSpeechPhase = 0.9 RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_A tContext = "MURMERING" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK CASE PR_SCENE_T_FLOYDSPOON_A2 RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK CASE PR_SCENE_T_FLOYDSPOON_B RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK CASE PR_SCENE_T_FLOYDSPOON_B2 RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK CASE PR_SCENE_M2_KIDS_TV tContext = "AIMED_AT_BY_PLAYER" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK CASE PR_SCENE_M7_TALKTOGUARD tContext = "GENERIC_BYE" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK ENDSWITCH tContext = "null" fSceneSpeechPhase = -1.0 RETURN FALSE ENDFUNC FUNC BOOL SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(PED_REQUEST_SCENE_ENUM eScene, FLOAT ¶mStrength, FLOAT &litudeScalar, BOOL &bCountsForPubClubVisit) SWITCH eScene CASE PR_SCENE_M6_LIQUORSTORE paramStrength = 1.0 //0.05 amplitudeScalar = 1.0 //0.05 RETURN TRUE BREAK CASE PR_SCENE_T_SC_BAR FALLTHRU CASE PR_SCENE_T_DRUNKHOWLING FALLTHRU CASE PR_SCENE_T_SC_DRUNKHOWLING FALLTHRU CASE PR_SCENE_T_CR_ALLEYDRUNK FALLTHRU CASE PR_SCENE_T_SC_ALLEYDRUNK FALLTHRU CASE PR_SCENE_T_NAKED_BRIDGE FALLTHRU CASE PR_SCENE_T_NAKED_GARDEN FALLTHRU CASE PR_SCENE_T_NAKED_ISLAND FALLTHRU CASE PR_SCENE_T_CN_CHATEAU_b FALLTHRU CASE PR_SCENE_T_CN_CHATEAU_c FALLTHRU CASE PR_SCENE_T_CR_CHATEAU_d FALLTHRU CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU // CASE PR_SCENE_T_CN_WAKEMOUNTAIN FALLTHRU //1463185 CASE PR_SCENE_T_CR_WAKEROOFTOP IF g_bMagDemoActive RETURN FALSE ENDIF paramStrength = 0.5 //0.05 amplitudeScalar = 0.5 //0.05 IF (eScene = PR_SCENE_T_NAKED_BRIDGE) OR (eScene = PR_SCENE_T_NAKED_GARDEN) OR (eScene = PR_SCENE_T_NAKED_ISLAND) OR (eScene = PR_SCENE_T_CR_ALLEYDRUNK) bCountsForPubClubVisit = FALSE ENDIF RETURN TRUE BREAK CASE PR_SCENE_T_SMOKEMETH FALLTHRU CASE PR_SCENE_Ta_RC_MRSP2 paramStrength = 0.1 amplitudeScalar = 0.1 RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL CONTROL_PLAYER_HAVING_A_LIE_IN(PED_REQUEST_SCENE_ENUM eScene) eScene = eScene // SWITCH eScene // CASE PR_SCENE_M2_BEDROOM FALLTHRU // CASE PR_SCENE_M2_SAVEHOUSE0_b FALLTHRU // CASE PR_SCENE_M2_SAVEHOUSE1_a FALLTHRU // CASE PR_SCENE_M4_WAKEUPSCREAM FALLTHRU // CASE PR_SCENE_M4_WAKESUPSCARED FALLTHRU // CASE PR_SCENE_M4_HOUSEBED_b FALLTHRU // CASE PR_SCENE_M6_HOUSEBED FALLTHRU // CASE PR_SCENE_M_POOLSIDE_a FALLTHRU // CASE PR_SCENE_M_POOLSIDE_b FALLTHRU // CASE PR_SCENE_M_PARKEDHILLS_a FALLTHRU // CASE PR_SCENE_M_PARKEDHILLS_b FALLTHRU // CASE PR_SCENE_M6_PARKEDHILLS_a FALLTHRU // CASE PR_SCENE_M6_PARKEDHILLS_b FALLTHRU // CASE PR_SCENE_M6_PARKEDHILLS_c FALLTHRU // CASE PR_SCENE_M6_PARKEDHILLS_d FALLTHRU // CASE PR_SCENE_M6_PARKEDHILLS_e FALLTHRU // CASE PR_SCENE_M2_CARSLEEP_a FALLTHRU // CASE PR_SCENE_M2_CARSLEEP_b FALLTHRU // CASE PR_SCENE_M6_CARSLEEP FALLTHRU // CASE PR_SCENE_F0_SH_ASLEEP FALLTHRU // CASE PR_SCENE_F1_SH_ASLEEP FALLTHRU // CASE PR_SCENE_F1_POOLSIDE_a FALLTHRU // CASE PR_SCENE_F1_POOLSIDE_b FALLTHRU // CASE PR_SCENE_T_SMOKEMETH FALLTHRU // CASE PR_SCENE_T_CR_DUMPSTER FALLTHRU // CASE PR_SCENE_T_FLOYDSAVEHOUSE FALLTHRU // CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU // CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU // CASE PR_SCENE_T_FLOYDSPOON_C FALLTHRU // CASE PR_SCENE_T_FLOYDSPOON_D FALLTHRU // CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU // CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU // CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU // CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU // CASE PR_SCENE_T_CR_WAKEROOFTOP FALLTHRU // CASE PR_SCENE_T_CN_WAKEMOUNTAIN // // #IF IS_DEBUG_BUILD // TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix // IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) // TEXT_LABEL_63 tScene, tAssert // tScene = Get_String_From_Ped_Request_Scene_Enum(eScene) // tAssert = GET_STRING_FROM_STRING(tScene, // GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), // GET_LENGTH_OF_LITERAL_STRING(tScene)) // tAssert += " uses synch scene cam, cannot use lie in" // CASSERTLN(DEBUG_SWITCH, tAssert) // // RETURN FALSE // ENDIF // #ENDIF // // RETURN TRUE // BREAK // // ENDSWITCH RETURN FALSE ENDFUNC /// PURPOSE: /// Michael's House SE_MICHAELS_HOUSE_RADIO -806.3952 177.7196 72.6604 /// Franklin's Auntie House SE_FRANKLIN_AUNT_HOUSE_RADIO_01 -17.4724 -1441.13 31.8273 /// Franklin Hills Safehouse SE_FRANKLIN_HILLS_HOUSE_RADIO_01 3.5171 527.6619 175.6338 /// Trevor Trailer SE_TREVOR_TRAILER_RADIO_01 1976.3448 3820.95 33.5331 /// Trevor's Apartment TREVOR_APARTMENT_RADIO -1156.3032 -1522.38 11.9615 FUNC BOOL SET_SCENE_RADIO_EMITTER_ENABLED(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL_63 &EmitterName, FLOAT &fTurnOffRadioPhase) SWITCH eScene CASE PR_SCENE_F0_SH_ASLEEP CASE PR_SCENE_F0_TANISHAFIGHT IF SET_SCENE_RADIO_EMITTER_ENABLED(PR_SCENE_F1_SH_ASLEEP, EmitterName, fTurnOffRadioPhase) EmitterName = "SE_FRANKLIN_AUNT_HOUSE_RADIO_01" RETURN TRUE BREAK ENDIF BREAK CASE PR_SCENE_F1_SH_ASLEEP EmitterName = "SE_FRANKLIN_HILLS_HOUSE_RADIO_01" fTurnOffRadioPhase = 0.0 RETURN TRUE BREAK ENDSWITCH EmitterName = "" fTurnOffRadioPhase = -1 RETURN FALSE ENDFUNC FUNC BOOL CONTROL_PLAYER_IS_ON_THE_PHONE(PED_REQUEST_SCENE_ENUM eScene) SWITCH eScene CASE PR_SCENE_M_BENCHCALL_a FALLTHRU CASE PR_SCENE_M_BENCHCALL_b FALLTHRU CASE PR_SCENE_M6_ONPHONE FALLTHRU CASE PR_SCENE_M6_DEPRESSED RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL CONTROL_PLAYER_PROCEDURAL_CONV_INSTANT(PED_REQUEST_SCENE_ENUM eScene) SWITCH eScene CASE PR_SCENE_M2_DROPOFFDAU_a FALLTHRU CASE PR_SCENE_M2_DROPOFFDAU_b FALLTHRU CASE PR_SCENE_M2_DROPOFFSON_a FALLTHRU CASE PR_SCENE_M2_DROPOFFSON_b FALLTHRU CASE PR_SCENE_M_BENCHCALL_a FALLTHRU CASE PR_SCENE_M_BENCHCALL_b FALLTHRU CASE PR_SCENE_M6_ONPHONE FALLTHRU CASE PR_SCENE_M6_DEPRESSED RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC PRIVATE_SetDefaultPlayerPedAttributes(SELECTOR_PED_STRUCT &selectorPeds) IF NOT IS_PED_INJURED(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed]) SET_PED_CAN_BE_TARGETTED(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed], FALSE) SET_PED_RELATIONSHIP_GROUP_HASH(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed], RELGROUPHASH_PLAYER) ENDIF ENDPROC FUNC BOOL FORCE_ROOM_FOR_SCENE_SELECTOR_PED(PED_SCENE_STRUCT &sPedScene) IF sPedScene.roomInterior <> NULL STRING RoomKeyHash SWITCH sPedScene.eScene // CASE PR_SCENE_F1_SH_ASLEEP RoomKeyHash = "BedRoom" BREAK // #593993 CASE PR_SCENE_F1_ONCELL FALLTHRU DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - no defined RoomKeyHash") #ENDIF RoomKeyHash = "" RETURN FALSE BREAK ENDSWITCH FORCE_ROOM_FOR_ENTITY(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.roomInterior, GET_HASH_KEY(RoomKeyHash)) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - defined RoomKeyHash: \"", RoomKeyHash, "\"") #ENDIF RETURN TRUE ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - roomInterior is null??") #ENDIF RETURN FALSE ENDFUNC PROC GetSplineCamFromPlayerToPedParams(PED_SCENE_STRUCT &sPedScene, BOOL &bCreateReplacementForPlayer, BOOL &bKeepTasks, SWITCH_TYPE &eSwitchType, FLOAT &gameplayCamPitch, FLOAT &gameplayCamHeading, BOOL &bPauseBeforePan, BOOL &bPauseBeforeOutro, INT &iSwitchFlags) bCreateReplacementForPlayer = TRUE bKeepTasks = FALSE eSwitchType = SWITCH_TYPE_AUTO IF (sPedScene.sSelectorPeds.ePreviousSelectorPed < SELECTOR_PED_MULTIPLAYER) AND (sPedScene.sSelectorPeds.eCurrentSelectorPed < SELECTOR_PED_MULTIPLAYER) IF (sPedScene.sSelectorPeds.ePreviousSelectorPed <> sPedScene.sSelectorPeds.eCurrentSelectorPed) enumCharacterList ePreviousChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.sSelectorPeds.ePreviousSelectorPed) enumCharacterList eCurrentChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.sSelectorPeds.eCurrentSelectorPed) #if USE_CLF_DLC VECTOR vPreviousChar = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar] VECTOR vCurrentChar = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar] #endif #if USE_NRM_DLC VECTOR vPreviousChar = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar] VECTOR vCurrentChar = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar] #endif #if not USE_CLF_DLC #if not USE_NRM_DLC VECTOR vPreviousChar = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar] VECTOR vCurrentChar = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar] #endif #endif IF (VDIST2(vPreviousChar, vCurrentChar) < (150.0*150.0)) // bCreateReplacementForPlayer = TRUE bKeepTasks = TRUE ENDIF ENDIF ENDIF // Fix for bug #329674 - Copy of MP character left in singleplayer. IF GET_CURRENT_PLAYER_PED_ENUM() = NO_CHARACTER bCreateReplacementForPlayer = FALSE ENDIF #IF IS_DEBUG_BUILD //Fix for bug #688176 - Copy of old player char left after debug menu switch IF g_bWarpDebugPlayerCharScene bCreateReplacementForPlayer = FALSE ENDIF #ENDIF //No need to create replacement copy for long-rane ambient switches during the magdemo IF g_bMagDemoActive bCreateReplacementForPlayer = FALSE ENDIF //delete if descent only (switching to the same ped!) IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY) IF NOT IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT) SET_BITMASK_AS_ENUM(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT) ENDIF eSwitchType = SWITCH_TYPE_MEDIUM bCreateReplacementForPlayer = FALSE ENDIF IF (sPedScene.eScene = PR_SCENE_M_S_FAMILY4) //1436271 OR (sPedScene.eScene = PR_SCENE_F_S_AGENCY_2A_a) //1033625 OR (sPedScene.eScene = PR_SCENE_F_S_AGENCY_2A_b) //1033625 OR (sPedScene.eScene = PR_SCENE_F_S_EXILE2) //1271904 IF (eSwitchType = SWITCH_TYPE_AUTO) //1373010 eSwitchType = SWITCH_TYPE_LONG ENDIF bCreateReplacementForPlayer = FALSE ENDIF IF g_bSPInitialisedThroughSwitch bCreateReplacementForPlayer = FALSE ENDIF IF NOT ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)) //#1249706 #IF IS_DEBUG_BUILD IF g_bWarpDebugPlayerCharScene IF (eSwitchType = SWITCH_TYPE_AUTO) eSwitchType = SWITCH_TYPE_LONG ENDIF ENDIF #ENDIF IF (eSwitchType = SWITCH_TYPE_AUTO) //#1544164 & 1589279 eSwitchType = SWITCH_TYPE_LONG ENDIF ELSE IF (eSwitchType = SWITCH_TYPE_AUTO) PED_INDEX pedFrom = sPedScene.sSelectorCam.pedFrom IF NOT DOES_ENTITY_EXIST(pedFrom) pedFrom = PLAYER_PED_ID() ENDIF IF GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT //#1587763 IF (eSwitchType = SWITCH_TYPE_AUTO) IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedTo) IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorCam.pedTo) eSwitchType = SWITCH_TYPE_MEDIUM CASSERTLN(DEBUG_SWITCH, "#1587763 - force medium range switch for peds waiting on preload") ENDIF ENDIF ENDIF //#1587145 IF (eSwitchType = SWITCH_TYPE_AUTO) INT interiorGroupID1 = 0, interiorGroupID2 = 0 INTERIOR_INSTANCE_INDEX interiorID1 = GET_INTERIOR_FROM_ENTITY(pedFrom) IF IS_VALID_INTERIOR(interiorID1) interiorGroupID1 = GET_INTERIOR_GROUP_ID(interiorID1) ENDIF IF IS_VALID_INTERIOR(sPedScene.roomInterior) interiorGroupID2 = GET_INTERIOR_GROUP_ID(sPedScene.roomInterior) ENDIF IF (interiorGroupID1 <> interiorGroupID2) eSwitchType = SWITCH_TYPE_MEDIUM ELSE IF (interiorGroupID1 <> 0) CPRINTLN(DEBUG_SWITCH, "interiorGroupID1 is non-null ", interiorGroupID1) ENDIF IF (interiorGroupID2 <> 0) CPRINTLN(DEBUG_SWITCH, "interiorGroupID2 is non-null ", interiorGroupID2) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF FLOAT gameplayCamSmoothRate IF NOT SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sPedScene.eScene, gameplayCamPitch, gameplayCamSmoothRate, gameplayCamHeading) ENDIF bPauseBeforePan = FALSE bPauseBeforeOutro = FALSE IF g_iPauseOnOutro > 0 bPauseBeforeOutro = TRUE ENDIF ENDPROC USING "player_scene_assets.sch" USING "player_scene_anim.sch" PROC SAFE_STORE_PLAYER_PED_INFOCLF(PED_INDEX pedIndex, BOOL bOnlyOnPavement) STORE_PLAYER_PED_INFO(pedIndex) STORE_PLAYER_PED_VARIATIONS(pedIndex) // Grab the ped enum enumCharacterList ePed = GET_PLAYER_PED_ENUMCLF(pedIndex) IF IS_PLAYER_PED_PLAYABLE(ePed) AND NOT IS_PED_INJURED(pedIndex) IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex) VECTOR vSafePedCoord IF GET_SAFE_COORD_FOR_PED(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN) g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord ENDIF ENDIF ENDIF ENDPROC PROC SAFE_STORE_PLAYER_PED_INFONRM(PED_INDEX pedIndex, BOOL bOnlyOnPavement) STORE_PLAYER_PED_INFO(pedIndex) STORE_PLAYER_PED_VARIATIONS(pedIndex) // Grab the ped enum enumCharacterList ePed = GET_PLAYER_PED_ENUMNRM(pedIndex) IF IS_PLAYER_PED_PLAYABLE(ePed) AND NOT IS_PED_INJURED(pedIndex) IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex) VECTOR vSafePedCoord IF GET_SAFE_COORD_FOR_PED(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN) g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord ENDIF ENDIF ENDIF ENDPROC PROC SAFE_STORE_PLAYER_PED_INFO(PED_INDEX pedIndex, BOOL bOnlyOnPavement) #if USE_CLF_DLC if g_bLoadedClifford SAFE_STORE_PLAYER_PED_INFOCLF(pedIndex,bOnlyOnPavement) exit endif #endif #if USE_NRM_DLC if g_bLoadedNorman SAFE_STORE_PLAYER_PED_INFONRM(pedIndex,bOnlyOnPavement) exit endif #endif STORE_PLAYER_PED_INFO(pedIndex) STORE_PLAYER_PED_VARIATIONS(pedIndex) // Grab the ped enum enumCharacterList ePed = GET_PLAYER_PED_ENUM(pedIndex) IF IS_PLAYER_PED_PLAYABLE(ePed) AND NOT IS_PED_INJURED(pedIndex) IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex) VECTOR vSafePedCoord IF GET_SAFE_COORD_FOR_PED(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN) g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord ENDIF ENDIF ENDIF ENDPROC ENUM enumBlockedPedCoordZone BPCZ_0_DJBooth, BPCZ_1_Bar, BPCZ_2_impound, BPCZ_3_mineshaft, BPCZ_4_hospital, BPCZ_5_janitor, BPCZ_6_arena_a, BPCZ_7_arena_b, BPCZ_8_omegagarage, BPCZ_NULL = -1 ENDENUM FUNC BOOL Is_Ped_Last_Known_Coords_In_Blocked_Zone(VECTOR vLastKnownCoords, VECTOR &vCreateCoords, FLOAT &fCreateHead, enumBlockedPedCoordZone &eZone) IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-254.8389, -2026.9094, 29.0359>>, <<-394.2681, -1909.8342, 48.9460>>, 122.5000) VECTOR vTestDefaultPedToCoors1 = <<-254.8389, -2026.9094, 29.0359>> VECTOR vTestDefaultPedToCoors2 = <<-394.2681, -1909.8342, 48.9460>> FLOAT fTestDefaultPedToDistance = 122.5000 VECTOR vBuyMidPos = ((vTestDefaultPedToCoors1*1.0)+(vTestDefaultPedToCoors2*1.0))/2.0 IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vTestDefaultPedToCoors1, <>, fTestDefaultPedToDistance) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - A") vCreateCoords = <<-231.1906, -1995.7928, 28.9460>> fCreateHead = 256.7039 eZone = BPCZ_6_arena_a RETURN TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <>, vTestDefaultPedToCoors2, fTestDefaultPedToDistance) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - B") vCreateCoords = <<-342.9800, -1879.6520, 28.9463>> fCreateHead = 353.8719 eZone = BPCZ_7_arena_b RETURN TRUE ENDIF PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - ourside?") vCreateCoords = <<-342.9800, -1879.6520, 28.9463>> fCreateHead = 353.8719 eZone = BPCZ_6_arena_a RETURN TRUE ENDIF INT iPlayerHashKey = GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID()) SWITCH iPlayerHashKey CASE HASH("strp3mainrm") //stripclub IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<127.180801,-1277.321533,28.330606>>, <<120.222549,-1281.544556,31.230530>>, 4.000000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //DJ Booth") vCreateCoords = <<118.3254, -1284.7686, 27.2739>> fCreateHead = 16.7668 eZone = BPCZ_0_DJBooth RETURN TRUE ElIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<132.836960,-1287.936401,28.269539>>, <<127.832428,-1279.579102,31.019539>>, 4.000000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //Bar") vCreateCoords = <<127.1327, -1283.6587, 28.2788>> fCreateHead = 255.9372 eZone = BPCZ_1_Bar RETURN TRUE ELSE PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...") ENDIF BREAK // mine shaft CASE HASH("GtaMloRoom001") CASE HASH("GtaMloRoom002") CASE HASH("GtaMloRoom003") CASE HASH("GtaMloRoom004") CASE HASH("GtaMloRoom005") CASE HASH("GtaMloRoom006") CASE HASH("GtaMloRoom007") CASE HASH("GtaMloRoom008") IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-415.436462, 2068.288574, 113.300171>>, <<-564.951599, 1884.702515, 134.040344>>, 258.750000) OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-596.470581, 2089.920898, 125.412750>>, <<-581.213440, 2036.256104, 136.283630>>, 9.500000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //mine shaft") vCreateCoords = <<-598.9213, 2096.5286, 129.8140>> fCreateHead = 25.7278 eZone = BPCZ_3_mineshaft RETURN TRUE ENDIF BREAK CASE 262728566 CASE HASH("JanitorRoom") CASE HASH("v_janitor") IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-112.713043,-14.207236,69.519592>>, <<-109.529243,-5.697598,72.421684>>, 6.000000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_janitor\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //janitor") vCreateCoords = <<-105.0006, -8.0130, 69.5234>> fCreateHead = 247.4701 eZone = BPCZ_5_janitor RETURN TRUE ELSE PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_janitor\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...") ENDIF BREAK CASE -696774531 CASE HASH("v_hospital") CASE HASH("V_40_Room1") IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<357.031708,-590.516602,27.898069>>, <<300.431946,-569.354431,51.659721>>, 28.500000) OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<299.740100,-584.831900,27.898069>>, <<328.305800,-595.862100,51.659721>>, 28.500000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_hospital\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //hospital") vCreateCoords = <<360.4663, -585.1340, 27.8231>> fCreateHead = 254.2763 eZone = BPCZ_4_hospital RETURN TRUE ELSE PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_hospital\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...") ENDIF BREAK CASE 0 CASE HASH("") //non-interior IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<428.292847,-996.683411,24.488642>>, <<439.543823,-996.711365,28.103334>>, 8.687500) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //impound") vCreateCoords = <<433.8454, -1011.9464, 27.7057>> fCreateHead = 196.3176 eZone = BPCZ_2_impound RETURN TRUE ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<2331.647461,2575.777100,45.667671>>, <<2326.452148,2564.805908,49.703575>>, 5.000000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //omega garage") vCreateCoords = <<2332.6953, 2577.6816, 45.6677>> fCreateHead = 321.4395 eZone = BPCZ_8_omegagarage RETURN TRUE // mine shaft in case the interior hasn't loaded in ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-415.436462, 2068.288574, 113.300171>>, <<-564.951599, 1884.702515, 134.040344>>, 258.750000) OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-596.470581, 2089.920898, 125.412750>>, <<-581.213440, 2036.256104, 136.283630>>, 9.500000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //mine shaft") vCreateCoords = <<-598.9213, 2096.5286, 129.8140>> fCreateHead = 25.7278 eZone = BPCZ_3_mineshaft RETURN TRUE ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<357.031708,-590.516602,27.898069>>, <<300.431946,-569.354431,51.659721>>, 28.500000) OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<299.740100,-584.831900,27.898069>>, <<328.305800,-595.862100,51.659721>>, 28.500000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //hospital") vCreateCoords = <<360.4663, -585.1340, 27.8231>> fCreateHead = 254.2763 eZone = BPCZ_4_hospital RETURN TRUE ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-112.713043,-14.207236,69.519592>>, <<-109.529243,-5.697598,72.421684>>, 6.000000) PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //janitor") vCreateCoords = <<-105.0006, -8.0130, 69.5234>> fCreateHead = 247.4701 eZone = BPCZ_5_janitor RETURN TRUE ELSE PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...") eZone = BPCZ_NULL RETURN FALSE ENDIF BREAK DEFAULT PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"", DEBUG_get_string_room_hash_key(iPlayerHashKey), "\"): vLastKnownCoords ", vLastKnownCoords, " not inside a specified zone...") eZone = BPCZ_NULL RETURN FALSE BREAK ENDSWITCH eZone = BPCZ_NULL RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Should_Default_PedTo_Coord_Move(PED_SCENE_STRUCT &sPedScene, VECTOR &vCreateCoords, FLOAT &fCreateHead) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) enumCharacterList eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed) IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ELSE #if USE_CLF_DLC VECTOR vLastKnownCoords = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar] TIMEOFDAY sLastTimeActive = g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[eSelectorChar] #endif #if USE_NRM_DLC VECTOR vLastKnownCoords = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar] TIMEOFDAY sLastTimeActive = g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[eSelectorChar] #endif #if not USE_CLF_DLC #if not USE_NRM_DLC VECTOR vLastKnownCoords = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar] TIMEOFDAY sLastTimeActive = g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[eSelectorChar] #endif #endif VECTOR vTestCreateCoords FLOAT fTestCreateHead enumBlockedPedCoordZone eTestCreateZone IF Is_Ped_Last_Known_Coords_In_Blocked_Zone(vLastKnownCoords, vTestCreateCoords, fTestCreateHead, eTestCreateZone) #IF NOT IS_NEXTGEN_BUILD PRINTLN("PRIVATE_Should_Default_PedTo_Coord_Move: vLastKnownCoords ", vLastKnownCoords, " inside invalid zone \"", eTestCreateZone, "\", move to ", vTestCreateCoords, ", dist: ", VDIST(vCreateCoords, vTestCreateCoords), "m") #ENDIF #IF IS_NEXTGEN_BUILD CPRINTLN(DEBUG_SWITCH, "PRIVATE_Should_Default_PedTo_Coord_Move: vLastKnownCoords ", vLastKnownCoords, " inside invalid \"", eTestCreateZone, "\", move to ", vTestCreateCoords, ", dist: ", VDIST(vCreateCoords, vTestCreateCoords), "m") #ENDIF vCreateCoords = vTestCreateCoords fCreateHead = fTestCreateHead RETURN TRUE ENDIF IF Is_TIMEOFDAY_Valid(sLastTimeActive) FLOAT fCreateDistMultiplier SWITCH PRIVATE_GetRoamingLastKnownSwitchStage(eSelectorChar, sLastTimeActive, fCreateDistMultiplier) CASE 0 // #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.1 - as was (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.1 - as was (phase:", fCreateDistMultiplier, ")") RETURN FALSE BREAK CASE 1 IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_a, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_a fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_a #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.33 - walk A (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.33 - walk A (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ELSE IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_a, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_a fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_a #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.33 - vehicle A (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.33 - vehicle A (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ENDIF BREAK CASE 2 IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_b, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_b fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_b #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.66 - walk B (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.66 - walk B (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ELSE IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_b, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_b fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_b #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.66 - vehicle B (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.66 - vehicle B (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ENDIF BREAK CASE 3 IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_c, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_c fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_c #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 1.0 - walk C (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 1.0 - walk C (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ELSE IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_c, <<0,0,0>>, 1.5) vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_c fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_c #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 1.0 - vehicle C (phase:") SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier) SAVE_STRING_TO_DEBUG_FILE(")") SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 1.0 - vehicle C (phase:", fCreateDistMultiplier, ")") RETURN TRUE ENDIF ENDIF BREAK DEFAULT CASSERTLN(DEBUG_SWITCH, "unknown PRIVATE_GetRoamingLastKnownSwitchStage") BREAK ENDSWITCH CPRINTLN(DEBUG_SWITCH, "fallen through PRIVATE_Should_Default_PedTo_Coord_Move(phase:", fCreateDistMultiplier, ", PTVS_", ENUM_TO_INT(g_ePlayerLastVehState[eSelectorChar]), "_something)???") RETURN FALSE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Should_PedTo_Be_Created(PED_SCENE_STRUCT &sPedScene, BOOL InHereAsNoCHARACTER = FALSE) enumCharacterList eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed) IF IS_PED_INJURED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) #IF IS_DEBUG_BUILD IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- exists") ELSE MODEL_NAMES model = GET_PLAYER_PED_MODEL(sPedScene.ePed) IF HAS_MODEL_LOADED(model) CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- doesnt exist [", sPedScene.vCreateCoords, "] model \"", GET_MODEL_NAME_FOR_DEBUG(model), "\" loaded") ELSE CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- doesnt exist [", sPedScene.vCreateCoords, "] model \"", GET_MODEL_NAME_FOR_DEBUG(model), "\" NOT loaded!!!") ENDIF ENDIF #ENDIF IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ELSE #if USE_CLF_DLC TIMEOFDAY sLastTimeActive = g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed] #endif #if USE_NRM_DLC TIMEOFDAY sLastTimeActive = g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed] #endif #if not USE_CLF_DLC #if not USE_NRM_DLC TIMEOFDAY sLastTimeActive = g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed] #endif #endif IF NOT IS_SPHERE_VISIBLE(sPedScene.vCreateCoords, 3.0) ELSE CPRINTLN(DEBUG_SWITCH, "vCreateCoords [", sPedScene.vCreateCoords) IF Is_TIMEOFDAY_Valid(sLastTimeActive) INT iSeconds, iMinutes, iHours, iDays, iMonths, iYears GET_DIFFERENCE_BETWEEN_NOW_AND_TIMEOFDAY(sLastTimeActive, iSeconds, iMinutes, iHours, iDays, iMonths, iYears) FLOAT fCreateDistMultiplier = -1 IF HasNumOfHoursPassedSincePedTimeStruct(sLastTimeActive, g_iCONST_GAME_HOURS_FOR_DEFAULT_SWITCH) CPRINTLN(DEBUG_SWITCH, " HasNumOfHoursPassedSincePedTimeStruct (", iHours, "hr ", iMinutes, "min ", iSeconds, "sec ", iDays, "/", iMonths, "/", iYears, ")") fCreateDistMultiplier = 1.0 ELSE CPRINTLN(DEBUG_SWITCH, " NOT HasNumOfHoursPassedSincePedTimeStruct (", iHours, "hr ", iMinutes, "min ", iSeconds, "sec ", iDays, "/", iMonths, "/", iYears, ")") fCreateDistMultiplier = TO_FLOAT(iSeconds+(iMinutes*60)+(iHours*60*60)) / 3600.0 IF (fCreateDistMultiplier < 0.0) fCreateDistMultiplier = 0.0 ENDIF IF (fCreateDistMultiplier > 1.0) fCreateDistMultiplier = 1.0 ENDIF ENDIF CPRINTLN(DEBUG_SWITCH, " fMult: ", fCreateDistMultiplier) CONST_FLOAT fMinDist 10.0 CONST_FLOAT fMaxDist 100.0 FLOAT fCreateDistRadius =((fMaxDist-fMinDist)*fCreateDistMultiplier)+fMinDist CPRINTLN(DEBUG_SWITCH, " fRadius: ", fCreateDistRadius) INT iSafeCoordCount = 0 WHILE iSafeCoordCount < 5 DRAW_DEBUG_SPHERE(sPedScene.vCreateCoords, fCreateDistRadius, 255, 0, 0, 064) VECTOR vRandomCreateCoords = GET_RANDOM_POINT_IN_DISC(sPedScene.vCreateCoords, fCreateDistRadius, 0) VECTOR vSafeCreateCoords = vRandomCreateCoords IF GET_SAFE_COORD_FOR_PED(vRandomCreateCoords, FALSE, vSafeCreateCoords, GSC_FLAG_ONLY_NETWORK_SPAWN) IF NOT IS_SPHERE_VISIBLE(vSafeCreateCoords, 3.0) FLOAT fSafeCreateCoord_groundZ = 0.0 IF GET_GROUND_Z_FOR_3D_COORD(vSafeCreateCoords, fSafeCreateCoord_groundZ) DRAW_DEBUG_SPHERE(vSafeCreateCoords, 0.5, 255, 0, 255, 255) vSafeCreateCoords.z = fSafeCreateCoord_groundZ VECTOR vCreateCoordDiff = sPedScene.vCreateCoords - vSafeCreateCoords sPedScene.vCreateCoords = vSafeCreateCoords sPedScene.fCreateHead = GET_HEADING_FROM_VECTOR_2D(vCreateCoordDiff.x, vCreateCoordDiff.y) iSafeCoordCount = 99 CPRINTLN(DEBUG_SWITCH, "vCreateCoords = vSafeCreateCoords??") ENDIF ELSE DRAW_DEBUG_SPHERE(vSafeCreateCoords, 0.5, 255, 0, 255, 255) ENDIF ELSE DRAW_DEBUG_SPHERE(vRandomCreateCoords, 0.5, 0, 255, 255, 255) ENDIF CPRINTLN(DEBUG_SWITCH, "iSafeCoordCount: ", iSafeCoordCount) iSafeCoordCount++ ENDWHILE ELSE CPRINTLN(DEBUG_SWITCH, " NOT Is_TIMEOFDAY_Valid") ENDIF ENDIF ENDIF CPRINTLN(DEBUG_SWITCH, "") ENDIF IF InHereAsNoCHARACTER = TRUE IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) SET_ENTITY_COORDS(PLAYER_PED_ID(), sPedScene.vCreateCoords, FALSE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] PRIVATE_Should_PedTo_Be_Created - InHereAsNoCHARACTER = TRUE Player is still the NO_CHARACTER ped. Moving the player to be close to the scene. ", sPedScene.vCreateCoords, " ") #ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] PRIVATE_Should_PedTo_Be_Created - InHereAsNoCHARACTER = FALSE ", sPedScene.vCreateCoords, " ") #ENDIF ENDIF RETURN TRUE ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "NOT Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "]") #ENDIF STORE_VEH_DATA_FROM_PED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], g_sPlayerLastVeh[eSelectorChar], g_vPlayerLastVehCoord[eSelectorChar], g_fPlayerLastVehHead[eSelectorChar], g_ePlayerLastVehState[eSelectorChar] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eSelectorChar] #ENDIF ) RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Should_straightInterp_Be_Used(PED_SCENE_STRUCT &sPedScene) VECTOR vPedPos = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo) VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) FLOAT fPedDist2D = GET_DISTANCE_BETWEEN_COORDS(vPlayerPos, vPedPos, FALSE) FLOAT fPedDist3D = GET_DISTANCE_BETWEEN_COORDS(vPlayerPos, vPedPos, TRUE) // // Determine what type of cam we will use // IF eInterpType = SELECTOR_CAM_DEFAULT IF fPedDist3D < 8.0 RETURN TRUE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_STRAIGHT_INTERP ELIF fPedDist2D < 30.0 RETURN FALSE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_SHORT_SPLINE ELSE RETURN FALSE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_LONG_SPLINE ENDIF // ELSE // sPedScene.sSelectorCam.camType = eInterpType // ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_SetPlayerPedWanted(PED_SCENE_STRUCT &sPedScene) IF NOT IS_PLAYER_PLAYING(PLAYER_ID()) RETURN FALSE ENDIF UPDATE_WANTED_POSITION_THIS_FRAME(PLAYER_ID()) SWITCH sPedScene.eScene CASE PR_SCENE_M_DEFAULT CASE PR_SCENE_F_DEFAULT CASE PR_SCENE_T_DEFAULT RESTORE_PLAYER_PED_WANTED(PLAYER_PED_ID()) RETURN TRUE BREAK CASE PR_SCENE_T_CR_POLICE_a CASE PR_SCENE_T_CN_POLICE_b CASE PR_SCENE_T_CN_POLICE_c CONST_INT iSCENE_WANTED_LEVEL 2 //3 SET_PLAYER_WANTED_LEVEL_NO_DROP(PLAYER_ID(), iSCENE_WANTED_LEVEL) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) CPRINTLN(DEBUG_SWITCH, " * set wanted level on players vehicle") RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD IF IS_PED_INJURED(PLAYER_PED_ID()) TEXT_LABEL_63 sDead sDead = "PRIVATE_SetPlayerPedWanted: " sDead += Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) sDead += " health: " sDead += GET_ENTITY_HEALTH(PLAYER_PED_ID()) CASSERTLN(DEBUG_SWITCH, sDead) ENDIF #ENDIF CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) RETURN FALSE BREAK ENDSWITCH RETURN FALSE ENDFUNC VECTOR vTOD_cam_from = <<0,0,0>>, vTOD_cam_to = <<0,0,0>> INT iTOD_cam_gametime = -1 FUNC BOOL PRIVATE_SetPhaseTimeForNewSwitchCam(PED_SCENE_STRUCT &sPedScene, FLOAT &fSwitchPhase) VECTOR vPedFrom_coord = vTOD_cam_from VECTOR vPedTo_coord = vTOD_cam_to IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedFrom) vTOD_cam_from = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom) vPedFrom_coord = vTOD_cam_from ENDIF IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedTo) vTOD_cam_to = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo) vPedTo_coord = vTOD_cam_to ENDIF VECTOR vRendering_coord = GET_FINAL_RENDERED_CAM_COORD() //GET_CAM_COORD(GET_RENDERING_CAM()) FLOAT fFromTo_dist = GET_DISTANCE_BETWEEN_COORDS(vPedFrom_coord, vPedTo_coord, FALSE) FLOAT fFromRend_dist = GET_DISTANCE_BETWEEN_COORDS(vPedFrom_coord, vRendering_coord, FALSE) fSwitchPhase = fFromRend_dist / fFromTo_dist IF fSwitchPhase < 0 fSwitchPhase = 0 ENDIF IF fSwitchPhase > 1 fSwitchPhase = 1 ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_SetPhaseTimeForMpSwitchCam(FLOAT &fSwitchPhase, FLOAT time = 5.0) INT iGameTime = GET_GAME_TIMER() IF iTOD_cam_gametime = -1 iTOD_cam_gametime = iGameTime ENDIF INT iGameTimeDiff = iGameTime - iTOD_cam_gametime fSwitchPhase = TO_FLOAT(iGameTimeDiff) / (time*1000.0) IF fSwitchPhase < 0 fSwitchPhase = 0 ENDIF IF fSwitchPhase > 1 fSwitchPhase = 1 ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_SetClockTimeForSwitchScene(PED_SCENE_STRUCT &sPedScene) #if USE_CLF_DLC UNUSED_PARAMETER(sPedScene) #endif #if USE_NRM_DLC UNUSED_PARAMETER(sPedScene) #endif #if not USE_CLF_DLC #if not USE_NRM_DLC PED_REQUEST_SCENE_ENUM eScene = sPedScene.eScene sPedScene.sTimelapse.splineCamera = sPedScene.sSelectorCam.camID FLOAT fForceCameraPhase SWITCH eScene #IF NOT IS_JAPANESE_BUILD CASE PR_SCENE_T_SHIT IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(19, 0, "EXTRASUNNY", "Cirrus", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK #ENDIF CASE PR_SCENE_F_MD_KUSH_DOC IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(9, 0, "Overcast", "RAIN", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK CASE PR_SCENE_M_MD_FBI2 IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(19, 45, "SMOG", "Wispy", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK CASE PR_SCENE_M4_EXITRESTAURANT IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(22, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK CASE PR_SCENE_T_NAKED_ISLAND IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(18, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK CASE PR_SCENE_F_MD_FRANKLIN2 IF g_bMagDemoActive IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(22, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ENDIF BREAK CASE PR_SCENE_M_S_FAMILY4 IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) INT iLapseStartHour, iLapseEndHour GET_SP_MISSION_TOD_WINDOW_TIME(SP_MISSION_FAMILY_4, iLapseEndHour, iLapseStartHour) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iLapseStartHour, 0, "", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF BREAK CASE PR_SCENE_F_S_EXILE2 IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) INT iLapseStartHour, iLapseEndHour GET_SP_MISSION_TOD_WINDOW_TIME(SP_MISSION_EXILE_2, iLapseEndHour, iLapseStartHour) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iLapseStartHour, 0, "", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF BREAK // CASE PR_SCENE_F_S_AGENCY_2A // IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase) // RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(9, 0, "", "", sPedScene.sTimelapse.iTimelapseCut) // ENDIF // BREAK ENDSWITCH IF IS_TIMEOFDAY_VALID(g_sMultiplayerTransitionTOD) INT iHour = GET_TIMEOFDAY_HOUR(g_sMultiplayerTransitionTOD) INT iMinute = GET_TIMEOFDAY_MINUTE(g_sMultiplayerTransitionTOD) STRING tWeatherType = "" STRING tCloudHat = "" IF NOT IS_WEATHER_SAFE_FOR_SP() CASSERTLN(DEBUG_SWITCH, "PRIVATE_SetClockTimeForSwitchScene - unsafe weather for MP transition!!!") tWeatherType = "SMOG" ENDIF IF PRIVATE_SetPhaseTimeForMpSwitchCam(fForceCameraPhase, 5.0) RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iHour, iMinute, tWeatherType, tCloudHat, sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0) ENDIF ELSE IF NOT IS_WEATHER_SAFE_FOR_SP() CASSERTLN(DEBUG_SWITCH, "PRIVATE_SetClockTimeForSwitchScene - unsafe weather for SP transition???") ENDIF ENDIF #endif #endif RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_UpdateDrunkenPeds() Make_Ped_Sober(PLAYER_PED_ID()) Quit_Drunk_Camera_Immediately() RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_UpdateLastSceneQueueCLF(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene) INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1 WHILE (iRevQueue > 0) g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1] iRevQueue-- ENDWHILE g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene INT iOneOffBit IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit) SET_BIT(g_savedGlobalsClifford.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit) ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_UpdateLastSceneQueueNRM(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene) INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1 WHILE (iRevQueue > 0) g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1] iRevQueue-- ENDWHILE g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene INT iOneOffBit IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit) SET_BIT(g_savedGlobalsnorman.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit) ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_UpdateLastSceneQueue(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene) #if USE_CLF_DLC if g_bLoadedClifford return PRIVATE_UpdateLastSceneQueueCLF(ePed,eScene) endif #endif #if USE_NRM_DLC if g_bLoadedNorman return PRIVATE_UpdateLastSceneQueueNRM(ePed,eScene) endif #endif INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1 WHILE (iRevQueue > 0) g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1] iRevQueue-- ENDWHILE g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene INT iOneOffBit IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit) SET_BIT(g_SavedGlobals.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit) ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_UpdateChainedPostMissionSwitch(enumCharacterList ePed) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY6) UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_MICHAEL, PR_SCENE_Ma_FAMILY6) RETURN TRUE ENDIF IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEC) UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_MICHAEL, PR_SCENE_Ma_FINALEC) UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_FRANKLIN, PR_SCENE_Fa_FINALEC) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_UpdatePostMissionSwitch(enumCharacterList ePed) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_ARM3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_ARM3) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_ARM3) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_FAM1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_FAM1) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_FAM3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_FAM3) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FAMILY1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FAMILY3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI1) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4intro) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI4intro) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI4) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI5) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI5) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI5) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY4_a) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY4_b) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY4) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_NICE1B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCYprep1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY3B) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_AGENCY2A) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_AGENCY3A) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_CARSTEAL1) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_CARSTEAL1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL2) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL4) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI4) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_DOCKS2B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY6) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEprepD) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY6) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MARTIN1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_TREVOR3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_TREVOR3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FRANKLIN2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FRANKLIN2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI1end) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_MARTIN1) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_MARTIN1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_RURAL2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_RURAL2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_RC_MRSP2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_RURAL1) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_NICE2B) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_NICE2B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1a) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1b) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1c) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1d) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1e) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FRANKLIN2) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FRANKLIN2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_EXILE2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_EXILE2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_EXILE3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_EXILE3) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_MICHAEL2) // OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MICHAEL2) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MICHAEL3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_MICHAEL3) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_DOCKS2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_DOCKS2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALE1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL4) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALE2intro) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2intro) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_DOCKS2B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE1) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY3A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2A) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE2B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2B) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEA) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEB) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALEC) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEC) OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEC) // TREVOR 3 IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_TREVOR3) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_TREVOR3) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_TREVOR3) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_TREVOR3) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // FRANKLIN 2 IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FRANKLIN2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FRANKLIN2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FRANKLIN2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FRANKLIN2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // EXILE 2 IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_EXILE2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_EXILE2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_EXILE2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_EXILE2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // CAR STEAL 1 IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_CARSTEAL1) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_CARSTEAL1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_CARSTEAL1) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_CARSTEAL1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FRANKLIN 1 IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1a // OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1b OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1c OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1d OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1e) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1a // OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1b OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1c OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1d OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1e) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1a // OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1b OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1c OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1d OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1e) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1a // OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1b OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1c OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1d OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1e) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FBI 4 intro IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4intro) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI4intro) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI4intro) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4intro) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FBI 4 IF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI4) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI4) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ENDIF // FBI 5 IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI5) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI5) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI5) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI5) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // RURAL HEIST 2A IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_RURAL2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_RURAL2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_RURAL2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_RURAL2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FBI 2 IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI2) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI2) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FINALE HEIST 2 intro IF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE2intro) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2intro) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2intro) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE2intro) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF // FINALE HEIST 2A IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // FINALE HEIST 2B IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2B) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2B) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2B) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2B) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // FINALE C IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALEC) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALEC) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALEC) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALEC) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // MICHAEL 3 IF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_MICHAEL3) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_MICHAEL3) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_MICHAEL3) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_MICHAEL3) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ENDIF // DOCKS 2a IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2A) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2A) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // DOCKS 2b IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2B) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2B) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2B) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2B) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF ENDIF // FINALE 1 IF (ePed = CHAR_MICHAEL) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_FRANKLIN) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID ENDIF ElIF (ePed = CHAR_TREVOR) AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1) IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID ENDIF IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1) CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN]) g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID ENDIF ENDIF g_ePostFranklin1Switch = POST_FRANKLIN1_NULL g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_INVALID RETURN TRUE ENDIF g_ePostFranklin1Switch = POST_FRANKLIN1_NULL RETURN FALSE ENDFUNC FUNC BOOL RequestAnimDictForTimetableExitSceneCam(PED_REQUEST_SCENE_ENUM ePedScene) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) TEXT_LABEL_63 tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut ANIMATION_FLAGS playerAnimLoopFlag, playerAnimOutFlag //enumPlayerSceneAnimProgress ePlayerSceneAnimProgress IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(ePedScene, tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut, playerAnimLoopFlag, playerAnimOutFlag)// , ePlayerSceneAnimProgress) REQUEST_ANIM_DICT(tPlayerAnimDict) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL RemoveAnimDictForTimetableExitSceneCam(PED_REQUEST_SCENE_ENUM ePedScene) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) TEXT_LABEL_63 tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut ANIMATION_FLAGS playerAnimLoopFlag, playerAnimOutFlag //enumPlayerSceneAnimProgress ePlayerSceneAnimProgress IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(ePedScene, tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut, playerAnimLoopFlag, playerAnimOutFlag) //, ePlayerSceneAnimProgress) REMOVE_ANIM_DICT(tPlayerAnimDict) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_UpdateSwitchFriendTimer(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene) IF SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene) enumCharacterList ePlayerPed = sPedScene.ePed enumCharacterList eFriendPed = sPassedScene.eSceneBuddy IF eFriendPed < CHAR_BLANK_ENTRY IF ARE_CHARS_FRIENDS(ePlayerPed, eFriendPed) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "reset switch friend face timer(", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(ePlayerPed)), ", ", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(eFriendPed)), ")") #ENDIF enumFriendContactType contactType = FRIEND_CONTACT_FACE RESET_FRIEND_LAST_CONTACT_TIMER(ePlayerPed, eFriendPed, contactType) RETURN TRUE ENDIF ELSE TEXT_LABEL tVoiceID TEXT_LABEL tBuddyVoiceID TEXT_LABEL tSceneSpeechBlock TEXT_LABEL tSceneSpeechLabel FLOAT fSceneSpeechPhase IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sPedScene.eScene, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) SWITCH GET_HASH_KEY(tBuddyVoiceID) CASE HASH("AMANDA") eFriendPed = CHAR_AMANDA BREAK CASE HASH("LAMAR") eFriendPed = CHAR_LAMAR BREAK DEFAULT RETURN FALSE BREAK ENDSWITCH IF ARE_CHARS_FRIENDS(ePlayerPed, eFriendPed) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "reset switch friend phone timer(", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(ePlayerPed)), ", ", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(eFriendPed)), ")") #ENDIF enumFriendContactType contactType = FRIEND_CONTACT_PHONE RESET_FRIEND_LAST_CONTACT_TIMER(ePlayerPed, eFriendPed, contactType) RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_PlayerHasStartedNewScene(PED_SCENE_STRUCT &sPedScene) IF NOT get_NOT_PlayerHasStartedNewScene() // ELSE RETURN TRUE ENDIF FLOAT fSelectorCamSplinePhase = -1 IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT) #IF NOT USE_TU_CHANGES fSelectorCamSplinePhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camID) #ENDIF #IF USE_TU_CHANGES fSelectorCamSplinePhase = TO_FLOAT(ENUM_TO_INT(GET_PLAYER_SWITCH_STATE())) / TO_FLOAT(ENUM_TO_INT(SWITCH_STATE_OUTRO)) #ENDIF ENDIF // TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE: ", tPlayerSceneSyncAnimCam, ", camID phase: ", fSelectorCamSplinePhase) #ENDIF IF fSelectorCamSplinePhase >= 1.0 RETURN TRUE ENDIF RETURN FALSE ENDIF // #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "sPedScene.sSelectorCam.camID phase: ", fSelectorCamSplinePhase) #ENDIF IF fSelectorCamSplinePhase >= 0.95 RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC PRIVATE_SET_Pause_Outro_Count(INT iNewPauseOnOutro) CPRINTLN(DEBUG_SWITCH, "PRIVATE_SET_Pause_Outro_Count: ", iNewPauseOnOutro, " (current:", g_iPauseOnOutro, ")") g_iPauseOnOutro = iNewPauseOnOutro ENDPROC PROC INCRAMENT_Pause_Outro_Count() PRIVATE_SET_Pause_Outro_Count(g_iPauseOnOutro+1) ENDPROC PROC DECRAMENT_Pause_Outro_Count() PRIVATE_SET_Pause_Outro_Count(g_iPauseOnOutro-1) ENDPROC PROC CLEAR_Pause_Outro_Count() PRIVATE_SET_Pause_Outro_Count(0) ENDPROC INT iRequestSwitchInterior_count = 0 /// PURPOSE: Processes the basic ped scene. /// This involves setting up a ped at the scene and then hotswapping to this ped. FUNC BOOL GENERIC_PED_SCENECLF(PED_SCENE_STRUCT &sPedScene, SceneGlobalFuncIndex customSetupSelectorCam, SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0) IF NOT sPedScene.sSelectorCam.bPedSwitched DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163 ENDIF //Is the global wait timer at 0? INT iGameTime = GET_GAME_TIMER() IF iGameTime >= g_iGlobalWaitTime - 1000 ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3) ENDIF CONST_INT CONST_SWITCH_0_requestSwitch 0 CONST_INT CONST_SWITCH_1_initialiseSwitch 1 CONST_INT CONST_SWITCH_2_waitForInterior 2 CONST_INT CONST_SWITCH_3_setupPedTo 3 CONST_INT CONST_SWITCH_4_runCodeCam 4 CONST_INT CONST_TEST_SWITCH_5 5 CONST_INT CONST_TEST_SWITCH_6 6 PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene VECTOR vPedAreaOffset = <<5,5,4>> // // // // // // stage 0: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch) m_enumMissionCandidateReturnValue eLaunchRequest eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID, MCTID_MUST_LAUNCH, MISSION_TYPE_SWITCH, TRUE) #IF IS_DEBUG_BUILD SWITCH eLaunchRequest CASE MCRET_DENIED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_ACCEPTED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_PROCESSING CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID) BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID) BREAK ENDSWITCH #ENDIF IF (eLaunchRequest = MCRET_ACCEPTED) STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1) sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch ENDIF IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) IF NOT (g_eRunningMission = SP_MISSION_NONE) IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME()) CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()") sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch ELSE CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()") ENDIF ELSE CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE") ENDIF ELSE CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch") ENDIF ENDIF // // // // // // stage 1: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) sPedScene.sTimelapse.iTimelapseCut = 0 sPedScene.sTimelapse.iTimeSkipStage = 0 CLEAR_Pause_Outro_Count() sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed) IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom) DISABLE_CELLPHONE(TRUE) VECTOR vCreateCoords FLOAT fCreateHead IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead) #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ") SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF #IF IS_DEBUG_BUILD VECTOR vVehCoordsOffset vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] #ENDIF sPedScene.vCreateCoords = vCreateCoords sPedScene.fCreateHead = fCreateHead #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(" - ") SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead ENDIF #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_STRING_TO_DEBUG_FILE(" + ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF ENDIF g_eSelectedPlayerCharScene = (sPedScene.eScene) // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ELSE sPedScene.roomInterior = NULL ENDIF ENDIF #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE") ENDIF #ENDIF IF (sPedScene.roomInterior <> NULL) IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT) SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE) ENDIF RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene) VECTOR vecCamEndPos, vecCamEndRot FLOAT vecCamEndFov IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix TEXT_LABEL tRecording_name INT iRecording_num FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit TEXT_LABEL_23 tPlayerSceneProceduralCam IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num, fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit) OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE) SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos) SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot) SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov) // SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0) SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE) ENDIF ENDIF INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene" #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENECLF - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENECLF - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition") #ENDIF ENDIF // Found a suitable scene #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENECLF - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable") SaveSuitablePedSceneStructToSwitchLog(sPedScene) #ENDIF g_eRecentlySelectedScene = sPedScene.eScene enumCharacterList eCurrentPlayerPedEnum eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUMCLF() IF eCurrentPlayerPedEnum != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum]) FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0 IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF ENDIF STORE_VEH_DATA_FROM_PEDCLF(PLAYER_PED_ID(), g_sPlayerLastVeh[eCurrentPlayerPedEnum], g_vPlayerLastVehCoord[eCurrentPlayerPedEnum], g_fPlayerLastVehHead[eCurrentPlayerPedEnum], g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF ) SAFE_STORE_PLAYER_PED_INFOCLF(PLAYER_PED_ID(), FALSE) STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID()) ENDIF PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene) iRequestSwitchInterior_count = 0 g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER() SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0) REQUEST_MODEL(GET_PLAYER_PED_MODELCLF(sPedScene.ePed)) #IF IS_DEBUG_BUILD IF PRIVATE_Should_PedTo_Be_Created(sPedScene) WAIT(0) ENDIF #ENDIF sPedScene.iStage = CONST_SWITCH_3_setupPedTo ELSE // Can't find suitable scene so bail out #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable") #ENDIF RETURN TRUE ENDIF ENDIF // // // // // // stage 2: Wait For Interior // IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior) sPedScene.iStage = CONST_SWITCH_3_setupPedTo iRequestSwitchInterior_count++ REQUEST_MODEL(GET_PLAYER_PED_MODELCLF(sPedScene.ePed)) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...") #ENDIF // Make sure any interior is pinned before we proceed IF sPedScene.roomInterior <> NULL IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) sPedScene.iStage = CONST_SWITCH_2_waitForInterior IF iRequestSwitchInterior_count > 150 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", " //roomInterior:", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count) TEXT_LABEL_63 tScene, tAssert tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) tAssert = GET_STRING_FROM_STRING(tScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(tScene)) tAssert += " - timeout waiting for a non-null interior to be ready" CASSERTLN(DEBUG_SWITCH, tAssert) #ENDIF iRequestSwitchInterior_count = 0 // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ENDIF #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE") ENDIF #ENDIF sPedScene.iStage = CONST_SWITCH_3_setupPedTo ENDIF ENDIF ENDIF ENDIF // // // // // // stage 3: Setup Ped To // IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo) IF sPedScene.eScene = PR_SCENE_HOSPITAL enumCharacterList eSelectorChar eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed) #IF USE_TU_CHANGES IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar]) #ENDIF IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar]) SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF #IF USE_TU_CHANGES #IF IS_DEBUG_BUILD ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254") #ENDIF ENDIF #ENDIF sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL sPedScene.eScene = PR_SCENE_HOSPITAL ENDIF IF PRIVATE_Should_PedTo_Be_Created(sPedScene) // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)") // // MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0) // ENDIF // Make a dummy ped so we can run cam spline to them PED_VARIATION_STRUCT SVARIATIONS = g_savedGlobalsClifford.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED] IF CREATE_PLAYER_PED_ON_FOOTCLF(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT g_savedGlobalsClifford.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations ENDIF ENDIF PRELOAD_STORED_PLAYER_PED_VARIATIONCLF(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // Set invisible to avoid any popping issues IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) #IF IS_DEBUG_BUILD enumCreateState eCreateState IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState) CPRINTLN(DEBUG_SWITCH, "safe to create") ELSE SWITCH eCreateState CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK // CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU // CASE eCS_6_INVALID_LAST_KNOWN_COORDS // EXIT // BREAK CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "DON'T create ", ENUM_TO_INT(eCreateState)) BREAK ENDSWITCH ENDIF #ENDIF ELSE SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE) ENDIF // Freeze to avoid falling through the world FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE) // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene) sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - created player ped on foot for scene \"") CPRINTLN(DEBUG_SWITCH, Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords) #ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT INT iPreloadGametime IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = GET_GAME_TIMER() CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - start waiting for preload var") WHILE (iPreloadGametime+0500) < GET_GAME_TIMER() AND iPreloadGametime > 0 IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = -1 CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - gave up waiting for preload var") ENDIF WAIT(0) ENDWHILE IF NOT (iPreloadGametime = -1) CASSERTLN(DEBUG_SWITCH, "wait for ped var preload") ENDIF CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")") ENDIF ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) sPedScene.iStage = CONST_SWITCH_4_runCodeCam ENDIF ELSE sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907 SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE) ENDIF // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0) #IF IS_DEBUG_BUILD VECTOR vPedToCoord = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vPedToCoord) #ENDIF IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0) AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) // ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, " pedTo(", vPedToCoord, ") nowhere near vCreateCoords(", sPedScene.vCreateCoords, "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo))) CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n") SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords) SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead) #ENDIF ENDIF ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) sPedScene.iStage = CONST_SWITCH_4_runCodeCam ENDIF ENDIF // // // // // // stage 4: Run Code Cam // IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam) BOOL bCreateReplacementForPlayer, bKeepTasks bCreateReplacementForPlayer = FALSE bKeepTasks = FALSE SWITCH_TYPE eSwitchType eSwitchType = SWITCH_TYPE_AUTO FLOAT fGameplayCamPitch, fGameplayCamHeading fGameplayCamPitch = 0.0 fGameplayCamHeading = 0.0 BOOL bPauseBeforePan, bPauseBeforeOutro bPauseBeforePan = FALSE bPauseBeforeOutro = FALSE GetSplineCamFromPlayerToPedParams(sPedScene, bCreateReplacementForPlayer, bKeepTasks, eSwitchType, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags) #IF IS_DEBUG_BUILD TEXT_LABEL_63 sLiteral sLiteral = "" STRING sScene sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) HUD_COLOURS eHudColour eHudColour = HUD_COLOUR_PURE_WHITE #ENDIF IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.tCreateRoom = tPlayerSceneProceduralCam ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2) IF NOT bPauseBeforePan CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2") bPauseBeforePan = TRUE ENDIF ENDIF // Use a long spline so we can delete the current character and dont see the new character pop into place BOOL bRunning_switch_cam_from_player bRunning_switch_cam_from_player = FALSE IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to ped [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF bRunning_switch_cam_from_player = TRUE ENDIF ELSE // IF (g_fCamToPhase < 0) // g_fCamToPhase = 0 // ENDIF TEXT_LABEL_63 tEstabShot tEstabShot = sPedScene.tCreateRoom IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix) tEstabShot += tPlayerSceneEstabShotSuffix ENDIF ENDIF IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam, sPedScene.sSelectorCam.camTo, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, tEstabShot) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to cam [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF bRunning_switch_cam_from_player = TRUE ENDIF ENDIF #IF IS_DEBUG_BUILD IF g_bDrawLiteralSceneString SET_TEXT_SCALE(0.4, 0.4) SET_TEXT_HUD_COLOUR(eHudColour, 127) SET_TEXT_JUSTIFICATION(FONT_CENTRE) SET_TEXT_OUTLINE() DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral) ENDIF #ENDIF IF bRunning_switch_cam_from_player SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT IF g_bMagDemoActive eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN ENDIF IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT) eSwitchState = GET_PLAYER_SWITCH_STATE() IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) #IF USE_TU_CHANGES OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT)) #ENDIF IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0) IF (g_iPauseOnOutro > 0) IF (g_iPausedOnOutroGametime < 0) g_iPausedOnOutroGametime = GET_GAME_TIMER() ELSE CPRINTLN(DEBUG_SWITCH, " g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "] ", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) INT iMAX_PAUSED_ON_OUTRO_WAIT #IF NOT IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 10000 #ENDIF #IF IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 15000 #ENDIF IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5) ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5) ENDIF IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT) DECRAMENT_Pause_Outro_Count() #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro) IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT) //CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876") ELSE TEXT_LABEL_63 sBroke sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))) sBroke += " broke - held on jumpcut descent for " sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000 sBroke += "sec!" CASSERTLN(DEBUG_SWITCH, sBroke) ENDIF #ENDIF ALLOW_PLAYER_SWITCH_OUTRO() g_iPausedOnOutroGametime = -1 ENDIF ENDIF ENDIF ENDIF ENDIF ELSE //short range, eSwitchState = eSETUP_SCRIPT_SWITCH_STATE eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE ENDIF PRIVATE_SetClockTimeForSwitchScene(sPedScene) IF NOT IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN() IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT) CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.") DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT) IF (eSwitchState = SWITCH_STATE_PREP_DESCENT) CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) ENDIF ENDIF IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE) IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) IF NOT sPedScene.sSelectorCam.bPedSwitched IF sPedScene.sSelectorCam.bOKToSwitchPed AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE) BOOL bTakenControl = FALSE // IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH) // AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)) // // CPRINTLN(DEBUG_SWITCH, "<") // CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME()) // CPRINTLN(DEBUG_SWITCH, "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.") // // CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, " Skipping character switch and warping player to lead-in instead.") // SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords) // // bTakenControl = TRUE // ELSE IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks) CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null") bTakenControl = TRUE ENDIF // ENDIF IF bTakenControl IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE) ENDIF PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds) PRIVATE_SetClockTimeForSwitchScene(sPedScene) PRIVATE_UpdateDrunkenPeds() /* //#1189748 Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160 */ SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds sPedScene.sSelectorCam.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT) SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE) ENDIF IF g_b_NOT_PlayerHasStartedNewScene IF sPedScene.sSelectorCam.bPedSwitched IF PRIVATE_PlayerHasStartedNewScene(sPedScene) g_b_NOT_PlayerHasStartedNewScene = FALSE ENDIF ENDIF ENDIF ELSE // sPedScene.iStage = CONST_TEST_SWITCH_5 ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_5) IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo) IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo) //g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo) ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID) CLEAR_PED_NON_CREATION_AREA() ELSE IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID) DESTROY_CAM(sPedScene.sSelectorCam.camID) ENDIF IF sPedScene.sSelectorCam.iInterpCams > 0 INT iCamCount FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1 IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) ENDIF ENDFOR ENDIF IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled) ENDIF // Reset all the camera values incase they have to be used again sPedScene.sSelectorCam.bSplineCreated = FALSE sPedScene.sSelectorCam.bSplineActive = FALSE sPedScene.sSelectorCam.bSplineComplete = FALSE sPedScene.sSelectorCam.bOKToSwitchPed = FALSE sPedScene.sSelectorCam.bPedSwitched = FALSE sPedScene.sSelectorCam.bRun = FALSE sPedScene.sSelectorCam.iInterpCams = 0 // Set the relative heading/pitch if the calling scipt used a custom camera // SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch) IF NOT (g_drunkCameraActive) STOP_GAMEPLAY_CAM_SHAKING(TRUE) SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0) SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0) ENDIF RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE) SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE) SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE) SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE) ENDIF ENDIF SET_SKYSWOOP_STAGE(SKYSWOOP_NONE) // If we didnt switch players then reset the proofs IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedFrom, TRUE) ENDIF IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo) SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE) IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID()) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE) ENDIF ENDIF sPedScene.iStage = CONST_TEST_SWITCH_6 ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_6) IF sPedScene.roomInterior <> NULL UNPIN_INTERIOR(sPedScene.roomInterior) ENDIF // FADE_UP_PED_LIGHT(4.0) CLEAR_FOCUS() SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODELCLF(sPedScene.ePed)) enumCharacterList eCurrentPed eCurrentPed = GET_CURRENT_PLAYER_PED_ENUMCLF() IF eCurrentPed != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed]) IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed]) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF ENDIF MODEL_NAMES ePlayerLastVehModel ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT) SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel) ENDIF ENDIF PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed) IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_HOSPITAL) #IF IS_DEBUG_BUILD g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene) #ENDIF g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene) ENDIF IF sPedScene.eScene = PR_SCENE_HOSPITAL ResetLastKnownPedInfo(g_savedGlobalsClifford.sPlayerData.sInfo, SP_MISSION_NONE) ENDIF PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed) PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene) PRIVATE_SetPlayerPedWanted(sPedScene) RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene) CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD) CLEAR_TIMEOFDAY(g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed]) IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE") STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound) RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE") STOP_AUDIO_SCENE("TOD_SHIFT_SCENE") CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, " Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".") // CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active") ENDIF g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>> g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0 g_savedGlobalsClifford.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0 g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>> #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) // ELSE SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF ELSE IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" inside and null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF #ENDIF // PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF //g_fCamToPhase = -1 //g_bSwitchSplineCamInProgress = FALSE //play final stage of anim g_b_NOT_PlayerHasStartedNewScene = FALSE g_iPausedOnOutroGametime = -1 Mission_Over(sPedScene.iMissionID) IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(FALSE) ENDIF RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL GENERIC_PED_SCENENRM(PED_SCENE_STRUCT &sPedScene, SceneGlobalFuncIndex customSetupSelectorCam,SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0) IF NOT sPedScene.sSelectorCam.bPedSwitched DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163 ENDIF //Is the global wait timer at 0? INT iGameTime = GET_GAME_TIMER() IF iGameTime >= g_iGlobalWaitTime - 1000 ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3) ENDIF CONST_INT CONST_SWITCH_0_requestSwitch 0 CONST_INT CONST_SWITCH_1_initialiseSwitch 1 CONST_INT CONST_SWITCH_2_waitForInterior 2 CONST_INT CONST_SWITCH_3_setupPedTo 3 CONST_INT CONST_SWITCH_4_runCodeCam 4 CONST_INT CONST_TEST_SWITCH_5 5 CONST_INT CONST_TEST_SWITCH_6 6 PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene VECTOR vPedAreaOffset = <<5,5,4>> // // // // // // stage 0: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch) m_enumMissionCandidateReturnValue eLaunchRequest eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID, MCTID_MUST_LAUNCH, MISSION_TYPE_SWITCH, TRUE) #IF IS_DEBUG_BUILD SWITCH eLaunchRequest CASE MCRET_DENIED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_ACCEPTED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_PROCESSING CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID) BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID) BREAK ENDSWITCH #ENDIF IF (eLaunchRequest = MCRET_ACCEPTED) STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1) sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch ENDIF IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) IF NOT (g_eRunningMission = SP_MISSION_NONE) IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME()) CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()") sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch ELSE CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()") ENDIF ELSE CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE") ENDIF ELSE CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch") ENDIF ENDIF // // // // // // stage 1: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) sPedScene.sTimelapse.iTimelapseCut = 0 sPedScene.sTimelapse.iTimeSkipStage = 0 CLEAR_Pause_Outro_Count() sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed) IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom) DISABLE_CELLPHONE(TRUE) VECTOR vCreateCoords FLOAT fCreateHead IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead) #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ") SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF #IF IS_DEBUG_BUILD VECTOR vVehCoordsOffset vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] #ENDIF sPedScene.vCreateCoords = vCreateCoords sPedScene.fCreateHead = fCreateHead #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(" - ") SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead ENDIF #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_STRING_TO_DEBUG_FILE(" + ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF ENDIF g_eSelectedPlayerCharScene = (sPedScene.eScene) // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") #ENDIF IF (sPedScene.roomInterior <> NULL) IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT) SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE) ENDIF RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene) VECTOR vecCamEndPos, vecCamEndRot FLOAT vecCamEndFov IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix TEXT_LABEL tRecording_name INT iRecording_num FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit TEXT_LABEL_23 tPlayerSceneProceduralCam IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num, fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit) OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE) SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos) SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot) SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov) // SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0) SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE) ENDIF ENDIF INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene" #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENENRM - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENENRM - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition") #ENDIF ENDIF // Found a suitable scene #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENENRM - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable") SaveSuitablePedSceneStructToSwitchLog(sPedScene) #ENDIF g_eRecentlySelectedScene = sPedScene.eScene enumCharacterList eCurrentPlayerPedEnum eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUMNRM() IF eCurrentPlayerPedEnum != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum]) FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0 IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF ENDIF STORE_VEH_DATA_FROM_PEDNRM(PLAYER_PED_ID(), g_sPlayerLastVeh[eCurrentPlayerPedEnum], g_vPlayerLastVehCoord[eCurrentPlayerPedEnum], g_fPlayerLastVehHead[eCurrentPlayerPedEnum], g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF ) SAFE_STORE_PLAYER_PED_INFONRM(PLAYER_PED_ID(), FALSE) STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID()) ENDIF PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene) iRequestSwitchInterior_count = 0 g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER() SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0) REQUEST_MODEL(GET_PLAYER_PED_MODELNRM(sPedScene.ePed)) #IF IS_DEBUG_BUILD IF PRIVATE_Should_PedTo_Be_Created(sPedScene) WAIT(0) ENDIF #ENDIF sPedScene.iStage = CONST_SWITCH_3_setupPedTo ELSE // Can't find suitable scene so bail out #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable") #ENDIF RETURN TRUE ENDIF ENDIF // // // // // // stage 2: Wait For Interior // IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior) sPedScene.iStage = CONST_SWITCH_3_setupPedTo iRequestSwitchInterior_count++ REQUEST_MODEL(GET_PLAYER_PED_MODELNRM(sPedScene.ePed)) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...") #ENDIF // Make sure any interior is pinned before we proceed IF sPedScene.roomInterior <> NULL IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) sPedScene.iStage = CONST_SWITCH_2_waitForInterior IF iRequestSwitchInterior_count > 150 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count) TEXT_LABEL_63 tScene, tAssert tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) tAssert = GET_STRING_FROM_STRING(tScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(tScene)) tAssert += " - timeout waiting for a non-null interior to be ready" CASSERTLN(DEBUG_SWITCH, tAssert) #ENDIF iRequestSwitchInterior_count = 0 // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") #ENDIF sPedScene.iStage = CONST_SWITCH_3_setupPedTo ENDIF ENDIF ENDIF ENDIF // // // // // // stage 3: Setup Ped To // IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo) IF sPedScene.eScene = PR_SCENE_HOSPITAL enumCharacterList eSelectorChar eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed) #IF USE_TU_CHANGES IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar]) #ENDIF IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar]) SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF #IF USE_TU_CHANGES #IF IS_DEBUG_BUILD ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254") #ENDIF ENDIF #ENDIF sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL sPedScene.eScene = PR_SCENE_HOSPITAL ENDIF IF PRIVATE_Should_PedTo_Be_Created(sPedScene) PED_VARIATION_STRUCT SVARIATIONS = g_savedglobalsnorman.splayerdata.sinfo.svariations[spedscene.eselectorped] IF CREATE_PLAYER_PED_ON_FOOTNRM(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT g_savedGlobalsnorman.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations ENDIF ENDIF PRELOAD_STORED_PLAYER_PED_VARIATIONNRM(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // Set invisible to avoid any popping issues IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) #IF IS_DEBUG_BUILD enumCreateState eCreateState IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState) CPRINTLN(DEBUG_SWITCH, "safe to create") ELSE SWITCH eCreateState CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK // CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU // CASE eCS_6_INVALID_LAST_KNOWN_COORDS // EXIT // BREAK CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "DON'T create ") CPRINTLN(DEBUG_SWITCH, ENUM_TO_INT(eCreateState)) BREAK ENDSWITCH ENDIF #ENDIF ELSE SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE) ENDIF // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)") // // MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0) // ENDIF // Freeze to avoid falling through the world FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE) // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene) sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - created player ped on foot for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords) #ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT INT iPreloadGametime IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = GET_GAME_TIMER() CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - start waiting for preload var") WHILE (iPreloadGametime+0500) < GET_GAME_TIMER() AND iPreloadGametime > 0 IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = -1 CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - gave up waiting for preload var") ENDIF WAIT(0) ENDWHILE IF NOT (iPreloadGametime = -1) CASSERTLN(DEBUG_SWITCH, "wait for ped var preload") ENDIF CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")") ENDIF ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) sPedScene.iStage = CONST_SWITCH_4_runCodeCam ENDIF ELSE sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907 SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE) ENDIF // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0) #IF IS_DEBUG_BUILD VECTOR vpedToCoords = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vpedToCoords) #ENDIF IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0) AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) // ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, " pedTo(", vpedToCoords, ") nowhere near vCreateCoords(", "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo))) CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n") SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords) SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead) #ENDIF ENDIF ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) sPedScene.iStage = CONST_SWITCH_4_runCodeCam ENDIF ENDIF // // // // // // stage 4: Run Code Cam // IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam) BOOL bCreateReplacementForPlayer, bKeepTasks bCreateReplacementForPlayer = FALSE bKeepTasks = FALSE SWITCH_TYPE eSwitchType eSwitchType = SWITCH_TYPE_AUTO FLOAT fGameplayCamPitch, fGameplayCamHeading fGameplayCamPitch = 0.0 fGameplayCamHeading = 0.0 BOOL bPauseBeforePan, bPauseBeforeOutro bPauseBeforePan = FALSE bPauseBeforeOutro = FALSE GetSplineCamFromPlayerToPedParams(sPedScene, bCreateReplacementForPlayer, bKeepTasks, eSwitchType, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags) #IF IS_DEBUG_BUILD TEXT_LABEL_63 sLiteral sLiteral = "" STRING sScene sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) HUD_COLOURS eHudColour eHudColour = HUD_COLOUR_PURE_WHITE #ENDIF IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.tCreateRoom = tPlayerSceneProceduralCam ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2) IF NOT bPauseBeforePan CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2") bPauseBeforePan = TRUE ENDIF ENDIF // Use a long spline so we can delete the current character and dont see the new character pop into place BOOL bRunning_switch_cam_from_player bRunning_switch_cam_from_player = FALSE IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to ped [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF bRunning_switch_cam_from_player = TRUE ENDIF ELSE // IF (g_fCamToPhase < 0) // g_fCamToPhase = 0 // ENDIF TEXT_LABEL_63 tEstabShot tEstabShot = sPedScene.tCreateRoom IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix) tEstabShot += tPlayerSceneEstabShotSuffix ENDIF ENDIF IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam, sPedScene.sSelectorCam.camTo, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, tEstabShot) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to cam [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF bRunning_switch_cam_from_player = TRUE ENDIF ENDIF #IF IS_DEBUG_BUILD IF g_bDrawLiteralSceneString SET_TEXT_SCALE(0.4, 0.4) SET_TEXT_HUD_COLOUR(eHudColour, 127) SET_TEXT_JUSTIFICATION(FONT_CENTRE) SET_TEXT_OUTLINE() DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral) ENDIF #ENDIF IF bRunning_switch_cam_from_player SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT IF g_bMagDemoActive eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN ENDIF IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT) eSwitchState = GET_PLAYER_SWITCH_STATE() IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) #IF USE_TU_CHANGES OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT)) #ENDIF IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0) IF (g_iPauseOnOutro > 0) IF (g_iPausedOnOutroGametime < 0) g_iPausedOnOutroGametime = GET_GAME_TIMER() ELSE CPRINTLN(DEBUG_SWITCH, " g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "]", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) INT iMAX_PAUSED_ON_OUTRO_WAIT #IF NOT IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 10000 #ENDIF #IF IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 12500 #ENDIF IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5) ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5) ENDIF IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT) DECRAMENT_Pause_Outro_Count() #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro) IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT) //CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876") ELSE TEXT_LABEL_63 sBroke sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))) sBroke += " broke - held on jumpcut descent for " sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000 sBroke += "sec!" CASSERTLN(DEBUG_SWITCH, sBroke) ENDIF #ENDIF ALLOW_PLAYER_SWITCH_OUTRO() g_iPausedOnOutroGametime = -1 ENDIF ENDIF ENDIF ENDIF ENDIF ELSE //short range, eSwitchState = eSETUP_SCRIPT_SWITCH_STATE eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE ENDIF PRIVATE_SetClockTimeForSwitchScene(sPedScene) IF NOT IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN() IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT) CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.") DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT) IF (eSwitchState = SWITCH_STATE_PREP_DESCENT) CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) ENDIF ENDIF IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE) IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) IF NOT sPedScene.sSelectorCam.bPedSwitched IF sPedScene.sSelectorCam.bOKToSwitchPed AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE) BOOL bTakenControl = FALSE // IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH) // AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)) // // CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.") // // CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, " Skipping character switch and warping player to lead-in instead.") // SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords) // // bTakenControl = TRUE // ELSE IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks) CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null") bTakenControl = TRUE ENDIF // ENDIF IF bTakenControl IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE) ENDIF PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds) PRIVATE_SetClockTimeForSwitchScene(sPedScene) PRIVATE_UpdateDrunkenPeds() /* //#1189748 Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160 */ SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds sPedScene.sSelectorCam.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT) SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE) ENDIF IF g_b_NOT_PlayerHasStartedNewScene IF sPedScene.sSelectorCam.bPedSwitched IF PRIVATE_PlayerHasStartedNewScene(sPedScene) g_b_NOT_PlayerHasStartedNewScene = FALSE ENDIF ENDIF ENDIF ELSE // sPedScene.iStage = CONST_TEST_SWITCH_5 ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_5) IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo) IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo) //g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo) ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID) CLEAR_PED_NON_CREATION_AREA() ELSE IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID) DESTROY_CAM(sPedScene.sSelectorCam.camID) ENDIF IF sPedScene.sSelectorCam.iInterpCams > 0 INT iCamCount FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1 IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) ENDIF ENDFOR ENDIF IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled) ENDIF // Reset all the camera values incase they have to be used again sPedScene.sSelectorCam.bSplineCreated = FALSE sPedScene.sSelectorCam.bSplineActive = FALSE sPedScene.sSelectorCam.bSplineComplete = FALSE sPedScene.sSelectorCam.bOKToSwitchPed = FALSE sPedScene.sSelectorCam.bPedSwitched = FALSE sPedScene.sSelectorCam.bRun = FALSE sPedScene.sSelectorCam.iInterpCams = 0 // Set the relative heading/pitch if the calling scipt used a custom camera // SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch) IF NOT (g_drunkCameraActive) STOP_GAMEPLAY_CAM_SHAKING(TRUE) SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0) SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0) ENDIF RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE) SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE) SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE) SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE) ENDIF ENDIF SET_SKYSWOOP_STAGE(SKYSWOOP_NONE) // If we didnt switch players then reset the proofs IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedFrom, TRUE) ENDIF IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo) SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE) IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID()) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE) ENDIF ENDIF sPedScene.iStage = CONST_TEST_SWITCH_6 ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_6) IF sPedScene.roomInterior <> NULL UNPIN_INTERIOR(sPedScene.roomInterior) ENDIF // FADE_UP_PED_LIGHT(4.0) CLEAR_FOCUS() SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODELNRM(sPedScene.ePed)) enumCharacterList eCurrentPed eCurrentPed = GET_CURRENT_PLAYER_PED_ENUMNRM() IF eCurrentPed != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed]) IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed]) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF ENDIF MODEL_NAMES ePlayerLastVehModel ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT) SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel) ENDIF ENDIF PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed) IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_HOSPITAL) #IF IS_DEBUG_BUILD g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene) #ENDIF g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene) ENDIF IF sPedScene.eScene = PR_SCENE_HOSPITAL ResetLastKnownPedInfo(g_savedGlobalsnorman.sPlayerData.sInfo, SP_MISSION_NONE) ENDIF PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed) PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene) PRIVATE_SetPlayerPedWanted(sPedScene) RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene) CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD) CLEAR_TIMEOFDAY(g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed]) IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE") STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound) RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE") STOP_AUDIO_SCENE("TOD_SHIFT_SCENE") CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, " Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".") // CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active") ENDIF g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>> g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0 g_savedGlobalsnorman.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0 g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>> #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) // ELSE SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF ELSE IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" inside and null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF #ENDIF // PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF //g_fCamToPhase = -1 //g_bSwitchSplineCamInProgress = FALSE //play final stage of anim g_b_NOT_PlayerHasStartedNewScene = FALSE g_iPausedOnOutroGametime = -1 Mission_Over(sPedScene.iMissionID) IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(FALSE) ENDIF RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC STRING GET_GENERIC_PED_SCENE_STAGE_STRING(INT iStage) STRING sStage = "NULL" SWITCH iStage CASE 0 sStage = "CONST_SWITCH_0_requestSwitch" BREAK CASE 1 sStage = "CONST_SWITCH_1_initialiseSwitch" BREAK CASE 2 sStage = "CONST_SWITCH_2_waitForInterior" BREAK CASE 3 sStage = "CONST_SWITCH_3_setupPedTo" BREAK CASE 4 sStage = "CONST_SWITCH_4_runCodeCam" BREAK CASE 5 sStage = "CONST_TEST_SWITCH_5" BREAK CASE 6 sStage = "CONST_TEST_SWITCH_6" BREAK ENDSWITCH RETURN sStage ENDFUNC PROC SET_GENERIC_PED_SCENE_STAGE(PED_SCENE_STRUCT &sPedScene, INT iStage) IF (sPedScene.iStage != iStage) sPedScene.iStage = iStage PRINTLN("GENERIC_PED_SCENE - SET_GENERIC_PED_SCENE_STAGE - Setting sPedScene.iStage: ", GET_GENERIC_PED_SCENE_STAGE_STRING(iStage)) ENDIF ENDPROC FUNC BOOL GENERIC_PED_SCENE(PED_SCENE_STRUCT &sPedScene, SceneGlobalFuncIndex customSetupSelectorCam, SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0) IF NOT sPedScene.sSelectorCam.bPedSwitched DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163 ENDIF //Is the global wait timer at 0? INT iGameTime = GET_GAME_TIMER() IF iGameTime >= g_iGlobalWaitTime - 1000 ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3) ENDIF // Update GET_GENERIC_PED_SCENE_STAGE_STRING if changed CONST_INT CONST_SWITCH_0_requestSwitch 0 CONST_INT CONST_SWITCH_1_initialiseSwitch 1 CONST_INT CONST_SWITCH_2_waitForInterior 2 CONST_INT CONST_SWITCH_3_setupPedTo 3 CONST_INT CONST_SWITCH_4_runCodeCam 4 CONST_INT CONST_TEST_SWITCH_5 5 CONST_INT CONST_TEST_SWITCH_6 6 PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene VECTOR vPedAreaOffset = <<5,5,4>> // // // // // // stage 0: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch) m_enumMissionCandidateReturnValue eLaunchRequest eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID, MCTID_MUST_LAUNCH, MISSION_TYPE_SWITCH, TRUE) #IF IS_DEBUG_BUILD SWITCH eLaunchRequest CASE MCRET_DENIED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_ACCEPTED CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID) BREAK CASE MCRET_PROCESSING CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID) BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID) BREAK ENDSWITCH #ENDIF IF (eLaunchRequest = MCRET_ACCEPTED) STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1) SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch) ENDIF IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) IF NOT (g_eRunningMission = SP_MISSION_NONE) IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME()) CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()") SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch) ELSE CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()") ENDIF #if not USE_CLF_DLC #if not USE_NRM_DLC ELIF Get_RC_MissionID_For_This_Script() = RC_MRS_PHILIPS_2 CPRINTLN(DEBUG_SWITCH, "Get_RC_MissionID_For_This_Script() = RC_MRS_PHILIPS_2") SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch) #endif #endif ELSE CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE") ENDIF ELSE CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch") ENDIF ENDIF // // // // // // stage 1: Request Switch // IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch) sPedScene.sTimelapse.iTimelapseCut = 0 sPedScene.sTimelapse.iTimeSkipStage = 0 CLEAR_Pause_Outro_Count() sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed) IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom) DISABLE_CELLPHONE(TRUE) VECTOR vCreateCoords FLOAT fCreateHead IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead) #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ") SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ") SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ") #if USE_CLF_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ") SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed]) #endif #if USE_NRM_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ") SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed]) #endif #if not USE_CLF_DLC #if not USE_NRM_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ") SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed]) #endif #endif SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF #IF IS_DEBUG_BUILD VECTOR vVehCoordsOffset #if USE_CLF_DLC vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] #endif #if USE_NRM_DLC vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] #endif #if not USE_CLF_DLC #if not USE_NRM_DLC vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] #endif #endif #ENDIF sPedScene.vCreateCoords = vCreateCoords sPedScene.fCreateHead = fCreateHead #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_STRING_TO_DEBUG_FILE(" - ") #if USE_CLF_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) #endif #if USE_NRM_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) #endif #if not USE_CLF_DLC #if not USE_NRM_DLC SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]) #endif #endif SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF #if USE_CLF_DLC g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead #endif #if USE_NRM_DLC g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead #endif #if not USE_CLF_DLC #if not USE_NRM_DLC g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead #endif #endif IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead ENDIF #IF IS_DEBUG_BUILD SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ") SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset) SAVE_STRING_TO_DEBUG_FILE(" + ") SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords) SAVE_STRING_TO_DEBUG_FILE(" = ") SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed]) SAVE_NEWLINE_TO_DEBUG_FILE() #ENDIF //CASSERTLN(DEBUG_SWITCH, "Should_Default_PedTo_Coord_Move") ENDIF g_eSelectedPlayerCharScene = (sPedScene.eScene) // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ELSE sPedScene.roomInterior = NULL ENDIF ENDIF #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE") ENDIF #ENDIF IF (sPedScene.roomInterior <> NULL) IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS) OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT) SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE) ENDIF RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene) VECTOR vecCamEndPos, vecCamEndRot FLOAT vecCamEndFov IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix TEXT_LABEL tRecording_name INT iRecording_num FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit TEXT_LABEL_23 tPlayerSceneProceduralCam IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num, fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit) OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE) SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos) SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot) SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov) // SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0) SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset) CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE) ENDIF ENDIF INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene" #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENE - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENE - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition") #ENDIF ENDIF // Found a suitable scene #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENE - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable") SaveSuitablePedSceneStructToSwitchLog(sPedScene) #ENDIF g_eRecentlySelectedScene = sPedScene.eScene #IF IS_DEBUG_BUILD BOOL WasNoCharacterBefore = FALSE #ENDIF enumCharacterList eCurrentPlayerPedEnum eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUM() IF eCurrentPlayerPedEnum != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum]) FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum]) CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0 IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75) SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25) ENDIF ENDIF STORE_VEH_DATA_FROM_PED(PLAYER_PED_ID(), g_sPlayerLastVeh[eCurrentPlayerPedEnum], g_vPlayerLastVehCoord[eCurrentPlayerPedEnum], g_fPlayerLastVehHead[eCurrentPlayerPedEnum], g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF ) SAFE_STORE_PLAYER_PED_INFO(PLAYER_PED_ID(), FALSE) STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID()) ELSE //2496918: BC: player is still MP character. Move them to the scene's location roughly. So when the failsafe comes in it won't move the player miles away. IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) SET_ENTITY_COORDS(PLAYER_PED_ID(), vecCamEndPos, FALSE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE) #IF IS_DEBUG_BUILD WasNoCharacterBefore = TRUE #ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] GENERIC_PED_SCENE - Player is still the NO_CHARACTER ped. Moving the player to be close to the scene. ", vecCamEndPos, " ") #ENDIF ENDIF ENDIF PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene) iRequestSwitchInterior_count = 0 g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER() SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0) REQUEST_MODEL(GET_PLAYER_PED_MODEL(sPedScene.ePed)) #IF IS_DEBUG_BUILD IF PRIVATE_Should_PedTo_Be_Created(sPedScene, WasNoCharacterBefore) WAIT(0) ENDIF #ENDIF SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo) ELSE // Can't find suitable scene so bail out #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable") #ENDIF RETURN TRUE ENDIF ENDIF // // // // // // stage 2: Wait For Interior // IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior) SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo) iRequestSwitchInterior_count++ REQUEST_MODEL(GET_PLAYER_PED_MODEL(sPedScene.ePed)) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...") #ENDIF // Make sure any interior is pinned before we proceed IF sPedScene.roomInterior <> NULL IF NOT IS_INTERIOR_READY(sPedScene.roomInterior) PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior) SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_2_waitForInterior) IF iRequestSwitchInterior_count > 150 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", " //roomInterior:", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count) TEXT_LABEL_63 tScene, tAssert tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) tAssert = GET_STRING_FROM_STRING(tScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(tScene)) tAssert += " - timeout waiting for a non-null interior to be ready" CASSERTLN(DEBUG_SWITCH, tAssert) #ENDIF iRequestSwitchInterior_count = 0 // Pin the interior into memory so the ped doesnt fall through the ground IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom) ELSE sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords) ENDIF #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"") ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE") ENDIF #ENDIF SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo) ENDIF ENDIF ENDIF ENDIF // // // // // // stage 3: Setup Ped To // IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo) IF sPedScene.eScene = PR_SCENE_HOSPITAL enumCharacterList eSelectorChar eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed) #IF USE_TU_CHANGES IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar]) #ENDIF IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar]) SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF #IF USE_TU_CHANGES #IF IS_DEBUG_BUILD ELSE CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254") #ENDIF ENDIF #ENDIF sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL sPedScene.eScene = PR_SCENE_HOSPITAL ENDIF IF PRIVATE_Should_PedTo_Be_Created(sPedScene) // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)") // // MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0) // ENDIF // Make a dummy ped so we can run cam spline to them #IF USE_CLF_DLC PED_VARIATION_STRUCT SVARIATIONS = g_savedGlobalsClifford.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED] #ENDIF #IF USE_NRM_DLC PED_VARIATION_STRUCT SVARIATIONS = G_SAVEDGLOBALSnorman.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED] #ENDIF #IF NOT USE_CLF_DLC #IF NOT USE_NRM_DLC PED_VARIATION_STRUCT SVARIATIONS = G_SAVEDGLOBALS.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED] #ENDIF #endif BOOL bIgnoreUnderwearcheck = FALSE IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) bIgnoreUnderwearcheck = TRUE ENDIF IF CREATE_PLAYER_PED_ON_FOOT(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead, DEFAULT, DEFAULT, bIgnoreUnderwearcheck) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT g_savedGlobals.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations ENDIF ENDIF PRELOAD_STORED_PLAYER_PED_VARIATION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // Set invisible to avoid any popping issues IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) #IF IS_DEBUG_BUILD enumCreateState eCreateState IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState) CPRINTLN(DEBUG_SWITCH, "safe to create") ELSE SWITCH eCreateState CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK // CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU // CASE eCS_6_INVALID_LAST_KNOWN_COORDS // EXIT // BREAK CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK DEFAULT CPRINTLN(DEBUG_SWITCH, "DON'T create ", ENUM_TO_INT(eCreateState)) BREAK ENDSWITCH ENDIF #ENDIF ELSE SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE) ENDIF // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)") // // MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0) // ENDIF // Freeze to avoid falling through the world FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE) // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene) sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - created player ped on foot for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords) #ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo) AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT INT iPreloadGametime IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = GET_GAME_TIMER() CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - start waiting for preload var") WHILE (iPreloadGametime+0500) < GET_GAME_TIMER() AND iPreloadGametime > 0 IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) iPreloadGametime = -1 CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - gave up waiting for preload var") ENDIF WAIT(0) ENDWHILE IF NOT (iPreloadGametime = -1) CASSERTLN(DEBUG_SWITCH, "wait for ped var preload") ENDIF CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")") ENDIF ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_4_runCodeCam) ENDIF ELSE sPedScene.sSelectorPeds.bInitialised = TRUE sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907 SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE) ENDIF // IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) // ENDIF SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE) CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0) #IF IS_DEBUG_BUILD VECTOR vPedToCoord = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vPedToCoord) #ENDIF IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0) AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0) IF (sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT) // ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, " pedTo(", vPedToCoord, ") nowhere near vCreateCoords(", sPedScene.vCreateCoords, "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo))) CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n") SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords) SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead) #ENDIF ENDIF ENDIF g_iPausedOnOutroGametime = -1 Preload_SpecialMissionAssets(sPedScene.eScene) RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]) sPedScene = CALL customSetupSelectorCam(sPedScene) SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_4_runCodeCam) ENDIF ENDIF // // // // // // stage 4: Run Code Cam // IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam) BOOL bCreateReplacementForPlayer, bKeepTasks bCreateReplacementForPlayer = FALSE bKeepTasks = FALSE SWITCH_TYPE eSwitchType eSwitchType = SWITCH_TYPE_AUTO FLOAT fGameplayCamPitch, fGameplayCamHeading fGameplayCamPitch = 0.0 fGameplayCamHeading = 0.0 BOOL bPauseBeforePan, bPauseBeforeOutro bPauseBeforePan = FALSE bPauseBeforeOutro = FALSE GetSplineCamFromPlayerToPedParams(sPedScene, bCreateReplacementForPlayer, bKeepTasks, eSwitchType, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags) #IF IS_DEBUG_BUILD TEXT_LABEL_63 sLiteral sLiteral = "" STRING sScene sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene) HUD_COLOURS eHudColour eHudColour = HUD_COLOUR_PURE_WHITE #ENDIF IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) sPedScene.tCreateRoom = tPlayerSceneProceduralCam ENDIF ENDIF IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2) IF NOT bPauseBeforePan CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2") bPauseBeforePan = TRUE ENDIF ENDIF PRINTLN("GENERIC_PED_SCENE ") // Use a long spline so we can delete the current character and dont see the new character pop into place BOOL bRunning_switch_cam_from_player bRunning_switch_cam_from_player = FALSE IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) PRINTLN("GENERIC_PED_SCENE - Querying RUN_SWITCH_CAM_FROM_PLAYER_TO_PED... (1)") IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to ped [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF PRINTLN("GENERIC_PED_SCENE - Setting bRunning_switch_cam_from_player to TRUE (1)") bRunning_switch_cam_from_player = TRUE ENDIF ELSE // IF (g_fCamToPhase < 0) // g_fCamToPhase = 0 // ENDIF TEXT_LABEL_63 tEstabShot tEstabShot = sPedScene.tCreateRoom IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot) TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix) IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix) tEstabShot += tPlayerSceneEstabShotSuffix ENDIF ENDIF PRINTLN("GENERIC_PED_SCENE - Querying RUN_SWITCH_CAM_FROM_PLAYER_TO_PED... (2)") IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam, sPedScene.sSelectorCam.camTo, eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading, bPauseBeforePan, bPauseBeforeOutro, tEstabShot) #IF IS_DEBUG_BUILD sLiteral += ("switch cam \"") sLiteral += GET_STRING_FROM_STRING(sScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(sScene)) sLiteral += ("\" from player to cam [g_iOutro:") sLiteral += (g_iPauseOnOutro) sLiteral += ("]") #ENDIF PRINTLN("GENERIC_PED_SCENE - Setting bRunning_switch_cam_from_player to TRUE (2)") bRunning_switch_cam_from_player = TRUE ENDIF ENDIF #IF IS_DEBUG_BUILD IF g_bDrawLiteralSceneString SET_TEXT_SCALE(0.4, 0.4) SET_TEXT_HUD_COLOUR(eHudColour, 127) SET_TEXT_JUSTIFICATION(FONT_CENTRE) SET_TEXT_OUTLINE() DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral) ENDIF #ENDIF IF bRunning_switch_cam_from_player PRINTLN("GENERIC_PED_SCENE - bRunning_switch_cam_from_player is TRUE") SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT IF g_bMagDemoActive eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN ENDIF IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT) eSwitchState = GET_PLAYER_SWITCH_STATE() PRINTLN("GENERIC_PED_SCENE - (1) eSwitchState: ", Get_String_From_Switch_State(eSwitchState)) PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_TYPE(): ", Get_String_From_Switch_Type(GET_PLAYER_SWITCH_TYPE())) PRINTLN("GENERIC_PED_SCENE - sPedScene.eScene: ", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) #IF USE_TU_CHANGES OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT)) #ENDIF PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_JUMP_CUT_INDEX(): ", GET_PLAYER_SWITCH_JUMP_CUT_INDEX()) PRINTLN("GENERIC_PED_SCENE - g_iPauseOnOutro: ", g_iPauseOnOutro) IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0) IF (g_iPauseOnOutro > 0) PRINTLN("GENERIC_PED_SCENE - (1) g_iPausedOnOutroGametime: ", g_iPausedOnOutroGametime) IF (g_iPausedOnOutroGametime < 0) PRINTLN("GENERIC_PED_SCENE - (2) g_iPausedOnOutroGametime: ", g_iPausedOnOutroGametime) g_iPausedOnOutroGametime = GET_GAME_TIMER() ELSE CPRINTLN(DEBUG_SWITCH, "g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "]", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) INT iMAX_PAUSED_ON_OUTRO_WAIT #IF NOT IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 10000 #ENDIF #IF IS_NEXTGEN_BUILD iMAX_PAUSED_ON_OUTRO_WAIT = 12500 #ENDIF IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.75) ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.75) ENDIF IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT) PRINTLN("GENERIC_PED_SCENE - GET_GAME_TIMER(): ", GET_GAME_TIMER(), " > g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT: ", g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT) DECRAMENT_Pause_Outro_Count() #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro) IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT) //CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876") ELSE TEXT_LABEL_63 sBroke sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))) sBroke += " broke - held on jumpcut descent for " sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000 sBroke += "sec!" CASSERTLN(DEBUG_SWITCH, sBroke) ENDIF #ENDIF ALLOW_PLAYER_SWITCH_OUTRO() g_iPausedOnOutroGametime = -1 ENDIF ENDIF ENDIF ENDIF ENDIF ELSE PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT") //short range, eSwitchState = eSETUP_SCRIPT_SWITCH_STATE eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE ENDIF PRIVATE_SetClockTimeForSwitchScene(sPedScene) IF NOT IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN() IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT) CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.") DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT) IF (eSwitchState = SWITCH_STATE_PREP_DESCENT) CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) ENDIF ENDIF PRINTLN("GENERIC_PED_SCENE - (2) eSwitchState: ", Get_String_From_Switch_State(eSwitchState)) PRINTLN("GENERIC_PED_SCENE - (2) eSETUP_SCRIPT_SWITCH_STATE: ", Get_String_From_Switch_State(eSETUP_SCRIPT_SWITCH_STATE)) PRINTLN("GENERIC_PED_SCENE - (2) eTAKE_CONTROL_SCRIPT_SWITCH_STATE: ", Get_String_From_Switch_State(eTAKE_CONTROL_SCRIPT_SWITCH_STATE)) IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE) PRINTLN("GENERIC_PED_SCENE - Progress 1") IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags) PRINTLN("GENERIC_PED_SCENE - Progress 2") #IF IS_DEBUG_BUILD DEBUG_PRINTCALLSTACK() #ENDIF IF NOT sPedScene.sSelectorCam.bPedSwitched PRINTLN("GENERIC_PED_SCENE - Progress 3") PRINTLN("GENERIC_PED_SCENE - sPedScene.sSelectorCam.bOKToSwitchPed: ", sPedScene.sSelectorCam.bOKToSwitchPed) IF sPedScene.sSelectorCam.bOKToSwitchPed AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE) PRINTLN("GENERIC_PED_SCENE - Progress 4") BOOL bTakenControl = FALSE // IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH) // AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)) // // CPRINTLN(DEBUG_SWITCH, "<") // CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME()) // CPRINTLN(DEBUG_SWITCH, "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.") // // CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, " Skipping character switch and warping player to lead-in instead.") // SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords) // // bTakenControl = TRUE // ELSE PRINTLN("GENERIC_PED_SCENE - Calling: TAKE_CONTROL_OF_SELECTOR_PED") IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks) CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null") PRINTLN("GENERIC_PED_SCENE - Setting bTakenControl to TRUE") bTakenControl = TRUE ENDIF // ENDIF IF bTakenControl PRINTLN("GENERIC_PED_SCENE - bTakenControl is TRUE") IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE) ENDIF PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds) PRIVATE_SetClockTimeForSwitchScene(sPedScene) PRIVATE_UpdateDrunkenPeds() /* //#1189748 Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160 */ SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds sPedScene.sSelectorCam.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT) SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE) ENDIF IF g_b_NOT_PlayerHasStartedNewScene PRINTLN("GENERIC_PED_SCENE - g_b_NOT_PlayerHasStartedNewScene is TRUE") IF sPedScene.sSelectorCam.bPedSwitched PRINTLN("GENERIC_PED_SCENE - sPedScene.sSelectorCam.bPedSwitched is TRUE") IF PRIVATE_PlayerHasStartedNewScene(sPedScene) PRINTLN("GENERIC_PED_SCENE - Setting g_b_NOT_PlayerHasStartedNewScene to FALSE") g_b_NOT_PlayerHasStartedNewScene = FALSE ENDIF ENDIF ENDIF ELSE // SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_TEST_SWITCH_5) ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_5) IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo) IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo) IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo) //g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo) ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF ELSE // // SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE) DESTROY_CAM(sPedScene.sSelectorCam.camTo) ENDIF REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID) CLEAR_PED_NON_CREATION_AREA() ELSE IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID) DESTROY_CAM(sPedScene.sSelectorCam.camID) ENDIF IF sPedScene.sSelectorCam.iInterpCams > 0 INT iCamCount FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1 IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount]) ENDIF ENDFOR ENDIF IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled) ENDIF // Reset all the camera values incase they have to be used again sPedScene.sSelectorCam.bSplineCreated = FALSE sPedScene.sSelectorCam.bSplineActive = FALSE sPedScene.sSelectorCam.bSplineComplete = FALSE sPedScene.sSelectorCam.bOKToSwitchPed = FALSE sPedScene.sSelectorCam.bPedSwitched = FALSE sPedScene.sSelectorCam.bRun = FALSE sPedScene.sSelectorCam.iInterpCams = 0 // Set the relative heading/pitch if the calling scipt used a custom camera // SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch) IF NOT (g_drunkCameraActive) STOP_GAMEPLAY_CAM_SHAKING(TRUE) SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0) SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0) ENDIF RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE) SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE) SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE) SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE) ENDIF ENDIF SET_SKYSWOOP_STAGE(SKYSWOOP_NONE) // If we didnt switch players then reset the proofs IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE) ENDIF IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo) SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE) SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE) IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID()) SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE) ENDIF ENDIF SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_TEST_SWITCH_6) ENDIF ENDIF // // // // // // stage xx: Request Switch // IF (sPedScene.iStage = CONST_TEST_SWITCH_6) IF sPedScene.roomInterior <> NULL UNPIN_INTERIOR(sPedScene.roomInterior) ENDIF // FADE_UP_PED_LIGHT(4.0) CLEAR_FOCUS() SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODEL(sPedScene.ePed)) enumCharacterList eCurrentPed eCurrentPed = GET_CURRENT_PLAYER_PED_ENUM() IF eCurrentPed != NO_CHARACTER IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed]) IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed]) SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed]) ELSE #IF IS_DEBUG_BUILD STRING InstanceScript INT InstanceId InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId) CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]") #ENDIF ENDIF ENDIF MODEL_NAMES ePlayerLastVehModel ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT) SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel) ENDIF ENDIF PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed) IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT) AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE) AND (sPedScene.eScene <> PR_SCENE_HOSPITAL) #IF IS_DEBUG_BUILD g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene) #ENDIF g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene) ENDIF IF sPedScene.eScene = PR_SCENE_HOSPITAL #if USE_CLF_DLC ResetLastKnownPedInfo(g_savedGlobalsClifford.sPlayerData.sInfo, SP_MISSION_NONE) #endif #if USE_NRM_DLC ResetLastKnownPedInfo(g_savedGlobalsnorman.sPlayerData.sInfo, SP_MISSION_NONE) #endif #if not USE_CLF_DLC #if not USE_NRM_DLC ResetLastKnownPedInfo(g_savedGlobals.sPlayerData.sInfo, SP_MISSION_NONE) #endif #endif ENDIF PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed) PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene) PRIVATE_SetPlayerPedWanted(sPedScene) RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene) CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD) #if USE_CLF_DLC CLEAR_TIMEOFDAY(g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed]) #endif #if USE_NRM_DLC CLEAR_TIMEOFDAY(g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed]) #endif #if not USE_CLF_DLC #if not use_NRM_DLC CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed]) #endif #endif IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE") STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound) RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE") STOP_AUDIO_SCENE("TOD_SHIFT_SCENE") CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, " Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".") // CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active") ENDIF #if USE_CLF_DLC g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>> g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0 g_savedGlobalsClifford.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0 g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>> #endif #if USE_NRM_DLC g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>> g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0 g_savedGlobalsnorman.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0 g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>> #endif #if not USE_CLF_DLC #if not USE_NRM_DLC g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>> g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0 g_savedGlobals.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0 g_savedGlobals.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>> #endif #endif #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom) IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) TEXT_LABEL_23 tPlayerSceneProceduralCam IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam) // ELSE SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF ELSE IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>) SAVE_STRING_TO_DEBUG_FILE(" ! scene ") SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"") SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom) SAVE_STRING_TO_DEBUG_FILE("\" inside and null") SAVE_NEWLINE_TO_DEBUG_FILE() ENDIF ENDIF #ENDIF // PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"") #ENDIF //g_fCamToPhase = -1 //g_bSwitchSplineCamInProgress = FALSE //play final stage of anim g_b_NOT_PlayerHasStartedNewScene = FALSE g_iPausedOnOutroGametime = -1 Mission_Over(sPedScene.iMissionID) IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1) AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3) AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4) DISABLE_CELLPHONE(FALSE) ENDIF PRINTLN("GENERIC_PED_SCENE - Returning TRUE") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC PED_SCENE_STRUCT SceneSetupSelectorCam_DEFAULT(PED_SCENE_STRUCT &sPedScene) RETURN sPedScene ENDFUNC FUNC PED_SCENE_STRUCT SCENE_CUSTOM_SCRIPT_REQUEST(PED_SCENE_STRUCT &sPedScene) TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetable_scene" REQUEST_SCRIPT(sPlayerTimetableScene_script) TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) REQUEST_SCRIPT(sPlayerTimetableAdditional_script) ENDIF //g_bSwitchSplineCamInProgress = TRUE g_b_NOT_PlayerHasStartedNewScene = TRUE RETURN sPedScene ENDFUNC FUNC PED_SCENE_STRUCT SCENE_CUSTOM_SELECTOR_CAM_SETUP(PED_SCENE_STRUCT &sPedScene) sPedScene = SCENE_CUSTOM_SCRIPT_REQUEST(sPedScene) // IF NOT SETUP_PED_SCENE_SELECTOR_CAM(sPedScene, SELECTOR_CAM_LONG_SPLINE) // Returns FALSE when the camera spline is complete // Destory previous cam spline IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID) DESTROY_CAM(sPedScene.sSelectorCam.camID) ENDIF sPedScene.sSelectorCam.iInterpCams = 0 sPedScene.sSelectorCam.bSplineCreated = FALSE // ENDIF RETURN sPedScene ENDFUNC FUNC BOOL SceneSetupScript_DEFAULT(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene) IF (sPedScene.iStage = 0) ENDIF sPassedScene.eSceneBuddy = sPassedScene.eSceneBuddy RETURN TRUE ENDFUNC FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUPCLF(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags) BOOL bHaveSetupSceneCustomScript = TRUE TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetableCLF" CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398 CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398 IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script) REQUEST_SCRIPT(sPlayerTimetableScene_script) ELSE SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene) IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY) sPassedScene.bDescentOnly = TRUE ENDIF START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script, sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT), iSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script) ENDIF ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...") #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script) REQUEST_SCRIPT(sPlayerTimetableAdditional_script) ELSE START_NEW_SCRIPT(sPlayerTimetableAdditional_script, iADSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script) ENDIF ENDIF ENDIF RETURN bHaveSetupSceneCustomScript ENDFUNC FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUPNRM(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags) BOOL bHaveSetupSceneCustomScript = TRUE TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetableNRM" CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398 CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398 IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script) REQUEST_SCRIPT(sPlayerTimetableScene_script) ELSE SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene) IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY) sPassedScene.bDescentOnly = TRUE ENDIF START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script, sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT), iSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script) ENDIF ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...") #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script) REQUEST_SCRIPT(sPlayerTimetableAdditional_script) ELSE START_NEW_SCRIPT(sPlayerTimetableAdditional_script, iADSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script) ENDIF ENDIF ENDIF RETURN bHaveSetupSceneCustomScript ENDFUNC FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUP(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags) #IF USE_CLF_DLC IF g_bLoadedClifford RETURN SCENE_CUSTOM_SCRIPT_SETUPCLF(sPedScene,sPassedScene,iSwitchFlags) ENDIF #ENDIF #IF USE_NRM_DLC IF g_bLoadedNorman RETURN SCENE_CUSTOM_SCRIPT_SETUPNRM(sPedScene,sPassedScene,iSwitchFlags) ENDIF #ENDIF BOOL bHaveSetupSceneCustomScript = TRUE TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetable_scene" CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398 CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398 IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)) #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script) REQUEST_SCRIPT(sPlayerTimetableScene_script) ELSE SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene) IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY) sPassedScene.bDescentOnly = TRUE ENDIF START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script, sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT), iSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script) ENDIF ENDIF TEXT_LABEL_31 sPlayerTimetableAdditional_script IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script) IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...") #ENDIF bHaveSetupSceneCustomScript = FALSE IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script) REQUEST_SCRIPT(sPlayerTimetableAdditional_script) ELSE START_NEW_SCRIPT(sPlayerTimetableAdditional_script, iADSCENE_STACK_SIZE) SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script) ENDIF ENDIF ENDIF RETURN bHaveSetupSceneCustomScript ENDFUNC /// PURPOSE: Calls the approproate func to process the stored scene ID /// NOTE: Returns TRUE when the scene is complete. FUNC BOOL PROCESS_PLAYER_PED_SCENECLF(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0) RETURN GENERIC_PED_SCENECLF(sPedScene, &SCENE_CUSTOM_SCRIPT_REQUEST, &SCENE_CUSTOM_SCRIPT_SETUPCLF, iSwitchFlags) ENDFUNC FUNC BOOL PROCESS_PLAYER_PED_SCENENRM(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0) RETURN GENERIC_PED_SCENENRM(sPedScene, &SCENE_CUSTOM_SCRIPT_REQUEST, &SCENE_CUSTOM_SCRIPT_SETUPNRM, iSwitchFlags) ENDFUNC FUNC BOOL PROCESS_PLAYER_PED_SCENE(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0) #if USE_CLF_DLC return PROCESS_PLAYER_PED_SCENECLF(sPedScene,iSwitchFlags) #endif #if USE_NRM_DLC return PROCESS_PLAYER_PED_SCENENRM(sPedScene,iSwitchFlags) #endif RETURN GENERIC_PED_SCENE(sPedScene, &SCENE_CUSTOM_SCRIPT_REQUEST, &SCENE_CUSTOM_SCRIPT_SETUP, iSwitchFlags) ENDFUNC /// PURPOSE: Calls the approproate func to process the stored scene ID /// NOTE: Returns TRUE when the scene is complete. PROC Trigger_Specific_Switch_And_Wait(PED_REQUEST_SCENE_ENUM eReqScene, INT iSwitchFlags = 0) //for bug 884228 PED_SCENE_STRUCT sSceneData sSceneData.sSelectorPeds.ePreviousSelectorPed = SELECTOR_PED_MICHAEL sSceneData.sSelectorPeds.eCurrentSelectorPed = SELECTOR_PED_MICHAEL sSceneData.iStage = 0 sSceneData.eScene = eReqScene //INT_TO_ENUM(PED_REQUEST_SCENE_ENUM, g_iSelectedDebugPlayerCharScene) sSceneData.sSelectorCam.bSplineCreated = FALSE GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sSceneData.eScene, sSceneData.ePed) IF IS_SCREEN_FADED_OUT() IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY) DO_PLAYER_WARP_WITH_LOAD_AND_PAUSE(g_sPedSceneData[eReqScene].vCreateCoords) //#1567006 IF NOT IS_PED_THE_CURRENT_PLAYER_PED(sSceneData.ePed) SELECTOR_SLOTS_ENUM eSlot = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sSceneData.ePed) WHILE NOT SET_CURRENT_SELECTOR_PED(eSlot) WAIT(0) ENDWHILE ENDIF ENDIF ENDIF BOOL bPerformingGenericPedScene = TRUE WHILE IS_PLAYER_PLAYING(PLAYER_ID()) AND bPerformingGenericPedScene IF NOT PROCESS_PLAYER_PED_SCENE(sSceneData, iSwitchFlags) // iTempRecentlySelectedScene = ENUM_TO_INT(g_eRecentlySelectedScene) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> sSceneData.iStage: ", sSceneData.iStage) #ENDIF ELSE bPerformingGenericPedScene = FALSE ENDIF WAIT(0) ENDWHILE ENDPROC /// PURPOSE: /// /// RETURNS: /// RETURN FALSE //No, I need the trigger to start right away /// RETURN TRUE //yeah its cool to prevent the start after switch FUNC BOOL PREVENT_MISSION_TRIGGER_DUE_TO_SWITCH_COOLDOWN(enumCharacterList ePed) PED_REQUEST_SCENE_ENUM eReqScene FLOAT fScenePercent PED_SCENE_STRUCT sPedScene PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene IF GET_PLAYER_PED_SCENE_FOR_CURRENT_TIME(ePed, eReqScene, fScenePercent, sPedScene, sPassedScene) IF (eReqScene = PR_SCENE_F_S_EXILE2) OR (eReqScene = PR_SCENE_M_S_FAMILY4) OR (eReqScene = PR_SCENE_F_S_AGENCY_2A_a) OR (eReqScene = PR_SCENE_F_S_AGENCY_2A_b) // OR (eReqScene = PR_SCENE_F_S_AGENCY_2B) // OR (eReqScene = PR_SCENE_F_S_AGENCY_2C) // OR (eReqScene = PR_SCENE_F_S_FBI1end) RETURN FALSE //No, I need the trigger to start right away ENDIF ENDIF RETURN TRUE //yeah its cool to prevent the start after switch ENDFUNC