// _________________________________________________________________________________________ // _________________________________________________________________________________________ // ___ ___ // ___ 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 = <>*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 = <> 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, " * 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, " 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, " 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, " 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, " 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, " 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, " 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, " 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, " *** sTimetableScene.eVehState <> PTVS_2_playerInVehicle [", sTimetableScene.eVehState, "]") EXIT ENDIF IF IS_ENTITY_DEAD(PLAYER_PED_ID()) CPRINTLN(DEBUG_SWITCH, " *** IS_ENTITY_DEAD(PLAYER_PED_ID())") EXIT ENDIF IF IS_ENTITY_DEAD(scene_veh) CPRINTLN(DEBUG_SWITCH, " *** IS_ENTITY_DEAD(scene_veh)") EXIT ENDIF IF sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() // CPRINTLN(DEBUG_SWITCH, " *** sTimetableScene.sScene.ePed <> GET_CURRENT_PLAYER_PED_ENUM() ") EXIT ENDIF IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh) CPRINTLN(DEBUG_SWITCH, " *** IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)") ELSE CPRINTLN(DEBUG_SWITCH, " *** 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,<>) 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,<>) 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, " 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, " Safe_Create_Synchronized_Scene[", iScene, "] not running // ", sCreateInfo) RETURN TRUE ENDIF SET_SYNCHRONIZED_SCENE_ORIGIN(iScene, scenePosition, sceneOrientation, RotOrder) CPRINTLN(DEBUG_SWITCH, " 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, " 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, " 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, " 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, " IsShortRangeDefaultSwitch.", "SWITCH_TYPE_AUTO") BREAK CASE SWITCH_TYPE_LONG CPRINTLN(DEBUG_SWITCH, " IsShortRangeDefaultSwitch.", "SWITCH_TYPE_LONG") BREAK CASE SWITCH_TYPE_MEDIUM CPRINTLN(DEBUG_SWITCH, " IsShortRangeDefaultSwitch.", "SWITCH_TYPE_MEDIUM") BREAK CASE SWITCH_TYPE_SHORT CPRINTLN(DEBUG_SWITCH, " 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_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_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_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_Loop VEHICLE_RECORDING", "(\"", tlRecordingName, "\") //", fRecordingStart) #ENDIF #IF NOT IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, " 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_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_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_Loop SCRIPT_TASK_WANDER_STANDARD") TASK_WANDER_STANDARD(PLAYER_PED_ID()) RETURN TRUE BREAK CASE SCRIPT_TASK_ENTER_VEHICLE CPRINTLN(DEBUG_SWITCH, " 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_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_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_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_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_Loop SCRIPT_TASK_COWER") TASK_COWER(PLAYER_PED_ID()) RETURN TRUE BREAK CASE SCRIPT_TASK_USE_MOBILE_PHONE CPRINTLN(DEBUG_SWITCH, " 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, " 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, " 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, " 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_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, " 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, " Buddy_Loop SCRIPT_TASK_STAND_STILL") RETURN TRUE BREAK CASE SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED CPRINTLN(DEBUG_SWITCH, " 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, " 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, " 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_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_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_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_Out VEHICLE_RECORDING", "(\"", tlRecordingName, "\") //", fRecordingStart) #ENDIF #IF NOT IS_DEBUG_BUILD CPRINTLN(DEBUG_SWITCH, " 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_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_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_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_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_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_Out SCRIPT_TASK_STAND_STILL") IF (sTimetableScene.eLoopTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD) CPRINTLN(DEBUG_SWITCH, " 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, " 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_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_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_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_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, " 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, " 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, " 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, " 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, " 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, " 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, " Buddy_Out SCRIPT_TASK_STAND_STILL") RETURN TRUE BREAK CASE SCRIPT_TASK_WANDER_STANDARD CPRINTLN(DEBUG_SWITCH, " 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, " 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, " 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, " 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, " 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, " * 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, " * IF sTimetableScene.eVehState = PTVS_2_playerInVehicle") IF IS_VEHICLE_DRIVEABLE(scene_veh) CPRINTLN(DEBUG_SWITCH, " ** IF IS_VEHICLE_DRIVEABLE(scene_veh)") Setup_Player_In_Switch_Vehicle() IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) CPRINTLN(DEBUG_SWITCH, " * 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, " **** 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, " ** 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, " 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, " 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, " 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, " 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, " 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_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, " 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, " 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