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

2846 lines
123 KiB
Python
Executable File

//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 "cutscene_public.sch"
USING "commands_cutscene.sch"
USING "commands_entity.sch"
USING "commands_script.sch"
USING "rage_builtins.sch"
USING "globals.sch"
USING "cellphone_public.sch"
USING "commands_cutscene.sch"
USING "commands_entity.sch"
USING "commands_script.sch"
USING "rgeneral_include.sch"
USING "commands_vehicle.sch"
USING "cutscene_public.sch"
USING "dialogue_public.sch"
USING "randomChar_public.sch"
USING "script_blips.sch"
USING "script_player.sch"
USING "script_ped.sch"
USING "taxi_functions.sch"
USING "commands_event.sch"
USING "commands_recording.sch"
#IF IS_DEBUG_BUILD
USING "select_mission_stage.sch"
USING "shared_debug.sch"
#ENDIF
USING "CompletionPercentage_public.sch"
USING "RC_Threat_public.sch"
USING "initial_scenes_Paparazzo.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : Paparazzo4.sc
// AUTHOR : Joe Binks
// DESCRIPTION : Franklin bumps into Beverly.
// He is filming his reality show and annoys Franklin.
// Leave, beat him up or shoot him.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
g_structRCScriptArgs sRCLauncherDataLocal
//********************************************************************************************************************
// :ENUMS:
//********************************************************************************************************************
// Mission stages
ENUM MISSION_STAGE
MS_INIT = 0,
MS_INTRO,
MS_BEV_ON_FOOT,
MS_BEV_IN_CAR,
MS_PASSED
ENDENUM
ENUM MISSION_REQ
RQ_NONE,
RQ_CAMERA_CUTSCENE
ENDENUM
ENUM STAGE_STATES
SS_INIT,
SS_ACTIVE,
SS_CLEANUP,
SS_MESKIPPED
ENDENUM
ENUM PED_ENUMS
BEV = 0,
CAMERAMAN = 1,
MAKEUPWMAN = 2
ENDENUM
ENUM CAR_STEAL_STAGE
CSS_READY = 0,
CSS_START,
CSS_STOLEN,
CSS_RETALIATE,
CSS_RETURN,
CSS_DONE
ENDENUM
ENUM INTERRUPT_STAGE
IS_READY,
IS_INTERRUPTION,
IS_RESTART,
IS_DONE
ENDENUM
//****************************************************************************************************************************
// :CONSTANTS:
//****************************************************************************************************************************
#IF IS_DEBUG_BUILD
CONST_INT MAX_SKIP_MENU_LENGTH 2
#ENDIF
CONST_INT FRANKLIN_ID 1
CONST_INT BEVERLY_ID 3
CONST_INT CAMERA_ID 4
CONST_INT BEVS_CASH 2000
CONST_INT BEV_WAIT_TIME 10000
//****************************************************************************************************************************
// :INDICES, STRUCTs, and anything else:
//****************************************************************************************************************************
//**********************************************INDICES
//BLIP INDICIES
BLIP_INDEX biGOTO
//**********************************************STRUCTs
//Dialogue struc
structPedsForConversation conversationPeds
//DEBUG DECLARATIONS
#IF IS_DEBUG_BUILD
MissionStageMenuTextStruct s_skip_menu[MAX_SKIP_MENU_LENGTH]
INT i_debug_jump_stage
#ENDIF
//****************************************************************************************************************************
// :MISSION FLOW VARIABLES:
//****************************************************************************************************************************
INT iMissionState = 0
MISSION_STAGE eMissionStage = MS_INIT //track what MISSION stage we are at
STAGE_STATES eState = SS_INIT
VECTOR vIntroAreaPos1 = <<-498.843964,230.908646,81.103127>>
VECTOR vIntroAreaPos2 = <<-487.096893,230.157562,84.066666>>
FLOAT fIntroAreaWidth = 11.0
INT iControlTimer = 0
INT iTextTimer = 0
INT iCheckDoorsTimer = 0
INT iPassTimer = 0
CONST_INT NUM_CAMERA_LINES 4
STRING sCameraTalk[NUM_CAMERA_LINES]
INT iCurrentCameraLine = 0
CONST_INT iCameraLineDelay 15000
INT iCameraLineTimer = 0
VECTOR vBevOffset = <<0,0,0>>//<<0.1561, -0.0030, -0.0344>>
VECTOR vBevRot = <<0,0,0>>//<<202.8703, -124.4300, -121.5398>>
VECTOR vCamOffset = <<0.1181, 0.2229, -0.1535>>
VECTOR vCamRot = <<259.2501, 24.0800, -51.2899>>
INT iLeadInTimer = -1
VECTOR vAlternateApproachPos1 = <<-512.978821,225.166489,80.203293>>
VECTOR vAlternateApproachPos2 = <<-463.980530,219.813110,84.147079>>
FLOAT fAlternateApproachWidth = 18.5
BOOL bShowPlayer = FALSE
INT iShowPlayerTimer = -1
CONST_INT NUM_SHOOTING_LINES 3
STRING sBevShootLines[NUM_SHOOTING_LINES]
INT iCurrentBevShootLine = 0
CONST_INT iShootLineDelay 15000
INT iShootLineTimer = 0
CONST_INT FIGHT_LINE_TIME 5000
INT iFightLineTimer = 0
INT iCameraWalkTimer = 0
BOOL bCameraGuyWalks = FALSE
STRING sMissionAnims = "rcmpaparazzo_4"
STRING sHandsUpAnim = "lift_hands_in_air_loop"
STRING sHandsupFlinch = "MISSCOMMON@HANDS_UP_FLINCH"
STRING sMakeupScaredAnims = "reaction@back_away@f"
STRING sWeaponMoveClipset = "random@escape_paparazzi@standing@"
STRING sBackAwayAnim = "0"
INT iFlinchStage = 0
BOOL bDoFlinchReaction = FALSE
BOOL bNotScaredYet = TRUE
BOOL bFleeFromWeapon = FALSE
BOOL bPlayerAggro = FALSE
BOOL bStopCheckingNewsvan = FALSE
BOOL bBeverlyFleeing = FALSE
INT iBeverlyFilmingScene
BOOL bAllowSynchronisedScene = TRUE
STRING sBevFilmBase = "base_pap"
STRING sCamFilmBase = "base_camman"
STRING sProdFilmBase = "base_prod"
STRING sBevFilmGesture = "gesture_to_cam_pap"
STRING sCamFilmGesture = "gesture_to_cam_camman"
STRING sProdFilmGesture = "gesture_to_cam_prod"
STRING sBevFilmIdle = "idle_pap"
STRING sCamFilmIdle = "idle_camman"
STRING sProdFilmIdle = "idle_prod"
VECTOR vFilmingScenePos = <<-493.764358, 232.17636, 82.057273>>//<< -491.86, 232.22, 82.02 >>//<<-490.894592,232.362991,82.017174>>//<<-490.358093,232.436035,82.032570>>
VECTOR vFilmingSceneRot = <<0,0,0>>
BOOL bStartShootingReaction = TRUE
//BOOL bBeverlyWaiting = TRUE
BOOL bAllowThreatConv = TRUE
//INT iBevWaitTimer
//CONST_INT iBevWaitDelay 2000
CONST_INT CAM_MOVE_TIME 10000
INT iCamMoveTimer = 0
CONST_INT CAM_LOOK_TIME 4000
INT iCamLookTimer = 0
BOOL bFilmBev = FALSE
VECTOR vBevReset = <<-489.379822,232.071320,82.052628>>
VECTOR vCamReset = <<-488.27, 229.89, 83.23>>
VECTOR vProdReset = << -493.3992, 226.2236, 82.1179 >>
VECTOR vBevCarPos = <<-497.99, 224.97, 82.67>>//<<-498.95, 223.78, 82.78>>
VECTOR vVanPos = <<-501.55, 230.70, 83.10>>//<<-508.14, 232.87, 83.06>>
FLOAT fBevReset = 115.15
FLOAT fCamReset = -64.85
FLOAT fProdReset = 296.4216
FLOAT fBevCarHeading = 266.50//265.96
FLOAT fVanHeading = 233.87
VECTOR vPlayerReset = <<-489.4534, 233.7212, 82.0251>>
FLOAT fPlayerReset = 294.5672
CONST_FLOAT fBevEscapeDist 150.0
CAR_STEAL_STAGE eCarStealStage = CSS_READY
INT iCarStealTimer = 0
CONST_INT iCarStealTimeOut 3000
CONST_FLOAT fCarStealDist 20.0
CONST_FLOAT fCarStealReturnDist 10.0
VECTOR vBevRunToPos = <<-494.345795,229.292160,82.114258>>//<<-484.0395, 234.6226, 82.0242>>
VECTOR vMWRunToPos = <<-499.68, 232.26, 82.10>>
BOOL bDoneRetalConv = FALSE
BOOL bDoneReturnConv = FALSE
//GROUP_INDEX giBevGroup
CONST_INT NUM_RESTARTS 3
CONST_INT NUM_INTERRUPTIONS 4
STRING sRestartConv[NUM_RESTARTS]
STRING sInterruptConv[NUM_INTERRUPTIONS]
INT iFinalLine[NUM_INTERRUPTIONS]
INTERRUPT_STAGE eInterruptionStage = IS_READY
BOOL bAllowLeaving = TRUE
INT iCurrentRestart = 0
INT iCurrentInterruption = 0
BOOL bCamermanFleeing = FALSE
BOOL bMakeupWomanFleeing = FALSE
BOOL bFirstTimeScared = TRUE
VECTOR vBlockAreaMin = <<-477.670807,236.909576,84.024628>>
VECTOR vBlockAreaMax = <<-488.682922,232.335739,81.017181>>
VECTOR vRoadOffOne = <<-526.328308,245.778336,80.972473>>
VECTOR vRoadOffTwo = <<-439.646210,235.061676,84.045418>>
FLOAT fRoadOffWidth = 6.0
STRING sWaypointRecBev = "pap4_BevRoute"
STRING sWaypointRecCam = "pap4_CamRoute"
INT iBevPenultimatePoint = 20
INT iCamPenultimatePoint = 15
VECTOR vExplosionCentre = <<-492.677856,227.602188,82.134773>>
FLOAT fExplosionRadius = 15.0
// variables for the camera audio
INT iCameraSoundID
STRING sCameraSoundset = "PAPARAZZO_04_SOUNDSET"
STRING sCameraSound = "CAMERA"
// variables to check for mission passed stats
BOOL bAllKilledAtOnce = FALSE
INT iKillAllTimer = -1
CONST_INT KILL_ALL_TIME 500
BOOL bAllowCameraSpamming = TRUE
//INT iShockingEventId = -1
//*************************************************************************************************************************************************
// :HELPER FUNCTIONS:
//*************************************************************************************************************************************************
//MISSION FLOW CONTROL
/// PURPOSE:
/// Advances or rolls back the mission stage
/// PARAMS:
/// bReverse - should the mission stage roll back?
PROC NEXT_STAGE( BOOL bReverse = FALSE)
iMissionState = ENUM_TO_INT(eMissionStage)
IF NOT bReverse
eMissionStage = INT_TO_ENUM(MISSION_STAGE, (iMissionState + 1))
ELSE
IF iMissionState > 0
eMissionStage = INT_TO_ENUM(MISSION_STAGE, (iMissionState - 1))
ENDIF
ENDIF
eState = SS_INIT
ENDPROC
/// PURPOSE:
/// Turn the navmesh surrounding Beverly on or off to prevent ambient peds walking through/into the scene
/// PARAMS:
/// bEnable - should the navmesh be enabled or disabled?
PROC SetNavmeshState(BOOL bEnable)
IF bEnable
SET_PED_PATHS_IN_AREA(vBlockAreaMin, vBlockAreaMax, TRUE)
ELSE
SET_PED_PATHS_IN_AREA(vBlockAreaMin, vBlockAreaMax, FALSE)
ENDIF
ENDPROC
/// PURPOSE:
/// Starts the synchronised scene used for the filming
PROC StartFilmingScene()
CPRINTLN(DEBUG_MISSION,"Pap 4: Synch scene on cutscene blend")
iBeverlyFilmingScene = CREATE_SYNCHRONIZED_SCENE(vFilmingScenePos, vFilmingSceneRot)
SET_SYNCHRONIZED_SCENE_LOOPED(iBeverlyFilmingScene,FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iBeverlyFilmingScene,FALSE)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iBeverlyFilmingScene, sMissionAnims, sBevFilmBase, INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[CAMERAMAN], iBeverlyFilmingScene, sMissionAnims, sCamFilmBase, INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], iBeverlyFilmingScene, sMissionAnims, sProdFilmBase, INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
bAllowSynchronisedScene = TRUE
ENDPROC
/// PURPOSE:
/// Switches between the three synchronised scenes used by Beverly, the cameraman and the makeup woman
PROC ControlSynchronisedScenes(BOOL bInstantBlendIn = FALSE)
IF bAllowSynchronisedScene
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
iBeverlyFilmingScene = CREATE_SYNCHRONIZED_SCENE(vFilmingScenePos, vFilmingSceneRot)
SET_SYNCHRONIZED_SCENE_LOOPED(iBeverlyFilmingScene,FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iBeverlyFilmingScene,FALSE)
INT iScene = GET_RANDOM_INT_IN_RANGE(0, 3)
STRING sBevAnim
STRING sCameraAnim
STRING sMakeupAnim
SWITCH iScene
CASE 0
sBevAnim = sBevFilmBase
sCameraAnim = sCamFilmBase
sMakeupAnim = sProdFilmBase
BREAK
CASE 1
sBevAnim = sBevFilmGesture
sCameraAnim = sCamFilmGesture
sMakeupAnim = sProdFilmGesture
BREAK
DEFAULT
sBevAnim = sBevFilmIdle
sCameraAnim = sCamFilmIdle
sMakeupAnim = sProdFilmIdle
BREAK
ENDSWITCH
FLOAT BlendValue
IF bInstantBlendIn
BlendValue = INSTANT_BLEND_IN
ELSE
BlendValue = SLOW_BLEND_IN
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iBeverlyFilmingScene, sMissionAnims, sBevAnim, BlendValue, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[CAMERAMAN], iBeverlyFilmingScene, sMissionAnims, sCameraAnim, INSTANT_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], iBeverlyFilmingScene, sMissionAnims, sMakeupAnim, BlendValue, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
ENDIF
ENDIF
ELSE
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[BEV], SLOW_BLEND_OUT, TRUE)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], REALLY_SLOW_BLEND_OUT, TRUE)
IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_SMART_FLEE_PED)
AND NOT bCamermanFleeing
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[CAMERAMAN]) //AND IS_ENTITY_ATTACHED_TO_ANY_OBJECT(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[CAMERAMAN])
//PRINT_NOW("Playing camera anim after synced scene", 7000, 1)
CPRINTLN(DEBUG_MISSION,"Forcing ped anim update on cameraman 1")
ENDIF
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SLOW_BLEND_OUT, TRUE)
SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Passes the mission if Beverly is dead or far away
PROC CheckMissionPassed()
IF NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
OR (GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV]) > fBevEscapeDist
AND (NOT IS_ENTITY_ON_SCREEN(sRCLauncherDataLocal.pedID[BEV]) OR NOT HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV])))
IF NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
REPLAY_RECORD_BACK_FOR_TIME(3.0, 0, REPLAY_IMPORTANCE_LOWEST) // Record the player killing Beverly
ENDIF
eState = SS_INIT
eMissionStage = MS_PASSED
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if the player is (probably) stealth killing a ped
/// There isn't a function to check this directly so it checks if the ped is being stealth killed and if the player is performing a stealth kill.
/// Unless another ped in the mission is performing a stealth kill, this should be safe
/// PARAMS:
/// piTest - The ped who might be getting stealth killed by the player
/// RETURNS:
/// True if the player is performing a stealth kill and the test ped is being stealth killed
FUNC BOOL IsPlayerStealthKillingPed(PED_INDEX piTest)
IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_PED_UNINJURED(piTest)
IF IS_PED_PERFORMING_STEALTH_KILL(PLAYER_PED_ID()) AND IS_PED_BEING_STEALTH_KILLED(piTest)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes the cameraman drop his camera and flee
PROC CameramanFlees()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_PED_IN_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
ENDIF
//CLEAR_PED_SECONDARY_TASK(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], SLOW_BLEND_OUT, TRUE)
SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ELSE
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
STOP_SOUND(iCameraSoundID)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ENDIF
bCamermanFleeing = TRUE
bAllowSynchronisedScene = FALSE
eInterruptionStage = IS_DONE
ENDIF
ENDPROC
/// PURPOSE:
/// Makes a ped flee the player after a delay
/// PARAMS:
/// pedIn - the ped we want to flee
/// waitTime - the amount of time to wait for (milliseconds)
PROC DELAYED_FLEE(PED_INDEX & pedIn, INT waitTime, BOOL shockedFirst = FALSE)
SEQUENCE_INDEX siFlee
/*IF iShockingEventId < 0
iShockingEventId = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_VISIBLE_WEAPON, PLAYER_PED_ID())
ENDIF*/
OPEN_SEQUENCE_TASK(siFlee)
TASK_PAUSE(NULL, waitTime)
IF shockedFirst AND HAS_ANIM_DICT_LOADED(sMakeupScaredAnims) AND bFirstTimeScared //AND iShockingEventId > 0
//TASK_SHOCKING_EVENT_BACK_AWAY(NULL, iShockingEventId)
TASK_PLAY_ANIM(NULL, sMakeupScaredAnims, sBackAwayAnim,NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
bFirstTimeScared = FALSE
ENDIF
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 500, -1)
CLOSE_SEQUENCE_TASK(siFlee)
TASK_PERFORM_SEQUENCE(pedIn, siFlee)
CLEAR_SEQUENCE_TASK(siFlee)
ENDPROC
/// PURPOSE:
/// Allows the cameraman to flee once he's finished ragdolling
PROC HandleCamermanFleeing()
IF bCamermanFleeing AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
AND NOT IS_PED_GETTING_UP(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_PRONE(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_PAUSE)
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_PERFORM_SEQUENCE)
SetNavmeshState(TRUE)
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[CAMERAMAN], FA_DISABLE_HANDS_UP, TRUE)
//PRINT_NOW("Making the cameraman flee", 7000, 1)
//DELAYED_FLEE(sRCLauncherDataLocal.pedID[CAMERAMAN], 500)
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID(), 500, -1)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Allows the makeup woman to flee once she's finished ragdolling
PROC HandleMakeupWomanFleeing()
IF bMakeupWomanFleeing
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_PED_GETTING_UP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_PED_PRONE(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SCRIPT_TASK_PAUSE)
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SCRIPT_TASK_PERFORM_SEQUENCE)
IF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
OR (IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[CAMERAMAN], TRUE))
OR (IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV]) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[BEV], TRUE))
SetNavmeshState(TRUE)
IF IS_PED_IN_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[MAKEUPWMAN], FA_DISABLE_HANDS_UP, TRUE)
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 100, -1)
//DELAYED_FLEE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], 350, TRUE)
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Will make Beverly flee if the player aims a weapon at him while he's is in melee combat
PROC BeverlyFleeReaction()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
IF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV], TRUE)
IF NOT bFleeFromWeapon
AND bNotScaredYet
AND NOT IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_PERFORMING_STEALTH_KILL(PLAYER_PED_ID())
// temporary until we have decent defensive behaviour
IF IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
OR IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[BEV])
ENDIF
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[BEV], FA_USE_VEHICLE, FALSE)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
bBeverlyFleeing = TRUE
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 400, -1, TRUE)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
bNotScaredYet = FALSE
CPRINTLN(DEBUG_MISSION,"Pap 4: bNotScaredYet = FALSE, BeverlyFleeReaction()")
bFleeFromWeapon = TRUE
ENDIF
ELSE
IF NOT bFleeFromWeapon
AND bNotScaredYet
AND NOT IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_PERFORMING_STEALTH_KILL(PLAYER_PED_ID())
// temporary until we have decent defensive behaviour
IF IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
OR IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[BEV])
ENDIF
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[BEV], FA_USE_VEHICLE, TRUE)
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 400, -1, TRUE)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
bNotScaredYet = FALSE
CPRINTLN(DEBUG_MISSION,"Pap 4: bNotScaredYet = FALSE, making Bev flee in vehicle")
bFleeFromWeapon = TRUE
ENDIF
ENDIF
iCameraLineTimer = GET_GAME_TIMER() + iCameraLineDelay
ENDIF
ENDPROC
// ===========================================================================================================
// Termination
// ===========================================================================================================
// -----------------------------------------------------------------------------------------------------------
// Script Cleanup
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Releases everything used by the mission
PROC CLEANUP()
PRINTSTRING("STAGE CLEANUP") PRINTNL()
SetNavmeshState(TRUE)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
SET_ENTITY_LOAD_COLLISION_FLAG(sRCLauncherDataLocal.pedID[BEV], FALSE)
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV])
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[BEV])
ENDIF
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
TASK_VEHICLE_DRIVE_WANDER(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], 20, DRIVINGMODE_AVOIDCARS_OBEYLIGHTS)
ELSE
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
CameramanFlees()
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[CAMERAMAN], FA_DISABLE_HANDS_UP, TRUE)
//TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID(), 500, -1)
DELAYED_FLEE(sRCLauncherDataLocal.pedID[CAMERAMAN], 500)
ENDIF
ENDIF
ELSE
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[CAMERAMAN])
ENDIF
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
IF IS_PED_IN_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
VEHICLE_INDEX viMakeup = GET_VEHICLE_PED_IS_IN(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
IF IS_VEHICLE_OK(viMakeup) AND
(IS_PED_IN_VEHICLE(PLAYER_PED_ID(), viMakeup, TRUE) OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]))
SEQUENCE_INDEX siLeave
OPEN_SEQUENCE_TASK(siLeave)
TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP | ECF_DONT_CLOSE_DOOR)
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 500, -1)
CLOSE_SEQUENCE_TASK(siLeave)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], siLeave)
CLEAR_SEQUENCE_TASK(siLeave)
ENDIF
ELIF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[MAKEUPWMAN], FA_DISABLE_HANDS_UP, TRUE)
//TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 500, -1)
DELAYED_FLEE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], 350, TRUE)
ENDIF
ELSE
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF
ENDIF
SET_WANTED_LEVEL_MULTIPLIER(1.0)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_takedown_a"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_takedown_heavy"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_armed_takedown"), TRUE)
REMOVE_ANIM_DICT(sMissionAnims)
REMOVE_ANIM_DICT(sMakeupScaredAnims)
IF GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecBev)
REMOVE_WAYPOINT_RECORDING(sWaypointRecBev)
ENDIF
IF GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecCam)
REMOVE_WAYPOINT_RECORDING(sWaypointRecCam)
ENDIF
STOP_SOUND(iCameraSoundID)
SAFE_REMOVE_BLIP(biGOTO)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
//SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
SET_OBJECT_AS_NO_LONGER_NEEDED(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ENDIF
SAFE_RELEASE_PED(sRCLauncherDataLocal.pedID[BEV])
SAFE_RELEASE_PED(sRCLauncherDataLocal.pedID[CAMERAMAN])
SAFE_RELEASE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
SAFE_RELEASE_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
SAFE_RELEASE_VEHICLE(sRCLauncherDataLocal.vehID[CAMERAMAN])
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(vRoadOffOne, vRoadOffTwo, fRoadOffWidth)
KILL_FACE_TO_FACE_CONVERSATION()
ENDPROC
/// PURPOSE:
/// Finishes the mission
PROC Script_Cleanup()
// Ensure launcher is cleaned up
RC_CLEANUP_LAUNCHER()
// If the mission was triggered then additional mission cleanup will be required.
IF (Random_Character_Cleanup_If_Triggered())
CLEANUP()
PRINTSTRING("...Random Character Script was triggered so additional cleanup required") PRINTNL()
ENDIF
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE)
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Script Pass
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Passes the mission
PROC Script_Passed()
KILL_ANY_CONVERSATION()
Random_Character_Passed(CP_RAND_C_PAP4)
CLEAR_PRINTS()
IF bAllKilledAtOnce
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP4_ENTIRE_CREW_KILLED_IN_ONE)
ENDIF
Script_Cleanup()
ENDPROC
// ===========================================================================================================
// DEBUG/RESTART FUNCTIONS
// ===========================================================================================================
/// PURPOSE:
/// Starts the mission from the checkpoint after the intro
PROC RestartCheckpoint()
RC_START_Z_SKIP()
eMissionStage = MS_INTRO
eState = SS_CLEANUP
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
SET_ENTITY_COORDS_NO_OFFSET(sRCLauncherDataLocal.pedID[CAMERAMAN], vCamReset)
SET_ENTITY_HEADING(sRCLauncherDataLocal.pedID[CAMERAMAN], fCamReset)
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND NOT IS_REPLAY_BEING_SET_UP()
//SET_ENTITY_COORDS_NO_OFFSET(PLAYER_PED_ID(), <<-484.5429, 233.7179, 82.0252>>)
SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vPlayerReset)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerReset)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDIF
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
SAFE_TELEPORT_ENTITY(sRCLauncherDataLocal.vehID[BEV], vBevCarPos, fBevCarHeading)
SET_VEHICLE_ON_GROUND_PROPERLY(sRCLauncherDataLocal.vehID[BEV])
SET_VEHICLE_DOORS_LOCKED(sRCLauncherDataLocal.vehID[BEV], VEHICLELOCK_UNLOCKED)
ENDIF
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
SAFE_TELEPORT_ENTITY(sRCLauncherDataLocal.vehID[CAMERAMAN], vVanPos, fVanHeading)//<<-493.66, 240.93, 82.94>>, 263.55)
SET_VEHICLE_ON_GROUND_PROPERLY(sRCLauncherDataLocal.vehID[CAMERAMAN])
SET_VEHICLE_DOORS_LOCKED(sRCLauncherDataLocal.vehID[CAMERAMAN], VEHICLELOCK_UNLOCKED)
ENDIF
CLEAR_AREA_OF_VEHICLES(vBevReset, 50)
StartFilmingScene()
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
ELSE
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
RC_END_Z_SKIP()
ENDPROC
/// PURPOSE:
/// Adds Beverly and the cameraman to the conversation struct. Also sets Beverly to drop money when he dies
PROC SetupDialogue()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
SET_PED_MONEY(sRCLauncherDataLocal.pedID[BEV], BEVS_CASH)
SET_PED_DIES_WHEN_INJURED(sRCLauncherDataLocal.pedID[BEV], TRUE)
ADD_PED_FOR_DIALOGUE(ConversationPeds, BEVERLY_ID, sRCLauncherDataLocal.pedID[BEV], "BEVERLY")
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
ADD_PED_FOR_DIALOGUE(ConversationPeds, CAMERA_ID, sRCLauncherDataLocal.pedID[CAMERAMAN], "Pap4Cameraman")
ENDIF
ENDPROC
/// PURPOSE:
/// Deletes everything and recreates it at the proper start points. Used when debug skipping
PROC ResetMission()
IF eMissionStage = MS_BEV_IN_CAR
eMissionStage = MS_BEV_ON_FOOT
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -476.3108, 233.9309, 82.0245 >>, 103.3318)
ENDIF
STOP_SOUND(iCameraSoundID)
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[BEV])
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[CAMERAMAN])
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[CAMERAMAN])
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
REQUEST_MODEL(S_M_Y_GRIP_01)
REQUEST_MODEL(A_F_Y_BEVHILLS_02)
REQUEST_MODEL(PROP_PAP_CAMERA_01)
REQUEST_MODEL(PROP_V_CAM_01)
REQUEST_MODEL(ISSI2)
REQUEST_MODEL(RUMPO)
WHILE NOT RC_CREATE_NPC_PED(sRCLauncherDataLocal.pedID[BEV], CHAR_BEVERLY, vBevReset, fBevReset, "PAPARAZZO LAUNCHER RC", FALSE)
WAIT(0)
ENDWHILE
SET_ENTITY_COORDS_NO_OFFSET(sRCLauncherDataLocal.pedID[BEV], vBevReset)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[BEV], TRUE)
WHILE NOT HAS_MODEL_LOADED(S_M_Y_GRIP_01)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.pedID[CAMERAMAN] = CREATE_PED(PEDTYPE_MISSION, S_M_Y_GRIP_01, vCamReset, fCamReset)
WHILE NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
WAIT(0)
ENDWHILE
SET_ENTITY_COORDS_NO_OFFSET(sRCLauncherDataLocal.pedID[CAMERAMAN], vCamReset)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_GRIP_01)
WHILE NOT HAS_MODEL_LOADED(A_F_Y_BEVHILLS_02)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.pedID[MAKEUPWMAN] = CREATE_PED(PEDTYPE_MISSION, A_F_Y_BEVHILLS_02, vProdReset, fProdReset)
WHILE NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
WAIT(0)
ENDWHILE
SET_ENTITY_COORDS_NO_OFFSET(sRCLauncherDataLocal.pedID[MAKEUPWMAN], vProdReset)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(A_F_Y_BEVHILLS_02)
WHILE NOT HAS_MODEL_LOADED(PROP_PAP_CAMERA_01)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.ObjID[BEV] = CREATE_OBJECT_NO_OFFSET(PROP_PAP_CAMERA_01, <<-490.11, 233.15, 82.10>>)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[BEV])
//ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[BEV], sRCLauncherDataLocal.pedID[BEV], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[BEV], BONETAG_R_HAND), vBevOffset, vBevRot)
ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[BEV], sRCLauncherDataLocal.pedID[BEV], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[BEV], BONETAG_PH_R_HAND), vBevOffset, vBevRot)
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_PAP_CAMERA_01)
WHILE NOT HAS_MODEL_LOADED(PROP_V_CAM_01)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.ObjID[CAMERAMAN] = CREATE_OBJECT_NO_OFFSET(PROP_V_CAM_01, <<-490.11, 233.15, 82.10>>)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[CAMERAMAN], sRCLauncherDataLocal.pedID[CAMERAMAN], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[CAMERAMAN], BONETAG_R_HAND), vCamOffset, vCamRot)
PLAY_SOUND_FROM_ENTITY(iCameraSoundID, sCameraSound, sRCLauncherDataLocal.ObjID[CAMERAMAN], sCameraSoundset)
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_V_CAM_01)
StartFilmingScene()
WHILE NOT HAS_MODEL_LOADED(ISSI2)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.vehID[BEV] = CREATE_VEHICLE(ISSI2, vBevCarPos, fBevCarHeading)
WHILE NOT IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
WAIT(0)
ENDWHILE
LOWER_CONVERTIBLE_ROOF(sRCLauncherDataLocal.vehID[BEV], TRUE)
SET_VEHICLE_COLOUR_COMBINATION(sRCLauncherDataLocal.vehID[BEV], 0)
SET_MODEL_AS_NO_LONGER_NEEDED(ISSI2)
WHILE NOT HAS_MODEL_LOADED(RUMPO)
WAIT(0)
ENDWHILE
sRCLauncherDataLocal.vehID[CAMERAMAN] = CREATE_VEHICLE(RUMPO, vVanPos, fVanHeading)
WHILE NOT IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
WAIT(0)
ENDWHILE
SET_VEHICLE_COLOUR_COMBINATION(sRCLauncherDataLocal.vehID[CAMERAMAN], 1)
SET_VEHICLE_LIVERY(sRCLauncherDataLocal.vehID[CAMERAMAN], 0)
SET_MODEL_AS_NO_LONGER_NEEDED(RUMPO)
SetNavmeshState(FALSE)
bNotScaredYet = TRUE
bPlayerAggro = FALSE
bFleeFromWeapon = FALSE
bStopCheckingNewsvan = FALSE
SetupDialogue()
ENDPROC
/// PURPOSE:
/// Jumps to a given stage in the mission
/// PARAMS:
/// stage - The stage to jump to
PROC JUMP_TO_STAGE(MISSION_STAGE stage)
RC_START_Z_SKIP()
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE()
ENDIF
WHILE IS_CUTSCENE_ACTIVE()
WAIT(0)
ENDWHILE
eCarStealStage = CSS_READY
bDoneRetalConv = FALSE
bDoneReturnConv = FALSE
eMissionStage = stage
ResetMission()
eState = SS_INIT
RC_END_Z_SKIP()
ENDPROC
/// PURPOSE:
/// Check for Forced Pass or Fail
#IF IS_DEBUG_BUILD
PROC DEBUG_Check_Debug_Keys()
// Check for Pass
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
WAIT_FOR_CUTSCENE_TO_STOP()
eMissionStage = MS_PASSED
eState = SS_INIT
ENDIF
// Check for Fail
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
WAIT_FOR_CUTSCENE_TO_STOP()
SAFE_REMOVE_BLIP(biGOTO)
CLEAR_PRINTS()
Random_Character_Failed()
Script_Cleanup()
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) AND eMissionStage <> MS_INIT
eState = SS_MESKIPPED
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) AND eMissionStage <> MS_INIT
//Work out which stage we want to reach based on the current stage
iMissionState = ENUM_TO_INT(eMissionStage)
IF iMissionState > 0
MISSION_STAGE e_stage = INT_TO_ENUM(MISSION_STAGE, iMissionState - 1)
JUMP_TO_STAGE(e_stage)
ENDIF
ENDIF
IF eMissionStage <> MS_INTRO
IF LAUNCH_MISSION_STAGE_MENU(s_skip_menu, i_debug_jump_stage)
i_debug_jump_stage += 1
MISSION_STAGE e_stage = INT_TO_ENUM(MISSION_STAGE, i_debug_jump_stage)
JUMP_TO_STAGE(e_stage)
ENDIF
ENDIF
ENDPROC
#ENDIF
//*************************************************************************************************************************************************
// :MISSION STAGE HELPER FUNCTIONS:
//*************************************************************************************************************************************************
/// PURPOSE:
/// Makes the cameraman walk to a suitable spot and film Beverly as he gets into his car. The cameraman then gets in his van and drives off
PROC CameramanFilmsCar()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_PERFORM_SEQUENCE)
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecCam)
AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN])
SEQUENCE_INDEX siWalkAndFilm
OPEN_SEQUENCE_TASK(siWalkAndFilm)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
TASK_TURN_PED_TO_FACE_ENTITY(NULL, sRCLauncherDataLocal.pedID[BEV], 6000)//5000)
ENDIF
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND IS_VEHICLE_SEAT_FREE(sRCLauncherDataLocal.vehID[CAMERAMAN], VS_DRIVER)
SET_ROADS_IN_ANGLED_AREA(vRoadOffOne, vRoadOffTwo, fRoadOffWidth, FALSE, TRUE)
TASK_ENTER_VEHICLE(NULL, sRCLauncherDataLocal.vehID[CAMERAMAN], DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_RUN)
ENDIF
CLOSE_SEQUENCE_TASK(siWalkAndFilm)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[CAMERAMAN], siWalkAndFilm)
CLEAR_SEQUENCE_TASK(siWalkAndFilm)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Makes Beverly get in the camera van. Only used if the player has blocked both doors for Beverly's car
PROC StartBevToCarAlt()
IF bAllowSynchronisedScene
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND bStartShootingReaction AND bNotScaredYet
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV]) AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV], SCRIPT_TASK_WANDER_STANDARD)
AND NOT bBeverlyFleeing
IF CREATE_CONVERSATION(conversationPeds, "PAP4AUD", "PAP4_BLOCKED", CONV_PRIORITY_MEDIUM)
SetNavmeshState(TRUE)
IF IS_VEHICLE_SEAT_FREE(sRCLauncherDataLocal.vehID[CAMERAMAN], VS_FRONT_RIGHT)
TASK_ENTER_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[CAMERAMAN], DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
/*IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[CAMERAMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], -1)
ENDIF*/
// Makeup woman walks off as there's no more space in the van
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
/*IF IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[MAKEUPWMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF*/
ENDIF
ELSE
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[BEV])
ENDIF
iCameraWalkTimer = GET_GAME_TIMER() + 1500
bCameraGuyWalks = TRUE
eInterruptionStage = IS_DONE
bAllowSynchronisedScene = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks the car doors and makes Beverly get into the cameraman's van if necessary
FUNC BOOL CarDoorsBlocked()
BOOL bDriversSeatFree = IS_ENTRY_POINT_FOR_SEAT_CLEAR(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], VS_DRIVER)
BOOL bPassengerSeatFree = IS_ENTRY_POINT_FOR_SEAT_CLEAR(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], VS_FRONT_RIGHT)
IF NOT bDriversSeatFree AND NOT bPassengerSeatFree
// Beverly's car doors are blocked. Tells player to fuck off and gets in the van passenger seat. Makeup woman gets in back if possible, wanders if not
bAllowLeaving = FALSE // don't want Beverly to use the regular leave behaviour
eInterruptionStage = IS_DONE
bAllowSynchronisedScene = FALSE
//StartBevToCarAlt()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 200, -1)
ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if the player has blocked Beverly's car with another vehicle
/// RETURNS:
/// TRUE if Beverly's car is blocked by another vehicle
FUNC BOOL BeverlysCarBlockedIn()
// Don't want Beverly to do his blocked in behaviour if he's fleeing
IF NOT bStartShootingReaction
RETURN FALSE
ENDIF
VEHICLE_INDEX viTemp
BOOL bPlayerBlocking = FALSE
viTemp = GET_RANDOM_VEHICLE_IN_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sRCLauncherDataLocal.vehID[BEV], <<0.0, 2.0, 0.0>>), 2.0, DUMMY_MODEL_FOR_SCRIPT,
VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES | VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES | VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_GROUP_MEMBERS | VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_PLAYER | VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_WITH_PEDS_ENTERING_OR_EXITING)
IF DOES_ENTITY_EXIST(viTemp)
IF NOT (viTemp = sRCLauncherDataLocal.vehID[BEV])
IF (viTemp = GET_PLAYERS_LAST_VEHICLE()) /*OR (viTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))*/ OR (IS_VEHICLE_DRIVEABLE(viTemp) AND IS_VEHICLE_STOPPED(viTemp))
bAllowSynchronisedScene = FALSE
bPlayerBlocking = TRUE
ENDIF
ENDIF
ENDIF
IF IS_THERE_A_CAR_BLOCKING_THIS_CAR(sRCLauncherDataLocal.vehID[BEV]) OR bPlayerBlocking
//OR IS_ENTITY_IN_RANGE_COORDS_2D(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sRCLauncherDataLocal.vehID[BEV], <<0.0, 2.0, 0.0>>), 2.0)
// Beverly's car is blocked. Tells player to fuck off and gets in the van passenger seat. Makeup woman gets in back if possible, wanders if not
IF IS_PED_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV])
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
IF CREATE_CONVERSATION(conversationPeds, "PAP4AUD", "PAP4_BLOCKED", CONV_PRIORITY_MEDIUM)
/*SEQUENCE_INDEX siLeave
OPEN_SEQUENCE_TASK(siLeave)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_WANDER_STANDARD(NULL)
CLOSE_SEQUENCE_TASK(siLeave)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[BEV], siLeave)
CLEAR_SEQUENCE_TASK(siLeave)*/
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ENDIF
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_PED)
ENDIF
ENDIF
ENDIF
ELIF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV])
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
bAllowLeaving = FALSE // don't want Beverly to use the regular leave behaviour
eInterruptionStage = IS_DONE
//bAllowSynchronisedScene = FALSE
//StartBevToCarAlt()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ENDIF
ENDIF
ENDIF
bAllowSynchronisedScene = FALSE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes Beverly walk to his car and get in
/// PARAMS:
/// bForceStart - Should Beverly go to his car immediately or wait until any conversations have finished
PROC StartBevToCar(BOOL bForceStart = FALSE, BOOL bRunInstead = FALSE)
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND bStartShootingReaction
AND bNotScaredYet
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV]) AND NOT bBeverlyFleeing
IF bCameraGuyWalks AND GET_GAME_TIMER() > iCameraWalkTimer
IF eCarStealStage = CSS_READY
// camera guy walks to spot closer to car and turns to face Beverly
CameramanFilmsCar()
ENDIF
ELSE
IF bForceStart OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV], 30.0)
IF bAllowLeaving AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV],SCRIPT_TASK_ENTER_VEHICLE)
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV],SCRIPT_TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT)
AND IS_VEHICLE_SEAT_FREE(sRCLauncherDataLocal.vehID[BEV]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV]) AND NOT bBeverlyFleeing
IF NOT CarDoorsBlocked() AND NOT BeverlysCarBlockedIn()
BOOL bConvPlayed = FALSE
IF NOT bForceStart
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION()//_DO_NOT_FINISH_LAST_LINE()
ENDIF
enumSubtitlesState eSubtitles = DISPLAY_SUBTITLES
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV], 30.0)
eSubtitles = DO_NOT_DISPLAY_SUBTITLES
ENDIF
IF iCurrentInterruption > 1
bConvPlayed = CREATE_CONVERSATION(conversationPeds, "PAP4AUD", "PAP4_LEAVE2", CONV_PRIORITY_MEDIUM, eSubtitles)
ELSE
bConvPlayed = CREATE_CONVERSATION(conversationPeds, "PAP4AUD", "PAP4_LEAVE", CONV_PRIORITY_MEDIUM, eSubtitles)
ENDIF
ENDIF
IF bConvPlayed
OR bForceStart
SetNavmeshState(TRUE)
SET_PED_WEAPON_MOVEMENT_CLIPSET(sRCLauncherDataLocal.pedID[BEV],sWeaponMoveClipset)
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[BEV])
IF bRunInstead
TASK_ENTER_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_RUN)
CPRINTLN(DEBUG_MISSION,"Pap 4: Bev should run to car")
ELSE
TASK_ENTER_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
CPRINTLN(DEBUG_MISSION,"Pap 4: Bev should walk to car")
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) //AND IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[CAMERAMAN], giBevGroup)
//REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], -1)
ENDIF
// Makeup woman gets in the film van at the same time
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT bPlayerAggro
AND NOT bMakeupWomanFleeing AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
IF bForceStart OR (IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[CAMERAMAN], TRUE))
// Player has stolen the camera van so she gets into Bev's car
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.vehID[BEV]) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID())
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 500, -1)
ELIF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
SEQUENCE_INDEX siLeave
OPEN_SEQUENCE_TASK(siLeave)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 1500)
TASK_ENTER_VEHICLE(NULL, sRCLauncherDataLocal.vehID[BEV], DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT)
CLOSE_SEQUENCE_TASK(siLeave)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], siLeave)
CLEAR_SEQUENCE_TASK(siLeave)
ELSE
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 500, -1)
//TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID())
ENDIF
ELSE
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND IS_VEHICLE_SEAT_FREE(sRCLauncherDataLocal.vehID[CAMERAMAN], VS_FRONT_RIGHT)
TASK_ENTER_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
ENDIF
/*IF IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[MAKEUPWMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF*/
ENDIF
ENDIF
iCameraWalkTimer = GET_GAME_TIMER() + 1500
bCameraGuyWalks = TRUE
eInterruptionStage = IS_DONE
bAllowSynchronisedScene = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// When Beverly is in his car, changes his blip size, makes him drive off and advances the stage
PROC CheckBevInCar()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV]) AND GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecBev)
IF IS_PED_SITTING_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV])
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV],SCRIPT_TASK_VEHICLE_MISSION)
SET_ROADS_IN_ANGLED_AREA(vRoadOffOne, vRoadOffTwo, fRoadOffWidth, FALSE, TRUE)
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV],sWaypointRecBev,DRIVINGMODE_AVOIDCARS_OBEYLIGHTS,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_VEHICLE)
ENDIF
NEXT_STAGE()
ELIF IS_PED_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], TRUE)
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.objID[BEV])
ENDIF
ENDIF
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
IF IS_PED_SITTING_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[CAMERAMAN])
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_VEHICLE)
ENDIF
NEXT_STAGE()
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Makes the cameraman drive off after Beverly
PROC CheckCameramanInCar()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
IF IS_PED_IN_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN])
/*IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV])
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN],sWaypointRecCam,DRIVINGMODE_AVOIDCARS_RECKLESS,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
ELIF (IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_IN_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[CAMERAMAN]))
OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
TASK_VEHICLE_MISSION_PED_TARGET(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], PLAYER_PED_ID(), MISSION_FLEE, 50.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 100.0,1.0)
ENDIF*/
TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN],sWaypointRecCam,DRIVINGMODE_AVOIDCARS_OBEYLIGHTS,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Switches Beverly and the cameraman from waypoint recordings to AI driving when they get hear the end of their routes
PROC SwitchWaypointToAI()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV]) AND GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecBev)
//IF IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV], SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
IF GET_VEHICLE_WAYPOINT_PROGRESS(sRCLauncherDataLocal.vehID[BEV]) >= iBevPenultimatePoint
IF bStartShootingReaction
// Player hasn't been aggressive
TASK_VEHICLE_MISSION_PED_TARGET(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID(), MISSION_FLEE, 15.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 100.0,1.0)
ELSE
// player has been aggressive
TASK_VEHICLE_MISSION_PED_TARGET(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID(), MISSION_FLEE, 40.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 100.0,1.0)
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN]) AND GET_IS_WAYPOINT_RECORDING_LOADED(sWaypointRecCam)
//IF IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(sRCLauncherDataLocal.vehID[CAMERAMAN])
IF GET_VEHICLE_WAYPOINT_PROGRESS(sRCLauncherDataLocal.vehID[CAMERAMAN]) >= iCamPenultimatePoint
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
IF bStartShootingReaction
// Player hasn't been aggressive
TASK_VEHICLE_MISSION_PED_TARGET(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], MISSION_FOLLOW, 15.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 100.0,1.0)
ELSE
TASK_VEHICLE_MISSION_PED_TARGET(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], MISSION_FOLLOW, 40.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 100.0,1.0)
ENDIF
ELSE
TASK_VEHICLE_DRIVE_WANDER(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.vehID[CAMERAMAN], 15.0, DRIVINGMODE_AVOIDCARS_OBEYLIGHTS)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if the player is threatening Beverly in any way
/// RETURNS:
/// True if the player is threatening Beverly
/*FUNC BOOL IsPlayerThreateningBeverley()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF (IS_PLAYER_VISIBLY_TARGETTING_PED(sRCLauncherDataLocal.pedID[BEV])
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT)
RETURN TRUE
ENDIF
ELSE
IF IS_PLAYER_VISIBLY_TARGETTING_PED(sRCLauncherDataLocal.pedID[BEV])
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC*/
/// PURPOSE:
/// Makes Beverly look at the player and starts a timer if the player steals his car, drives off then returns
PROC CarStealReturnConvDone()
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), -1)
iCarStealTimer = GET_GAME_TIMER() + iCarStealTimeOut
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_PED)
ENDIF
eCarStealStage = CSS_STOLEN
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_STOLEN")
ENDPROC
/// PURPOSE:
/// Triggers the appropriate behaviour if the player steals Beverly's car, drives off then returns. Plays a conversation if it's the first time
PROC CommonCarStealReturnBehaviour()
IF (GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV]) < fCarStealReturnDist)
IF bDoneReturnConv OR NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[BEV])
CarStealReturnConvDone()
ELIF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_RETURN", CONV_PRIORITY_MEDIUM)
bDoneReturnConv = TRUE
CarStealReturnConvDone()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Controls the cameraman if the player steals Beverly's car
PROC CarStealCameramanControl()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
FLOAT fCamBevDistance = GET_DISTANCE_BETWEEN_PEDS(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV])
IF fCamBevDistance > 20.0
IF NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_GOTO_ENTITY_OFFSET)
TASK_GOTO_ENTITY_OFFSET(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], DEFAULT_TIME_BEFORE_WARP, DEFAULT_SEEK_RADIUS, 0, PEDMOVE_RUN, ESEEK_KEEP_TO_PAVEMENTS)
ENDIF
ELIF fCamBevDistance < 10.0
IF NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY)
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], -1)
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// State machine that controls Beverly if the player steals his car
PROC CarStealReaction()
SWITCH eCarStealStage
CASE CSS_START
//bAllowLeaving = TRUE
bAllowLeaving = FALSE
bAllowSynchronisedScene = FALSE
eInterruptionStage = IS_DONE
BOOL bConvDone
bConvDone = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID())
AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV], 5.0)
bConvDone = CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_CARSHOT", CONV_PRIORITY_MEDIUM)
ELSE
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[BEV]) OR IS_PLAYER_TOWING_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
bConvDone = CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_STEAL", CONV_PRIORITY_MEDIUM)
ELSE
bConvDone = PLAY_SINGLE_LINE_FROM_CONVERSATION(conversationPeds, "PAP4AUD", "PAP4_STEAL", "PAP4_STEAL_1", CONV_PRIORITY_MEDIUM)
ENDIF
ENDIF
IF bConvDone
IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[BEV])
CLEAR_PED_SECONDARY_TASK(sRCLauncherDataLocal.pedID[BEV])
RESET_PED_WEAPON_MOVEMENT_CLIPSET(sRCLauncherDataLocal.pedID[BEV])
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_START, stopping Bev's camera anim")
ENDIF
SEQUENCE_INDEX siBev
OPEN_SEQUENCE_TASK(siBev)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[BEV])
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vBevRunToPos, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP)
ENDIF
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
CLOSE_SEQUENCE_TASK(siBev)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[BEV], siBev)
CLEAR_SEQUENCE_TASK(siBev)
//TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), -1)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_LEAVE_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN])
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], -1)
ENDIF
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT bPlayerAggro
AND NOT bMakeupWomanFleeing AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID())
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 500, -1)
ELIF IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
TASK_LEAVE_ANY_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], 0, ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP | ECF_JUMP_OUT| ECF_DONT_CLOSE_DOOR)
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), -1)
ENDIF
ENDIF
iCarStealTimer = GET_GAME_TIMER() + iCarStealTimeOut
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_PED)
ENDIF
eCarStealStage = CSS_STOLEN
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_STOLEN")
ENDIF
BREAK
CASE CSS_STOLEN
IF (GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV]) > fCarStealDist)
eCarStealStage = CSS_RETURN
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_RETURN")
ELIF GET_GAME_TIMER() > iCarStealTimer
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND bNotScaredYet
IF bDoneRetalConv
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
eCarStealStage = CSS_RETALIATE
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_RETALIATE")
ELIF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_RETAL", CONV_PRIORITY_MEDIUM)
bDoneRetalConv = TRUE
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
eCarStealStage = CSS_RETALIATE
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_RETALIATE")
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT bPlayerAggro
AND NOT bMakeupWomanFleeing AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
SEQUENCE_INDEX siMW
OPEN_SEQUENCE_TASK(siMW)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vMWRunToPos, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
CLOSE_SEQUENCE_TASK(siMW)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], siMW)
CLEAR_SEQUENCE_TASK(siMW)
ENDIF
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_PED)
ENDIF
ELSE
CPRINTLN(DEBUG_MISSION,"Pap 4: Can't retaliate, Bev is in combat or bNotScaredYet = FALSE...")
IF bNotScaredYet = FALSE AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV], TRUE)
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
CPRINTLN(DEBUG_MISSION,"Pap 4: Beverly needs to flee now...")
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[BEV], FA_USE_VEHICLE, FALSE)
bBeverlyFleeing = TRUE
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 500, -1)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
ENDIF
ENDIF
ENDIF
ELSE
CPRINTLN(DEBUG_MISSION,"Pap 4: Waiting to retaliate...")
ENDIF
CarStealCameramanControl()
BREAK
CASE CSS_RETALIATE
IF (GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV]) > fCarStealDist)
SEQUENCE_INDEX siBev
OPEN_SEQUENCE_TASK(siBev)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vBevRunToPos, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
TASK_TURN_PED_TO_FACE_ENTITY(NULL, sRCLauncherDataLocal.pedID[CAMERAMAN], -1)
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
ENDIF
CLOSE_SEQUENCE_TASK(siBev)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[BEV], siBev)
CLEAR_SEQUENCE_TASK(siBev)
IF DOES_BLIP_EXIST(biGOTO)
SET_BLIP_SCALE(biGOTO, BLIP_SIZE_PED)
ENDIF
eCarStealStage = CSS_RETURN
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_RETURN")
ENDIF
CarStealCameramanControl()
BREAK
CASE CSS_RETURN
CommonCarStealReturnBehaviour()
CarStealCameramanControl()
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Tells Beverly what to do if the player steals his car, makes him flee if they destroy it
PROC CarStolenOrDestroyed()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
IF eMissionStage = MS_BEV_ON_FOOT
IF eCarStealStage = CSS_READY
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[BEV])
OR IS_PED_BEING_JACKED(sRCLauncherDataLocal.pedID[BEV])
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID())
OR IS_PLAYER_TOWING_VEHICLE(sRCLauncherDataLocal.vehID[BEV])
eCarStealStage = CSS_START
CPRINTLN(DEBUG_MISSION,"Pap 4: eCarStealStage = CSS_START")
eMissionStage = MS_BEV_ON_FOOT
ENDIF
ELSE
CarStealReaction()
ENDIF
ELIF eMissionStage = MS_BEV_IN_CAR
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[BEV], PLAYER_PED_ID())
BeverlyFleeReaction()
ENDIF
ENDIF
ELSE
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
SetNavmeshState(TRUE)
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
ENDIF
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[BEV], FA_USE_VEHICLE, FALSE)
bBeverlyFleeing = TRUE
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 500, -1)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
bAllowSynchronisedScene = FALSE
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Tells Beverly what to do if the player blocks both doors for his car
PROC CheckCarDoors()
IF bStartShootingReaction AND bNotScaredYet AND bAllowLeaving AND IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV],SCRIPT_TASK_ENTER_VEHICLE)
// Use a timer here because IS_ENTRY_POINT_FOR_SEAT_CLEAR() is very expensive, don't want to check it too often
IF GET_GAME_TIMER() > iCheckDoorsTimer
CarDoorsBlocked()
iCheckDoorsTimer = GET_GAME_TIMER() + 1000
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Makes the cameraman attack and the makeup woman flee if the player steals the news van
PROC NewsVanStolen()
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
AND (IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.vehID[CAMERAMAN])
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.vehID[CAMERAMAN], PLAYER_PED_ID()))
AND NOT bStopCheckingNewsvan
// camerman attacks player if they try to steal the van
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
CPRINTLN(DEBUG_MISSION,"Pap 4: Start convo PAP4_VSTEAL")
//IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_VSTEAL", CONV_PRIORITY_HIGH)
CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_VSTEAL", CONV_PRIORITY_HIGH)
SetNavmeshState(TRUE)
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], SLOW_BLEND_OUT, TRUE)
//SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ELSE
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
STOP_SOUND(iCameraSoundID)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ENDIF
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID())
bStopCheckingNewsvan = TRUE
//ENDIF
ENDIF
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sRCLauncherDataLocal.vehID[CAMERAMAN])
// makeup woman flees
/*IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY)
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SCRIPT_TASK_ENTER_VEHICLE)
SetNavmeshState(TRUE)
//bMakeupWomanFleeing = TRUE
//TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID())
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
SEQUENCE_INDEX siLeave
OPEN_SEQUENCE_TASK(siLeave)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 1000)
TASK_ENTER_VEHICLE(NULL, sRCLauncherDataLocal.vehID[BEV], DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT)
CLOSE_SEQUENCE_TASK(siLeave)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], siLeave)
CLEAR_SEQUENCE_TASK(siLeave)
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID())
ENDIF
ENDIF*/
bAllowSynchronisedScene = FALSE
eInterruptionStage = IS_DONE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CPRINTLN(DEBUG_MISSION,"Pap 4: Should be making Bev run to his car...")
//StartBevToCar(TRUE, TRUE) // Make Beverly run to his car instead of walk
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
IF NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 500, -1)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ELSE
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if the player has an explosive weapon equipped
/// RETURNS:
/// True if the player has an explosive weapon equipped
FUNC BOOL PlayerUsingExplosives()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_MOLOTOV OR GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_STICKYBOMB
OR GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_GRENADE OR GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_GRENADELAUNCHER
OR GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_RPG
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if Beverly, the cameraman or the makeup artist can see the player with a sticky bomb
/// RETURNS:
/// True if the player is using sticky bombs and any of the peds can see him, also true if they're not using a sticky bomb
FUNC BOOL CanSeeStickyBombUse()
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_STICKYBOMB
IF CAN_PED_SEE_PLAYER(sRCLauncherDataLocal.pedID[BEV]) OR CAN_PED_SEE_PLAYER(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR CAN_PED_SEE_PLAYER(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
RETURN TRUE
ENDIF
ELSE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if the player has driven into a ped, possibly without damaging them
/// PARAMS:
/// pedID - The ped we're testing
/// RETURNS:
/// TRUE if the pkayer has driven into the ped
FUNC BOOL PlayerNudgedPedWithCar(PED_INDEX pedID)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
VEHICLE_INDEX viPlayer = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF IS_VEHICLE_OK(viPlayer)
IF IS_ENTITY_TOUCHING_ENTITY(pedID, viPlayer) AND NOT IS_VEHICLE_ALMOST_STOPPED(viPlayer)
TASK_SMART_FLEE_PED(pedID, PLAYER_PED_ID(), 100, -1)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes Beverly put his hands up and turn to face the player
PROC BeverlyScaredReaction()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
IF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV], TRUE)
AND bNotScaredYet
AND NOT bFleeFromWeapon // If we've started Bev fleeing, don't make him hands up
AND NOT IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_PERFORMING_STEALTH_KILL(PLAYER_PED_ID())
AND eCarStealStage = CSS_READY
// temporary until we have decent defensive behaviour
IF IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
OR IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[BEV])
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[BEV])
ENDIF
IF HAS_ANIM_DICT_LOADED(sMissionAnims)
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim, SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
ENDIF
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), -1)
bNotScaredYet = FALSE
CPRINTLN(DEBUG_MISSION,"Pap 4: bNotScaredYet = FALSE, BeverlyScaredReaction()")
ENDIF
ENDIF
iCameraLineTimer = GET_GAME_TIMER() + iCameraLineDelay
//bBeverlyWaiting = FALSE
ENDPROC
PROC SendCameramanToSuitablePlace()
IF NOT bCamermanFleeing AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
VECTOR vDestOne = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sRCLauncherDataLocal.pedID[BEV], <<3,0,0>>)
VECTOR vDestTwo = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sRCLauncherDataLocal.pedID[BEV], <<-3,0,0>>)
FLOAT fDistOne = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vDestOne)
FLOAT fDistTwo = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vDestTwo)
VECTOR vDest
IF fDistOne < fDistTwo
vDest = vDestTwo
ELSE
vDest = vDestOne
ENDIF
/*IF IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[CAMERAMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
ENDIF*/
SEQUENCE_INDEX siCam
OPEN_SEQUENCE_TASK(siCam)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vDest, PEDMOVE_SPRINT)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, sRCLauncherDataLocal.pedID[BEV])
CLOSE_SEQUENCE_TASK(siCam)
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[CAMERAMAN], siCam)
CLEAR_SEQUENCE_TASK(siCam)
ENDIF
ENDPROC
/// PURPOSE:
/// Triggers appropriate responses from the peds if the player becomes aggressive
PROC PlayerIsAggressive()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF bStartShootingReaction
IF (IS_PED_SHOOTING(PLAYER_PED_ID())
AND CanSeeStickyBombUse())
OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vExplosionCentre, fExplosionRadius)
OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
BeverlyFleeReaction()
bAllowSynchronisedScene = FALSE
bStartShootingReaction = FALSE
SendCameramanToSuitablePlace()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ELIF (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID())
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID())
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID()))
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT
BeverlyFleeReaction()
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
bAllowSynchronisedScene = FALSE
bStartShootingReaction = FALSE
bAllowThreatConv = FALSE
//bBeverlyWaiting = FALSE
SendCameramanToSuitablePlace()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
//ELIF ((HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[BEV], FALSE) OR IsPlayerThreateningBeverley()) AND CanSeeStickyBombUse())
ELIF (IS_PLAYER_VISIBLY_TARGETTING_PED(sRCLauncherDataLocal.pedID[BEV]) AND CanSeeStickyBombUse()
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT)
OR IS_PED_PERFORMING_STEALTH_KILL(PLAYER_PED_ID()) //OR IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[BEV])
IF IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV], SCRIPT_TASK_COMBAT) //COMBAT IS OCCURRING
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
//iBevWaitTimer = GET_GAME_TIMER() + iBevWaitDelay
bAllowSynchronisedScene = FALSE
bStartShootingReaction = FALSE
BeverlyFleeReaction()
SendCameramanToSuitablePlace()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ELSE
// same reaction as if the player's shooting but delayed
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
//iBevWaitTimer = GET_GAME_TIMER() + iBevWaitDelay
bAllowSynchronisedScene = FALSE
bStartShootingReaction = FALSE
BeverlyScaredReaction()
SendCameramanToSuitablePlace()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
ENDIF
ELIF (IS_PLAYER_VISIBLY_TARGETTING_PED(sRCLauncherDataLocal.pedID[BEV])
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID())
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID())
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
OR bPlayerAggro)
AND (GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_UNARMED OR GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_OBJECT)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
TASK_COMBAT_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID())
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
bAllowSynchronisedScene = FALSE
iFightLineTimer = GET_GAME_TIMER()
/*IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[CAMERAMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN])
ENDIF*/
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.objID[BEV])
ENDIF
ENDIF
ELSE
IF bAllowThreatConv
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND NOT IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
IF IS_MESSAGE_BEING_DISPLAYED()
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_THREAT", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
REPLAY_RECORD_BACK_FOR_TIME(2.0,2.0, REPLAY_IMPORTANCE_LOWEST)
bAllowThreatConv = FALSE
ENDIF
ELSE
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_THREAT", CONV_PRIORITY_MEDIUM, DISPLAY_SUBTITLES)
REPLAY_RECORD_BACK_FOR_TIME(2.0,2.0, REPLAY_IMPORTANCE_LOWEST)
bAllowThreatConv = FALSE
ENDIF
ENDIF
ENDIF
/*ELIF bBeverlyWaiting
IF GET_GAME_TIMER() > iBevWaitTimer AND (NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) OR
(IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_GETTING_UP(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_PRONE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[BEV])))
BeverlyScaredReaction()
ENDIF*/
ELIF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[BEV])
AND ((GET_ENTITY_HEALTH(sRCLauncherDataLocal.pedID[BEV]) < 150 OR (IS_PLAYER_SHOOTING_NEAR_PED(sRCLauncherDataLocal.pedID[BEV], FALSE) AND CanSeeStickyBombUse())
OR (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID()) AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_STUNGUN)
OR NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV], 20))
OR (IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN]))
OR (IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID()))
OR (IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID()))
OR bDoFlinchReaction)
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
bDoFlinchReaction = TRUE // Check that Bev has his hands up to do a flinch
ENDIF
switch iFlinchStage
CASE 0
IF bDoFlinchReaction = FALSE
iFlinchStage++ // No need for a flinch reaction since Bev didn't have his hands up in the first place
ENDIF
IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sHandsupFlinch, "flinch_additive_a")
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[BEV], sHandsupFlinch, "flinch_additive_a", SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_ADDITIVE|AF_UPPERBODY)
ELIF GET_ENTITY_ANIM_CURRENT_TIME(sRCLauncherDataLocal.pedID[BEV], sHandsupFlinch, "flinch_additive_a") > 0.7
CPRINTLN(DEBUG_MISSION,"Pap 4: Trying to stop flinch")
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sHandsupFlinch, "flinch_additive_a")
iFlinchStage++
ENDIF
BREAK
CASE 1
IF NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV])
// run to the car
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
bNotScaredYet = FALSE
CPRINTLN(DEBUG_MISSION,"Pap 4: bNotScaredYet = FALSE, PlayerIsAggressive()")
/*IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV]) AND IS_VEHICLE_SEAT_FREE(sRCLauncherDataLocal.vehID[BEV]) AND NOT PlayerUsingExplosives()
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV]) AND NOT bBeverlyFleeing
IF NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV], SCRIPT_TASK_ENTER_VEHICLE)
TASK_ENTER_VEHICLE(sRCLauncherDataLocal.pedID[BEV], sRCLauncherDataLocal.vehID[BEV], DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_SPRINT, ECF_RESUME_IF_INTERRUPTED | ECF_DONT_CLOSE_DOOR)
ENDIF
// Camera guy walks to a point near the car
CameramanFilmsCar()
ELSE*/
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV])
CLEAR_PED_SECONDARY_TASK(sRCLauncherDataLocal.pedID[BEV])
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
ENDIF
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[BEV])
SetNavmeshState(TRUE)
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[BEV], FA_USE_VEHICLE, FALSE)
bBeverlyFleeing = TRUE
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[BEV], PLAYER_PED_ID(), 500, -1)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_DONE
eCarStealStage = CSS_DONE
ENDIF
//ENDIF
ENDIF
iFlinchStage++
BREAK
ENDSWITCH
ENDIF
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sRCLauncherDataLocal.pedID[BEV])
ENDIF
// Cameraman only flees if he's directly threatened
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF (IS_PLAYER_SHOOTING_NEAR_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], FALSE) AND CanSeeStickyBombUse())
OR (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID()) AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT)
OR (IS_PLAYER_VISIBLY_TARGETTING_PED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT)
OR NOT IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
OR IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR PlayerNudgedPedWithCar(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
OR IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vExplosionCentre, fExplosionRadius)
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT") AND NOT ARE_STRINGS_EQUAL(sConv, "PAP4_ATTACK")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_CAMFLEE", CONV_PRIORITY_MEDIUM)//, DO_NOT_DISPLAY_SUBTITLES)
CameramanFlees()
bPlayerAggro = TRUE
/*IF IS_THERE_A_CAR_BLOCKING_THIS_CAR(sRCLauncherDataLocal.vehID[BEV])
OR CarDoorsBlocked()
BeverlyFleeReaction()
ELSE
StartBevToCar(TRUE, TRUE)
ENDIF*/
BeverlyFleeReaction()
ENDIF
ENDIF
ENDIF
// Makeup woman flees more easily than the cameraman
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT bMakeupWomanFleeing
IF (HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND CanSeeStickyBombUse())
OR (HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[BEV]) AND CanSeeStickyBombUse())
OR (HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND CanSeeStickyBombUse())
OR PlayerNudgedPedWithCar(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
OR PlayerNudgedPedWithCar(sRCLauncherDataLocal.pedID[BEV])
OR PlayerNudgedPedWithCar(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
OR NOT IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vExplosionCentre, fExplosionRadius)
OR IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[BEV])
OR IsPlayerStealthKillingPed(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[MAKEUPWMAN]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
/*IF IS_PED_GROUP_MEMBER(sRCLauncherDataLocal.pedID[MAKEUPWMAN], giBevGroup)
REMOVE_PED_FROM_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
ENDIF*/
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
STRING sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF NOT ARE_STRINGS_EQUAL(sConv, "PAP4_THREAT") AND NOT ARE_STRINGS_EQUAL(sConv, "PAP4_ATTACK")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
SetNavmeshState(TRUE)
bMakeupWomanFleeing = TRUE
bAllowSynchronisedScene = FALSE
bPlayerAggro = TRUE // Player aggro'd the scene, use this bool to ensure Bev attacks player
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
BeverlyFleeReaction()
ENDIF
/*IF IS_THERE_A_CAR_BLOCKING_THIS_CAR(sRCLauncherDataLocal.vehID[BEV])
OR CarDoorsBlocked()
BeverlyFleeReaction()
ELSE
StartBevToCar(TRUE, TRUE)
ENDIF*/
eInterruptionStage = IS_DONE
ENDIF
ENDIF
ENDIF
IF (IS_PED_SHOOTING(PLAYER_PED_ID()) )//AND CanSeeStickyBombUse())
BeverlyFleeReaction()
CameramanFlees()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Sets the bool bAllKilledAtOnce to be FALSE if the player doesn't kill all peds in one go
PROC CheckForAllKilled()
IF NOT bAllKilledAtOnce
IF iKillAllTimer = -1
// timer is -1, means that no peds have been killed yet
IF NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
OR NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
iKillAllTimer = GET_GAME_TIMER() + KILL_ALL_TIME
ENDIF
ELSE
// timer has been set, at least one ped has been killed
IF iKillAllTimer > GET_GAME_TIMER()
// less than 500ms have passed so continue to check the other peds
IF NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
bAllKilledAtOnce = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Triggers conversations based on the player's aggressive behaviour
PROC PlayerShootingDialogue()
IF NOT bAllowThreatConv
AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV], 5.0)
IF IS_PED_SHOOTING(PLAYER_PED_ID()) OR HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[BEV]) OR HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF GET_GAME_TIMER() > iShootLineTimer
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iCurrentBevShootLine < NUM_SHOOTING_LINES
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_ATTACK", sBevShootLines[iCurrentBevShootLine], CONV_PRIORITY_MEDIUM)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sRCLauncherDataLocal.pedID[BEV])
iCurrentBevShootLine++
iShootLineTimer = GET_GAME_TIMER() + iShootLineDelay
ENDIF
ELSE
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_BEG", CONV_PRIORITY_MEDIUM)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sRCLauncherDataLocal.pedID[BEV])
iShootLineTimer = GET_GAME_TIMER() + iShootLineDelay
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if the player is stood between Beverly and the cameraman, blocking filming
/// RETURNS:
/// True if the player is in the area between Beverly and the cameraman
FUNC BOOL IsPlayerBlockingFilming()
VECTOR vBevPos = GET_ENTITY_COORDS(sRCLauncherDataLocal.pedID[BEV]) + <<0,0,1>>
VECTOR vCamPos = GET_ENTITY_COORDS(sRCLauncherDataLocal.pedID[CAMERAMAN]) - <<0,0,1>>
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vBevPos, vCamPos, 0.5)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks if Beverly and the cameraman are on the final line of their conversation. Don't want to do the interruption in this case
/// RETURNS:
/// TRUE if their conversation is playing anything other than the final line
FUNC BOOL NotOnFinalLine()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND GET_CURRENT_SCRIPTED_CONVERSATION_LINE() < iFinalLine[iCurrentRestart]
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// State machine to deal with reactions to the player interrupting Beverly's filming by walking in front of the camera
PROC PlayerBlocksFilming()
IF eInterruptionStage <> IS_DONE AND IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
SWITCH eInterruptionStage
CASE IS_READY
IF iCurrentRestart < NUM_INTERRUPTIONS-1
IF IsPlayerBlockingFilming() AND NotOnFinalLine()
bAllowLeaving = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
eInterruptionStage = IS_INTERRUPTION
ENDIF
ELSE
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
ENDIF
BREAK
CASE IS_INTERRUPTION
IF iCurrentInterruption < NUM_INTERRUPTIONS
enumSubtitlesState eSubtitles
IF IS_MESSAGE_BEING_DISPLAYED()
eSubtitles = DO_NOT_DISPLAY_SUBTITLES
ELSE
eSubtitles = DISPLAY_SUBTITLES
ENDIF
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_BLOCK", sInterruptConv[iCurrentInterruption], CONV_PRIORITY_MEDIUM, eSubtitles)
iCurrentInterruption++
eInterruptionStage = IS_RESTART
ENDIF
ELSE
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
ENDIF
BREAK
CASE IS_RESTART
/*IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
bAllowSynchronisedScene = FALSE
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[BEV], SLOW_BLEND_OUT, TRUE)
IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], REALLY_SLOW_BLEND_OUT, TRUE)
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[CAMERAMAN])
CPRINTLN(DEBUG_MISSION,"Forcing ped anim update on cameraman 2")
ENDIF
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[MAKEUPWMAN], SLOW_BLEND_OUT, TRUE)
TASK_LOOK_AT_ENTITY(sRCLauncherDataLocal.pedID[MAKEUPWMAN], PLAYER_PED_ID(), 2800)
SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ENDIF*/
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IsPlayerBlockingFilming()
bAllowLeaving = FALSE
eInterruptionStage = IS_INTERRUPTION
ELSE
IF iCurrentRestart < NUM_RESTARTS
enumSubtitlesState eSubtitles
IF IS_MESSAGE_BEING_DISPLAYED()
eSubtitles = DO_NOT_DISPLAY_SUBTITLES
ELSE
eSubtitles = DISPLAY_SUBTITLES
ENDIF
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", sRestartConv[iCurrentRestart], CONV_PRIORITY_MEDIUM, eSubtitles)
bAllowLeaving = TRUE
iCurrentRestart++
eInterruptionStage = IS_READY
ENDIF
ELSE
bAllowLeaving = TRUE
eInterruptionStage = IS_DONE
ENDIF
//bAllowSynchronisedScene = TRUE
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDPROC
/// PURPOSE:
/// Triggers dialogue from the cameraman if the player threatens Beverly
PROC CameramanDialogue()
IF NOT bAllowThreatConv AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF iCurrentCameraLine < NUM_CAMERA_LINES AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND GET_GAME_TIMER() > iCameraLineTimer
AND GET_DISTANCE_BETWEEN_PEDS(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID()) < 10.0 AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_CAMERA", sCameraTalk[iCurrentCameraLine], CONV_PRIORITY_MEDIUM)
iCurrentCameraLine++
iCameraLineTimer = GET_GAME_TIMER() + iCameraLineDelay
ENDIF
ENDIF
ENDIF
ENDPROC
PROC FightBevDialogue()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
IF GET_GAME_TIMER() > iFightLineTimer
CPRINTLN(DEBUG_MISSION,"Ready for fighting line")
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_FIST", CONV_PRIORITY_MEDIUM)
iFightLineTimer = GET_GAME_TIMER() + FIGHT_LINE_TIME
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Makes the cameraman play his holding a video camera anim if he needs to, stops him playing it if it's appropriate
PROC ControlCameramanAnims()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[CAMERAMAN]) //AND IS_ENTITY_ATTACHED_TO_ANY_OBJECT(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
IF IS_PED_BEING_STEALTH_KILLED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
STOP_SOUND(iCameraSoundID)
SAFE_RELEASE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], SLOW_BLEND_OUT, TRUE)
SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ELSE
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
ENDIF
ELIF IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
STOP_SOUND(iCameraSoundID)
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.ObjID[CAMERAMAN])
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBeverlyFilmingScene)
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], SLOW_BLEND_OUT, TRUE)
SET_SYNCHRONIZED_SCENE_PHASE(iBeverlyFilmingScene, 1.0)
ELSE
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase)
ENDIF
ENDIF
ELIF NOT bCamermanFleeing
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_SYNCHRONIZED_SCENE)
AND NOT IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_MELEE_COMBAT(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN])
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[CAMERAMAN], SCRIPT_TASK_SMART_FLEE_PED)
AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[CAMERAMAN])
//PRINT_NOW("Playing camera anim after threat", 7000, 1)
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[CAMERAMAN], sMissionAnims, sCamFilmBase, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Stops Beverly playing the hands up anim if the player knocks him over, restarts it once he's back onhis feet
PROC ControlBevHandsUp()
IF bNotScaredYet = FALSE AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND eCarStealStage = CSS_READY
IF (NOT IS_PED_GETTING_UP(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_PRONE(sRCLauncherDataLocal.pedID[BEV])
AND NOT IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[BEV]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[BEV], TRUE)
AND NOT IsPedPerformingTask(sRCLauncherDataLocal.pedID[BEV], SCRIPT_TASK_ENTER_VEHICLE) AND NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[BEV]))
OR IS_PED_BEING_STEALTH_KILLED(sRCLauncherDataLocal.pedID[BEV])
IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim) AND HAS_ANIM_DICT_LOADED(sMissionAnims)
TASK_PLAY_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim, SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
ENDIF
ELSE
IF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
STOP_ANIM_TASK(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
ENDIF
ENDIF
ENDIF
ENDPROC
PROC ControlFilmingBrawl()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND NOT bStopCheckingNewsvan AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[CAMERAMAN]) //AND IS_ENTITY_ATTACHED_TO_ANY_OBJECT(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_PED_IN_COMBAT(sRCLauncherDataLocal.pedID[BEV])
IF GET_GAME_TIMER() > iCamMoveTimer
SendCameramanToSuitablePlace()
iCamMoveTimer = GET_GAME_TIMER() + CAM_MOVE_TIME
ENDIF
ELIF IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[BEV], sMissionAnims, sHandsUpAnim)
IF GET_GAME_TIMER() > iCamLookTimer
IF bFilmBev
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], sRCLauncherDataLocal.pedID[BEV], -1)
bFilmBev = FALSE
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID(), -1)
bFilmBev = TRUE
ENDIF
iCamLookTimer = GET_GAME_TIMER() + CAM_LOOK_TIME + (GET_RANDOM_INT_IN_RANGE(0, 20) * 100)
ENDIF
ENDIF
ENDIF
ENDPROC
//*************************************************************************************************************************************************
// :INITAL SETUP FUNCTIONS:
//*************************************************************************************************************************************************
/// PURPOSE:
/// Initiate the mission and load text and anims
PROC INITMISSION()
SWITCH eState
CASE SS_INIT
#IF IS_DEBUG_BUILD
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE (TRUE)
#ENDIF
REQUEST_ADDITIONAL_TEXT("PAP4", MISSION_TEXT_SLOT)
REQUEST_ANIM_DICT(sMissionAnims)
REQUEST_ANIM_DICT(sMakeupScaredAnims)
REQUEST_ANIM_DICT(sHandsupFlinch)
REQUEST_CLIP_SET(sWeaponMoveClipset)
REQUEST_WAYPOINT_RECORDING(sWaypointRecBev)
REQUEST_WAYPOINT_RECORDING(sWaypointRecCam)
SET_WANTED_LEVEL_MULTIPLIER(0.1)
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
CPRINTLN(DEBUG_MISSION,"Mission Stage INITMISSION")
IF IS_PED_UNINJURED(PLAYER_PED_ID())
ADD_PED_FOR_DIALOGUE(ConversationPeds, FRANKLIN_ID, PLAYER_PED_ID(), "FRANKLIN")
ENDIF
SetupDialogue()
SET_ROADS_IN_ANGLED_AREA(vRoadOffOne, vRoadOffTwo, fRoadOffWidth, FALSE, FALSE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_takedown_a"), FALSE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_takedown_heavy"), FALSE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_armed_takedown"), FALSE)
sBevShootLines[0] = "PAP4_ATTACK_1"
sBevShootLines[1] = "PAP4_ATTACK_2"
sBevShootLines[2] = "PAP4_ATTACK_3"
sCameraTalk[0] = "PAP4_CAMERA_1"
sCameraTalk[1] = "PAP4_CAMERA_2"
sCameraTalk[2] = "PAP4_CAMERA_3"
sCameraTalk[3] = "PAP4_CAMERA_4"
sRestartConv[0] = "PAP4_TV_2"
sRestartConv[1] = "PAP4_TV_3"
sRestartConv[2] = "PAP4_TV_4"
sInterruptConv[0] = "PAP4_BLOCK_1"
sInterruptConv[1] = "PAP4_BLOCK_2"
sInterruptConv[2] = "PAP4_BLOCK_3"
sInterruptConv[3] = "PAP4_BLOCK_4"
iFinalLine[0] = 17
iFinalLine[1] = 8
iFinalLine[2] = 5
iFinalLine[3] = 2
SetNavmeshState(FALSE)
iCameraSoundID = GET_SOUND_ID()
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
PLAY_SOUND_FROM_ENTITY(iCameraSoundID, sCameraSound, sRCLauncherDataLocal.ObjID[CAMERAMAN], sCameraSoundset)
ENDIF
#IF IS_DEBUG_BUILD
s_skip_menu[0].sTxtLabel = "INTRO"
s_skip_menu[1].sTxtLabel = "DEAL WITH BEV"
#ENDIF
eState = SS_CLEANUP
ENDIF
BREAK
CASE SS_CLEANUP
IF IS_REPLAY_IN_PROGRESS()
START_REPLAY_SETUP(vPlayerReset, fPlayerReset)
RestartCheckpoint()
ELSE
IF IS_REPEAT_PLAY_ACTIVE()
REQUEST_CUTSCENE("pap_4_rcm")
WHILE NOT HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
WAIT(0)
ENDWHILE
SetupDialogue()
ENDIF
// Setup pushin camera
IF IS_SCREEN_FADED_IN() // Don't do gameplay hint if skipping to intro
AND IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[0])
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[0]) > 6
SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[0], (<<0, 0, 0>>), TRUE, -1, 3000)
SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(0.45)
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(-0.01)
SET_GAMEPLAY_HINT_FOV(30.00)
SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[0], -1)
iLeadInTimer = GET_GAME_TIMER() + 3000
ELSE
iLeadInTimer = -1
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "PAP4: Not doing leadin focus camera") #ENDIF
ENDIF
NEXT_STAGE()
ENDIF
BREAK
ENDSWITCH
ENDPROC
// ===========================================================================================================
// MISSION FUNCTIONS & PROCEDURES
// ===========================================================================================================
/// PURPOSE:
/// Loads and plays the intro cutscene
PROC INTRO()
SWITCH eState
CASE SS_INIT
SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), TRUE)
IF GET_GAME_TIMER() > iLeadInTimer
RC_REQUEST_CUTSCENE("pap_4_rcm")
IF RC_IS_CUTSCENE_OK_TO_START()
CPRINTLN(DEBUG_MISSION,"Mission Stage INTRO")
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vAlternateApproachPos1, vAlternateApproachPos2, fAlternateApproachWidth)
bShowPlayer = TRUE
ENDIF
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[BEV], "Beverley", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[CAMERAMAN], "film_guy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[MAKEUPWMAN], "makeup_artist", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
// hide the two cameras, easier than getting the cutscene set up to link to them
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[BEV])
//SET_ENTITY_VISIBLE(sRCLauncherDataLocal.ObjID[BEV], FALSE)
DETACH_ENTITY(sRCLauncherDataLocal.ObjID[BEV], FALSE)
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.ObjID[BEV], "Beverlys_camera", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
//SET_ENTITY_VISIBLE(sRCLauncherDataLocal.ObjID[CAMERAMAN], FALSE)
DETACH_ENTITY(sRCLauncherDataLocal.ObjID[CAMERAMAN], FALSE)
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.ObjID[CAMERAMAN], "Video_camera_forMan", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
RC_CLEANUP_LAUNCHER()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
START_CUTSCENE()
WAIT(0)
IF bShowPlayer
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
iShowPlayerTimer = -1
ENDIF
SAFE_FADE_SCREEN_IN_FROM_BLACK(500, FALSE)
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[BEV])
SAFE_TELEPORT_ENTITY(sRCLauncherDataLocal.vehID[BEV], vBevCarPos, fBevCarHeading)
SET_VEHICLE_ON_GROUND_PROPERLY(sRCLauncherDataLocal.vehID[BEV])
SET_VEHICLE_DOORS_LOCKED(sRCLauncherDataLocal.vehID[BEV], VEHICLELOCK_UNLOCKED)
ENDIF
IF IS_VEHICLE_OK(sRCLauncherDataLocal.vehID[CAMERAMAN])
SAFE_TELEPORT_ENTITY(sRCLauncherDataLocal.vehID[CAMERAMAN], vVanPos, fVanHeading)//<<-493.66, 240.93, 82.94>>, 263.55)
SET_VEHICLE_ON_GROUND_PROPERLY(sRCLauncherDataLocal.vehID[CAMERAMAN])
SET_VEHICLE_DOORS_LOCKED(sRCLauncherDataLocal.vehID[CAMERAMAN], VEHICLELOCK_UNLOCKED)
ENDIF
//RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(vIntroAreaPos1, vIntroAreaPos2, fIntroAreaWidth, <<-500.71, 241.83, 82.46>>, 262.59, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(vIntroAreaPos1, vIntroAreaPos2, fIntroAreaWidth, <<-500.71, 241.83, 82.46>>, 262.59)
RC_START_CUTSCENE_MODE(<<-484.20, 229.68, 82.21>>, TRUE, TRUE, TRUE, FALSE)
CLEAR_AREA_OF_PEDS(<<-483.503723,231.055862,82.145599>>, 15)
CLEAR_AREA_OF_OBJECTS(<<-483.503723,231.055862,82.145599>>, 15)
bAllowCameraSpamming = TRUE
eState = SS_ACTIVE
ENDIF
ELSE
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
ENDIF
BREAK
CASE SS_ACTIVE
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 3000)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
ELIF bAllowCameraSpamming
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
bAllowCameraSpamming = FALSE
ENDIF
ENDIF
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[BEV]) AND DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley") AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("film_guy") AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("makeup_artist")
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverlys_camera") AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Video_camera_forMan")
//ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[BEV], sRCLauncherDataLocal.pedID[BEV], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[BEV], BONETAG_R_HAND), vBevOffset, vBevRot)
ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[BEV], sRCLauncherDataLocal.pedID[BEV], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[BEV], BONETAG_PH_R_HAND), vBevOffset, vBevRot)
ATTACH_ENTITY_TO_ENTITY(sRCLauncherDataLocal.ObjID[CAMERAMAN], sRCLauncherDataLocal.pedID[CAMERAMAN], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[CAMERAMAN], BONETAG_R_HAND), vCamOffset, vCamRot)
StartFilmingScene()
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()//-136.0613)//141.5441)//-53.6125)
SET_GAMEPLAY_CAM_RELATIVE_PITCH()//2.3862)//-19.0425)//-25.2968)
ENDIF
IF IS_CUTSCENE_PLAYING()
IF IS_GAMEPLAY_HINT_ACTIVE()
STOP_GAMEPLAY_HINT()
ENDIF
IF bShowPlayer AND GET_GAME_TIMER() > iShowPlayerTimer
IF iShowPlayerTimer < 0
iShowPlayerTimer = GET_GAME_TIMER() + 4000
ELSE
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
bShowPlayer = FALSE
ENDIF
ENDIF
ELSE
eState = SS_CLEANUP
ENDIF
BREAK
CASE SS_MESKIPPED
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE()
ELSE
eState = SS_CLEANUP
ENDIF
BREAK
CASE SS_CLEANUP
SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE)
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[MAKEUPWMAN])
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[BEV], TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
//SET_PED_SUFFERS_CRITICAL_HITS(sRCLauncherDataLocal.pedID[BEV], FALSE)
SET_PED_CONFIG_FLAG(sRCLauncherDataLocal.pedID[BEV], PCF_PedsJackingMeDontGetIn, TRUE)
SET_PED_CONFIG_FLAG(sRCLauncherDataLocal.pedID[BEV], PCF_AllowToBeTargetedInAVehicle, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sRCLauncherDataLocal.pedID[BEV], TRUE)
SET_PED_LOD_MULTIPLIER(sRCLauncherDataLocal.pedID[BEV], 1.5)
SET_PED_LOD_MULTIPLIER(sRCLauncherDataLocal.pedID[CAMERAMAN], 1.5)
SET_PED_LOD_MULTIPLIER(sRCLauncherDataLocal.pedID[MAKEUPWMAN], 1.5)
/*giBevGroup = CREATE_GROUP(DEFAULT_TASK_ALLOCATOR_FOLLOW_ANY_MEANS)
SET_PED_AS_GROUP_LEADER(sRCLauncherDataLocal.pedID[BEV], giBevGroup)
SET_PED_NEVER_LEAVES_GROUP(sRCLauncherDataLocal.pedID[BEV], TRUE)
SET_PED_AS_GROUP_MEMBER(sRCLauncherDataLocal.pedID[CAMERAMAN], giBevGroup)
SET_PED_AS_GROUP_MEMBER(sRCLauncherDataLocal.pedID[MAKEUPWMAN], giBevGroup)
SET_PED_NEVER_LEAVES_GROUP(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
SET_PED_NEVER_LEAVES_GROUP(sRCLauncherDataLocal.pedID[MAKEUPWMAN], TRUE)
SET_GROUP_FORMATION(giBevGroup, FORMATION_SURROUND_FACING_INWARDS)
SET_GROUP_FORMATION_SPACING(giBevGroup, 5.0)*/
//StartFilmingScene()
IF IS_PED_UNINJURED(PLAYER_PED_ID()) //AND NOT WAS_CUTSCENE_SKIPPED()
IF WAS_CUTSCENE_SKIPPED()
//SET_ENTITY_HEADING(PLAYER_PED_ID(), 103.3318)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
/*ELSE
TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[BEV])*/
ENDIF
ENDIF
ENDIF
// show the two cameras again
/*IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[BEV])
SET_ENTITY_VISIBLE(sRCLauncherDataLocal.ObjID[BEV], TRUE)
ENDIF
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.ObjID[CAMERAMAN])
SET_ENTITY_VISIBLE(sRCLauncherDataLocal.ObjID[CAMERAMAN], TRUE)
ENDIF*/
bCamermanFleeing = FALSE
bMakeupWomanFleeing = FALSE
/*WHILE IsPedPerformingTask(PLAYER_PED_ID(), SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY)
WAIT(0)
ENDWHILE*/
RC_END_CUTSCENE_MODE()
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
NEXT_STAGE()
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Deals with the on foot section of the mission
PROC BEV_ON_FOOT()
SWITCH eState
CASE SS_INIT
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF CREATE_CONVERSATION(ConversationPeds, "PAP4AUD", "PAP4_TV_TALK", CONV_PRIORITY_MEDIUM)
CPRINTLN(DEBUG_MISSION,"Mission Stage BEV_ON_FOOT")
biGOTO = CREATE_PED_BLIP(sRCLauncherDataLocal.pedID[BEV])
INIT_FLASH_BLIP_AND_TEXT(biGOTO, "", "", iControlTimer, iTextTimer, TRUE, FALSE)
//PRINT_HELP("PAP4_OBJ")
SET_PED_DIES_WHEN_INJURED(sRCLauncherDataLocal.pedID[BEV], TRUE)
iCurrentBevShootLine = 0
iCurrentCameraLine = 0
bStartShootingReaction = TRUE
//bBeverlyWaiting = TRUE
bAllowThreatConv = TRUE
bNotScaredYet = TRUE
eInterruptionStage = IS_READY
bAllowLeaving = TRUE
iCurrentRestart = 0
iCurrentInterruption = 0
iShootLineTimer = 0
iCheckDoorsTimer = 0
//iShockingEventId = -1
bCameraGuyWalks = FALSE
bFirstTimeScared = TRUE
bBeverlyFleeing = FALSE
eState = SS_ACTIVE
ENDIF
ENDIF
BREAK
CASE SS_ACTIVE
StartBevToCar()
CheckBevInCar()
CheckCameramanInCar()
CarStolenOrDestroyed()
CheckCarDoors()
BeverlysCarBlockedIn()
NewsVanStolen()
PlayerIsAggressive()
FightBevDialogue()
PlayerShootingDialogue()
CameramanDialogue()
ControlSynchronisedScenes()
PlayerBlocksFilming()
FLASH_BLIP_AND_TEXT(biGOTO, "", "", iControlTimer, iTextTimer, FALSE)
CheckMissionPassed()
ControlCameramanAnims()
ControlBevHandsUp()
ControlFilmingBrawl()
HandleCamermanFleeing()
HandleMakeupWomanFleeing()
CheckForAllKilled()
BREAK
CASE SS_CLEANUP
NEXT_STAGE()
SAFE_REMOVE_BLIP(biGOTO)
KILL_FACE_TO_FACE_CONVERSATION()
BREAK
CASE SS_MESKIPPED
eMissionStage = MS_PASSED
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Deals with the in car section of the mission
PROC BEV_IN_CAR()
SWITCH eState
CASE SS_INIT
CPRINTLN(DEBUG_MISSION,"Mission Stage BEV_IN_CAR")
eState = SS_ACTIVE
BREAK
CASE SS_ACTIVE
CarStolenOrDestroyed()
NewsVanStolen()
CheckCameramanInCar()
PlayerShootingDialogue()
BeverlysCarBlockedIn()
CameramanDialogue()
FLASH_BLIP_AND_TEXT(biGOTO, "", "", iControlTimer, iTextTimer, FALSE)
CheckMissionPassed()
ControlCameramanAnims()
HandleCamermanFleeing()
HandleMakeupWomanFleeing()
SwitchWaypointToAI()
CheckForAllKilled()
BREAK
CASE SS_CLEANUP
NEXT_STAGE()
SAFE_REMOVE_BLIP(biGOTO)
KILL_FACE_TO_FACE_CONVERSATION()
BREAK
CASE SS_MESKIPPED
eMissionStage = MS_PASSED
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// delays passing the mission by a short amount to allow checking for all peds being killed in one go
PROC PASS_DELAY
SWITCH eState
CASE SS_INIT
REPLAY_RECORD_BACK_FOR_TIME(8.0, 0.0, REPLAY_IMPORTANCE_LOW)
CPRINTLN(DEBUG_MISSION,"Mission Stage MS_PASSED")
iPassTimer = GET_GAME_TIMER() + KILL_ALL_TIME
eState = SS_ACTIVE
BREAK
CASE SS_ACTIVE
CheckForAllKilled()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[CAMERAMAN])
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF NOT IS_PED_FLEEING(sRCLauncherDataLocal.pedID[CAMERAMAN]) AND NOT IS_PED_IN_ANY_VEHICLE(sRCLauncherDataLocal.pedID[CAMERAMAN], TRUE)
SET_PED_FLEE_ATTRIBUTES(sRCLauncherDataLocal.pedID[CAMERAMAN], FA_DISABLE_HANDS_UP, TRUE)
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[CAMERAMAN], PLAYER_PED_ID(), 500, -1)
ENDIF
ELSE
TASK_WANDER_STANDARD(sRCLauncherDataLocal.pedID[CAMERAMAN])
ENDIF
ENDIF
IF GET_GAME_TIMER() > iPassTimer
eState = SS_CLEANUP
ENDIF
BREAK
CASE SS_CLEANUP
CheckForAllKilled()
Script_Passed()
BREAK
ENDSWITCH
ENDPROC
// ===========================================================================================================
// Script Loop
// ===========================================================================================================
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
sRCLauncherDataLocal = sRCLauncherDataIn
RC_TakeEntityOwnership(sRCLauncherDataLocal)
SET_MISSION_FLAG(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]")
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_PAPARAZZO_4(sRCLauncherDataLocal)
WAIT(0)
ENDWHILE
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
g_bSceneAutoTrigger = FALSE
ENDIF
ADD_CONTACT_TO_PHONEBOOK(CHAR_BEVERLY, FRANKLIN_BOOK, FALSE)
// Loop within here until the mission passes or fails
WHILE(TRUE)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_PRC")
WAIT(0)
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
SWITCH eMissionStage
CASE MS_INIT
INITMISSION()
BREAK
CASE MS_INTRO
INTRO()
BREAK
CASE MS_BEV_ON_FOOT
BEV_ON_FOOT()
BREAK
CASE MS_BEV_IN_CAR
BEV_IN_CAR()
BREAK
CASE MS_PASSED
PASS_DELAY()
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
// Check debug completion/failure
DEBUG_Check_Debug_Keys()
#ENDIF
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT