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

10372 lines
376 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// _________________________________________________________________________________________
// _________________________________________________________________________________________
// ___ ___
// ___ Author: Alwyn Roberts Date: 21/04/2010 ___
// _________________________________________________________________________________________
// ___ ___
// ___ - Player_Timetable_Scene file for use player_timetable_scene.sc ___
// ___ ___
// _________________________________________________________________________________________
//Compile out Title Update changes to header functions.
//Must be before includes.
CONST_INT USE_TU_CHANGES 1
USING "rage_builtins.sch"
USING "globals.sch"
USING "model_enums.sch"
//- commands headers -//
USING "commands_audio.sch"
USING "commands_camera.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_fire.sch"
USING "commands_graphics.sch"
USING "commands_hud.sch"
USING "commands_interiors.sch"
USING "commands_misc.sch"
USING "commands_object.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "commands_task.sch"
USING "commands_vehicle.sch"
USING "commands_water.sch"
//- script headers -//
USING "script_player.sch"
USING "script_ped.sch"
USING "script_misc.sch"
//- public headers -//
USING "dialogue_public.sch"
USING "drunk_public.sch"
USING "player_ped_public.sch"
USING "selector_public.sch"
USING "timer_public.sch"
USING "player_ped_scenes.sch"
USING "vehicle_gen_public.sch"
USING "building_control_public.sch"
USING "tv_control_public.sch"
USING "shrink_stat_tracking.sch"
USING "fake_cellphone_public.sch"
//- private headers -//
USING "family_private.sch"
USING "family_scene_private.sch"
USING "player_scene_private.sch"
#IF IS_DEBUG_BUILD
//- debug headers -//
USING "shared_debug.sch"
USING "player_controller_debug.sch"
#ENDIF
USING "push_in_public.sch"
// *******************************************************************************************
// CONSTANTS
// *******************************************************************************************
//PROC SET_PLAYER_VEHICLE_ALARM_AUDIO_ACTIVE(VEHICLE_INDEX vehID, bool bbb) //temp for #1549453
// vehID = vehID
// bbb = bbb
//ENDPROC
// *******************************************************************************************
// ENUMERATIONS
// *******************************************************************************************
ENUM PT_SCENE_STAGE_ENUM
WAIT_FOR_PLAYER_PED_TO_UPDATE,
CONTROL_PLAYER_DURING_SWITCH,
PLAYER_SCENE_STARTED,
PLAYER_EXITING_SWITCH,
PLAYER_ON_PHONE_ANIM,
PLAYER_HAS_WARDROBE_ANIM,
FINISHED_TIMETABLED_SCENE
ENDENUM
PT_SCENE_STAGE_ENUM current_player_timetable_scene_stage = WAIT_FOR_PLAYER_PED_TO_UPDATE
//enumPlayerSceneAnimProgress eSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
// *******************************************************************************************
// STRUCTURES
// *******************************************************************************************
PLAYER_TIMETABLE_SCENE_STRUCT sTimetableScene
structPedsForConversation MyLocalPedStruct
FAKE_CELLPHONE_DATA sDaughterFakeCellphoneData
PUSH_IN_DATA sPushInData
BOOL bFilledPushInData = FALSE
TEXT_LABEL tSpeechBlock, tSpeechLabel
BOOL bHave_Created_Estab_Shot_Conversation = FALSE
BOOL bHave_Preloaded_Conversation = FALSE
BOOL bHave_Created_Switch_Scene_Conversation = FALSE
BOOL bHave_Played_Switch_Scene_Speech_Facial = FALSE
BOOL bPlayed_Switch_Scene_Context = FALSE
BOOL bShortCircuitedPushin = FALSE // rob
BOOL bStartPreloadPlayerComponentForScene = FALSE
BOOL bKeepCellphoneDisabled = TRUE
BOOL bTriggeredFade = FALSE
//BOOL bHave_Triggered_Music_Event = FALSE
// *******************************************************************************************
// VARIABLES
// *******************************************************************************************
//- Flags(INT and BOOL) -//
BOOL bPlayer_timetable_scene_in_progress = TRUE
BOOL bInitialised_timetable_scene = FALSE
BOOL bSwitchForcedStartAmbientTV = FALSE
BOOL bSwitchSkippedPlaybackTimeDescent, bSwitchSkippedPlaybackTimeHold = FALSE
BOOL bSetTanishaFightDoorVisible = FALSE
INT iPlayerOutfitPreloadStage = 0
INT iLeadinRequestStage = 0
INT iBenchcallHangupStage = 0
BOOL bRetaskToWander = FALSE
BOOL bUpdatedWalkTasks = FALSE
//- People(PED_INDEX and MODEL_NAMES) -//
PED_INDEX scene_buddy
BOOL bBuddyPostOutTasksPerformed = FALSE
//- Vehicles(VEHICLE_INDEX and MODEL_NAMES) -//
VEHICLE_INDEX scene_veh
VECTOR vSceneVeh_driveOffset
FLOAT fSceneVeh_driveSpeed
//- Hotswap stuff(SELECTOR_PED_STRUCT and SELECTOR_CAM_STRUCT) -//
//- Objects(OBJECT_INDEX and MODEL_NAMES and INTERIOR_INSTANCE_INDEX) -//
OBJECT_INDEX player_prop, player_extra_prop
OBJECT_INDEX player_door_l, player_door_r
FLOAT fPlayerDoorOverridePhase = 0.95
COVERPOINT_INDEX CoverIndex
//- Other Models(MODEL_NAMES) -//
//- Sequences(SEQUENCE_INDEX and SCRIPTTASKSTATUS) -//
//PTFX_ID player_ptfx
//- Blips (BLIP_INDEX) -//
//- Coordinates(VECTORS and FLOATS) -//
//- Pickups(INT) -//
//- Text Label(TEXT_LABEL) -//
TEXT_LABEL tRecordingName
INT iRecordingNum
FLOAT fRecordingStart = -1, fRecordingSkip = -1, fRecordingStop = -1
FLOAT fSpeedSwitch = -1, fSpeedExit = -1
//- Cover Points(COVERPOINT_INDEX and COVERPOINT_USAGE COVERPOINT_HEIGHT and COVERPOINT_ARC) -//
SCENARIO_BLOCKING_INDEX scenarioBlockID
//- Cameras(CAMERA_INDEX AND INT) -//
CAMERA_INDEX LoopCamIndex, ExitCamIndex
//- Textures(TXD_ID and TEXTURE_ID) -//
//- Timers(structTimer) -//
#IF NOT IS_NEXTGEN_BUILD
CONST_INT iFramesToLockCloth 240
#ENDIF
#IF IS_NEXTGEN_BUILD
CONST_INT iFramesToLockCloth 240
#ENDIF
CONST_INT iCONST_DRUNK_secDuration 20000 //30000 //10sec
CONST_INT iCONST_SOBER_secDuration 2500 //2.5sec
structTimer tLieInTimer
INT iShakeTimer = -1
//- Emails(INT and EMAIL_ID and EMAIL_PHOTO_ID) -//
//- Audio(INT and STRING) -//
#IF IS_DEBUG_BUILD
//- Widget stuff(WIDGET_ID and BOOL and INT and FLOAT and VECTOR) -//
WIDGET_GROUP_ID player_timetable_scene_widget
INT iCurrent_player_timetable_scene_stage
BOOL bTestWarp
FLOAT fDebugCamInfoDisplayX = 0.875
FLOAT fDebugCamInfoDisplayY = 0.875
FLOAT fDebugCamInfoOffsetY = 0.030
BOOL bObjectReleasePhaseReset = FALSE
#ENDIF
//- other Ints(INT) -//
//- other Floats(FLOAT) -//
//- TEMP RUBBISH -//
// *******************************************************************************************
// GENERAL FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC BOOL PRIVATE_SetRoadsSwitchArea(PED_REQUEST_SCENE_ENUM eScene, BOOL bAreaActive)
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
VECTOR vRoadAreaOffset
SWITCH eScene
CASE PR_SCENE_M_DEFAULT
CASE PR_SCENE_F_DEFAULT
CASE PR_SCENE_T_DEFAULT
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
OR (sTimetableScene.eOutTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
IF VMAG(vSceneVeh_driveOffset) > 0.0
vRoadAreaOffset = <<VMAG(vSceneVeh_driveOffset),VMAG(vSceneVeh_driveOffset),5>>*1.5
ENDIF
ENDIF
BREAK
CASE PR_SCENE_M7_BIKINGJIMMY vRoadAreaOffset = <<15, 15, 10>> BREAK
CASE PR_SCENE_M7_TALKTOGUARD vRoadAreaOffset = <<25, 25, 10>> BREAK
CASE PR_SCENE_M7_DROPPINGOFFJMY vRoadAreaOffset = <<25, 80, 10>> BREAK
CASE PR_SCENE_F_MD_FRANKLIN2 vRoadAreaOffset = <<25, 25, 10>> BREAK
CASE PR_SCENE_M_MD_FBI2 vRoadAreaOffset = <<25, 25, 10>> BREAK
CASE PR_SCENE_F_S_EXILE2 RETURN FALSE BREAK
CASE PR_SCENE_Ma_FBI4intro vRoadAreaOffset = <<25, 25, 10>> BREAK
CASE PR_SCENE_F1_BYETAXI vRoadAreaOffset = <<20, 20, 10>> BREAK
CASE PR_SCENE_F_LAMTAUNT_NIGHT vRoadAreaOffset = <<08, 08, 10>> BREAK
CASE PR_SCENE_T_CR_BRIDGEDROP vRoadAreaOffset = <<15, 15, 10>> BREAK
CASE PR_SCENE_T_CR_POLICE_a vRoadAreaOffset = <<40, 10, 10>> BREAK
CASE PR_SCENE_T_CN_POLICE_b vRoadAreaOffset = <<10, 60, 10>> BREAK
CASE PR_SCENE_T_CN_POLICE_c vRoadAreaOffset = <<60, 10, 10>> BREAK
CASE PR_SCENE_T_CR_CHASECAR_a vRoadAreaOffset = <<30, 50, 10>> BREAK
CASE PR_SCENE_T_CN_CHASECAR_b vRoadAreaOffset = <<60, 20, 10>> BREAK
CASE PR_SCENE_T_CR_CHASEBIKE vRoadAreaOffset = <<20, 50, 10>> BREAK
CASE PR_SCENE_T_CR_CHASESCOOTER vRoadAreaOffset = <<25, 12, 10>> BREAK
CASE PR_SCENE_M2_CYCLING_a vRoadAreaOffset = <<15, 15, 10>> BREAK
CASE PR_SCENE_M2_CYCLING_b vRoadAreaOffset = <<15, 15, 10>> BREAK
CASE PR_SCENE_M2_CYCLING_c vRoadAreaOffset = <<15, 15, 10>> BREAK
CASE PR_SCENE_M_TRAFFIC_a vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_M_TRAFFIC_b vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_M_TRAFFIC_c vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_F_TRAFFIC_a vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_Fa_AGENCY1 RETURN PRIVATE_SetRoadsSwitchArea(PR_SCENE_F_TRAFFIC_a, bAreaActive) BREAK
CASE PR_SCENE_F_TRAFFIC_b vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_F_TRAFFIC_c vRoadAreaOffset = <<60, 60, 20>> BREAK
CASE PR_SCENE_Ta_CARSTEAL2
BUILDING_NAME_ENUM eBuildingName
eBuildingName = BUILDINGNAME_IPL_CARGEN_BLOCK_POLMAV_DT1_17
IF NOT bAreaActive
SET_BUILDING_STATE(eBuildingName, BUILDINGSTATE_NORMAL)
ELSE
SET_BUILDING_STATE(eBuildingName, BUILDINGSTATE_DESTROYED)
ENDIF
vRoadAreaOffset = <<50, 50, 50>>
BREAK
CASE PR_SCENE_Ta_FBI2
CASE PR_SCENE_T_FLYING_PLANE
vRoadAreaOffset = <<50, 50, 50>>
BREAK
CASE PR_SCENE_Ma_FBI1end
CASE PR_SCENE_Ma_FBI3
CASE PR_SCENE_Ma_FINALE2B
CASE PR_SCENE_Ta_FINALEC
CASE PR_SCENE_Fa_MICHAEL3
CASE PR_SCENE_Ta_FAMILY4
CASE PR_SCENE_Ta_FRANKLIN2
CASE PR_SCENE_Fa_AGENCYprep1
CASE PR_SCENE_Fa_FBI4intro
CASE PR_SCENE_Fa_FBI4
CASE PR_SCENE_Fa_EXILE3
CASE PR_SCENE_Fa_EXILE2
CASE PR_SCENE_Fa_FAMILY3
vRoadAreaOffset = <<15, 15, 5>>
BREAK
CASE PR_SCENE_Ma_DOCKS2A
CASE PR_SCENE_Ma_DOCKS2B
CASE PR_SCENE_Fa_DOCKS2A
CASE PR_SCENE_M6_BOATING
CASE PR_SCENE_Fa_FINALE2intro
CASE PR_SCENE_Ma_FINALE1
CASE PR_SCENE_Fa_AGENCY3A
vRoadAreaOffset = <<20, 20, 10>>
BREAK
CASE PR_SCENE_Ma_FRANKLIN2
CASE PR_SCENE_Fa_FBI1
CASE PR_SCENE_Fa_RURAL2A
CASE PR_SCENE_Fa_FBI5
CASE PR_SCENE_M2_DRIVING_a
CASE PR_SCENE_M2_DRIVING_b
CASE PR_SCENE_M6_DRIVING_a
CASE PR_SCENE_M6_DRIVING_b
CASE PR_SCENE_M6_DRIVING_c
CASE PR_SCENE_M6_DRIVING_d
CASE PR_SCENE_M6_DRIVING_e
CASE PR_SCENE_M6_DRIVING_f
CASE PR_SCENE_M6_DRIVING_g
CASE PR_SCENE_M6_DRIVING_h
vRoadAreaOffset = <<25, 25, 10>>
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(tRecordingName)
AND (iRecordingNum > 0)
VECTOR vRecordingEnd
vRecordingEnd = <<10,10,10>>
REQUEST_VEHICLE_RECORDING(iRecordingNum, tRecordingName)
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecordingNum, tRecordingName)
vRecordingEnd = GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecordingNum, fRecordingStop, tRecordingName)
ENDIF
vRoadAreaOffset = vRecordingEnd-vCreateCoords
vRoadAreaOffset.x = ABSF(vRoadAreaOffset.x)
vRoadAreaOffset.y = ABSF(vRoadAreaOffset.y)
vRoadAreaOffset.z = ABSF(vRoadAreaOffset.z)
IF vRoadAreaOffset.x < 10.0 vRoadAreaOffset.x = 10.0 ENDIF
IF vRoadAreaOffset.y < 10.0 vRoadAreaOffset.y = 10.0 ENDIF
IF vRoadAreaOffset.z < 10.0 vRoadAreaOffset.z = 10.0 ENDIF
SAVE_STRING_TO_DEBUG_FILE("CASE ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vRoadAreaOffset = ")
SAVE_VECTOR_TO_DEBUG_FILE(vRoadAreaOffset)
SAVE_STRING_TO_DEBUG_FILE(" BREAK")
SAVE_NEWLINE_TO_DEBUG_FILE()
TEXT_LABEL_63 sScene, sInvalid
sScene = Get_String_From_Ped_Request_Scene_Enum(eScene)
sInvalid = "SetRoadsSwitchArea() required for eScene: "
sInvalid += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
CPRINTLN(DEBUG_SWITCH, sInvalid)
CASSERTLN(DEBUG_SWITCH, sInvalid)
IF NOT bAreaActive
SET_ROADS_IN_AREA(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset, bAreaActive)
ELSE
SET_ROADS_BACK_TO_ORIGINAL(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset)
ENDIF
RETURN TRUE
ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
AND (sTimetableScene.eOutTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
IF VMAG(vSceneVeh_driveOffset) > 0.0
vRoadAreaOffset = <<VMAG(vSceneVeh_driveOffset),VMAG(vSceneVeh_driveOffset),5>>
IF NOT bAreaActive
SAVE_STRING_TO_DEBUG_FILE("CASE ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vRoadAreaOffset = ")
SAVE_VECTOR_TO_DEBUG_FILE(vRoadAreaOffset)
SAVE_STRING_TO_DEBUG_FILE(" BREAK")
SAVE_NEWLINE_TO_DEBUG_FILE()
TEXT_LABEL_63 sScene, sInvalid
sScene = Get_String_From_Ped_Request_Scene_Enum(eScene)
sInvalid = "SetRoadsSwitchArea() required for eScene: "
sInvalid += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
CPRINTLN(DEBUG_SWITCH, sInvalid)
CASSERTLN(DEBUG_SWITCH, sInvalid)
ENDIF
IF NOT bAreaActive
SET_ROADS_IN_AREA(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset, bAreaActive)
ELSE
SET_ROADS_BACK_TO_ORIGINAL(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset)
ENDIF
RETURN TRUE
ENDIF
ENDIF
#ENDIF
RETURN FALSE
BREAK
ENDSWITCH
IF NOT bAreaActive
SET_ROADS_IN_AREA(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset, bAreaActive)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset, bAreaActive)
ELSE
SET_ROADS_BACK_TO_ORIGINAL(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vCreateCoords-vRoadAreaOffset, vCreateCoords+vRoadAreaOffset, bAreaActive)
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "PRIVATE_SetRoadsSwitchArea(", Get_String_From_Ped_Request_Scene_Enum(eScene), ", ", vCreateCoords-vRoadAreaOffset, ", ", vCreateCoords+vRoadAreaOffset, ", ", bAreaActive, ")")
#ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_SetPedInSwitchArea(PED_REQUEST_SCENE_ENUM eScene, BOOL bAreaActive)
VECTOR vPedAreaOffset
SWITCH eScene
CASE PR_SCENE_M_DEFAULT RETURN FALSE BREAK
CASE PR_SCENE_F_DEFAULT RETURN FALSE BREAK
CASE PR_SCENE_T_DEFAULT RETURN FALSE BREAK
CASE PR_SCENE_Fa_STRIPCLUB_ARM3 vPedAreaOffset = <<3,3,4>> BREAK
// CASE PR_SCENE_Fa_STRIPCLUB_FAM1 RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_Fa_STRIPCLUB_ARM3, bAreaActive)
// CASE PR_SCENE_Fa_STRIPCLUB_FAM3 RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_Fa_STRIPCLUB_ARM3, bAreaActive)
CASE PR_SCENE_M_VWOODPARK_a vPedAreaOffset = <<4,4,4>> BREAK
CASE PR_SCENE_M_VWOODPARK_b RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_M_VWOODPARK_a, bAreaActive)
CASE PR_SCENE_M_BENCHCALL_b vPedAreaOffset = <<12,12,4>> BREAK
CASE PR_SCENE_F_CLUB vPedAreaOffset = <<10,10,4>> BREAK
CASE PR_SCENE_F_LAMTAUNT_P5 vPedAreaOffset = <<15,15,4>> BREAK
CASE PR_SCENE_T_SC_BAR vPedAreaOffset = <<4,4,4>> BREAK
CASE PR_SCENE_M_COFFEE_a vPedAreaOffset = <<2.5,2,4>> BREAK
CASE PR_SCENE_M_COFFEE_b vPedAreaOffset = <<4,4,4>> BREAK
CASE PR_SCENE_M_COFFEE_c RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_M_COFFEE_a, bAreaActive)
CASE PR_SCENE_M4_CINEMA RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_M_COFFEE_a, bAreaActive)
CASE PR_SCENE_M7_COFFEE vPedAreaOffset = <<4,4,4>> BREAK
CASE PR_SCENE_M4_LUNCH_b vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_M7_REJECTENTRY vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_M7_EMPLOYEECONVO
SET_SCENARIO_GROUP_ENABLED("MOVIE_STUDIO_SECURITY", bAreaActive)
vPedAreaOffset = <<6,6,4>>
BREAK
CASE PR_SCENE_T_FIGHTBBUILD vPedAreaOffset = <<5,5,4>> BREAK
CASE PR_SCENE_T_FIGHTBAR_a vPedAreaOffset = <<8,8,4>> BREAK
CASE PR_SCENE_T_FIGHTBAR_b vPedAreaOffset = <<8,8,4>> BREAK
CASE PR_SCENE_T_FIGHTBAR_c vPedAreaOffset = <<8,8,4>> BREAK //1260251
CASE PR_SCENE_T_YELLATDOORMAN vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_T_CR_BRIDGEDROP vPedAreaOffset = <<15,15,10>> BREAK
CASE PR_SCENE_T_FIGHTYAUCLUB_b vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_T_FIGHTCASINO vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_T_ESCORTED_OUT vPedAreaOffset = <<6,6,4>> BREAK
CASE PR_SCENE_T_CR_BLOCK_CAMERA vPedAreaOffset = <<14,6,4>> BREAK
CASE PR_SCENE_T6_HUNTING1 vPedAreaOffset = <<25,25,4>> BREAK
CASE PR_SCENE_T6_HUNTING2 RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_T6_HUNTING1, bAreaActive)
CASE PR_SCENE_T6_HUNTING3 RETURN PRIVATE_SetPedInSwitchArea(PR_SCENE_T6_HUNTING1, bAreaActive)
DEFAULT
vPedAreaOffset = <<4,4,4>>
BREAK
ENDSWITCH
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
SET_PED_PATHS_IN_AREA(vCreateCoords-vPedAreaOffset, vCreateCoords+vPedAreaOffset, bAreaActive)
IF NOT bAreaActive
SET_PED_NON_CREATION_AREA(vCreateCoords-vPedAreaOffset, vCreateCoords+vPedAreaOffset)
scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vCreateCoords-vPedAreaOffset, vCreateCoords+vPedAreaOffset)
CLEAR_AREA(vCreateCoords, VMAG(vPedAreaOffset), TRUE)
ELSE
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockID)
CLEAR_PED_NON_CREATION_AREA()
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "PRIVATE_SetPedInSwitchArea(", Get_String_From_Ped_Request_Scene_Enum(eScene), ", ", vCreateCoords-vPedAreaOffset, ", ", vCreateCoords+vPedAreaOffset, ", ", bAreaActive, ")")
#ENDIF
RETURN TRUE
ENDFUNC
PROC ar_SET_VEHICLE_FORWARD_SPEED(VEHICLE_INDEX VehicleIndex, FLOAT CarSpeed)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "ar_SET_", SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(VehicleIndex)), "_FORWARD_SPEED[", CarSpeed, "]")
#ENDIF
IF CarSpeed < 0.1
CPRINTLN(DEBUG_SWITCH, "setting the forward speed < 0.1??")
EXIT
ENDIF
SET_VEHICLE_FORWARD_SPEED(VehicleIndex, CarSpeed)
ENDPROC
FUNC BOOL IS_THIS_MODEL_A_PLANE_OR_BLIMP(MODEL_NAMES VehicleModelHashKey)
IF IS_THIS_MODEL_A_PLANE(VehicleModelHashKey)
RETURN TRUE
ENDIF
IF (VehicleModelHashKey = BLIMP OR vehicleModelHashKey = BLIMP2)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC ar_SET_VEHICLE_ON_GROUND_PROPERLY(VEHICLE_INDEX VehicleIndex)
MODEL_NAMES eVehicleModel = GET_ENTITY_MODEL(VehicleIndex)
IF IS_THIS_MODEL_A_PLANE_OR_BLIMP(eVehicleModel)
OR IS_THIS_MODEL_A_HELI(eVehicleModel)
// IF IS_ENTITY_IN_AIR(VehicleIndex)
EXIT
// ENDIF
ENDIF
//B* 2334165: If it's a beached boat, don't try to position safely on the ground - it WILL get stuck
VECTOR vPos
FLOAT fGroundZ, fWaterZ
vPos = GET_ENTITY_COORDS(vehicleIndex)
GET_GROUND_Z_FOR_3D_COORD(vPos,fGroundZ)
GET_WATER_HEIGHT_NO_WAVES(vPos,fWaterZ)
IF NOT (IS_THIS_MODEL_A_BOAT(eVehicleModel) OR eVehicleModel = SUBMERSIBLE)
SET_VEHICLE_ON_GROUND_PROPERLY(VehicleIndex)
ELSE
IF fGroundZ <> 0 AND IS_VEHICLE_DRIVEABLE(vehicleIndex)
IF vPos.z > fGroundZ AND fGroundZ > fWaterZ
FREEZE_ENTITY_POSITION(VehicleIndex,FALSE)
SET_ENTITY_DYNAMIC(VehicleIndex, TRUE)
APPLY_FORCE_TO_ENTITY(VehicleIndex,APPLY_TYPE_FORCE,<<0,0,0.1>>,<<0,0,0>>,0,FALSE,TRUE,TRUE)
ELSE
SET_VEHICLE_ON_GROUND_PROPERLY(VehicleIndex)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC ar_FREEZE_ENTITY_POSITION(ENTITY_INDEX EntityIndex, BOOL FrozenByScriptFlag, STRING FrozenByScriptTitle)
IF IS_ENTITY_DEAD(EntityIndex)
EXIT
ENDIF
MODEL_NAMES EntityModel = GET_ENTITY_MODEL(EntityIndex)
IF (EntityModel = V_ILEV_M_DINECHAIR)
EXIT
ENDIF
#IF IS_DEBUG_BUILD
STRING sFrozenByScriptFlag
IF FrozenByScriptFlag
sFrozenByScriptFlag = "TRUE"
ELSE
sFrozenByScriptFlag = "FALSE"
ENDIF
VECTOR v = GET_ENTITY_COORDS(EntityIndex)
IF IS_ENTITY_A_PED(EntityIndex)
CPRINTLN(DEBUG_SWITCH, "ar_FREEZE_PED_", SAFE_GET_MODEL_NAME_FOR_DEBUG(EntityModel), "_POSITION[", sFrozenByScriptFlag, "], \"", FrozenByScriptTitle, "\" ", v)
ELIF IS_ENTITY_A_VEHICLE(EntityIndex)
CPRINTLN(DEBUG_SWITCH, "ar_FREEZE_VEH_", SAFE_GET_MODEL_NAME_FOR_DEBUG(EntityModel), "_POSITION[", sFrozenByScriptFlag, "], \"", FrozenByScriptTitle, "\" ", v)
ELSE
CPRINTLN(DEBUG_SWITCH, "ar_FREEZE_ENTITY_", SAFE_GET_MODEL_NAME_FOR_DEBUG(EntityModel), "_POSITION[", sFrozenByScriptFlag, "], \"", FrozenByScriptTitle, "\" ", v)
ENDIF
#ENDIF
#IF NOT IS_DEBUG_BUILD
FrozenByScriptTitle = FrozenByScriptTitle
#ENDIF
IF EntityModel = V_RES_TT_FLUSHER //PR_SCENE_T6_FLUSHESFOOT
OR EntityModel = V_ILEV_FH_DINEEAMESA //PR_SCENE_F1_ONLAPTOP
EXIT
ENDIF
FREEZE_ENTITY_POSITION(EntityIndex, FrozenByScriptFlag)
IF IS_ENTITY_A_VEHICLE(EntityIndex)
g_bVehFreezingUnderSwitchControl = TRUE
IF NOT FrozenByScriptFlag
ar_SET_VEHICLE_ON_GROUND_PROPERLY(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(EntityIndex))
ENDIF
ENDIF
ENDPROC
//PURPOSE: Called on completion of the mission to release memory used for models etc
PROC Player_Timetable_Scene_Cleanup(BOOL bCleanupForMP, BOOL bCleanupForRepeatPlay)
CPRINTLN(DEBUG_SWITCH, "Player_Timetable_Scene_Cleanup(bCleanupForMP:", GET_STRING_FROM_BOOL(bCleanupForMP), ", bCleanupForRepeatPlay:", GET_STRING_FROM_BOOL(bCleanupForRepeatPlay), ")")
//- destroy all scripted cams -//
IF DOES_CAM_EXIST(LoopCamIndex)
DESTROY_CAM(LoopCamIndex)
ENDIF
IF DOES_CAM_EXIST(ExitCamIndex)
DESTROY_CAM(ExitCamIndex)
ENDIF
RESET_PUSH_IN(sPushInData)
//- mark peds as no longer needed -//
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_USE_MOBILE_PHONE)
IF NOT bCleanupForMP //#1673304
AND NOT bCleanupForRepeatPlay
CLEAR_PED_TASKS(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "not bCleanupForMP")
ELSE
CPRINTLN(DEBUG_SWITCH, "is bCleanupForMP = ignore cleanup tasks")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "sTimetableScene.eOutTask = SCRIPT_TASK_USE_MOBILE_PHONE = ignore cleanup tasks")
ENDIF
ENDIF
//- mark vehicle as no longer needed -//
g_bVehFreezingUnderSwitchControl = FALSE
g_vPlayerVeh[sTimetableScene.sScene.ePed] = scene_veh
IF DOES_ENTITY_EXIST(scene_veh)
AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(scene_veh,FALSE)
STORE_VEH_DATA_FROM_VEH(PLAYER_PED_ID(), scene_veh,
g_sPlayerLastVeh[sTimetableScene.sScene.ePed],
g_vPlayerLastVehCoord[sTimetableScene.sScene.ePed],
g_fPlayerLastVehHead[sTimetableScene.sScene.ePed],
g_ePlayerLastVehState[sTimetableScene.sScene.ePed],
g_ePlayerLastVehGen[sTimetableScene.sScene.ePed])
IF NOT IS_ENTITY_DEAD(scene_veh)
// IF g_ePlayerLastVehState[sTimetableScene.sScene.ePed] = PTVS_1_playerWithVehicle
// IF vdist(GET_ENTITY_COORDS(scene_veh), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 10.0
// SET_MISSION_VEHICLE_GEN_VEHICLE(scene_veh, GET_ENTITY_COORDS(scene_veh), GET_ENTITY_HEADING(scene_veh))
// ENDIF
// ENDIF
// IF g_ePlayerLastVehState[sTimetableScene.sScene.ePed] = PTVS_2_playerInVehicle
// SET_MISSION_VEHICLE_GEN_VEHICLE(scene_veh, GET_ENTITY_COORDS(scene_veh), GET_ENTITY_HEADING(scene_veh))
// ENDIF
SET_VEHICLE_LIGHTS(scene_veh, NO_VEHICLE_LIGHT_OVERRIDE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, FALSE)
ENDIF
/*
FREEZE_ENTITY_POSITION(scene_veh, FALSE)
*/
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
STOP_PLAYBACK_RECORDED_VEHICLE(scene_veh)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene.STOP_PLAYBACK_RECORDED_VEHICLE(scene_veh)")
ENDIF
SET_ENTITY_REQUIRES_MORE_EXPENSIVE_RIVER_CHECK(scene_veh, FALSE)
SET_SCENE_VEH_RADIO_STATION(scene_veh, sTimetableScene.sScene.eScene, FALSE)
IF bCleanupForRepeatPlay
DELETE_VEHICLE(scene_veh)
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene vehicle does not belong to script ignoring")
ENDIF
// IF DOES_ENTITY_EXIST(scene_extra_veh)
// IF NOT IS_ENTITY_DEAD(scene_extra_veh)
// SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_extra_veh, FALSE)
// ENDIF
//
// FREEZE_ENTITY_POSITION(scene_extra_veh, FALSE)
// ENDIF
//- mark objects as no longer needed -//
IF NOT CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
IF DOES_ENTITY_EXIST(player_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
IF GET_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_prop, thisSceneObjectAction)
ENDIF
IF bCleanupForRepeatPlay
AND DOES_ENTITY_EXIST(player_prop)
DELETE_OBJECT(player_prop)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
BOOL bAttachedToBuddy
IF GET_EXTRA_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction, bAttachedToBuddy)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_extra_prop, thisSceneObjectAction)
ENDIF
IF bCleanupForRepeatPlay
AND DOES_ENTITY_EXIST(player_extra_prop)
DELETE_OBJECT(player_extra_prop)
ENDIF
ENDIF
ENDIF
MODEL_NAMES eDoorModel_L = DUMMY_MODEL_FOR_SCRIPT
MODEL_NAMES eDoorModel_R = DUMMY_MODEL_FOR_SCRIPT
VECTOR vDoorOffset_L = <<0,0,0>>, vDoorOffset_R= <<0,0,0>>
DOOR_HASH_ENUM eDoorHash_L, eDoorHash_R
BOOL bReplaceDoor = TRUE
FLOAT fHideDoorRadius = -1.0
IF GET_DOORS_FOR_SCENE(sTimetableScene.sScene.eScene,
eDoorModel_L, eDoorModel_R, vDoorOffset_L, vDoorOffset_R, eDoorHash_L, eDoorHash_R,
bReplaceDoor, fHideDoorRadius)
IF DOES_ENTITY_EXIST(player_door_l)
IF bReplaceDoor
OR bCleanupForRepeatPlay
IF (fHideDoorRadius > 0)
OR bCleanupForRepeatPlay
DELETE_OBJECT(player_door_l)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_L, fHideDoorRadius, eDoorModel_L)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_l)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_door_r)
IF bReplaceDoor
OR bCleanupForRepeatPlay
IF (fHideDoorRadius > 0)
OR bCleanupForRepeatPlay
DELETE_OBJECT(player_door_r)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_R, fHideDoorRadius, eDoorModel_r)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_r)
ENDIF
ENDIF
IF (eDoorHash_L <> DUMMY_DOORHASH)
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_L))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_L), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, default, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L), 0.0, default, TRUE)
ENDIF
ENDIF
IF (eDoorHash_R <> DUMMY_DOORHASH)
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_R))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_R), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, default, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R), 0.0, default, TRUE)
ENDIF
ENDIF
ENDIF
INT RoomKey = GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID())
IF (RoomKey = GET_HASH_KEY("V_35_SweatlRmEMPTY")
OR RoomKey = GET_HASH_KEY("V_35_OfficeRm")
OR RoomKey = GET_HASH_KEY("V_35_HallRm")
OR RoomKey = GET_HASH_KEY("V_35_SweatlRm")) //-1906407714
VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
DOOR_NAME_ENUM eDoor
REPEAT NUMBER_OF_DOORS eDoor
DOOR_DATA_STRUCT sData = GET_DOOR_DATA(eDoor)
IF VDIST2(vPlayerCoord, sData.coords) < (50.0*50.0)
SET_DOOR_STATE(eDoor, DOORSTATE_FORCE_UNLOCKED_THIS_FRAME)
CPRINTLN(DEBUG_SWITCH, "unlock doors ", ENUM_TO_INT(eDoor))
ENDIF
ENDREPEAT
CPRINTLN(DEBUG_SWITCH, "CLEANUP - unlock all doors for this switch!")
ELSE
#IF IS_DEBUG_BUILD
VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "CLEANUP - dont touch the doors - room hash key: \"", RoomKey, "\" ", vPlayerCoord.x, ", ", vPlayerCoord.y, ", ", vPlayerCoord.z, "!")
#ENDIF
ENDIF
TEXT_LABEL_63 entitySetName
BOOL bActivateSet
IF SETUP_INTERIOR_ENTITY_SET_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, entitySetName, bActivateSet)
ENDIF
TEXT_LABEL TCmod
IF SETUP_TIMECYCLE_MOD_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, TCmod)
SET_TRANSITION_OUT_OF_TIMECYCLE_MODIFIER(1.5)
ENDIF
// TEXT_LABEL_63 fxName
// IF SETUP_PTFX_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, fxName)
// STOP_PARTICLE_FX_LOOPED(player_ptfx)
// player_ptfx = NULL
// ENDIF
//- mark models as no longer needed -//
//- remove anims from the memory -//
IF bInitialised_timetable_scene
TEXT_LABEL_63 tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut
ANIMATION_FLAGS playerAnimLoopFlag, playerAnimOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut,
playerAnimLoopFlag, playerAnimOutFlag) //, ePlayerSceneAnimProgress)
REMOVE_ANIM_DICT(tPlayerSceneAnimDict)
ENDIF
//this is not ideal but it will assert if she is deleted earlier
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
// OR (sTimetableScene.sScene.eScene = PR_SCENE_F_CLUB)
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF NOT SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sTimetableScene.sScene.eScene, sPlayerTimetableAdditional_script)
OR bCleanupForRepeatPlay
IF DOES_ENTITY_EXIST(scene_buddy)
DELETE_PED(scene_buddy)
ENDIF
ENDIF
//TODO 1052639: Chat call to Lamar after the Tanisha switch scene.
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
REGISTER_CHAT_CALL_FROM_PLAYER_TO_CHARACTER(CHAT_LAM09, BIT_FRANKLIN, CHAR_LAMAR, 3, 60000)
ENDIF
ELSE
IF NOT IS_PED_INJURED(scene_buddy)
SET_PED_LOD_MULTIPLIER(scene_buddy, 1.0) //#1510547
IF (sTimetableScene.eSceneBuddy <> CHAR_CHOP)
SET_PED_CONFIG_FLAG(scene_buddy, PCF_KeepRelationshipGroupAfterCleanUp, TRUE)
CPRINTLN(DEBUG_SWITCH, "SET_PED_CONFIG_FLAG(scene_buddy, PCF_KeepRelationshipGroupAfterCleanUp, TRUE)")
ENDIF
ENDIF
g_pScene_buddy = scene_buddy
ENDIF
IF (sTimetableScene.eSceneBuddy <> NO_CHARACTER)
IF (sTimetableScene.eBuddyLoopTask = script_task_play_anim)
OR (sTimetableScene.eBuddyOutTask = script_task_play_anim)
TEXT_LABEL_63 tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut
ANIMATION_FLAGS buddyAnimLoopFlag, buddyAnimOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddyAnimLoopFlag, buddyAnimOutFlag)
REMOVE_ANIM_DICT(tSceneBuddyAnimDict)
ENDIF
ENDIF
ENDIF
ENDIF
//- remove vehicle recordings from the memory -//
IF NOT IS_STRING_NULL_OR_EMPTY(tRecordingName)
AND (iRecordingNum > 0)
REMOVE_VEHICLE_RECORDING(iRecordingNum, tRecordingName)
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> * set wanted level to '", GET_PLAYER_WANTED_LEVEL(PLAYER_ID()), "' on cleanup")
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), GET_PLAYER_WANTED_LEVEL(PLAYER_ID()))
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
ENDIF
ENDIF
//- clear sequences -//
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Player_Timetable_Scene_Cleanup")
TEXT_LABEL_63 tBankName = "", tBankBName = ""
IF SETUP_AUDIO_BANK_FOR_SCENE(sTimetableScene.sScene.eScene, tBankName, tBankBName)
RELEASE_AMBIENT_AUDIO_BANK()
UNREGISTER_SCRIPT_WITH_AUDIO()
ENDIF
TEXT_LABEL_63 tAudioEvent = ""
INT iStartOffsetMs = 0
IF SETUP_SYNCH_AUDIO_EVENT_FOR_SCENE(sTimetableScene.sScene.eScene, tAudioEvent, iStartOffsetMs)
IF g_iPlayer_Timetable_Exit_SynchSceneID != -1
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
STOP_SYNCHRONIZED_AUDIO_EVENT(g_iPlayer_Timetable_Exit_SynchSceneID)
ENDIF
ENDIF
ENDIF
IF SETUP_AUDIO_SCENE_FOR_SCENE(sTimetableScene.sScene.eScene, tAudioEvent)
//doNothing
ENDIF
INT Duration, MinFrequency, MaxFrequency
IF SETUP_SYNCH_SHAKE_EVENT_FOR_SCENE(sTimetableScene.sScene.eScene, Duration, MinFrequency, MaxFrequency)
STOP_CONTROL_SHAKE(PLAYER_CONTROL)
ENDIF
IF SETUP_FORCE_STEP_TYPE_FOR_SCENE(sTimetableScene.sScene.eScene)
SET_FORCE_STEP_TYPE(PLAYER_PED_ID(), FALSE, 0,0)
ENDIF
DISABLE_CELLPHONE(FALSE)
SET_RADAR_ZOOM(0) //712364
RELEASE_FAKE_CELLPHONE_MOVIE(sDaughterFakeCellphoneData)
IF bSwitchForcedStartAmbientTV
TEXT_LABEL_31 RoomName = ""
FLOAT fTurnOffTVPhase = 0.0
TV_LOCATION eRoomTVLocation
TVCHANNELTYPE eTVChannelType
TV_CHANNEL_PLAYLIST eTVPlaylist
IF CONTROL_PLAYER_WATCHING_TV(sTimetableScene.sScene.eScene, RoomName, fTurnOffTVPhase, eRoomTVLocation, eTVChannelType, eTVPlaylist)
STOP_AMBIENT_TV_PLAYBACK(eRoomTVLocation)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> STOP_AMBIENT_TV_PLAYBACK()")
#ENDIF
ENDIF
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_Fa_PHONECALL_ARM3)
OR (sTimetableScene.sScene.eScene = PR_SCENE_Fa_PHONECALL_FAM1)
OR (sTimetableScene.sScene.eScene = PR_SCENE_Fa_PHONECALL_FAM3)
OR (sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_ARM3)
// OR (sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_FAM1)
// OR (sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_FAM3)
IF NOT GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TENNIS))
EXECUTE_CODE_ID(CID_ACTIVATE_MINIGAME_POST_ARM3_BLOCK)
ENDIF
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ARM3_STRIPCLUB_SWITCH_AVAILABLE, FALSE)
SET_DOOR_STATE(DOORNAME_STRIPCLUB_F, DOORSTATE_UNLOCKED)
SET_DOOR_STATE(DOORNAME_STRIPCLUB_R, DOORSTATE_UNLOCKED)
IF (g_sPlayerLastVeh[CHAR_MICHAEL].model = BJXL)
AND (g_ePlayerLastVehState[CHAR_MICHAEL] = PTVS_1_playerWithVehicle)
g_sPlayerLastVeh[CHAR_MICHAEL].model = DUMMY_MODEL_FOR_SCRIPT
g_ePlayerLastVehState[CHAR_MICHAEL] = PTVS_0_noVehicle
CPRINTLN(DEBUG_SWITCH, "reset michaels BJXL")
ENDIF
IF (g_sPlayerLastVeh[CHAR_FRANKLIN].model = BJXL)
AND (g_ePlayerLastVehState[CHAR_FRANKLIN] = PTVS_1_playerWithVehicle)
g_sPlayerLastVeh[CHAR_FRANKLIN].model = DUMMY_MODEL_FOR_SCRIPT
g_ePlayerLastVehState[CHAR_FRANKLIN] = PTVS_0_noVehicle
CPRINTLN(DEBUG_SWITCH, "reset franklins BJXL")
ENDIF
ENDIF
SWITCH sTimetableScene.sScene.eScene
CASE PR_SCENE_M_PIER_a
CASE PR_SCENE_M7_FAKEYOGA
CASE PR_SCENE_M_CANAL_a
CASE PR_SCENE_M_CANAL_b
CASE PR_SCENE_M_CANAL_c
CASE PR_SCENE_M_PIER_b
CASE PR_SCENE_M2_SMOKINGGOLF
CASE PR_SCENE_M_VWOODPARK_a
CASE PR_SCENE_M_VWOODPARK_b
CASE PR_SCENE_M6_MORNING_a
BAWSAQ_INCREMENT_MODIFIER(BSMF_BSM_SMOKED_FOR_RWC) //#1514495 - stockmarket
BREAK
CASE PR_SCENE_F_GYM
CASE PR_SCENE_F0_SH_PUSHUP_a
CASE PR_SCENE_F0_SH_PUSHUP_b
CASE PR_SCENE_F1_SH_PUSHUP
BAWSAQ_INCREMENT_MODIFIER(BSMF_SM_GYM) //#1514495 - stockmarket
BREAK
ENDSWITCH
IF (sTimetableScene.sScene.eScene = PR_SCENE_M_HOOKERMOTEL)
SHRINK_ADD_SEX_TIMESTAMP()
ENDIF
//- enable the cellphone -//
//- reset wanted multiplier -//
PRIVATE_SetRoadsSwitchArea(sTimetableScene.sScene.eScene, TRUE)
PRIVATE_SetPedInSwitchArea(sTimetableScene.sScene.eScene, TRUE)
ENABLE_PROCOBJ_CREATION()
#IF IS_DEBUG_BUILD
//- delete the mission widget -//
IF DOES_WIDGET_GROUP_EXIST(player_timetable_scene_widget)
DELETE_WIDGET_GROUP(player_timetable_scene_widget)
ENDIF
IF NOT g_savedGlobals.sFlow.isGameflowActive
OR NOT IS_BIT_SET(g_savedGlobals.sFlow.strandSavedVars[STRAND_PROLOGUE].savedBitflags, SAVED_BITS_STRAND_ACTIVATED)
IF NOT (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
DOOR_NAME_ENUM eDoor
REPEAT NUMBER_OF_DOORS eDoor
DOOR_DATA_STRUCT sData = GET_DOOR_DATA(eDoor)
IF VDIST2(vPlayerCoord, sData.coords) < (100.0*100.0)
SET_DOOR_STATE(eDoor, DOORSTATE_FORCE_UNLOCKED_THIS_FRAME)
CPRINTLN(DEBUG_SWITCH, "unlock door ", ENUM_TO_INT(eDoor), " - ", sData.dbg_name)
ENDIF
ENDREPEAT
CPRINTLN(DEBUG_SWITCH, "DEBUG - unlock all doors for this switch!")
ELSE
CPRINTLN(DEBUG_SWITCH, "DEBUG - dont touch the doors - tanishafight!!")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "DEBUG - dont touch the doors - in flow!!")
ENDIF
#ENDIF
// Reset the global communication delay to a short time after a switch scene.
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH)
HIDE_PHONE_FOR_HOTSWAP(FALSE)
BLOCK_HUD_PHONE_MOVEMENT_FOR_SWITCH_SCENE_CALL(FALSE)
IF (sTimetableScene.sScene.eScene != PR_SCENE_M_S_FAMILY4)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
ENDIF
// SAVE_STRING_TO_DEBUG_FILE(" [")
// SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
// SAVE_STRING_TO_DEBUG_FILE(" g_iPauseOnOutro:")
// SAVE_INT_TO_DEBUG_FILE(g_iPauseOnOutro)
// SAVE_STRING_TO_DEBUG_FILE("]")
// SAVE_NEWLINE_TO_DEBUG_FILE()
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
// IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
// WHILE NOT IS_KEYBOARD_KEY_JUST_PRESSED(KEY_C)
// FLOAT gameplayCamHeading = GET_GAMEPLAY_CAM_RELATIVE_HEADING()
// FLOAT gameplayCamPitch = GET_GAMEPLAY_CAM_RELATIVE_PITCH()
//
// SAVE_STRING_TO_DEBUG_FILE(" CASE ")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))SAVE_STRING_TO_DEBUG_FILE(" //SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE()")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" gpCamHead = ")SAVE_FLOAT_TO_DEBUG_FILE(gameplayCamHeading)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" gpCamPitch = ")SAVE_FLOAT_TO_DEBUG_FILE(gameplayCamPitch)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" ")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" BREAK")SAVE_NEWLINE_TO_DEBUG_FILE()
//
// WAIT(0)
// ENDWHILE
// ENDIF
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // //
//- kill mission text link -//
THEFEED_RESUME()
SET_GAME_PAUSED(FALSE)
TERMINATE_THIS_THREAD()
ENDPROC
BOOL bWaitingForPlayerLieInInput = false, bDisableWhileWaiting = TRUE //, bFirstPersonCamQuit = FALSE
PROC DisableWhileWaiting(STRING s)
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
IF NOT bDisableWhileWaiting
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
str = ("EnableWhileWaiting(\"")
str += (s)
str += ("\")")
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 0.0, HUD_COLOUR_RED)
#ENDIF
EXIT
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
str = ("DisableWhileWaiting(\"")
str += (s)
str += ("\")")
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 0.0, HUD_COLOUR_blue)
#ENDIF
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_LR)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_FLY_YAW_LEFT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_FLY_YAW_RIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_FLY_THROTTLE_UP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_FLY_THROTTLE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
IF NOT bWaitingForPlayerLieInInput
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_VEH_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_LR)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT)
ELSE
#IF IS_DEBUG_BUILD
str = (" bWaitingForPlayerLieInInput = true...")
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 1.0, HUD_COLOUR_blue)
#ENDIF
ENDIF
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_RADIO_WHEEL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_LR) //1530825)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_DOWN_ONLY)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_CANCEL)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_X)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_Y)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_UP)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CURSOR_SCROLL_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) //2080815
// Hide the HUD
HIDE_HUD_AND_RADAR_THIS_FRAME()
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_FEED)
IF (g_Cellphone.PhoneDS <> PDS_DISABLED)
IF bKeepCellphoneDisabled
DISABLE_CELLPHONE(TRUE)
ENDIF
ENDIF
//Is the global wait timer at 0?
INT iGameTime = GET_GAME_TIMER()
IF iGameTime >= g_iGlobalWaitTime - 0500
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 2)
s = s
ENDIF
ENDPROC
//PURPOSE: Called on successful completion of the mission
PROC Player_Timetable_Scene_Finished()
IF DOES_ENTITY_EXIST(player_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
IF GET_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_prop, thisSceneObjectAction)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
BOOL bAttachedToBuddy
IF GET_EXTRA_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction, bAttachedToBuddy)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_extra_prop, thisSceneObjectAction)
ENDIF
ENDIF
// BOOL bLocalUnleashCodeCamStreaming = TRUE
// #IF IS_DEBUG_BUILD
// bLocalUnleashCodeCamStreaming = TRUE
// #ENDIF
#IF IS_DEBUG_BUILD
IF bFilledPushInData
DrawLiteralSceneString("bFilledPushInData",
1+1, HUD_COLOUR_RED)
ELSE
DrawLiteralSceneString("NOT bFilledPushInData",
1+1, HUD_COLOUR_BLUE)
ENDIF
IF IS_PLAYER_SWITCH_IN_PROGRESS()
DrawLiteralSceneString("switchSplineCamInProgress",
2+1, HUD_COLOUR_RED)
ELSE
//
DrawLiteralSceneString("NOT switchSplineCamInProgress",
2+1, HUD_COLOUR_BLUE)
ENDIF
IF IS_INTERPOLATING_FROM_SCRIPT_CAMS()
IF IS_PLAYER_PLAYING(PLAYER_ID())
AND NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
DrawLiteralSceneString("OFF interping from script cam",
4+1, HUD_COLOUR_REDDARK)
ELSE
DrawLiteralSceneString("ON interping from script cam",
4+1, HUD_COLOUR_REDLIGHT)
ENDIF
ELSE
DrawLiteralSceneString("NOT interping from script cam",
4+1, HUD_COLOUR_BLUE)
ENDIF
#ENDIF
IF bFilledPushInData
DisableWhileWaiting("bFilledPushInData")
EXIT
ENDIF
IF IS_PLAYER_SWITCH_IN_PROGRESS()
DisableWhileWaiting("IS_PLAYER_SWITCH_IN_PROGRESS")
EXIT
ENDIF
IF IS_INTERPOLATING_FROM_SCRIPT_CAMS()
DisableWhileWaiting("Player_Timetable_Scene_Finished")
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_VEH_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_LR)
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_LOOK_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_LEFT_ONLY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_RIGHT_ONLY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_DOWN_ONLY)
EXIT
ENDIF
bPlayer_timetable_scene_in_progress = FALSE
ENDPROC
//PURPOSE: Initializes all the variables used within the scope of the script
PROC Initialise_Player_Timetable_Scene_Variables(PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene)
//- vectors -//
//- floats -//
//- ints -//
//-- structs : PED_SCENE_STRUCT --//
sTimetableScene = sPassedScene
bInitialised_timetable_scene = TRUE
bShortCircuitedPushin = FALSE // rob
IF sTimetableScene.eSceneBuddy <> NO_CHARACTER
SWITCH sTimetableScene.eSceneBuddy
CASE CHAR_AMANDA
g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_JIMMY
g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_TRACEY
g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_LAMAR
g_eCurrentFamilyEvent[FM_FRANKLIN_LAMAR] = FAMILY_MEMBER_BUSY
g_eCurrentFamilyEvent[FM_FRANKLIN_STRETCH] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_RON
g_eCurrentFamilyEvent[FM_TREVOR_0_RON] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_FLOYD
g_eCurrentFamilyEvent[FM_TREVOR_1_FLOYD] = FAMILY_MEMBER_BUSY
BREAK
CASE CHAR_DAVE //used in 'PR_SCENE_M_MD_FBI2'
CASE CHAR_TANISHA //used in 'PR_SCENE_F0_TANISHAFIGHT'
CASE CHAR_WADE //used in 'PR_SCENE_T_SC_DRUNKHOWLING'
//
BREAK
CASE CHAR_BLANK_ENTRY
//used for non story char buddies
BREAK
DEFAULT
SCRIPT_ASSERT("unknown sTimetableScene.eSceneBuddy")
BREAK
ENDSWITCH
ENDIF
GET_PLAYER_VEH_RECORDING_FOR_SCENE(sTimetableScene.sScene.eScene, tRecordingName, iRecordingNum,
fRecordingStart, fRecordingSkip, fRecordingStop,
fSpeedSwitch, fSpeedExit)
IF ((sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT)
OR (sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT))
AND (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
FLOAT fWaterHeight
IF GET_WATER_HEIGHT_NO_WAVES(sTimetableScene.sScene.vCreateCoords, fWaterHeight)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: fWaterHeight: ", fWaterHeight, " //vCreateCoords.z: ", sTimetableScene.sScene.vCreateCoords.z)
#ENDIF
IF (sTimetableScene.sScene.vCreateCoords.z < fWaterHeight)
PED_VEH_DATA_STRUCT sVehData //MODEL_NAMES vehModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vVehCoordOffset = <<0,0,0>>
FLOAT fVehHeadOffset = 0
GET_PLAYER_VEH_POSITION_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene,
sVehData, vVehCoordOffset, fVehHeadOffset,
vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
IF NOT IS_THIS_MODEL_A_BOAT(sVehData.model)
AND NOT (sVehData.model = SUBMERSIBLE OR sVehData.model = SUBMERSIBLE2)
sTimetableScene.eVehState = PTVS_1_playerWithVehicle
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: sTimetableScene.eVehState = PTVS_1_playerWithVehicle", " [", SAFE_GET_MODEL_NAME_FOR_DEBUG(sVehData.model), "]")
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: ignore water vehicle stuff", " [", SAFE_GET_MODEL_NAME_FOR_DEBUG(sVehData.model))PRINTLN(DEBUG_SWITCH, "]")
#ENDIF
ENDIF
ENDIF
ENDIF
vSceneVeh_driveOffset = <<0,g_sDefaultPlayerSwitchState[sTimetableScene.sScene.ePed].fVehicleSpeed_a*1.5,0>>
fSceneVeh_driveSpeed = g_sDefaultPlayerSwitchState[sTimetableScene.sScene.ePed].fVehicleSpeed_a
CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: (fSceneVeh_driveSpeed:", fSceneVeh_driveSpeed, ")")
sTimetableScene.eLoopTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
sTimetableScene.eOutTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
ELSE
// IF NOT IS_COLLISION_MARKED_OUTSIDE(sTimetableScene.sScene.vCreateCoords)
sTimetableScene.eLoopTask = SCRIPT_TASK_STAND_STILL
sTimetableScene.eOutTask = SCRIPT_TASK_STAND_STILL
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: vCreateCoords", sTimetableScene.sScene.vCreateCoords, "marked inside - stand still")
#ENDIF
// ELSE
// sTimetableScene.eLoopTask = SCRIPT_TASK_WANDER_STANDARD //SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD //SCRIPT_TASK_GO_STRAIGHT_TO_COORD
// sTimetableScene.eOutTask = SCRIPT_TASK_WANDER_STANDARD //SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD
//
// bUpdatedWalkTasks = TRUE
//
// #IF IS_DEBUG_BUILD
// CPRINTLN(DEBUG_SWITCH, "Initialise_Player_Timetable_Scene_Variables: vCreateCoords", sTimetableScene.sScene.vCreateCoords, "marked outside - walk to coord")
// #ENDIF
// ENDIF
ENDIF
ENDIF
ENDPROC
// *******************************************************************************************
// SETUP FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC BOOL SafeDetachSynchronizedScene(INT &sceneID)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "SafeDetachSynchronizedScene(", sceneID, ")")
#ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneID)
DETACH_SYNCHRONIZED_SCENE(sceneID)
sceneID = -1
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC CheckForPassengersToClear(VEHICLE_INDEX vehID)
IF g_eMissionRunningOnMPSwitchStart = SP_MISSION_NONE
AND g_eRCMRunningOnMPSwitchStart = NO_RC_MISSION
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear() : func EXIT early as no SP/RC mission was running when switch occured")
EXIT
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear(): last SP = ", g_eMissionRunningOnMPSwitchStart, " / last RC = ", g_eRCMRunningOnMPSwitchStart)
#ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF g_eMissionRunningOnMPSwitchStart != SP_MISSION_NONE
SCRIPT_ASSERT("g_eMissionRunningOnMPSwitchStart != SP_MISSION_NONE")
ENDIF
#ENDIF
PED_INDEX pedTemp
IF NOT IS_VEHICLE_SEAT_FREE(vehID, VS_FRONT_RIGHT)
pedTemp = GET_PED_IN_VEHICLE_SEAT(vehID, VS_FRONT_RIGHT)
IF NOT IS_PED_INJURED(pedTemp)
CLEAR_PED_TASKS_IMMEDIATELY(pedTemp)
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear() : call clear ped tasks immediately on VS_FRONT_RIGHT ped")
ENDIF
ENDIF
IF NOT IS_VEHICLE_SEAT_FREE(vehID, VS_BACK_LEFT)
pedTemp = GET_PED_IN_VEHICLE_SEAT(vehID, VS_BACK_LEFT)
IF NOT IS_PED_INJURED(pedTemp)
CLEAR_PED_TASKS_IMMEDIATELY(pedTemp)
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear() : call clear ped tasks immediately on VS_BACK_LEFT ped")
ENDIF
ENDIF
IF NOT IS_VEHICLE_SEAT_FREE(vehID, VS_BACK_RIGHT)
pedTemp = GET_PED_IN_VEHICLE_SEAT(vehID, VS_BACK_RIGHT)
IF NOT IS_PED_INJURED(pedTemp)
CLEAR_PED_TASKS_IMMEDIATELY(pedTemp)
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear() : call clear ped tasks immediately on VS_BACK_RIGHT ped")
ENDIF
ENDIF
IF IS_ENTITY_ATTACHED(vehID)
CPRINTLN(DEBUG_SWITCH, "CheckForPassengersToClear() : detach vehicle")
DETACH_ENTITY(vehID)
ENDIF
CLEAR_AREA(GET_ENTITY_COORDS(vehID, FALSE), 2.5, FALSE)
ENDPROC
FUNC BOOL is_player_already_on_vehicle(PED_VEH_DATA_STRUCT sVehData, VEHICLE_INDEX &vehID)
SELECTOR_SLOTS_ENUM eNewSelectorPed = sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed
IF eNewSelectorPed >= NUMBER_OF_SELECTOR_PEDS
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " # new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" > NUMBER_OF_SELECTOR_PEDS")
SELECTOR_SLOTS_ENUM ePreviousSelectorPed = sTimetableScene.sScene.sSelectorPeds.ePreviousSelectorPed
SELECTOR_SLOTS_ENUM eCurrentSelectorPed = sTimetableScene.sScene.sSelectorPeds.eCurrentSelectorPed
CPRINTLN(DEBUG_SWITCH, " ## prev ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(ePreviousSelectorPed)), "\"")
CPRINTLN(DEBUG_SWITCH, " ## current ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eCurrentSelectorPed)), "\"")
#ENDIF
eNewSelectorPed = sTimetableScene.sScene.sSelectorPeds.eCurrentSelectorPed //RETURN TRUE
ENDIF
PED_INDEX scenePedID = sTimetableScene.sScene.sSelectorPeds.pedID[eNewSelectorPed]
IF NOT DOES_ENTITY_EXIST(scenePedID)
IF IS_PED_THE_CURRENT_PLAYER_PED(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " ### ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" doesnt exist, but is the player ped")
#ENDIF
scenePedID = PLAYER_PED_ID()
ENDIF
ENDIF
IF NOT IS_PED_INJURED(scenePedID)
IF IS_PED_IN_ANY_VEHICLE(scenePedID, TRUE)
VEHICLE_INDEX player_vehID = GET_VEHICLE_PED_IS_IN(scenePedID, TRUE)
IF DOES_ENTITY_EXIST(player_vehID)
IF GET_ENTITY_MODEL(player_vehID) = sVehData.model
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " # new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" is already in a vehicle...")
#ENDIF
vehID = player_vehID
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehID)
SET_ENTITY_AS_MISSION_ENTITY(vehID, TRUE, TRUE)
ENDIF
RETURN TRUE
#IF IS_DEBUG_BUILD
else
CPRINTLN(DEBUG_SWITCH, " # vehicle new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" is in doesnt match")
#ENDIF
ENDIF
#IF IS_DEBUG_BUILD
else
CPRINTLN(DEBUG_SWITCH, " # vehicle new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" is in does not exist")
return false
#ENDIF
ENDIF
#IF IS_DEBUG_BUILD
else
CPRINTLN(DEBUG_SWITCH, " # new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" is not in any vehicle")
#ENDIF
ENDIF
IF DOES_ENTITY_EXIST(g_vPlayerVeh[sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed])
IF NOT IS_ENTITY_A_MISSION_ENTITY(g_vPlayerVeh[sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed])
SET_ENTITY_AS_MISSION_ENTITY(g_vPlayerVeh[sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed], TRUE, TRUE)
ENDIF
IF GET_ENTITY_MODEL(g_vPlayerVeh[sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed]) = sVehData.model
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " # new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" has last known vehicle alive somewhere...")
#ENDIF
vehID = g_vPlayerVeh[sTimetableScene.sScene.sSelectorPeds.eNewSelectorPed]
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehID)
SET_ENTITY_AS_MISSION_ENTITY(vehID, TRUE, TRUE)
ENDIF
CheckForPassengersToClear(vehID)
RETURN TRUE
ENDIF
ENDIF
INT SearchFlags = VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_LAW_ENFORCER_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES
IF (sTimetableScene.eVehState = PTVS_1_playerWithVehicle)
VEHICLE_INDEX player_vehID = GET_RANDOM_VEHICLE_IN_SPHERE(sTimetableScene.sScene.vCreateCoords, 10.0, sVehData.model, SearchFlags)
IF DOES_ENTITY_EXIST(player_vehID)
// SCRIPT_ASSERT("# ped vehicle found ambiently (1_playerWithVehicle)!")
CPRINTLN(DEBUG_SWITCH, " # ped vehicle \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" found ambiently (1_playerWithVehicle)!")
vehID = player_vehID
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehID)
SET_ENTITY_AS_MISSION_ENTITY(vehID, TRUE, TRUE)
ENDIF
CheckForPassengersToClear(vehID)
RETURN TRUE
ENDIF
ENDIF
IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
VEHICLE_INDEX player_vehID = GET_RANDOM_VEHICLE_IN_SPHERE(sTimetableScene.sScene.vCreateCoords, 10.0, sVehData.model, SearchFlags)
IF DOES_ENTITY_EXIST(player_vehID)
// SCRIPT_ASSERT("# ped vehicle found ambiently (2_playerInVehicle)!")
CPRINTLN(DEBUG_SWITCH, " # ped vehicle \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" found ambiently (2_playerInVehicle)!")
vehID = player_vehID
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehID)
SET_ENTITY_AS_MISSION_ENTITY(vehID, TRUE, TRUE)
ENDIF
CheckForPassengersToClear(vehID)
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
else
CPRINTLN(DEBUG_SWITCH, " # new ped \"", GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(eNewSelectorPed)), "\" is injured")
#ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC PRIVATE_SetDefaultSceneBuddyAttributes(PED_INDEX &pedIndex, enumCharacterList eSceneBuddy)
REL_GROUP_HASH eRelGroup
SWITCH eSceneBuddy
CASE CHAR_JIMMY
CASE CHAR_TRACEY
CASE CHAR_AMANDA
CASE CHAR_DAVE //for scene PRM_MD_FBI2 (needs removing one day)
eRelGroup = RELGROUPHASH_FAMILY_M
BREAK
CASE CHAR_TANISHA
CASE CHAR_LAMAR
CASE CHAR_CHOP
eRelGroup = RELGROUPHASH_FAMILY_F
BREAK
CASE CHAR_FLOYD
CASE CHAR_RON
CASE CHAR_WADE
eRelGroup = RELGROUPHASH_FAMILY_T
BREAK
CASE CHAR_BLANK_ENTRY
MODEL_NAMES model
model = GET_ENTITY_MODEL(pedIndex)
IF (model = GET_CHOP_MODEL())
eRelGroup = RELGROUPHASH_FAMILY_F
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
str = ("invalid blank entry model \"")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(model)
str += ("\" for SetDefaultSceneBuddyAttributes()")
SCRIPT_ASSERT(str)
#ENDIF
g_pScene_buddy = pedIndex
EXIT
ENDIF
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
str = ("invalid scene buddy \"")
str += GET_PLAYER_PED_STRING(eSceneBuddy)
str += ("\" for SetDefaultSceneBuddyAttributes()")
SCRIPT_ASSERT(str)
#ENDIF
g_pScene_buddy = pedIndex
EXIT
BREAK
ENDSWITCH
SET_ENTITY_LOD_DIST(pedIndex, 100) //#1444135
SET_PED_LOD_MULTIPLIER(pedIndex, 2.0) //#1510547
PRIVATE_SetDefaultFamilyMemberAttributes(pedIndex, eRelGroup)
g_pScene_buddy = pedIndex
ENDPROC
/// PURPOSE:
/// url:bugstar:742018
/// PARAMS:
/// ePedScene -
/// RETURNS:
///
FUNC BOOL FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(ENTITY_INDEX EntityIndex, PED_REQUEST_SCENE_ENUM ePedScene)
INTERIOR_INSTANCE_INDEX InteriorInstanceIndex
INT RoomKey
SWITCH ePedScene
// CASE PR_SCENE_F1_ONCELL
// InteriorInstanceIndex = GET_INTERIOR_AT_COORDS_with_type(<<2.1047, 526.6067, 174.9013>>, "v_franklinshouse")
// RoomKey = GET_HASH_KEY("loungeB")
// BREAK
// CASE PR_SCENE_F1_GETTINGREADY
// InteriorInstanceIndex = GET_INTERIOR_AT_COORDS_with_type(<<9.0561, 528.0162, 169.6401>>, "v_franklinshouse")
// RoomKey = GET_HASH_KEY("Wardrobe")
// BREAK
// CASE PR_SCENE_T_SC_BAR
// InteriorInstanceIndex = GET_INTERIOR_AT_COORDS_with_type(<<126.0881, -1284.4879, 28.2834>>, "v_strip3")
// RoomKey = GET_HASH_KEY("strp3mainrm")
// BREAK
CASE PR_SCENE_T_SC_CHASE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "CLEAR_ROOM_FOR_ENTITY(EntityIndex, ", ")")
#ENDIF
CLEAR_ROOM_FOR_ENTITY(EntityIndex)
RETURN TRUE
BREAK
CASE PR_SCENE_M7_EXITFANCYSHOP
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "CLEAR_ROOM_FOR_ENTITY(EntityIndex, ", ")")
#ENDIF
CLEAR_ROOM_FOR_ENTITY(EntityIndex)
RETURN TRUE
BREAK
DEFAULT
InteriorInstanceIndex = NULL
RoomKey = -1
RETURN FALSE
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF (sTimetableScene.sScene.roomInterior <> InteriorInstanceIndex)
CPRINTLN(DEBUG_SWITCH, "sTimetableScene.sScene.roomInterior[", NATIVE_TO_INT(sTimetableScene.sScene.roomInterior), "] <> InteriorInstanceIndex[", NATIVE_TO_INT(InteriorInstanceIndex), "])")
SCRIPT_ASSERT("sTimetableScene.sScene.roomInterior <> InteriorInstanceIndex")
ELSE
TEXT_LABEL_63 sInvalid
sInvalid = Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
sInvalid += ".roomInterior = InteriorInstanceIndex"
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
ENDIF
#ENDIF
FORCE_ROOM_FOR_ENTITY(EntityIndex, InteriorInstanceIndex, RoomKey)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(EntityIndex, ", NATIVE_TO_INT(InteriorInstanceIndex), ", ", RoomKey, ")")
#ENDIF
RETURN TRUE
ENDFUNC
PROC ar_ADD_PED_FOR_DIALOGUE(TEXT_LABEL tPlayerSceneVoiceID, TEXT_LABEL tBuddySceneVoiceID)
IF (sTimetableScene.sScene.eScene = PR_SCENE_F_S_AGENCY_2A_a)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_S_AGENCY_2A_b)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, NULL, "")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, NULL, "")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, NULL, "MICHAEL")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), "FRANKLIN")
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 3, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
#IF NOT IS_JAPANESE_BUILD
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_T_SHIT)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, NULL, "")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct,
3,
PLAYER_PED_ID(), tPlayerSceneVoiceID)
IF NOT g_bMagDemoActive
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 3, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ENDIF
#ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M6_RONBORING)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 0)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 3)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 4)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, PLAYER_PED_ID(), tPlayerSceneVoiceID)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, scene_buddy, tBuddySceneVoiceID)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 3, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_Ta_CARSTEAL4)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 0)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 1)
REMOVE_PED_FOR_DIALOGUE(MyLocalPedStruct, 4)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, PLAYER_PED_ID(), tPlayerSceneVoiceID)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, NULL, tBuddySceneVoiceID)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 3, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M6_ONPHONE)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M6_SUNBATHING)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M6_DEPRESSED)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, NULL, "")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct,
2,
PLAYER_PED_ID(), tPlayerSceneVoiceID)
IF NOT g_bMagDemoActive
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 2, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M7_HOOKERS)
enumCharacterList ePed
IF GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTimetableScene.sScene.eScene, ePed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), tPlayerSceneVoiceID)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 6, scene_buddy, tBuddySceneVoiceID)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, ", 0, ", PLAYER_PED_ID(), \"", tPlayerSceneVoiceID, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ELSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
enumCharacterList ePlayerPed = GET_CURRENT_PLAYER_PED_ENUM()
INT iPlayerSceneVoiceNum = ENUM_TO_INT(ePlayerPed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iPlayerSceneVoiceNum, PLAYER_PED_ID(), tPlayerSceneVoiceID)
ENDIF
INT iBuddySceneVoiceNum = 4
IF NOT IS_PED_INJURED(scene_buddy)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iBuddySceneVoiceNum, scene_buddy, tBuddySceneVoiceID)
ELIF NOT IS_STRING_NULL_OR_EMPTY(tBuddySceneVoiceID)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iBuddySceneVoiceNum, NULL, tBuddySceneVoiceID)
ENDIF
ENDIF
ENDPROC
FUNC BOOL WaitingForPhonecallToStartAndPause( #IF IS_DEBUG_BUILD INT &iDrawSceneRot #ENDIF )
IF NOT IS_CELLPHONE_CONVERSATION_PAUSED()
TEXT_LABEL tPlayerSceneVoiceID, tBuddySceneVoiceID
FLOAT fSceneSpeechPhase
IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneVoiceID, tBuddySceneVoiceID, tSpeechBlock, tSpeechLabel, fSceneSpeechPhase)
BLOCK_HUD_PHONE_MOVEMENT_FOR_SWITCH_SCENE_CALL(TRUE)
HIDE_PHONE_FOR_HOTSWAP(TRUE)
IF (g_Cellphone.PhoneDS = PDS_DISABLED)
DISABLE_CELLPHONE(FALSE)
bKeepCellphoneDisabled = FALSE
ENDIF
SET_ENTITY_COORDS(PLAYER_PED_ID(), sTimetableScene.sScene.vCreateCoords)
SET_ENTITY_HEADING(PLAYER_PED_ID(), sTimetableScene.sScene.fCreateHead)
ar_ADD_PED_FOR_DIALOGUE(tPlayerSceneVoiceID, tBuddySceneVoiceID)
INT iWaitTimer = GET_GAME_TIMER() + 7500
WHILE NOT PLAYER_CALL_CHAR_CELLPHONE(MyLocalPedStruct, CHAR_LAMAR, tSpeechBlock, tSpeechLabel, CONV_PRIORITY_AMBIENT_HIGH)
AND (iWaitTimer > GET_GAME_TIMER())
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("not PLAYER_CALL ")
str += iWaitTimer - GET_GAME_TIMER()
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
#ENDIF
IF SET_PED_PRESET_OUTFIT_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene, PLAYER_PED_ID(), iPlayerOutfitPreloadStage)
#IF IS_DEBUG_BUILD
str = ("preload outfit ")
str += (iPlayerOutfitPreloadStage)
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ELIF NOT (HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
AND HAS_PED_PRELOAD_PROP_DATA_FINISHED(PLAYER_PED_ID()))
#IF IS_DEBUG_BUILD
str = ("prestreamed outfit ")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ENDIF
WAIT(0)
ENDWHILE
HIDE_PHONE_FOR_HOTSWAP(TRUE)
BLOCK_HUD_PHONE_MOVEMENT_FOR_SWITCH_SCENE_CALL(TRUE)
SET_BIT(BitSet_CellphoneDisplay_Third, g_BSTHIRD_PREVENT_PRELOADED_PHONECALL_START)
iWaitTimer = GET_GAME_TIMER() + 12500
WHILE NOT IS_CELLPHONE_CONVERSATION_PLAYING()
AND (iWaitTimer > GET_GAME_TIMER())
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("not IS_CALL_ONGOING ")
str += iWaitTimer - GET_GAME_TIMER()
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
#ENDIF
IF SET_PED_PRESET_OUTFIT_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene, PLAYER_PED_ID(), iPlayerOutfitPreloadStage)
#IF IS_DEBUG_BUILD
str = ("preload outfit ")
str += (iPlayerOutfitPreloadStage)
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ELIF NOT (HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
AND HAS_PED_PRELOAD_PROP_DATA_FINISHED(PLAYER_PED_ID()))
#IF IS_DEBUG_BUILD
str = ("prestreamed outfit ")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ENDIF
WAIT(0)
ENDWHILE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<WaitingForPhonecallToStartAndPause> PAUSE_PLAYER_CALL_CHAR_CELLPHONE(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
PAUSE_CELLPHONE_CONVERSATION(TRUE)
HIDE_PHONE_FOR_HOTSWAP(TRUE)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("wait for call")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("call PAUSED")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
RETURN FALSE
ENDFUNC
#IF NOT IS_NEXTGEN_BUILD
#IF IS_DEBUG_BUILD
CONST_INT iCONST_WAIT_FOR_BUDDY_MAX_FRAMES 250
#ENDIF
#IF NOT IS_DEBUG_BUILD
CONST_INT iCONST_WAIT_FOR_BUDDY_MAX_FRAMES 500
#ENDIF
#ENDIF
#IF IS_NEXTGEN_BUILD
#IF IS_DEBUG_BUILD
CONST_INT iCONST_WAIT_FOR_BUDDY_MAX_FRAMES 750
#ENDIF
#IF NOT IS_DEBUG_BUILD
CONST_INT iCONST_WAIT_FOR_BUDDY_MAX_FRAMES 1500
#ENDIF
#ENDIF
#IF IS_DEBUG_BUILD
PROC DrawLiteralSceneStringWithPrint(INT iWaitForBuddyFrames, STRING sLiteral, INT iColumn, HUD_COLOURS eColour = HUD_COLOUR_PURE_WHITE, FLOAT fAlphaMult = 1.0)
DrawLiteralSceneString(sLiteral, iColumn, eColour, fAlphaMult)
IF iWaitForBuddyFrames >= (iCONST_WAIT_FOR_BUDDY_MAX_FRAMES-5)
CWARNINGLN(DEBUG_SWITCH, "EMERGENCY BAIL: \"", sLiteral, "\"")
ENDIF
ENDPROC
#ENDIF
PROC Setup_Player_In_Switch_Vehicle() //SETUPVEHSHIZZ
DEBUG_PRINTCALLSTACK()
IF sTimetableScene.eVehState <> PTVS_2_playerInVehicle
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** sTimetableScene.eVehState <> PTVS_2_playerInVehicle [", sTimetableScene.eVehState, "]")
EXIT
ENDIF
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** IS_ENTITY_DEAD(PLAYER_PED_ID())")
EXIT
ENDIF
IF IS_ENTITY_DEAD(scene_veh)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** IS_ENTITY_DEAD(scene_veh)")
EXIT
ENDIF
IF sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() //
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() ")
EXIT
ENDIF
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)")
ELSE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> *** NOT IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)")
VEHICLE_SEAT vsdriver = VS_DRIVER
IF NOT IS_ENTITY_DEAD(scene_buddy)
IF (sTimetableScene.eOutTask = SCRIPT_TASK_LEAVE_VEHICLE)
IF (sTimetableScene.eBuddyOutTask = SCRIPT_TASK_STAND_STILL)
IF NOT IS_VEHICLE_SEAT_FREE(scene_veh, VS_DRIVER)
PED_INDEX scene_veh_driver_ped
scene_veh_driver_ped = GET_PED_IN_VEHICLE_SEAT(scene_veh, VS_DRIVER)
SET_ENTITY_COORDS(scene_veh_driver_ped,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, <<-5.0, -5.0, 0.0>>), FALSE)
ENDIF
SET_PED_INTO_VEHICLE(scene_buddy, scene_veh, VS_DRIVER)
CPRINTLN(DEBUG_SWITCH, "set player in passenger right seat")
vsdriver = VS_BACK_RIGHT
ENDIF
ENDIF
ENDIF
IF NOT IS_VEHICLE_SEAT_FREE(scene_veh, vsdriver)
PED_INDEX scene_veh_driver_ped
scene_veh_driver_ped = GET_PED_IN_VEHICLE_SEAT(scene_veh, vsdriver)
IF (scene_veh_driver_ped <> scene_buddy)
SET_ENTITY_COORDS(scene_veh_driver_ped,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, <<-5.0, -5.0, 0.0>>), FALSE)
ENDIF
ENDIF
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Setup_Player_In_Switch_Vehicle")
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceSkinCharacterCloth, TRUE)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), scene_veh, vsdriver)
IF IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(scene_veh))
SET_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
SET_PLAYER_CLOTH_PIN_FRAMES( PLAYER_ID(), 1 )
// SET_PLAYER_CLOTH_LOCK_COUNTER(iFramesToLockCloth)
ar_FREEZE_ENTITY_POSITION(scene_veh, TRUE, "Setup_Player_In_Switch_Vehicle")
IF (sTimetableScene.sScene.eScene <> PR_SCENE_M6_CARSLEEP)
AND (sTimetableScene.sScene.eScene <> PR_SCENE_M6_CARSLEEP)
AND (sTimetableScene.sScene.eScene <> PR_SCENE_M6_CARSLEEP)
SET_VEHICLE_ENGINE_ON(scene_veh, TRUE, TRUE)
SET_VEHICLE_LIGHTS(scene_veh, FORCE_VEHICLE_LIGHTS_ON)
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
ENDIF
SET_ENTITY_REQUIRES_MORE_EXPENSIVE_RIVER_CHECK(scene_veh, TRUE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
ENDIF
ENDPROC
//PURPOSE: Load all the required models etc, and init peds, vehicles etc
PROC Setup_Player_Timetable_Scene()
THEFEED_FLUSH_QUEUE()
//- request models - peds -//
//- request models - vehicles -//
//- request models - objects -//
//- request models - weapons -//
//- request anims and ptfx --//
//- request vehicle recordings -//
//- request interior models -//
IF bKeepCellphoneDisabled
DISABLE_CELLPHONE(TRUE)
ENDIF
PRIVATE_SetRoadsSwitchArea(sTimetableScene.sScene.eScene, FALSE)
PRIVATE_SetPedInSwitchArea(sTimetableScene.sScene.eScene, FALSE)
DISABLE_PROCOBJ_CREATION()
Quit_Drunk_Camera_Immediately()
//- wait for assets to load -//
BOOL bWaitForBuddyAssets = FALSE
PED_VEH_DATA_STRUCT sVehData //MODEL_NAMES vehModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vVehCoordOffset = <<0,0,0>>
FLOAT fVehHeadOffset = 0
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
BOOL bFreezePlayer = FALSE
INT iWaitForCharChangeFrames = 0, iWaitForBuddyFrames = 0
VECTOR vVehCoordSafehouse
FLOAT fVehHeadSafehouse
INT iPed
PED_INDEX temp_ped[5]
VECTOR vSafehouseParkingSpots[6]
FLOAT fSafehouseParkingSpots[6]
WHILE NOT bWaitForBuddyAssets
bWaitForBuddyAssets = TRUE
#IF IS_DEBUG_BUILD
INT iDrawSceneRot = 2
TEXT_LABEL_63 sWait = ("iWaitForBuddyFrames: ")
sWait += (iWaitForBuddyFrames)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, sWait, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
TEXT_LABEL_63 tPlayerSceneAnimDict = "null", tPlayerSceneAnimLoop = "null", tPlayerSceneAnimOut = "null"
ANIMATION_FLAGS playerAnimLoopFlag = AF_DEFAULT, playerAnimOutFlag = AF_DEFAULT
//ePlayerSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut,
playerAnimLoopFlag, playerAnimOutFlag) //, ePlayerSceneAnimProgress)
#IF IS_DEBUG_BUILD
IF (sTimetableScene.eLoopTask <> SCRIPT_TASK_PLAY_ANIM
AND sTimetableScene.eOutTask <> SCRIPT_TASK_PLAY_ANIM
AND sTimetableScene.eLoopTask <> SCRIPT_TASK_SYNCHRONIZED_SCENE
AND sTimetableScene.eOutTask <> SCRIPT_TASK_SYNCHRONIZED_SCENE)
TEXT_LABEL_63 sInvalid
sInvalid = "player animation needed for "
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
sInvalid += "?"
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
ENDIF
#ENDIF
REQUEST_ANIM_DICT(tPlayerSceneAnimDict)
IF NOT HAS_ANIM_DICT_LOADED(tPlayerSceneAnimDict)
bWaitForBuddyAssets = FALSE
REQUEST_ANIM_DICT(tPlayerSceneAnimDict)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request anim ")
str += (tPlayerSceneAnimDict)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
IF sTimetableScene.eVehState <> PTVS_0_noVehicle
IF NOT IS_STRING_NULL_OR_EMPTY(tRecordingName)
AND (iRecordingNum > 0)
REQUEST_VEHICLE_RECORDING(iRecordingNum, tRecordingName)
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecordingNum, tRecordingName)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request veh rec ")
str += tRecordingName
IF (iRecordingNum < 100) str += ("0") ENDIF
IF (iRecordingNum < 10) str += ("0") ENDIF
str += iRecordingNum
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(scene_veh)
BOOL bCreateVehicle = FALSE
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene,
sVehData, vVehCoordOffset, fVehHeadOffset,
vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
bCreateVehicle = TRUE
ELSE
// #1562150
IF sTimetableScene.eVehState = PTVS_1_playerWithVehicle
GetPostMissionLastVeh(sTimetableScene.sScene.ePed, sVehData)
IF sVehData.model <> DUMMY_MODEL_FOR_SCRIPT
//Michaels mansion
vSafehouseParkingSpots[0] = <<-859.0566, 144.3844, 60.6915>>
fSafehouseParkingSpots[0] = 2.3933
//Franklins City house
vSafehouseParkingSpots[1] = <<-19.3897, -1458.4712, 29.5455>>
fSafehouseParkingSpots[1] = 97.3963
//Franklins Hills house
vSafehouseParkingSpots[2] = <<1.8447, 545.8348, 173.3900>>
fSafehouseParkingSpots[2] = 293.7715
//Trevor Trailer
vSafehouseParkingSpots[3] = <<1991.8527, 3826.9084, 31.2135>>
fSafehouseParkingSpots[3] = 211.1618
//Trevor City apartment
vSafehouseParkingSpots[4] = <<-1176.4854, -1490.9407, 3.3797>>
fSafehouseParkingSpots[4] = 303.3079
//Trevor Stripclub
vSafehouseParkingSpots[5] = <<154.8832, -1304.4706, 28.2026>>
fSafehouseParkingSpots[5] = 240.9780
INT iClosestPark = -1
FLOAT fMinParkDist = 9999999.0
INT ePark = 0
REPEAT COUNT_OF(vSafehouseParkingSpots) ePark
VECTOR vParkCoords = vSafehouseParkingSpots[ePark]
FLOAT fDistToPark = VDIST(sTimetableScene.sScene.vCreateCoords, vParkCoords)
// IF fDistToPark < 150.0
IF fDistToPark < fMinParkDist
iClosestPark = ePark
fMinParkDist = fDistToPark
ENDIF
// ENDIF
ENDREPEAT
IF iClosestPark >= 0
vVehCoordSafehouse = vSafehouseParkingSpots[iClosestPark]
fVehHeadSafehouse = fSafehouseParkingSpots[iClosestPark]
vVehCoordOffset = vVehCoordSafehouse - sTimetableScene.sScene.vCreateCoords
fVehHeadOffset = fVehHeadSafehouse - sTimetableScene.sScene.fCreateHead
bCreateVehicle = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bCreateVehicle
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request veh model ")
IF (sVehData.model <> DUMMY_MODEL_FOR_SCRIPT)
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(sVehData.model)
ELSE
str += "dummy"
ENDIF
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
VECTOR vVehCoords = sTimetableScene.sScene.vCreateCoords+vVehCoordOffset
VECTOR vSpeed
FLOAT fVehHead = sTimetableScene.sScene.fCreateHead+fVehHeadOffset
IF NOT is_player_already_on_vehicle(sVehData, scene_veh)
CLEAR_AREA_OF_VEHICLES(vVehCoords, 2.0)
// Override the vehicle type so we can create the real player vehicle.
IF sVehData.bIsPlayerVehicle
IF IS_THIS_MODEL_A_BIKE(sVehData.model)
sVehData.eType = VEHICLE_TYPE_BIKE
ELSE
sVehData.eType = VEHICLE_TYPE_CAR
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
INT fHealth = sVehData.fHealth
#ENDIF
SWITCH sVehData.eType
CASE VEHICLE_TYPE_CAR
CASE VEHICLE_TYPE_BIKE
SWITCH sTimetableScene.sScene.ePed
CASE CHAR_MICHAEL
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MICHAEL_SAVEHOUSE)
BREAK
CASE CHAR_FRANKLIN
IF (sVehData.eType = VEHICLE_TYPE_CAR)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_FRANKLIN_SAVEHOUSE_CAR)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_FRANKLIN_SAVEHOUSE_HILLS_CAR)
ELIF (sVehData.eType = VEHICLE_TYPE_BIKE)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_FRANKLIN_SAVEHOUSE_BIKE)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_FRANKLIN_SAVEHOUSE_HILLS_BIKE)
ENDIF
BREAK
CASE CHAR_TREVOR
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_TREVOR_SAVEHOUSE_COUNTRY)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_TREVOR_SAVEHOUSE_CITY)
BREAK
ENDSWITCH
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(sTimetableScene.sScene.ePed, sVehData.eType)
CLEAR_AREA(vVehCoords, 2, TRUE)
IF CREATE_PLAYER_VEHICLE(scene_veh, sTimetableScene.sScene.ePed,
vVehCoords, fVehHead, TRUE,
sVehData.eType)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed*0.5)
IF svehData.model = BLIMP OR svehData.model = BLIMP2
//B* 2099783: Apply vertical speed to keep it floating, it would be falling down quite fast otherwise
vspeed = GET_ENTITY_VELOCITY(scene_veh)
IF IS_ENTITY_IN_AIR(scene_veh)
SET_ENTITY_VELOCITY(scene_veh,<<vspeed.x,vspeed.y,10>>)
ENDIF
ENDIF
SET_LAST_DRIVEN_VEHICLE(scene_veh) //733525
ar_FREEZE_ENTITY_POSITION(scene_veh, TRUE, "Setup_Player_Timetable_Scene.PLAYER")
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
IF sTimetableScene.eOutTask <> SCRIPT_TASK_LEAVE_VEHICLE
Setup_Player_In_Switch_Vehicle()
ENDIF
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
// SET_VEHICLE_DAMAGE()
// GET_VEHICLE_DEFORMATION_AT_POS()
SET_SCENE_VEH_RADIO_STATION(scene_veh, sTimetableScene.sScene.eScene, TRUE)
SET_PLAYER_VEHICLE_ALARM_AUDIO_ACTIVE(scene_veh, TRUE) //#1549453
IF g_ePlayerLastVehGen[sTimetableScene.sScene.ePed] != VEHGEN_NONE
CPRINTLN(DEBUG_SWITCH, "SWITCH VEH - setting switch vehicle as veh gen vehicle ", g_ePlayerLastVehGen[sTimetableScene.sScene.ePed])
SET_VEHICLE_GEN_VEHICLE(g_ePlayerLastVehGen[sTimetableScene.sScene.ePed], scene_veh, FALSE)
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_CLEANCAR)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F0_BIKE)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F1_CLEANCAR)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F1_BIKE)
RESET_VEHICLE_GEN_LOADED_CHECKS()
ENDIF
ENDIF
BREAK
DEFAULT
//#1487390
IF (sVehData.model = FROGGER2)
OR (sVehData.model = CARGOBOB)
OR (sVehData.model = CARGOBOB2)
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_WEB_HELIPAD_TREVOR_COUNTRY)
ENDIF
REQUEST_MODEL(sVehData.model)
IF HAS_MODEL_LOADED(sVehData.model)
CLEAR_AREA(vVehCoords, 5.0, TRUE)
scene_veh = CREATE_VEHICLE(sVehData.model,
vVehCoords, fVehHead, FALSE, FALSE)
ar_SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
SET_LAST_DRIVEN_VEHICLE(scene_veh) //733525
SET_VEH_DATA_FROM_STRUCT(scene_veh, sVehData)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed*0.5)
IF svehData.model = BLIMP OR svehData.model = BLIMP2
//B* 2099783: Apply vertical speed to keep it floating, it would be falling down quite fast otherwise
vspeed = GET_ENTITY_VELOCITY(scene_veh)
IF IS_ENTITY_IN_AIR(scene_veh)
SET_HELI_BLADES_FULL_SPEED(scene_veh)
SET_ENTITY_VELOCITY(scene_veh,<<vspeed.x,vspeed.y,10>>)
ENDIF
ENDIF
ar_FREEZE_ENTITY_POSITION(scene_veh, TRUE, "Setup_Player_Timetable_Scene.DEFAULT")
IF sTimetableScene.eOutTask <> SCRIPT_TASK_LEAVE_VEHICLE
Setup_Player_In_Switch_Vehicle()
ENDIF
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
IF (sVehData.model = DINGHY)
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(PLAYER_ID(), TRUE)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE ", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
SET_SCENE_VEH_RADIO_STATION(scene_veh, sTimetableScene.sScene.eScene, TRUE)
IF g_ePlayerLastVehGen[sTimetableScene.sScene.ePed] != VEHGEN_NONE
CPRINTLN(DEBUG_SWITCH, "SWITCH VEH - setting switch vehicle as veh gen vehicle ", g_ePlayerLastVehGen[sTimetableScene.sScene.ePed])
SET_VEHICLE_GEN_VEHICLE(g_ePlayerLastVehGen[sTimetableScene.sScene.ePed], scene_veh, FALSE)
ENDIF
// Kenneth R.
// To prevent duplicate vehicles we need to ensure this is not a vehicle gen vehicle.
IF GET_VEHICLE_GEN_DATA(g_sVehicleGenNSData.sRuntimeStruct[0], VEHGEN_MISSION_VEH)
IF GET_ENTITY_MODEL(scene_veh) = g_savedGlobals.sVehicleGenData.sDynamicData[g_sVehicleGenNSData.sRuntimeStruct[0].dynamicSlotIndex].eModel
AND ARE_STRINGS_JUST_EQUAL(GET_VEHICLE_NUMBER_PLATE_TEXT(scene_veh), g_savedGlobals.sVehicleGenData.sDynamicData[g_sVehicleGenNSData.sRuntimeStruct[0].dynamicSlotIndex].tlPlateText)
CPRINTLN(DEBUG_SWITCH, "SWITCH VEH - cleaning up vehicle gen as it is the same as the vehicle we are creating")
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MISSION_VEH)
SET_VEHICLE_GEN_AVAILABLE(VEHGEN_MISSION_VEH, FALSE)
CPRINTLN(DEBUG_SWITCH, "IMPOUND FIX 2 - switch vehicle has created the mission vehgen so clear cached vehicle data")
g_sPreviousMissionVehGenData.eModel = DUMMY_MODEL_FOR_SCRIPT
sTempImpoundVehData.eModel = DUMMY_MODEL_FOR_SCRIPT
ENDIF
ENDIF
// Remove this vehicle from the impound if it's in someone slot already.
INT i, j
REPEAT 3 i // Players
REPEAT 2 j // Slots
// Vehicle already in impound - remove.
IF GET_ENTITY_MODEL(scene_veh) = g_savedGlobals.sVehicleGenData.sImpoundVehicles[i][j].eModel
IF NOT IS_STRING_NULL_OR_EMPTY(g_savedGlobals.sVehicleGenData.sImpoundVehicles[i][j].tlPlateText)
IF ARE_STRINGS_EQUAL(GET_VEHICLE_NUMBER_PLATE_TEXT(scene_veh), g_savedGlobals.sVehicleGenData.sImpoundVehicles[i][j].tlPlateText)
CPRINTLN(DEBUG_SWITCH, "SWITCH VEH - cleaning up impound vehicle as it is the same as the vehicle we are creating")
g_savedGlobals.sVehicleGenData.sImpoundVehicles[i][j].eModel = DUMMY_MODEL_FOR_SCRIPT
g_savedGlobals.sVehicleGenData.iImpoundVehicleSlot[i] = j
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDREPEAT
// Start tracking it for impound if this matches the vehicle we stopped tracking.
IF g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel = sVehData.model
AND ARE_STRINGS_EQUAL(g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].tlPlateText, sVehData.tlNumberPlate)
CPRINTLN(DEBUG_SWITCH, "KR TEST - re-tracking vehicle for impound")
g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel = DUMMY_MODEL_FOR_SCRIPT
TRACK_VEHICLE_FOR_IMPOUND(scene_veh, sTimetableScene.sScene.ePed)
ENDIF
//#1487390
IF (sVehData.model = FROGGER2)
CLEAR_MUST_LEAVE_AREA_VEHICLE_GEN_FLAG(VEHGEN_WEB_HELIPAD_TREVOR_COUNTRY)
ENDIF
ENDIF
BREAK
ENDSWITCH
IF DOES_ENTITY_EXIST(scene_veh)
AND (sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT
OR sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT
OR sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fHealth: ")
SAVE_INT_TO_DEBUG_FILE(fHealth)
SAVE_STRING_TO_DEBUG_FILE(", sVehData.fHealth: ")
SAVE_INT_TO_DEBUG_FILE(sVehData.fHealth)
SAVE_STRING_TO_DEBUG_FILE(", GET_ENTITY_HEALTH: ")
SAVE_INT_TO_DEBUG_FILE(GET_ENTITY_HEALTH(scene_veh))
SAVE_STRING_TO_DEBUG_FILE(", GET_ENTITY_MAX_HEALTH: ")
SAVE_INT_TO_DEBUG_FILE(GET_ENTITY_MAX_HEALTH(scene_veh))
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
// VECTOR vFrontLeftWheelOffset = << -1.0, 1.5, -0.5 >>
// VECTOR vFrontRightWheelOffset = << 1.0, 1.5, -0.5 >>
// VECTOR vRearLeftWheelOffset = << -1.0, -1.5, -0.5 >>
// VECTOR vRearRightWheelOffset = << 1.0, -1.5, -0.5 >>
VECTOR vFrontLeftDamageOffset = << -1.0, 1.0, 0.2 >>
VECTOR vFrontRightDamageOffset = << 1.0, 1.0, 0.2 >>
VECTOR vRearLeftDamageOffset = << -1.0, -1.0, 0.2 >>
VECTOR vRearRightDamageOffset = << 1.0, -1.0, 0.2 >>
FLOAT fDamage = (1.0 - (GET_ENTITY_HEALTH(scene_veh) / GET_ENTITY_MAX_HEALTH(scene_veh))) * 100.0
FLOAT fDeformation = (1.0 - (GET_ENTITY_HEALTH(scene_veh) / GET_ENTITY_MAX_HEALTH(scene_veh))) * 100.0
SET_VEHICLE_DAMAGE(scene_veh, vFrontLeftDamageOffset, fDamage, fDeformation, TRUE)
SET_VEHICLE_DAMAGE(scene_veh, vFrontRightDamageOffset, fDamage, fDeformation, TRUE)
SET_VEHICLE_DAMAGE(scene_veh, vRearLeftDamageOffset, fDamage, fDeformation, TRUE)
SET_VEHICLE_DAMAGE(scene_veh, vRearRightDamageOffset, fDamage, fDeformation, TRUE)
CPRINTLN(DEBUG_SWITCH, "SET_VEHICLE_DAMAGE(scene_veh, ", fDamage, ", ", fDeformation, ", TRUE)")
ENDIF
ELSE
//scene_veh
ENDIF
ELSE
// #IF IS_DEBUG_BUILD
// TEXT_LABEL_63 sInvalid
// sInvalid = "unrequired veh pos for eScene: "
// sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
//
// CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
// SCRIPT_ASSERT(sInvalid)
// #ENDIF
ENDIF
IF g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel != DUMMY_MODEL_FOR_SCRIPT
IF bCreateVehicle
IF (sVehData.model != g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel)
OR NOT ARE_STRINGS_EQUAL(sVehData.tlNumberPlate, g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].tlPlateText)
CPRINTLN(DEBUG_SWITCH, "KR TEST - switch didnt create same vehicle so send stored data to impound")
SEND_VEHICLE_DATA_TO_IMPOUND_USING_SETUP(g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed], sTimetableScene.sScene.ePed)
g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel = DUMMY_MODEL_FOR_SCRIPT
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "KR TEST - switch didnt create a vehicle so send stored data to impound")
SEND_VEHICLE_DATA_TO_IMPOUND_USING_SETUP(g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed], sTimetableScene.sScene.ePed)
g_savedGlobals.sVehicleGenData.sImpoundSwitchVehicles[sTimetableScene.sScene.ePed].eModel = DUMMY_MODEL_FOR_SCRIPT
ENDIF
ENDIF
ELSE
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("vehicle_gen_controller")) > 0
IF NOT HAVE_ALL_VEHICLE_GENS_LOADED_NEAR_PLAYER()
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("veh gens not loaded near player ")
str += g_sVehicleGenNSData.iCheckVehGensLoadedCounter
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("ignore veh gens loading...")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
ELSE
//IF sTimetableScene.eVehState <> PTVS_0_noVehicle
ENDIF
//
IF NOT DOES_ENTITY_EXIST(player_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
IF GET_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction)
bWaitForBuddyAssets = FALSE
IF (thisSceneObjectAction = PSOA_3_world)
AND (IS_PLAYER_SWITCH_IN_PROGRESS() AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT)
thisSceneObjectAction = PSOA_0_detach
ENDIF
IF (thisSceneObjectAction <> PSOA_3_world)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str2 = ("creating prop ")
str2 += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str2, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
REQUEST_MODEL(eObjectModel)
IF (thisSceneObjectAction = PSOA_4_synchSwap)
OR (thisSceneObjectAction = PSOA_9_synchAndPtfxSwap)
MODEL_NAMES eObjectSwapModel
eObjectSwapModel = DUMMY_MODEL_FOR_SCRIPT
SWITCH eObjectModel
CASE P_Laptop_02_S
eObjectSwapModel = PROP_LAPTOP_02_CLOSED
BREAK
CASE V_ILEV_M_DINECHAIR
eObjectSwapModel = P_DINECHAIR_01_S
BREAK
CASE PROP_ACC_GUITAR_01
eObjectSwapModel = Prop_ACC_Guitar_01_D1
BREAK
CASE P_DEFILIED_RAGDOLL_01_S
eObjectSwapModel = PROP_DEFILIED_RAGDOLL_01
BREAK
CASE P_HAND_TOILET_S
eObjectSwapModel = Prop_ToiletFoot_Static
BREAK
DEFAULT
eObjectSwapModel = DUMMY_MODEL_FOR_SCRIPT
SCRIPT_ASSERT("invalid model")
EXIT
BREAK
ENDSWITCH
REQUEST_MODEL(eObjectSwapModel)
IF NOT HAS_MODEL_LOADED(eObjectSwapModel)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request swap model assets ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
IF (thisSceneObjectAction = PSOA_8_ptfxSwap)
OR (thisSceneObjectAction = PSOA_9_synchAndPtfxSwap)
REQUEST_PTFX_ASSET()
IF NOT HAS_PTFX_ASSET_LOADED()
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request ptfx asstes ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
IF NOT HAS_MODEL_LOADED(eObjectModel)
REQUEST_MODEL(eObjectModel)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
AND NOT DOES_ENTITY_EXIST(player_door_r)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("tanisha waiting for door clear ")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
IF DOES_ENTITY_EXIST(player_extra_prop)
IF ARE_VECTORS_EQUAL(GET_ENTITY_COORDS(player_extra_prop), sTimetableScene.sScene.vCreateCoords+vecOffset)
vecOffset += <<0.2,0.2,0.2>>
ENDIF
ENDIF
player_prop = CREATE_OBJECT(eObjectModel, sTimetableScene.sScene.vCreateCoords+vecOffset)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_prop, sTimetableScene.sScene.eScene)
ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("get closest object ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
player_prop = GET_CLOSEST_OBJECT_OF_TYPE(sTimetableScene.sScene.vCreateCoords+vecOffset, 5.0, eObjectModel)
IF (player_prop = player_extra_prop)
player_prop = NULL
ENDIF
IF NOT DOES_ENTITY_EXIST(player_prop)
REQUEST_MODEL(eObjectModel)
ELSE
#IF IS_DEBUG_BUILD
IF NOT ARE_VECTORS_EQUAL(vecOffset, <<0,0,0>>)
IF (eBonetag <> BONETAG_NULL)
VECTOR vRealOffset = GET_ENTITY_COORDS(player_prop)-sTimetableScene.sScene.vCreateCoords
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecOffset, vRealOffset, 0.1)
SAVE_STRING_TO_DEBUG_FILE("ePropModel = ")
SAVE_STRING_TO_DEBUG_FILE(SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel))
SAVE_STRING_TO_DEBUG_FILE(" propOffset = ")
SAVE_VECTOR_TO_DEBUG_FILE(vRealOffset)
SAVE_STRING_TO_DEBUG_FILE(" //")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_NEWLINE_TO_DEBUG_FILE()
CPRINTLN(DEBUG_SWITCH, " vecOffset[", vecOffset, "] <> vRealOffset[", vRealOffset, "]: ", VDIST(vecOffset, vRealOffset))
SCRIPT_ASSERT("GET_OBJECTS_FOR_SCENE - update vecOffset")
ENDIF
ENDIF
ENDIF
#ENDIF
IF (eBonetag <> BONETAG_NULL)
//attached
ELSE
IF fDetachAnimPhase >= 0
SET_ENTITY_COORDS(player_prop, sTimetableScene.sScene.vCreateCoords+vecOffset)
IF eobjectmodel = PROP_CHATEAU_TABLE_01
CLEAR_AREA_OF_OBJECTS(sTimetableScene.sScene.vCreateCoords+vecOffset,0.5)
CREATE_MODEL_HIDE_EXCLUDING_SCRIPT_OBJECTS(sTimetableScene.sScene.vCreateCoords+vecOffset,0.5,eObjectModel,FALSE)
ENDIF
ELSE
SET_ENTITY_COLLISION(player_prop, FALSE)
SET_ENTITY_VISIBLE(player_prop, FALSE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
TEXT_LABEL_63 tLoopSyncObjAnim = "", tLoopSyncExtraObjAnim = ""
GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene,
tLoopSyncObjAnim, tLoopSyncExtraObjAnim)
IF NOT IS_STRING_NULL_OR_EMPTY(tLoopSyncObjAnim)
IF NOT DOES_ENTITY_HAVE_DRAWABLE(player_prop)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("needs drawable ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(player_prop))
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(player_extra_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecExtraOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
BOOL bAttachedToBuddy = FALSE
IF GET_EXTRA_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecExtraOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction, bAttachedToBuddy)
IF bAttachedToBuddy
vecExtraOffset += <<0.1,0.1,0.1>>
ENDIF
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str2 = ("creating extra ")
str2 += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str2, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
IF (thisSceneObjectAction <> PSOA_3_world)
IF (eObjectModel = PROP_CS_IRONING_BOARD)
MODEL_NAMES eTshirtObjectModel = Prop_T_Shirt_ironing
REQUEST_MODEL(eObjectModel)
REQUEST_MODEL(eTshirtObjectModel)
IF (thisSceneObjectAction = PSOA_4_synchSwap)
MODEL_NAMES eObjectSwapModel
eObjectSwapModel = DUMMY_MODEL_FOR_SCRIPT
SWITCH eObjectModel
CASE P_Laptop_02_S
eObjectSwapModel = PROP_LAPTOP_02_CLOSED
BREAK
CASE V_ILEV_M_DINECHAIR
eObjectSwapModel = P_DINECHAIR_01_S
BREAK
DEFAULT
eObjectSwapModel = DUMMY_MODEL_FOR_SCRIPT
SCRIPT_ASSERT("invalid model")
EXIT
BREAK
ENDSWITCH
REQUEST_MODEL(eObjectSwapModel)
IF NOT HAS_MODEL_LOADED(eObjectSwapModel)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request swap model assets ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
IF (thisSceneObjectAction = PSOA_8_ptfxSwap)
REQUEST_PTFX_ASSET()
IF NOT HAS_PTFX_ASSET_LOADED()
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request ptfx asstes ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
IF NOT HAS_MODEL_LOADED(eObjectModel)
REQUEST_MODEL(eObjectModel)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
REQUEST_MODEL(eTshirtObjectModel)
IF NOT HAS_MODEL_LOADED(eTshirtObjectModel)
REQUEST_MODEL(eTshirtObjectModel)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = SAFE_GET_MODEL_NAME_FOR_DEBUG(eTshirtObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
IF HAS_MODEL_LOADED(eObjectModel)
AND HAS_MODEL_LOADED(eTshirtObjectModel)
IF DOES_ENTITY_EXIST(player_prop)
IF ARE_VECTORS_EQUAL(GET_ENTITY_COORDS(player_prop), sTimetableScene.sScene.vCreateCoords+vecExtraOffset)
vecExtraOffset += <<0.1,0.1,0.1>>
ENDIF
ENDIF
player_extra_prop = CREATE_OBJECT(eObjectModel, sTimetableScene.sScene.vCreateCoords+vecExtraOffset)
OBJECT_INDEX tshirt_prop = CREATE_OBJECT(eTshirtObjectModel, sTimetableScene.sScene.vCreateCoords+vecExtraOffset+<<0,0,0.5>>)
ATTACH_ENTITY_TO_ENTITY(tshirt_prop, player_extra_prop,
0, <<0,0,0>>, <<0,0,0>>)
ENDIF
ELSE
REQUEST_MODEL(eObjectModel)
IF NOT HAS_MODEL_LOADED(eObjectModel)
REQUEST_MODEL(eObjectModel)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("extra object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ELSE
IF DOES_ENTITY_EXIST(player_prop)
IF ARE_VECTORS_EQUAL(GET_ENTITY_COORDS(player_prop), sTimetableScene.sScene.vCreateCoords+vecExtraOffset)
vecExtraOffset += <<0.2,0.2,0.2>>
ENDIF
ENDIF
player_extra_prop = CREATE_OBJECT(eObjectModel, sTimetableScene.sScene.vCreateCoords+vecExtraOffset)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_extra_prop, sTimetableScene.sScene.eScene)
IF (eObjectModel = prop_yoga_mat_01)
FLOAT lodDist
lodDist = VDIST(<<-786.4108, 186.3641, 185.8040>>, <<-790.811,186.481,71.847>>)
lodDist *= 1.25
SET_ENTITY_LOD_DIST(player_extra_prop, ROUND(lodDist))
ENDIF
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("get closest extra ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
player_extra_prop = GET_CLOSEST_OBJECT_OF_TYPE(sTimetableScene.sScene.vCreateCoords+vecExtraOffset, 5.0, eObjectModel)
IF (player_extra_prop = player_prop)
player_extra_prop = NULL
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
#IF IS_DEBUG_BUILD
IF NOT ARE_VECTORS_EQUAL(vecExtraOffset, <<0,0,0>>)
VECTOR vRealExtraOffset = GET_ENTITY_COORDS(player_extra_prop)-sTimetableScene.sScene.vCreateCoords
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecExtraOffset, vRealExtraOffset, 0.1)
SAVE_STRING_TO_DEBUG_FILE("eExtraObjectModel = ")
SAVE_STRING_TO_DEBUG_FILE(SAFE_GET_MODEL_NAME_FOR_DEBUG(eObjectModel))
SAVE_STRING_TO_DEBUG_FILE(" extraPropOffset = ")
SAVE_VECTOR_TO_DEBUG_FILE(vRealExtraOffset)
SAVE_STRING_TO_DEBUG_FILE(" //")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_NEWLINE_TO_DEBUG_FILE()
CPRINTLN(DEBUG_SWITCH, " vecExtraOffset[", vecExtraOffset, "] <> vRealExtraOffset[", vRealExtraOffset, "]: ", VDIST(vecExtraOffset, vRealExtraOffset))
SCRIPT_ASSERT("GET_EXTRA_OBJECTS_FOR_SCENE - update vecExtraOffset")
ENDIF
ENDIF
#ENDIF
IF (eBonetag <> BONETAG_NULL)
//attached
ELSE
IF fDetachAnimPhase >= 0
SET_ENTITY_COORDS(player_extra_prop, sTimetableScene.sScene.vCreateCoords+vecExtraOffset)
ELSE
SET_ENTITY_COLLISION(player_extra_prop, FALSE)
SET_ENTITY_VISIBLE(player_extra_prop, FALSE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
TEXT_LABEL_63 tLoopSyncObjAnim = "", tLoopSyncExtraObjAnim = ""
GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene,
tLoopSyncObjAnim, tLoopSyncExtraObjAnim)
IF NOT IS_STRING_NULL_OR_EMPTY(tLoopSyncExtraObjAnim)
IF NOT DOES_ENTITY_HAVE_DRAWABLE(player_extra_prop)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("needs x-drawable ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(player_extra_prop))
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
ENDIF
ENDIF
MODEL_NAMES eDoorModel_L = DUMMY_MODEL_FOR_SCRIPT
MODEL_NAMES eDoorModel_R = DUMMY_MODEL_FOR_SCRIPT
VECTOR vDoorOffset_L = <<0,0,0>>, vDoorOffset_R= <<0,0,0>>
DOOR_HASH_ENUM eDoorHash_L = DUMMY_DOORHASH, eDoorHash_R = DUMMY_DOORHASH
BOOL bReplaceDoor = TRUE
FLOAT fHideDoorRadius = -1
IF GET_DOORS_FOR_SCENE(sTimetableScene.sScene.eScene,
eDoorModel_L, eDoorModel_R, vDoorOffset_L, vDoorOffset_R,
eDoorHash_L, eDoorHash_R,
bReplaceDoor, fHideDoorRadius)
IF eDoorModel_L <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(player_door_l)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(eDoorModel_L)
IF NOT HAS_MODEL_LOADED(eDoorModel_L)
REQUEST_MODEL(eDoorModel_L)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_L)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_L)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
IF (eDoorHash_L <> DUMMY_DOORHASH)
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_L))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_L), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L), 1.0, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L), 1.0)")
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_L)")
ENDIF
ENDIF
IF (fHideDoorRadius > 0)
VECTOR vDoorHide_L = sTimetableScene.sScene.vCreateCoords+vDoorOffset_L
IF eDoorModel_L <> eDoorModel_r OR eDoorModel_L = PROP_CHATEAU_CHAIR_01
OR NOT DOES_ENTITY_EXIST(player_door_r)
CREATE_MODEL_HIDE(vDoorHide_L, fHideDoorRadius, eDoorModel_L, FALSE)
CPRINTLN(DEBUG_SWITCH, "CREATE_DOOR_L_HIDE(", vDoorHide_L, ", ", fHideDoorRadius, ", ", SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_L), ", FALSE)")
ELSE
CPRINTLN(DEBUG_SWITCH, "WAIT_TO_CREATE_DOOR_L_HIDE(", vDoorHide_L, ", ", fHideDoorRadius, ", ", SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_L), ", FALSE)")
ENDIF
ENDIF
IF bReplaceDoor
player_door_l = CREATE_OBJECT(eDoorModel_L, sTimetableScene.sScene.vCreateCoords+vDoorOffset_L)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_door_l, sTimetableScene.sScene.eScene)
SET_MODEL_AS_NO_LONGER_NEEDED(eDoorModel_L)
ELSE
player_door_l = GET_CLOSEST_OBJECT_OF_TYPE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_L, 5.0, eDoorModel_L)
IF (player_door_l = player_door_r)
player_door_l = NULL
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF eDoorModel_R <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(player_door_r)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(eDoorModel_r)
IF NOT HAS_MODEL_LOADED(eDoorModel_r)
REQUEST_MODEL(eDoorModel_r)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_r)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating object model ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_r)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
IF (eDoorHash_R <> DUMMY_DOORHASH)
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_R))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_R), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R), 1.0, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R), 1.0)")
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_R)")
ENDIF
ENDIF
IF (fHideDoorRadius > 0)
VECTOR vDoorHide_R = sTimetableScene.sScene.vCreateCoords+vDoorOffset_r
IF eDoorModel_r <> eDoorModel_L OR eDoorModel_r = PROP_CHATEAU_CHAIR_01
OR NOT DOES_ENTITY_EXIST(player_door_l)
CREATE_MODEL_HIDE(vDoorHide_R, fHideDoorRadius, eDoorModel_r, FALSE)
CPRINTLN(DEBUG_SWITCH, "CREATE_DOOR_R_HIDE(", vDoorHide_R, ", ", fHideDoorRadius, ", ", SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_r), ", FALSE)")
ELSE
CPRINTLN(DEBUG_SWITCH, "WAIT_TO_CREATE_DOOR_R_HIDE(", vDoorHide_R, ", ", fHideDoorRadius, ", ", SAFE_GET_MODEL_NAME_FOR_DEBUG(eDoorModel_r), ", FALSE)")
ENDIF
ENDIF
IF bReplaceDoor
player_door_r = CREATE_OBJECT(eDoorModel_r, sTimetableScene.sScene.vCreateCoords+vDoorOffset_r)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_door_r, sTimetableScene.sScene.eScene)
SET_MODEL_AS_NO_LONGER_NEEDED(eDoorModel_r)
ELSE
player_door_r = GET_CLOSEST_OBJECT_OF_TYPE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_r, 5.0, eDoorModel_r)
IF (player_door_r = player_door_l)
player_door_r = NULL
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 entitySetName = ""
BOOL bActivateSet = FALSE
IF SETUP_INTERIOR_ENTITY_SET_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, entitySetName, bActivateSet)
IF GET_HASH_KEY(entitySetName) = HASH("showhome_only")
IF bActivateSet
SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_SAVEHOUSE_SHOWHOME, BUILDINGSTATE_DESTROYED)
ELSE
SET_BUILDING_STATE(BUILDINGNAME_ES_FRANKLINS_HILLS_SAVEHOUSE_SHOWHOME, BUILDINGSTATE_NORMAL)
ENDIF
ELIF GET_HASH_KEY(entitySetName) = HASH("V_Michael_bed_messy")
IF bActivateSet
SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_BED, BUILDINGSTATE_DESTROYED)
ELSE
SET_BUILDING_STATE(BUILDINGNAME_ES_MICHAEL_BED, BUILDINGSTATE_NORMAL)
ENDIF
ENDIF
ENDIF
// TEXT_LABEL TCmod = ""
// IF SETUP_TIMECYCLE_MOD_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, TCmod)
// ENDIF
// TEXT_LABEL_63 fxName = ""
// IF SETUP_PTFX_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, fxName)
// REQUEST_PTFX_ASSET()
// IF NOT HAS_PTFX_ASSET_LOADED()
// bWaitForBuddyAssets = FALSE
// REQUEST_PTFX_ASSET()
//
// #IF IS_DEBUG_BUILD
// TEXT_LABEL_63 str = ("request ptfx assets ")
// DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
// iDrawSceneRot += 1
// #ENDIF
// ENDIF
//
// ENDIF
IF (sTimetableScene.eSceneBuddy <> NO_CHARACTER)
IF (sTimetableScene.eBuddyLoopTask = script_task_play_anim)
OR (sTimetableScene.eBuddyOutTask = script_task_play_anim)
TEXT_LABEL_63 tSceneBuddyAnimDict = "null", tSceneBuddyAnimLoop = "null", tSceneBuddyAnimOut = "null"
ANIMATION_FLAGS buddyAnimLoopFlag = AF_DEFAULT, buddyAnimOutFlag = AF_DEFAULT
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddyAnimLoopFlag, buddyAnimOutFlag)
#IF IS_DEBUG_BUILD
IF (sTimetableScene.eBuddyLoopTask <> SCRIPT_TASK_PLAY_ANIM
AND sTimetableScene.eBuddyOutTask <> SCRIPT_TASK_PLAY_ANIM
AND sTimetableScene.eBuddyLoopTask <> SCRIPT_TASK_SYNCHRONIZED_SCENE
AND sTimetableScene.eBuddyOutTask <> SCRIPT_TASK_SYNCHRONIZED_SCENE)
TEXT_LABEL_63 sInvalid
sInvalid = "buddy animation needed for "
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
sInvalid += "?"
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
ENDIF
#ENDIF
REQUEST_ANIM_DICT(tSceneBuddyAnimDict)
IF NOT HAS_ANIM_DICT_LOADED(tSceneBuddyAnimDict)
bWaitForBuddyAssets = FALSE
REQUEST_ANIM_DICT(tSceneBuddyAnimDict)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request buddy anim ")
str += (tSceneBuddyAnimDict)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(scene_buddy)
IF (sTimetableScene.eSceneBuddy <> CHAR_BLANK_ENTRY)
//buddy is a story char
IF (sTimetableScene.eVehState <> PTVS_2_playerInVehicle)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REPEAT GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), temp_ped) iPed
IF NOT IS_PED_INJURED(temp_ped[iPed])
IF GET_ENTITY_MODEL(temp_ped[iPed]) = GET_NPC_PED_MODEL(sTimetableScene.eSceneBuddy)
scene_buddy = temp_ped[iPed]
ENDIF
ENDIF
ENDREPEAT
ENDIF
IF NOT IS_PED_INJURED(scene_buddy)
SET_ENTITY_COORDS(scene_buddy, sTimetableScene.sScene.vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset)
SET_ENTITY_HEADING(scene_buddy, sTimetableScene.sScene.fCreateHead+sTimetableScene.fSceneBuddyHeadOffset)
PRIVATE_SetDefaultSceneBuddyAttributes(scene_buddy, sTimetableScene.eSceneBuddy)
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
ELSE
IF NOT CREATE_NPC_PED_ON_FOOT(scene_buddy, sTimetableScene.eSceneBuddy,
sTimetableScene.sScene.vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset,
sTimetableScene.sScene.fCreateHead+sTimetableScene.fSceneBuddyHeadOffset)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating NPC on foot")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
PRIVATE_SetDefaultSceneBuddyAttributes(scene_buddy, sTimetableScene.eSceneBuddy)
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
ENDIF
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_VEHICLE_SEAT_FREE(scene_veh, VS_FRONT_RIGHT)
PED_INDEX frontRightPed = GET_PED_IN_VEHICLE_SEAT(scene_veh, VS_FRONT_RIGHT)
IF NOT IS_ENTITY_DEAD(frontRightPed)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating ped in veh")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 2
#ENDIF
IF (GET_ENTITY_MODEL(frontRightPed) = GET_NPC_PED_MODEL(sTimetableScene.eSceneBuddy))
scene_buddy = frontRightPed
PRIVATE_SetDefaultSceneBuddyAttributes(scene_buddy, sTimetableScene.eSceneBuddy)
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
ENDIF
ENDIF
ELSE
IF NOT CREATE_NPC_PED_INSIDE_VEHICLE(scene_buddy, sTimetableScene.eSceneBuddy,
scene_veh, VS_FRONT_RIGHT)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating NPC in veh")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
PRIVATE_SetDefaultSceneBuddyAttributes(scene_buddy, sTimetableScene.eSceneBuddy)
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//buddy ISNT a story char (e.g. stripper)
PED_TYPE PedType = PEDTYPE_MISSION
MODEL_NAMES model = DUMMY_MODEL_FOR_SCRIPT
SETUP_BLANK_BUDDY_FOR_SCENE(sTimetableScene.sScene.eScene, PedType, model)
IF (sTimetableScene.eVehState <> PTVS_2_playerInVehicle)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating ")
str += SAFE_GET_MODEL_NAME_FOR_DEBUG(model)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
IF (model = GET_CHOP_MODEL())
IF CREATE_CHOP(scene_buddy,
sTimetableScene.sScene.vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset,
sTimetableScene.sScene.fCreateHead+sTimetableScene.fSceneBuddyHeadOffset)
PRIVATE_SetDefaultSceneBuddyAttributes(scene_buddy, sTimetableScene.eSceneBuddy)
REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE("chop")
ENDIF
ELSE
REQUEST_MODEL(model)
IF HAS_MODEL_LOADED(model)
scene_buddy = CREATE_PED(PedType, model,
sTimetableScene.sScene.vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset,
sTimetableScene.sScene.fCreateHead+sTimetableScene.fSceneBuddyHeadOffset,
FALSE, FALSE)
g_pScene_buddy = scene_buddy
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
SET_MODEL_AS_NO_LONGER_NEEDED(model)
ENDIF
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_VEHICLE_SEAT_FREE(scene_veh, VS_FRONT_RIGHT)
PED_INDEX frontRightPed = GET_PED_IN_VEHICLE_SEAT(scene_veh, VS_FRONT_RIGHT)
IF NOT IS_ENTITY_DEAD(frontRightPed)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("grabbing passenger")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
IF (GET_ENTITY_MODEL(frontRightPed) = model)
scene_buddy = frontRightPed
g_pScene_buddy = scene_buddy
ENDIF
ENDIF
ELSE
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("creating passenger")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
REQUEST_MODEL(model)
IF HAS_MODEL_LOADED(model)
// Ally: As the selector script is will be active in both sp and mp, we can't have it creating
// networked objects when it is not a net script.
IF DOES_ENTITY_EXIST(scene_buddy)
DELETE_PED(scene_buddy)
ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
scene_buddy = CREATE_PED_INSIDE_VEHICLE(scene_veh,
PedType, model, VS_FRONT_RIGHT)
g_pScene_buddy = scene_buddy
PRIVATE_SetDefaultSceneBuddyCompVar(scene_buddy, sTimetableScene.eSceneBuddy, sTimetableScene.sScene.eScene)
SET_MODEL_AS_NO_LONGER_NEEDED(model)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELIF NOT IS_ENTITY_DEAD(scene_buddy)
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(scene_buddy)
AND HAS_PED_PRELOAD_PROP_DATA_FINISHED(scene_buddy)
//
ELSE
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("waiting for ped to preload")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tBankName = "", tBankBName = ""
IF SETUP_AUDIO_BANK_FOR_SCENE(sTimetableScene.sScene.eScene, tBankName, tBankBName)
REGISTER_SCRIPT_WITH_AUDIO()
IF NOT REQUEST_AMBIENT_AUDIO_BANK(tBankName)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request sfx ")
str += (tBankName)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot ++
// SAVE_STRING_TO_DEBUG_FILE(str)
// SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(tBankBName)
IF NOT REQUEST_AMBIENT_AUDIO_BANK(tBankBName)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request sfx ")
str += (tBankBName)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot ++
// SAVE_STRING_TO_DEBUG_FILE(str)
// SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
ENDIF
ENDIF
IF sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() //
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 tScene = Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
TEXT_LABEL_63 str1 = GET_STRING_FROM_STRING(tScene, GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"), GET_LENGTH_OF_LITERAL_STRING(tScene))
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str1, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
TEXT_LABEL_63 str2 = ("ePed ")
str2 += GET_PLAYER_PED_STRING(sTimetableScene.sScene.ePed)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str2, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
TEXT_LABEL_63 str3 = "current "
str3 += GET_PLAYER_PED_STRING(GET_CURRENT_PLAYER_PED_ENUM())
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str3, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ELIF IS_PLAYER_SWITCH_IN_PROGRESS() AND (GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT)
AND (GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_ASCENT OR GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_PAN)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("ped state ")
str += Get_String_From_Switch_State(GET_PLAYER_SWITCH_STATE())
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ELSE
IF SET_PED_PRESET_OUTFIT_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene, PLAYER_PED_ID(), iPlayerOutfitPreloadStage)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("preload outfit ")
str += (iPlayerOutfitPreloadStage)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ELIF NOT (HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
AND HAS_PED_PRELOAD_PROP_DATA_FINISHED(PLAYER_PED_ID()))
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("prestreamed outfit ")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tAudioEvent = ""
INT iStartOffsetMs = 0
IF SETUP_SYNCH_AUDIO_EVENT_FOR_SCENE(sTimetableScene.sScene.eScene, tAudioEvent, iStartOffsetMs)
IF NOT PREPARE_SYNCHRONIZED_AUDIO_EVENT(tAudioEvent, iStartOffsetMs)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("request event ")
str += (tAudioEvent)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot ++
CPRINTLN(DEBUG_SWITCH, "PREPARE_SYNCHRONIZED_AUDIO_EVENT ", tAudioEvent)
#ENDIF
ENDIF
ENDIF
IF g_bMagDemoActive
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PED_FALLING(PLAYER_PED_ID())
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("SETUP falling... ")
#ENDIF
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE, "SETUP falling... ")
bFreezePlayer = TRUE
ENDIF
ENDIF
ENDIF
TEXT_LABEL_31 RoomName = ""
FLOAT fTurnOffTVPhase = 0.0
TV_LOCATION eRoomTVLocation = TV_LOC_NONE
TVCHANNELTYPE eTVChannelType = TVCHANNELTYPE_CHANNEL_NONE
TV_CHANNEL_PLAYLIST eTVPlaylist = TV_PLAYLIST_NONE
IF CONTROL_PLAYER_WATCHING_TV(sTimetableScene.sScene.eScene, RoomName, fTurnOffTVPhase, eRoomTVLocation, eTVChannelType, eTVPlaylist)
IF NOT IS_STRING_NULL_OR_EMPTY(RoomName)
// //#1321543
// REQUEST_MODELS_IN_ROOM(sTimetableScene.sScene.roomInterior, RoomName)
IF IS_VALID_INTERIOR(sTimetableScene.sScene.roomInterior)
IF IS_INTERIOR_READY(sTimetableScene.sScene.roomInterior)
REQUEST_MODELS_IN_ROOM(sTimetableScene.sScene.roomInterior, RoomName)
IF NOT IS_TV_SCRIPT_AVAILABLE_FOR_USE(eRoomTVLocation)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("tv[")
str += ENUM_TO_INT(eRoomTVLocation)
str += ("] not available for use...")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
IF IS_THIS_TV_AVAILABLE_FOR_USE(eRoomTVLocation)
AND NOT bSwitchForcedStartAmbientTV
START_AMBIENT_TV_PLAYBACK(eRoomTVLocation, eTVChannelType, eTVPlaylist)
bSwitchForcedStartAmbientTV = TRUE
ENDIF
ELSE
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("tv interior[")
str += (RoomName)
str += ("] not ready...")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ELSE
IF iWaitForBuddyFrames < ROUND(TO_FLOAT(iCONST_WAIT_FOR_BUDDY_MAX_FRAMES) * 0.9)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("tv interior[")
str += (RoomName)
str += ("] not valid...")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("tv interior[")
str += (RoomName)
str += ("] not valid...")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
SP_MISSIONS eLeadInToCreate = SP_MISSION_NONE
IF g_savedGlobals.sRepeatPlayData.eMission != SP_MISSION_NONE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
#ENDIF
eLeadInToCreate = g_savedGlobals.sRepeatPlayData.eMission //Store this value to use after the struct reset.
IF IS_BIT_SET(g_sMissionStaticData[eLeadInToCreate].settingsBitset, MF_INDEX_HAS_LEADIN)
SWITCH iLeadinRequestStage
CASE 0
// CPRINTLN(DEBUG_SWITCH, "Waiting for SP scripts to intialise before preloading mission lead-in.")
// WHILE NOT g_isSPMainInitialised
// WAIT(0)
// ENDWHILE
// CPRINTLN(DEBUG_SWITCH, "SP scripts intialised.")
// MISSION_FLOW_PRELOAD_ASSETS_FOR_MISSION_TRIGGER(eLeadInToCreate)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
str = ("Leadin - initialising SP scripts")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
IF g_isSPMainInitialised
CPRINTLN(DEBUG_SWITCH, "SP scripts intialised.")
MISSION_FLOW_PRELOAD_ASSETS_FOR_MISSION_TRIGGER(eLeadInToCreate)
iLeadinRequestStage = 1
ENDIF
BREAK
CASE 1
// CPRINTLN(DEBUG_SWITCH, "Starting to wait for mission trigger to pick up preload request.")
// WHILE g_eMissionSceneToPreLoad != SP_MISSION_NONE
// WAIT(0)
// ENDWHILE
// WAIT(0)
// CPRINTLN(DEBUG_SWITCH, "Finished waiting for mission trigger to pick up preload request.")
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
str = ("Leadin - preloading")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
IF NOT (g_eMissionSceneToPreLoad != SP_MISSION_NONE)
CPRINTLN(DEBUG_SWITCH, "Finished waiting for mission trigger to pick up preload request.")
iLeadinRequestStage = 2
ENDIF
BREAK
CASE 2
// CPRINTLN(DEBUG_SWITCH, "Starting to wait for lead-in to finish loading assets.")
// WHILE g_bMissionTriggerLoading
// WAIT(0)
// ENDWHILE
// CPRINTLN(DEBUG_SWITCH, "Lead-in scene loaded. Unflagging leave area flag so the scene creates.")
// Set_Leave_Area_Flag_For_Mission(eLeadInToCreate, FALSE)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
str = ("Leadin - loading ")
str += GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eLeadInToCreate)
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
IF NOT g_bMissionTriggerLoading
CPRINTLN(DEBUG_SWITCH, "Lead-in scene loaded. Unflagging leave area flag so the scene creates.")
Set_Leave_Area_Flag_For_Mission(eLeadInToCreate, FALSE)
iLeadinRequestStage = 3
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDIF
IF sTimetableScene.sScene.eScene = PR_SCENE_T6_TRAF_AIR
IF NOT IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTraffickingData.iBools, TRAF_BOOL_PlaneCreated)
IF iWaitForBuddyFrames < ROUND(TO_FLOAT(iCONST_WAIT_FOR_BUDDY_MAX_FRAMES) * 0.9)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("controller_Trafficking")) > 0
TEXT_LABEL_63 str = ("Plane Not Created - no controller")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
ELSE
TEXT_LABEL_63 str = ("Plane Not Created - controller")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
ENDIF
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("Plane Created")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
/* ELIF sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_ARM3
// OR sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_FAM1
// OR sTimetableScene.sScene.eScene = PR_SCENE_Fa_STRIPCLUB_FAM3
IF NOT IS_BITMASK_AS_ENUM_SET(g_StripclubGlobals.iStripclubFlags, GSF_IN_CLUB)
IF iWaitForBuddyFrames < ROUND(TO_FLOAT(iCONST_WAIT_FOR_BUDDY_MAX_FRAMES) * 0.9)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("Strippers Not Created")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("Strippers Created")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF */
ELIF sTimetableScene.sScene.eScene = PR_SCENE_M2_SMOKINGGOLF
IF IS_GOLF_CLUB_OPEN_AT_TIME_OF_DAY(GET_CLOCK_HOURS()) //golf club is open
AND GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_GOLF))
IF NOT IS_BITMASK_AS_ENUM_SET(g_sGolfGlobals.GlobalGolfControlFlag, GGCF_AMBIENT_GOLFERS_STREAMED_IN)
IF iWaitForBuddyFrames < ROUND(TO_FLOAT(iCONST_WAIT_FOR_BUDDY_MAX_FRAMES) * 0.9)
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("Golfer Not Created")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("Golfer Created")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF (sTimetableScene.eOutTask = SCRIPT_TASK_USE_MOBILE_PHONE)
IF sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() //
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("wait for ePed for call")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ELSE
IF WaitingForPhonecallToStartAndPause( #IF IS_DEBUG_BUILD iDrawSceneRot #ENDIF )
bWaitForBuddyAssets = FALSE
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str = ("wait for call to start")
DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
ENDIF
// // #1240234 // // // // // // // // // // // // // // //
IF sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT
OR sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT
OR sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT
SP_MISSIONS eTriggerMission = TRIGGER_SCENE_GET_SP_MISSION()
IF (eTriggerMission != SP_MISSION_NONE)
// SELECTOR_SLOTS_ENUM playerSelectorID = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sTimetableScene.sScene.ePed)
//
// IF IS_BIT_SET(g_sPlayerPedRequest.iBitsetPedInLeadIn, ENUM_TO_INT(playerSelectorID))
//
//
// IF NOT IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_IN_PROGRESS)
// IF NOT ARE_STRINGS_EQUAL(g_txtIntroMocapToLoad, "NONE")
// IF HAS_THIS_CUTSCENE_LOADED(g_txtIntroMocapToLoad)
// //Continue switch.
// ELSE
// bWaitForBuddyAssets = FALSE
//
// #IF IS_DEBUG_BUILD
// TEXT_LABEL_63 str = ("trigger CS ")
// str += g_txtIntroMocapToLoad
// DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
// iDrawSceneRot += 1
// #ENDIF
// ENDIF
// ENDIF
//
// IF IS_PLAYER_SWITCH_IN_PROGRESS()
// IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM)
// AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// IF NOT HAS_COLLISION_LOADED_AROUND_ENTITY(PLAYER_PED_ID())
// bWaitForBuddyAssets = FALSE
//
// #IF IS_DEBUG_BUILD
// TEXT_LABEL_63 str = ("wait on player collision")
// DrawLiteralSceneStringWithPrint(iWaitForBuddyFrames, str, iDrawSceneRot, HUD_COLOUR_RED)
// iDrawSceneRot += 1
// #ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
//
// IF IS_THIS_TV_AVAILABLE_FOR_USE(eRoomTVLocation)
// START_AMBIENT_TV_PLAYBACK(eRoomTVLocation)
// ENDIF
//
//
// ENDIF
ENDIF
ENDIF
// // // // // // // // // // // // // // // // // // // //
IF NOT bWaitForBuddyAssets
IF IS_PLAYER_SWITCH_IN_PROGRESS()
IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
IF GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_DESCENT
IF GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0
IF iWaitForCharChangeFrames > 0
iWaitForCharChangeFrames = 0
iWaitForBuddyFrames = 0
ENDIF
iWaitForBuddyFrames++
ENDIF
ELIF GET_PLAYER_SWITCH_STATE() > SWITCH_STATE_JUMPCUT_DESCENT
OR GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_PREP_DESCENT
IF iWaitForCharChangeFrames > 0
iWaitForCharChangeFrames = 0
iWaitForBuddyFrames = 0
ENDIF
iWaitForBuddyFrames++
ELIF GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_ASCENT
AND sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM()
iWaitForCharChangeFrames++
iWaitForBuddyFrames++
ENDIF
ENDIF
ELSE
IF iWaitForCharChangeFrames > 0
iWaitForCharChangeFrames = 0
iWaitForBuddyFrames = 0
ENDIF
iWaitForBuddyFrames++
ENDIF
IF iWaitForBuddyFrames >= iCONST_WAIT_FOR_BUDDY_MAX_FRAMES
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sWaitForBuddyFrames
sWaitForBuddyFrames = "iWaitForBuddyFrames > "
sWaitForBuddyFrames += iWaitForBuddyFrames
sWaitForBuddyFrames += ": "
sWaitForBuddyFrames += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
#IF NOT IS_NEXTGEN_BUILD
PRINTSTRING(GET_THIS_SCRIPT_NAME())PRINTSTRING(": ")PRINTSTRING(sWaitForBuddyFrames)PRINTNL()
// SCRIPT_ASSERT(sWaitForBuddyFrames)
#ENDIF
#IF IS_NEXTGEN_BUILD
CERRORLN(DEBUG_SHOPS, GET_THIS_SCRIPT_NAME())PRINTSTRING(": ")PRINTSTRING(sWaitForBuddyFrames)PRINTNL()
#ENDIF
#ENDIF
bWaitForBuddyAssets = TRUE
ENDIF
ENDIF
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
AND GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
SET_THIS_IS_A_TRIGGER_SCRIPT(TRUE)
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_SHORT)
bTriggeredFade = TRUE
CWARNINGLN(DEBUG_SWITCH, "<TRIGGER FADE> force fade out and set as trigger script to speed up assert streaming (removing chance of having gameplay returned but limited)")
ENDIF
ENDIF
WAIT(0)
DisableWhileWaiting("Setup_Player_Timetable_Scene")
ENDWHILE
// // If we're switching into a mission don't end the switch camera until the game is faded.
// IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_IN_PROGRESS)
// INT iTimeoutTime = GET_GAME_TIMER() + 10000
// WHILE NOT IS_SCREEN_FADED_OUT() AND GET_GAME_TIMER() < iTimeoutTime
// WAIT(0)
// ENDWHILE
// ENDIF
Request_SpecialMissionAssets(sTimetableScene.sScene)
IF bFreezePlayer
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "SETUP falling... ")
ENDIF
// eSceneAnimProgress = ePlayerSceneAnimProgress
//- create any script vehicles -//
//- create any script peds -//
//- create the peds for hot-swap -//
//- set the players initial coords and heading -//
//- create any script objects -//
//- create any sequence tasks -//
SafeDetachSynchronizedScene(g_iPlayer_Timetable_Loop_SynchSceneID)
SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
IF bKeepCellphoneDisabled
DISABLE_CELLPHONE(TRUE)
ENDIF
PRIVATE_SetRoadsSwitchArea(sTimetableScene.sScene.eScene, FALSE)
PRIVATE_SetPedInSwitchArea(sTimetableScene.sScene.eScene, FALSE)
iPlayerOutfitPreloadStage = 0
//- setup any scripted coverpoints -//
//- add any initial taxi locations -//
//- load scene(if required) -//
//- load additional text and mission text link-//
//- setup audio malarky for player -//
ENDPROC
#IF IS_DEBUG_BUILD
// *******************************************************************************************
// DEBUGGING FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC STRING Get_String_From_Player_Timetable_Scene_Stage(PT_SCENE_STAGE_ENUM this_player_timetable_scene_stage)
SWITCH this_player_timetable_scene_stage
CASE WAIT_FOR_PLAYER_PED_TO_UPDATE
RETURN "WAIT_FOR_PLAYER_PED_TO_UPDATE"
BREAK
CASE CONTROL_PLAYER_DURING_SWITCH
RETURN "CONTROL_PLAYER_DURING_SWITCH"
BREAK
CASE PLAYER_SCENE_STARTED
RETURN "PLAYER_SCENE_STARTED"
BREAK
CASE PLAYER_EXITING_SWITCH
RETURN "PLAYER_EXITING_SWITCH"
BREAK
CASE PLAYER_ON_PHONE_ANIM
RETURN "PLAYER_ON_PHONE_ANIM"
BREAK
CASE PLAYER_HAS_WARDROBE_ANIM
RETURN "PLAYER_HAS_WARDROBE_ANIM"
BREAK
CASE FINISHED_TIMETABLED_SCENE
RETURN "FINISHED_TIMETABLED_SCENE"
BREAK
ENDSWITCH
RETURN "Get_String_From_Player_Timetable_Scene_Stage(null) "
ENDFUNC
//PURPOSE: Initialises the mission widget
PROC Create_Player_Timetable_Scene_widget()
INT iWidget
TEXT_LABEL_63 str = "Player_Timetable_Scene.sc - "
str += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
player_timetable_scene_widget = START_WIDGET_GROUP(str)
START_NEW_WIDGET_COMBO()
REPEAT COUNT_OF(PT_SCENE_STAGE_ENUM) iWidget
ADD_TO_WIDGET_COMBO(Get_String_From_Player_Timetable_Scene_Stage(INT_TO_ENUM(PT_SCENE_STAGE_ENUM, iWidget)))
ENDREPEAT
STOP_WIDGET_COMBO("iCurrent_player_timetable_scene_stage", iCurrent_player_timetable_scene_stage)
ADD_WIDGET_BOOL("bTestWarp", bTestWarp)
ADD_WIDGET_FLOAT_SLIDER("fDebugCamInfoDisplayX", fDebugCamInfoDisplayX, 0.0, 1.0, 0.001)
ADD_WIDGET_FLOAT_SLIDER("fDebugCamInfoDisplayY", fDebugCamInfoDisplayY, 0.0, 1.0, 0.001)
ADD_WIDGET_FLOAT_SLIDER("fDebugCamInfoOffsetY", fDebugCamInfoOffsetY, 0.0, 1.0, 0.001)
STOP_WIDGET_GROUP()
ENDPROC
//PURPOSE: Moniters for any changes in the mission widget
PROC Watch_Player_Timetable_Scene_Widget()
iCurrent_player_timetable_scene_stage = ENUM_TO_INT(current_player_timetable_scene_stage)
IF (current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE)
IF bTestWarp
PED_SCENE_STRUCT sSceneData
PLAYER_TIMETABLE_SCENE_STRUCT sWarpScene
sSceneData.iStage = 0
sSceneData.eScene = INT_TO_ENUM(PED_REQUEST_SCENE_ENUM, g_iSelectedDebugPlayerCharScene)
GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sSceneData.eScene, sSceneData.ePed)
GET_PLAYER_PED_POSITION_FOR_SCENE(sSceneData.eScene, sSceneData.vCreateCoords, sSceneData.fCreateHead, sSceneData.tCreateRoom)
SETUP_PLAYER_TIMETABLE_FOR_SCENE(sSceneData, sWarpScene)
PED_VEH_DATA_STRUCT sData //MODEL_NAMES vehModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vVehCoordOffset = <<0,0,0>>
FLOAT fVehHeadOffset = 0
VECTOR vDriveOffset = <<0,0,0>>
FLOAT fDriveSpeed = 0
IF sWarpScene.eVehState <> PTVS_0_noVehicle
GET_PLAYER_VEH_POSITION_FOR_SCENE(sWarpScene.sScene.ePed, sWarpScene.sScene.eScene,
sData, vVehCoordOffset, fVehHeadOffset,
vDriveOffset, fDriveSpeed)
ENDIF
VECTOR vCamEndPos, vCamEndRot
FLOAT vCamEndFov = 0.0
IF NOT SETUP_PLAYER_CAMERA_FOR_SCENE(sWarpScene.sScene.eScene, vCamEndPos, vCamEndRot, vCamEndFov)
vCamEndPos = sSceneData.vCreateCoords + <<0,5,1>>
vCamEndRot = <<0,0,180>>
ENDIF
IF sWarpScene.sScene.ePed < INT_TO_ENUM(enumCharacterList, NUM_OF_PLAYABLE_PEDS)
g_vPlayerVeh[sWarpScene.sScene.ePed] = scene_veh
ELSE
g_vPlayerVeh[GET_CURRENT_PLAYER_PED_ENUM()] = scene_veh
ENDIF
Test_Player_Ped_Scene(sWarpScene,
sData.model, player_timetable_scene_widget, vVehCoordOffset, fVehHeadOffset,
vDriveOffset,
vCamEndPos, vCamEndRot,
player_prop, player_extra_prop,
player_door_l, player_door_r,
scene_veh)
bTestWarp = FALSE
ENDIF
ENDIF
ENDPROC
//PURPOSE: Moniters for any keyboard inputs that would alter the mission (debug pass etc)
PROC Player_Timetable_Scene_Debug_Options()
ENDPROC
//PURPOSE: #1218160 Add 'temporary camera' text to the build for the procedural switches
//Seeing as its going to be a while till we get the code support for this, could you add that text to them all so reviews dont flag these as being broken. Thanks
//FUNC BOOL DrawDebugSceneCamInfo()
//
// TEXT_LABEL_63 sLiteralOne63 = "", sLiteralTwo63 = ""
// HUD_COLOURS eHudColour = HUD_COLOUR_PURE_WHITE
//
// IF DOES_CAM_EXIST(ExitCamIndex)
//
// TEXT_LABEL_63 tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix
// IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix)
// sLiteralOne63 = ("playing animated switch cam")
//
// sLiteralTwo63 = (" \"")
// sLiteralTwo63 += (tPlayerSceneSyncExitCam)
// sLiteralTwo63 += ("\"")
//
// eHudColour = HUD_COLOUR_PURE_WHITE
// ELSE
// sLiteralOne63 = ("ExitCamIndex \"nameless???\" exists???")
//
// eHudColour = HUD_COLOUR_REDLIGHT
// ENDIF
// ELSE
//
// TEXT_LABEL_23 tPlayerSceneProceduralCam
// IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneProceduralCam)
// sLiteralOne63 = ("playing procedural switch cam")
//
// sLiteralTwo63 = (" \"")
// sLiteralTwo63 += (tPlayerSceneProceduralCam)
// sLiteralTwo63 += ("\"")
//
// GET_PLAYER_SWITCH_INTERP_OUT_DURATION()
// GET_PLAYER_SWITCH_INTERP_OUT_CURRENT_TIME()
//
// eHudColour = HUD_COLOUR_BLUELIGHT
// ELSE
// sLiteralOne63 += ("ExitCamIndex doesnt exist")
//
// eHudColour = HUD_COLOUR_REDLIGHT
// ENDIF
// ENDIF
//
// IF NOT IS_STRING_NULL_OR_EMPTY(sLiteralOne63)
// 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(fDebugCamInfoDisplayX, fDebugCamInfoDisplayY+(0*fDebugCamInfoOffsetY), "STRING", sLiteralOne63)
// ENDIF
// IF NOT IS_STRING_NULL_OR_EMPTY(sLiteralTwo63)
// 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(fDebugCamInfoDisplayX, fDebugCamInfoDisplayY+(1*fDebugCamInfoOffsetY), "STRING", sLiteralTwo63)
// ENDIF
//
// RETURN FALSE
//ENDFUNC
#ENDIF
// *******************************************************************************************
// GENERAL FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC BOOL Safe_Create_Synchronized_Scene(INT &iScene, STRING sCreateInfo, VECTOR scenePosition, VECTOR sceneOrientation, EULER_ROT_ORDER RotOrder = EULER_YXZ)
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScene)
iScene = CREATE_SYNCHRONIZED_SCENE(scenePosition, sceneOrientation, RotOrder)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Safe_Create_Synchronized_Scene[", iScene, "] not running // ", sCreateInfo)
RETURN TRUE
ENDIF
SET_SYNCHRONIZED_SCENE_ORIGIN(iScene, scenePosition, sceneOrientation, RotOrder)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Safe_Create_Synchronized_Scene[", iScene, "] running // ", sCreateInfo)
RETURN FALSE
ENDFUNC
FUNC BOOL Get_Ped_Anim_Or_SynchedScene_Phase(PED_INDEX PedIndex, STRING AnimDictName, STRING AnimName, FLOAT &AnimCurrentTime)
IF IS_ENTITY_DEAD(PedIndex)
AnimCurrentTime = -1.0
RETURN FALSE
ENDIF
IF IS_ENTITY_PLAYING_ANIM(PedIndex, AnimDictName, AnimName, ANIM_SCRIPT)
AnimCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PedIndex, AnimDictName, AnimName)
RETURN TRUE
ELIF IS_ENTITY_PLAYING_ANIM(PedIndex, AnimDictName, AnimName, ANIM_SYNCED_SCENE)
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK)
AnimCurrentTime = GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Loop_SynchSceneID)
RETURN TRUE
ENDIF
AnimCurrentTime = -1.0
RETURN FALSE
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
IF (GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK)
AnimCurrentTime = GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID)
RETURN TRUE
ENDIF
AnimCurrentTime = -1.0
RETURN FALSE
ENDIF
ENDIF
AnimCurrentTime = -1.0
RETURN FALSE
ENDFUNC
FUNC BOOL SetPedFromVehicleIntoSynchedScene(PED_INDEX PedIndex, VEHICLE_INDEX VehicleIndex)
IF NOT IS_ENTITY_DEAD(VehicleIndex)
IF IS_PED_IN_VEHICLE(PedIndex, VehicleIndex)
SET_ENTITY_COORDS(PedIndex, GET_ENTITY_COORDS(VehicleIndex))
SET_ENTITY_HEADING(PedIndex, GET_ENTITY_HEADING(VehicleIndex))
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL SetPedFromSynchedSceneIntoVehicle(PED_REQUEST_SCENE_ENUM ePedScene)
// IF NOT IS_ENTITY_DEAD(scene_veh)
// TEXT_LABEL_63 tPlayerSceneSyncAnimVehLoop
// IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(ePedScene, tPlayerSceneSyncAnimVehLoop)
// PLAY_SYNCHRONIZED_ENTITY_ANIM(scene_veh,
// g_iPlayer_Timetable_Loop_SynchSceneID,
// tPlayerSceneSyncAnimVehLoop, tPlayerSceneSyncAnimDict,
// NORMAL_BLEND_IN)
//
// ENDIF
// ENDIF
TEXT_LABEL_63 tPlayerSceneSyncAnimVehLoop, tPlayerSceneSyncAnimVehExit
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(ePedScene, tPlayerSceneSyncAnimVehLoop)
OR GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimVehExit)
IF (sTimetableScene.eVehState <> PTVS_0_noVehicle)
IF NOT IS_ENTITY_DEAD(scene_veh)
// #IF IS_DEBUG_BUILD
// VECTOR vPreVehCoord = GET_ENTITY_COORDS(scene_veh)
// VECTOR vPreVehRot = GET_ENTITY_ROTATION(scene_veh)
// #ENDIF
SET_RADIO_FRONTEND_FADE_TIME(3.5)
STOP_SYNCHRONIZED_ENTITY_ANIM(scene_veh, NORMAL_BLEND_OUT, TRUE)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceSkinCharacterCloth, TRUE)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), scene_veh, VS_DRIVER)
SET_PLAYER_CLOTH_LOCK_COUNTER(iFramesToLockCloth)
ELIF (sTimetableScene.eVehState = PTVS_1_playerWithVehicle)
IF IS_STRING_NULL_OR_EMPTY(tPlayerSceneSyncAnimVehExit)
GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimVehExit)
ENDIF
IF ARE_STRINGS_EQUAL(tPlayerSceneSyncAnimVehExit, "SITTING_ON_CAR_BONNET_EXIT_CAR")
OR ARE_STRINGS_EQUAL(tPlayerSceneSyncAnimVehExit, "SITTING_ON_CAR_PREMIERE_EXIT_CAR")
ar_SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
ELSE
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("NOT parkedhills scene \"")
SAVE_STRING_TO_DEBUG_FILE(tPlayerSceneSyncAnimVehExit)
SAVE_STRING_TO_DEBUG_FILE("\"")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
ENDIF
ENDIF
// #IF IS_DEBUG_BUILD
// VECTOR vPostVehCoord = GET_ENTITY_COORDS(scene_veh)
// VECTOR vPostVehRot = GET_ENTITY_ROTATION(scene_veh)
//
// OPEN_DEBUG_FILE()
// SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE("pre-scene_veh coord: ")
// SAVE_VECTOR_TO_DEBUG_FILE(vPreVehCoord)
// SAVE_STRING_TO_DEBUG_FILE(", ")
// SAVE_VECTOR_TO_DEBUG_FILE(vPreVehRot)
// SAVE_NEWLINE_TO_DEBUG_FILE()
//
// SAVE_STRING_TO_DEBUG_FILE("post-scene_veh coord: ")
// SAVE_VECTOR_TO_DEBUG_FILE(vPostVehCoord)
// SAVE_STRING_TO_DEBUG_FILE(", ")
// SAVE_VECTOR_TO_DEBUG_FILE(vPostVehRot)
// SAVE_NEWLINE_TO_DEBUG_FILE()
//
// VECTOR vDiffVehCoord = vPostVehCoord-vPreVehCoord
// VECTOR vDiffVehRot = vPostVehRot-vPreVehRot
//
// SAVE_STRING_TO_DEBUG_FILE("diff-scene_veh coord: ")
// SAVE_VECTOR_TO_DEBUG_FILE(vDiffVehCoord)
// SAVE_STRING_TO_DEBUG_FILE(", ")
// SAVE_VECTOR_TO_DEBUG_FILE(vDiffVehRot)
// SAVE_NEWLINE_TO_DEBUG_FILE()
//
// SAVE_STRING_TO_DEBUG_FILE(" vCreateCoords += ")SAVE_VECTOR_TO_DEBUG_FILE(vDiffVehCoord)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" fCreateHead += ")SAVE_FLOAT_TO_DEBUG_FILE(vDiffVehRot.z)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_NEWLINE_TO_DEBUG_FILE()
//
// SAVE_STRING_TO_DEBUG_FILE(" vCreateRot += <<")SAVE_FLOAT_TO_DEBUG_FILE(vDiffVehRot.x)SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_FLOAT_TO_DEBUG_FILE(vDiffVehRot.y)SAVE_STRING_TO_DEBUG_FILE(", 0.0>>")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_NEWLINE_TO_DEBUG_FILE()
// CLOSE_DEBUG_FILE()
// #ENDIF
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL SetPedFromSynchedSceneIntoObject(OBJECT_INDEX &ObjectIndex,
PED_REQUEST_SCENE_ENUM ePedScene, INT &iDrawSceneRot, BOOL bExtraProp)
IF NOT DOES_ENTITY_EXIST(ObjectIndex)
RETURN FALSE
ENDIF
TEXT_LABEL_63 tExitSyncObjAnim, tExitSyncExtraObjAnim
INT iExitFlags
IF IS_ENTITY_ATTACHED(ObjectIndex)
OR GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tExitSyncObjAnim, tExitSyncExtraObjAnim, iExitFlags)
OR (ePedScene = PR_SCENE_F0_TANISHAFIGHT) //1294022
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fPropDetachPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
BOOL bAttachedToBuddy = FALSE
IF NOT bExtraProp
IF GET_OBJECTS_FOR_SCENE(ePedScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fPropDetachPhase, thisSceneObjectAction)
ENDIF
ELSE
IF GET_EXTRA_OBJECTS_FOR_SCENE(ePedScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fPropDetachPhase, thisSceneObjectAction, bAttachedToBuddy)
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
PED_INDEX animatedPed = NULL
IF NOT bAttachedToBuddy
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(ePedScene,
tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneAnimProgress)
animatedPed = PLAYER_PED_ID()
ENDIF
ELSE
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(ePedScene,
tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag)
animatedPed = scene_buddy
ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(animatedPed)
IF (eObjectModel <> DUMMY_MODEL_FOR_SCRIPT)
FLOAT fPlayer_anim_current_time
IF fPropDetachPhase >= 0
AND Get_Ped_Anim_Or_SynchedScene_Phase(animatedPed, tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut, fPlayer_anim_current_time)
#IF IS_DEBUG_BUILD
STRING pEventName = "ObjectRelease"
FLOAT ReturnStartPhase, ReturnEndPhase
IF FIND_ANIM_EVENT_PHASE(tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut,
pEventName, ReturnStartPhase, ReturnEndPhase)
FLOAT fPropDetachPhaseDiff
fPropDetachPhaseDiff = ABSF(fPropDetachPhase - ReturnStartPhase)
IF (fPropDetachPhaseDiff > 0.0002)
IF NOT bObjectReleasePhaseReset
AND NOT bExtraProp
SAVE_STRING_TO_DEBUG_FILE("FIND_ANIM_EVENT_PHASE(\"")
SAVE_STRING_TO_DEBUG_FILE(tPlayerSceneSceneAnimDict)
SAVE_STRING_TO_DEBUG_FILE("\", \"")
SAVE_STRING_TO_DEBUG_FILE(tPlayerSceneSceneAnimOut)
SAVE_STRING_TO_DEBUG_FILE("\", \"")
SAVE_STRING_TO_DEBUG_FILE(pEventName)
SAVE_STRING_TO_DEBUG_FILE("\",[")
SAVE_FLOAT_TO_DEBUG_FILE(ReturnStartPhase)
IF (ReturnStartPhase <> ReturnEndPhase)
SAVE_STRING_TO_DEBUG_FILE(", ")
SAVE_FLOAT_TO_DEBUG_FILE(ReturnEndPhase)
ENDIF
SAVE_STRING_TO_DEBUG_FILE("] <> ")
SAVE_FLOAT_TO_DEBUG_FILE(fPropDetachPhase)
SAVE_STRING_TO_DEBUG_FILE(") //")
SAVE_FLOAT_TO_DEBUG_FILE(fPropDetachPhaseDiff)
SAVE_NEWLINE_TO_DEBUG_FILE()
TEXT_LABEL_63 sEventNameAssert
sEventNameAssert = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(ePedScene),
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(ePedScene)))
sEventNameAssert += " \""
sEventNameAssert += pEventName
sEventNameAssert += "\" differs: "
sEventNameAssert += GET_STRING_FROM_FLOAT(ReturnStartPhase)
SCRIPT_ASSERT(sEventNameAssert)
bObjectReleasePhaseReset = TRUE
ENDIF
fPropDetachPhase = ReturnStartPhase
ENDIF
ENDIF
#ENDIF
IF fPlayer_anim_current_time >= fPropDetachPhase
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(ObjectIndex, thisSceneObjectAction)
IF DOES_ENTITY_EXIST(ObjectIndex)
AND (thisSceneObjectAction = PSOA_9_synchAndPtfxSwap)
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
INT iFlags
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject, iFlags)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
IF NOT IS_ENTITY_PLAYING_ANIM(ObjectIndex,
tPlayerSceneSyncAnimDict,
tPlayerSceneSyncObject, ANIM_SYNCED_SCENE)
PLAY_SYNCHRONIZED_ENTITY_ANIM(ObjectIndex,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, iFlags)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(ObjectIndex)
CPRINTLN(DEBUG_SWITCH, "PLAY_SYNCHRONIZED_ENTITY_ANIM")
ELSE
CPRINTLN(DEBUG_SWITCH, "is playing anim")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "no anim dict")
ENDIF
ELSE
CDEBUG3LN(DEBUG_SWITCH, "no object anim")
ENDIF
ENDIF
else
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("playing anim: ", fPropDetachPhase, iDrawSceneRot+5, HUD_COLOUR_blue)
iDrawSceneRot++
CPRINTLN(DEBUG_SWITCH, "<switch prop> object anim: ", fPlayer_anim_current_time, " < ", fPropDetachPhase)
#ENDIF
ENDIF
// #IF IS_DEBUG_BUILD
// STRING pEventName = "ObjectRelease"
// IF HasAnimEventPassed(pEventName, fPlayer_anim_current_time,
// tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut,
// iDrawSceneRot)
// SCRIPT_ASSERT(pEventName)
// ENDIF
// #ENDIF
ELSE
IF NOT IS_ENTITY_DEAD(animatedPed)
RETURN FALSE
ENDIF
IF fPropDetachPhase >= 0
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("entity anim: ", iDrawSceneRot+5, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF (eObjectModel = Prop_phone_ING)
OR (eObjectModel = Prop_phone_ING_03)
OR (eObjectModel = Prop_phone_ING_02)
IF NOT HAS_FAKE_CELLPHONE_MOVIE_LOADED(sDaughterFakeCellphoneData)
REQUEST_FAKE_CELLPHONE_MOVIE(sDaughterFakeCellphoneData)
ELSE
DRAW_FAKE_CELLPHONE_SCREEN(sDaughterFakeCellphoneData, TRUE, FAKE_CELLPHONE_SCREEN_GENERIC_MENU)
ENDIF
ENDIF
ELIF IS_ENTITY_PLAYING_ANIM(animatedPed, tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut)
#IF IS_DEBUG_BUILD
fPlayer_anim_current_time = GET_ENTITY_ANIM_CURRENT_TIME(animatedPed, tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut)
DrawLiteralSceneStringFloat("IS_ENTITY_PLAYING_ANIM: ", fPlayer_anim_current_time, iDrawSceneRot+5, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("other???: ", iDrawSceneRot+5, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("no anim or scene for obj???", iDrawSceneRot+5, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
ENDIF
UNUSED_PARAMETER(iDrawSceneRot)
RETURN FALSE
ENDFUNC
FUNC BOOL Get_Base_Speed_For_Drive_To_Coord(VECTOR &vSceneVehDriveOffset, FLOAT &fSceneVehDriveSpeed)
IF NOT IS_VEHICLE_DRIVEABLE(scene_veh)
RETURN FALSE
ENDIF
VECTOR scene_veh_coord = GET_ENTITY_COORDS(scene_veh)
FLOAT scene_veh_ground_z
IF (fSceneVehDriveSpeed <= 0.0)
AND ARE_VECTORS_EQUAL(vSceneVehDriveOffset, <<0,0,0>>)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Get_Base_Speed_For_Drive_To_Coord ", vSceneVehDriveOffset, ", ", fSceneVehDriveSpeed)
IF NOT GET_GROUND_Z_FOR_3D_COORD(scene_veh_coord, scene_veh_ground_z)
CPRINTLN(DEBUG_SWITCH, " no ground for coord ", scene_veh_coord, ", super speed!")
vSceneVehDriveOffset = <<0,5,0>>
fSceneVehDriveSpeed = 25.0
CPRINTLN(DEBUG_SWITCH, " ", "default base ", vSceneVehDriveOffset, ", ", fSceneVehDriveSpeed)
RETURN TRUE
ELSE
FLOAT scene_veh_ground_z_diff = (scene_veh_coord.z - scene_veh_ground_z)-1.0
IF scene_veh_ground_z_diff > 1.0
MODEL_NAMES scene_veh_model = GET_ENTITY_MODEL(scene_veh)
IF IS_THIS_MODEL_A_PLANE(scene_veh_model)
CPRINTLN(DEBUG_SWITCH, " ground for coord ", scene_veh_coord, " found at ", scene_veh_ground_z, ", calculate base speed [", scene_veh_ground_z_diff, "]", " - ", GET_MODEL_NAME_FOR_DEBUG(scene_veh_model), " -", " is a plane")
ELIF IS_THIS_MODEL_A_HELI(scene_veh_model)
OR (scene_veh_model = BLIMP)
CPRINTLN(DEBUG_SWITCH, " ground for coord ", scene_veh_coord, " found at ", scene_veh_ground_z, ", calculate base speed [", scene_veh_ground_z_diff, "]", " - ", GET_MODEL_NAME_FOR_DEBUG(scene_veh_model), " -", " is a heli/blimp")
IF scene_veh_ground_z_diff < 5.0
OR (sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT OR sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT OR sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT)
vSceneVehDriveOffset = <<0,0,0>>
fSceneVehDriveSpeed = 0.0
PRINTLN("heli hovering (was calc'd)")
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, " ground for coord ", scene_veh_coord, " found at ", scene_veh_ground_z, ", calculate base speed [", scene_veh_ground_z_diff, "]", " - ", GET_MODEL_NAME_FOR_DEBUG(scene_veh_model), " -", " not a plane or a heli")
RETURN FALSE
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, " ground for coord ", scene_veh_coord, " found at ", scene_veh_ground_z, ", calculate base speed [", scene_veh_ground_z_diff, "]")
ENDIF
CONST_FLOAT iCONST_MAX_scene_veh_speed_height 50.0
CONST_FLOAT iCONST_MAX_scene_veh_speed_mult 5.0
FLOAT scene_veh_speed_mult = scene_veh_ground_z_diff
scene_veh_speed_mult /= iCONST_MAX_scene_veh_speed_height
IF (scene_veh_speed_mult < 0)
scene_veh_speed_mult = 0
ENDIF
IF (scene_veh_speed_mult > 1)
scene_veh_speed_mult = 1
ENDIF
scene_veh_speed_mult *= iCONST_MAX_scene_veh_speed_mult
vSceneVehDriveOffset = <<0,scene_veh_speed_mult,0>>
fSceneVehDriveSpeed = scene_veh_speed_mult * 5.0
CPRINTLN(DEBUG_SWITCH, " calculated base ", vSceneVehDriveOffset, ", ", fSceneVehDriveSpeed)
RETURN TRUE
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Get_Base_Speed_For_Drive_To_Coord ", vSceneVehDriveOffset, ", ", fSceneVehDriveSpeed, " OK")
IF NOT GET_GROUND_Z_FOR_3D_COORD(scene_veh_coord, scene_veh_ground_z)
//
ELSE
FLOAT scene_veh_ground_z_diff = (scene_veh_coord.z - scene_veh_ground_z)-1.0
CPRINTLN(DEBUG_SWITCH, " ground for coord ", scene_veh_coord, " found at ", scene_veh_ground_z, ", calculate base speed [", scene_veh_ground_z_diff, "]")
IF scene_veh_ground_z_diff > 1.0
MODEL_NAMES scene_veh_model = GET_ENTITY_MODEL(scene_veh)
IF IS_THIS_MODEL_A_HELI(scene_veh_model)
CPRINTLN(DEBUG_SWITCH, " is a heli")
IF scene_veh_ground_z_diff < 5.0
OR (sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT OR sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT OR sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT)
vSceneVehDriveOffset = <<0,0,0>>
fSceneVehDriveSpeed = 0.0
PRINTLN("heli hovering (was OK)")
RETURN FALSE
ENDIF
ELSE
//
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDIF
ENDFUNC
PROC ar_TASK_PUT_PED_DIRECTLY_INTO_COVER(PED_INDEX PedIndex, INT Time)
IF IS_PED_IN_COVER(PedIndex)
EXIT
ENDIF
VECTOR vCoverPos = sTimetableScene.sScene.vCreateCoords
FLOAT fCoverDir = sTimetableScene.sScene.fCreateHead
COVERPOINT_USAGE coverpointUsage = COVUSE_WALLTORIGHT
COVERPOINT_HEIGHT coverpointHeight = COVHEIGHT_HIGH
COVERPOINT_ARC coverpointArc = COVARC_180
BOOL CanPeekAndAim = FALSE
FLOAT BlendInDuration = NORMAL_BLEND_DURATION //0.0
bool ForceInitialFacingDirection = FALSE
bool bForceFaceLeft = FALSE
//fix for B*1565359, treat post Franklin 1 switches as special case and specify cover points for each switch
IF sTimetableScene.sScene.eScene = PR_SCENE_FTa_FRANKLIN1a
vCoverPos = <<798.5135, -2975.3286, 5.0208>>
fCoverDir = 355.0
coverpointUsage = COVUSE_WALLTORIGHT
coverpointHeight = COVHEIGHT_TOOHIGH
coverpointArc = COVARC_90
BlendInDuration = 0
ELIF sTimetableScene.sScene.eScene = PR_SCENE_FTa_FRANKLIN1c
vCoverPos = <<708.9384, -2916.5771, 5.0480>>
fCoverDir = 268.1254
coverpointUsage = COVUSE_WALLTORIGHT
coverpointHeight = COVHEIGHT_TOOHIGH
coverpointArc = COVARC_90
BlendInDuration = 0
ELIF sTimetableScene.sScene.eScene = PR_SCENE_FTa_FRANKLIN1d
vCoverPos = <<643.5130, -2917.2490, 5.1339>>
fCoverDir = 246.0
coverpointUsage = COVUSE_WALLTORIGHT
coverpointHeight = COVHEIGHT_TOOHIGH
coverpointArc = COVARC_90
BlendInDuration = 0
ELIF sTimetableScene.sScene.eScene = PR_SCENE_FTa_FRANKLIN1e
vCoverPos = <<595.2472, -2819.2312, 5.0558>>
fCoverDir = 140.7381
coverpointUsage = COVUSE_WALLTOLEFT
coverpointHeight = COVHEIGHT_TOOHIGH
coverpointArc = COVARC_90
BlendInDuration = 0
ENDIF
IF CoverIndex = NULL //NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(vCoverPos)
CoverIndex = ADD_COVER_POINT(vCoverPos, fCoverDir,
coverpointUsage, coverpointHeight, coverpointArc, TRUE)
ENDIF
TASK_PUT_PED_DIRECTLY_INTO_COVER(PedIndex, vCoverPos, Time, CanPeekAndAim, BlendInDuration, ForceInitialFacingDirection, bForceFaceLeft, CoverIndex)
// TASK_SEEK_COVER_FROM_POS(PedIndex, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PedIndex, <<0,-5,0>>), -1)
ENDPROC
FUNC BOOL IsShortRangeDefaultSwitch(PED_SCENE_STRUCT sScene)
IF sScene.eScene = PR_SCENE_M_DEFAULT
OR sScene.eScene = PR_SCENE_F_DEFAULT
OR sScene.eScene = PR_SCENE_T_DEFAULT
SWITCH GET_PLAYER_SWITCH_TYPE()
CASE SWITCH_TYPE_AUTO
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> IsShortRangeDefaultSwitch.", "SWITCH_TYPE_AUTO")
BREAK
CASE SWITCH_TYPE_LONG
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> IsShortRangeDefaultSwitch.", "SWITCH_TYPE_LONG")
BREAK
CASE SWITCH_TYPE_MEDIUM
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> IsShortRangeDefaultSwitch.", "SWITCH_TYPE_MEDIUM")
BREAK
CASE SWITCH_TYPE_SHORT
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> IsShortRangeDefaultSwitch.", "SWITCH_TYPE_SHORT")
RETURN TRUE
BREAK
ENDSWITCH
ENDIF
RETURN FALSE
ENDFUNC
// *******************************************************************************************
// CONTROL FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC BOOL Control_Player_Loop_Tasks()
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
SWITCH sTimetableScene.eLoopTask
CASE SCRIPT_TASK_PLAY_ANIM
TEXT_LABEL_63 tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneLoopProgress)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vCreateCoords)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fCreateHead)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_PLAY_ANIM \"", tPlayerSceneAnimDict, "\", \"", tPlayerSceneAnimLoop, "\" flag: ", ENUM_TO_INT(playerSceneLoopFlag))
IF IS_ENTITY_ATTACHED(PLAYER_PED_ID())
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerSceneLoopFlag, AF_OVERRIDE_PHYSICS)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sOverride_physics
sOverride_physics = "overriding physics while player is attached: "
sOverride_physics += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sOverride_physics)
SCRIPT_ASSERT(sOverride_physics)
#ENDIF
RETURN TRUE
ENDIF
ENDIF
TASK_PLAY_ANIM(PLAYER_PED_ID(), tPlayerSceneAnimDict, tPlayerSceneAnimLoop,
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,
playerSceneLoopFlag)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_SYNCHRONIZED_SCENE ", tPlayerSceneSyncAnimDict, "\", \"", tPlayerSceneSyncAnimLoop, "\"")
SetPedFromVehicleIntoSynchedScene(PLAYER_PED_ID(), scene_veh)
VECTOR vCreateRot
GET_PLAYER_PED_ROTATION_FOR_SCENE(sTimetableScene.sScene.eScene, fCreateHead, vCreateRot)
Safe_Create_Synchronized_Scene(g_iPlayer_Timetable_Loop_SynchSceneID, "Player_Loop", vCreateCoords, vCreateRot)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Loop_SynchSceneID, TRUE)
//BLEND_OUT_SYNCED_MOVEMENT_ANIMS(PLAYER_PED_ID())
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT,
SYNCED_SCENE_DONT_INTERRUPT)
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), TRUE)
IF NOT IS_ENTITY_DEAD(scene_veh)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehLoop
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncAnimVehLoop)
PLAY_SYNCHRONIZED_ENTITY_ANIM(scene_veh,
g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncAnimVehLoop, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN)
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject)
AND DOES_ENTITY_EXIST(player_prop)
IF IS_ENTITY_ATTACHED(player_prop)
DETACH_ENTITY(player_prop)
ENDIF
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop,
g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
CPRINTLN(DEBUG_SWITCH, "PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop, \"", tPlayerSceneSyncObject, "\", \"", tPlayerSceneSyncAnimDict, "\")")
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneSyncExtraObject)
AND DOES_ENTITY_EXIST(player_extra_prop)
IF IS_ENTITY_ATTACHED(player_extra_prop)
DETACH_ENTITY(player_extra_prop)
ENDIF
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_extra_prop,
g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncExtraObject, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
CPRINTLN(DEBUG_SWITCH, "PLAY_SYNCHRONIZED_ENTITY_ANIM(player_extra_prop, \"", tPlayerSceneSyncExtraObject, "\", \"", tPlayerSceneSyncAnimDict, "\")")
ENDIF
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
Get_Base_Speed_For_Drive_To_Coord(vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
FLOAT fSceneVeh_driveSpeedLoop
fSceneVeh_driveSpeedLoop = fSceneVeh_driveSpeed
IF (sTimetableScene.eOutTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
fSceneVeh_driveSpeedLoop *= 0.5
ENDIF
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD ", vSceneVeh_driveOffset, ", ", fSceneVeh_driveSpeedLoop)
IF DOES_ENTITY_EXIST(scene_veh)
IF IS_VEHICLE_DRIVEABLE(scene_veh)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Player_Loop.VEHICLE_DRIVE_TO_COORD")
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Player_Loop.VEHICLE_DRIVE_TO_COORD")
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
SEQUENCE_INDEX siseq
OPEN_SEQUENCE_TASK(siseq)
TASK_VEHICLE_DRIVE_TO_COORD(NULL, scene_veh, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset*1.5), fSceneVeh_driveSpeedLoop, DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS, 4.0, 30)
TASK_VEHICLE_DRIVE_WANDER(NULL, scene_veh, fSceneVeh_driveSpeedLoop, DRIVINGMODE_AVOIDCARS)
CLOSE_SEQUENCE_TASK(siseq)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), siseq)
CLEAR_SEQUENCE_TASK(siseq)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeedLoop)
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, " tasked...")
RETURN TRUE
ELIF IS_ENTITY_DEAD(scene_veh)
CPRINTLN(DEBUG_SWITCH, " scene_veh is dead???")
RETURN TRUE
ENDIF
ENDIF
IF IS_PED_ON_MOUNT(PLAYER_PED_ID())
PED_INDEX playersMount_ped
playersMount_ped = GET_MOUNT(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(playersMount_ped)
TASK_GO_STRAIGHT_TO_COORD(playersMount_ped,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(playersMount_ped, vSceneVeh_driveOffset),
fSceneVeh_driveSpeedLoop) //PEDMOVE_WALK)
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sDrive
sDrive = "something wrong Control_Player_Loop_Tasks: "
sDrive += "SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD //"
sDrive += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sDrive)
SCRIPT_ASSERT(sDrive)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING
#IF IS_DEBUG_BUILD
TEXT_LABEL_31 tlRecordingName
tlRecordingName = tRecordingName
IF (iRecordingNum < 100) tlRecordingName += "0" ENDIF
IF (iRecordingNum < 10) tlRecordingName += "0" ENDIF
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop VEHICLE_RECORDING", "(\"", tlRecordingName, "\") //", fRecordingStart)
#ENDIF
#IF NOT IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop VEHICLE_RECORDING")
#ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(tRecordingName)
AND (iRecordingNum > 0)
IF DOES_ENTITY_EXIST(scene_veh)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Player_Loop.VEHICLE_RECORDING")
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceSkinCharacterCloth, TRUE)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), scene_veh, VS_DRIVER)
SET_PLAYER_CLOTH_LOCK_COUNTER(iFramesToLockCloth)
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Player_Loop.VEHICLE_RECORDING")
START_PLAYBACK_RECORDED_VEHICLE(scene_veh, iRecordingNum, tRecordingName)
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(scene_veh, fRecordingStart)
#IF IS_DEBUG_BUILD
ar_DISPLAY_PLAYBACK_RECORDED_VEHICLE(scene_veh, RDM_WHOLELINE)
#ENDIF
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sRecording
sRecording = "something wrong Control_Player_Loop_Tasks: "
sRecording += "SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING //"
sRecording += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sRecording)
SCRIPT_ASSERT(sRecording)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_GO_STRAIGHT_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(),
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,5,0>>),
PEDMOVE_WALK)
IF (IS_ENTITY_IN_WATER(PLAYER_PED_ID()) OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_LAKE))
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_DIVING_SWIM)
ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD")
TASK_FOLLOW_NAV_MESH_TO_COORD(PLAYER_PED_ID(),
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,5,0>>),
PEDMOVE_WALK)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_WANDER_STANDARD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_WANDER_STANDARD")
TASK_WANDER_STANDARD(PLAYER_PED_ID())
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ENTER_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_ENTER_VEHICLE")
IF DOES_ENTITY_EXIST(scene_veh)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), scene_veh,
DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_WALK, ECF_RESUME_IF_INTERRUPTED)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_STAND_STILL
IF DOES_ENTITY_EXIST(scene_veh)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
IF (GET_PED_IN_VEHICLE_SEAT(scene_veh, VS_DRIVER) = PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_VEHICLE_MISSION_COORS_TARGET (default switch to a vehicle)")
VECTOR vGotoOffset
FLOAT fGotoSpeed
vGotoOffset = <<0,0.1,0>>
fGotoSpeed = 0.1
FLOAT fEntityHeight
fEntityHeight = GET_ENTITY_HEIGHT_ABOVE_GROUND(scene_veh)
vGotoOffset *= fEntityHeight
IF (vGotoOffset.y > 10)
vGotoOffset.y = 10
ENDIF
fGotoSpeed *= fEntityHeight
IF (fGotoSpeed > 10)
fGotoSpeed = 10
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "fEntityHeight: ", fEntityHeight, ", offset: ", vGotoOffset, ", speed: ", fGotoSpeed, " //", SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(scene_veh)))
#ENDIF
TASK_VEHICLE_MISSION_COORS_TARGET(PLAYER_PED_ID(), scene_veh,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vGotoOffset),
MISSION_GOTO, fGotoSpeed, DRIVINGMODE_PLOUGHTHROUGH,
-1, -1)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
//ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Player_Loop.STAND_STILL")
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fGotoSpeed)
RETURN TRUE
ENDIF
ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_STAND_STILL")
IF (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING1)
OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING2)
OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING3)
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_HEAVYSNIPER)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_HEAVYSNIPER, TRUE)
ELIF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE, TRUE)
ENDIF
ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_AIM_GUN_AT_ENTITY
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_AIM_GUN_AT_ENTITY")
IF NOT IS_PED_INJURED(scene_buddy)
IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL)
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 30)
ENDIF
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, TRUE)
// TASK_AIM_GUN_AT_ENTITY(PLAYER_PED_ID(), scene_buddy, -1)
// TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(), scene_buddy, 1000)
SET_PLAYER_SIMULATE_AIMING(PLAYER_ID(), TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER")
ar_TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(), -1)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_COWER
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_COWER")
TASK_COWER(PLAYER_PED_ID())
RETURN TRUE
BREAK
CASE SCRIPT_TASK_USE_MOBILE_PHONE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Loop SCRIPT_TASK_USE_MOBILE_PHONE")
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ANY FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eTask for Control_Player_Loop_Tasks: "
sInvalid += ENUM_TO_INT(sTimetableScene.eLoopTask)
sInvalid += " //"
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
#ENDIF
IF (sTimetableScene.eLoopTask <> SCRIPT_TASK_ANY)
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sUnknown
sUnknown = "unknown eTask for Control_Player_Loop_Tasks: "
sUnknown += ENUM_TO_INT(sTimetableScene.eLoopTask)
sUnknown += " //"
sUnknown += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sUnknown)
SCRIPT_ASSERT(sUnknown)
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Control_Buddy_Loop_Tasks()
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
SWITCH sTimetableScene.eBuddyLoopTask
CASE SCRIPT_TASK_PLAY_ANIM
TEXT_LABEL_63 tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut
ANIMATION_FLAGS buddyAnimLoopFlag, buddyAnimOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddyAnimLoopFlag, buddyAnimOutFlag)
SET_PED_COORDS_KEEP_VEHICLE(scene_buddy, vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset)
SET_ENTITY_HEADING(scene_buddy, fCreateHead+sTimetableScene.fSceneBuddyHeadOffset)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_PLAY_ANIM \"", tSceneBuddyAnimDict, "\", \"", tSceneBuddyAnimLoop, "\" flag: ", ENUM_TO_INT(buddyAnimLoopFlag))
TASK_PLAY_ANIM_ADVANCED(scene_buddy, tSceneBuddyAnimDict, tSceneBuddyAnimLoop,
vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset, <<0,0,fCreateHead+sTimetableScene.fSceneBuddyHeadOffset>>,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1,
buddyAnimLoopFlag)
SET_PED_KEEP_TASK(scene_buddy, TRUE)
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sAnim
sAnim = "something wrong Control_Buddy_Loop_Tasks: "
sAnim += "SCRIPT_TASK_PLAY_ANIM //"
sAnim += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sAnim)
SCRIPT_ASSERT(sAnim)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
TEXT_LABEL_63 tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut
ANIMATION_FLAGS buddySyncLoopFlag, buddySyncOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut,
buddySyncLoopFlag, buddySyncOutFlag)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_SYNCHRONIZED_SCENE ", tBuddySceneSyncAnimDict, "\", \"", tBuddySceneSyncAnimLoop, "\"")
SetPedFromVehicleIntoSynchedScene(scene_buddy, scene_veh)
VECTOR vCreateRot
GET_PLAYER_PED_ROTATION_FOR_SCENE(sTimetableScene.sScene.eScene, fCreateHead, vCreateRot)
Safe_Create_Synchronized_Scene(g_iPlayer_Timetable_Loop_SynchSceneID, "Buddy_Loop", vCreateCoords, vCreateRot)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Loop_SynchSceneID, TRUE)
//BLEND_OUT_SYNCED_MOVEMENT_ANIMS(scene_buddy)
TASK_SYNCHRONIZED_SCENE(scene_buddy, g_iPlayer_Timetable_Loop_SynchSceneID,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
SET_FORCE_FOOTSTEP_UPDATE(scene_buddy, TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD ", vSceneVeh_driveOffset, ", ", fSceneVeh_driveSpeed)
IF IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_VEHICLE_DRIVE_TO_COORD(scene_buddy, scene_veh,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset), fSceneVeh_driveSpeed,
DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS,
4.0, 30)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Buddy_Loop")
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed)
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sDrive
sDrive = "something wrong Control_Buddy_Loop_Tasks: "
sDrive += "SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD //"
sDrive += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sDrive)
SCRIPT_ASSERT(sDrive)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_GO_STRAIGHT_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<Buddy_timetable_scene> Buddy_Loop SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
TASK_GO_STRAIGHT_TO_COORD(scene_buddy,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_buddy, <<0,5,0>>),
PEDMOVE_WALK)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ENTER_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_ENTER_VEHICLE")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_ENTER_VEHICLE(scene_buddy, scene_veh,
DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_WALK, ECF_RESUME_IF_INTERRUPTED)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_STAND_STILL
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_STAND_STILL")
RETURN TRUE
BREAK
CASE SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED")
TASK_COMBAT_HATED_TARGETS_AROUND_PED(scene_buddy, 25.0)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_START_SCENARIO_AT_POSITION
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_START_SCENARIO_AT_POSITION")
TEXT_LABEL_63 tBuddySceneScenarioDict, tBuddySceneScenarioLoop, tBuddySceneScenarioOut
ANIMATION_FLAGS buddyScenarioLoopFlag, buddyScenarioOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tBuddySceneScenarioDict, tBuddySceneScenarioLoop, tBuddySceneScenarioOut,
buddyScenarioLoopFlag, buddyScenarioOutFlag)
INT iTimeToLeave
TASK_START_SCENARIO_AT_POSITION(scene_buddy, tBuddySceneScenarioLoop,
vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset,
fCreateHead+sTimetableScene.fSceneBuddyHeadOffset,
iTimeToLeave, TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_COWER
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Loop SCRIPT_TASK_COWER")
TASK_COWER(scene_buddy)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ANY FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eTask for Control_Buddy_Loop_Tasks: "
sInvalid += ENUM_TO_INT(sTimetableScene.eBuddyLoopTask)
sInvalid += " //"
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
#ENDIF
IF (sTimetableScene.eBuddyLoopTask <> SCRIPT_TASK_ANY)
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sUnknown
sUnknown = "unknown eTask for Control_Buddy_Loop_Tasks: "
sUnknown += ENUM_TO_INT(sTimetableScene.eBuddyLoopTask)
sUnknown += " //"
sUnknown += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sUnknown)
SCRIPT_ASSERT(sUnknown)
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Control_Player_Out_Tasks()
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Control_Player_Out_Tasks")
SWITCH sTimetableScene.eOutTask
CASE SCRIPT_TASK_PLAY_ANIM
TEXT_LABEL_63 tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
// enumPlayerSceneAnimProgress ePlayerSceneLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneLoopProgress)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_PLAY_ANIM \"", tPlayerSceneAnimDict, "\", \"", tPlayerSceneAnimOut, "\" flag:", ENUM_TO_INT(playerSceneOutFlag))
#ENDIF
IF IS_ENTITY_ATTACHED(PLAYER_PED_ID())
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerSceneOutFlag, AF_OVERRIDE_PHYSICS)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sOverride_physics
sOverride_physics = "overriding physics while player is attached: "
sOverride_physics += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sOverride_physics)
SCRIPT_ASSERT(sOverride_physics)
#ENDIF
RETURN TRUE
ENDIF
ENDIF
FLOAT fBlendOutDelta
fBlendOutDelta = WALK_BLEND_OUT
IF CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
fBlendOutDelta = FAST_BLEND_OUT
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerSceneOutFlag, AF_HOLD_LAST_FRAME)
SET_BITMASK_ENUM_AS_ENUM(playerSceneOutFlag, AF_HOLD_LAST_FRAME)
ENDIF
ENDIF
TASK_PLAY_ANIM(PLAYER_PED_ID(), tPlayerSceneAnimDict, tPlayerSceneAnimOut,
NORMAL_BLEND_IN, fBlendOutDelta, -1,
playerSceneOutFlag)
FLOAT paramStrength, amplitudeScalar
BOOL bCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bCountsForPubClubVisit)
Make_Ped_Drunk(PLAYER_PED_ID(), ROUND(iCONST_DRUNK_secDuration*1.5))
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ENDIF
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneProceduralCam)
IF DOES_CAM_EXIST(LoopCamIndex)
SET_CAM_ACTIVE(LoopCamIndex, FALSE)
DESTROY_CAM(LoopCamIndex)
ENDIF
// VECTOR vecCamEndPos, vecCamEndRot
// FLOAT vecCamEndFov
// IF SETUP_PLAYER_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov)
// ExitCamIndex = CREATE_CAM("DEFAULT_SPLINE_CAMERA",TRUE)
//
// ADD_CAM_SPLINE_NODE(ExitCamIndex,
// GET_FINAL_RENDERED_CAM_COORD(),
// GET_FINAL_RENDERED_CAM_ROT(),
// 2500)
// ADD_CAM_SPLINE_NODE(ExitCamIndex, vecCamEndPos+<<0,0,5>>, vecCamEndRot, 1500)
// ADD_CAM_SPLINE_NODE(ExitCamIndex, vecCamEndPos, vecCamEndRot, 1500)
// SET_CAM_FOV(ExitCamIndex, vecCamEndFov)
// SET_CAM_ACTIVE(ExitCamIndex,TRUE)
//
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// ENDIF
/* #IF IS_DEBUG_BUILD
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene,
vecCamEndPos, vecCamEndRot, vecCamEndFov)
OR (ARE_VECTORS_EQUAL(vecCamEndPos, <<0,0,0>>) AND ARE_VECTORS_EQUAL(vecCamEndRot, <<0,0,0>>))
VECTOR vecMocapFramePos, vecMocapFrameRot
FLOAT vecMocapFrameFov
IF DEBUG_GetPlayerSwitchEstablishingShot(sTimetableScene.sScene.tCreateRoom, tPlayerSceneEstabShotSuffix,
vecMocapFramePos, vecMocapFrameRot, vecMocapFrameFov)
//match end coord with establishing shot
ELSE
//match end coord with first frame of mocap
vecMocapFramePos = GET_CAM_COORD(ExitCamIndex)
vecMocapFrameRot = GET_CAM_ROT(ExitCamIndex)
vecMocapFrameFov = GET_CAM_FOV(ExitCamIndex)
ENDIF
CONST_FLOAT fPosTolerance 0.5
CONST_FLOAT fRotTolerance 0.5
CONST_FLOAT fFovTolerance 0.5
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
OR NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
OR NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
TEXT_LABEL_63 tCamDiff
tCamDiff = "vecCamEnd <> vecMocapFrame: "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
//
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", tCamDiff)
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndPos[", vecCamEndPos, "] <> vecMocapFramePos[", vecMocapFramePos, "]: ", VDIST(vecCamEndPos, vecMocapFramePos))
ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndRot[", vecCamEndRot, "] <> vecMocapFrameRot[", vecMocapFrameRot, "]: ", VDIST(vecCamEndRot, vecMocapFrameRot))
ENDIF
IF NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndFov[", vecCamEndFov, "] <> vecMocapFrameFov[", vecMocapFrameFov, "]: ", ABSF(vecCamEndFov - vecMocapFrameFov))
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("CASE ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndPos = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFramePos)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndRot = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFrameRot)
IF (vecMocapFrameFov <> 40.0)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndFov = ")
SAVE_FLOAT_TO_DEBUG_FILE(vecMocapFrameFov)
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK")
ELSE
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK")
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SCRIPT_ASSERT(tCamDiff)
ENDIF
ENDIF
FLOAT gpCamPitch, gameplayCamSmoothRate, gpCamHead
IF SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sTimetableScene.sScene.eScene,
gpCamPitch, gameplayCamSmoothRate, gpCamHead)
TEXT_LABEL_63 tCamDiff
tCamDiff = "remove RELATIVE_GAMEPLAY_CAM_PITCH for "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
SCRIPT_ASSERT(tCamDiff)
ENDIF
#ENDIF */
ENDIF
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sMissingAnim
sMissingAnim = "no anim in Control_Player_Out_Tasks: "
sMissingAnim += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sMissingAnim)
SCRIPT_ASSERT(sMissingAnim)
#ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_SYNCHRONIZED_SCENE ", tPlayerSceneSyncAnimDict, "\", \"", tPlayerSceneSyncAnimOut, "\"")
// IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
// SafeDetachSynchronizedScene(g_iPlayer_Timetable_Loop_SynchSceneID)
// g_iPlayer_Timetable_Loop_SynchSceneID = 0
// ENDIF
SetPedFromVehicleIntoSynchedScene(PLAYER_PED_ID(), scene_veh)
VECTOR vCreateRot
GET_PLAYER_PED_ROTATION_FOR_SCENE(sTimetableScene.sScene.eScene, fCreateHead, vCreateRot)
Safe_Create_Synchronized_Scene(g_iPlayer_Timetable_Exit_SynchSceneID, "Player_Out", vCreateCoords, vCreateRot)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Exit_SynchSceneID, FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(g_iPlayer_Timetable_Exit_SynchSceneID, FALSE)
//BLEND_OUT_SYNCED_MOVEMENT_ANIMS(PLAYER_PED_ID())
FLOAT fBlendin, fBlendOut
SYNCED_SCENE_PLAYBACK_FLAGS scpf_Flags
RAGDOLL_BLOCKING_FLAGS ragdollFlags
IK_CONTROL_FLAGS ikFlags
P_GET_PLAYER_SYNCHRONIZED_SCENE_DATA(sTimetableScene.sScene.eScene, scpf_Flags, fBlendin, fBlendOut, ragdollFlags, ikFlags)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimOut,
fBlendin, fBlendOut, scpf_Flags, ragdollFlags, fBlendin, ikFlags)
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), TRUE)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
TEXT_LABEL_63 tFacialClip
IF GET_TASK_FACIAL_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene, tFacialClip)
CPRINTLN(DEBUG_SWITCH, " TASK_PLAY_FACIAL_ANIM(PLAYER_PED_ID(), \"", tPlayerSceneSyncAnimDict, "\", \"", tFacialClip, "\")")
TASK_PLAY_ANIM(PLAYER_PED_ID(), tPlayerSceneSyncAnimDict, tFacialClip,
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
bHave_Played_Switch_Scene_Speech_Facial = TRUE
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix)
IF DOES_CAM_EXIST(LoopCamIndex)
SET_CAM_ACTIVE(LoopCamIndex, FALSE)
DESTROY_CAM(LoopCamIndex)
ENDIF
ExitCamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
PLAY_SYNCHRONIZED_CAM_ANIM(ExitCamIndex,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncExitCam, tPlayerSceneSyncAnimDict)
#IF IS_DEBUG_BUILD
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene,
vecCamEndPos, vecCamEndRot, vecCamEndFov)
OR (ARE_VECTORS_EQUAL(vecCamEndPos, <<0,0,0>>) AND ARE_VECTORS_EQUAL(vecCamEndRot, <<0,0,0>>))
VECTOR vecMocapFramePos, vecMocapFrameRot
FLOAT vecMocapFrameFov
IF DEBUG_GetPlayerSwitchEstablishingShot(sTimetableScene.sScene.tCreateRoom, tPlayerSceneEstabShotSuffix,
vecMocapFramePos, vecMocapFrameRot, vecMocapFrameFov)
//match end coord with establishing shot
ELSE
//match end coord with first frame of mocap
vecMocapFramePos = GET_CAM_COORD(ExitCamIndex)
vecMocapFrameRot = GET_CAM_ROT(ExitCamIndex)
vecMocapFrameFov = GET_CAM_FOV(ExitCamIndex)
ENDIF
#IF USE_TU_CHANGES
IF (sTimetableScene.sScene.eScene = PR_SCENE_M7_EMPLOYEECONVO)
vecMocapFramePos.z -= 30
ENDIF
#ENDIF
CONST_FLOAT fPosTolerance 0.5
CONST_FLOAT fRotTolerance 0.5
CONST_FLOAT fFovTolerance 0.5
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
OR NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
OR NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
TEXT_LABEL_63 tCamDiff
tCamDiff = "vecCamEnd <> vecMocapFrame: "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
//
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", tCamDiff)
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndPos[", vecCamEndPos.x, ", ", vecCamEndPos.y, ", ", vecCamEndPos.z, "] <> vecMocapFramePos[", vecMocapFramePos.x, ", ", vecMocapFramePos.y, ", ", vecMocapFramePos.z, "]: ", VDIST(vecCamEndPos, vecMocapFramePos))
ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndRot[", vecCamEndRot.x, ", ", vecCamEndRot.y, ", ", vecCamEndRot.z, "] <> vecMocapFrameRot[", vecMocapFrameRot.x, ", ", vecMocapFrameRot.y, ", ", vecMocapFrameRot.z, "]: ", VDIST(vecCamEndRot, vecMocapFrameRot))
ENDIF
IF NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndFov[", vecCamEndFov, "] <> vecMocapFrameFov[", vecMocapFrameFov, "]: ", ABSF(vecCamEndFov - vecMocapFrameFov))
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("CASE ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndPos = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFramePos)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndRot = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFrameRot)
IF (vecMocapFrameFov <> 40.0)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndFov = ")
SAVE_FLOAT_TO_DEBUG_FILE(vecMocapFrameFov)
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK")
ELSE
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK")
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SCRIPT_ASSERT(tCamDiff)
ENDIF
ENDIF
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
FLOAT gpCamPitch, gameplayCamSmoothRate, gpCamHead
IF SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sTimetableScene.sScene.eScene,
gpCamPitch, gameplayCamSmoothRate, gpCamHead)
FLOAT paramStrength, amplitudeScalar
BOOL bBlankCountsForPubClubVisit
IF NOT SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bBlankCountsForPubClubVisit)
AND (sTimetableScene.sScene.eScene <> PR_SCENE_F_MD_KUSH_DOC) AND (sTimetableScene.sScene.eScene <> PR_SCENE_F_KUSH_DOC_a)
AND (sTimetableScene.sScene.eScene <> PR_SCENE_M2_CARSLEEP_a) AND (sTimetableScene.sScene.eScene <> PR_SCENE_M2_CARSLEEP_b) AND (sTimetableScene.sScene.eScene <> PR_SCENE_M6_CARSLEEP)
TEXT_LABEL_63 tCamDiff
tCamDiff = "remove RELATIVE_GAMEPLAY_CAM_PITCH for "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
SCRIPT_ASSERT(tCamDiff)
ENDIF
ELSE
FLOAT paramStrength, amplitudeScalar
BOOL bBlankCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bBlankCountsForPubClubVisit)
TEXT_LABEL_63 tCamDiff
tCamDiff = "add RELATIVE_GAMEPLAY_CAM_PITCH for "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
SCRIPT_ASSERT(tCamDiff)
ENDIF
ENDIF
ENDIF
#ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
INT iFlags
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject, iFlags)
IF IS_ENTITY_ATTACHED(player_prop)
DETACH_ENTITY(player_prop)
ENDIF
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
fBlendin, fBlendOut, iFlags)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneSyncExtraObject)
IF IS_ENTITY_ATTACHED(player_extra_prop)
DETACH_ENTITY(player_extra_prop)
ENDIF
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_extra_prop,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncExtraObject, tPlayerSceneSyncAnimDict,
fBlendin, fBlendOut, iFlags)
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerDoorSyncAnimL, tPlayerDoorSyncAnimR
IF GET_SYNCHRONIZED_DOOR_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerDoorSyncAnimL, tPlayerDoorSyncAnimR)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerDoorSyncAnimL)
IF DOES_ENTITY_EXIST(player_door_l)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_door_l,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerDoorSyncAnimL, tPlayerSceneSyncAnimDict,
fBlendin, fBlendOut)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_door_l, sTimetableScene.sScene.eScene)
ENDIF
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerDoorSyncAnimR)
IF DOES_ENTITY_EXIST(player_door_r)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_door_r,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerDoorSyncAnimR, tPlayerSceneSyncAnimDict,
fBlendin, fBlendOut)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(player_door_r, sTimetableScene.sScene.eScene)
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 entitySetName
BOOL bActivateSet
IF SETUP_INTERIOR_ENTITY_SET_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, entitySetName, bActivateSet)
ENDIF
IF SETUP_FORCE_STEP_TYPE_FOR_SCENE(sTimetableScene.sScene.eScene)
SET_FORCE_STEP_TYPE(PLAYER_PED_ID(), TRUE, 20, 0)
ENDIF
TEXT_LABEL TCmod
IF SETUP_TIMECYCLE_MOD_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, TCmod)
SET_TIMECYCLE_MODIFIER(TCmod)
ENDIF
// TEXT_LABEL_63 fxName
// IF SETUP_PTFX_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, fxName)
// /* player_ptfx =*/ START_PARTICLE_FX_NON_LOOPED_ON_ENTITY(fxName,
// player_prop,
// <<0,1,0>>, <<0,0,0>>)
// ENDIF
// TEXT_LABEL_63 tBankName, tBankBName
// tBankName = ""
// tBankBName = ""
// IF SETUP_AUDIO_BANK_FOR_SCENE(sTimetableScene.sScene.eScene, tBankName, tBankBName)
// PLAY_SOUND_FRONTEND(-1,tBankName)
// ENDIF
TEXT_LABEL_63 tAudioEvent
INT iStartOffsetMs
tAudioEvent = ""
iStartOffsetMs = 0
IF SETUP_SYNCH_AUDIO_EVENT_FOR_SCENE(sTimetableScene.sScene.eScene, tAudioEvent, iStartOffsetMs)
PLAY_SYNCHRONIZED_AUDIO_EVENT(g_iPlayer_Timetable_Exit_SynchSceneID)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "PLAY_SYNCHRONIZED_AUDIO_EVENT ", tAudioEvent)
#ENDIF
ENDIF
TEXT_LABEL_63 tSceneName
tSceneName = ""
IF SETUP_AUDIO_SCENE_FOR_SCENE(sTimetableScene.sScene.eScene, tSceneName)
START_AUDIO_SCENE(tSceneName)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "START_AUDIO_SCENE ", tSceneName)
#ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(scene_veh)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehExit
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncAnimVehExit)
FLOAT BlendInDelta // BlendInDelta - The speed at which the synchronized anim should blend in (e.g. NORMAL_BLEND_IN - see commands_task.sch)
FLOAT BlendOutDelta // BlendOutDelta - The speed at which the synchronized anim should blend out. (e.g. NORMAL_BLEND_OUT - see commands_task.sch)
INT Flags // Flags - The synced scene flags to use (see commands_task.sch - SYNCED_SCENE_PLAYBACK_FLAGS)
FLOAT MoverBlendInDelta // MoverBlendInDelta - the speed at which the mover blends in to the scene. This can be usefull for seamless entry onto a synced scene. (e.g. NORMAL_BLEND_IN - see commands_task.sch)
BlendInDelta = NORMAL_BLEND_IN //
BlendOutDelta = NORMAL_BLEND_OUT //8.0
Flags = ENUM_TO_INT(SYNCED_SCENE_NONE) //0
MoverBlendInDelta = NORMAL_BLEND_IN //1000.0
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
STOP_PLAYBACK_RECORDED_VEHICLE(scene_veh)
CPRINTLN(DEBUG_SWITCH, "Player_Out.synch scene.STOP_PLAYBACK_RECORDED_VEHICLE(scene_veh)")
ENDIF
PLAY_SYNCHRONIZED_ENTITY_ANIM(scene_veh,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncAnimVehExit, tPlayerSceneSyncAnimDict,
BlendInDelta, BlendOutDelta, Flags, MoverBlendInDelta)
ENDIF
ENDIF
FLOAT paramStrength, amplitudeScalar
BOOL bCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bCountsForPubClubVisit)
Make_Ped_Drunk(PLAYER_PED_ID(), ROUND(iCONST_DRUNK_secDuration*1.5))
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ENDIF
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sSync
sSync = "no syncanim in Control_Player_Out_Tasks: "
sSync += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sSync)
SCRIPT_ASSERT(sSync)
#ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
Get_Base_Speed_For_Drive_To_Coord(vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD ", vSceneVeh_driveOffset, ", ", fSceneVeh_driveSpeed)
IF DOES_ENTITY_EXIST(scene_veh)
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF IsShortRangeDefaultSwitch(sTimetableScene.sScene)
CPRINTLN(DEBUG_SWITCH, " bypassing...")
RETURN TRUE
ENDIF
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Player_Out.VEHICLE_DRIVE_TO_COORD")
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
PED_VEH_DATA_STRUCT sVehData
VECTOR vVehCoordOffset
FLOAT fVehHeadOffset
vVehCoordOffset = <<0,0,0>>
fVehHeadOffset = 0
FLOAT fSceneVehDriveSpeed
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene,
sVehData, vVehCoordOffset, fVehHeadOffset,
vSceneVeh_driveOffset, fSceneVehDriveSpeed)
SET_ENTITY_COORDS(scene_veh, sTimetableScene.sScene.vCreateCoords+vVehCoordOffset)
SET_ENTITY_HEADING(scene_veh, sTimetableScene.sScene.fCreateHead+fVehHeadOffset)
ar_SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
ENDIF
IF (fSceneVeh_driveSpeed <> GET_ENTITY_SPEED(scene_veh))
AND fSceneVeh_driveSpeed < 0.1
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
OR IS_THIS_MODEL_A_PLANE_OR_BLIMP(GET_ENTITY_MODEL(scene_veh))
fSceneVeh_driveSpeed = GET_ENTITY_SPEED(scene_veh)
ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, "Control_Player_Out_Tasks(fSceneVeh_driveSpeed:", fSceneVeh_driveSpeed, ")")
TASK_VEHICLE_DRIVE_TO_COORD(PLAYER_PED_ID(), scene_veh,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset), fSceneVeh_driveSpeed,
DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS,
4.0, 30)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed)
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, " tasking and destroying all cams...")
DESTROY_ALL_CAMS(TRUE)
RETURN TRUE
ELIF IS_ENTITY_DEAD(scene_veh)
CPRINTLN(DEBUG_SWITCH, " scene_veh is dead???")
RETURN TRUE
ENDIF
ENDIF
IF IS_PED_ON_MOUNT(PLAYER_PED_ID())
PED_INDEX playersMount_ped
playersMount_ped = GET_MOUNT(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(playersMount_ped)
TASK_GO_STRAIGHT_TO_COORD(playersMount_ped,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(playersMount_ped, vSceneVeh_driveOffset),
fSceneVeh_driveSpeed) //PEDMOVE_WALK)
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sDrive
sDrive = "something wrong Control_Player_Out_Tasks: "
sDrive += "SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD //"
sDrive += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sDrive)
SCRIPT_ASSERT(sDrive)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING
#IF IS_DEBUG_BUILD
TEXT_LABEL_31 tlRecordingName
tlRecordingName = tRecordingName
IF (iRecordingNum < 100) tlRecordingName += "0" ENDIF
IF (iRecordingNum < 10) tlRecordingName += "0" ENDIF
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out VEHICLE_RECORDING", "(\"", tlRecordingName, "\") //", fRecordingStart)
#ENDIF
#IF NOT IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out VEHICLE_RECORDING")
#ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(tRecordingName)
AND (iRecordingNum > 0)
IF DOES_ENTITY_EXIST(scene_veh)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Player_Out.VEHICLE_RECORDING")
START_PLAYBACK_RECORDED_VEHICLE(scene_veh, iRecordingNum, tRecordingName)
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(scene_veh, fRecordingStart)
ENDIF
RETURN TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sRecording
sRecording = "something wrong Control_Player_Out_Tasks: "
sRecording += "VEHICLE_RECORDING //"
sRecording += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sRecording)
SCRIPT_ASSERT(sRecording)
#ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_GO_STRAIGHT_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(),
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,5,0>>),
PEDMOVE_WALK)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD
VECTOR vWalkOffset
vWalkOffset = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,5,0>>)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD[", vWalkOffset, "]")
TASK_FOLLOW_NAV_MESH_TO_COORD(PLAYER_PED_ID(), vWalkOffset, PEDMOVE_WALK)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_WANDER_STANDARD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_WANDER_STANDARD[", "]")
IF (GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_WANDER_STANDARD) != PERFORMING_TASK)
TASK_WANDER_STANDARD(PLAYER_PED_ID())
ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ENTER_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_ENTER_VEHICLE")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), scene_veh,
DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_WALK, ECF_RESUME_IF_INTERRUPTED)
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_LEAVE_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_LEAVE_VEHICLE")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), scene_veh)
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_STAND_STILL
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_STAND_STILL")
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> SCRIPT_TASK_STAND_STILL clears SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
CLEAR_PED_TASKS(PLAYER_PED_ID())
IF (IS_ENTITY_IN_WATER(PLAYER_PED_ID()) OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_LAKE))
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "Player_Out - water")
// FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_DIVING_IDLE)
ENDIF
ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> SCRIPT_TASK_STAND_STILL clears SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD")
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING1)
OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING2)
OR (sTimetableScene.sScene.eScene = PR_SCENE_T6_HUNTING3)
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_HEAVYSNIPER)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_HEAVYSNIPER, TRUE)
ELIF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE, TRUE)
ENDIF
ENDIF
// IF IS_PLAYER_SWITCH_IN_PROGRESS()
// AND GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_LONG
// IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
// IF bDisableWhileWaiting
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ENDIF
// ENDIF
// ELSE
// IF GET_FOLLOW_VEHICLE_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
// IF bDisableWhileWaiting
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ENDIF
// ENDIF
// ENDIF
// ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ACHIEVE_HEADING
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_ACHIEVE_HEADING")
TASK_ACHIEVE_HEADING(PLAYER_PED_ID(), sTimetableScene.sScene.fCreateHead+180.0)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER")
ar_TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(), -1)
bDisableWhileWaiting = FALSE
RETURN TRUE
BREAK
CASE SCRIPT_TASK_AIM_GUN_AT_ENTITY
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_AIM_GUN_AT_ENTITY")
IF NOT IS_PED_INJURED(scene_buddy)
IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL)
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 30)
ENDIF
// SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, TRUE)
// TASK_AIM_GUN_AT_ENTITY(PLAYER_PED_ID(), scene_buddy, -1)
// SET_PLAYER_SIMULATE_AIMING(PLAYER_ID(), TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_USE_MOBILE_PHONE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Player_Out SCRIPT_TASK_USE_MOBILE_PHONE")
bWaitingForPlayerLieInInput = TRUE
// TASK_USE_MOBILE_PHONE_TIMED(PLAYER_PED_ID(), 28000)
// ADD_FOLLOW_NAVMESH_TO_PHONE_TASK(PLAYER_PED_ID(),
// GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,5,0>>),
// PEDMOVE_WALK)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ANY FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eTask for Control_Player_Out_Tasks: "
sInvalid += ENUM_TO_INT(sTimetableScene.eOutTask)
sInvalid += " //"
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
#ENDIF
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_ANY)
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sUnknown
sUnknown = "unknown eTask for Control_Player_Out_Tasks: "
sUnknown += ENUM_TO_INT(sTimetableScene.eOutTask)
sUnknown += " //"
sUnknown += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sUnknown)
SCRIPT_ASSERT(sUnknown)
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Control_Buddy_Out_Tasks()
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
SWITCH sTimetableScene.eBuddyOutTask
CASE SCRIPT_TASK_PLAY_ANIM
TEXT_LABEL_63 tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut
ANIMATION_FLAGS buddySceneLoopFlag, buddySceneOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddySceneLoopFlag, buddySceneOutFlag)
// SET_PED_COORDS_KEEP_VEHICLE(scene_buddy, vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset)
// SET_ENTITY_HEADING(scene_buddy, fCreateHead+sTimetableScene.fSceneBuddyHeadOffset)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_PLAY_ANIM \"", tSceneBuddyAnimDict, "\", \"", tSceneBuddyAnimOut, "\" flag: ", ENUM_TO_INT(buddySceneOutFlag))
IF (sTimetableScene.sScene.eScene = PR_SCENE_M_VWOODPARK_a)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M_VWOODPARK_b)
TASK_LOOK_AT_ENTITY(scene_buddy, PLAYER_PED_ID(), -1)
ENDIF
TASK_PLAY_ANIM(scene_buddy, tSceneBuddyAnimDict, tSceneBuddyAnimOut,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1,
buddySceneOutFlag)
SET_PED_KEEP_TASK(scene_buddy, TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
TEXT_LABEL_63 tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut
ANIMATION_FLAGS buddySyncLoopFlag, buddySyncOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut,
buddySyncLoopFlag, buddySyncOutFlag)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_SYNCHRONIZED_SCENE \"", tBuddySceneSyncAnimDict, "\", \"", tBuddySceneSyncAnimOut, "\"")
SetPedFromVehicleIntoSynchedScene(PLAYER_PED_ID(), scene_veh)
VECTOR vCreateRot
GET_PLAYER_PED_ROTATION_FOR_SCENE(sTimetableScene.sScene.eScene, fCreateHead, vCreateRot)
Safe_Create_Synchronized_Scene(g_iPlayer_Timetable_Exit_SynchSceneID, "Buddy_Out", vCreateCoords, vCreateRot)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Exit_SynchSceneID, FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(g_iPlayer_Timetable_Exit_SynchSceneID, FALSE)
SYNCED_SCENE_PLAYBACK_FLAGS scpf_Flags
IK_CONTROL_FLAGS ikFlags
F_GET_BUDDY_SYNCHRONIZED_SCENE_FLAG(sTimetableScene.sScene.eScene, scpf_Flags, ikFlags)
TASK_SYNCHRONIZED_SCENE(scene_buddy, g_iPlayer_Timetable_Exit_SynchSceneID,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimOut,
NORMAL_BLEND_IN, WALK_BLEND_OUT,
scpf_Flags, DEFAULT, DEFAULT, ikFlags)
SET_FORCE_FOOTSTEP_UPDATE(scene_buddy, TRUE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD ", vSceneVeh_driveOffset, ", ", fSceneVeh_driveSpeed)
IF IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_VEHICLE_DRIVE_TO_COORD(scene_buddy, scene_veh,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset), fSceneVeh_driveSpeed,
DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS,
4.0, 30)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Buddy_Out")
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, TRUE)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed)
IF (fSceneVeh_driveSpeed > 5.0)
IF IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
IF GET_LANDING_GEAR_STATE(scene_veh) != LGS_LOCKED_UP
OR GET_LANDING_GEAR_STATE(scene_veh) != LGS_RETRACTING
CONTROL_LANDING_GEAR(scene_veh, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(scene_veh))
SET_HELI_BLADES_FULL_SPEED(scene_veh)
ENDIF
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_GO_STRAIGHT_TO_COORD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> buddy_Out SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
VECTOR vWalktoOffset
vWalktoOffset = <<0,10,0>>
IF sTimetableScene.sScene.eScene = PR_SCENE_T_CR_WAKEBEACH
vWalktoOffset = <<0,15,0>>
ENDIF
IF sTimetableScene.sScene.eScene = PR_SCENE_T_CN_WAKEBARN
vWalktoOffset = <<-7.5,5,0>>
ENDIF
SEQUENCE_INDEX siseq
OPEN_SEQUENCE_TASK(siseq)
TASK_GO_STRAIGHT_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_buddy, vWalktoOffset), PEDMOVE_WALK)
TASK_WANDER_IN_AREA(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_buddy, vWalktoOffset*2.5), 10)
CLOSE_SEQUENCE_TASK(siseq)
TASK_PERFORM_SEQUENCE(scene_buddy, siseq)
CLEAR_SEQUENCE_TASK(siseq)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ENTER_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_ENTER_VEHICLE")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_ENTER_VEHICLE(scene_buddy, scene_veh,
DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_WALK, ECF_RESUME_IF_INTERRUPTED)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_LEAVE_VEHICLE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_LEAVE_VEHICLE")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
TASK_LEAVE_VEHICLE(scene_buddy, scene_veh)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_STAND_STILL
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_STAND_STILL")
RETURN TRUE
BREAK
CASE SCRIPT_TASK_WANDER_STANDARD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_WANDER_STANDARD")
TASK_WANDER_STANDARD(scene_buddy)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED")
TASK_COMBAT_HATED_TARGETS_AROUND_PED(scene_buddy, 25.0)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_START_SCENARIO_AT_POSITION
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_START_SCENARIO_AT_POSITION")
TEXT_LABEL_63 tBuddySceneScenarioDict, tBuddySceneScenarioLoop, tBuddySceneScenarioOut
ANIMATION_FLAGS buddyScenarioLoopFlag, buddyScenarioOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tBuddySceneScenarioDict, tBuddySceneScenarioLoop, tBuddySceneScenarioOut,
buddyScenarioLoopFlag, buddyScenarioOutFlag)
INT iTimeToLeave
TASK_START_SCENARIO_AT_POSITION(scene_buddy, tBuddySceneScenarioOut,
vCreateCoords+sTimetableScene.vSceneBuddyCoordOffset,
fCreateHead+sTimetableScene.fSceneBuddyHeadOffset,
iTimeToLeave, FALSE)
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_HANDS_UP
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Buddy_Out SCRIPT_TASK_HANDS_UP")
TASK_HANDS_UP(scene_buddy, -1, PLAYER_PED_ID())
SET_PED_KEEP_TASK(scene_buddy, TRUE)
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ANY FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eTask for Control_Buddy_Out_Tasks: "
sInvalid += ENUM_TO_INT(sTimetableScene.eBuddyOutTask)
sInvalid += " //"
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
#ENDIF
IF (sTimetableScene.eBuddyOutTask <> SCRIPT_TASK_ANY)
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sUnknown
sUnknown = "unknown eTask for Control_Buddy_Out_Tasks: "
sUnknown += ENUM_TO_INT(sTimetableScene.eBuddyOutTask)
sUnknown += " //"
sUnknown += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sUnknown)
SCRIPT_ASSERT(sUnknown)
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Play_Buddy_PostOut_SynchScene(PED_REQUEST_SCENE_ENUM ePedScene, PED_INDEX PedIndex,
INT &iPostOutSceneID, STRING sPostOutAnimPostOut = NULL)
TEXT_LABEL_63 tPostOutAnimDict, tPostOutAnimLoop, tPostOutAnimOut
ANIMATION_FLAGS PostOutLoopFlag, PostOutOutFlag
VECTOR vFloydSceneCoord
FLOAT fFloydSceneRot
TEXT_LABEL_31 sFloydRoom
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(ePedScene, tPostOutAnimDict, tPostOutAnimLoop, tPostOutAnimOut,
PostOutLoopFlag, PostOutOutFlag)
AND GET_PLAYER_PED_POSITION_FOR_SCENE(ePedScene, vFloydSceneCoord, fFloydSceneRot, sFloydRoom)
TEXT_LABEL_63 tPostOutAnimPostOut = sPostOutAnimPostOut
IF NOT IS_STRING_NULL_OR_EMPTY(sPostOutAnimPostOut)
tPostOutAnimPostOut = sPostOutAnimPostOut
ELSE
tPostOutAnimPostOut = tPostOutAnimLoop
ENDIF
REQUEST_ANIM_DICT(tPostOutAnimDict)
WHILE NOT HAS_ANIM_DICT_LOADED(tPostOutAnimDict)
WAIT(0)
DisableWhileWaiting("Play_Buddy_PostOut_SynchScene")
ENDWHILE
IF NOT IS_PED_INJURED(PedIndex)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> Play_Buddy_PostOut_SynchScene \"", tPostOutAnimDict, "\", \"", tPostOutAnimPostOut, "\" ", Get_String_From_FamilyEvent(g_eSceneBuddyEvents))
#ENDIF
SYNCED_SCENE_PLAYBACK_FLAGS scpf_Flags
IK_CONTROL_FLAGS ikFlags
F_GET_BUDDY_SYNCHRONIZED_SCENE_FLAG(ePedScene, scpf_Flags, ikFlags)
iPostOutSceneID = CREATE_SYNCHRONIZED_SCENE(vFloydSceneCoord, <<0.0, 0.0, fFloydSceneRot>>)
TASK_SYNCHRONIZED_SCENE(PedIndex, iPostOutSceneID, tPostOutAnimDict, tPostOutAnimPostOut,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
scpf_Flags, DEFAULT, INSTANT_BLEND_IN, ikFlags)
SET_SYNCHRONIZED_SCENE_LOOPED(iPostOutSceneID, TRUE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iPostOutSceneID, FALSE)
SET_SYNCHRONIZED_SCENE_PHASE(iPostOutSceneID, 0.0)
SET_PED_KEEP_TASK(PedIndex, TRUE)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Control_Buddy_PostOut_Tasks()
// TEXT_LABEL_63 tPostOutAnimDict, tPostOutAnimLoop, tPostOutAnimOut
// ANIMATION_FLAGS PostOutLoopFlag, PostOutOutFlag
INT iPostOutSceneID
SWITCH sTimetableScene.sScene.eScene
CASE PR_SCENE_Ma_FAMILY1
IF NOT IS_PED_INJURED(scene_buddy)
vSceneVeh_driveOffset = <<0,5,0>>
fSceneVeh_driveSpeed = 10.0
SEQUENCE_INDEX siseq
OPEN_SEQUENCE_TASK(siseq)
TASK_VEHICLE_DRIVE_TO_COORD(NULL, scene_veh, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset*1.5), fSceneVeh_driveSpeed, DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS, 4.0, 30)
TASK_VEHICLE_DRIVE_WANDER(NULL, scene_veh, fSceneVeh_driveSpeed, DRIVINGMODE_AVOIDCARS)
CLOSE_SEQUENCE_TASK(siseq)
TASK_PERFORM_SEQUENCE(scene_buddy, siseq)
CLEAR_SEQUENCE_TASK(siseq)
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_F_CLUB
WAIT(0)
IF NOT IS_PED_INJURED(scene_buddy)
FORCE_PED_MOTION_STATE(scene_buddy, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(scene_buddy) //1422634
SEQUENCE_INDEX siseq
OPEN_SEQUENCE_TASK(siseq)
TASK_GO_STRAIGHT_TO_COORD(NULL, <<-510.3902, -21.7973, 45.6141>>, PEDMOVE_WALK)
TASK_WANDER_IN_AREA(NULL, <<-510.3902, -21.7973, 45.6141>>, 5)
CLOSE_SEQUENCE_TASK(siseq)
TASK_PERFORM_SEQUENCE(scene_buddy, siseq)
CLEAR_SEQUENCE_TASK(siseq)
WAIT(0)
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M2_BEDROOM
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID,
"BED_LOOP_02_Amanda")
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M2_SAVEHOUSE0_b
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy,
iPostOutSceneID)
RETURN TRUE
ENDIF
BREAK
// CASE PR_SCENE_M7_LOUNGECHAIRS
// IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy,
// iPostOutSceneID)
// RETURN TRUE
// ENDIF
// BREAK
CASE PR_SCENE_M7_RESTAURANT
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop, iPostOutSceneID,
tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS),
INSTANT_BLEND_IN)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_extra_prop, iPostOutSceneID,
tPlayerSceneSyncExtraObject, tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS),
INSTANT_BLEND_IN)
SET_ENTITY_COLLISION(player_extra_prop, FALSE)
ENDIF
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M6_RONBORING
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject)
// PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop, iPostOutSceneID,
// tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
// INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
// ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_LOOP_WITHIN_SCENE),
// NORMAL_BLEND_IN)
// SET_ENTITY_COLLISION(player_prop, FALSE)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_extra_prop, iPostOutSceneID,
tPlayerSceneSyncExtraObject, tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_LOOP_WITHIN_SCENE),
INSTANT_BLEND_IN)
SET_ENTITY_COLLISION(player_extra_prop, FALSE)
ENDIF
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M7_GETSREADY
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID)
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M7_ROUNDTABLE
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID,
"AROUND_THE_TABLE_SELFISH_EXIT_LOOP_Jimmy")
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M2_KIDS_TV
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID)
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_T_FLOYDCRYING_A
CASE PR_SCENE_T_FLOYDCRYING_E0
CASE PR_SCENE_T_FLOYDCRYING_E1
CASE PR_SCENE_T_FLOYDCRYING_E2
CASE PR_SCENE_T_FLOYDCRYING_E3
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID,
"Console_end_LOOP_FLOYD")
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_T_FLOYD_DOLL
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID,
"bear_floyds_face_smell_exit_loop_floyd")
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop, iPostOutSceneID,
"BEAR_FLOYDS_FACE_SMELL_EXIT_LOOP_Doll", tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_LOOP_WITHIN_SCENE),
INSTANT_BLEND_IN)
// PLAY_ENTITY_ANIM(player_prop,
// "BEAR_FLOYDS_FACE_SMELL_EXIT_LOOP_Doll", tPlayerSceneSyncAnimDict,
// INSTANT_BLEND_IN, TRUE, TRUE)
SET_ENTITY_COLLISION(player_prop, FALSE)
ENDIF
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_T_FLOYDPINEAPPLE
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID,
"Pineapple_EXIT_LOOP_FLOYD")
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_A2 FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B2
IF Play_Buddy_PostOut_SynchScene(sTimetableScene.sScene.eScene, scene_buddy, iPostOutSceneID)
RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M7_FAKEYOGA
IF NOT IS_PED_INJURED(scene_buddy)
RETURN PRIVATE_Update_Family_Find_Event(scene_buddy,
FM_MICHAEL_WIFE, << -812.0607, 179.5117, 71.1531 >>, DEFAULT, FALSE)
ENDIF
BREAK
CASE PR_SCENE_M7_WIFETENNIS
IF NOT IS_PED_INJURED(scene_buddy)
RETURN PRIVATE_Update_Family_Find_Event(scene_buddy,
FM_MICHAEL_WIFE, << -812.0607, 179.5117, 71.1531 >>, DEFAULT, FALSE)
ENDIF
BREAK
DEFAULT
RETURN FALSE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL Control_Buddy_PostOut_FriendEvents()
SWITCH sTimetableScene.sScene.eScene
CASE PR_SCENE_M2_BEDROOM FALLTHRU
CASE PR_SCENE_M2_SAVEHOUSE0_b
g_eSceneBuddyEvents = FE_M2_WIFE_sleeping
RETURN TRUE
BREAK
CASE PR_SCENE_M7_GETSREADY
g_eSceneBuddyEvents = FE_M7_WIFE_sleeping
RETURN TRUE
BREAK
CASE PR_SCENE_M2_ARGUEWITHWIFE
g_eSceneBuddyEvents = FE_M_WIFE_gets_drink_in_kitchen
RETURN TRUE
BREAK
CASE PR_SCENE_M7_FAKEYOGA
CASE PR_SCENE_M7_WIFETENNIS
g_eSceneBuddyEvents = FE_ANY_find_family_event
RETURN TRUE
BREAK
CASE PR_SCENE_M7_KIDS_GAMING
g_eSceneBuddyEvents = FE_M7_SON_gaming
RETURN TRUE
BREAK
CASE PR_SCENE_M7_ROUNDTABLE
g_eSceneBuddyEvents = FE_M7_SON_on_laptop_looking_for_jobs
RETURN TRUE
BREAK
CASE PR_SCENE_T_FLOYD_BEAR
g_eSceneBuddyEvents = FE_T1_FLOYD_cleaning
RETURN TRUE
BREAK
CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_A2 FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B2
g_eSceneBuddyEvents = FE_T1_FLOYD_cries_in_foetal_position
RETURN TRUE
BREAK
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
g_eSceneBuddyEvents = FE_T1_FLOYD_cries_on_sofa
RETURN TRUE
BREAK
CASE PR_SCENE_T_FLOYDPINEAPPLE
g_eSceneBuddyEvents = FE_T1_FLOYD_pineapple
RETURN TRUE
BREAK
DEFAULT
RETURN FALSE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
// *******************************************************************************************
// MISSION SPECIFIC FUNCTIONS AND PROCEDURES
// *******************************************************************************************
FUNC BOOL Has_Current_Player_Ped_Updated()
BOOL bPlayer_Ped_Updated = FALSE
IF sTimetableScene.sScene.ePed = GET_CURRENT_PLAYER_PED_ENUM() //
IF NOT sTimetableScene.bDescentOnly
bPlayer_Ped_Updated = TRUE
ELSE
IF IS_PLAYER_SWITCH_IN_PROGRESS()
IF GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_PREP_DESCENT
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "bDescentOnly ", Get_String_From_Switch_State(GET_PLAYER_SWITCH_STATE()))
#ENDIF
ELSE
IF NOT SET_PED_PRESET_OUTFIT_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene, PLAYER_PED_ID(), iPlayerOutfitPreloadStage)
bPlayer_Ped_Updated = TRUE
ENDIF
ENDIF
ELSE
IF NOT SET_PED_PRESET_OUTFIT_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene, PLAYER_PED_ID(), iPlayerOutfitPreloadStage)
bPlayer_Ped_Updated = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bPlayer_Ped_Updated
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
//attach the prop to the player?
IF DOES_ENTITY_EXIST(player_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
IF GET_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag, fDetachAnimPhase, thisSceneObjectAction)
IF (eBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(player_prop, TRUE)
ar_FREEZE_ENTITY_POSITION(player_prop, FALSE, "player_prop one")
ATTACH_ENTITY_TO_ENTITY(player_prop, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), eBonetag),
vecOffset, vecRotation)
ELSE
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
SET_ENTITY_COORDS(player_prop, vCreateCoords+vecOffset)
SET_ENTITY_ROTATION(player_prop, <<0,0,fCreateHead>>+vecRotation)
ar_FREEZE_ENTITY_POSITION(player_prop, TRUE, "player_prop two")
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
MODEL_NAMES eObjectModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vecOffset = <<0,0,0>>, vecRotation = <<0,0,0>>
PED_BONETAG eBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
BOOL bAttachedToBuddy
IF GET_EXTRA_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag, fDetachAnimPhase,
thisSceneObjectAction, bAttachedToBuddy)
IF (eBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(player_extra_prop, TRUE)
ar_FREEZE_ENTITY_POSITION(player_extra_prop, FALSE, "player_extra_prop one")
IF NOT bAttachedToBuddy
ATTACH_ENTITY_TO_ENTITY(player_extra_prop, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), eBonetag),
vecOffset, vecRotation)
ELSE
IF NOT IS_ENTITY_DEAD(g_pScene_buddy)
ATTACH_ENTITY_TO_ENTITY(player_extra_prop, g_pScene_buddy,
GET_PED_BONE_INDEX(g_pScene_buddy, eBonetag),
vecOffset, vecRotation)
ELSE
SCRIPT_ASSERT("IS_ENTITY_DEAD(g_pScene_buddy)")
ENDIF
ENDIF
ELSE
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
SET_ENTITY_COORDS(player_extra_prop, vCreateCoords+vecOffset)
SET_ENTITY_ROTATION(player_extra_prop, <<0,0,fCreateHead>>+vecRotation)
ar_FREEZE_ENTITY_POSITION(player_extra_prop, TRUE, "player_extra_prop two")
ENDIF
ENDIF
ENDIF
TEXT_LABEL_31 RoomName
FLOAT fTurnOffTVPhase
TV_LOCATION eRoomTVLocation
TVCHANNELTYPE eTVChannelType
TV_CHANNEL_PLAYLIST eTVPlaylist
IF CONTROL_PLAYER_WATCHING_TV(sTimetableScene.sScene.eScene, RoomName, fTurnOffTVPhase, eRoomTVLocation, eTVChannelType, eTVPlaylist)
IF IS_THIS_TV_AVAILABLE_FOR_USE(eRoomTVLocation)
IF NOT IS_THIS_TV_FORCED_ON(eRoomTVLocation)
AND NOT bSwitchForcedStartAmbientTV
START_AMBIENT_TV_PLAYBACK(eRoomTVLocation)
bSwitchForcedStartAmbientTV = TRUE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> START_AMBIENT_TV_PLAYBACK()")
#ENDIF
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 EmitterName
FLOAT fTurnOffRadioPhase
IF SET_SCENE_RADIO_EMITTER_ENABLED(sTimetableScene.sScene.eScene, EmitterName, fTurnOffRadioPhase)
SET_STATIC_EMITTER_ENABLED(EmitterName, FALSE)
ENDIF
SET_PED_DAMAGE_FOR_SCENE(sTimetableScene.sScene.eScene, PLAYER_PED_ID())
CDEBUG3LN(DEBUG_SWITCH, " - player_timetable_scene - Has_Current_Player_Ped_Updated - Checking scuba state for new ped.")
SET_PED_SCUBA_FOR_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.ePed)
CLEAR_HELP() //url:bugstar:331736
RETURN TRUE
ENDIF
ENDIF
// SP_MISSIONS eTriggerMission
// eTriggerMission = MISSION_FLOW_GET_ACTIVE_TRIGGER_SCENE()
// IF (eTriggerMission != SP_MISSION_NONE)
//
// SELECTOR_SLOTS_ENUM playerSelectorID
// playerSelectorID = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sTimetableScene.sScene.ePed)
//
// IF IS_BIT_SET(g_sPlayerPedRequest.iBitsetPedInLeadIn, ENUM_TO_INT(playerSelectorID))
//
// IF (sTimetableScene.sScene.eScene = PR_SCENE_M_DEFAULT AND playerSelectorID = SELECTOR_PED_MICHAEL)
// OR (sTimetableScene.sScene.eScene = PR_SCENE_F_DEFAULT AND playerSelectorID = SELECTOR_PED_FRANKLIN)
// OR (sTimetableScene.sScene.eScene = PR_SCENE_T_DEFAULT AND playerSelectorID = SELECTOR_PED_TREVOR)
// //
//
// CPRINTLN(DEBUG_SWITCH, "player timetable scene:sTimetableScene.eScene = MISSION_FLOW_FORCE_TRIGGER_MISSION()")
//
//// Player_Timetable_Scene_Cleanup()
//// RETURN FALSE
//
// sTimetableScene.eLoopTask = SCRIPT_TASK_STAND_STILL
// sTimetableScene.eOutTask = SCRIPT_TASK_STAND_STILL
// RETURN TRUE
// ELSE
// CPRINTLN(DEBUG_SWITCH, "player timetable scene:sTimetableScene.eScene = playerSelectorID")
// ENDIF
// ELSE
//
// CPRINTLN(DEBUG_SWITCH, "player timetable scene:IS_BIT_NOT_SET(SELECTOR_")
// #IF IS_DEBUG_BUILD
// CPRINTLN(DEBUG_SWITCH, GET_PLAYER_PED_STRING(GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(playerSelectorID)))
// #ENDIF
// CPRINTLN(DEBUG_SWITCH, ")")
// ENDIF
// ELSE
//// CPRINTLN(DEBUG_SWITCH, "special assets:eTriggerMission = SP_MISSION_NONE")
// ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL StopPlaybackPlayersRecordedVehicle(INT &iDrawSceneRot, FLOAT fTimePosition)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 strStop
strStop = "fRecordingStop:"
strStop += GET_STRING_FROM_FLOAT(fRecordingStop)
DrawLiteralSceneString(strStop, iDrawSceneRot, HUD_COLOUR_BLUEDARK)
#ENDIF
iDrawSceneRot++
IF fTimePosition >= fRecordingStop
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Has_Player_Finished_Switching()
VECTOR vCreateCoords = sTimetableScene.sScene.vCreateCoords
FLOAT fCreateHead = sTimetableScene.sScene.fCreateHead
IF NOT IsShortRangeDefaultSwitch(sTimetableScene.sScene)
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_USE_MOBILE_PHONE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
IF sTimetableScene.eVehState <> PTVS_2_playerInVehicle
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> * sTimetableScene.eVehState <> PTVS_2_playerInVehicle")
IF NOT IsShortRangeDefaultSwitch(sTimetableScene.sScene)
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_USE_MOBILE_PHONE)
AND (sTimetableScene.sScene.eScene <> PR_SCENE_F_S_EXILE2)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vCreateCoords)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fCreateHead)
SET_PED_CLOTH_PIN_FRAMES(PLAYER_PED_ID(), 1)
ENDIF
ENDIF
/*IF NOT IS_PED_INJURED(scene_buddy)
IF (GET_ENTITY_MODEL(scene_buddy) = A_C_HORSE)
SET_PED_ONTO_MOUNT(PLAYER_PED_ID(), scene_buddy)
ENDIF
ENDIF*/
ELSE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> * IF sTimetableScene.eVehState = PTVS_2_playerInVehicle")
IF IS_VEHICLE_DRIVEABLE(scene_veh)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ** IF IS_VEHICLE_DRIVEABLE(scene_veh)")
Setup_Player_In_Switch_Vehicle()
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> * set wanted level on players vehicle")
SET_VEHICLE_IS_WANTED(scene_veh, TRUE)
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), GET_PLAYER_WANTED_LEVEL(PLAYER_ID()))
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
ENDIF
// Radio
enumCharacterList eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUM()
INT iRadioIndex = g_sPlayerLastVeh[eCurrentPlayerPedEnum].iRadioIndex
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> **** SET_RADIO_TO_STATION_INDEX(", iRadioIndex, ") //", GET_PLAYER_PED_STRING(eCurrentPlayerPedEnum))
enumCharacterList ePlayer
REPEAT NUM_OF_PLAYABLE_PEDS ePlayer
CPRINTLN(DEBUG_SWITCH, " player ", GET_PLAYER_PED_STRING(ePlayer), " radio: ", g_sPlayerLastVeh[ePlayer].iRadioIndex)
ENDREPEAT
#ENDIF
SET_RADIO_TO_STATION_INDEX(iRadioIndex)
ELSE
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> ** IF NOT IS_VEHICLE_DRIVEABLE(scene_veh)")
IF NOT IsShortRangeDefaultSwitch(sTimetableScene.sScene)
IF NOT IS_ENTITY_DEAD(scene_veh)
SET_VEHICLE_FIXED(scene_veh)
RETURN FALSE
ENDIF
ENDIF
ENDIF
ENDIF
Control_Player_Loop_Tasks()
IF NOT IS_PED_INJURED(scene_buddy)
Control_Buddy_Loop_Tasks()
ENDIF
FLOAT gameplayCamPitch, gameplayCamSmoothRate
FLOAT gameplayCamHeading
IF SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sTimetableScene.sScene.eScene,
gameplayCamPitch, gameplayCamSmoothRate, gameplayCamHeading)
#IF IS_DEBUG_BUILD
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneProceduralCam)
AND GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
TEXT_LABEL_63 sProc = "remove gameplay pitch for proc cam : "
sProc += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sProc)
SCRIPT_ASSERT(sProc)
gameplayCamPitch = 999.000
gameplayCamHeading = 999.000
ENDIF
#ENDIF
IF (gameplayCamPitch <> 999.000)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch, gameplayCamSmoothRate)
ENDIF
IF (gameplayCamHeading <> 999.000)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
ENDIF
ENDIF
// #1327351
IF NOT DOES_CAM_EXIST(ExitCamIndex)
VECTOR vSceneCoord
FLOAT fSceneRot
TEXT_LABEL_31 tCreateRoom
IF GET_PLAYER_PED_POSITION_FOR_SCENE(sTimetableScene.sScene.eScene, vSceneCoord, fSceneRot, tCreateRoom)
IF NOT IS_STRING_NULL_OR_EMPTY(tCreateRoom)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneProceduralCam)
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sTimetableScene.sScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov)
#IF IS_DEBUG_BUILD
OR NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneProceduralCam)
VECTOR vecMocapFramePos, vecMocapFrameRot
FLOAT vecMocapFrameFov
IF DEBUG_GetPlayerSwitchEstablishingShot(tPlayerSceneProceduralCam, "",
vecMocapFramePos, vecMocapFrameRot, vecMocapFrameFov)
#IF USE_TU_CHANGES
IF (sTimetableScene.sScene.eScene = PR_SCENE_M7_EMPLOYEECONVO)
vecMocapFramePos.z -= 30
ENDIF
#ENDIF
CONST_FLOAT fPosTolerance 0.5
CONST_FLOAT fRotTolerance 0.5
CONST_FLOAT fFovTolerance 0.5
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
OR NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
OR NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
TEXT_LABEL_63 tCamDiff
tCamDiff = "vecCamEnd <> vecMocapFrame: "
tCamDiff += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
//
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", tCamDiff)
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndPos, vecMocapFramePos, fPosTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndPos[", vecCamEndPos.x, ", ", vecCamEndPos.y, ", ", vecCamEndPos.z, "] <> vecMocapFramePos[", vecMocapFramePos.x, ", ", vecMocapFramePos.y, ", ", vecMocapFramePos.z, "]: ", VDIST(vecCamEndPos, vecMocapFramePos))
ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(vecCamEndRot, vecMocapFrameRot, fRotTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndRot[", vecCamEndRot.x, ", ", vecCamEndRot.y, ", ", vecCamEndRot.z, "] <> vecMocapFrameRot[", vecMocapFrameRot.x, ", ", vecMocapFrameRot.y, ", ", vecMocapFrameRot.z, "]: ", VDIST(vecCamEndRot, vecMocapFrameRot))
ENDIF
IF NOT (ABSF(vecCamEndFov - vecMocapFrameFov) <= fFovTolerance)
CPRINTLN(DEBUG_SWITCH, " vecCamEndFov[", vecCamEndFov, "] <> vecMocapFrameFov[", vecMocapFrameFov, "]: ", ABSF(vecCamEndFov - vecMocapFrameFov))
ENDIF
SAVE_STRING_TO_DEBUG_FILE("CASE ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndPos = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFramePos)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndRot = ")
SAVE_VECTOR_TO_DEBUG_FILE(vecMocapFrameRot)
IF (vecMocapFrameFov <> 40.0)
SAVE_STRING_TO_DEBUG_FILE(" vecCamEndFov = ")
SAVE_FLOAT_TO_DEBUG_FILE(vecMocapFrameFov)
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK //")
ELSE
SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK //")
ENDIF
SAVE_STRING_TO_DEBUG_FILE(tPlayerSceneProceduralCam)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
vecCamEndPos = vecMocapFramePos
vecCamEndRot = vecMocapFrameRot
vecCamEndFov = vecMocapFrameFov
SCRIPT_ASSERT(tCamDiff)
ENDIF
ENDIF
#ENDIF
ExitCamIndex = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA")
SET_CAM_COORD(ExitCamIndex, vecCamEndPos)
SET_CAM_ROT(ExitCamIndex, vecCamEndRot)
SET_CAM_FOV(ExitCamIndex, vecCamEndFov)
SET_CAM_ACTIVE(ExitCamIndex,TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL Create_Switch_Scene_Conversation()
IF bHave_Created_Estab_Shot_Conversation
KILL_ANY_CONVERSATION()
bHave_Created_Estab_Shot_Conversation = FALSE
ENDIF
TEXT_LABEL tPlayerSceneVoiceID, tBuddySceneVoiceID
FLOAT fSceneSpeechPhase
IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneVoiceID, tBuddySceneVoiceID, tSpeechBlock, tSpeechLabel, fSceneSpeechPhase)
IF (fSceneSpeechPhase <> 0.0)
IF (fSceneSpeechPhase > 0.0)
TEXT_LABEL_63 tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneAnimProgress)
FLOAT fPlayer_anim_current_time
IF Get_Ped_Anim_Or_SynchedScene_Phase(PLAYER_PED_ID(), tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut, fPlayer_anim_current_time)
//
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> fSceneSpeechPhase: ", fSceneSpeechPhase, ", fPlayer_anim_current_time: ", fPlayer_anim_current_time)
#ENDIF
IF fPlayer_anim_current_time < 0.0
RETURN FALSE
ENDIF
IF fPlayer_anim_current_time < fSceneSpeechPhase
RETURN FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ar_ADD_PED_FOR_DIALOGUE(tPlayerSceneVoiceID, tBuddySceneVoiceID)
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_USE_MOBILE_PHONE)
IF bHave_Preloaded_Conversation
BEGIN_PRELOADED_CONVERSATION()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> BEGIN_PRELOADED_CONVERSATION(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
RETURN TRUE
ELIF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
START_PRELOADED_CONVERSATION()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> UNPAUSE_FACE_TO_FACE_CONVERSATION(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
RETURN TRUE
ELSE
IF CREATE_CONVERSATION(MyLocalPedStruct, tSpeechBlock, tSpeechLabel, CONV_PRIORITY_AMBIENT_HIGH)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> CREATE_CONVERSATION(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
IF sTimetableScene.sScene.eScene = PR_SCENE_T_FIGHTBAR_a
OR sTimetableScene.sScene.eScene = PR_SCENE_T_FIGHTYAUCLUB_b
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(),
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,1,0>>),
PEDMOVE_WALK)
ENDIF
RETURN TRUE
ENDIF
ENDIF
ELSE
IF IS_CELLPHONE_CONVERSATION_PAUSED()
PAUSE_CELLPHONE_CONVERSATION(FALSE)
START_PRELOADED_CONVERSATION()
bDisableWhileWaiting = FALSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> UNPAUSE_PLAYER_CALL_CHAR_CELLPHONE(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
RETURN TRUE
ELSE
IF (g_Cellphone.PhoneDS = PDS_DISABLED)
DISABLE_CELLPHONE(FALSE)
bKeepCellphoneDisabled = FALSE
ENDIF
IF PLAYER_CALL_CHAR_CELLPHONE(MyLocalPedStruct, CHAR_LAMAR, tSpeechBlock, tSpeechLabel, CONV_PRIORITY_AMBIENT_HIGH)
bDisableWhileWaiting = FALSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> PLAYER_CALL_CHAR_CELLPHONE(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
RETURN TRUE
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<player_timetable_scene> failed to create conversation(\"", tSpeechBlock, "\", \"", tSpeechLabel, "\") //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
RETURN FALSE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL NOT_ProgressOutOfEstabShotEarly(PED_REQUEST_SCENE_ENUM eScene)
FLOAT fDistToProgress = 0.0
SWITCH eScene
CASE PR_SCENE_M2_SAVEHOUSE1_b fDistToProgress = 6.5 BREAK
CASE PR_SCENE_M2_DROPOFFSON_a fDistToProgress = 5.0 BREAK
CASE PR_SCENE_T_FIGHTBAR_a fDistToProgress = 5.0 BREAK
CASE PR_SCENE_T_FIGHTBAR_b fDistToProgress = 5.0 BREAK
CASE PR_SCENE_T_FIGHTYAUCLUB_b fDistToProgress = 20.0 BREAK
CASE PR_SCENE_T_FIGHTCASINO fDistToProgress = 10.0 BREAK
DEFAULT
RETURN get_NOT_PlayerHasStartedNewScene()
BREAK
ENDSWITCH
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
OR GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT
CPRINTLN(DEBUG_SWITCH, "switch not running/short???")
RETURN FALSE
ENDIF
IF (GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT)
VECTOR vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
VECTOR vCamCoords = GET_FINAL_RENDERED_CAM_COORD()
FLOAT fCamDist2 = VDIST2(vPlayerCoords, vCamCoords)
IF fCamDist2 < (fDistToProgress*fDistToProgress)
CPRINTLN(DEBUG_SWITCH, "dist[", SQRT(fCamDist2), "m] < fDistToProgress[", fDistToProgress, "m]")
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
bDisableWhileWaiting = FALSE
RETURN FALSE
ENDIF
CPRINTLN(DEBUG_SWITCH, "dist[", SQRT(fCamDist2), "m] >= fDistToProgress[", fDistToProgress, "m]")
RETURN TRUE
ENDIF
CPRINTLN(DEBUG_SWITCH, "state not estab shot???")
RETURN TRUE
ENDFUNC
FUNC BOOL Has_Player_Started_New_Scene()
INT iDrawSceneRot = 2
IF NOT NOT_ProgressOutOfEstabShotEarly(sTimetableScene.sScene.eScene)
IF DOES_CAM_EXIST(LoopCamIndex)
IF NOT IS_CAM_RENDERING(LoopCamIndex)
SET_CAM_ACTIVE(LoopCamIndex, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("LoopCamIndex rendering", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot += 1
#ENDIF
ENDIF
ENDIF
IF NOT sTimetableScene.bDescentOnly
IF CONTROL_PLAYER_HAVING_A_LIE_IN(sTimetableScene.sScene.eScene)
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("player having a lie in", iDrawSceneRot+0, HUD_COLOUR_GREEN)
DrawLiteralSceneStringTimer("tLieInTimer: ", tLieInTimer, iDrawSceneRot+1, HUD_COLOUR_REDDARK)
iDrawSceneRot += 2
#ENDIF
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
CONST_FLOAT fLIE_IN_TIME_OUT_seconds 7.5 //15.0 //30.0
IF NOT TIMER_DO_WHEN_READY(tLieInTimer, fLIE_IN_TIME_OUT_seconds)
bWaitingForPlayerLieInInput = TRUE
RETURN FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF CONTROL_PLAYER_PROCEDURAL_CONV_INSTANT(sTimetableScene.sScene.eScene)
IF NOT bHave_Created_Switch_Scene_Conversation
IF NOT Create_Switch_Scene_Conversation()
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("waiting to play conversation", iDrawSceneRot+0, HUD_COLOUR_GREEN)
iDrawSceneRot += 1
#ENDIF
RETURN FALSE
ELSE
bHave_Created_Switch_Scene_Conversation = TRUE
ENDIF
ENDIF
// IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("player on the phone", iDrawSceneRot+0, HUD_COLOUR_GREEN)
// iDrawSceneRot += 1
// #ENDIF
//
// bDisableWhileWaiting = FALSE
// RETURN FALSE
// ELSE
// //
// ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camID)
DrawLiteralSceneStringFloat("camID phase:",
GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camID), iDrawSceneRot, HUD_COLOUR_GREEN)
iDrawSceneRot++
ELSE
DrawLiteralSceneString("camID phase off", iDrawSceneRot, HUD_COLOUR_REDLIGHT)
iDrawSceneRot++
ENDIF
// IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camTo)
// DrawLiteralSceneStringFloat("camTo phase:",
// GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camTo), iDrawSceneRot, HUD_COLOUR_GREEN)
// iDrawSceneRot++
// ELSE
// DrawLiteralSceneString("camTo phase off", iDrawSceneRot, HUD_COLOUR_REDLIGHT)
// iDrawSceneRot++
// ENDIF
#ENDIF
// IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camTo)
// CPRINTLN(DEBUG_SWITCH, "camTo phase:")
// CPRINTLN(DEBUG_SWITCH, GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camTo))
//
// IF GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camTo) < 0.8
//
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("camTo phase off", iDrawSceneRot, HUD_COLOUR_REDLIGHT)
// iDrawSceneRot++
// #ENDIF
//
// //
// RETURN FALSE
// ENDIF
//
// ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF bUpdatedWalkTasks
VECTOR vOccupiedBounds = <<0.5,0.5,1.0>>
IF IS_AREA_OCCUPIED(sTimetableScene.sScene.vCreateCoords-vOccupiedBounds,
sTimetableScene.sScene.vCreateCoords+vOccupiedBounds,
FALSE, TRUE, FALSE, TRUE, FALSE, PLAYER_PED_ID())
VECTOR vSafeCoord
IF GET_SAFE_COORD_FOR_PED(sTimetableScene.sScene.vCreateCoords, FALSE, vSafeCoord)
sTimetableScene.sScene.vCreateCoords = vSafeCoord
CPRINTLN(DEBUG_SWITCH, "GET_SAFE_COORD_FOR_PED")
ENDIF
ENDIF
ENDIF
Control_Player_Out_Tasks()
//Reset savehouse blips
INT iSavehouse
REPEAT ENUM_TO_INT(NUMBER_OF_SAVEHOUSE_LOCATIONS) iSavehouse
Update_Savehouse_Respawn_Garage(INT_TO_ENUM(SAVEHOUSE_NAME_ENUM, iSavehouse))
Update_Savehouse_Respawn_Blip(INT_TO_ENUM(SAVEHOUSE_NAME_ENUM, iSavehouse))
ENDREPEAT
ENDIF
IF NOT IS_PED_INJURED(scene_buddy)
Control_Buddy_Out_Tasks()
ENDIF
//removed for #470174
// FLOAT gameplayCamPitch, gameplayCamSmoothRate
// FLOAT gameplayCamHeading
// IF SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sTimetableScene.sScene.eScene,
// gameplayCamPitch, gameplayCamSmoothRate, gameplayCamHeading)
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch, gameplayCamSmoothRate)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
// ENDIF
IF NOT IS_ENTITY_DEAD(scene_veh)
ar_FREEZE_ENTITY_POSITION(scene_veh, FALSE, "Has_Player_Started_New_Scene")
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(scene_veh, FALSE)
IF IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(scene_veh))
IF (fSceneVeh_driveSpeed = 0.0)
SET_ENTITY_DYNAMIC(scene_veh, TRUE)
IF CAN_ANCHOR_BOAT_HERE(scene_veh)
SET_BOAT_ANCHOR(scene_veh, TRUE)
CPRINTLN(DEBUG_SWITCH, "SET_BOAT_ANCHOR(scene_veh, TRUE)")
ENDIF
ENDIF
ENDIF
ENDIF
RETURN TRUE
ELSE
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
SET_ENTITY_VISIBLE(player_door_r, FALSE)
ENDIF
VECTOR vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
VECTOR vCamCoords = GET_FINAL_RENDERED_CAM_COORD()
FLOAT fCamDist2 = VDIST2(vPlayerCoords, vCamCoords)
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("PlayerHasNotStartedNewScene",
iDrawSceneRot, HUD_COLOUR_GREEN)
iDrawSceneRot++
DrawLiteralSceneStringFloat("fCamDist: ", SQRT(fCamDist2),
iDrawSceneRot, HUD_COLOUR_GREENLIGHT)
iDrawSceneRot++
IF GET_PLAYER_SWITCH_INTERP_OUT_DURATION() > 0
TEXT_LABEL_63 str = "duration: "
str += GET_PLAYER_SWITCH_INTERP_OUT_DURATION()
str += ", time: "
str += GET_PLAYER_SWITCH_INTERP_OUT_CURRENT_TIME()
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_GREEN)
iDrawSceneRot++
ENDIF
DrawLiteralSceneString(Get_String_From_Script_Task_Name(sTimetableScene.eLoopTask),
iDrawSceneRot, HUD_COLOUR_GREENLIGHT)
iDrawSceneRot += 2
#ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_STAND_STILL)
IF HAS_COLLISION_LOADED_AROUND_ENTITY(PLAYER_PED_ID())
IF fCamDist2 < (15*15)
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "descent-goto")
ENDIF
ENDIF
IF IS_PED_FALLING(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "player is falling while trying to stand still!!!")
//SCRIPT_ASSERT("player is falling while trying to stand still!!!")
SET_ENTITY_COORDS(PLAYER_PED_ID(), sTimetableScene.sScene.vCreateCoords)
ELIF IS_PED_IN_PARACHUTE_FREE_FALL(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "player in parachute freefall falling while trying to stand still!!!")
//SCRIPT_ASSERT("player in parachute freefall falling while trying to stand still!!!")
SET_ENTITY_COORDS(PLAYER_PED_ID(), sTimetableScene.sScene.vCreateCoords)
ELSE
CDEBUG3LN(DEBUG_SWITCH, "player isn't falling while standing still")
ENDIF
ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD) //1367736
IF HAS_COLLISION_LOADED_AROUND_ENTITY(PLAYER_PED_ID())
IF fCamDist2 < (15*15)
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "descent-goto")
ENDIF
ENDIF
ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_WANDER_STANDARD) //1578716
IF HAS_COLLISION_LOADED_AROUND_ENTITY(PLAYER_PED_ID())
IF NOT bRetaskToWander
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "descent-wander")
TASK_WANDER_STANDARD(PLAYER_PED_ID())
bRetaskToWander = TRUE
ENDIF
ENDIF
ENDIF
IF (sTimetableScene.eLoopTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
IF HAS_COLLISION_LOADED_AROUND_ENTITY(PLAYER_PED_ID())
IF NOT bRetaskToWander
Get_Base_Speed_For_Drive_To_Coord(vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
FLOAT fSceneVeh_driveSpeedLoop
fSceneVeh_driveSpeedLoop = fSceneVeh_driveSpeed
IF (sTimetableScene.eOutTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
fSceneVeh_driveSpeedLoop *= 0.5
ENDIF
CPRINTLN(DEBUG_SWITCH, "Has_Player_Started_New_Scene(fSceneVeh_driveSpeedLoop:", fSceneVeh_driveSpeedLoop, ")")
ar_FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE, "descent-wander")
SEQUENCE_INDEX siseq
OPEN_SEQUENCE_TASK(siseq)
TASK_VEHICLE_DRIVE_TO_COORD(NULL, scene_veh, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset*1.5), fSceneVeh_driveSpeedLoop, DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(scene_veh), DRIVINGMODE_AVOIDCARS, 4.0, 30)
TASK_VEHICLE_DRIVE_WANDER(NULL, scene_veh, fSceneVeh_driveSpeedLoop, DRIVINGMODE_AVOIDCARS)
CLOSE_SEQUENCE_TASK(siseq)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), siseq)
CLEAR_SEQUENCE_TASK(siseq)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeedLoop)
bRetaskToWander = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camID)
DrawLiteralSceneStringFloat("spline cam phase:",
GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camID),
iDrawSceneRot, HUD_COLOUR_GREEN)
iDrawSceneRot++
ENDIF
#ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PLAYER_SWITCH_IN_PROGRESS()
AND GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT
AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_DESCENT
IF GET_PLAYER_SWITCH_JUMP_CUT_INDEX() > 0
// CLEAR_AREA_OF_VEHICLES(GET_ENTITY_COORDS(scene_veh), 10.0)
ELSE
IF GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0
IF NOT bSwitchSkippedPlaybackTimeDescent
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
IF (fRecordingSkip >= 0)
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(scene_veh, fRecordingSkip - GET_TIME_POSITION_IN_RECORDING(scene_veh))
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(scene_veh)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("position in recording \"")
SAVE_STRING_TO_DEBUG_FILE(tRecordingName)
IF iRecordingNum < 100 SAVE_STRING_TO_DEBUG_FILE("0") ENDIF
IF iRecordingNum < 10 SAVE_STRING_TO_DEBUG_FILE("0") ENDIF
SAVE_INT_TO_DEBUG_FILE(iRecordingNum)
SAVE_STRING_TO_DEBUG_FILE("\" at time ")
SAVE_FLOAT_TO_DEBUG_FILE(fRecordingSkip)
SAVE_STRING_TO_DEBUG_FILE(" / ")
SAVE_FLOAT_TO_DEBUG_FILE(GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(iRecordingNum, tRecordingName))
SAVE_STRING_TO_DEBUG_FILE(": ")
SAVE_VECTOR_TO_DEBUG_FILE(GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecordingNum, fRecordingSkip, tRecordingName))
SAVE_STRING_TO_DEBUG_FILE(" //")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
ELSE
//
PED_VEH_DATA_STRUCT sVehData //MODEL_NAMES vehModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vVehCoordOffset = <<0,0,0>>
FLOAT fVehHeadOffset = 0
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene,
sVehData, vVehCoordOffset, fVehHeadOffset,
vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehExit
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncAnimVehExit)
//dont reposition - synch scene anim played back
ELSE
SET_ENTITY_COORDS(scene_veh, sTimetableScene.sScene.vCreateCoords+vVehCoordOffset)
SET_ENTITY_HEADING(scene_veh, sTimetableScene.sScene.fCreateHead+fVehHeadOffset)
ar_SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed)
#IF IS_DEBUG_BUILD
VECTOR vRepos = sTimetableScene.sScene.vCreateCoords+vVehCoordOffset
CPRINTLN(DEBUG_SWITCH, "reposition scene_veh \"", SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(scene_veh)), "\" to ", vRepos, " // ", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ENDIF
ENDIF
bSwitchSkippedPlaybackTimeDescent = TRUE
ENDIF
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
SET_PLAYBACK_SPEED(scene_veh, fSpeedSwitch)
ENDIF
ELSE
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
// Restore full playback speed
SET_PLAYBACK_SPEED(scene_veh, fSpeedExit)
ENDIF
ENDIF
ENDIF
ENDIF
IF bSwitchSkippedPlaybackTimeDescent
IF IS_PLAYER_SWITCH_IN_PROGRESS()
AND GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT
AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_OUTRO_HOLD
IF NOT bSwitchSkippedPlaybackTimeHold
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
IF (fRecordingSkip >= 0)
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(scene_veh, fRecordingSkip - GET_TIME_POSITION_IN_RECORDING(scene_veh))
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(scene_veh)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("position in recording \"")
SAVE_STRING_TO_DEBUG_FILE(tRecordingName)
IF iRecordingNum < 100 SAVE_STRING_TO_DEBUG_FILE("0") ENDIF
IF iRecordingNum < 10 SAVE_STRING_TO_DEBUG_FILE("0") ENDIF
SAVE_INT_TO_DEBUG_FILE(iRecordingNum)
SAVE_STRING_TO_DEBUG_FILE("\" at time ")
SAVE_FLOAT_TO_DEBUG_FILE(fRecordingSkip)
SAVE_STRING_TO_DEBUG_FILE(" / ")
SAVE_FLOAT_TO_DEBUG_FILE(GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(iRecordingNum, tRecordingName))
SAVE_STRING_TO_DEBUG_FILE(": ")
SAVE_VECTOR_TO_DEBUG_FILE(GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecordingNum, fRecordingSkip, tRecordingName))
SAVE_STRING_TO_DEBUG_FILE(" //")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
ELSE
//
PED_VEH_DATA_STRUCT sVehData //MODEL_NAMES vehModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR vVehCoordOffset = <<0,0,0>>
FLOAT fVehHeadOffset = 0
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(sTimetableScene.sScene.ePed, sTimetableScene.sScene.eScene,
sVehData, vVehCoordOffset, fVehHeadOffset,
vSceneVeh_driveOffset, fSceneVeh_driveSpeed)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehExit
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncAnimVehExit)
//dont reposition - synch scene anim played back
ELSE
SET_ENTITY_COORDS(scene_veh, sTimetableScene.sScene.vCreateCoords+vVehCoordOffset)
SET_ENTITY_HEADING(scene_veh, sTimetableScene.sScene.fCreateHead+fVehHeadOffset)
ar_SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, fSceneVeh_driveSpeed)
#IF IS_DEBUG_BUILD
VECTOR vRepos = sTimetableScene.sScene.vCreateCoords+vVehCoordOffset
CPRINTLN(DEBUG_SWITCH, "reposition scene_veh \"", SAFE_GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(scene_veh)), "\" to ", vRepos, " // ", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
#ENDIF
ENDIF
ENDIF
ENDIF
bSwitchSkippedPlaybackTimeHold = TRUE
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncAnimVehLoop
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimVehLoop)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(scene_veh)
REQUEST_VEHICLE_DIAL(scene_veh)
ENDIF
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_CHECKSHOE)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_WIPERIGHT)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_WIPEHANDS)
// IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_CARSTEAL_GARAGE_F))
// ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_CARSTEAL_GARAGE_F), prop_com_gar_door_01, << 483.56, -1316.08, 32.18 >>)
//
// CPRINTLN(DEBUG_SWITCH, "ADD_DOOR_TO_SYSTEM...")
//
// ELSE
//
// DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_CARSTEAL_GARAGE_F), 1.0, DEFAULT, TRUE)
// DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_CARSTEAL_GARAGE_F), DOORSTATE_FORCE_OPEN_THIS_FRAME, DEFAULT, TRUE)
//
// CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_DOOR_STATE(CARSTEAL_GARAGE_F)")
//
// ENDIF
//
//
// IF NOT IS_BIT_SET(g_sAutoDoorData[AUTODOOR_DEVIN_GATE_L].settingsBitset, BIT_AUTODOOR_LOCK_OPEN)
// FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(AUTODOOR_DEVIN_GATE_L, TRUE)
//
// CPRINTLN(DEBUG_SWITCH, "FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(L)...")
// ENDIF
// IF NOT IS_BIT_SET(g_sAutoDoorData[AUTODOOR_DEVIN_GATE_R].settingsBitset, BIT_AUTODOOR_LOCK_OPEN)
// FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(AUTODOOR_DEVIN_GATE_R, TRUE)
//
// CPRINTLN(DEBUG_SWITCH, "FORCE_AUTOMATIC_DOOR_SLIDE_OPEN(R)...")
// ENDIF
//
// IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(AUTODOOR_HAYES_GARAGE, PLAYER_PED_ID())
// REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(AUTODOOR_HAYES_GARAGE, PLAYER_PED_ID())
//
// CPRINTLN(DEBUG_SWITCH, "REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR...")
// ELSE
//
// CPRINTLN(DEBUG_SWITCH, "PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR...")
//
// ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M7_KIDS_GAMING)
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_SON))
ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_SON), V_ILEV_MM_DOORSON, <<-806.8,174.0,76.9>>)
CPRINTLN(DEBUG_SWITCH, "ADD_DOOR_TO_SYSTEM...")
ELSE
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_SON), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_SON), -1, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_DOOR_STATE(M_MANSION_SON)")
ENDIF
// ELIF (sTimetableScene.sScene.eScene = PR_SCENE_Ma_MICHAEL2)
// IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM))
// ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), V_ILEV_MM_DOORW, <<-805.0,171.9,76.9>>)
//
// CPRINTLN(DEBUG_SWITCH, "ADD_DOOR_TO_SYSTEM...")
//
// ELSE
//
// DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
// DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), 1, DEFAULT, TRUE)
//
// CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_""SET_DOOR_STATE...")
//
// ENDIF
// ELIF (sTimetableScene.sScene.eScene = PR_SCENE_F_MD_KUSH_DOC)
// IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM))
// ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), vb_30_shutters, <<-1168.404,-1567.186,4.843>>)
//
// CPRINTLN(DEBUG_SWITCH, "ADD_DOOR_TO_SYSTEM...")
//
// ELSE
//
// DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
// DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_BATHROOM), 1, DEFAULT, TRUE)
//
// CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_""SET_DOOR_STATE...")
//
// ENDIF
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_M2_ARGUEWITHWIFE) //#1524857
IF NOT bHave_Created_Estab_Shot_Conversation
VECTOR vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
VECTOR vCamCoords = GET_FINAL_RENDERED_CAM_COORD()
FLOAT fCamDist2 = VDIST2(vPlayerCoords, vCamCoords)
IF IS_PLAYER_SWITCH_IN_PROGRESS()
AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT
AND (fCamDist2 < (40*40))
/*
Hey Alwyn,
I've updated these roots:
MICS1_IG_18a
MICS1_IG_18b
MICS1_IG_18c
Thanks.
*/
TEXT_LABEL tPlayerSceneVoiceID, tBuddySceneVoiceID
FLOAT fSceneSpeechPhase
IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneVoiceID, tBuddySceneVoiceID, tSpeechBlock, tSpeechLabel, fSceneSpeechPhase)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
enumCharacterList ePlayerPed = GET_CURRENT_PLAYER_PED_ENUM()
INT iPlayerSceneVoiceNum = ENUM_TO_INT(ePlayerPed)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iPlayerSceneVoiceNum, PLAYER_PED_ID(), tPlayerSceneVoiceID)
ENDIF
INT iBuddySceneVoiceNum = 4
IF NOT IS_PED_INJURED(scene_buddy)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iBuddySceneVoiceNum, scene_buddy, tBuddySceneVoiceID)
ELIF NOT IS_STRING_NULL_OR_EMPTY(tBuddySceneVoiceID)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, iBuddySceneVoiceNum, NULL, tBuddySceneVoiceID)
ENDIF
IF CREATE_CONVERSATION(MyLocalPedStruct, tSpeechBlock, "MICS1_IG_18R", CONV_PRIORITY_AMBIENT_HIGH)
bHave_Created_Estab_Shot_Conversation = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M7_ROUNDTABLE) //done elsewhere...
ELIF (sTimetableScene.eOutTask = SCRIPT_TASK_SYNCHRONIZED_SCENE) //#1553855
IF NOT bHave_Preloaded_Conversation
VECTOR vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
VECTOR vCamCoords = GET_FINAL_RENDERED_CAM_COORD()
FLOAT fCamDist2 = VDIST2(vPlayerCoords, vCamCoords)
IF IS_PLAYER_SWITCH_IN_PROGRESS()
AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT
AND (fCamDist2 < (40*40))
TEXT_LABEL tPlayerSceneVoiceID, tBuddySceneVoiceID
FLOAT fSceneSpeechPhase
IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneVoiceID, tBuddySceneVoiceID, tSpeechBlock, tSpeechLabel, fSceneSpeechPhase)
ar_ADD_PED_FOR_DIALOGUE(tPlayerSceneVoiceID, tBuddySceneVoiceID)
IF PRELOAD_CONVERSATION(MyLocalPedStruct, tSpeechBlock, tSpeechLabel, CONV_PRIORITY_AMBIENT_HIGH)
// PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
CPRINTLN(DEBUG_SWITCH, "PRELOAD_CONVERSATION(", tSpeechBlock, ", ", tSpeechLabel, ")")
bHave_Preloaded_Conversation = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL InterpBackFromSynchCam(CAMERA_INDEX &camIndex, BOOL bDestroyCamIndex)
IF DOES_CAM_EXIST(camIndex)
IF IS_CAM_RENDERING(camIndex)
FLOAT gameplayCamPitch, gameplayCamSmoothRate
FLOAT gameplayCamHeading
IF SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sTimetableScene.sScene.eScene,
gameplayCamPitch, gameplayCamSmoothRate, gameplayCamHeading)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch, gameplayCamSmoothRate)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
ENDIF
FLOAT paramStrength, amplitudeScalar
BOOL bBlankCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bBlankCountsForPubClubVisit)
OR (((sTimetableScene.sScene.eScene = PR_SCENE_F_MD_KUSH_DOC)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M2_CARSLEEP_a)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M2_CARSLEEP_b)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M6_CARSLEEP)) AND (GET_FOLLOW_VEHICLE_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON))
VECTOR camIndexCoord = GET_CAM_COORD(camIndex)
VECTOR gamcamIndexCoord = GET_GAMEPLAY_CAM_COORD()
FLOAT fCamInterpDist = GET_DISTANCE_BETWEEN_COORDS(camIndexCoord, gamcamIndexCoord)
INT iDrawSceneRot
IF IsPlayerMovingLeftStick(iDrawSceneRot)
fCamInterpDist *= 0.2
ENDIF
INT iCamInterpTime = ROUND(fCamInterpDist*1000)
IF (sTimetableScene.sScene.eScene = PR_SCENE_M2_CARSLEEP_a)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M2_CARSLEEP_b)
OR (sTimetableScene.sScene.eScene = PR_SCENE_M6_CARSLEEP)
iCamInterpTime = 0
ENDIF
RENDER_SCRIPT_CAMS(FALSE, iCamInterpTime != 0, iCamInterpTime, FALSE)
bDestroyCamIndex = FALSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "InterpBackFromSynchCam: RENDER_SCRIPT_CAMS(FALSE, ", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene), ", ", iCamInterpTime, ")")
#ENDIF
DisableWhileWaiting("interp...")
ELIF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
IF GET_PLAYER_WARDROBE_ANIM_FOR_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
AND current_player_timetable_scene_stage != PLAYER_HAS_WARDROBE_ANIM
CPRINTLN(DEBUG_SWITCH, "DON'T InterpBackFromSynchCam: RENDER_SCRIPT_CAMS(", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene), ") //CAM_VIEW_MODE_FIRST_PERSON, ", Get_String_From_Player_Timetable_Scene_Stage(current_player_timetable_scene_stage))
RETURN FALSE
ELSE
FLOAT fPushinDist = PUSH_IN_DISTANCE
VECTOR vCamCoord = GET_FINAL_RENDERED_CAM_COORD()
VECTOR vPlayerCoord = GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_HEAD, <<0,0,0>>)
FLOAT fCoordDist3d = GET_DISTANCE_BETWEEN_COORDS(vCamCoord, vPlayerCoord)
CONST_FLOAT fPUSHIN_DIST_BUFFER 0.75
CONST_FLOAT fPUSHIN_DIST_MIN 0.001
fPushinDist = CLAMP(fPushinDist, fPUSHIN_DIST_MIN, fCoordDist3d-fPUSHIN_DIST_BUFFER)
IF fPushinDist < 0
CWARNINGLN(DEBUG_SWITCH, "fPushinDist is less than zero!! ", fPushinDist)
fPushinDist = fPUSHIN_DIST_MIN
ENDIF
#IF IS_DEBUG_BUILD
IF fPushinDist = PUSH_IN_DISTANCE
CPRINTLN(DEBUG_SWITCH, "PUSH_IN fCoordDist3d: ", fCoordDist3d, ", fPushinDist: PUSH_IN_DISTANCE //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
ELIF fPushinDist = fPUSHIN_DIST_MIN
CPRINTLN(DEBUG_SWITCH, "PUSH_IN fCoordDist3d: ", fCoordDist3d, ", fPushinDist: fPUSHIN_DIST_MIN //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
ELSE
CPRINTLN(DEBUG_SWITCH, "PUSH_IN fCoordDist3d: ", fCoordDist3d, ", fPushinDist: ", fPushinDist, " //", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene))
ENDIF
#ENDIF
FILL_PUSH_IN_DATA(sPushInData, PLAYER_PED_ID(), sTimetableScene.sScene.ePed,
0.000001, //FLOAT fDistance = PUSH_IN_DISTANCE
300, //INT iInterpTime = PUSH_IN_INTERP_TIME
300, //INT iCutTime = PUSH_IN_CUT_TIME
000, //INT iPostFXTime = PUSH_IN_POSTFX_TIME
000, //INT iSpeedUpTime = 0
DEFAULT) // FLOAT fSpeedUpProportion = PUSH_IN_SPEED_UP_PROPORTION)
bFilledPushInData = TRUE
bDestroyCamIndex = FALSE
// rob - short-circuit the creation of push-in cams to keep the original cam moving round till the cut
IF NOT bShortCircuitedPushin
sPushInData.state = PUSH_IN_RUNNING
sPushInData.iCreateTime = GET_GAME_TIMER()
sPushInData.bDonePostFX = FALSE
bShortCircuitedPushin = TRUE
ENDIF
VECTOR vDirectionMod
IF SET_PUSH_IN_DIRECTION_MODIFIER_FOR_SCENE(sTimetableScene.sScene.eScene, vDirectionMod)
CPRINTLN(DEBUG_SWITCH, "SET_PUSH_IN_DIRECTION_MODIFIER(", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene), ", ", vDirectionMod, ")")
SET_PUSH_IN_DIRECTION_MODIFIER(sPushInData, vDirectionMod)
ENDIF
CPRINTLN(DEBUG_SWITCH, "InterpBackFromSynchCam: FILL_PUSH_IN_DATA(", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene), ") //CAM_VIEW_MODE_FIRST_PERSON, ", Get_String_From_Player_Timetable_Scene_Stage(current_player_timetable_scene_stage))
ENDIF
ELSE
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
CPRINTLN(DEBUG_SWITCH, "InterpBackFromSynchCam: STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(", Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene), ")")
ENDIF
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
IF bDestroyCamIndex
DESTROY_CAM(camIndex)
ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL BlendOutOfSynchTask(PED_REQUEST_SCENE_ENUM ePedScene, STRING sReason)
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
RETURN FALSE
ENDIF
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_SYNCHRONIZED_SCENE) <> PERFORMING_TASK
bWaitingForPlayerLieInInput = TRUE
sReason = sReason
RETURN FALSE
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "BlendOutOfSynchTask(", Get_String_From_Ped_Request_Scene_Enum(ePedScene), ", \"", sReason, "\")")
#ENDIF
CLEAR_PED_TASKS(PLAYER_PED_ID())
INT iSIMULATE_PLAYER_INPUT_GAIT = -1
IF BLENDOUT_OF_SYNCH_TASK_FOR_TIMETABLE_SCENE(ePedScene, iSIMULATE_PLAYER_INPUT_GAIT)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GET_SYNCHRONIZED_SCENE_PHASE(player_ped_id exit) = ")
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
CPRINTLN(DEBUG_SWITCH, GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID))
ELSE
CPRINTLN(DEBUG_SWITCH, "FINISHED")
ENDIF
#ENDIF
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVEBLENDRATIO_WALK, iSIMULATE_PLAYER_INPUT_GAIT)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
ELSE
//
ENDIF
IF NOT IS_ENTITY_DEAD(scene_buddy)
SWITCH sTimetableScene.sScene.eScene
CASE PR_SCENE_F_LAMTAUNT_P1
CASE PR_SCENE_F_LAMTAUNT_P3
CASE PR_SCENE_F_LAMTAUNT_P5
CASE PR_SCENE_F_LAMTAUNT_NIGHT
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), scene_buddy, 2500)
BREAK
ENDSWITCH
ENDIF
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), FALSE)
bDisableWhileWaiting = FALSE
WAIT(0)
sReason = sReason
RETURN TRUE
ENDFUNC
FUNC BOOL Has_Player_Finished_Out_Tasks_Finished()
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str
#ENDIF
INT iDrawSceneRot = 2
#IF IS_DEBUG_BUILD
IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camID)
// DrawLiteralSceneStringFloat("camID phase:",
// GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camID), iDrawSceneRot, HUD_COLOUR_GREEN)
// iDrawSceneRot++
ELSE
// DrawLiteralSceneString("camID phase off", iDrawSceneRot, HUD_COLOUR_REDLIGHT)
// iDrawSceneRot++
ENDIF
IF DOES_CAM_EXIST(sTimetableScene.sScene.sSelectorCam.camTo)
// DrawLiteralSceneStringFloat("camTo phase:",
// GET_CAM_SPLINE_PHASE(sTimetableScene.sScene.sSelectorCam.camTo), iDrawSceneRot, HUD_COLOUR_GREEN)
// iDrawSceneRot++
ELSE
// DrawLiteralSceneString("camTo phase off", iDrawSceneRot, HUD_COLOUR_REDLIGHT)
// iDrawSceneRot++
ENDIF
#ENDIF
PED_COMPONENT ComponentID[3]
INT DrawableID[3], TextureID[3]
IF IS_TIMER_STARTED(tLieInTimer)
IF TIMER_DO_WHEN_READY(tLieInTimer, 90.0)
CPRINTLN(DEBUG_SWITCH,"super duper emergency exit")
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
ENDIF
SWITCH sTimetableScene.eOutTask
CASE SCRIPT_TASK_PLAY_ANIM
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
TEXT_LABEL_63 tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneAnimDict, tPlayerSceneAnimLoop, tPlayerSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneAnimProgress)
#IF IS_DEBUG_BUILD
str = ("finishOut PLAY_ANIM \"")
INT iPlayerSceneAnimOut
iPlayerSceneAnimOut = GET_LENGTH_OF_LITERAL_STRING(tPlayerSceneAnimOut)
CONST_INT iMAX_ANIM_OUT_WIDGET_LENGTH 32
IF (iPlayerSceneAnimOut) <= iMAX_ANIM_OUT_WIDGET_LENGTH
str += (tPlayerSceneAnimOut)
ELSE
str += GET_STRING_FROM_STRING(tPlayerSceneAnimOut,
(iPlayerSceneAnimOut) - iMAX_ANIM_OUT_WIDGET_LENGTH,
GET_LENGTH_OF_LITERAL_STRING(tPlayerSceneAnimOut))
ENDIF
str += ("\"")
#ENDIF
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tPlayerSceneAnimDict, tPlayerSceneAnimOut)
FLOAT fPlayerSceneAnimOutTime
fPlayerSceneAnimOutTime = GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), tPlayerSceneAnimDict, tPlayerSceneAnimOut)
#IF IS_DEBUG_BUILD
str += (": ")
str += GET_STRING_FROM_FLOAT(fPlayerSceneAnimOutTime)
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot += 2
#ENDIF
FLOAT fPlayerSceneAnimUpdateComponentTime
IF GetPlayerAnimComponentForTimetableScene(sTimetableScene.sScene.eScene, fPlayerSceneAnimUpdateComponentTime,
ComponentID, DrawableID, TextureID)
IF (GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), ComponentID[0]) <> DrawableID[0])
OR (GET_PED_TEXTURE_VARIATION(PLAYER_PED_ID(), ComponentID[0]) <> TextureID[0])
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("update ped variation", iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot += 1
#ENDIF
IF NOT bStartPreloadPlayerComponentForScene
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[0], DrawableID[0], TextureID[0])
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[1], DrawableID[1], TextureID[1])
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[2], DrawableID[2], TextureID[2])
bStartPreloadPlayerComponentForScene = TRUE
ENDIF
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene, "TrousersUp",
fPlayerSceneAnimOutTime,
tPlayerSceneAnimDict, tPlayerSceneAnimOut,
iDrawSceneRot)
OR fPlayerSceneAnimOutTime > fPlayerSceneAnimUpdateComponentTime
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[0], DrawableID[0], TextureID[0])
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[1], DrawableID[1], TextureID[1])
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[2], DrawableID[2], TextureID[2])
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ENDIF
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene,
"WalkInterruptible", fPlayerSceneAnimOutTime,
tPlayerSceneAnimDict, tPlayerSceneAnimOut,
iDrawSceneRot)
OR HasAnimEventPassed("WalkInterruptible", fPlayerSceneAnimOutTime,
tPlayerSceneAnimDict, tPlayerSceneAnimOut,
iDrawSceneRot)
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
//
ELSE
IF (GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = PERFORMING_TASK)
STOP_ANIM_PLAYBACK(PLAYER_PED_ID())
ENDIF
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
ENDIF
IF CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
IF fPlayerSceneAnimOutTime > 0.95
// STOP_ANIM_PLAYBACK(PLAYER_PED_ID())
// CLEAR_PED_TASKS(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH,"crossfade phonecall anims")
RETURN TRUE
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
str += (" FINISHED")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 str2
str2 += (" * ")
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
str2 += ("PLAYER IS IN ANY VEHICLE, ")
else
str2 += ("player isn't in any vehicle, ")
endif
if is_ped_sitting_in_any_vehicle(player_ped_id())
str2 += ("IS SITTING IN ANY VEHICLE")
else
str2 += ("isn't sitting in any vehicle, ")
endif
iDrawSceneRot++
DrawLiteralSceneString(str2, iDrawSceneRot, HUD_COLOUR_BLUELIGHT)
iDrawSceneRot++
#ENDIF
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
AND NOT IsPlayerUsingAccelerateOrBrake(scene_veh, iDrawSceneRot)
//
ELSE
IF (GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = PERFORMING_TASK)
STOP_ANIM_PLAYBACK(PLAYER_PED_ID())
ENDIF
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
ENDIF
IF DOES_CAM_EXIST(ExitCamIndex)
IF NOT IS_CAM_RENDERING(ExitCamIndex)
#IF IS_DEBUG_BUILD
iDrawSceneRot++
DrawLiteralSceneString("ExitCamIndex exists", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ELSE
// FLOAT ExitCamSplinePhase
// ExitCamSplinePhase = GET_CAM_SPLINE_PHASE(ExitCamIndex)
FLOAT paramStrength, amplitudeScalar
BOOL bBlankCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bBlankCountsForPubClubVisit)
SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(amplitudeScalar)
SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(amplitudeScalar)
SET_CAM_MOTION_BLUR_STRENGTH(ExitCamIndex, paramStrength)
IF NOT (g_drunkCameraActive)
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ELSE
Update_Drunk_Camera_ParamTime(iCONST_DRUNK_secDuration)
Update_Drunk_Camera_ParamStrength(paramStrength*3.0)
Update_Drunk_Camera_ParamDesiredAmplitude(amplitudeScalar*3.0)
ENDIF
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
g_bDrawDebugDrunkInfo = TRUE
ENDIF
iDrawSceneRot++
DrawLiteralSceneString("ExitCamIndex drunk", /*ExitCamSplinePhase,*/ iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
iDrawSceneRot++
DrawLiteralSceneString("ExitCamIndex rendering", /*ExitCamSplinePhase,*/ iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ENDIF
// IF ExitCamSplinePhase <= 0.99
//
// ELSE
// InterpBackFromSynchCam(ExitCamIndex, TRUE)
// RETURN TRUE
// ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
iDrawSceneRot++
DrawLiteralSceneString("ExitCamIndex DOESNT exist", iDrawSceneRot, HUD_COLOUR_PURPLE, 0.5)
iDrawSceneRot++
#ENDIF
ENDIF
FLOAT paramStrength, amplitudeScalar
BOOL bCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bCountsForPubClubVisit)
// SAVE_STRING_TO_DEBUG_FILE("SHAKE_PLAYER_TIMETABLE_DRUNK_CAM D")
// SAVE_NEWLINE_TO_DEBUG_FILE()
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
g_bDrawDebugDrunkInfo = TRUE
ENDIF
#ENDIF
IF NOT (g_drunkCameraActive)
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ELSE
Update_Drunk_Camera_ParamTime(iCONST_DRUNK_secDuration)
Update_Drunk_Camera_ParamStrength(paramStrength*3.0)
Update_Drunk_Camera_ParamDesiredAmplitude(amplitudeScalar*3.0)
ENDIF
ENDIF
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tPlayerSceneAnimDict, tPlayerSceneAnimOut)
// STOP_ANIM_PLAYBACK(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
IF DOES_CAM_EXIST(ExitCamIndex)
IF IS_CAM_RENDERING(ExitCamIndex)
InterpBackFromSynchCam(ExitCamIndex, TRUE)
ENDIF
ENDIF
RETURN TRUE
ENDIF
ENDIF
IF TIMER_DO_WHEN_READY(tLieInTimer, 30.0)
CPRINTLN(DEBUG_SWITCH, "emergency exit for play anim")
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
FLOAT fPlayerSceneAnimOutTime
#IF IS_DEBUG_BUILD
str = ("finishOut SYNC")
#ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
fPlayerSceneAnimOutTime = GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID)
#IF IS_DEBUG_BUILD
str += (": ")
str += GET_STRING_FROM_FLOAT(fPlayerSceneAnimOutTime)
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
ELSE
fPlayerSceneAnimOutTime = 0.0
#IF IS_DEBUG_BUILD
str += (" FINISHED")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
ENDIF
IF DOES_CAM_EXIST(ExitCamIndex)
IF NOT IS_CAM_RENDERING(ExitCamIndex)
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("ExitCamIndex exists", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ELSE
FLOAT paramStrength, amplitudeScalar
BOOL bBlankCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bBlankCountsForPubClubVisit)
SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(amplitudeScalar)
SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(amplitudeScalar)
SET_CAM_MOTION_BLUR_STRENGTH(ExitCamIndex, paramStrength)
IF NOT (g_drunkCameraActive)
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ELSE
Update_Drunk_Camera_ParamTime(iCONST_DRUNK_secDuration)
Update_Drunk_Camera_ParamStrength(paramStrength*3.0)
Update_Drunk_Camera_ParamDesiredAmplitude(amplitudeScalar*3.0)
ENDIF
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
g_bDrawDebugDrunkInfo = TRUE
ENDIF
DrawLiteralSceneString("ExitCamIndex drunk", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("ExitCamIndex rendering", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("ExitCamIndex DOESNT exist", iDrawSceneRot, HUD_COLOUR_PURPLE)
iDrawSceneRot++
#ENDIF
ENDIF
// IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
// IF bDisableWhileWaiting
// AND NOT bFirstPersonCamQuit
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("Disable 1st ped!", iDrawSceneRot, HUD_COLOUR_YELLOW)
// iDrawSceneRot++
// #ENDIF
//
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ELSE
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("Don't disable 1st ped!", iDrawSceneRot, HUD_COLOUR_YELLOWDARK)
// iDrawSceneRot++
// #ENDIF
// ENDIF
// ENDIF
// ELSE
// IF GET_FOLLOW_VEHICLE_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
// IF bDisableWhileWaiting
// AND NOT bFirstPersonCamQuit
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("Disable 1st veh!", iDrawSceneRot, HUD_COLOUR_YELLOW)
// iDrawSceneRot++
// #ENDIF
//
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ELSE
// #IF IS_DEBUG_BUILD
// DrawLiteralSceneString("Don't disable 1st veh!", iDrawSceneRot, HUD_COLOUR_YELLOWDARK)
// iDrawSceneRot++
// #ENDIF
// ENDIF
// ENDIF
// ENDIF
TEXT_LABEL_63 tPlayerSyncSceneDict, tPlayerSyncSceneLoop, tPlayerSyncSceneOut
ANIMATION_FLAGS playerSyncSceneLoopFlag, playerSyncSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneSyncProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSyncSceneDict, tPlayerSyncSceneLoop, tPlayerSyncSceneOut,
playerSyncSceneLoopFlag, playerSyncSceneOutFlag) //, ePlayerSceneSyncProgress)
FLOAT fPlayerSceneAnimUpdateComponentTime
IF GetPlayerAnimComponentForTimetableScene(sTimetableScene.sScene.eScene,
fPlayerSceneAnimUpdateComponentTime,
ComponentID, DrawableID, TextureID)
IF (GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), ComponentID[0]) <> DrawableID[0])
OR (GET_PED_TEXTURE_VARIATION(PLAYER_PED_ID(), ComponentID[0]) <> TextureID[0])
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("update ped variation ", fPlayerSceneAnimUpdateComponentTime,
iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot += 1
#ENDIF
IF NOT bStartPreloadPlayerComponentForScene
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[0], DrawableID[0], TextureID[0])
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[1], DrawableID[1], TextureID[1])
SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), ComponentID[2], DrawableID[2], TextureID[2])
bStartPreloadPlayerComponentForScene = TRUE
ENDIF
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene, "TrousersUp",
fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
OR fPlayerSceneAnimOutTime > fPlayerSceneAnimUpdateComponentTime
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[0], DrawableID[0], TextureID[0])
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[1], DrawableID[1], TextureID[1])
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), ComponentID[2], DrawableID[2], TextureID[2])
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ENDIF
IF HasQuitCamPhasePassed(sTimetableScene.sScene.eScene, ExitCamIndex,
fPlayerSceneAnimOutTime,
iDrawSceneRot)
InterpBackFromSynchCam(ExitCamIndex, FALSE)
ENDIF
IF HasFirstPersonQuitCamPhasePassed(sTimetableScene.sScene.eScene, ExitCamIndex,
fPlayerSceneAnimOutTime,
iDrawSceneRot)
// bFirstPersonCamQuit = TRUE
InterpBackFromSynchCam(ExitCamIndex, FALSE)
ENDIF
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene,
"WalkInterruptible", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
OR HasAnimEventPassed("WalkInterruptible", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
AND NOT HasQuitAnimPhasePassed(sTimetableScene.sScene.eScene,
fPlayerSceneAnimOutTime,
iDrawSceneRot)
//
ELSE
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "exit scene quit/stick")
IF (sTimetableScene.eVehState <> PTVS_0_noVehicle)
SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
ENDIF
IF DOES_ENTITY_EXIST(player_prop)
AND IS_ENTITY_ATTACHED_TO_ENTITY(player_prop, PLAYER_PED_ID())
SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
AND IS_ENTITY_ATTACHED_TO_ENTITY(player_extra_prop, PLAYER_PED_ID())
SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
ENDIF
// SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
InterpBackFromSynchCam(ExitCamIndex, TRUE)
// FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
//
// RETURN TRUE
ENDIF
IF GET_PLAYER_WARDROBE_ANIM_FOR_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
// BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "wardrobe")
//
// IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
// SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
// ENDIF
// IF DOES_ENTITY_EXIST(player_prop)
// AND IS_ENTITY_ATTACHED_TO_ENTITY(player_prop, PLAYER_PED_ID())
// SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
// ENDIF
// IF DOES_ENTITY_EXIST(player_extra_prop)
// AND IS_ENTITY_ATTACHED_TO_ENTITY(player_extra_prop, PLAYER_PED_ID())
// SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
// ENDIF
// SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
//
// InterpBackFromSynchCam(ExitCamIndex, TRUE)
//
// FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
RETURN TRUE
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_F1_NEWHOUSE)
FLOW_BITSET_IDS eFlowBitsetToQuery
INT iOffsetBitIndex
// Franklin's appartment
//Is this bit in our first or second bitset?
IF ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS) <= 31
eFlowBitsetToQuery = FLOWBITSET_RESTART_FLOW_LAUNCHED_SCRIPTS_1
iOffsetBitIndex = ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS)
ELSE
eFlowBitsetToQuery = FLOWBITSET_RESTART_FLOW_LAUNCHED_SCRIPTS_2
iOffsetBitIndex = ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS) - 31
ENDIF
IF IS_BIT_SET (g_savedGlobals.sFlow.controls.bitsetIDs[eFlowBitsetToQuery], iOffsetBitIndex)
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "wardrobe")
IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
ENDIF
IF DOES_ENTITY_EXIST(player_prop)
AND IS_ENTITY_ATTACHED_TO_ENTITY(player_prop, PLAYER_PED_ID())
SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
AND IS_ENTITY_ATTACHED_TO_ENTITY(player_extra_prop, PLAYER_PED_ID())
SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
ENDIF
SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
InterpBackFromSynchCam(ExitCamIndex, TRUE)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ELSE
//
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("no anim for scene", iDrawSceneRot)
iDrawSceneRot++
#ENDIF
ENDIF
TEXT_LABEL_31 RoomName
FLOAT fTurnOffTVPhase
TV_LOCATION eRoomTVLocation
TVCHANNELTYPE eTVChannelType
TV_CHANNEL_PLAYLIST eTVPlaylist
IF CONTROL_PLAYER_WATCHING_TV(sTimetableScene.sScene.eScene, RoomName, fTurnOffTVPhase, eRoomTVLocation, eTVChannelType, eTVPlaylist)
IF (IS_THIS_TV_FORCED_ON(eRoomTVLocation))
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("NOT ForceAmbientTV: ", fTurnOffTVPhase, iDrawSceneRot, HUD_COLOUR_GREENDARK)
iDrawSceneRot++
#ENDIF
IF fTurnOffTVPhase > 0
IF (fPlayerSceneAnimOutTime > fTurnOffTVPhase)
STOP_AMBIENT_TV_PLAYBACK(eRoomTVLocation)
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("ForceAmbientTV: ", fTurnOffTVPhase, iDrawSceneRot, HUD_COLOUR_GREENLIGHT)
iDrawSceneRot++
#ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 EmitterName
FLOAT fTurnOffRadioPhase
IF SET_SCENE_RADIO_EMITTER_ENABLED(sTimetableScene.sScene.eScene, EmitterName, fTurnOffRadioPhase)
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("NOT ForceAmbientRadio: ", fTurnOffRadioPhase, iDrawSceneRot, HUD_COLOUR_GREENDARK)
iDrawSceneRot++
#ENDIF
IF (fPlayerSceneAnimOutTime > fTurnOffRadioPhase)
SET_STATIC_EMITTER_ENABLED(EmitterName, FALSE)
ENDIF
ENDIF
INT Duration, MinFrequency, MaxFrequency
IF SETUP_SYNCH_SHAKE_EVENT_FOR_SCENE(sTimetableScene.sScene.eScene, Duration, MinFrequency, MaxFrequency)
FLOAT ReturnStartPhase, ReturnEndPhase
IF FIND_ANIM_EVENT_PHASE(tPlayerSyncSceneDict, tPlayerSyncSceneOut,
"PadShake",
ReturnStartPhase, ReturnEndPhase)
IF fPlayerSceneAnimOutTime >= ReturnStartPhase
AND fPlayerSceneAnimOutTime <= ReturnEndPhase
FLOAT fPadShakeMult
fPadShakeMult =(fPlayerSceneAnimOutTime-ReturnStartPhase)/ReturnStartPhase
FLOAT fFrequency
fFrequency = ((MaxFrequency-MinFrequency)*fPadShakeMult)+MinFrequency
INT Frequency
Frequency = ROUND(fFrequency)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "SET_CONTROL_SHAKE(PLAYER_CONTROL, ", Duration, ", ", Frequency, ") //", fPadShakeMult, " [", iShakeTimer - GET_GAME_TIMER(), "]")
#ENDIF
IF iShakeTimer < GET_GAME_TIMER()
SET_CONTROL_SHAKE(PLAYER_CONTROL, Duration, Frequency)
iShakeTimer = GET_GAME_TIMER() + (Duration*2)
ENDIF
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "wait for shake ", ReturnStartPhase, " <= ", fPlayerSceneAnimOutTime, " <= ", ReturnEndPhase)
#ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "no \"PadShake\"")
#ENDIF
ENDIF
ENDIF
IF (sTimetableScene.eBuddyOutTask = sTimetableScene.eOutTask)
TEXT_LABEL_63 tBuddySyncSceneDict, tBuddySyncSceneLoop, tBuddySyncSceneOut
ANIMATION_FLAGS buddySyncSceneLoopFlag, buddySyncSceneOutFlag
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tBuddySyncSceneDict, tBuddySyncSceneLoop, tBuddySyncSceneOut,
buddySyncSceneLoopFlag, buddySyncSceneOutFlag)
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene,
"victim_fall", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
OR HasAnimEventPassed("victim_fall", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
IF NOT IS_ENTITY_DEAD(scene_buddy)
IF NOT IS_PED_RUNNING_RAGDOLL_TASK(scene_buddy)
// CLEAR_PED_TASKS(scene_buddy)
// SET_PED_TO_RAGDOLL_WITH_FALL(scene_buddy, 1000, 3000,
// TYPE_DIE_FROM_HIGH,
// GET_ENTITY_FORWARD_VECTOR(scene_buddy),
// 100.0, <<0.0, 0.0, 0.0>>, <<0.0, 0.0, 0.0>>)
SET_HIGH_FALL_TASK(scene_buddy, 1000, 3000, HIGHFALL_IN_AIR)
ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_INJURED_PED, scene_buddy)
SET_PED_MONEY(scene_buddy, 0) // so he doesnt drop money when dead
SET_ENTITY_HEALTH(scene_buddy, 0)
ENDIF
ENDIF
ENDIF
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene,
"victim_die", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSyncSceneOut,
iDrawSceneRot)
OR HasAnimEventPassed("victim_die", fPlayerSceneAnimOutTime,
tBuddySyncSceneDict, tBuddySyncSceneOut,
iDrawSceneRot)
IF NOT IS_ENTITY_DEAD(scene_buddy)
ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_INJURED_PED, scene_buddy)
SET_PED_MONEY(scene_buddy, 0) // so he doesnt drop money when dead
SET_ENTITY_HEALTH(scene_buddy, 0)
ENDIF
ENDIF
BOOL bCheckForBuddyWalkInterruptible
bCheckForBuddyWalkInterruptible = TRUE
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sTimetableScene.sScene.eScene, sPlayerTimetableAdditional_script)
IF ARE_STRINGS_EQUAL(sPlayerTimetableAdditional_script, "player_scene_m_shopping")
bCheckForBuddyWalkInterruptible = FALSE
ENDIF
ENDIF
IF bCheckForBuddyWalkInterruptible
AND NOT IS_ENTITY_DEAD(scene_buddy)
IF HasAnimEventPassed("END_IN_WALK", fPlayerSceneAnimOutTime, //#1453336
tBuddySyncSceneDict, tBuddySyncSceneOut, iDrawSceneRot)
OR HasAnimEventPassed("WalkInterruptible", fPlayerSceneAnimOutTime, //#1453336
tBuddySyncSceneDict, tBuddySyncSceneOut, iDrawSceneRot)
IF (GET_SCRIPT_TASK_STATUS(scene_buddy, SCRIPT_TASK_GO_STRAIGHT_TO_COORD) <> PERFORMING_TASK)
VECTOR VecOffset
VecOffset = (GET_ENTITY_COORDS(scene_buddy)-sTimetableScene.sScene.vCreateCoords)
//#1533821
IF sTimetableScene.sScene.eScene = PR_SCENE_F_LAMTAUNT_NIGHT
VecOffset = (<<168.6380, -1666.2222, 30.2691>>-GET_ENTITY_COORDS(scene_buddy))
ENDIF
CPRINTLN(DEBUG_SWITCH, "buddy END_IN_WALK, VecOffset: ")
CPRINTLN(DEBUG_SWITCH, vecOffset)
TASK_GO_STRAIGHT_TO_COORD(scene_buddy,
GET_ENTITY_COORDS(scene_buddy) + VecOffset,
PEDMOVE_WALK, -1)
FORCE_PED_MOTION_STATE(scene_buddy, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(scene_buddy)
ELSE
CPRINTLN(DEBUG_SWITCH, "buddy SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "buddy no WalkInterruptible???")
ENDIF
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
IF fPlayerSceneAnimOutTime >= 0.883
AND NOT IS_ENTITY_DEAD(scene_buddy)
// IF IS_ENTITY_VISIBLE(scene_buddy)
// SET_ENTITY_VISIBLE(scene_buddy, FALSE)
fPlayerDoorOverridePhase = fPlayerSceneAnimOutTime
// ENDIF
ENDIF
ENDIF
ENDIF
ELIF (sTimetableScene.eBuddyOutTask = SCRIPT_TASK_STAND_STILL) //PR_SCENE_M7_FAKEYOGA
// OR (sTimetableScene.eBuddyOutTask = SCRIPT_TASK_PLAY_ANIM) //PR_SCENE_M_VWOODPARK_a/b
IF NOT bBuddyPostOutTasksPerformed
FLOAT fBuddyExitPhase
IF IS_BUDDY_QUITING_EXIT_TIMETABLE_SCENE(sTimetableScene.sScene.eScene, fBuddyExitPhase)
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("fBuddyExitPhase: ", fBuddyExitPhase, iDrawSceneRot, HUD_COLOUR_ORANGE)
iDrawSceneRot++
#ENDIF
IF (fPlayerSceneAnimOutTime > fBuddyExitPhase)
Control_Buddy_PostOut_Tasks()
Control_Buddy_PostOut_FriendEvents()
bBuddyPostOutTasksPerformed = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncAnimVehExit
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimVehExit)
IF NOT IS_ENTITY_DEAD(scene_veh)
SET_VEH_FORCED_RADIO_THIS_FRAME(scene_veh)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(scene_veh)
REQUEST_VEHICLE_DIAL(scene_veh)
IF HasAnimPhasePassed_SCRIPT(sTimetableScene.sScene.eScene,
"close_veh_doors", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSceneSyncAnimVehExit,
iDrawSceneRot)
OR (sTimetableScene.sScene.eScene != PR_SCENE_M7_OPENDOORFORAMA
AND HasAnimEventPassed("close_veh_doors", fPlayerSceneAnimOutTime,
tPlayerSyncSceneDict, tPlayerSceneSyncAnimVehExit,
iDrawSceneRot))
SET_VEHICLE_DOORS_SHUT(scene_veh)
ENDIF
ENDIF
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "exit scene not running")
SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
// SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID) //not required #605445
InterpBackFromSynchCam(ExitCamIndex, TRUE)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
RETURN TRUE
ELSE
IF DOES_ENTITY_EXIST(player_prop)
TEXT_LABEL_63 tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject
INT iFlags
IF GET_SYNCHRONIZED_OBJ_FOR_TIMETABLE_EXIT_SCENE(sTimetableScene.sScene.eScene, tPlayerSceneSyncObject, tPlayerSceneSyncExtraObject, iFlags)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSyncLoopProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSyncLoopProgress)
IF NOT IS_ENTITY_PLAYING_ANIM(player_prop,
tPlayerSceneSyncAnimDict,
tPlayerSceneSyncObject, ANIM_SYNCED_SCENE)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_prop,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncObject, tPlayerSceneSyncAnimDict,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, iFlags)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(player_prop)
CPRINTLN(DEBUG_SWITCH, "PLAY_SYNCHRONIZED_ENTITY_ANIM")
ELSE
CPRINTLN(DEBUG_SWITCH, "is playing anim")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "no anim dict")
ENDIF
ELSE
CDEBUG3LN(DEBUG_SWITCH, "no object anim")
ENDIF
// ELSE
// CPRINTLN(DEBUG_SWITCH, "doesnt exist")
ENDIF
FLOAT fBlendOutOfSynchPhase
fBlendOutOfSynchPhase = 1.0
FLOAT fBlendin, fBlendOut
SYNCED_SCENE_PLAYBACK_FLAGS scpf_Flags
RAGDOLL_BLOCKING_FLAGS ragdollFlags
IK_CONTROL_FLAGS ikFlags
P_GET_PLAYER_SYNCHRONIZED_SCENE_DATA(sTimetableScene.sScene.eScene, scpf_Flags, fBlendin, fBlendOut, ragdollFlags, ikFlags)
IF IS_BITMASK_ENUM_AS_ENUM_SET(scpf_Flags, SYNCED_SCENE_TAG_SYNC_OUT)
fBlendOutOfSynchPhase = 0.95
ENDIF
IF CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
fBlendOutOfSynchPhase = 0.85
ENDIF
IF GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID) >= fBlendOutOfSynchPhase
TEXT_LABEL_63 strBlend
strBlend = "exit scene >= "
#IF IS_DEBUG_BUILD
strBlend += GET_STRING_FROM_FLOAT(fBlendOutOfSynchPhase)
#ENDIF
#IF NOT IS_DEBUG_BUILD
strBlend += ROUND(fBlendOutOfSynchPhase)
#ENDIF
IF NOT CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, strBlend)
ELSE
TASK_PLAY_ANIM(PLAYER_PED_ID(),
"SWITCH@MICHAEL@BENCH",
"CELLPHONE_CALL_LISTEN_BASE",
INSTANT_BLEND_IN, FAST_BLEND_OUT, -1,
AF_SECONDARY|AF_LOOPING|AF_UPPERBODY|AF_HOLD_LAST_FRAME)
//SET_ANIM_FILTER(PLAYER_PED_ID(), "BONEMASK_HEAD_NECK_AND_R_ARM") //#1556528
ENDIF
SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
InterpBackFromSynchCam(ExitCamIndex, TRUE)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
RETURN TRUE
ENDIF
MODEL_NAMES eDoorModel_L, eDoorModel_R
VECTOR vDoorOffset_L, vDoorOffset_R
DOOR_HASH_ENUM eDoorHash_L, eDoorHash_R
BOOL bReplaceDoor
FLOAT fHideDoorRadius
IF GET_DOORS_FOR_SCENE(sTimetableScene.sScene.eScene,
eDoorModel_L, eDoorModel_R, vDoorOffset_L, vDoorOffset_R, eDoorHash_L, eDoorHash_R,
bReplaceDoor, fHideDoorRadius)
IF DOES_ENTITY_EXIST(player_door_l)
IF GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID) < fPlayerDoorOverridePhase
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_L))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_L), DOORSTATE_FORCE_OPEN_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L), 1.0, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(R:", ENUM_TO_INT(eDoorHash_L), ", 1.0)")
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(R:", ENUM_TO_INT(eDoorHash_L), ")")
ENDIF
ELSE
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_L))
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L), 0.0, DEFAULT, TRUE)
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_L), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
FLOAT fDoorRatio
fDoorRatio = DOOR_SYSTEM_GET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_L))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(R:", ENUM_TO_INT(eDoorHash_L), ", 0.0) //", fDoorRatio, " d:", ABSF(fDoorRatio) < 0.0005, " b:", bReplaceDoor, " r:", fHideDoorRadius > 0)
#ENDIF
IF ABSF(fDoorRatio) < 0.0005
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_L), DOORSTATE_FORCE_CLOSED_THIS_FRAME, DEFAULT, TRUE)
IF bReplaceDoor
IF (fHideDoorRadius > 0)
DELETE_OBJECT(player_door_l)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_L, fHideDoorRadius, eDoorModel_L)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_l)
ENDIF
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(R:", ENUM_TO_INT(eDoorHash_L), ")")
IF bReplaceDoor
IF (fHideDoorRadius > 0)
DELETE_OBJECT(player_door_l)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_L, fHideDoorRadius, eDoorModel_L)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_l)
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_door_r)
IF GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID) < fPlayerDoorOverridePhase
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_R))
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_R), DOORSTATE_FORCE_OPEN_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R), 1.0, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(R:", ENUM_TO_INT(eDoorHash_R), ", 1.0) - open")
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(R:", ENUM_TO_INT(eDoorHash_R), ")")
ENDIF
ELSE
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(eDoorHash_R))
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R), 0.0, DEFAULT, TRUE)
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(eDoorHash_R), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
FLOAT fDoorRatio
fDoorRatio = DOOR_SYSTEM_GET_OPEN_RATIO(ENUM_TO_INT(eDoorHash_R))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_OPEN_RATIO(R:", ENUM_TO_INT(eDoorHash_R), ", 0.0) //", fDoorRatio, " d:", ABSF(fDoorRatio) < 0.0005, " b:", bReplaceDoor, " r:", fHideDoorRadius > 0)
#ENDIF
IF ABSF(fDoorRatio) < 0.0005
IF bReplaceDoor
IF (fHideDoorRadius > 0)
DELETE_OBJECT(player_door_r)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_R, fHideDoorRadius, eDoorModel_r)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_r)
ENDIF
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "NOT IS_DOOR_REGISTERED_WITH_SYSTEM(R:", ENUM_TO_INT(eDoorHash_R), ")")
IF bReplaceDoor
IF (fHideDoorRadius > 0)
DELETE_OBJECT(player_door_r)
REMOVE_MODEL_HIDE(sTimetableScene.sScene.vCreateCoords+vDoorOffset_R, fHideDoorRadius, eDoorModel_r)
ENDIF
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(player_door_r)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
#IF IS_DEBUG_BUILD
str = ("finishOut VEHICLE_DRIVE_TO_COORD")
str += (" = ")
SWITCH GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD)
CASE WAITING_TO_START_TASK str += ("WAITING_TO_START") BREAK
CASE PERFORMING_TASK str += ("PERFORMING") BREAK
CASE DORMANT_TASK str += ("DORMANT") BREAK
CASE VACANT_STAGE str += ("VACANT_STAGE") BREAK
CASE GROUP_TASK_STAGE str += ("GROUP_TASK_STAGE") BREAK
CASE ATTRACTOR_SCRIPT_TASK_STAGE str += ("ATTRACTOR_SCRIPT_TASK_STAGE") BREAK
CASE SECONDARY_TASK_STAGE str += ("SECONDARY_TASK_STAGE") BREAK
CASE FINISHED_TASK str += ("FINISHED") BREAK
DEFAULT
str += ("???invalid task???")
BREAK
ENDSWITCH
str += " time:"
IF NOT IS_TIMER_STARTED(tLieInTimer)
str += "off"
ELSE
str += GET_STRING_FROM_FLOAT(GET_TIMER_IN_SECONDS(tLieInTimer))
ENDIF
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF DOES_ENTITY_EXIST(scene_veh)
IF NOT IS_VEHICLE_DRIVEABLE(scene_veh)
CPRINTLN(DEBUG_SWITCH,"emergency exit for undrivable vehicle")
CLEAR_PED_TASKS(PLAYER_PED_ID())
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
ENDIF
RETURN TRUE
ENDIF
ENDIF
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
AND NOT IsPlayerUsingAccelerateOrBrake(scene_veh, iDrawSceneRot)
//
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
IF IS_PED_ON_MOUNT(PLAYER_PED_ID())
PED_INDEX playersMount_ped
playersMount_ped = GET_MOUNT(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(playersMount_ped)
CLEAR_PED_TASKS(playersMount_ped)
ENDIF
ENDIF
RETURN TRUE
ENDIF
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
IF TIMER_DO_WHEN_READY(tLieInTimer, 5.0)
CPRINTLN(DEBUG_SWITCH, "emergency exit for driving tasks")
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
//#467997 - dont do anything if the buddy is exitting
IF NOT IS_PED_INJURED(scene_buddy)
AND IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PED_IN_VEHICLE(scene_buddy, scene_veh)
IF NOT IS_PED_SITTING_IN_VEHICLE(scene_buddy, scene_veh)
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("buddy leaving veh", iDrawSceneRot, HUD_COLOUR_RED)
iDrawSceneRot++
#ENDIF
// ar_SET_VEHICLE_FORWARD_SPEED(scene_veh, 0.0)
TASK_VEHICLE_TEMP_ACTION(PLAYER_PED_ID(),scene_veh,
TEMPACT_HANDBRAKESTRAIGHT, 0050)
RETURN FALSE
ENDIF
ENDIF
ENDIF
IF NOT IS_PED_ON_MOUNT(PLAYER_PED_ID())
IF bDisableWhileWaiting
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = PERFORMING_TASK
bDisableWhileWaiting = FALSE
ENDIF
ENDIF
RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD) = FINISHED_TASK
ELSE
PED_INDEX playersMount_ped
playersMount_ped = GET_MOUNT(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(playersMount_ped)
RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) = FINISHED_TASK
ENDIF
RETURN FALSE
ENDIF
BREAK
CASE SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING
#IF IS_DEBUG_BUILD
str = ("finishOut VEHICLE_RECORDING")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
FLOAT fTimePositionInSceneVehRecording
fTimePositionInSceneVehRecording = GET_TIME_POSITION_IN_RECORDING(scene_veh)
#IF IS_DEBUG_BUILD
str = ("rec time: ")
str += GET_STRING_FROM_FLOAT(fTimePositionInSceneVehRecording)
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(scene_veh), 1.0, HUD_COLOUR_blue)
str = "rec: "
str += tRecordingName
str += iRecordingNum
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(scene_veh), 2.0, HUD_COLOUR_blue)
FLOAT fPlaybackPhase
fPlaybackPhase = GET_TIME_POSITION_IN_RECORDING(scene_veh) / GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(iRecordingNum, tRecordingName)
str = "fPlaybackPhase: "
str += GET_STRING_FROM_FLOAT(fPlaybackPhase)
DrawDebugSceneTextWithOffset(str, GET_ENTITY_COORDS(scene_veh), 3.0, HUD_COLOUR_blue)
IF g_bDrawLiteralSceneString
ar_DISPLAY_PLAYBACK_RECORDED_VEHICLE(scene_veh, RDM_WHOLELINE)
ENDIF
#ENDIF
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
OR GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT
OR GET_PLAYER_SWITCH_STATE() >= SWITCH_STATE_OUTRO_HOLD
// Restore full playback speed, now that we are passed the final jump cut
SET_PLAYBACK_SPEED(scene_veh, 1.0)
ENDIF
IF IsPlayerMovingLeftStick(iDrawSceneRot)
OR IsPlayerUsingAccelerateOrBrake(scene_veh, iDrawSceneRot)
OR StopPlaybackPlayersRecordedVehicle(iDrawSceneRot, fTimePositionInSceneVehRecording)
STOP_PLAYBACK_RECORDED_VEHICLE(scene_veh)
ENDIF
ENDIF
/* let code do it
SET_CONTROL_SHAKE(PLAYER_CONTROL, 0, 0)
*/
RETURN NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
ELSE
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_GO_STRAIGHT_TO_COORD
CASE SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD
CASE SCRIPT_TASK_WANDER_STANDARD
#IF IS_DEBUG_BUILD
str = ("finishOut ")
IF (sTimetableScene.eOutTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD)
str += "GO_STRAIGHT_TO_COORD"
ELIF (sTimetableScene.eOutTask = SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD)
str += "FOLLOW_NAV_MESH_TO_COORD"
ELIF (sTimetableScene.eOutTask = SCRIPT_TASK_WANDER_STANDARD)
str += "WANDER_STANDARD"
ENDIF
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot += 2
str = " time:"
IF NOT IS_TIMER_STARTED(tLieInTimer)
str += "off"
ELSE
str += GET_STRING_FROM_FLOAT(GET_TIMER_IN_SECONDS(tLieInTimer))
ENDIF
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot += 2
#ENDIF
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
//
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
IF IS_PED_ON_MOUNT(PLAYER_PED_ID())
PED_INDEX playersMount_ped
playersMount_ped = GET_MOUNT(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(playersMount_ped)
CLEAR_PED_TASKS(playersMount_ped)
ENDIF
ENDIF
bDisableWhileWaiting = FALSE
RETURN TRUE
ENDIF
IF TIMER_DO_WHEN_READY(tLieInTimer, 5.0)
CPRINTLN(DEBUG_SWITCH, "emergency exit for goto coord tasks")
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
IF bDisableWhileWaiting
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = PERFORMING_TASK
bDisableWhileWaiting = FALSE
ENDIF
ENDIF
IF sTimetableScene.eOutTask = SCRIPT_TASK_WANDER_STANDARD
IF TIMER_DO_WHEN_READY(tLieInTimer, 2.5)
CPRINTLN(DEBUG_SWITCH, "emergency exit for goto coord tasks")
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
NAVMESH_ROUTE_RESULT enavmesh_route_result
FLOAT fOut_DistanceRemaining
INT iOut_ThisIsLastRouteSection
enavmesh_route_result = GET_NAVMESH_ROUTE_DISTANCE_REMAINING(PLAYER_PED_ID(), fOut_DistanceRemaining, iOut_ThisIsLastRouteSection)
IF enavmesh_route_result = NAVMESHROUTE_ROUTE_NOT_FOUND
TASK_WANDER_STANDARD(PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "wander again??")
RETURN FALSE
ENDIF
ENDIF
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = FINISHED_TASK
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE SCRIPT_TASK_ENTER_VEHICLE
#IF IS_DEBUG_BUILD
str = ("finishOut ENTER_VEHICLE")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
RETURN IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
ELSE
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_LEAVE_VEHICLE
#IF IS_DEBUG_BUILD
str = ("finishOut LEAVE_VEHICLE")
IF NOT IS_TIMER_STARTED(tLieInTimer)
str += (" timer")
ENDIF
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh, TRUE)
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
IF TIMER_DO_WHEN_READY(tLieInTimer, 1.5)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
BREAK
CASE SCRIPT_TASK_STAND_STILL
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
FLOAT fScene_veh_speed
fScene_veh_speed = GET_ENTITY_SPEED(scene_veh)
#IF IS_DEBUG_BUILD
str = ("finishOut COORS_TARGET ")
DrawLiteralSceneStringFloat(str, fScene_veh_speed, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF fScene_veh_speed <= 1.0
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
IF IsPlayerMovingLeftStick(iDrawSceneRot)
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
RETURN FALSE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
str = ("finishOut STAND_STILL")
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
RETURN TRUE
BREAK
CASE SCRIPT_TASK_ACHIEVE_HEADING
#IF IS_DEBUG_BUILD
str = ("finishOut ACHIEVE_HEADING")
str += (" = ")
SWITCH GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_ACHIEVE_HEADING)
CASE WAITING_TO_START_TASK str += ("WAITING_TO_START") BREAK
CASE PERFORMING_TASK str += ("PERFORMING") BREAK
CASE DORMANT_TASK str += ("DORMANT") BREAK
CASE VACANT_STAGE str += ("VACANT_STAGE") BREAK
CASE GROUP_TASK_STAGE str += ("GROUP_TASK_STAGE") BREAK
CASE ATTRACTOR_SCRIPT_TASK_STAGE str += ("ATTRACTOR_SCRIPT_TASK_STAGE") BREAK
CASE SECONDARY_TASK_STAGE str += ("SECONDARY_TASK_STAGE") BREAK
CASE FINISHED_TASK str += ("FINISHED") BREAK
DEFAULT
str += ("???invalid task???")
BREAK
ENDSWITCH
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_ACHIEVE_HEADING) = FINISHED_TASK
BREAK
CASE SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER
#IF IS_DEBUG_BUILD
str = ("finishOut PUT_PED_DIRECTLY_INTO_COVER")
str += (" = ")
SWITCH GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER)
CASE WAITING_TO_START_TASK str += ("WAITING_TO_START") BREAK
CASE PERFORMING_TASK str += ("PERFORMING") BREAK
CASE DORMANT_TASK str += ("DORMANT") BREAK
CASE VACANT_STAGE str += ("VACANT_STAGE") BREAK
CASE GROUP_TASK_STAGE str += ("GROUP_TASK_STAGE") BREAK
CASE ATTRACTOR_SCRIPT_TASK_STAGE str += ("ATTRACTOR_SCRIPT_TASK_STAGE") BREAK
CASE SECONDARY_TASK_STAGE str += ("SECONDARY_TASK_STAGE") BREAK
CASE FINISHED_TASK str += ("FINISHED") BREAK
DEFAULT
str += ("???invalid task???")
BREAK
ENDSWITCH
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF NOT IS_TIMER_STARTED(tLieInTimer)
START_TIMER_NOW(tLieInTimer)
ENDIF
IF TIMER_DO_WHEN_READY(tLieInTimer, 10.0)
CLEAR_PED_TASKS(PLAYER_PED_ID())
CANCEL_TIMER(tLieInTimer)
ENDIF
//fix for B*1565359, treat post Franklin 1 switches as special case and end script when player moves away from coverpoint
RETURN (GET_DISTANCE_BETWEEN_COORDS(sTimetableScene.sScene.vCreateCoords, GET_ENTITY_COORDS(PLAYER_PED_ID()), FALSE) > 3.0)
//RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) = FINISHED_TASK
BREAK
CASE SCRIPT_TASK_AIM_GUN_AT_ENTITY
#IF IS_DEBUG_BUILD
str = ("finishOut AIM_GUN_AT_ENTITY")
str += (" = ")
SWITCH GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_AT_ENTITY)
CASE WAITING_TO_START_TASK str += ("WAITING_TO_START") BREAK
CASE PERFORMING_TASK str += ("PERFORMING") BREAK
CASE DORMANT_TASK str += ("DORMANT") BREAK
CASE VACANT_STAGE str += ("VACANT_STAGE") BREAK
CASE GROUP_TASK_STAGE str += ("GROUP_TASK_STAGE") BREAK
CASE ATTRACTOR_SCRIPT_TASK_STAGE str += ("ATTRACTOR_SCRIPT_TASK_STAGE") BREAK
CASE SECONDARY_TASK_STAGE str += ("SECONDARY_TASK_STAGE") BREAK
CASE FINISHED_TASK str += ("FINISHED") BREAK
DEFAULT
str += ("???invalid task???")
BREAK
ENDSWITCH
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
IF IsPlayerMovingLeftStick(iDrawSceneRot)
CLEAR_PED_TASKS(PLAYER_PED_ID())
RETURN TRUE
ENDIF
RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_AT_ENTITY) = FINISHED_TASK
BREAK
CASE SCRIPT_TASK_USE_MOBILE_PHONE
#IF IS_DEBUG_BUILD
str = ("finishOut USE_MOBILE_PHONE")
str += (" = ")
SWITCH GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_USE_MOBILE_PHONE)
CASE WAITING_TO_START_TASK str += ("WAITING_TO_START") BREAK
CASE PERFORMING_TASK str += ("PERFORMING") BREAK
CASE DORMANT_TASK str += ("DORMANT") BREAK
CASE VACANT_STAGE str += ("VACANT_STAGE") BREAK
CASE GROUP_TASK_STAGE str += ("GROUP_TASK_STAGE") BREAK
CASE ATTRACTOR_SCRIPT_TASK_STAGE str += ("ATTRACTOR_SCRIPT_TASK_STAGE") BREAK
CASE SECONDARY_TASK_STAGE str += ("SECONDARY_TASK_STAGE") BREAK
CASE FINISHED_TASK str += ("FINISHED") BREAK
DEFAULT
str += ("???invalid task???")
BREAK
ENDSWITCH
DrawLiteralSceneString(str, iDrawSceneRot, HUD_COLOUR_blue)
iDrawSceneRot++
#ENDIF
// IF IsPlayerMovingLeftStick(iDrawSceneRot)
// CLEAR_PED_TASKS(PLAYER_PED_ID())
// RETURN TRUE
// ENDIF
//
// RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_USE_MOBILE_PHONE) = FINISHED_TASK
RETURN HAS_CELLPHONE_CALL_FINISHED()
BREAK
CASE SCRIPT_TASK_ANY FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eTask for Control_player_finishing_out_Tasks: "
sInvalid += ENUM_TO_INT(sTimetableScene.eOutTask)
sInvalid += " //"
sInvalid += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
SCRIPT_ASSERT(sInvalid)
#ENDIF
IF (sTimetableScene.eOutTask <> SCRIPT_TASK_ANY)
RETURN GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), sTimetableScene.eOutTask) = FINISHED_TASK
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sUnknown
sUnknown = "unknown eTask for Control_player_finishing_out_Tasks: "
sUnknown += ENUM_TO_INT(sTimetableScene.eOutTask)
sUnknown += " //"
sUnknown += Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sUnknown)
SCRIPT_ASSERT(sUnknown)
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Has_Player_Finished_Timetabled_Scene()
INT iDrawSceneRot
IF NOT bHave_Created_Switch_Scene_Conversation
IF Create_Switch_Scene_Conversation()
bHave_Created_Switch_Scene_Conversation = TRUE
ENDIF
ELSE
IF NOT bHave_Played_Switch_Scene_Speech_Facial
TEXT_LABEL_63 tFacialClip
IF GET_SPEECH_FACIAL_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene, tFacialClip)
TEXT_LABEL_63 tPlayerSceneFacialAnimDict, tPlayerSceneFacialAnimLoop, tPlayerSceneFacialAnimOut
ANIMATION_FLAGS playerFacialLoopFlag, playerFacialOutFlag
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneFacialAnimDict, tPlayerSceneFacialAnimLoop, tPlayerSceneFacialAnimOut,
playerFacialLoopFlag, playerFacialOutFlag)
CPRINTLN(DEBUG_SWITCH, " TASK_PLAY_FACIAL_ANIM(PLAYER_PED_ID(), \"", tPlayerSceneFacialAnimDict, "\", \"", tFacialClip, "\")")
TASK_PLAY_ANIM(PLAYER_PED_ID(), tPlayerSceneFacialAnimDict, tFacialClip,
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
bHave_Played_Switch_Scene_Speech_Facial = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
TEXT_LABEL_31 tContext
FLOAT fSceneContextPhase = -1
BOOL bPlayerSpeaks
IF SETUP_TIMETABLE_CONTEXT_FOR_SCENE(sTimetableScene.sScene.eScene, tContext, fSceneContextPhase, bPlayerSpeaks)
IF (fSceneContextPhase >= 0)
AND NOT (bPlayed_Switch_Scene_Context)
TEXT_LABEL_63 tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut
ANIMATION_FLAGS playerSceneLoopFlag, playerSceneOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene,
tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimLoop, tPlayerSceneSceneAnimOut,
playerSceneLoopFlag, playerSceneOutFlag) //, ePlayerSceneAnimProgress)
FLOAT fPlayer_anim_current_time
IF Get_Ped_Anim_Or_SynchedScene_Phase(PLAYER_PED_ID(), tPlayerSceneSceneAnimDict, tPlayerSceneSceneAnimOut, fPlayer_anim_current_time)
//
IF (fPlayer_anim_current_time >= fSceneContextPhase)
#IF IS_DEBUG_BUILD
IF IS_ANY_SPEECH_PLAYING(PLAYER_PED_ID())
OR (NOT IS_PED_INJURED(scene_buddy) AND IS_ANY_SPEECH_PLAYING(scene_buddy))
fSceneContextPhase *= GET_RANDOM_FLOAT_IN_RANGE(1.0100, 1.0900)
SAVE_STRING_TO_DEBUG_FILE("fSceneContextPhase = ")
SAVE_FLOAT_TO_DEBUG_FILE(fSceneContextPhase)
SAVE_NEWLINE_TO_DEBUG_FILE()
CPRINTLN(DEBUG_SWITCH, "fSceneContextPhase = ", fSceneContextPhase)
TEXT_LABEL_63 sScene, sInvalid
sScene = Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
sInvalid = "speech going during fSceneContextPhase "
sInvalid += GET_STRING_FROM_FLOAT(fSceneContextPhase)
sInvalid += ": "
sInvalid += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
CPRINTLN(DEBUG_SWITCH, "player_timetable_scene: ", sInvalid)
RETURN FALSE
ENDIF
#ENDIF
IF bPlayerSpeaks
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), tContext)
ELSE
PLAY_PED_AMBIENT_SPEECH(scene_buddy, tContext)
ENDIF
bPlayed_Switch_Scene_Context = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_BUDDY_ASLEEP_FOR_TIMETABLE_SCENE(sTimetableScene.sScene.eScene)
IF NOT IS_PED_INJURED(scene_buddy)
PRIVATE_Update_Family_Sleeping(scene_buddy)
ENDIF
ENDIF
// IF NOT bHave_Triggered_Music_Event
// IF (sTimetableScene.sScene.eScene = PR_SCENE_M_MD_FBI2)
// IF TRIGGER_MUSIC_EVENT("FIB2_CAR_TO_CS")
// bHave_Triggered_Music_Event = TRUE
// ENDIF
// ENDIF
// ENDIF
IF Has_Player_Finished_Out_Tasks_Finished()
IF NOT IS_PED_INJURED(scene_buddy)
IF NOT bBuddyPostOutTasksPerformed
Control_Buddy_PostOut_Tasks()
Control_Buddy_PostOut_FriendEvents()
bBuddyPostOutTasksPerformed = TRUE
ENDIF
ENDIF
FLOAT paramStrength, amplitudeScalar
BOOL bCountsForPubClubVisit
IF SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(sTimetableScene.sScene.eScene, paramStrength, amplitudeScalar, bCountsForPubClubVisit)
// SAVE_STRING_TO_DEBUG_FILE("SHAKE_PLAYER_TIMETABLE_DRUNK_CAM D")
// SAVE_NEWLINE_TO_DEBUG_FILE()
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
g_bDrawDebugDrunkInfo = TRUE
ENDIF
#ENDIF
IF NOT (g_drunkCameraActive)
Activate_Drunk_Camera(iCONST_DRUNK_secDuration, iCONST_SOBER_secDuration, paramStrength, amplitudeScalar, ExitCamIndex)
ELSE
Update_Drunk_Camera_ParamTime(iCONST_DRUNK_secDuration)
Update_Drunk_Camera_ParamStrength(paramStrength*3.0)
Update_Drunk_Camera_ParamDesiredAmplitude(amplitudeScalar*3.0)
ENDIF
IF NOT Is_Ped_Drunk(PLAYER_PED_ID())
Make_Ped_Drunk(PLAYER_PED_ID(), iCONST_DRUNK_secDuration)
ELSE
Extend_Overall_Drunk_Time(PLAYER_PED_ID(), iCONST_DRUNK_secDuration)
ENDIF
IF bCountsForPubClubVisit
BawsaqIncrementDrunkModifier_PUBCLUBVISIT()
ENDIF
ENDIF
RETURN TRUE
ENDIF
IF (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_CHECKSHOE)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_WIPEHANDS)
OR (sTimetableScene.sScene.eScene = PR_SCENE_F_CS_WIPERIGHT)
IF NOT IS_PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR(AUTODOOR_HAYES_GARAGE, PLAYER_PED_ID())
REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR(AUTODOOR_HAYES_GARAGE, PLAYER_PED_ID())
CPRINTLN(DEBUG_SWITCH, "REGISTER_PED_TO_ACTIVATE_AUTOMATIC_DOOR...")
ELSE
CPRINTLN(DEBUG_SWITCH, "PED_REGISTERED_TO_ACTIVATE_AUTOMATIC_DOOR...")
ENDIF
ELIF (sTimetableScene.sScene.eScene = PR_SCENE_M7_KIDS_GAMING)
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_SON))
ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_SON), V_ILEV_MM_DOORSON, <<-806.8,174.0,76.9>>)
CPRINTLN(DEBUG_SWITCH, "ADD_DOOR_TO_SYSTEM...")
ELSE
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_SON), DOORSTATE_FORCE_LOCKED_THIS_FRAME, DEFAULT, TRUE)
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_SON), -1, DEFAULT, TRUE)
CPRINTLN(DEBUG_SWITCH, "DOOR_SYSTEM_SET_DOOR_STATE(M_MANSION_SON)")
ENDIF
ENDIF
//detach prop when requested
SetPedFromSynchedSceneIntoObject(player_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, FALSE)
SetPedFromSynchedSceneIntoObject(player_extra_prop, sTimetableScene.sScene.eScene, iDrawSceneRot, TRUE)
// #IF IS_DEBUG_BUILD
// //DrawDebugSceneCamInfo() //1218160
// #ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Has_Player_Finished_Wardrobe_Scene()
VECTOR vFloydSceneCoord = <<-812.003,173.700,75.741>>
VECTOR vFloydSceneRot = <<0,0,-74.00+90.00>>
TEXT_LABEL_31 sWardrobeDict = "switch@michael@closet"
TEXT_LABEL sWardrobeClip = ""
CAMERA_INDEX wardrobeCamIndex
CONST_INT iWardrobe_Stage_0 0
CONST_INT iWardrobe_Stage_1 1
CONST_INT iWardrobe_Stage_2 2
CONST_INT iWardrobe_Stage_null -1
#IF IS_DEBUG_BUILD
BOOL bMoveScene
FLOAT fScenePhase
SET_CURRENT_WIDGET_GROUP(player_timetable_scene_widget)
START_WIDGET_GROUP(sWardrobeDict)
ADD_WIDGET_BOOL("bMoveScene", bMoveScene)
ADD_WIDGET_VECTOR_SLIDER("vFloydSceneCoord", vFloydSceneCoord, -1000, 1000, 0.1)
ADD_WIDGET_VECTOR_SLIDER("vFloydSceneRot", vFloydSceneRot, -360, 360, 0.1)
ADD_WIDGET_FLOAT_SLIDER("fScenePhase", fScenePhase, 0, 1, 0.001)
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(player_timetable_scene_widget)
#ENDIF
INT iWardrobeStage = iWardrobe_Stage_0, iWardrobeSceneID = -1, iWardrobeGameTimer = -1
WHILE (iWardrobeStage > iWardrobe_Stage_null)
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringInt("iWardrobeStage ", iWardrobeStage, 0, HUD_COLOUR_PURPLELIGHT)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iWardrobeSceneID)
DrawLiteralSceneStringFloat("phase ", fScenePhase, 1, HUD_COLOUR_PURPLELIGHT)
ELSE
DrawLiteralSceneString("phase NULL ", 1, HUD_COLOUR_PURPLELIGHT)
ENDIF
#ENDIF
SWITCH iWardrobeStage
CASE iWardrobe_Stage_0
bDisableWhileWaiting = TRUE
REQUEST_ANIM_DICT(sWardrobeDict)
IF HAS_ANIM_DICT_LOADED(sWardrobeDict)
sWardrobeClip = "closet_c"
//
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "wardrobe")
IF (sTimetableScene.eVehState = PTVS_2_playerInVehicle)
SetPedFromSynchedSceneIntoVehicle(sTimetableScene.sScene.eScene)
ENDIF
IF DOES_ENTITY_EXIST(player_prop)
MODEL_NAMES eObjectModel
VECTOR vecOffset , vecRotation
PED_BONETAG eBonetag
FLOAT fDetachAnimPhase
enumPlayerSceneObjectAction thisSceneObjectAction
eObjectModel = DUMMY_MODEL_FOR_SCRIPT
vecOffset = <<0,0,0>>
vecRotation = <<0,0,0>>
eBonetag = BONETAG_NULL
fDetachAnimPhase = -1.0
thisSceneObjectAction = PSOA_NULL
IF GET_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_prop, thisSceneObjectAction)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(player_extra_prop)
MODEL_NAMES eObjectModel
VECTOR vecOffset , vecRotation
PED_BONETAG eBonetag
FLOAT fDetachAnimPhase
enumPlayerSceneObjectAction thisSceneObjectAction
BOOL bAttachedToBuddy
eObjectModel = DUMMY_MODEL_FOR_SCRIPT
vecOffset = <<0,0,0>>
vecRotation = <<0,0,0>>
eBonetag = BONETAG_NULL
fDetachAnimPhase = -1.0
thisSceneObjectAction = PSOA_NULL
bAttachedToBuddy = FALSE
IF GET_EXTRA_OBJECTS_FOR_SCENE(sTimetableScene.sScene.eScene,
eObjectModel, vecOffset, vecRotation, eBonetag,
fDetachAnimPhase, thisSceneObjectAction, bAttachedToBuddy)
SET_SCENE_OBJECT_AS_NO_LONGER_NEEDED(player_extra_prop, thisSceneObjectAction)
ENDIF
ENDIF
SafeDetachSynchronizedScene(g_iPlayer_Timetable_Exit_SynchSceneID)
InterpBackFromSynchCam(ExitCamIndex, TRUE)
FORCE_ROOM_FOR_PLAYER_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
IF NOT SET_PED_COMPONENT_FOR_MISSION(PLAYER_PED_ID())
SET_RANDOM_CLOTHES_COMBO(PLAYER_PED_ID(), TRUE, TRUE, TRUE)
ENDIF
IF SETUP_FORCE_STEP_TYPE_FOR_SCENE(sTimetableScene.sScene.eScene)
SET_FORCE_STEP_TYPE(PLAYER_PED_ID(), TRUE, 0, 1)
ENDIF
//
iWardrobeSceneID = CREATE_SYNCHRONIZED_SCENE(vFloydSceneCoord, vFloydSceneRot)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iWardrobeSceneID,
sWardrobeDict, sWardrobeClip,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
TEXT_LABEL sWardrobeCamClip
sWardrobeCamClip = sWardrobeClip
sWardrobeCamClip += "_cam"
wardrobeCamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
PLAY_SYNCHRONIZED_CAM_ANIM(wardrobeCamIndex, iWardrobeSceneID,
sWardrobeCamClip, sWardrobeDict)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
SET_SYNCHRONIZED_SCENE_LOOPED(iWardrobeSceneID, FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iWardrobeSceneID, TRUE)
SET_SYNCHRONIZED_SCENE_PHASE(iWardrobeSceneID, 0.0)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_LONG)
iWardrobeGameTimer = GET_GAME_TIMER() + 1000
iWardrobeStage = iWardrobe_Stage_1
ENDIF
BREAK
CASE iWardrobe_Stage_1
SET_SYNCHRONIZED_SCENE_PHASE(iWardrobeSceneID, 0.0)
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringInt("iWardrobeGameTimer ", GET_GAME_TIMER() - iWardrobeGameTimer, 2, HUD_COLOUR_PURPLEDARK)
#ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
AND HAS_PED_PRELOAD_PROP_DATA_FINISHED(PLAYER_PED_ID())
iWardrobeStage = iWardrobe_Stage_2
ENDIF
ENDIF
IF iWardrobeStage != iWardrobe_Stage_2
IF GET_GAME_TIMER() > iWardrobeGameTimer
SCRIPT_ASSERT("emergency wardrobe bail")
iWardrobeStage = iWardrobe_Stage_2
ENDIF
ENDIF
BREAK
CASE iWardrobe_Stage_2
BOOL bBlendoutFromScene
bBlendoutFromScene = FALSE
FLOAT fWardrobeScenePhase
fWardrobeScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(iWardrobeSceneID)
INT iDrawSceneRot
iDrawSceneRot = 2
IF HasAnimEventPassed("WalkInterruptible", fWardrobeScenePhase,
sWardrobeDict, sWardrobeClip,
iDrawSceneRot)
IF NOT IsPlayerMovingLeftStick(iDrawSceneRot)
//
ELSE
bBlendoutFromScene = TRUE
ENDIF
ENDIF
IF NOT bFilledPushInData
IF HasFirstPersonQuitCamPhasePassed(sTimetableScene.sScene.eScene, wardrobeCamIndex,
fWardrobeScenePhase,
iDrawSceneRot)
InterpBackFromSynchCam(wardrobeCamIndex, TRUE)
ENDIF
ENDIF
IF fWardrobeScenePhase >= 0.99
bBlendoutFromScene = TRUE
ENDIF
IF bBlendoutFromScene
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
BlendOutOfSynchTask(sTimetableScene.sScene.eScene, "wardrobe scene done")
InterpBackFromSynchCam(wardrobeCamIndex, TRUE)
IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-3.1103)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(-0.0921)
ENDIF
iWardrobeStage = iWardrobe_Stage_null
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF NOT bMoveScene
IF IS_SYNCHRONIZED_SCENE_RUNNING(iWardrobeSceneID)
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(iWardrobeSceneID)
ENDIF
ELSE
IF IS_SYNCHRONIZED_SCENE_RUNNING(iWardrobeSceneID)
SET_SYNCHRONIZED_SCENE_PHASE(iWardrobeSceneID, fScenePhase)
SET_SYNCHRONIZED_SCENE_ORIGIN(iWardrobeSceneID, vFloydSceneCoord, vFloydSceneRot)
ENDIF
ENDIF
#ENDIF
DisableWhileWaiting("Has_Player_Finished_Wardrobe_Scene")
WAIT(0)
ENDWHILE
RETURN TRUE
ENDFUNC
// *******************************************************************************************
// MAIN SCRIPT
// *******************************************************************************************
SCRIPT(PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene)
INT ForceCleanupBitField = FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_REPEAT_PLAY //FORCE_CLEANUP_FLAG_PLAYER_KILLED_OR_ARRESTED|FORCE_CLEANUP_FLAG_SP_TO_MP
IF HAS_FORCE_CLEANUP_OCCURRED(ForceCleanupBitField)
IF GET_CAUSE_OF_MOST_RECENT_FORCE_CLEANUP() != FORCE_CLEANUP_FLAG_SP_TO_MP
Player_Timetable_Scene_Cleanup(TRUE, FALSE)
ELIF GET_CAUSE_OF_MOST_RECENT_FORCE_CLEANUP() != FORCE_CLEANUP_FLAG_REPEAT_PLAY
Player_Timetable_Scene_Cleanup(TRUE, TRUE)
ELSE
Player_Timetable_Scene_Cleanup(FALSE, FALSE)
ENDIF
ENDIF
WAIT(0)
Initialise_Player_Timetable_Scene_Variables(sPassedScene)
Setup_Player_Timetable_Scene()
#IF IS_DEBUG_BUILD
Create_Player_Timetable_Scene_widget()
#ENDIF
ar_ALLOW_PLAYER_SWITCH_OUTRO()
IF bTriggeredFade
IF IS_SCREEN_FADED_OUT()
OR IS_SCREEN_FADING_OUT()
SET_THIS_IS_A_TRIGGER_SCRIPT(FALSE)
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
bTriggeredFade = FALSE
CPRINTLN(DEBUG_SWITCH, "<TRIGGER FADE> force fade in after trying to speed up assert streaming")
ENDIF
ENDIF
ANIM_DATA LocalAnimData, EmptyAnimData
WHILE bPlayer_timetable_scene_in_progress
IF Should_Switch_Cleanup_Be_Forced()
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
Control_Player_Out_Tasks()
//Reset savehouse blips
INT iSavehouse
REPEAT ENUM_TO_INT(NUMBER_OF_SAVEHOUSE_LOCATIONS) iSavehouse
Update_Savehouse_Respawn_Garage(INT_TO_ENUM(SAVEHOUSE_NAME_ENUM, iSavehouse))
Update_Savehouse_Respawn_Blip(INT_TO_ENUM(SAVEHOUSE_NAME_ENUM, iSavehouse))
ENDREPEAT
ENDIF
IF NOT IS_PED_INJURED(scene_buddy)
Control_Buddy_Out_Tasks()
ENDIF
Player_Timetable_Scene_Cleanup(FALSE, FALSE)
ENDIF
ENDIF
WAIT(0)
// IF (current_player_timetable_scene_stage <> PLAYER_HAS_WARDROBE_ANIM)
DisableWhileWaiting("bPlayer_timetable_scene_in_progress")
// ENDIF
//url:bugstar:974545
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE , false)
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_FLEE_SPAWNED , false)
SWITCH current_player_timetable_scene_stage
CASE WAIT_FOR_PLAYER_PED_TO_UPDATE
IF Has_Current_Player_Ped_Updated()
current_player_timetable_scene_stage = CONTROL_PLAYER_DURING_SWITCH
ENDIF
BREAK
CASE CONTROL_PLAYER_DURING_SWITCH
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF Has_Player_Finished_Switching()
current_player_timetable_scene_stage = PLAYER_SCENE_STARTED
ENDIF
ENDIF
BREAK
CASE PLAYER_SCENE_STARTED
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF Has_Player_Started_New_Scene()
current_player_timetable_scene_stage = PLAYER_EXITING_SWITCH
ENDIF
ENDIF
BREAK
CASE PLAYER_EXITING_SWITCH
IF (sTimetableScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
AND NOT bSetTanishaFightDoorVisible
SET_ENTITY_VISIBLE(player_door_r, TRUE)
bSetTanishaFightDoorVisible = TRUE
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF Has_Player_Finished_Timetabled_Scene()
IF GET_PLAYER_WARDROBE_ANIM_FOR_TIMETABLE_SCENE(PLAYER_PED_ID(), sTimetableScene.sScene.eScene)
bDisableWhileWaiting = TRUE
current_player_timetable_scene_stage = PLAYER_HAS_WARDROBE_ANIM
ELIF CONTROL_PLAYER_IS_ON_THE_PHONE(sTimetableScene.sScene.eScene)
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// TASK_PLAY_ANIM(PLAYER_PED_ID(),
// "SWITCH@MICHAEL@BENCH",
// "CELLPHONE_CALL_LISTEN_BASE",
// SLOW_BLEND_IN, SLOW_BLEND_OUT, -1,
// AF_SECONDARY|AF_LOOPING|AF_UPPERBODY|AF_HOLD_LAST_FRAME)
// SET_ANIM_FILTER(PLAYER_PED_ID(), "BONEMASK_HEAD_NECK_AND_R_ARM") //#1556528
// ENDIF
iBenchcallHangupStage = 0
current_player_timetable_scene_stage = PLAYER_ON_PHONE_ANIM
ELSE
current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE
ENDIF
ENDIF
ENDIF
BREAK
CASE PLAYER_ON_PHONE_ANIM
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SWITCH iBenchcallHangupStage
CASE 0
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("player on the phone", 2, HUD_COLOUR_GREEN)
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("player NOT the phone", 2, HUD_COLOUR_RED)
#ENDIF
//TASK_PLAY_ANIM(PLAYER_PED_ID(),
// "SWITCH@MICHAEL@BENCH", "CELLPHONE_CALL_OUT",
// FAST_BLEND_IN, SLOW_BLEND_OUT, -1,
// AF_SECONDARY|AF_UPPERBODY)
//SET_ANIM_FILTER(PLAYER_PED_ID(), "BONEMASK_HEAD_NECK_AND_R_ARM") //#1556528
LocalAnimData.type = APT_SINGLE_ANIM
LocalAnimData.dictionary0 = "switch@michael@bench"
LocalAnimData.anim0 = "cellphone_call_out"
LocalAnimData.flags = AF_SECONDARY
LocalAnimData.blendInDelta = WALK_BLEND_IN
LocalAnimData.blendOutDelta = WALK_BLEND_OUT
LocalAnimData.filter = GET_HASH_KEY("bonemask_head_neck_and_r_arm")
TASK_SCRIPTED_ANIMATION(PLAYER_PED_ID(), LocalAnimData, EmptyAnimData, EmptyAnimData, SLOW_BLEND_DURATION, SLOW_BLEND_DURATION)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
iBenchcallHangupStage = 1
ENDIF
BREAK
CASE 1
BOOL bHangedUpDeletedPhone
bHangedUpDeletedPhone = FALSE
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "SWITCH@MICHAEL@BENCH", "CELLPHONE_CALL_OUT")
FLOAT fCELLPHONE_CALL_OUT_time
fCELLPHONE_CALL_OUT_time = GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), "SWITCH@MICHAEL@BENCH", "CELLPHONE_CALL_OUT")
#IF IS_DEBUG_BUILD
DrawLiteralSceneStringFloat("CALL_OUT:", fCELLPHONE_CALL_OUT_time, 3, HUD_COLOUR_RED)
#ENDIF
IF fCELLPHONE_CALL_OUT_time >= 0.443
bHangedUpDeletedPhone = TRUE
ENDIF
ELSE
bHangedUpDeletedPhone = TRUE
ENDIF
IF bHangedUpDeletedPhone
IF DOES_ENTITY_EXIST(player_prop)
DELETE_OBJECT(player_prop)
ENDIF
CLEAR_PED_TASKS(PLAYER_PED_ID())
iBenchcallHangupStage = 2
current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE
ENDIF
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
DrawLiteralSceneString("unknown iBenchcallHangupStage?", 3, HUD_COLOUR_RED)
#ENDIF
current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE
BREAK
ENDSWITCH
ELSE
IF DOES_ENTITY_EXIST(player_prop)
DELETE_OBJECT(player_prop)
ENDIF
iBenchcallHangupStage = 2
current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE
ENDIF
BREAK
CASE PLAYER_HAS_WARDROBE_ANIM
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF Has_Player_Finished_Wardrobe_Scene()
current_player_timetable_scene_stage = FINISHED_TIMETABLED_SCENE
ENDIF
ENDIF
BREAK
CASE FINISHED_TIMETABLED_SCENE
Player_Timetable_Scene_Finished()
BREAK
ENDSWITCH
IF bFilledPushInData
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
IF NOT HANDLE_PUSH_IN(sPushInData,
TRUE, //BOOL bCamsAttached = FALSE,
TRUE, //BOOL bDestroyCamsAtEnd = TRUE,
DEFAULT, //BOOL bDoPostFX = TRUE,
DEFAULT, //BOOL bOnlyAttachStartIfCamsAttached = FALSE,
FALSE) //BOOL bDoColouredFlash = TRUE)
DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
CPRINTLN(DEBUG_SWITCH, "HANDLE_PUSH_IN FALSE state: ", sPushInData.state)
ELSE
CPRINTLN(DEBUG_SWITCH, "HANDLE_PUSH_IN TRUE state: ", sPushInData.state)
bFilledPushInData = FALSE
ENDIF
ELSE
CDEBUG3LN(DEBUG_SWITCH, "bFilledPushInData: FALSE!!")
ENDIF
#IF IS_DEBUG_BUILD
Watch_Player_Timetable_Scene_Widget()
Player_Timetable_Scene_Debug_Options()
TEXT_LABEL_63 tScene = Get_String_From_Ped_Request_Scene_Enum(sTimetableScene.sScene.eScene)
HUD_COLOURS eHudColour = HUD_COLOUR_PURPLE
// SWITCH eSceneAnimProgress
// CASE PAP_0_default
// tScene += " [m]"
// eHudColour = HUD_COLOUR_REDLIGHT
// BREAK
// CASE PAP_1_placeholder
// tScene += " [p]"
// eHudColour = HUD_COLOUR_GREYLIGHT
// BREAK
// CASE PAP_2_variation
// tScene += " [v]"
// eHudColour = HUD_COLOUR_GREYDARK
// BREAK
//
// DEFAULT
// //
// BREAK
// ENDSWITCH
DrawLiteralSceneString(GET_STRING_FROM_STRING(tScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(tScene)),
0, eHudColour)
DrawLiteralSceneString(
Get_String_From_Player_Timetable_Scene_Stage(current_player_timetable_scene_stage),
1, HUD_COLOUR_PURPLELIGHT)
#ENDIF
#IF NOT IS_DEBUG_BUILD
// eSceneAnimProgress = eSceneAnimProgress
#ENDIF
ENDWHILE
Player_Timetable_Scene_Cleanup(FALSE, FALSE)
ENDSCRIPT