//Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. USING "rage_builtins.sch" USING "globals.sch" USING "cellphone_public.sch" USING "commands_entity.sch" USING "commands_event.sch" USING "commands_script.sch" USING "cutscene_public.sch" USING "dialogue_public.sch" USING "CompletionPercentage_public.sch" USING "script_ped.sch" USING "script_player.sch" USING "randomChar_public.sch" USING "rgeneral_include.sch" USING "RC_Helper_Functions.sch" USING "RC_Threat_public.sch" USING "cheat_controller_public.sch" USING "commands_recording.sch" #IF IS_DEBUG_BUILD USING "select_mission_stage.sch" #ENDIF USING "commands_recording.sch" // CONSTANTS FOR UBER PLAYBACK // total should not exceed 225 CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 5 CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 5 CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 5 // total should not exceed 12 CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 3 CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 3 CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 3 USING "initial_scenes_Nigel.sch" USING "traffic.sch" // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // MISSION NAME : Nigel1C.sc // AUTHOR : Joe Binks // DESCRIPTION : Random character mission, Catch and return a celebrity dog // // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** g_structRCScriptArgs sRCLauncherDataLocal //************************************************************************************************************************************************* // :ENUMS: //************************************************************************************************************************************************* // Mission stages ENUM MISSION_STAGE MS_INIT, MS_GO_TO_SHOPS, MS_STAGE_APPROACH_CELEB, MS_STAGE_CHAT_UP_CELEB, MS_DOG_RUNS_AWAY, MS_DOG_RUNS_ON_ROAD, MS_DOG_WAITING_AT_FIRESTATION, MS_GRAB_DOG_CUTSCENE, MS_STAGE_PLAY_OUTRO, MS_WAIT_FOR_CALL_TO_END, MS_FAIL_WAIT_FOR_FADE ENDENUM ENUM STAGE_STAGE SS_SETUP, SS_STAGE, SS_STAGE_2 ENDENUM ENUM CRASH_STAGE CS_WAITING, CS_SET_TO_DRIVE, CS_DRIVING, CS_SET_TO_CRASH, CS_CRASHING, CS_TASK_THEM_TO_EXIT, CS_FINISHED ENDENUM CRASH_STAGE crashStage = CS_WAITING ENUM JEEP_STAGE JS_WAITING, JS_SET_TO_DRIVE, JS_DRIVING, JS_SET_TO_SKID, JS_EXITING_CAR, JS_LOOKS_AT_CRASH, JS_PLAYER_ENTERS_CAR, JS_JEEP_FLEES ENDENUM JEEP_STAGE jeepStage = JS_WAITING ENUM FAIL_REASON_ENUM FAIL_CELEB_INJURED, FAIL_CELEB_KILLED, FAIL_CELEB_SCARED, FAIL_KILLED_DOG, FAIL_INJURED_DOG, FAIL_LOST_DOG, FAIL_DEFAULT ENDENUM FAIL_REASON_ENUM failReason ENUM CELEBRITY_CHAT CC_PUT_GUN_AWAY, CC_SET_WHISTLE, CC_WHISTLE, CC_SET_TALKING, CC_PLAYER_AND_CELEBRITY_TALKING, CC_DOG_STARTS_WALKING, CC_PLAYER_TOO_FAR, CC_RETURN_TO_CONVO_LINE ENDENUM CELEBRITY_CHAT celebDialogueState = CC_PLAYER_TOO_FAR ENUM debugSkipToMissionStage DEBUG_TO_START, DEBUG_TO_CHECKPOINT, DEBUG_TO_STORES, DEBUG_TO_ROAD_CHASE, DEBUG_TO_END_CUTSCENE ENDENUM ENUM DOG_RUN_SPEEDS dogRunsFastest, dogRunsNormal, dogRunsSlow, dogRunsVerySlow ENDENUM DOG_RUN_SPEEDS runSpeed = dogRunsFastest ENUM TAXI_DRIVER_STATES taxiDriver_lookingAtCarCrash, taxiDriver_attackingPlayer, taxiDriver_watchingPlayer, taxiDriver_returnToCrash, taxiDriver_fleeing ENDENUM TAXI_DRIVER_STATES taxiDriverState = taxiDriver_lookingAtCarCrash ENUM FEMALE_DRIVER_STATES femaleDriver_lookingAtCarCrash, femaleDriver_cower, femaleDriver_flee ENDENUM FEMALE_DRIVER_STATES femaleDriverState = femaleDriver_lookingAtCarCrash //************************************************************************************************************************************************* // :STRUCTS: //************************************************************************************************************************************************* STRUCT MISSION_VEHICLE VEHICLE_INDEX index PED_INDEX driver MODEL_NAMES carModel MODEL_NAMES driverModel VECTOR startPosition FLOAT startHeading ENDSTRUCT STRUCT MISSION_PED PED_INDEX index MODEL_NAMES model VECTOR vPosStart FLOAT fHeading VECTOR vPosMid VECTOR vPosEnd INT startWalkingWaypoint BOOL startedWalking BOOL beenShocked STRING anim ENDSTRUCT //************************************************************************************************************************************************* // :VARIABLES: //************************************************************************************************************************************************* MISSION_STAGE missionStage = MS_INIT //track what mission stage we are at STAGE_STAGE stageStage = SS_SETUP MISSION_PED shockedPed[5] PED_INDEX CELEBRITY_PED PED_INDEX CELEBRITY_DOG VECTOR vPos_Celeb = <<-626.87, -268.85, 38>> VECTOR vModelDest = <<-642.32, -238.21, 36.86>> /*VECTOR vPos_Dog = <<-627.40, -267.12, 38.23>> FLOAT fDir_Celeb = 121.00 FLOAT fDir_Dog = -59.95*/ STRING dogRoute = "NIG1C" BOOL bDoStopRunningConv = TRUE CONST_FLOAT fChaseFailDistance 100.0 CONST_FLOAT fBlipFlashDistance 0.7 CONST_INT WAIT_LINE_TIME 5000 INT iWaitLineTimer = 0 PED_INDEX TAXI_PASSENGER_PED INT iSyncedSceneID MODEL_NAMES femaleHipsterModel = A_F_Y_Hipster_04 MODEL_NAMES businessManModel = A_M_Y_Business_01 //MODEL_NAMES fireManModel = S_M_Y_FIREMAN_01 MODEL_NAMES dogModel = A_C_ROTTWEILER MODEL_NAMES taxiDriverModel = S_M_M_TRUCKER_01 MODEL_NAMES taxiModel = TAXI MODEL_NAMES sentinelCarModel = SENTINEL MODEL_NAMES familyCarModel = HABANERO MODEL_NAMES jeepCarModel = LANDSTALKER MODEL_NAMES poshCarModel = BANSHEE MODEL_NAMES escortCarModel = BJXL MISSION_VEHICLE CRASH_CAR_POSH MISSION_VEHICLE CRASH_CAR_FAMILY MISSION_VEHICLE SKID_CAR_TAXI MISSION_VEHICLE SKID_CAR_JEEP // This will probably go back in so just commenting it out. B* 1107526 //MISSION_VEHICLE FIRE_TRUCK MISSION_VEHICLE SKID_CAR_SENTINEL //MISSION_VEHICLE ESCORT_CAR_FAMILY MISSION_VEHICLE TAXI_CAR MISSION_VEHICLE FIRST_CAR MISSION_VEHICLE SECOND_CAR MISSION_VEHICLE FINAL_CAR VEHICLE_INDEX STATIONARY_FIRE_TRUCK BLIP_INDEX GOTO_BLIP structPedsForConversation sSpeech SEQUENCE_INDEX seq //REL_GROUP_HASH relGroupFriendly REL_GROUP_HASH relGroupPushed REL_GROUP_HASH relGroupDrivers //VECTOR vPos_GoToShops = <<-623.880859,-266.201294,37.765167>>//<<-617.765381,-275.147888,37.857578>>//<<-610.360840,-283.530853,37.859695>>//<<-625.902832,-267.894592,37.808289>>//<<-626.87, -268.85, 38>> VECTOR vPOS_FINAL_WAYPOINT INT iNUM_WAYPOINTS CAMERA_INDEX camCutsceneStart BOOL bBEEN_WARNED_ABOUT_DISTANCE = FALSE BOOL bCAR_HONKING = FALSE BOOL bSPORTS_HONKING = FALSE BOOL bSENTINEL_HONKING = FALSE BOOL bRELEASE_SPORTS_CAR = FALSE BOOL bRELEASE_SENTINEL_CAR = FALSE BOOL bOUTRO_CALL_GOING_ON = FALSE //BOOL bPLAYER_RETURNED_TO_CELEB = FALSE BOOL bSHOP_PED_SHOUTED = FALSE BOOL bTREVOR_RESPONDED = FALSE BOOL bCRASH_SHOUTED = FALSE BOOL bPLAYED_COLLAR_SOUND = FALSE //BOOL bRESUMED_COLLAR_CONVERSATION = FALSE BOOL bFinal_CHASE_LINES_READY = FALSE BOOL bGotchaLineReady = FALSE BOOL bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE BOOL bCelebPleaded = FALSE BOOL bPlayerThreatenedModel = FALSE BOOL bFirstCarsWaiting = TRUE BOOL bSeconCarRepositioned = FALSE BOOL bSecondPartReady = TRUE STRING recBrakeCar = "NIG1CBrake" INT iNumRecBrakeCar = 102 STRING recCrashCars = "NIG1CCrash" INT iNumRecStraightCrashCar = 101 INT iNumRecSwerveCrashCar = 103 INT iKerryShoppingTimer VECTOR vKerrySpeaksPos1 = <<-603.926575,-293.947876,34.779064>> VECTOR vKerrySpeaksPos2 = <<-636.499878,-242.544357,39.160896>> FLOAT fKerrySpeaksWidth = 20.0 INT iCelebScaredTimer STRING NIGEL1C_DICT = "rcmnigel1c" //STRING TAXI_HAIL_DICT = "taxi_hail" /*STRING KNEEL_ENTER_DICT = "amb@medic@standing@kneel@enter" STRING KNEEL_DICT = "amb@medic@standing@kneel@base" STRING KNEEL_EXIT_DICT = "amb@medic@standing@kneel@exit"*/ STRING DOG_DICT = "misschop_vehicle@back_of_van" STRING MILAN_DICT = "gestures@f@standing@casual" STRING OUTRO_DICT = "random@nigel@1c" VECTOR vFirestationClearLocation = <<-643.8831, -108.9039, 36.9360>> VECTOR vFirestationClearAreaMin = <<-662.3463, -126.8440, 36.8854>> VECTOR vFirestationClearAreaMax = <<-627.8564, -92.9756, 38.0087>> VECTOR vShoppingAreaA = <<-606.683472,-293.856354,34.779278>> VECTOR vShoppingAreaB = <<-642.655945,-236.122238,38.889034>> FLOAT fShoppingArea = 20.0 VECTOR vChatUpAreaPos1 = <<-608.483154,-286.606964,39.750637>> VECTOR vChatUpAreaPos2 = <<-634.568115,-246.608185,36.346996>> FLOAT fChatUpAreaWidth = 20.0 // Cutscene details for the player stopping the dog in the alley VECTOR vAlleyCutscenePos1 = <<-620.598328,-263.043945,38.763931>> VECTOR vAlleyCutscenePos2 = <<-665.576782,-220.708847,35.374737>> FLOAT fAlleyCutsceneWidth = 30.0 VECTOR vEmergencyOutro = <<-641.819824,-235.572113,37.881439>> FLOAT fEmergencyOutro = 65.317154 VECTOR vEmergencyCarRespot = <<-665.364014,-232.790390,36.649349>> FLOAT fEmergencyCarRespot = 81.837189 // timers INT iChatUpTimer = 0 //INT iGrowlTimer = 0 INT iOutroTimer = 0 //INT iCallRestartDelay = 0 CONST_INT CALL_RESTART_DELAY 2000 // variables to check for mission passed stats CONST_FLOAT WARN_DIST 50.0 ENUM SCARE_REASON SCARED_DOG, SCARED_MODEL, MODEL_SCARED_DOG, PUSHED_MODEL ENDENUM SCARE_REASON reasonDogRan //TEXT_LABEL_23 ConvResumeLabel = "" FLOAT fCAR_REC_SPEED = 1.0 //---------------------- // CHECKPOINTS //---------------------- CONST_INT CP_START 0 //CONST_INT CP_CELEB 1 CONST_INT CP_MISSION_PASSED 1//2 #IF IS_DEBUG_BUILD CONST_INT MAX_SKIP_MENU_LENGTH 5 INT i_debug_jump_stage = 0 MissionStageMenuTextStruct s_skip_menu[MAX_SKIP_MENU_LENGTH] WIDGET_GROUP_ID widgetGroup PROC SETUP_WIDGETS() IF NOT DOES_WIDGET_GROUP_EXIST(widgetGroup) widgetGroup = START_WIDGET_GROUP("NIGEL1C WIDGETS") SET_UBER_PARENT_WIDGET_GROUP(widgetGroup) STOP_WIDGET_GROUP() ENDIF ENDPROC #ENDIF // =========================================================================================================== // Termination // =========================================================================================================== // ----------------------------------------------------------------------------------------------------------- // Script cleanup helpers // ----------------------------------------------------------------------------------------------------------- /// PURPOSE: /// Remove one of the shocked peds /// PARAMS: /// i - the index of the shocked ped to remove PROC CLEANUP_SHOCKED_PEDS(INT i) IF DOES_ENTITY_EXIST(shockedPed[i].index) SAFE_RELEASE_PED(shockedPed[i].index, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(shockedPed[i].model) ENDIF ENDPROC // ----------------------------------------------------------------------------------------------------------- // Script Cleanup // ----------------------------------------------------------------------------------------------------------- /// PURPOSE: /// Removes a script vehicle and its associated driver /// PARAMS: /// vehicle - the MISSION_VEHICLE struct to be removed PROC CLEANUP_CAR_AND_DRIVER(MISSION_VEHICLE vehicle) CPRINTLN(DEBUG_MISSION, "Driver ") SAFE_RELEASE_PED(vehicle.driver) CPRINTLN(DEBUG_MISSION, "and vehicle is gone") SAFE_RELEASE_VEHICLE(vehicle.index) ENDPROC /// PURPOSE: /// Removes all assets used by the mission PROC ASSETS_CLEANUP() REMOVE_RELATIONSHIP_GROUP(relGroupPushed) REMOVE_RELATIONSHIP_GROUP(relGroupDrivers) IF DOES_BLIP_EXIST(GOTO_BLIP) REMOVE_BLIP(GOTO_BLIP) ENDIF SAFE_RELEASE_PED(CELEBRITY_PED) SAFE_RELEASE_PED(CELEBRITY_DOG) SAFE_RELEASE_PED(TAXI_PASSENGER_PED, FALSE) SAFE_RELEASE_VEHICLE(STATIONARY_FIRE_TRUCK) // This will probably go back in so just commenting it out. B* 1107526 //CLEANUP_CAR_AND_DRIVER(FIRE_TRUCK) CLEANUP_CAR_AND_DRIVER(CRASH_CAR_FAMILY) CLEANUP_CAR_AND_DRIVER(SKID_CAR_JEEP) CLEANUP_CAR_AND_DRIVER(CRASH_CAR_POSH) CLEANUP_CAR_AND_DRIVER(SKID_CAR_TAXI) CLEANUP_CAR_AND_DRIVER(SKID_CAR_SENTINEL) //CLEANUP_CAR_AND_DRIVER(ESCORT_CAR_FAMILY) CLEANUP_CAR_AND_DRIVER(TAXI_CAR) CLEANUP_CAR_AND_DRIVER(FIRST_CAR) CLEANUP_CAR_AND_DRIVER(SECOND_CAR) CLEANUP_CAR_AND_DRIVER(FINAL_CAR) CLEANUP_SHOCKED_PEDS(0) CLEANUP_SHOCKED_PEDS(1) CLEANUP_SHOCKED_PEDS(2) CLEANUP_SHOCKED_PEDS(4) SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(PLAYER_PED_ID(), FALSE) REMOVE_ANIM_DICT(NIGEL1C_DICT) /*REMOVE_ANIM_DICT(KNEEL_ENTER_DICT) REMOVE_ANIM_DICT(KNEEL_DICT) REMOVE_ANIM_DICT(KNEEL_EXIT_DICT)*/ REMOVE_ANIM_DICT(OUTRO_DICT) REMOVE_ANIM_DICT(DOG_DICT) REMOVE_ANIM_DICT(MILAN_DICT) //REMOVE_ANIM_DICT(TAXI_HAIL_DICT) REMOVE_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars) REMOVE_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars) REMOVE_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar) REMOVE_VEHICLE_RECORDING(001, "NIG1C_COMET") REMOVE_VEHICLE_RECORDING(002, "NIG1C_COMET2") REMOVE_VEHICLE_RECORDING(001, "NIG1CEscort") REMOVE_VEHICLE_RECORDING(001, "NIG1C_FIRE") RELEASE_SCRIPT_AUDIO_BANK() SET_PED_MODEL_IS_SUPPRESSED(femaleHipsterModel, FALSE) SET_PED_MODEL_IS_SUPPRESSED(businessManModel, FALSE) //SET_PED_MODEL_IS_SUPPRESSED(fireManModel, FALSE) SET_PED_MODEL_IS_SUPPRESSED(taxiDriverModel, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(taxiModel) SET_MODEL_AS_NO_LONGER_NEEDED(sentinelCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(familyCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(escortCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(poshCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(jeepCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(femaleHipsterModel) SET_MODEL_AS_NO_LONGER_NEEDED(dogModel) SET_MODEL_AS_NO_LONGER_NEEDED(businessManModel) //SET_MODEL_AS_NO_LONGER_NEEDED(fireManModel) SET_MODEL_AS_NO_LONGER_NEEDED(taxiDriverModel) ENDPROC /// PURPOSE: /// Turns roads on or off /// PARAMS: /// roadsOn - TRUE if turning roads on, FALSE if turning them off PROC TURN_ROADS_ON(BOOL roadsOn) /*SET_ROADS_IN_ANGLED_AREA(<<-690.617798,-232.600967,35.813908>>, <<-621.191406,-190.706741,37.760944>>, 49.750000, TRUE, roadsOn) SET_ROADS_IN_ANGLED_AREA(<<-695.448059,-235.328827,38.787209>>, <<-657.659302,-299.484222,33.460602>>, 25.500000, TRUE, roadsOn) SET_ROADS_IN_ANGLED_AREA(<<-627.666870,-179.075363,35.767746>>, <<-662.012634,-119.546036,38.777054>>, 10.250000, TRUE, roadsOn) SET_ROADS_IN_ANGLED_AREA(<<-598.983337,-240.166519,34.820423>>, <<-497.172363,-193.373306,37.849590>>, 133.000000, TRUE, roadsOn) SET_ROADS_IN_ANGLED_AREA(<<-689.055115,-217.763550,35.166630>>, <<-596.409790,-170.035034,38.057011>>, 20.0, TRUE, roadsOn) SET_ROADS_IN_ANGLED_AREA(<<-685.225769,-76.094269,35.667927>>, <<-618.345642,-194.644562,38.753483>>, 20.0, TRUE, roadsOn)*/ // instead of disabling individual roads, try one huge area SET_ROADS_IN_ANGLED_AREA(<<-533.335815,-316.634003,30.996708>>, <<-696.271423,-30.989979,45.693817>>, 250.0, TRUE, roadsOn) if roadsOn SET_ALL_VEHICLE_GENERATORS_ACTIVE() CLEAR_PED_NON_CREATION_AREA() REMOVE_SCENARIO_BLOCKING_AREAS() SET_PED_PATHS_BACK_TO_ORIGINAL(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>) ELSE CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-698.44, -333.93, 33>>, <<-532.67, -44.35, 40>>, FALSE) SET_PED_NON_CREATION_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>) ADD_SCENARIO_BLOCKING_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>) ADD_SCENARIO_BLOCKING_AREA(vFirestationClearAreaMin, vFirestationClearAreaMax) ADD_SCENARIO_BLOCKING_AREA(<<-714.4662, -233.7738, 33.0351>>, <<-611.9510, -89.9566, 57.4080>>) SET_PED_PATHS_IN_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>, FALSE) CLEAR_AREA_OF_PEDS(<<-640.004761,-140.212540,36.378510>>, 24.25) CLEAR_AREA_OF_PEDS(vFirestationClearLocation, 50) ENDIF ENDPROC /// PURPOSE: /// Cleans up the mission PROC Script_Cleanup() // If the mission was triggered then additional mission cleanup will be required. IF (Random_Character_Cleanup_If_Triggered()) CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required") IF IS_PED_UNINJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) CLEAR_PED_SECONDARY_TASK(PLAYER_PED_ID()) ENDIF IF IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE") STOP_AUDIO_SCENE("NIGEL_1C_SCENE") ENDIF TURN_ROADS_ON(TRUE) STOP_GAMEPLAY_HINT() CLEAR_PRINTS() CLEAR_ADDITIONAL_TEXT(MISSION_DIALOGUE_TEXT_SLOT, TRUE) CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE) ENDIF ASSETS_CLEANUP() DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, FALSE) SET_VEHICLE_MODEL_IS_SUPPRESSED(FIRETRUK, FALSE) SET_WANTED_LEVEL_MULTIPLIER(1.0) //Cleanup the scene created by the launcher RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE) TERMINATE_THIS_THREAD() ENDPROC /// PURPOSE: /// Cleans up the scripted cutscene at the end of the mission /// PARAMS: /// bInterp - TRUE if the cutscene camera should interpolate to the game camera, FALSE otherwise /// bResetGamePlayCamera - TRUE if the camera should be placed behind the player, FALSE otherwise PROC FINISH_CUTSCENE(BOOL bInterp = TRUE, BOOL bResetGamePlayCamera = TRUE) //bInterp = bInterp RENDER_SCRIPT_CAMS(FALSE, bInterp, DEFAULT_INTERP_TO_FROM_GAME) IF DOES_CAM_EXIST(camCutsceneStart) SET_CAM_ACTIVE(camCutsceneStart, FALSE) DESTROY_CAM (camCutsceneStart) ENDIF IF bResetGamePlayCamera SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH(-5) ENDIF TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) RC_END_CUTSCENE_MODE() ENDPROC // ----------------------------------------------------------------------------------------------------------- // Script Pass // ----------------------------------------------------------------------------------------------------------- /// PURPOSE: /// Passes the mission PROC Script_Passed() #IF IS_DEBUG_BUILD WHILE IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CPRINTLN(DEBUG_MISSION, "WAITING FOR THE CONVO TO END BEFORE CLEANING UP") KILL_ANY_CONVERSATION() WAIT(0) ENDWHILE #ENDIF Random_Character_Passed(CP_RAND_C_NIG1C) Script_Cleanup() ENDPROC // ----------------------------------------------------------------------------------------------------------- // Script Fail // ----------------------------------------------------------------------------------------------------------- /// PURPOSE: /// Cleans up the mission on failure PROC Script_Failed() Script_Cleanup() ENDPROC // =========================================================================================================== // PASS_FAIL_CLEANUP // =========================================================================================================== /// PURPOSE: /// Has the player left the area the shops are in? /// RETURNS: /// TRUE if the player has left the area, FALSE otherwise FUNC BOOL PLAYER_LEFT_SHOPS_AREA() IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-650.622925,-358.134674,33.782822>>, <<-548.965820,-302.563751,41>>, 83.250000) AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-606.433105,-289.939331,35.779270>>, <<-629.503845,-249.769501,41>>, 19.750000) RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// Has the player entered the building site used in one of the heist missions? /// RETURNS: /// TRUE if the player has entered the building site, FALSE otherwise FUNC BOOL PLAYER_ENTERED_HEIST_BUILDING_SITE() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-594.618530,-288.646393,34.454720>>, <<-582.652222,-281.528717,40.954720>>, 12.750000) RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// Checks if the player has run over Dexie /// RETURNS: /// TRUE if the player is in a vehicle that is touching Dexie and the vehicle is moving FUNC BOOL PLAYER_RAN_OVER_DOG() IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_ENTITY_TOUCHING_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID()) AND NOT IS_PED_STOPPED(PLAYER_PED_ID()) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Checks all the reasons the player might have failed the mission for PROC CHECK_FAIL_POSSIBILITIES() IF DOES_ENTITY_EXIST(CELEBRITY_DOG) IF IS_PED_INJURED(CELEBRITY_DOG) failReason = FAIL_KILLED_DOG stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ELSE IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID()) //OR (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_ENTITY_TOUCHING_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID())) OR PLAYER_RAN_OVER_DOG() SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX) failReason = FAIL_INJURED_DOG stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ELIF GET_NUMBER_OF_FIRES_IN_RANGE(GET_ENTITY_COORDS(CELEBRITY_DOG), 2.0) > 0 SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX) failReason = FAIL_KILLED_DOG stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(CELEBRITY_PED) IF IS_ENTITY_DEAD(CELEBRITY_PED) failReason = FAIL_CELEB_KILLED stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ELSE IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID()) failReason = FAIL_CELEB_INJURED stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE //ELIF IS_PLAYER_SHOOTING_NEAR_PED(CELEBRITY_PED) ELIF CHECK_BULLET_SHOOTING_IN_AREA(CELEBRITY_PED, TRUE, 8.0, 15.0) OR CHECK_PROJECTILE_IN_RANGE(CELEBRITY_PED, 5.0) IF IS_PED_UNINJURED(CELEBRITY_PED) AND NOT IS_PED_FLEEING(CELEBRITY_PED) IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED) SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 500, -1) ENDIF IF IS_PED_UNINJURED(CELEBRITY_DOG) AND NOT IS_PED_FLEEING(CELEBRITY_DOG) TASK_SMART_FLEE_PED(CELEBRITY_DOG, PLAYER_PED_ID(), 500, -1) ENDIF failReason = FAIL_CELEB_SCARED stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ENDIF ENDIF ENDIF IF missionStage = MS_DOG_RUNS_AWAY OR missionStage = MS_DOG_RUNS_ON_ROAD OR missionStage = MS_DOG_WAITING_AT_FIRESTATION IF IS_PED_UNINJURED(CELEBRITY_DOG) and IS_PED_UNINJURED(PLAYER_PED_ID()) IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, fChaseFailDistance) failReason = FAIL_LOST_DOG stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ELSE IF bBEEN_WARNED_ABOUT_DISTANCE = FALSE IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, WARN_DIST) /*CLEAR_PRINTS() PRINT_NOW("N1C_WRN_DOG", DEFAULT_GOD_TEXT_TIME, 1) // Catch up with ~b~Mr. Muffy Cakes.*/ INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI1C_PLAYER_GOT_TOO_FAR_FROM_MUFFY) bBEEN_WARNED_ABOUT_DISTANCE = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC // =========================================================================================================== // HELPER FUNCTIONS // =========================================================================================================== /// PURPOSE: /// Checks if all the vehicle recording cars and their drivers are ok /// RETURNS: /// TRUE if they all exist and are OK, FALSE otherwise FUNC BOOL ALL_CARS_ARE_WORKING() IF IS_VEHICLE_OK(CRASH_CAR_POSH.index) AND IS_PED_UNINJURED(CRASH_CAR_POSH.driver) AND IS_VEHICLE_OK(CRASH_CAR_FAMILY.index) AND IS_PED_UNINJURED(CRASH_CAR_FAMILY.driver) AND IS_VEHICLE_OK(SKID_CAR_TAXI.index) AND IS_PED_UNINJURED(SKID_CAR_TAXI.driver) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Finds the closest waypoint recording waypoint to the dog when on the road /// RETURNS: /// The closest waypoint recording waypoint to the dog when on the road FUNC INT GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() INT wayP WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(dogRoute, GET_ENTITY_COORDS(CELEBRITY_DOG), wayP) RETURN wayP ENDFUNC /// PURPOSE: /// Finds the closest waypoint recording waypoint to the player /// RETURNS: /// The closest waypoint recording waypoint to the player FUNC INT GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() INT wayP WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(dogRoute, GET_ENTITY_COORDS(PLAYER_PED_ID()), wayP) RETURN wayP ENDFUNC /// PURPOSE: /// Works out the position for the camera when the player tries to pick up the dog /// RETURNS: /// The position for the camera when the player tries to pick up the dog FUNC VECTOR get_cam_pos() VECTOR pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<-0.8, -1.2, 1.5>>) RETURN pos ENDFUNC /// PURPOSE: /// Checks if it's ok to display subtitles for a conversation /// RETURNS: /// The appropriate subtitles state, based on whether or not an objective is being displayed FUNC enumSubtitlesState CheckDisplaySubtitles() IF IS_MESSAGE_BEING_DISPLAYED() RETURN DO_NOT_DISPLAY_SUBTITLES ELSE RETURN DISPLAY_SUBTITLES ENDIF ENDFUNC /// PURPOSE: /// Loads the vehicle recordings, models and anim dictionaries used by the mission PROC LOAD_OTHER_ASSETS() REQUEST_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars) REQUEST_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars) REQUEST_VEHICLE_RECORDING(001, "NIG1C_COMET") REQUEST_VEHICLE_RECORDING(002, "NIG1C_COMET2") REQUEST_VEHICLE_RECORDING(001, "NIG1CEscort") REQUEST_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar) REQUEST_VEHICLE_RECORDING(001, "NIG1C_FIRE") REQUEST_WAYPOINT_RECORDING(dogRoute) REQUEST_MODEL(taxiModel) REQUEST_MODEL(sentinelCarModel) REQUEST_MODEL(familyCarModel) REQUEST_MODEL(escortCarModel) REQUEST_MODEL(poshCarModel) REQUEST_MODEL(jeepCarModel) REQUEST_MODEL(femaleHipsterModel) REQUEST_MODEL(businessManModel) REQUEST_MODEL(FIRETRUK) //REQUEST_MODEL(fireManModel) REQUEST_MODEL(taxiDriverModel) REQUEST_ANIM_DICT(NIGEL1C_DICT) /*REQUEST_ANIM_DICT(KNEEL_ENTER_DICT) REQUEST_ANIM_DICT(KNEEL_DICT) REQUEST_ANIM_DICT(KNEEL_EXIT_DICT)*/ REQUEST_ANIM_DICT(OUTRO_DICT) REQUEST_ANIM_DICT(MILAN_DICT) //REQUEST_ANIM_DICT(TAXI_HAIL_DICT) REQUEST_ANIM_DICT(DOG_DICT) REQUEST_SCRIPT_AUDIO_BANK("NIGEL_1C_COLLAR") ENDPROC /// PURPOSE: /// Checks if all the assets are loaded /// RETURNS: /// TRUE if all assets are loaded, FALSE otherwise FUNC BOOL ARE_ASSETS_LOADED() IF NOT HAS_MODEL_LOADED(taxiModel) CPRINTLN(DEBUG_MISSION, "Taxi not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(sentinelCarModel) CPRINTLN(DEBUG_MISSION, "Sentinel not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(familyCarModel) CPRINTLN(DEBUG_MISSION, "Family car not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(escortCarModel) CPRINTLN(DEBUG_MISSION, "escort car not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(poshCarModel) CPRINTLN(DEBUG_MISSION, "posh car not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(jeepCarModel) CPRINTLN(DEBUG_MISSION, "jeep not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(femaleHipsterModel) CPRINTLN(DEBUG_MISSION, "female hipster not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(businessManModel) CPRINTLN(DEBUG_MISSION, "business man not loaded") RETURN FALSE ENDIF IF NOT HAS_MODEL_LOADED(FIRETRUK) CPRINTLN(DEBUG_MISSION, "firetruck not loaded") RETURN FALSE ENDIF /*IF NOT HAS_MODEL_LOADED(fireManModel) CPRINTLN(DEBUG_MISSION, "fireman not loaded") RETURN FALSE ENDIF*/ IF NOT HAS_MODEL_LOADED(taxiDriverModel) CPRINTLN(DEBUG_MISSION, "taxi driver not loaded") RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED(NIGEL1C_DICT) CPRINTLN(DEBUG_MISSION, "Main anim dict not loaded") RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED(MILAN_DICT) CPRINTLN(DEBUG_MISSION, "Milan anim dict not loaded") RETURN FALSE ENDIF IF NOT HAS_ANIM_DICT_LOADED(DOG_DICT) CPRINTLN(DEBUG_MISSION, "Dog anim dict not loaded") RETURN FALSE ENDIF SET_PED_MODEL_IS_SUPPRESSED(femaleHipsterModel, TRUE) SET_PED_MODEL_IS_SUPPRESSED(businessManModel, TRUE) //SET_PED_MODEL_IS_SUPPRESSED(fireManModel, TRUE) SET_PED_MODEL_IS_SUPPRESSED(taxiDriverModel, TRUE) RETURN TRUE ENDFUNC /// PURPOSE: /// Waits until all assets are loaded PROC WAIT_TILL_ASSETS_ARE_LOADED() WHILE NOT ARE_ASSETS_LOADED() CPRINTLN(DEBUG_MISSION, "Loading other assets") WAIT(0) ENDWHILE ENDPROC /// PURPOSE: /// Defines the base variables for the shockable peds PROC SETUP_SHOCKABLE_PEDS() shockedPed[0].model = femaleHipsterModel shockedPed[0].fHeading = 65.71//-170.53 shockedPed[0].vPosStart = <<-645.97, -177.03, 37>> shockedPed[0].vPosMid = <<-643.84, -181.83, 36.69>> shockedPed[0].vPosEnd = <<-691.20, -207.27, 36.25>> shockedPed[0].startWalkingWaypoint = 21 shockedPed[0].startedWalking = FALSE shockedPed[0].beenShocked = FALSE shockedPed[0].anim = "avoid_rf" shockedPed[1].model = femaleHipsterModel shockedPed[1].fHeading = -50.00//-151.41 shockedPed[1].vPosStart = <<-643.92, -135.89, 37.84>>//<<-641.40, -134.22, 37>> shockedPed[1].vPosMid = <<-634.06, -147.80, 36.87>> shockedPed[1].vPosEnd = <<-623.98, -162.83, 36.85>> shockedPed[1].startWalkingWaypoint = 28 shockedPed[1].startedWalking = FALSE shockedPed[1].beenShocked = FALSE shockedPed[1].anim = "avoid_fr" shockedPed[2].model = businessManModel shockedPed[2].fHeading = 5.73 shockedPed[2].vPosStart = <<-671.58, -195.03, 37.39>> shockedPed[2].beenShocked = FALSE shockedPed[4].model = businessManModel shockedPed[4].fHeading = -108.48 shockedPed[4].vPosStart = <<-632.18, -154.89, 37.83>> shockedPed[4].startedWalking = FALSE ENDPROC /// PURPOSE: /// Checks if the assets needed at the start of the mission are loaded /// RETURNS: /// TRUE if the assets are loaded, FALSE otherwise FUNC BOOL ARE_INITIAL_ASSETS_LOADED() IF HAS_MODEL_LOADED(femaleHipsterModel) AND HAS_MODEL_LOADED(dogModel) AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) // B*2109500 - script needs to wait for mission text slot to load RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Loads the assets needed at the start of the mission /// PARAMS: /// bWaitForLoading - TRUE if the procedure should wait until the assets are loaded, FALSE otherwise PROC LOAD_INITIAL_ASSETS(BOOL bWaitForLoading = FALSE) REQUEST_ADDITIONAL_TEXT("NIG1CAU", MISSION_DIALOGUE_TEXT_SLOT) REQUEST_ADDITIONAL_TEXT("NIGEL1C", MISSION_TEXT_SLOT) REQUEST_MODEL(femaleHipsterModel) REQUEST_MODEL(dogModel) CPRINTLN(DEBUG_MISSION, "Requested model and dog and text") IF bWaitForLoading WHILE NOT ARE_INITIAL_ASSETS_LOADED() CPRINTLN(DEBUG_MISSION, "LOADING CELEB MODELS") WAIT(0) ENDWHILE ENDIF ENDPROC /// PURPOSE: /// Creates the model and dog for the player to meet PROC CREATE_MODEL_AND_DOG_AT_SHOPS() IF DOES_ENTITY_EXIST(CELEBRITY_DOG) DELETE_PED(CELEBRITY_DOG) ENDIF IF DOES_ENTITY_EXIST(CELEBRITY_PED) DELETE_PED(CELEBRITY_PED) ENDIF eInitialSceneStage = IS_REQUEST_SCENE WHILE NOT SetupScene_NIGEL_1C(sRCLauncherDataLocal) WAIT(0) ENDWHILE CELEBRITY_PED = sRCLauncherDataLocal.pedID[0] CELEBRITY_DOG = sRCLauncherDataLocal.pedID[1] SET_ENTITY_COORDS_GROUNDED(CELEBRITY_PED, vPos_Celeb) //SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly) ENDPROC /// PURPOSE: /// Creates one of the shockable peds /// PARAMS: /// i - the index of the ped to create PROC CREATE_SHOCKABLE_PED(int i) IF DOES_ENTITY_EXIST(shockedPed[i].index) DELETE_PED(shockedPed[i].index) ENDIF IF HAS_MODEL_LOADED(shockedPed[i].model) shockedPed[i].index = CREATE_PED(PEDTYPE_CIVFEMALE, shockedPed[i].model, shockedPed[i].vPosStart, shockedPed[i].fHeading) VECTOR pos = shockedPed[i].vPosStart FLOAT zCoord GET_GROUND_Z_FOR_3D_COORD(pos, zCoord) SET_ENTITY_COORDS(shockedPed[i].index, <>) SET_PED_RELATIONSHIP_GROUP_HASH(shockedPed[i].index, relGroupDrivers) SET_PED_COMBAT_ATTRIBUTES(shockedPed[i].index, CA_ALWAYS_FLEE, TRUE) ENDIF ENDPROC /// PURPOSE: /// Makes the model shout at the player when she stops running PROC MODEL_SPEAKS_WHEN_STOPPING() IF IS_PED_UNINJURED(CELEBRITY_PED) AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(CELEBRITY_PED, vModelDest) < 5.0 AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vModelDest) < 25.0 IF bDoStopRunningConv IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_2",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) bDoStopRunningConv = FALSE iWaitLineTimer = GET_GAME_TIMER() + WAIT_LINE_TIME TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1) ENDIF ELSE IF GET_GAME_TIMER() > iWaitLineTimer AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_WAIT",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) iWaitLineTimer = GET_GAME_TIMER() + WAIT_LINE_TIME ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Controls the shockable peds /// PARAMS: /// i - the index of the shockable ped to be controlled PROC UPDATE_THE_SHOCKABLE_PED(INT i) IF NOT shockedPed[i].beenShocked IF IS_PED_UNINJURED(shockedPed[i].index) AND IS_PED_UNINJURED(CELEBRITY_DOG) IF NOT shockedPed[i].startedWalking IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > shockedPed[i].startWalkingWaypoint open_sequence_task(seq) IF runSpeed = dogRunsVerySlow TASK_PAUSE(NULL, 1000) ENDIF TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[i].vPosMid, 1) close_sequence_task(seq) task_perform_sequence(shockedPed[i].index, seq) clear_sequence_task(seq) shockedPed[i].startedWalking = TRUE ENDIF ENDIF ELSE IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[i].index, CELEBRITY_DOG, 3) VECTOR vec vec = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(shockedPed[i].index, GET_ENTITY_COORDS(CELEBRITY_DOG)) CLEAR_PED_TASKS(shockedPed[i].index) open_sequence_task(seq) TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1) if vec.y > 0.7 TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, shockedPed[i].anim, NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1) ELSE TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "avoid_rb", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1) ENDIF TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG) TASK_PAUSE(NULL, 1000) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[i].vPosEnd, 1) close_sequence_task(seq) task_perform_sequence(shockedPed[i].index, seq) clear_sequence_task(seq) shockedPed[i].beenShocked = TRUE ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Controls the ped who falls over PROC UPDATE_THE_FALL_PED() IF IS_PED_UNINJURED(shockedPed[4].index) AND IS_PED_UNINJURED(CELEBRITY_DOG) IF shockedPed[4].startedWalking = FALSE IF IS_ENTITY_AT_ENTITY(shockedPed[4].index, CELEBRITY_DOG, <<2.5,2.5,2>>) CLEAR_PED_TASKS(shockedPed[4].index) SET_PED_TO_RAGDOLL_WITH_FALL(shockedPed[4].index, 1500, 2000, TYPE_OVER_WALL, -GET_ENTITY_FORWARD_VECTOR(shockedPed[4].index), 1, <<0,0,0>>, <<0,0,0>>) open_sequence_task(seq) TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-631.84, -153.48, 36.83>>, 1, DEFAULT_TIME_BEFORE_WARP) TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG) TASK_PAUSE(NULL, 1500) TASK_WANDER_STANDARD(NULL) close_sequence_task(seq) task_perform_sequence(shockedPed[4].index, seq) clear_sequence_task(seq) shockedPed[4].startedWalking = TRUE ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks if the vehicle and ped held in a MISSION_VEHICLE struct are alive /// PARAMS: /// vehicle - the MISSION_VEHICLE we're checking /// RETURNS: /// TRUE if both vehicle and ped index are OK FUNC BOOL CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(MISSION_VEHICLE vehicle) IF IS_PED_UNINJURED(vehicle.driver) AND IS_VEHICLE_OK(vehicle.index) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Initialises the values for the mission vehicles PROC SETUP_MISSION_VEHICLES() CRASH_CAR_POSH.carModel = poshCarModel CRASH_CAR_POSH.startPosition = <<-655.81, -278.73, 35.21>> CRASH_CAR_POSH.startHeading = 35 CRASH_CAR_POSH.driverModel = femaleHipsterModel CRASH_CAR_FAMILY.carModel = familyCarModel CRASH_CAR_FAMILY.startPosition = <<-591.7191, -166.3491, 37.8459>> CRASH_CAR_FAMILY.startHeading = 35 CRASH_CAR_FAMILY.driverModel = businessManModel SKID_CAR_TAXI.carModel = taxiModel SKID_CAR_TAXI.startPosition = <<-651.40, -153.68, 36.95>> SKID_CAR_TAXI.startHeading = 217.44 SKID_CAR_TAXI.driverModel = taxiDriverModel // This will probably go back in so just commenting it out. B* 1107526 /*FIRE_TRUCK.carModel = FIRETRUK FIRE_TRUCK.startPosition = <<-635.68, -105.39, 38.14>> FIRE_TRUCK.startHeading = 87.14 FIRE_TRUCK.driverModel = fireManModel*/ SKID_CAR_SENTINEL.carModel = sentinelCarModel SKID_CAR_SENTINEL.startPosition = <<-525.33, -137.35, 38.04>> SKID_CAR_SENTINEL.startHeading = 111.20 SKID_CAR_SENTINEL.driverModel = businessManModel /*ESCORT_CAR_FAMILY.carModel = escortCarModel ESCORT_CAR_FAMILY.startPosition = <<-519.58, -134.52, 38.65>> ESCORT_CAR_FAMILY.startHeading = 111.20 ESCORT_CAR_FAMILY.driverModel = businessManModel*/ FIRST_CAR.carModel = familyCarModel FIRST_CAR.startPosition = <<-683.30, -238.03, 36.63>> FIRST_CAR.startHeading = 29.79 FIRST_CAR.driverModel = taxiDriverModel SECOND_CAR.carModel = taxiModel SECOND_CAR.startPosition = <<-674.44, -262.95, 35.97>> SECOND_CAR.startHeading = 29.80 SECOND_CAR.driverModel = taxiDriverModel TAXI_CAR.carModel = taxiModel TAXI_CAR.startPosition = <<-644.56, -155.68, 37.32>> TAXI_CAR.startHeading = 208.31 TAXI_CAR.driverModel = taxiDriverModel FINAL_CAR.carModel = familyCarModel FINAL_CAR.startPosition = <<-641.91, -158.94, 36.70>> FINAL_CAR.startHeading = 208.7 FINAL_CAR.driverModel = taxiDriverModel ENDPROC /// PURPOSE: /// Creates the scripted traffic and the drivers for the vehicles FUNC BOOL CREATE_TRAFFIC_VEHICLES() //IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea) IF IS_PED_ON_FOOT(PLAYER_PED_ID()) IF NOT DOES_ENTITY_EXIST(CRASH_CAR_POSH.index) IF HAS_MODEL_LOADED(CRASH_CAR_POSH.carModel) AND HAS_MODEL_LOADED(CRASH_CAR_POSH.driverModel) CRASH_CAR_POSH.index = CREATE_VEHICLE(CRASH_CAR_POSH.carModel, CRASH_CAR_POSH.startPosition, CRASH_CAR_POSH.startHeading) CRASH_CAR_POSH.driver = CREATE_PED_INSIDE_VEHICLE(CRASH_CAR_POSH.index, PEDTYPE_CIVMALE, CRASH_CAR_POSH.driverModel) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_POSH.index, TRUE) SET_VEHICLE_DOORS_LOCKED(CRASH_CAR_POSH.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) SET_PED_MONEY(CRASH_CAR_POSH.driver, 0) SET_PED_COMBAT_ATTRIBUTES(CRASH_CAR_POSH.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(CRASH_CAR_POSH.driver, relGroupDrivers) SET_PED_CONFIG_FLAG(CRASH_CAR_POSH.driver, PCF_FallsOutOfVehicleWhenKilled, TRUE) ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(CRASH_CAR_FAMILY.index) IF HAS_MODEL_LOADED(familyCarModel) AND HAS_MODEL_LOADED(businessManModel) CRASH_CAR_FAMILY.index = CREATE_VEHICLE(familyCarModel, <<-591.7191, -166.3491, 37.8459>>, 35) CRASH_CAR_FAMILY.driver = CREATE_PED_INSIDE_VEHICLE(CRASH_CAR_FAMILY.index, PEDTYPE_CIVFEMALE, businessManModel) SET_PED_CONFIG_FLAG(CRASH_CAR_FAMILY.driver, PCF_WillFlyThroughWindscreen, TRUE) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_FAMILY.index, TRUE) SET_VEHICLE_DOORS_LOCKED(CRASH_CAR_FAMILY.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) SET_PED_COMBAT_ATTRIBUTES(CRASH_CAR_FAMILY.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(CRASH_CAR_FAMILY.driver, relGroupDrivers) ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(SKID_CAR_TAXI.index) IF HAS_MODEL_LOADED(taxiModel) AND HAS_MODEL_LOADED(taxiDriverModel) SKID_CAR_TAXI.index = CREATE_VEHICLE(taxiModel, <<-651.40, -153.68, 36.95>>, 217.44) SKID_CAR_TAXI.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_TAXI.index, PEDTYPE_CIVMALE, taxiDriverModel) TAXI_PASSENGER_PED = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_TAXI.index, PEDTYPE_CIVMALE, businessManModel, VS_BACK_RIGHT) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_TAXI.index, TRUE) SET_VEHICLE_DOORS_LOCKED(SKID_CAR_TAXI.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_TAXI.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_COMBAT_ATTRIBUTES(TAXI_PASSENGER_PED, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_TAXI.driver, relGroupDrivers) SET_PED_RELATIONSHIP_GROUP_HASH(TAXI_PASSENGER_PED, relGroupDrivers) ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(SKID_CAR_SENTINEL.index) IF HAS_MODEL_LOADED(sentinelCarModel) AND HAS_MODEL_LOADED(businessManModel) SKID_CAR_SENTINEL.index = CREATE_VEHICLE(sentinelCarModel, <<-525.33, -137.35, 38.04>>, 111.20) SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_SENTINEL.index) SET_VEHICLE_DOORS_LOCKED(SKID_CAR_SENTINEL.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(SKID_CAR_SENTINEL.driver) SKID_CAR_SENTINEL.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_SENTINEL.index, PEDTYPE_CIVMALE, businessManModel) SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_SENTINEL.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_SENTINEL.driver, relGroupDrivers) ENDIF ENDIF RETURN FALSE ENDIF /*IF NOT DOES_ENTITY_EXIST(ESCORT_CAR_FAMILY.index) IF HAS_MODEL_LOADED(escortCarModel) AND HAS_MODEL_LOADED(businessManModel) ESCORT_CAR_FAMILY.index = CREATE_VEHICLE(escortCarModel, <<-519.58, -134.52, 38.65>>, 111.20) SET_VEHICLE_ON_GROUND_PROPERLY(ESCORT_CAR_FAMILY.index) SET_VEHICLE_DOORS_LOCKED(ESCORT_CAR_FAMILY.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(ESCORT_CAR_FAMILY.driver) ESCORT_CAR_FAMILY.driver = CREATE_PED_INSIDE_VEHICLE(ESCORT_CAR_FAMILY.index, PEDTYPE_CIVMALE, businessManModel) SET_PED_COMBAT_ATTRIBUTES(ESCORT_CAR_FAMILY.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(ESCORT_CAR_FAMILY.driver, relGroupDrivers) ENDIF ENDIF ENDIF*/ IF NOT DOES_ENTITY_EXIST(TAXI_CAR.index) IF HAS_MODEL_LOADED(taxiModel) AND HAS_MODEL_LOADED(taxiDriverModel) TAXI_CAR.index = CREATE_VEHICLE(taxiModel, TAXI_CAR.startPosition, TAXI_CAR.startHeading) SET_VEHICLE_ON_GROUND_PROPERLY(TAXI_CAR.index) SET_VEHICLE_DOORS_LOCKED(TAXI_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(TAXI_CAR.driver) TAXI_CAR.driver = CREATE_PED_INSIDE_VEHICLE(TAXI_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel) SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(TAXI_CAR.driver, relGroupDrivers) ENDIF ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(SKID_CAR_JEEP.index) IF HAS_MODEL_LOADED(jeepCarModel) AND HAS_MODEL_LOADED(businessManModel) SKID_CAR_JEEP.index = CREATE_VEHICLE(jeepCarModel, <<-584.32, -156.66, 36.95>>, 117.29) SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_JEEP.index) SET_VEHICLE_DOORS_LOCKED(SKID_CAR_JEEP.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) SKID_CAR_JEEP.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_JEEP.index, PEDTYPE_CIVMALE, businessManModel) SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_JEEP.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_JEEP.driver, relGroupDrivers) ENDIF RETURN FALSE ENDIF ENDIF // Always create these vehicles IF NOT DOES_ENTITY_EXIST(FIRST_CAR.index) IF HAS_MODEL_LOADED(FIRST_CAR.carModel) AND HAS_MODEL_LOADED(taxiDriverModel) FIRST_CAR.index = CREATE_VEHICLE(escortCarModel, <<-683.30, -238.03, 36.63>>, 29.79) SET_VEHICLE_ON_GROUND_PROPERLY(FIRST_CAR.index) SET_VEHICLE_DOORS_LOCKED(FIRST_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(FIRST_CAR.driver) FIRST_CAR.driver = CREATE_PED_INSIDE_VEHICLE(FIRST_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel) SET_PED_COMBAT_ATTRIBUTES(FIRST_CAR.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(FIRST_CAR.driver, relGroupDrivers) ENDIF ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(SECOND_CAR.index) IF HAS_MODEL_LOADED(SECOND_CAR.carModel) AND HAS_MODEL_LOADED(SECOND_CAR.driverModel) SECOND_CAR.index = CREATE_VEHICLE(SECOND_CAR.carModel, SECOND_CAR.startPosition, SECOND_CAR.startHeading) SET_VEHICLE_ON_GROUND_PROPERLY(SECOND_CAR.index) SET_VEHICLE_DOORS_LOCKED(SECOND_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(SECOND_CAR.driver) SECOND_CAR.driver = CREATE_PED_INSIDE_VEHICLE(SECOND_CAR.index, PEDTYPE_CIVMALE, SECOND_CAR.driverModel) SET_PED_COMBAT_ATTRIBUTES(SECOND_CAR.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(SECOND_CAR.driver, relGroupDrivers) ENDIF ENDIF RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(FINAL_CAR.index) IF HAS_MODEL_LOADED(familyCarModel) AND HAS_MODEL_LOADED(taxiDriverModel) FINAL_CAR.index = CREATE_VEHICLE(familyCarModel, FINAL_CAR.startPosition, FINAL_CAR.startHeading) SET_VEHICLE_ON_GROUND_PROPERLY(FINAL_CAR.index) SET_VEHICLE_DOORS_LOCKED(FINAL_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) IF NOT IS_PED_UNINJURED(FINAL_CAR.driver) FINAL_CAR.driver = CREATE_PED_INSIDE_VEHICLE(FINAL_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel) SET_PED_COMBAT_ATTRIBUTES(FINAL_CAR.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(FINAL_CAR.driver, relGroupDrivers) ENDIF ENDIF RETURN FALSE ENDIF // This will probably go back in so just commenting it out. B* 1107526 /*IF NOT DOES_ENTITY_EXIST(FIRE_TRUCK.index) FIRE_TRUCK.index = CREATE_VEHICLE(FIRETRUK, <<-635.68, -105.39, 38.14>>, 87.14) SET_VEHICLE_ON_GROUND_PROPERLY(FIRE_TRUCK.index) IF NOT IS_PED_UNINJURED(FIRE_TRUCK.driver) FIRE_TRUCK.driver = CREATE_PED_INSIDE_VEHICLE(FIRE_TRUCK.index, PEDTYPE_FIRE, fireManModel) SET_PED_COMBAT_ATTRIBUTES(FIRE_TRUCK.driver, CA_ALWAYS_FLEE, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(FIRE_TRUCK.driver, relGroupDrivers) ENDIF ENDIF*/ IF NOT DOES_ENTITY_EXIST(STATIONARY_FIRE_TRUCK) IF HAS_MODEL_LOADED(FIRETRUK) STATIONARY_FIRE_TRUCK = CREATE_VEHICLE(FIRETRUK, <<-637.88, -112.82, 38.10>>, 83.08) SET_VEHICLE_ON_GROUND_PROPERLY(STATIONARY_FIRE_TRUCK) ENDIF RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Gets the player's current weapon /// RETURNS: /// The player's current weapon FUNC WEAPON_TYPE CURRENT_PLAYER_WEAPON() WEAPON_TYPE wep GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wep) RETURN wep ENDFUNC /// PURPOSE: /// Controls the drivers of the cars involved in the crash PROC UPDATE_THE_PEDS_AFTER_CRASH() IF IS_PED_UNINJURED(TAXI_CAR.driver) AND IS_ENTITY_ALIVE(TAXI_CAR.index) AND IS_PED_UNINJURED(PLAYER_PED_ID()) SWITCH taxiDriverState CASE taxiDriver_lookingAtCarCrash IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_FAMILY.index) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_POSH.index) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index) CLEAR_PED_TASKS(TAXI_CAR.driver) IF CURRENT_PLAYER_WEAPON() = WEAPONTYPE_UNARMED SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE) ENDIF TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID()) taxiDriverState = taxiDriver_attackingPlayer ENDIF IF IS_PED_FLEEING(TAXI_CAR.driver) taxiDriverState = taxiDriver_fleeing ENDIF BREAK CASE taxiDriver_attackingPlayer IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index) IF NOT IS_ENTITY_IN_RANGE_ENTITY(TAXI_CAR.driver, TAXI_CAR.index, 20) AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.index, 20) AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.driver, 10) AND NOT IS_PED_FLEEING(TAXI_CAR.driver) CLEAR_PED_TASKS(TAXI_CAR.driver) TASK_TURN_PED_TO_FACE_ENTITY(TAXI_CAR.driver, PLAYER_PED_ID(), -1) SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE) taxiDriverState = taxiDriver_watchingPlayer ENDIF ENDIF IF IS_PED_FLEEING(TAXI_CAR.driver) taxiDriverState = taxiDriver_fleeing ENDIF if HAS_PLAYER_THREATENED_PED(TAXI_CAR.driver, TRUE) SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, FALSE) SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE) CLEAR_PED_TASKS(TAXI_CAR.driver) TASK_SMART_FLEE_PED(TAXI_CAR.driver, PLAYER_PED_ID(), 60, -1) taxiDriverState = taxiDriver_fleeing ENDIF BREAK CASE taxiDriver_watchingPlayer IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), TAXI_CAR.driver) < 8 SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE) TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID()) taxiDriverState = taxiDriver_attackingPlayer ENDIF IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), TAXI_CAR.driver) > 20 open_sequence_task(seq) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 1000) TASK_ENTER_VEHICLE(NULL, TAXI_CAR.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 1.0) close_sequence_task(seq) task_perform_sequence(TAXI_CAR.driver, seq) clear_sequence_task(seq) taxiDriverState = taxiDriver_returnToCrash ENDIF IF IS_PED_FLEEING(TAXI_CAR.driver) taxiDriverState = taxiDriver_fleeing ENDIF BREAK CASE taxiDriver_returnToCrash IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.driver, 8) SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE) TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID()) taxiDriverState = taxiDriver_attackingPlayer ENDIF IF IS_PED_FLEEING(TAXI_CAR.driver) taxiDriverState = taxiDriver_fleeing ENDIF BREAK ENDSWITCH ENDIF IF IS_PED_UNINJURED(CRASH_CAR_POSH.driver) SWITCH femaleDriverState CASE femaleDriver_lookingAtCarCrash IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_FAMILY.index) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_POSH.index) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index) CLEAR_PED_TASKS(CRASH_CAR_POSH.driver) TASK_TURN_PED_TO_FACE_ENTITY(CRASH_CAR_POSH.driver, PLAYER_PED_ID(), 0) femaleDriverState = femaleDriver_cower ENDIF BREAK CASE femaleDriver_cower BREAK CASE femaleDriver_flee BREAK ENDSWITCH ENDIF ENDPROC /// PURPOSE: /// Causes the crash vehicles to crash and makes their drivers react appropriately PROC UPDATE_THE_CRASH() IF crashStage <> CS_FINISHED IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(CRASH_CAR_FAMILY) AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(CRASH_CAR_POSH) AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(TAXI_CAR) IF bCAR_HONKING = FALSE IF IS_ENTITY_IN_ANGLED_AREA(CELEBRITY_DOG, <<-662.768799,-208.317108,35.493214>>, <<-674.628906,-214.651871,38.805908>>, 6.500000) START_VEHICLE_HORN(CRASH_CAR_POSH.index, 1500) TASK_LOOK_AT_ENTITY(CRASH_CAR_POSH.driver, CELEBRITY_DOG, 5000) IF IS_PED_UNINJURED(shockedPed[2].index) IF IS_PED_USING_ANY_SCENARIO(shockedPed[2].index) SET_PED_PANIC_EXIT_SCENARIO(shockedPed[2].index, GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF open_sequence_task(seq) TASK_PAUSE(NULL, 500) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "reaction_backward_big_intro_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 3000) close_sequence_task(seq) task_perform_sequence(shockedPed[2].index, seq) clear_sequence_task(seq) ENDIF bCAR_HONKING = TRUE ENDIF ENDIF SWITCH crashStage CASE CS_WAITING IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 8 CPRINTLN(DEBUG_MISSION, "CAR_REC_SHOULD BE KICKING OFF") crashStage = CS_SET_TO_DRIVE ENDIF ENDIF BREAK CASE CS_SET_TO_DRIVE START_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index, iNumRecBrakeCar, recBrakeCar) START_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index, iNumRecStraightCrashCar, recCrashCars) START_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index, iNumRecSwerveCrashCar, recCrashCars) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index, 2000)//3000) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index, 2650)//3650) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index, 6000)//7000) crashStage = CS_DRIVING BREAK CASE CS_DRIVING IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(CRASH_CAR_FAMILY.index) AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(TAXI_CAR.index) AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(CRASH_CAR_POSH.index) SET_PLAYBACK_SPEED(CRASH_CAR_POSH.index, 0.7) SET_PLAYBACK_SPEED(CRASH_CAR_FAMILY.index, 0.7) SET_PLAYBACK_SPEED(TAXI_CAR.index, 0.85) IF IS_ENTITY_IN_RANGE_ENTITY(CRASH_CAR_FAMILY.index, TAXI_CAR.index, 7) crashStage = CS_SET_TO_CRASH ENDIF ENDIF BREAK CASE CS_SET_TO_CRASH STOP_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index) REMOVE_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars) STOP_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index) REMOVE_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars) STOP_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index) REMOVE_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar) TASK_VEHICLE_MISSION(TAXI_CAR.driver, TAXI_CAR.index, CRASH_CAR_FAMILY.index, MISSION_RAM, 20, DRIVINGMODE_PLOUGHTHROUGH, 0.5, 2) TASK_VEHICLE_MISSION(CRASH_CAR_FAMILY.driver, CRASH_CAR_FAMILY.index, TAXI_CAR.index, MISSION_RAM, 20, DRIVINGMODE_PLOUGHTHROUGH, 0.5, 2) START_VEHICLE_HORN(CRASH_CAR_FAMILY.index, 800) crashStage = CS_CRASHING BREAK CASE CS_CRASHING IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(CRASH_CAR_FAMILY.index) open_sequence_task(seq) TASK_VEHICLE_TEMP_ACTION(NULL, TAXI_CAR.index, TEMPACT_HANDBRAKETURNRIGHT, 1000) close_sequence_task(seq) task_perform_sequence(TAXI_CAR.driver, seq) clear_sequence_task(seq) TASK_VEHICLE_TEMP_ACTION(CRASH_CAR_FAMILY.driver, CRASH_CAR_FAMILY.index, TEMPACT_HANDBRAKETURNLEFT, 1000) SMASH_VEHICLE_WINDOW(CRASH_CAR_FAMILY.index, SC_WINDOW_REAR_LEFT) SMASH_VEHICLE_WINDOW(CRASH_CAR_FAMILY.index, SC_WINDOW_fRONT_LEFT) bCRASH_SHOUTED = TRUE ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_CAR_PILE_UP, TAXI_CAR.index, -1) IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FINAL_CAR) TASK_VEHICLE_DRIVE_TO_COORD(FINAL_CAR.driver, FINAL_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, familyCarModel, DF_SteerAroundPeds | DF_SteerAroundStationaryCars, 5,5) ENDIF crashStage = CS_TASK_THEM_TO_EXIT ENDIF BREAK CASE CS_TASK_THEM_TO_EXIT IF GET_ENTITY_SPEED(CRASH_CAR_FAMILY.index) < 0.5 AND GET_ENTITY_SPEED(TAXI_CAR.index) < 0.5 open_sequence_task(seq) TASK_PAUSE(NULL, 1000) TASK_LEAVE_VEHICLE(NULL, TAXI_CAR.index) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CRASH_CAR_FAMILY.driver, <<-1, 1, 0>>), 1.3, DEFAULT_TIME_BEFORE_WARP) TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_FAMILY.driver, 0) //TASK_START_SCENARIO_IN_PLACE(NULL, "CODE_HUMAN_SHOCKING_BIG_REACTION", 0, TRUE) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) close_sequence_task(seq) task_perform_sequence(TAXI_CAR.driver, seq) clear_sequence_task(seq) open_sequence_task(seq) TASK_LEAVE_VEHICLE(NULL, CRASH_CAR_POSH.index) TASK_TURN_PED_TO_FACE_ENTITY(NULL, TAXI_CAR.index, 2500) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CRASH_CAR_FAMILY.driver, <<-1, 1, 0>>), 1.2, DEFAULT_TIME_BEFORE_WARP, 1) TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_FAMILY.driver, 0) //TASK_START_SCENARIO_IN_PLACE(NULL, "CODE_HUMAN_SHOCKING_BIG_REACTION", 0, TRUE) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED) close_sequence_task(seq) task_perform_sequence(CRASH_CAR_POSH.driver, seq) clear_sequence_task(seq) SET_ENTITY_HEALTH(CRASH_CAR_FAMILY.driver, 0) taxiDriverState = taxiDriver_lookingAtCarCrash femaleDriverState = femaleDriver_lookingAtCarCrash crashStage = CS_FINISHED ENDIF BREAK CASE CS_FINISHED BREAK ENDSWITCH ELIF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FINAL_CAR) IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 19 TASK_VEHICLE_DRIVE_TO_COORD(FINAL_CAR.driver, FINAL_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, familyCarModel, DF_SteerAroundPeds | DF_SteerAroundStationaryCars, 5,5) crashStage = CS_FINISHED ENDIF ENDIF ENDIF ELSE IF IS_VEHICLE_OK(CRASH_CAR_FAMILY.index) AND IS_VEHICLE_OK(CRASH_CAR_POSH.index) AND IS_VEHICLE_OK(TAXI_CAR.index) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_FAMILY.index, TRUE) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_POSH.index, TRUE) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(TAXI_CAR.index, TRUE) UPDATE_THE_PEDS_AFTER_CRASH() ENDIF ENDIF ENDPROC /// PURPOSE: /// Makes the taxi skid to avoid the dog PROC UPDATE_THE_SKIDDING_TAXI() IF bRELEASE_SPORTS_CAR = FALSE IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_TAXI) AND IS_PED_UNINJURED(CELEBRITY_DOG) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SKID_CAR_TAXI.index) SET_PLAYBACK_SPEED(SKID_CAR_TAXI.index, fCAR_REC_SPEED) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 32 STOP_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index) REMOVE_VEHICLE_RECORDING(001, "NIG1C_COMET") CLEAR_PED_TASKS(SKID_CAR_TAXI.driver) TASK_VEHICLE_DRIVE_WANDER(SKID_CAR_TAXI.driver, SKID_CAR_TAXI.index, 20, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS) bRELEASE_SPORTS_CAR = TRUE ENDIF IF bSPORTS_HONKING = FALSE IF IS_ENTITY_IN_RANGE_ENTITY(SKID_CAR_TAXI.index, CELEBRITY_DOG, 6) START_VEHICLE_HORN(SKID_CAR_TAXI.index, 3000) bSPORTS_HONKING = TRUE ENDIF ENDIF ELSE IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 25 START_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index, 001, "NIG1C_COMET") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index, 2500) TASK_LOOK_AT_ENTITY(SKID_CAR_TAXI.driver, CELEBRITY_DOG, -1) IF IS_PED_UNINJURED(TAXI_PASSENGER_PED) TASK_LOOK_AT_ENTITY(TAXI_PASSENGER_PED, CELEBRITY_DOG, -1) ENDIF ENDIF ENDIF ENDIF SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_TAXI.index, TRUE) ENDIF ENDIF ENDPROC /// PURPOSE: /// Makes the other cars react appropriately to the dog PROC UPDATE_THE_OTHER_CAR() IF bRELEASE_SENTINEL_CAR = FALSE IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_SENTINEL) AND IS_PED_UNINJURED(CELEBRITY_DOG) //AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(ESCORT_CAR_FAMILY) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SKID_CAR_SENTINEL.index) SET_PLAYBACK_SPEED(SKID_CAR_SENTINEL.index, fCAR_REC_SPEED) //SET_PLAYBACK_SPEED(ESCORT_CAR_FAMILY.index, fCAR_REC_SPEED) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 35 STOP_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index) REMOVE_VEHICLE_RECORDING(002, "NIG1C_COMET2") CLEAR_PED_TASKS(SKID_CAR_SENTINEL.driver) TASK_VEHICLE_DRIVE_WANDER(SKID_CAR_SENTINEL.driver, SKID_CAR_SENTINEL.index, 20, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights) /*STOP_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index) REMOVE_VEHICLE_RECORDING(001, "NIG1CEscort") CLEAR_PED_TASKS(ESCORT_CAR_FAMILY.driver) open_sequence_task(seq) TASK_PAUSE(NULL, 2000) TASK_VEHICLE_DRIVE_WANDER(NULL, ESCORT_CAR_FAMILY.index, 20, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights) close_sequence_task(seq) task_perform_sequence(ESCORT_CAR_FAMILY.driver, seq) clear_sequence_task(seq)*/ if CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR) TASK_VEHICLE_DRIVE_WANDER(FIRST_CAR.driver, FIRST_CAR.index, 15, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights) ENDIF bRELEASE_SENTINEL_CAR = TRUE ENDIF IF bSENTINEL_HONKING = FALSE IF IS_ENTITY_IN_RANGE_ENTITY(SKID_CAR_SENTINEL.index, CELEBRITY_DOG, 6) START_VEHICLE_HORN(SKID_CAR_SENTINEL.index, 4000) bSENTINEL_HONKING = TRUE ENDIF ENDIF ELSE IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() = 19 START_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index, 002, "NIG1C_COMET2") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index, 4400) TASK_LOOK_AT_ENTITY(SKID_CAR_SENTINEL.driver, CELEBRITY_DOG, -1) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_SENTINEL.index, TRUE) /*START_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index, 001, "NIG1CEscort") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index, 4400) TASK_LOOK_AT_ENTITY(ESCORT_CAR_FAMILY.driver, CELEBRITY_DOG, -1) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(ESCORT_CAR_FAMILY.index, TRUE)*/ ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Makes the fire truck drive out of the fire station, blocking the dog's route // This will probably go back in so just commenting it out. B* 1107526 /*PROC UPDATE_THE_FIRE_TRUCK() IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRE_TRUCK) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() < 41 IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(FIRE_TRUCK.index) SET_PLAYBACK_SPEED(FIRE_TRUCK.index, fCAR_REC_SPEED) ELSE IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() = 39 START_PLAYBACK_RECORDED_VEHICLE(FIRE_TRUCK.index, 001, "NIG1C_FIRE") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(FIRE_TRUCK.index, 1000) SET_VEHICLE_SIREN(FIRE_TRUCK.index, TRUE) SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(FIRE_TRUCK.index, TRUE) ENDIF ENDIF ELSE IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(FIRE_TRUCK.index) open_sequence_task(seq) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-654.22, -117.82, 36.72>>, 3, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 3, 5) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-639.11, -166.04, 36.67>>, 20, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 5, 3) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-551.31, -313.15, 34.11>>, 20, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 5, 3) close_sequence_task(seq) task_perform_sequence(FIRE_TRUCK.driver, seq) clear_sequence_task(seq) ENDIF ENDIF ENDIF ENDIF ENDPROC*/ /// PURPOSE: /// Makes the jeep and its driver react appropriately to the dog PROC UPDATE_THE_JEEP() IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_JEEP) AND IS_PED_UNINJURED(CELEBRITY_DOG) SWITCH jeepStage CASE JS_WAITING BREAK CASE JS_SET_TO_DRIVE SET_ENTITY_COORDS(SKID_CAR_JEEP.index, <<-616.56, -176.60, 37.26>>) SET_ENTITY_HEADING(SKID_CAR_JEEP.index, 117.29) SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_JEEP.index) IF IS_VEHICLE_OK(CRASH_CAR_FAMILY.index) TASK_VEHICLE_MISSION(SKID_CAR_JEEP.driver, SKID_CAR_JEEP.index, CRASH_CAR_FAMILY.index, MISSION_ESCORT_REAR, 15, DRIVINGMODE_PLOUGHTHROUGH, 20, 5) ENDIF SET_VEHICLE_FORWARD_SPEED(SKID_CAR_JEEP.index, 10) jeepStage = JS_DRIVING BREAK CASE JS_DRIVING SET_DRIVE_TASK_CRUISE_SPEED(SKID_CAR_JEEP.driver, 15) IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, SKID_CAR_JEEP.driver, 18) REPLAY_RECORD_BACK_FOR_TIME(3.0, 2.0, REPLAY_IMPORTANCE_LOWEST) jeepStage = JS_SET_TO_SKID ENDIF BREAK CASE JS_SET_TO_SKID open_sequence_task(seq) TASK_VEHICLE_TEMP_ACTION(NULL, SKID_CAR_JEEP.index, TEMPACT_SWERVELEFT, 500) TASK_VEHICLE_TEMP_ACTION(NULL, SKID_CAR_JEEP.index, TEMPACT_HANDBRAKETURNLEFT, 1000) TASK_PAUSE(NULL, 1000) TASK_LEAVE_VEHICLE(NULL, SKID_CAR_JEEP.index) close_sequence_task(seq) task_perform_sequence(SKID_CAR_JEEP.driver, seq) clear_sequence_task(seq) START_VEHICLE_HORN(SKID_CAR_JEEP.index, 1000) jeepStage = JS_EXITING_CAR BREAK CASE JS_EXITING_CAR IF GET_SCRIPT_TASK_STATUS(SKID_CAR_JEEP.driver, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK AND IS_VEHICLE_SEAT_FREE(SKID_CAR_JEEP.index, VS_DRIVER) AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver) open_sequence_task(seq) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SKID_CAR_JEEP.index, <<-2, 2, 0>>), 2) IF IS_PED_UNINJURED(CRASH_CAR_POSH.driver) TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_POSH.driver, 5000) ELSE TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 5000) ENDIF TASK_ENTER_VEHICLE(NULL, SKID_CAR_JEEP.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 1.8, ECF_RESUME_IF_INTERRUPTED | ECF_JACK_ANYONE) TASK_VEHICLE_DRIVE_WANDER(NULL, SKID_CAR_JEEP.index, 10, DF_StopAtLights | DF_StopForPeds | DF_StopForCars) close_sequence_task(seq) task_perform_sequence(SKID_CAR_JEEP.driver, seq) clear_sequence_task(seq) jeepStage = JS_LOOKS_AT_CRASH ENDIF if IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SKID_CAR_JEEP.index) AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver) CLEAR_PED_TASKS(SKID_CAR_JEEP.driver) jeepStage = JS_PLAYER_ENTERS_CAR ENDIF SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_JEEP.index, TRUE) BREAK CASE JS_LOOKS_AT_CRASH if IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SKID_CAR_JEEP.index) AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver) CLEAR_PED_TASKS(SKID_CAR_JEEP.driver) jeepStage = JS_PLAYER_ENTERS_CAR ENDIF BREAK CASE JS_PLAYER_ENTERS_CAR open_sequence_task(seq) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 2000) TASK_ENTER_VEHICLE(null, SKID_CAR_JEEP.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 2.5, ECF_RESUME_IF_INTERRUPTED | ECF_JACK_ANYONE) TASK_VEHICLE_MISSION_PED_TARGET(NULL, SKID_CAR_JEEP.index, PLAYER_PED_ID(), MISSION_FLEE, 20,DF_SteerAroundPeds | DF_SwerveAroundAllCars, 100, 5) close_sequence_task(seq) task_perform_sequence(SKID_CAR_JEEP.driver, seq) clear_sequence_task(seq) jeepStage = JS_JEEP_FLEES BREAK CASE JS_JEEP_FLEES BREAK ENDSWITCH ENDIF ENDPROC /// PURPOSE: /// Positions the dog when the player catches it PROC SET_DOG_POSITION_WHEN_CAUGHT() FLOAT zPos VECTOR vPos_Final SET_ENTITY_COORDS(CELEBRITY_DOG, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0.3,0.9,0>>)) SET_ENTITY_HEADING(CELEBRITY_DOG, GET_ENTITY_HEADING(PLAYER_PED_ID()) + 90) GET_GROUND_Z_FOR_3D_COORD(GET_ENTITY_COORDS(CELEBRITY_DOG), zPos) vPos_Final = GET_ENTITY_COORDS(CELEBRITY_DOG) SET_ENTITY_COORDS(CELEBRITY_DOG, <>) ENDPROC /// PURPOSE: /// Checks if the player is close enough and running fast enough to scare Muffy Cakes into running /// RETURNS: /// TRUE if the player is close enough and running fast enough to scare Muffy Cakes into running, FALSE otherwise FUNC BOOL PLAYER_SCARED_DOG() IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_PED_UNINJURED(CELEBRITY_DOG) IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 6.5) RETURN TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-630.475281,-263.955231,37.405323>>, <<-621.448730,-258.858795,39.220131>>, 4.000000) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Checks if the player is close enough to the dog to have caught it /// PARAMS: /// fAdditionalDistance - an additional value to add on to the standard checking distance /// RETURNS: /// TRUE if the player is close enough to have caught the dog, false otherwise FUNC BOOL PLAYER_CAUGHT_DOG(FLOAT fAdditionalDistance = 0.0) IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_PED_UNINJURED(CELEBRITY_DOG) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR IS_PED_RAGDOLL(PLAYER_PED_ID()) OR IS_PED_GETTING_UP(PLAYER_PED_ID()) OR IS_PED_PRONE(PLAYER_PED_ID()) OR IS_PED_FALLING(PLAYER_PED_ID()) OR IS_PED_JUMPING(PLAYER_PED_ID()) RETURN FALSE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(CELEBRITY_DOG, vChatUpAreaPos1, vChatUpAreaPos2, fChatUpAreaWidth) //missionStage <> MS_GRAB_DOG_CUTSCENE AND missionStage <> MS_DOG_WAITING_AT_FIRESTATION //IF missionStage = MS_DOG_RUNS_AWAY AND stageStage = SS_STAGE //AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, 2.0) AND IS_ENTITY_IN_RANGE_COORDS_2D(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0,1.0,0>>), 1.5) AND NOT HAS_ENTITY_COLLIDED_WITH_ANYTHING(CELEBRITY_DOG) SET_PED_TO_RAGDOLL(PLAYER_PED_ID(), 500, 1000, TASK_RELAX, FALSE, FALSE) SET_PED_RAGDOLL_FORCE_FALL(PLAYER_PED_ID()) /*IF HAS_ANIM_DICT_LOADED(NIGEL1C_DICT) TASK_PLAY_ANIM(PLAYER_PED_ID(), NIGEL1C_DICT, "avoid_rf") ENDIF*/ CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CLOSE", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) RETURN FALSE ENDIF IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), (0.8 + fAdditionalDistance)) /*IF missionStage <> MS_GRAB_DOG_CUTSCENE AND missionStage <> MS_DOG_WAITING_AT_FIRESTATION //IF missionStage = MS_DOG_RUNS_AWAY AND stageStage = SS_STAGE AND IS_ENTITY_IN_RANGE_COORDS_2D(PLAYER_PED_ID(), GET_ENTITY_COORDS(CELEBRITY_DOG), 2.0) SET_PED_TO_RAGDOLL(PLAYER_PED_ID(), 500, 1000, TASK_RELAX, FALSE, FALSE) CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CLOSE", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) ELSE*/ VECTOR offset offset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(CELEBRITY_DOG)) if offset.y > 0 AND offset.z < 0.1 RETURN TRUE ENDIF //ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC PROC FINISHED_CHASE_EARLY() IF IS_PED_UNINJURED(CELEBRITY_PED) TASK_TURN_PED_TO_FACE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1) ENDIF stageStage = SS_SETUP missionStage = MS_GRAB_DOG_CUTSCENE ENDPROC /// PURPOSE: /// Speeds up the dog if the player is too close, slows it down if the player is too far away PROC UPDATE_DOG_RUN_SPEED() IF IS_PED_UNINJURED(CELEBRITY_DOG) AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) IF runSpeed = dogRunsSlow or runSpeed = dogRunsVerySlow if GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() - 1 runSpeed = dogRunsFastest ENDIF ENDIF IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() < 18 AND GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 6 runSpeed = dogRunsFastest ENDIF SWITCH runSpeed CASE dogRunsFastest WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.9) fCAR_REC_SPEED = 1 IF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 9) runSpeed = dogRunsNormal ENDIF BREAK CASE dogRunsNormal WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.65) fCAR_REC_SPEED = 0.77 IF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 12) runSpeed = dogRunsSlow ELSE IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 8) runSpeed = dogRunsFastest ENDIF ENDIF BREAK CASE dogRunsSlow WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.5) fCAR_REC_SPEED = 0.7 IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 10) runSpeed = dogRunsNormal ELIF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 15) IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 8 runSpeed = dogRunsVerySlow ENDIF ENDIF BREAK CASE dogRunsVerySlow WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.3) fCAR_REC_SPEED = 0.5 IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 12) runSpeed = dogRunsSlow ENDIF BREAK ENDSWITCH ENDIF ENDPROC /// PURPOSE: /// Checks if it's ok to play dialogue duing the chase /// RETURNS: /// TRUE if it's OK, FALSE otherwise FUNC BOOL IF_CAN_PLAY_CHASE_DIALOGUE() IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_WRN_DOG") // Catch up with ~b~Mr. Muffy Cakes. RETURN TRUE ELSE RETURN FALSE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Checks whether or not the first shocked ped is playing the avoid animation /// RETURNS: /// TRUE if they're not playing the animation, FALSE otherwise FUNC BOOL NOT_PLAYING_AVOID_ANIM() IF NOT IS_ENTITY_PLAYING_ANIM(shockedPed[0].index, NIGEL1C_DICT, "avoid_rf") AND NOT IS_ENTITY_PLAYING_ANIM(shockedPed[0].index, NIGEL1C_DICT, "avoid_rb") RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Plays appropriate dialogue from the peds along the chase route PROC DEAL_WITH_RANDOM_DIALOGUE() IF shockedPed[0].beenShocked IF bSHOP_PED_SHOUTED = FALSE IF IS_PED_UNINJURED(shockedPed[0].index) AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND NOT IS_PED_FLEEING(shockedPed[0].index) IF NOT_PLAYING_AVOID_ANIM() OR IS_ENTITY_IN_RANGE_ENTITY(shockedPed[0].index, PLAYER_PED_ID(), 5) IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[0].index, PLAYER_PED_ID(), 12) ADD_PED_FOR_DIALOGUE(sSpeech, 5, shockedPed[0].index, "ShockedHipsterFemale") IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_1",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) CLEAR_PED_TASKS(shockedPed[0].index) open_sequence_task(seq) TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 4000) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[0].vPosEnd, 1) close_sequence_task(seq) task_perform_sequence(shockedPed[0].index, seq) clear_sequence_task(seq) bSHOP_PED_SHOUTED = TRUE TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), shockedPed[0].index, 5000) ENDIF ENDIF ENDIF ENDIF ELIF bTREVOR_RESPONDED = FALSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_2",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) bTREVOR_RESPONDED = TRUE ENDIF ENDIF ENDIF ENDIF IF bCRASH_SHOUTED = TRUE IF IS_PED_UNINJURED(shockedPed[2].index) AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND NOT IS_PED_FLEEING(shockedPed[2].index) ADD_PED_FOR_DIALOGUE(sSpeech, 4, shockedPed[2].index, "ShockedBusinessMan") IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[2].index, PLAYER_PED_ID(), 50) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_3",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) bCRASH_SHOUTED = FALSE ENDIF ELSE IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_3",CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) bCRASH_SHOUTED = FALSE ENDIF ENDIF ENDIF ENDIF IF shockedPed[1].beenShocked = TRUE IF bWHAT_YOU_LOOKIN_AT_LINES_READY = TRUE IF IS_PED_UNINJURED(shockedPed[1].index) AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND NOT IS_PED_FLEEING(shockedPed[1].index) IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[1].index, PLAYER_PED_ID(), 8) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_4", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) CLEAR_PED_TASKS(shockedPed[1].index) open_sequence_task(seq) TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 4000) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[1].vPosEnd, 1) close_sequence_task(seq) task_perform_sequence(shockedPed[1].index, seq) clear_sequence_task(seq) TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), shockedPed[1].index, 3500) bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE ENDIF ENDIF ENDIF ENDIF ENDIF IF bFinal_CHASE_LINES_READY = TRUE IF GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > 40 IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_5", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) //IF CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_5", "NIG1C_COLLAR", "NIG1C_COLLAR_1", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1) bFinal_CHASE_LINES_READY = FALSE bGotchaLineReady = TRUE ENDIF ENDIF ENDIF IF bGotchaLineReady IF IS_PED_UNINJURED(CELEBRITY_DOG) AND IS_PED_UNINJURED(PLAYER_PED_ID()) IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, 10.0) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_1", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) bGotchaLineReady = FALSE ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Deletes the vehicle and ped indexes held by a MISSION_VEHICLE struct /// PARAMS: /// vehicle - the MISSION_VEHICLE whose vehicle and ped indexes we're deleting PROC DELETE_MISSION_VEHICLE_AND_DRIVER(MISSION_VEHICLE vehicle) SAFE_DELETE_PED(vehicle.driver) SAFE_DELETE_VEHICLE(vehicle.index) ENDPROC /// PURPOSE: /// PROC TriggerSecondPartofCelebConv() IF bSecondPartReady IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", "NIG1C_MODEL_2", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) bSecondPartReady = FALSE ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// State machine to control the player attempting to chat up the model PROC UPDATE_CHAT_UP_SEQUENCE() SWITCH celebDialogueState CASE CC_PUT_GUN_AWAY if CURRENT_PLAYER_WEAPON() = WEAPONTYPE_UNARMED celebDialogueState = CC_SET_WHISTLE ENDIF BREAK CASE CC_SET_WHISTLE IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) ANIM_DATA none ANIM_DATA animDataBlend animDataBlend.type = APT_SINGLE_ANIM animDataBlend.anim0 = "hailing_whistle_waive_a" animDataBlend.dictionary0 = NIGEL1C_DICT animDataBlend.phase0 = 0.0 animDataBlend.rate0 = 1.0 animDataBlend.weight0 = 0.5 animDataBlend.filter = GET_HASH_KEY("BONEMASK_HEAD_NECK_AND_L_ARM") animDataBlend.flags = AF_UPPERBODY | AF_SECONDARY animDataBlend.ikFlags = AIK_USE_FP_ARM_LEFT TASK_SCRIPTED_ANIMATION(PLAYER_PED_ID(), animDataBlend, none, none, SLOW_BLEND_DURATION, SLOW_BLEND_DURATION) ENDIF REPLAY_RECORD_BACK_FOR_TIME(3.0, 2.0, REPLAY_IMPORTANCE_LOWEST) IF IS_ENTITY_ALIVE(CELEBRITY_DOG) SET_GAMEPLAY_ENTITY_HINT(CELEBRITY_DOG, <<0,0,0>>) ENDIF iChatUpTimer = GET_GAME_TIMER() + 750 celebDialogueState = CC_WHISTLE BREAK CASE CC_WHISTLE IF GET_GAME_TIMER() > iChatUpTimer AND IS_PED_UNINJURED(CELEBRITY_PED) IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED) SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF celebDialogueState = CC_SET_TALKING ENDIF BREAK case CC_SET_TALKING //IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) IF IS_PED_UNINJURED(CELEBRITY_PED) AND PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", "NIG1C_MODEL_1", CONV_PRIORITY_MEDIUM)//, CheckDisplaySubtitles()) //TASK_TURN_PED_TO_FACE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1) TASK_LOOK_AT_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1, SLF_FAST_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) open_sequence_task(seq) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID()) TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_easy_now", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)//|AF_UPPERBODY|AF_SECONDARY) /*TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID()) TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_bye_hard", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID()) TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_damn", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID()) TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_no_way", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)*/ //TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1) close_sequence_task(seq) task_perform_sequence(CELEBRITY_PED, seq) clear_sequence_task(seq) //TASK_PLAY_ANIM(CELEBRITY_PED, MILAN_DICT, "gesture_easy_now", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY) /*open_sequence_task(seq) TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1) close_sequence_task(seq) task_perform_sequence(CELEBRITY_PED, seq) clear_sequence_task(seq)*/ bSecondPartReady = TRUE iChatUpTimer = GET_GAME_TIMER() + 1000 celebDialogueState = CC_DOG_STARTS_WALKING ENDIF BREAK CASE CC_DOG_STARTS_WALKING TriggerSecondPartofCelebConv() IF GET_GAME_TIMER() > iChatUpTimer AND IS_PED_UNINJURED(CELEBRITY_DOG) TASK_FOLLOW_NAV_MESH_TO_COORD(CELEBRITY_DOG, <<-628.1631, -261.5749, 37.6045>>, 1.5, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, -15.13) celebDialogueState = CC_PLAYER_AND_CELEBRITY_TALKING ENDIF BREAK CASE CC_PLAYER_AND_CELEBRITY_TALKING TriggerSecondPartofCelebConv() IF IS_PED_UNINJURED(CELEBRITY_DOG) AND IS_ENTITY_IN_RANGE_COORDS(CELEBRITY_DOG, <<-628.1631, -261.5749, 37.6045>>, 2.0) CLEAR_PRINTS() reasonDogRan = SCARED_DOG stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF /*IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CLEAR_PRINTS() reasonDogRan = MODEL_SCARED_DOG stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), CELEBRITY_PED) > 23 ConvResumeLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION() KILL_FACE_TO_FACE_CONVERSATION() celebDialogueState = CC_PLAYER_TOO_FAR ENDIF*/ BREAK /*CASE CC_PLAYER_TOO_FAR IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), CELEBRITY_PED) < 15 IF bPLAYER_RETURNED_TO_CELEB = FALSE IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_1", CONV_PRIORITY_VERY_HIGH) celebDialogueState = CC_RETURN_TO_CONVO_LINE bPLAYER_RETURNED_TO_CELEB = TRUE ENDIF ELSE celebDialogueState = CC_RETURN_TO_CONVO_LINE ENDIF ENDIF BREAK CASE CC_RETURN_TO_CONVO_LINE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_MODEL", ConvResumeLabel, CONV_PRIORITY_MEDIUM) celebDialogueState = CC_PLAYER_AND_CELEBRITY_TALKING ENDIF ENDIF BREAK*/ ENDSWITCH ENDPROC /// PURPOSE: /// If necessary, stops car recording playback for a vehicle /// PARAMS: /// vehicle - The vehicle we want to stop the car recording for PROC CHECK_AND_STOP_THIS_CAR_RECORDING(MISSION_VEHICLE vehicle) if CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(vehicle) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.index) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.index) TASK_VEHICLE_DRIVE_WANDER(vehicle.driver, vehicle.index, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS) ENDIF ENDIF ENDPROC /// PURPOSE: /// Makes a vehicle drive away using AI /// PARAMS: /// vehicle - The vehicle we want to drive off PROC CLEANUP_SCRIPTED_VEHICLE_TASK(MISSION_VEHICLE vehicle) IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(vehicle) if IS_PED_IN_VEHICLE(vehicle.driver, vehicle.index) CLEAR_PED_TASKS(vehicle.driver) TASK_VEHICLE_DRIVE_WANDER(vehicle.driver, vehicle.index, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS) ENDIF ENDIF ENDPROC /// PURPOSE: /// Stops all car recordings and makes the cars drive away under AI control PROC CHECK_EACH_VEHICLE_FOR_CAR_RECORDING() CHECK_AND_STOP_THIS_CAR_RECORDING(CRASH_CAR_POSH) CHECK_AND_STOP_THIS_CAR_RECORDING(CRASH_CAR_FAMILY) CHECK_AND_STOP_THIS_CAR_RECORDING(SKID_CAR_TAXI) CHECK_AND_STOP_THIS_CAR_RECORDING(SKID_CAR_SENTINEL) //CHECK_AND_STOP_THIS_CAR_RECORDING(ESCORT_CAR_FAMILY) // This will probably go back in so just commenting it out. B* 1107526 //CHECK_AND_STOP_THIS_CAR_RECORDING(FIRE_TRUCK) CLEANUP_SCRIPTED_VEHICLE_TASK(SKID_CAR_JEEP) CLEANUP_SCRIPTED_VEHICLE_TASK(FIRST_CAR) CLEANUP_SCRIPTED_VEHICLE_TASK(SECOND_CAR) CLEANUP_SCRIPTED_VEHICLE_TASK(FINAL_CAR) CLEANUP_SCRIPTED_VEHICLE_TASK(TAXI_CAR) ENDPROC /// PURPOSE: /// Deletes everything created by the mission PROC DELETE_EVERYTHING() TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) SAFE_DELETE_PED(CELEBRITY_PED) SAFE_DELETE_PED(CELEBRITY_DOG) SAFE_DELETE_PED(shockedPed[0].index) SAFE_DELETE_PED(shockedPed[1].index) SAFE_DELETE_PED(shockedPed[2].index) SAFE_DELETE_PED(shockedPed[3].index) SAFE_DELETE_PED(shockedPed[4].index) SAFE_DELETE_PED(TAXI_PASSENGER_PED) DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_FAMILY) DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_POSH) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_TAXI) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_SENTINEL) DELETE_MISSION_VEHICLE_AND_DRIVER(TAXI_CAR) //DELETE_MISSION_VEHICLE_AND_DRIVER(ESCORT_CAR_FAMILY) DELETE_MISSION_VEHICLE_AND_DRIVER(FIRST_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(SECOND_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(FINAL_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_JEEP) // This will probably go back in so just commenting it out. B* 1107526 //DELETE_MISSION_VEHICLE_AND_DRIVER(FIRE_TRUCK) SAFE_DELETE_VEHICLE(STATIONARY_FIRE_TRUCK) ENDPROC /// PURPOSE: /// Checks for the player threatening the model PROC CHECK_IF_PLAYER_THREATENED_MILAN() IF IS_PED_UNINJURED(CELEBRITY_PED) AND IS_PED_UNINJURED(PLAYER_PED_ID()) IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED) //SET_PED_CAN_BE_TARGETTED(CELEBRITY_PED, FALSE) SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupPushed) bPlayerThreatenedModel = TRUE ELSE //IF GET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED) <> relGroupFriendly IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID()) IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED) SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF CLEAR_PED_TASKS(CELEBRITY_PED) TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 80, -1) ENDIF //SET_PED_CAN_BE_TARGETTED(CELEBRITY_PED, TRUE) //SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly) //ENDIF ENDIF IF NOT IS_PED_FLEEING(CELEBRITY_PED) IF IS_PLAYER_VISIBLY_TARGETTING_PED(CELEBRITY_PED) AND NOT HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID()) AND NOT IS_PLAYER_SHOOTING_NEAR_PED(CELEBRITY_PED) IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED) SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF CLEAR_PED_TASKS(CELEBRITY_PED) TASK_LOOK_AT_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1) TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 80, -1) bPlayerThreatenedModel = TRUE ENDIF ENDIF IF bPlayerThreatenedModel = TRUE AND GET_GAME_TIMER() > iCelebScaredTimer AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED, 10) //IF bCelebPleaded = FALSE IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF STRING sConv INT iConvID = GET_RANDOM_INT_IN_RANGE(0, 5) SWITCH iConvID CASE 0 sConv = "NIG1C_GUN" BREAK CASE 1 sConv = "NIG1C_BUMP" BREAK CASE 2 sConv = "NIG1C_HIT" BREAK CASE 3 sConv = "NIG1C_SHOCK" BREAK DEFAULT sConv = "NIG1C_RUN" BREAK ENDSWITCH IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", sConv,CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) iCelebScaredTimer = GET_GAME_TIMER() + 5000 bCelebPleaded = TRUE ENDIF /*IF NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_WRN_DOG") // Catch up with ~b~Mr. Muffy Cakes. AND NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_CATCH") // Catch ~b~Mr. Muffy Cakes. IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_GUN", "NIG1C_GUN_1",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles()) bCelebPleaded = TRUE ENDIF ELSE IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_GUN", "NIG1C_GUN_1",CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) bCelebPleaded = TRUE ENDIF ENDIF*/ //ENDIF ENDIF ENDIF ENDPROC PROC CONTROL_KERRY_SHOPPING() IF IS_PED_UNINJURED(CELEBRITY_PED) IF GET_GAME_TIMER() > iKerryShoppingTimer AND IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), vKerrySpeaksPos1, vKerrySpeaksPos2, fKerrySpeaksWidth) /*IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH, CheckDisplaySubtitles()) iKerryShoppingTimer = GET_GAME_TIMER() + 3000 ENDIF*/ BOOL bConvDone = FALSE IF IS_MESSAGE_BEING_DISPLAYED() bConvDone = CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) ELSE bConvDone = CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH) ENDIF IF bConvDone iKerryShoppingTimer = GET_GAME_TIMER() + 7000 ENDIF ENDIF ENDIF ENDPROC // =========================================================================================================== // DEBUG // =========================================================================================================== /// PURPOSE: /// Jumps to a particular stage in the mission /// PARAMS: /// nextState - The stage to jump to PROC JUMP_TO_STAGE(debugSkipToMissionStage nextState) RC_START_Z_SKIP() CHECK_FAIL_POSSIBILITIES() CLEAR_PRINTS() if IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS_IMMEDIATELY(CELEBRITY_DOG) ENDIF if IS_PED_UNINJURED(CELEBRITY_PED) CLEAR_PED_TASKS(CELEBRITY_PED) ENDIF IF IS_SCRIPTED_CONVERSATION_ONGOING() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF bCelebPleaded = FALSE bPlayerThreatenedModel = FALSE DISABLE_CELLPHONE(FALSE) FINISH_CUTSCENE(FALSE, TRUE) IF DOES_BLIP_EXIST(GOTO_BLIP) REMOVE_BLIP(GOTO_BLIP) ENDIF SAFE_DELETE_PED(shockedPed[0].index) SAFE_DELETE_PED(shockedPed[1].index) SAFE_DELETE_PED(shockedPed[2].index) SAFE_DELETE_PED(shockedPed[3].index) SAFE_DELETE_PED(shockedPed[4].index) SAFE_DELETE_PED(TAXI_PASSENGER_PED) SAFE_DELETE_PED(CELEBRITY_PED) SAFE_DELETE_PED(CELEBRITY_DOG) DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_FAMILY) DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_POSH) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_TAXI) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_SENTINEL) DELETE_MISSION_VEHICLE_AND_DRIVER(TAXI_CAR) //DELETE_MISSION_VEHICLE_AND_DRIVER(ESCORT_CAR_FAMILY) DELETE_MISSION_VEHICLE_AND_DRIVER(FIRST_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(SECOND_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(FINAL_CAR) DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_JEEP) // This will probably go back in so just commenting it out. B* 1107526 //DELETE_MISSION_VEHICLE_AND_DRIVER(FIRE_TRUCK) SAFE_DELETE_VEHICLE(STATIONARY_FIRE_TRUCK) CLEAR_AREA_OF_VEHICLES(<<-669.084290,-209.142578,36.272766>>, 25.25) CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50) CLEAR_AREA_OF_PEDS(<<-670.171875,-208.086105,36.258213>>, 7.250000) stageStage = SS_SETUP ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR") SWITCH nextState CASE DEBUG_TO_START SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.82, -350.10, 34.01>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), -7.52) LOAD_INITIAL_ASSETS(TRUE) CREATE_MODEL_AND_DOG_AT_SHOPS() missionStage = MS_GO_TO_SHOPS BREAK CASE DEBUG_TO_CHECKPOINT LOAD_OTHER_ASSETS() SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.82, -350.10, 34.01>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), -7.52) LOAD_INITIAL_ASSETS(TRUE) CREATE_MODEL_AND_DOG_AT_SHOPS() ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY") missionStage = MS_GO_TO_SHOPS BREAK CASE DEBUG_TO_STORES LOAD_OTHER_ASSETS() WAIT_TILL_ASSETS_ARE_LOADED() IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(PLAYER_PED_ID(), << -605.2227, -291.6463, 35.7791 >>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 38.21) ENDIF LOAD_INITIAL_ASSETS(TRUE) CREATE_MODEL_AND_DOG_AT_SHOPS() ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY") missionStage = MS_STAGE_APPROACH_CELEB BREAK CASE DEBUG_TO_ROAD_CHASE LOAD_OTHER_ASSETS() WAIT_TILL_ASSETS_ARE_LOADED() GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE) SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-630.43, -255.38, 37.5>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 27.58) CELEBRITY_PED = CREATE_PED(PEDTYPE_CIVFEMALE, femaleHipsterModel, vPos_Celeb, 27.58) SET_ENTITY_COORDS_GROUNDED(CELEBRITY_PED, vPos_Celeb) SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_HEAD, 1, 1, 0) //(head) SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_HAIR, 1, 2, 0) //(uppr) SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_TORSO, 0, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_LEG, 0, 0, 0) //(lowr) CELEBRITY_DOG = CREATE_PED(PEDTYPE_MISSION, dogModel, <<-633.89, -250.10, 37.38>>, 50) SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 0, 3, 0) //(uppr) SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_LEG, 0, 1, 0) //(lowr) /*IF IS_PED_UNINJURED(CELEBRITY_PED) SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly) ENDIF IF IS_PED_UNINJURED(CELEBRITY_DOG) SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly) ENDIF*/ ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY") TURN_ROADS_ON(FALSE) missionStage = MS_DOG_RUNS_AWAY BREAK CASE DEBUG_TO_END_CUTSCENE REQUEST_WAYPOINT_RECORDING(dogRoute) REQUEST_MODEL(dogModel) WHILE NOT HAS_MODEL_LOADED(dogModel) WAIT(0) ENDWHILE CELEBRITY_DOG = CREATE_PED(PEDTYPE_MISSION, dogModel, <<-636.42, -95.84, 37.48>>, -95.46) SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 0, 3, 0) //(uppr) SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_LEG, 0, 1, 0) //(lowr) SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-636.21, -96.51, 37.2>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), -5.46) STOP_SCRIPTED_CONVERSATION(FALSE) /*IF IS_PED_UNINJURED(CELEBRITY_PED) SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly) ENDIF IF IS_PED_UNINJURED(CELEBRITY_DOG) SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly) ENDIF*/ missionStage = MS_GRAB_DOG_CUTSCENE BREAK ENDSWITCH SET_MODEL_AS_NO_LONGER_NEEDED(dogModel) IF IS_REPLAY_BEING_SET_UP() VEHICLE_INDEX viTemp CREATE_VEHICLE_FOR_REPLAY(viTemp, << -597.52, -307.37, 34.50 >>, 120.04, FALSE, FALSE, FALSE, TRUE, TRUE) INSTANTLY_FILL_PED_POPULATION() END_REPLAY_SETUP() ELSE WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID())) INSTANTLY_FILL_PED_POPULATION() ENDIF RC_END_Z_SKIP() ENDPROC // =========================================================================================================== // STAGE INIT AND CLEAN UP FUNCTIONS // =========================================================================================================== /// PURPOSE: /// Initialises and loads everything needed at the start of the mission PROC MISSION_INIT() LOAD_INITIAL_ASSETS() IF ARE_INITIAL_ASSETS_LOADED() #IF IS_DEBUG_BUILD s_skip_menu[0].sTxtLabel = "INTRO PHONE CALL" s_skip_menu[1].sTxtLabel = "REPLAY CHECKPOINT (AFTER PHONECALL)" s_skip_menu[2].sTxtLabel = "APPROACH KERRY" s_skip_menu[3].sTxtLabel = "CHASE DEXIE ON ROAD" s_skip_menu[4].sTxtLabel = "OUTRO CUTSCENE" #ENDIF SETUP_SHOCKABLE_PEDS() SETUP_MISSION_VEHICLES() IF IS_PHONE_ONSCREEN() HANG_UP_AND_PUT_AWAY_PHONE() ENDIF ADD_CONTACT_TO_PHONEBOOK(CHAR_NIGEL, TREVOR_BOOK, FALSE) /*IF IS_PED_UNINJURED(PLAYER_PED_ID()) relGroupFriendly = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID()) ENDIF*/ ADD_RELATIONSHIP_GROUP("PUSHED", relGroupPushed) ADD_RELATIONSHIP_GROUP("DRIVERS", relGroupDrivers) CLEAR_AREA_OF_VEHICLES(<<-633.449280,-248.269058,35.874512>> , 50, FALSE) CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50) SET_START_CHECKPOINT_AS_FINAL() LOAD_OTHER_ASSETS() //CREATE_MODEL_AND_DOG_AT_SHOPS() CELEBRITY_PED = sRCLauncherDataLocal.pedID[0] IF IS_PED_UNINJURED(CELEBRITY_PED) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CELEBRITY_PED, TRUE) ENDIF CELEBRITY_DOG = sRCLauncherDataLocal.pedID[1] IF IS_PED_UNINJURED(CELEBRITY_DOG) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CELEBRITY_DOG, TRUE) ENDIF //SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly) ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR") ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY") iKerryShoppingTimer = GET_GAME_TIMER() + 3000 SET_VEHICLE_MODEL_IS_SUPPRESSED(FIRETRUK, TRUE) stageStage = SS_SETUP missionStage = MS_GO_TO_SHOPS ENDIF ENDPROC /// PURPOSE: /// Sets up everything needed to start the scripted cutscene PROC GO_TO_CUTSCENE() SET_WIDESCREEN_BORDERS(TRUE, 0) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF ENDPROC // =========================================================================================================== // MISSION STAGES // =========================================================================================================== /// PURPOSE: /// The player goes to the shops to find the model and her dog PROC STAGE_GO_TO_SHOPS() CONTROL_KERRY_SHOPPING() SWITCH stageStage CASE SS_SETUP CPRINTLN(DEBUG_MISSION, "Setup STAGE_GO_TO_SHOPS") //GOTO_BLIP = ADD_BLIP_FOR_COORD(vPos_GoToShops) GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE) PRINT_NOW("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) TRIGGER_MUSIC_EVENT("NIGEL1C_FORA") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea) stageStage = SS_SETUP missionStage = MS_STAGE_APPROACH_CELEB ELSE //PRINT("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) // Go to the ~y~stores.~s~ stageStage = SS_STAGE ENDIF BREAK CASE SS_STAGE IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea) //OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE) CPRINTLN(DEBUG_MISSION, "Finish STAGE_GO_TO_SHOPS") stageStage = SS_SETUP missionStage = MS_STAGE_APPROACH_CELEB ENDIF IF IS_PED_FLEEING(CELEBRITY_PED) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF CLEAR_PRINTS() /*REMOVE_BLIP(GOTO_BLIP) GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)*/ PRINT_NOW("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1) // Catch ~b~Mr. Muffy Cakes. TRIGGER_MUSIC_EVENT("NIGEL1C_START") reasonDogRan = SCARED_MODEL CPRINTLN(DEBUG_MISSION, "Finish STAGE_GO_TO_SHOPS") stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The player approaches the model PROC STAGE_APPROACH_CELEBRITY() CONTROL_KERRY_SHOPPING() SWITCH stageStage CASE SS_SETUP TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED, -1) CPRINTLN(DEBUG_MISSION, "Setup STAGE_APPROACH_CELEBRITY") /*IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE) // need this here to avoid the locate chevron flashing off for a frame ENDIF*/ IF NOT DOES_BLIP_EXIST(GOTO_BLIP) /*PRINT("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) // Go to the ~y~stores.~s~ GOTO_BLIP = ADD_BLIP_FOR_COORD(vPos_GoToShops)*/ REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_LOW) GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE) PRINT_NOW("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) TRIGGER_MUSIC_EVENT("NIGEL1C_FORA") ENDIF stageStage = SS_STAGE BREAK CASE SS_STAGE IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vChatUpAreaPos1, vChatUpAreaPos2, fChatUpAreaWidth) //OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE) CPRINTLN(DEBUG_MISSION, "Finish STAGE_APPROACH_CELEBRITY") stageStage = SS_SETUP missionStage = MS_STAGE_CHAT_UP_CELEB ENDIF IF IS_PED_FLEEING(CELEBRITY_PED) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF reasonDogRan = SCARED_MODEL CPRINTLN(DEBUG_MISSION, "Finish STAGE_APPROACH_CELEBRITY") stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The player attempts to chat up the model PROC STAGE_CHAT_UP_CELEB() /*IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE) // need this here to avoid the locate chevron flashing off for a frame ENDIF*/ SWITCH stageStage CASE SS_SETUP IF CURRENT_PLAYER_WEAPON() <> WEAPONTYPE_UNARMED SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED) celebDialogueState = CC_PUT_GUN_AWAY ELSE celebDialogueState = CC_SET_WHISTLE ENDIF CPRINTLN(DEBUG_MISSION, "Setup STAGE_CHAT_UP_CELEB") stageStage = SS_STAGE BREAK CASE SS_STAGE UPDATE_CHAT_UP_SEQUENCE() DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER) IF bCelebPleaded = TRUE reasonDogRan = SCARED_MODEL stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF IF PLAYER_SCARED_DOG() IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(TRUE) ENDIF reasonDogRan = SCARED_DOG CPRINTLN(DEBUG_MISSION, "Finish STAGE_CHAT_UP_CELEB") stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF IF GET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED) = relGroupPushed IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF reasonDogRan = PUSHED_MODEL CPRINTLN(DEBUG_MISSION, "Finish STAGE_CHAT_UP_CELEB") stageStage = SS_SETUP missionStage = MS_DOG_RUNS_AWAY ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The dog runs away and the player starts chasing it PROC STAGE_DOG_RUNS_AWAY() SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5) LOAD_OTHER_ASSETS() SWITCH stageStage CASE SS_SETUP /*IF DOES_BLIP_EXIST(GOTO_BLIP) REMOVE_BLIP(GOTO_BLIP) ENDIF GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE) CLEAR_PRINTS() PRINT("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1) // Catch ~b~Mr. Muffy Cakes. */ IF NOT DOES_BLIP_EXIST(GOTO_BLIP) GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE) ENDIF PRINT_NOW("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1) TRIGGER_MUSIC_EVENT("NIGEL1C_START") STOP_GAMEPLAY_HINT() TURN_ROADS_ON(FALSE) WAYPOINT_RECORDING_GET_NUM_POINTS(dogRoute, iNUM_WAYPOINTS) WAYPOINT_RECORDING_GET_COORD(dogRoute, iNUM_WAYPOINTS - 1, vPOS_FINAL_WAYPOINT) IF IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS(CELEBRITY_DOG) open_sequence_task(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null, TRUE) TASK_FOLLOW_WAYPOINT_RECORDING(NULL, dogRoute, 0, EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_DO_NOT_SLOW_FOR_CORNERS | EWAYPOINT_USE_TIGHTER_TURN_SETTINGS | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(CELEBRITY_DOG, seq) clear_sequence_task(seq) ENDIF if reasonDogRan <> SCARED_MODEL AND IS_PED_UNINJURED(CELEBRITY_PED) AND IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS(CELEBRITY_PED) open_sequence_task(seq) IF reasonDogRan = MODEL_SCARED_DOG // waiting on an animation for this ped, the gestures dictionary was removed so currently she doesn't have an anim here //TASK_PLAY_ANIM(NULL, "gestures@female", "get_lost", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, 2700, AF_EXIT_AFTER_INTERRUPTED) TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1) TASK_PAUSE(NULL, 500) ELSE TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1) TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG, 1500) ENDIF TASK_FOLLOW_NAV_MESH_TO_COORD(null, vModelDest, 2.2) TASK_CLEAR_LOOK_AT(NULL) TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "IDLE_D", REALLY_SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_EXIT_AFTER_INTERRUPTED) TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1) close_sequence_task(seq) task_perform_sequence(CELEBRITY_PED, seq) clear_sequence_task(seq) ENDIF bDoStopRunningConv = TRUE iWaitLineTimer = 0 REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_LOW) CPRINTLN(DEBUG_MISSION, "Setup STAGE_DOG_RUNS_AWAY") stageStage = SS_STAGE BREAK CASE SS_STAGE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR bCelebPleaded = TRUE BOOL bConvDone bConvDone = FALSE IF IS_PED_UNINJURED(CELEBRITY_PED) AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), 35.0) /*SWITCH reasonDogRan CASE SCARED_DOG bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_4", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) BREAK CASE SCARED_MODEL bCelebPleaded = TRUE BREAK CASE MODEL_SCARED_DOG bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_3_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_2", "NIG1C_CHASE", "NIG1C_CHASE_3", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) BREAK CASE PUSHED_MODEL bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_3_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_7", "NIG1C_CHASE", "NIG1C_CHASE_3", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) BREAK ENDSWITCH*/ bConvDone = PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_1", CONV_PRIORITY_VERY_HIGH, CheckDisplaySubtitles()) ELSE // player is too far away to hear Kerry so don't bother with the conversation bConvDone = TRUE ENDIF IF bConvDone stageStage = SS_STAGE_2 ENDIF ENDIF IF PLAYER_CAUGHT_DOG() CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY") FINISHED_CHASE_EARLY() ENDIF UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance) SET_PED_MIN_MOVE_BLEND_RATIO(CELEBRITY_DOG, 2.0)//1.5) //SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15) BREAK CASE SS_STAGE_2 UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance) SET_PED_MIN_MOVE_BLEND_RATIO(CELEBRITY_DOG, 3.0)//2.5) //SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15) MODEL_SPEAKS_WHEN_STOPPING() IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG) CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY") stageStage = SS_SETUP missionStage = MS_DOG_RUNS_ON_ROAD ENDIF IF PLAYER_CAUGHT_DOG() CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY") FINISHED_CHASE_EARLY() ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The dog runs onto the road, causing several car crashes PROC DOG_RUNS_ON_ROAD() SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5) //SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15) SWITCH stageStage CASE SS_SETUP LOAD_OTHER_ASSETS() //IF ARE_ASSETS_LOADED() bRELEASE_SENTINEL_CAR = FALSE bRELEASE_SPORTS_CAR = FALSE bCAR_HONKING = FALSE bSHOP_PED_SHOUTED = FALSE bTREVOR_RESPONDED = FALSE bCRASH_SHOUTED = FALSE bFinal_CHASE_LINES_READY = FALSE bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE CLEAR_AREA_OF_VEHICLES(<<-628.896301,-183.174133,36.762650>>, 50, TRUE) CLEAR_AREA_OF_VEHICLES(<<-679.264893,-250.060471,35.605679>>, 21.75, TRUE) CLEAR_AREA_OF_VEHICLES(<<-655.583008,-298.519806,34.453159>>, 39.75, TRUE) CLEAR_AREA_OF_VEHICLES(<<-670.700378,-99.161484,36.779835>>, 60, TRUE) CLEAR_AREA_OF_VEHICLES(<<-561.318176,-153.089767,36.634796>>, 50, TRUE) CLEAR_AREA_OF_VEHICLES(<<-590.626282,-247.092285,34.694180>>, 35, TRUE) CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50) IF NOT CREATE_TRAFFIC_VEHICLES() EXIT ENDIF crashStage = CS_WAITING jeepStage = JS_WAITING CREATE_SHOCKABLE_PED(0) CREATE_SHOCKABLE_PED(1) CREATE_SHOCKABLE_PED(2) CREATE_SHOCKABLE_PED(4) IF IS_PED_UNINJURED(shockedPed[0].index) TASK_START_SCENARIO_IN_PLACE(shockedPed[0].index, "WORLD_HUMAN_WINDOW_SHOP_BROWSE", 0, TRUE) ENDIF IF IS_PED_UNINJURED(shockedPed[2].index) TASK_START_SCENARIO_IN_PLACE(shockedPed[2].index, "WORLD_HUMAN_WINDOW_SHOP_BROWSE", 0, TRUE) ENDIF IF IS_PED_UNINJURED(shockedPed[4].index) TASK_START_SCENARIO_IN_PLACE(shockedPed[4].index, "WORLD_HUMAN_STAND_MOBILE", 0) ENDIF IF IS_PED_UNINJURED(shockedPed[1].index) TASK_START_SCENARIO_IN_PLACE(shockedPed[1].index, "WORLD_HUMAN_HANG_OUT_STREET", 0, TRUE) SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head) SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,2), 0, 1, 0) //(hair) SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(taxiModel) SET_MODEL_AS_NO_LONGER_NEEDED(sentinelCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(familyCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(escortCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(poshCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(businessManModel) //SET_MODEL_AS_NO_LONGER_NEEDED(fireManModel) SET_MODEL_AS_NO_LONGER_NEEDED(taxiDriverModel) SET_MODEL_AS_NO_LONGER_NEEDED(FIRETRUK) SET_MODEL_AS_NO_LONGER_NEEDED(jeepCarModel) SET_MODEL_AS_NO_LONGER_NEEDED(femaleHipsterModel) IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR) open_sequence_task(seq) TASK_VEHICLE_DRIVE_TO_COORD(NULL, SECOND_CAR.index, <<-758.84, -115.64, 36.89>>, 12, DRIVINGSTYLE_NORMAL, SECOND_CAR.carModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) close_sequence_task(seq) task_perform_sequence(SECOND_CAR.driver, seq) clear_sequence_task(seq) ENDIF IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR) open_sequence_task(seq) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-655.18, -202.16, 36.43>>, 18, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-643.56, -196.16, 36.58>>, 10, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-633.40, -191.10, 36.67>>, 5, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) close_sequence_task(seq) task_perform_sequence(FIRST_CAR.driver, seq) clear_sequence_task(seq) ENDIF /*TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1)*/ shockedPed[0].startedWalking = FALSE shockedPed[0].beenShocked = FALSE shockedPed[1].startedWalking = FALSE shockedPed[1].beenShocked = FALSE shockedPed[4].startedWalking = FALSE shockedPed[4].beenShocked = FALSE bWHAT_YOU_LOOKIN_AT_LINES_READY = TRUE bFinal_CHASE_LINES_READY = TRUE bFirstCarsWaiting = TRUE bSeconCarRepositioned = FALSE REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_LOW) CPRINTLN(DEBUG_MISSION, "Setup DOG_RUNS_ON_ROAD") stageStage = SS_STAGE //ENDIF BREAK CASE SS_STAGE UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance) IF IF_CAN_PLAY_CHASE_DIALOGUE() DEAL_WITH_RANDOM_DIALOGUE() ENDIF IF bFirstCarsWaiting = TRUE IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 7 IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR) open_sequence_task(seq) TASK_VEHICLE_DRIVE_TO_COORD(NULL, SECOND_CAR.index, <<-758.84, -115.64, 36.89>>, 12, DRIVINGSTYLE_NORMAL, SECOND_CAR.carModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) close_sequence_task(seq) task_perform_sequence(SECOND_CAR.driver, seq) clear_sequence_task(seq) ENDIF IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR) open_sequence_task(seq) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-655.18, -202.16, 36.43>>, 18, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-643.56, -196.16, 36.58>>, 10, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-633.40, -191.10, 36.67>>, 5, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1) close_sequence_task(seq) task_perform_sequence(FIRST_CAR.driver, seq) clear_sequence_task(seq) ENDIF bFirstCarsWaiting = FALSE ENDIF ELSE IF bSeconCarRepositioned = FALSE IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR) IF GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > 25 CLEAR_PED_TASKS(SECOND_CAR.driver) SET_ENTITY_COORDS(SECOND_CAR.index, <<-678.85, -95.08, 36.86>>) SET_ENTITY_HEADING(SECOND_CAR.index, 208.7) TASK_VEHICLE_DRIVE_TO_COORD(SECOND_CAR.driver, SECOND_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, taxiModel, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5,5) bSeconCarRepositioned = TRUE ENDIF ENDIF ENDIF ENDIF IF jeepStage = JS_WAITING IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 12 jeepStage = JS_SET_TO_DRIVE ENDIF ENDIF MODEL_SPEAKS_WHEN_STOPPING() UPDATE_THE_SHOCKABLE_PED(0) UPDATE_THE_SHOCKABLE_PED(1) UPDATE_THE_FALL_PED() UPDATE_THE_JEEP() UPDATE_THE_CRASH() UPDATE_THE_SKIDDING_TAXI() // This will probably go back in so just commenting it out. B* 1107526 //UPDATE_THE_FIRE_TRUCK() UPDATE_THE_OTHER_CAR() //UPDATE_DOG_RUN_SPEED() IF IS_ENTITY_AT_COORD(CELEBRITY_DOG, vPOS_FINAL_WAYPOINT, <<3,3,2>>) CPRINTLN(DEBUG_MISSION, "Finish DOG_RUNS_ON_ROAD") stageStage = SS_SETUP missionStage = MS_DOG_WAITING_AT_FIRESTATION ENDIF IF PLAYER_CAUGHT_DOG() CPRINTLN(DEBUG_MISSION, "Finish DOG_RUNS_ON_ROAD") FINISHED_CHASE_EARLY() ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// The dog waits for the player in the firestation PROC STAGE_DOG_WAITING_AT_FIRESTATION() SWITCH stageStage CASE SS_SETUP IF IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS(CELEBRITY_DOG) open_sequence_task(seq) //TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), -1) /*TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID()) TASK_PAUSE(NULL, 2000) TASK_WANDER_IN_AREA(NULL, <<-636.45,-98.21,37.04>>, 3.75)*/ TASK_TURN_PED_TO_FACE_COORD(NULL, <<-641.7725, -104.2859, 37.0147>>) TASK_PLAY_ANIM(NULL, DOG_DICT, "chop_growl", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE) close_sequence_task(seq) task_perform_sequence(CELEBRITY_DOG, seq) clear_sequence_task(seq) FORCE_PED_AI_AND_ANIMATION_UPDATE(CELEBRITY_DOG, TRUE) ENDIF TURN_ROADS_ON(TRUE) CPRINTLN(DEBUG_MISSION, "Setup STAGE_DOG_WAITING_AT_FIRESTATION") REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_LOW) // want the dog to growl immediately the first time //iGrowlTimer = GET_GAME_TIMER() ADD_PED_FOR_DIALOGUE(sSpeech, 6, CELEBRITY_DOG, "MrMuffyCakes") stageStage = SS_STAGE BREAK CASE SS_STAGE UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance) UPDATE_THE_JEEP() UPDATE_THE_CRASH() UPDATE_THE_SKIDDING_TAXI() // This will probably go back in so just commenting it out. B* 1107526 //UPDATE_THE_FIRE_TRUCK() UPDATE_THE_OTHER_CAR() /*IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), CELEBRITY_DOG) < 12 IF GET_GAME_TIMER() > iGrowlTimer if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_6",CONV_PRIORITY_MEDIUM) iGrowlTimer = GET_GAME_TIMER() + 8000 ENDIF ENDIF ENDIF ENDIF*/ IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG) SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX, FALSE, FALSE) SET_ENTITY_HEALTH(CELEBRITY_DOG, 0) ENDIF ENDIF IF IF_CAN_PLAY_CHASE_DIALOGUE() DEAL_WITH_RANDOM_DIALOGUE() ENDIF FLOAT fDistMod IF GET_PED_DESIRED_MOVE_BLEND_RATIO(PLAYER_PED_ID()) = PEDMOVE_WALK fDistMod = 1.0 ELSE fDistMod = 2.0 ENDIF IF PLAYER_CAUGHT_DOG(fDistMod) AND NOT IS_PED_FALLING(PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_WAITING_AT_FIRESTATION") stageStage = SS_SETUP missionStage = MS_GRAB_DOG_CUTSCENE ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Plays the scripted cutscene in which the player takes the dog's collar PROC STAGE_GRAB_DOG_CUTSCENE() SWITCH stageStage CASE SS_SETUP REPLAY_RECORD_BACK_FOR_TIME(4.0, 8.0, REPLAY_IMPORTANCE_LOW) CHECK_EACH_VEHICLE_FOR_CAR_RECORDING() ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR") IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), vAlleyCutscenePos1, vAlleyCutscenePos2, fAlleyCutsceneWidth) SAFE_FADE_SCREEN_OUT_TO_BLACK() RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(vAlleyCutscenePos1, vAlleyCutscenePos2, fAlleyCutsceneWidth, vEmergencyCarRespot, fEmergencyCarRespot, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR()) RC_START_CUTSCENE_MODE(vEmergencyOutro) SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vEmergencyOutro) SET_ENTITY_HEADING(PLAYER_PED_ID(), fEmergencyOutro) ELSE RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-636.693176,-96.585403,36.547657>>, <<-628.838684,-97.430687,38.069145>>, 7.0, <<-641.35, -99.50, 37.62>>, 135.52, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR()) RC_START_CUTSCENE_MODE(<<-636.7341, -99.1310, 37.0476>>) ENDIF REQUEST_ANIM_DICT(OUTRO_DICT) while not HAS_ANIM_DICT_LOADED(OUTRO_DICT) WAIT(0) endwhile /*camCutsceneStart = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) SET_CAM_PARAMS(camCutsceneStart, get_cam_pos(), <<-0.6717, -0.0000, -175.6980>>, 50) POINT_CAM_AT_ENTITY(camCutsceneStart, PLAYER_PED_ID(), <<0,0,-0.1>>) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_CAM_ACTIVE(camCutsceneStart, TRUE)*/ IF IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS_IMMEDIATELY(CELEBRITY_DOG) //SET_DOG_POSITION_WHEN_CAUGHT() ENDIF STOP_SCRIPTED_CONVERSATION(TRUE) IF DOES_BLIP_EXIST(GOTO_BLIP) REMOVE_BLIP(GOTO_BLIP) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) IF IS_PED_UNINJURED(CELEBRITY_DOG) /*open_sequence_task(seq) //TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1) //TASK_PLAY_ANIM(NULL, KNEEL_ENTER_DICT, "enter", NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_DEFAULT, 0.3) //TASK_PLAY_ANIM(NULL, KNEEL_DICT, "base", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) //TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "idle_b", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) TASK_PAUSE(NULL, iPauseTime) TASK_PLAY_ANIM(NULL, OUTRO_DICT, "take_collar_trevor")//, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1 TASK_PAUSE(NULL, -1) close_sequence_task(seq) task_perform_sequence(PLAYER_PED_ID(), seq) clear_sequence_task(seq) open_sequence_task(seq) TASK_PAUSE(NULL, iPauseTime) TASK_PLAY_ANIM(NULL, OUTRO_DICT, "take_collar_dog") TASK_PAUSE(NULL, -1) close_sequence_task(seq) task_perform_sequence(CELEBRITY_DOG, seq) clear_sequence_task(seq)*/ VECTOR vStartPos vStartPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vStartPos) /*FLOAT fStartZ IF REPEAT_GET_GROUND_Z(vStartPos, fStartZ, 2) vStartPos.z = fStartZ ENDIF*/ iSyncedSceneID = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_ROTATION(PLAYER_PED_ID())) SET_SYNCHRONIZED_SCENE_LOOPED(iSyncedSceneID,FALSE) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iSyncedSceneID,FALSE) TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iSyncedSceneID, OUTRO_DICT, "take_collar_trevor", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT) TASK_SYNCHRONIZED_SCENE(CELEBRITY_DOG, iSyncedSceneID, OUTRO_DICT, "take_collar_dog", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) camCutsceneStart = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE) PLAY_SYNCHRONIZED_CAM_ANIM(camCutsceneStart, iSyncedSceneID, "take_collar_cam", OUTRO_DICT) RENDER_SCRIPT_CAMS(TRUE, FALSE) ENDIF SAFE_FADE_SCREEN_IN_FROM_BLACK() //while not CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_1", "NIG1C_COLLAR", "NIG1C_COLLAR_2", CONV_PRIORITY_MEDIUM) WHILE NOT PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_2", CONV_PRIORITY_MEDIUM) STOP_SCRIPTED_CONVERSATION(TRUE) KILL_FACE_TO_FACE_CONVERSATION() WAIT(0) ENDWHILE SAFE_DELETE_PED(CELEBRITY_PED) //iOutroTimer = GET_GAME_TIMER() + 2000//(iPauseTime+1000) bPLAYED_COLLAR_SOUND = FALSE //bRESUMED_COLLAR_CONVERSATION = FALSE TURN_ROADS_ON(TRUE) TRIGGER_MUSIC_EVENT("NIGEL1C_END") CPRINTLN(DEBUG_MISSION, "Setup STAGE_GRAB_DOG_CUTSCENE") stageStage = SS_STAGE BREAK CASE SS_STAGE //if IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), NIGEL1C_DICT, "idle_b") //if IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), KNEEL_DICT, "base") IF bPLAYED_COLLAR_SOUND = FALSE AND IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iSyncedSceneID) >= 0.75 //GET_GAME_TIMER() > iOutroTimer AND IS_PED_UNINJURED(CELEBRITY_DOG) //if NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //CLEAR_PRINTS() PLAY_SOUND_FROM_ENTITY(-1, "COLLAR", CELEBRITY_DOG, "NIGEL_1C_SOUNDSET") SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 1, 0, 0) //(uppr) //iOutroTimer = GET_GAME_TIMER() + 1200 bPLAYED_COLLAR_SOUND = TRUE //ENDIF ELSE IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_3", CONV_PRIORITY_MEDIUM) //STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP() /*RENDER_SCRIPT_CAMS(FALSE, TRUE) IF DOES_CAM_EXIST(camCutsceneStart) SET_CAM_ACTIVE(camCutsceneStart, FALSE) DESTROY_CAM (camCutsceneStart) ENDIF*/ //FINISH_CUTSCENE() STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP() IF DOES_CAM_EXIST(camCutsceneStart) SET_CAM_ACTIVE(camCutsceneStart, FALSE) DESTROY_CAM (camCutsceneStart) ENDIF TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) RC_END_CUTSCENE_MODE() CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE") stageStage = SS_SETUP missionstage = MS_STAGE_PLAY_OUTRO ENDIF ENDIF /*IF bRESUMED_COLLAR_CONVERSATION = FALSE IF GET_GAME_TIMER() > iOutroTimer IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_3", CONV_PRIORITY_MEDIUM) //iOutroTimer = GET_GAME_TIMER() + 1000 bRESUMED_COLLAR_CONVERSATION = TRUE ENDIF ENDIF ELSE //IF GET_GAME_TIMER() > iOutroTimer IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //TASK_PLAY_ANIM(PLAYER_PED_ID(), KNEEL_EXIT_DICT, "exit", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1) //FINISH_CUTSCENE(FALSE, FALSE) STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP() IF DOES_CAM_EXIST(camCutsceneStart) SET_CAM_ACTIVE(camCutsceneStart, FALSE) DESTROY_CAM (camCutsceneStart) ENDIF TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) RC_END_CUTSCENE_MODE() CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE") stageStage = SS_SETUP missionstage = MS_STAGE_PLAY_OUTRO ENDIF ENDIF*/ ENDIF //ENDIF IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() stageStage = SS_STAGE_2 ENDIF BREAK CASE SS_STAGE_2 SAFE_FADE_SCREEN_OUT_TO_BLACK() RC_START_CUTSCENE_MODE(<<0.0,0.0,0.0>>, FALSE, FALSE, FALSE) IF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID) SET_SYNCHRONIZED_SCENE_PHASE(iSyncedSceneID, 1.0) ENDIF WAIT(FLOW_FAIL_FADE_TIME+1000) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) ENDIF /*IF IS_PED_UNINJURED(PLAYER_PED_ID()) TASK_PLAY_ANIM(PLAYER_PED_ID(), KNEEL_EXIT_DICT, "exit", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1) ENDIF*/ IF IS_PED_UNINJURED(CELEBRITY_DOG) SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr) ENDIF FINISH_CUTSCENE(FALSE, TRUE) CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE") stageStage = SS_SETUP missionstage = MS_STAGE_PLAY_OUTRO RC_END_CUTSCENE_MODE() SAFE_FADE_SCREEN_IN_FROM_BLACK() BREAK ENDSWITCH ENDPROC //---------------------------- //OUTRO //---------------------------- /// PURPOSE: /// Makes the dog wakl away and plays the end of mission phone call with Nigel and Mrs Thornhill PROC STAGE_PLAY_OUTRO() SWITCH stageStage CASE SS_SETUP //TASK_SMART_FLEE_PED(CELEBRITY_DOG, PLAYER_PED_ID(), 100, -1, TRUE) IF IS_PED_UNINJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) CLEAR_PED_SECONDARY_TASK(PLAYER_PED_ID()) ENDIF IF IS_PED_UNINJURED(CELEBRITY_DOG) CLEAR_PED_TASKS(CELEBRITY_DOG) open_sequence_task(seq) //TASK_PAUSE(NULL, 1000) //TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0,2,0>>), 2.5) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0.5,1,0>>), 2.5) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -650.2209, -120.7035, 36.8320 >>, 2.5, DEFAULT_TIME_BEFORE_WARP, 1) TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 50, -1, TRUE) close_sequence_task(seq) task_perform_sequence(CELEBRITY_DOG, seq) clear_sequence_task(seq) ENDIF IF IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE") STOP_AUDIO_SCENE("NIGEL_1C_SCENE") ENDIF IF IS_PED_UNINJURED(CELEBRITY_PED) IF GET_DISTANCE_BETWEEN_PEDS(CELEBRITY_PED, PLAYER_PED_ID()) < 30 TASK_FOLLOW_TO_OFFSET_OF_ENTITY(CELEBRITY_PED, CELEBRITY_DOG, <<0,0,0>>, 2, -1, 3) ENDIF ENDIF iOutroTimer = -1 // GET_GAME_TIMER() + 3750 CPRINTLN(DEBUG_MISSION, "Setup STAGE_PLAY_OUTRO") stageStage = SS_STAGE BREAK CASE SS_STAGE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF iOutroTimer < 0 iOutroTimer = GET_GAME_TIMER() + 3000 ELIF GET_GAME_TIMER() > iOutroTimer TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) REMOVE_PED_FOR_DIALOGUE(sSpeech, 3) REMOVE_PED_FOR_DIALOGUE(sSpeech, 4) REMOVE_PED_FOR_DIALOGUE(sSpeech, 5) REMOVE_PED_FOR_DIALOGUE(sSpeech, 6) ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR") ADD_PED_FOR_DIALOGUE(sSpeech, 3, NULL, "NIGEL") ADD_PED_FOR_DIALOGUE(sSpeech, 4, NULL, "MRSTHORNHILL") IF PLAYER_CALL_CHAR_CELLPHONE(sSpeech, CHAR_NIGEL, "NIG1CAU", "NIG1C_OUT", CONV_PRIORITY_VERY_HIGH) REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_LOW) CPRINTLN(DEBUG_MISSION, "Finish STAGE_PLAY_OUTRO") missionStage = MS_WAIT_FOR_CALL_TO_END ENDIF ENDIF /*ELSE iOutroTimer = GET_GAME_TIMER() + 750*/ ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Waits for the phone call to end, passes the mission when it has PROC STAGE_WAIT_FOR_CALL_TO_END() IF bOUTRO_CALL_GOING_ON = FALSE IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bOUTRO_CALL_GOING_ON = TRUE ENDIF ENDIF IF bOUTRO_CALL_GOING_ON = TRUE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CLEAR_PRINTS() Script_Passed() ENDIF ENDIF ENDPROC /// PURPOSE: /// Fades out when fading the mission PROC FAIL_WAIT_FOR_FADE() SWITCH stageStage CASE SS_SETUP CPRINTLN(DEBUG_MISSION, "******************* MISSION FAILED *********************") KILL_FACE_TO_FACE_CONVERSATION() IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_ANY_CONVERSATION() ENDIF CLEAR_PRINTS() CLEAR_HELP() // remove blips IF DOES_BLIP_EXIST(GOTO_BLIP) REMOVE_BLIP(GOTO_BLIP) ENDIF CPRINTLN(DEBUG_MISSION, "CASE SS_SETUP") TRIGGER_MUSIC_EVENT("NIGEL1C_FAIL") IF NOT IS_PED_UNINJURED(CELEBRITY_DOG) failReason = FAIL_KILLED_DOG ENDIF STRING sFailReason SWITCH failReason CASE FAIL_CELEB_KILLED sFailReason = "N1C_F_EXMOD" // ~r~Kerry died.~s~ BREAK CASE FAIL_KILLED_DOG sFailReason = "N1C_F_EXDOG" // ~r~Dexie died.~s~ BREAK CASE FAIL_CELEB_INJURED sFailReason = "N1C_F_MOD" // ~r~You injured Kerry.~s~ BREAK CASE FAIL_CELEB_SCARED sFailReason = "N1_C_F_THREAT" // ~r~You scared Kerry.~s~ BREAK CASE FAIL_INJURED_DOG sFailReason = "N1C_F_DOG" // ~r~You injured Dexie.~s~ BREAK CASE FAIL_LOST_DOG sFailReason = "N1C_F_LOST" // ~r~You lost Dexie.~s~ BREAK DEFAULT // no fail text BREAK ENDSWITCH IF failReason = FAIL_DEFAULT Random_Character_Failed() ELSE Random_Character_Failed_With_Reason(sFailReason)//, TRUE, bDelayFade) ENDIF CPRINTLN(DEBUG_MISSION, "Setup FAIL_WAIT_FOR_FADE") stageStage = SS_STAGE BREAK CASE SS_STAGE IF GET_MISSION_FLOW_SAFE_TO_CLEANUP() CPRINTLN(DEBUG_MISSION, "Finish FAIL_WAIT_FOR_FADE") DELETE_EVERYTHING() IF IS_PHONE_ONSCREEN() HANG_UP_AND_PUT_AWAY_PHONE() ENDIF IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_ANY_CONVERSATION() ENDIF #IF IS_DEBUG_BUILD WHILE IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CPRINTLN(DEBUG_MISSION, "WAITING FOR THE CONVO TO END BEFORE CLEANING UP") KILL_ANY_CONVERSATION() WAIT(0) ENDWHILE #ENDIF Script_Cleanup() ELSE // not finished fading out // you may want to handle dialogue etc here. ENDIF BREAK ENDSWITCH ENDPROC // =========================================================================================================== // DEBUG // =========================================================================================================== /// PURPOSE: /// Checks for debug pass or fail and skips stages if necessary #IF IS_DEBUG_BUILD PROC DEBUG_Check_Debug_Keys() IF missionStage <> MS_FAIL_WAIT_FOR_FADE // Check for Pass IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) Script_Passed() ENDIF // Check for Fail IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) failReason = FAIL_DEFAULT stageStage = SS_SETUP missionStage = MS_FAIL_WAIT_FOR_FADE ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) //skip current stage SWITCH missionStage CASE MS_GO_TO_SHOPS JUMP_TO_STAGE(DEBUG_TO_STORES) BREAK CASE MS_STAGE_APPROACH_CELEB JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK CASE MS_STAGE_CHAT_UP_CELEB JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK CASE MS_DOG_RUNS_AWAY JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK CASE MS_DOG_RUNS_ON_ROAD JUMP_TO_STAGE(DEBUG_TO_END_CUTSCENE) BREAK CASE MS_DOG_WAITING_AT_FIRESTATION JUMP_TO_STAGE(DEBUG_TO_END_CUTSCENE) BREAK CASE MS_GRAB_DOG_CUTSCENE CLEAR_PRINTS() Script_Passed() BREAK CASE MS_STAGE_PLAY_OUTRO CLEAR_PRINTS() Script_Passed() BREAK CASE MS_WAIT_FOR_CALL_TO_END CLEAR_PRINTS() Script_Passed() BREAK ENDSWITCH ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) //skip back SWITCH missionStage CASE MS_GO_TO_SHOPS JUMP_TO_STAGE(DEBUG_TO_START) BREAK CASE MS_STAGE_APPROACH_CELEB JUMP_TO_STAGE(DEBUG_TO_START) BREAK CASE MS_STAGE_CHAT_UP_CELEB JUMP_TO_STAGE(DEBUG_TO_START) BREAK CASE MS_DOG_RUNS_AWAY JUMP_TO_STAGE(DEBUG_TO_STORES) BREAK CASE MS_DOG_RUNS_ON_ROAD JUMP_TO_STAGE(DEBUG_TO_STORES) BREAK CASE MS_DOG_WAITING_AT_FIRESTATION JUMP_TO_STAGE(DEBUG_TO_STORES) BREAK CASE MS_GRAB_DOG_CUTSCENE JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK CASE MS_STAGE_PLAY_OUTRO JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK CASE MS_WAIT_FOR_CALL_TO_END JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE) BREAK ENDSWITCH ENDIF IF LAUNCH_MISSION_STAGE_MENU(s_skip_menu, i_debug_jump_stage) INT e_stage = i_debug_jump_stage JUMP_TO_STAGE(INT_TO_ENUM(debugSkipToMissionStage, e_stage)) ENDIF ENDIF ENDPROC #ENDIF // =========================================================================================================== // Script Loop // =========================================================================================================== SCRIPT(g_structRCScriptArgs sRCLauncherDataIn) sRCLauncherDataLocal = sRCLauncherDataIn RC_TakeEntityOwnership(sRCLauncherDataLocal) RC_CLEANUP_LAUNCHER() SET_MISSION_FLAG(TRUE) DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, TRUE) // Setup callback when player is killed, arrested or goes to multiplayer IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU)) PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]") TRIGGER_MUSIC_EVENT("NIGEL1C_FAIL") Random_Character_Failed() Script_Cleanup() ENDIF IF Is_Replay_In_Progress() // Set up the initial scene for replays g_bSceneAutoTrigger = TRUE eInitialSceneStage = IS_REQUEST_SCENE WHILE NOT SetupScene_NIGEL_1C(sRCLauncherDataLocal) WAIT(0) ENDWHILE g_bSceneAutoTrigger = FALSE ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE") START_AUDIO_SCENE("NIGEL_1C_SCENE") ENDIF #IF IS_DEBUG_BUILD SETUP_WIDGETS() #ENDIF SET_WANTED_LEVEL_MULTIPLIER(0.1) IF IS_REPLAY_IN_PROGRESS() INT iReplayStage = GET_REPLAY_MID_MISSION_STAGE() IF g_bShitskipAccepted = TRUE iReplayStage++ // player is skipping this stage ENDIF SWITCH iReplayStage CASE CP_START CPRINTLN(DEBUG_MISSION, "Replay at Start") /*LOAD_INITIAL_ASSETS(TRUE) MISSION_INIT() JUMP_TO_STAGE(DEBUG_TO_CHECKPOINT) BREAK CASE CP_CELEB CPRINTLN(DEBUG_MISSION, "Replay at celeb")*/ START_REPLAY_SETUP(<< -605.2227, -291.6463, 35.7791 >>, 38.21) RC_START_Z_SKIP() LOAD_INITIAL_ASSETS(TRUE) MISSION_INIT() JUMP_TO_STAGE(DEBUG_TO_STORES) BREAK CASE CP_MISSION_PASSED CPRINTLN(DEBUG_MISSION, "Replay mission passed") /*SET_ENTITY_COORDS_NO_OFFSET(PLAYER_PED_ID(), <<-636.6826, -97.2394, 37.1276>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 152.2261) WAIT(0) WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)*/ START_REPLAY_SETUP(<<-636.6826, -97.2394, 37.1276>>, 152.2261) VEHICLE_INDEX viTemp CREATE_VEHICLE_FOR_REPLAY(viTemp, << -649.19, -105.83, 37.63 >>, 125.45, FALSE, FALSE, FALSE, TRUE, TRUE) END_REPLAY_SETUP() SAFE_FADE_SCREEN_IN_FROM_BLACK() RC_END_Z_SKIP() INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI1C_PLAYER_GOT_TOO_FAR_FROM_MUFFY) bBEEN_WARNED_ABOUT_DISTANCE = TRUE Script_Passed() BREAK DEFAULT SCRIPT_ASSERT("Invalid replay checkpoint") BREAK ENDSWITCH ELSE IF IS_REPEAT_PLAY_ACTIVE() IF IS_PED_UNINJURED(PLAYER_PED_ID()) SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.1522, -292.7876, 35.7793>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 30.3570) WAIT(0) WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) ENDIF SAFE_FADE_SCREEN_IN_FROM_BLACK() ENDIF ENDIF WHILE(TRUE) REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_VSTLA") UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene) SWITCH missionStage CASE MS_INIT MISSION_INIT() BREAK CASE MS_GO_TO_SHOPS STAGE_GO_TO_SHOPS() BREAK CASE MS_STAGE_APPROACH_CELEB STAGE_APPROACH_CELEBRITY() BREAK CASE MS_STAGE_CHAT_UP_CELEB STAGE_CHAT_UP_CELEB() BREAK CASE MS_DOG_RUNS_AWAY STAGE_DOG_RUNS_AWAY() BREAK CASE MS_DOG_RUNS_ON_ROAD DOG_RUNS_ON_ROAD() BREAK CASE MS_DOG_WAITING_AT_FIRESTATION STAGE_DOG_WAITING_AT_FIRESTATION() BREAK CASE MS_GRAB_DOG_CUTSCENE STAGE_GRAB_DOG_CUTSCENE() BREAK CASE MS_STAGE_PLAY_OUTRO STAGE_PLAY_OUTRO() BREAK CASE MS_WAIT_FOR_CALL_TO_END STAGE_WAIT_FOR_CALL_TO_END() BREAK CASE MS_FAIL_WAIT_FOR_FADE FAIL_WAIT_FOR_FADE() BREAK ENDSWITCH if missionStage <> MS_FAIL_WAIT_FOR_FADE CHECK_FAIL_POSSIBILITIES() CHECK_IF_PLAYER_THREATENED_MILAN() ENDIF WAIT(0) // Loop within here until the mission passes or fails #IF IS_DEBUG_BUILD DEBUG_Check_Debug_Keys() #ENDIF ENDWHILE // Script should never reach here. Always terminate with cleanup function. ENDSCRIPT