2846 lines
123 KiB
Python
Executable File
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
|
|
|