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

14789 lines
555 KiB
Python
Executable File

// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : docks_heist_2a.sc
// AUTHOR : Craig Vincent / Adam Westwood / Ryan Pendant
// DESCRIPTION : Trevor has decided the best way to steal goods is by blowing up
// the ship.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//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 "commands_audio.sch"
USING "commands_camera.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_fire.sch"
USING "commands_graphics.sch"
USING "commands_hud.sch"
USING "commands_object.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "commands_task.sch"
USING "commands_vehicle.sch"
USING "commands_interiors.sch"
USING "commands_recording.sch"
USING "script_blips.sch"
Using "Locates_public.sch"
Using "select_mission_stage.sch"
USING "model_enums.sch"
USING "script_player.sch"
USING "script_misc.sch"
USING "selector_public.sch"
USING "chase_hint_cam.sch"
using "mission_stat_public.sch"
using "cutscene_public.sch"
USING "CompletionPercentage_public.sch"
USING "taxi_functions.sch"
USING "script_heist.sch"
USING "replay_public.sch"
using "building_control_public.sch"
USING "timeLapse.sch"
using "asset_management_public.sch"
USING "heist_end_screen.sch"
USING "achievement_public.sch"
USING "spline_cam_edit.sch"
USING "tv_control_public.sch"
USING "push_in_public.sch"
#IF IS_DEBUG_BUILD
USING "shared_debug.sch"
USING "script_debug.sch"
#ENDIF
//-----------------------------------------------------------------------------------------------------------
// ENUMS
//-----------------------------------------------------------------------------------------------------------
ENUM MMF_MISSION_MERC_FLAGS
//msf_1
merc1_start,
merc2_start,
merc3_C4_2,
//msf_3
merc4_C4_2,
merc5_C4_2,
merc6_C4_2,
merc7_C4_2,
merc8_C4_2,
//msf_4
merc9_C4_3,
merc10_C4_3,
merc11_C4_3,
merc12_C4_3,
merc13_C4_3,
merc14_C4_3,
MERC15_C4_3,
//msf_5
MERC16_C4_4,
merc17_c4_4,
merc18_c4_4,
//msf_6
merc19_car1,
merc20_car1,
merc21_car1,
merc22_car1,
//msf_6
merc23_car2,
merc24_car2,
merc25_car2,
merc26_car2,
merc27_cars,
merc28_cars,
merc29_heli,
MMF_NUM_OF_MERCS
ENDENUM
ENUM MERC_SITUATION_ENUM
MS_SIT_NONE,
ms_sit_bullet_ping,
MS_SIT_SHOT_HEARD,
MS_sit_MIKE_SEEN,
MS_SIT_DEAD_BODY,
MS_SIT_ATTACKED
ENDENUM
ENUM MERC_ACTION_ENUM
GA_FIND_COVER,
ga_aim_at_sniper,
GA_INVESTIGATE_FRANK,
GA_INVESTIGATE_BODY
ENDENUM
ENUM MPF_MISSION_PED_FLAGS
mpf_frank,
mpf_mike,
mpf_trev,
mpf_heli,
mpf_dock1,
mpf_dock2,
mpf_floyd,
MPF_NUM_OF_PEDS
ENDENUM
ENUM MVF_MISSION_VEHICLE_FLAGS
mvf_mission_veh,
mvf_merc1,
mvf_merc2,
mvf_sub,
mvf_heli,
mvf_getAwayVan,
mvf_dinghy,
mvf_parked1,
mvf_parked2,
mvf_policeHeli,
MVF_NUM_OF_VEH
ENDENUM
ENUM MSF_MISSION_STAGE_FLAGS
msf_0_drive_to_bridge,
msf_1_snipe_gaurds,
msf_2_first_bomb,
msf_3_second_bomb,
msf_4_third_bomb,
msf_5_fourth_bomb,
msf_6_way_out,
msf_7_detonate,
msf_8_explosion_ctscne,
msf_9_the_goods,
msf_10_end_cutscene,
// msf_passed,
CST_INIT,
CST_MCS_1,
CST_MCS_2,
CST_MCS_3,
CST_EXT,
MSF_NUM_OF_STAGES
ENDENUM
Enum C4_FLAGS
C4_0_front_of_ship,
C4_1_first_mast,
C4_2_second_mast,
C4_3_inside,
C4_NUM_OF_BOMBS
endenum
ENUM MFF_MISSION_FAIL_FLAGS
mff_debug_fail,
mff_default,
mff_franklin_dead,
mff_michael_dead,
mff_trevor_dead,
mff_left_trev,
mff_left_Michael,
mff_out_pos,
mff_TREV_LEFT,
mff_left_docks,
mff_frank_car_des,
mff_sub_des,
mff_sub_stuck,
mff_spotted,
mff_area,
mff_ammo,
mff_ammob,
mff_dinghy_des,
mff_dinghy_stuck,
mff_police,
mff_bombs_exploded,
MFF_NUM_OF_FAILS
ENDENUM
Enum STAGE_SWITCHSTATE
STAGESWITCH_IDLE,
STAGESWITCH_REQUESTED,
STAGESWITCH_EXITING,
STAGESWITCH_ENTERING
ENDENUM
// Used with asset management system
ENUM ASSET_TYPE_FLAG
atf_empty = 0,
atf_model,
atf_waypoint,
atf_anim_dict,
atf_scaleform_mov,
atf_veh_rec
ENDENUM
// Hot swap status
enum SWITCHSTATE
SWITCH_NOSTATE,
SWITCH_COMPLETE,
SWITCH_IN_PROGRESS
ENDENUM
enum STEALTH_STAGE
FIRST_BOMB,
SECOND_BOMB,
THIRD_BOMB,
FORTH_BOMB
endenum
enum BOAT_SECTION
BOAT_FRONT,
BOAT_MID1,
BOAT_MID2,
BOAT_BACK
endenum
//-----------------------------------------------------------------------------------------------------------
// STRUCTS
//-----------------------------------------------------------------------------------------------------------
STRUCT VEHICLE_STRUCT
VEHICLE_INDEX id
BLIP_INDEX blip
endstruct
Struct PEDS_STRUCT
PED_INDEX id //Ped Index
BLIP_INDEX blip //Blip Index
VECTOR startloc //Ped start location
FLOAT head //Ped start heading
MODEL_NAMES model //Ped model
COVERPOINT_INDEX cov //Ped coverpoint index
VECTOR vcov //Ped goto vector
INT iEnemyProgress //Ped progressswitching INT
PED_COMP_NAME_ENUM ePedCompPropHead,ePedCompPropEyes, ePedCompSpecial //prop and special clothing, for storing Trevor's
ENDSTRUCT
struct MERC_STRUCT
PED_INDEX id //Ped Index
BLIP_INDEX blip //Blip Index
COVERPOINT_INDEX cov //Ped coverpoint index
VECTOR startloc //Ped start location
VECTOR vdef1 //Ped goto vector bow of the ship
VECTOR vdef2 //ped goto vector container section
VECTOR vdef3 //ped goto vector second mast
VECTOR vdef4 //ped goto vector bridge area
VECTOR vdefFrank //ped goto vector if combat mike
FLOAT head //Ped start heading
WEAPON_TYPE wpn //Ped Weapon type
MODEL_NAMES model //Ped model
COMBAT_MOVEMENT move //Ped movement type
COMBAT_RANGE range //Ped combat range
COMBAT_ABILITY_LEVEL ability //Ped combat ability
MERC_SITUATION_ENUM currentsit //ped sit
MERC_ACTION_ENUM currentaction //action
int iRevertActionTime
int iAdvanceTimer = 0 //@RJP used to time mercs from cars advancing
int iAdvanceState = 0 //@RJP state for tracking merc advancing
int iAdvanceTime1 //@RJP time for ped to wait before advancing
int iAdvanceTime2 //@RJP time for ped to wait before advancing the second time
int iDialogueTimer
bool bzombie
bool bstats = false
bool balive = true
bool bincombat = false
bool bbulletmiss = false
bool bStealthKill = false
bool bAlertSpeech = false
//@RJP track if this ped has seen a dead body
BOOL bSpottedDead = FALSE
//@RJP track if we should display a print help saying to kill this merc
BOOL bPrintHelp
endstruct
STRUCT BOMB_STRUCT // contains details for the bombs
OBJECT_INDEX obj
BLIP_INDEX blip
VECTOR ExpPos
BOOL bInArea
BOOL bPlanted
ENDSTRUCT
// Used with the asset laoding system to describe and asset and mark whether it is loaded or not
STRUCT LOADING_ASSET
asset_type_flag assetType
BOOL bRequested
BOOL bLoaded
BOOL bCleanup
MODEL_NAMES modelName
STRING strAssetName
INT iRecNo
SCALEFORM_INDEX sfi_mov
ENDSTRUCT
STRUCT PED_HEATSCALE_STRUCT
INT iHeatScale = 0
INT iHeatState = 0
ENDSTRUCT
//-----------------------------------------------------------------------------------------------------------
// CONSTANTS
//-----------------------------------------------------------------------------------------------------------
CONST_INT STAGE_ENTRY 0
CONST_INT STAGE_EXIT -1
CONST_INT CAR_MERC_ACCURACY 4
CONST_INT WHICH_PLAYER 0
CONST_INT PLAYER_IS_FRANK 0
CONST_INT PLAYER_IS_MIKE 1
//scanning for crate
CONST_FLOAT FIND_RANGE 3.0
CONST_FLOAT CLOSE_RANGE 6.5
CONST_FLOAT SONAR_MIN_SIZE_SWIM 10.0 // Minimum sonar blip size when swimming
CONST_FLOAT SONAR_UPDATE_SPEED 0.025 // Increase this to make the sonar update faster
//-----------------------------------------------------------------------------------------------------------
// VARIABLES
//-----------------------------------------------------------------------------------------------------------
VEHICLE_STRUCT Vehs[MVF_NUM_OF_VEH] //holds all of the vehicles for tis level
PEDS_STRUCT peds[MPF_NUM_OF_PEDS] //holds all of the peds for this level
MERC_STRUCT mercs[MMF_NUM_OF_MERCS] //holds all of the mercenarys for this level
BOMB_STRUCT C4[C4_NUM_OF_BOMBS] //stores the bombs
PED_HEATSCALE_STRUCT sPedHeatScale[7] //used to fade in heatscale on peds during way out stage
structPedsForConversation convo_struct //holds peds in the conversation
LOCATES_HEADER_DATA sLocatesData
PUSH_IN_DATA sPushInData
BLIP_INDEX blip_playerCar //@RJP blip for Franklin's car at the start
BLIP_INDEX blip_objective //blip for mission objective
BLIP_INDEX blip_checksOb //blip for outside of flow
Camera_index cameraIndex //in game cut scene camera
//Camera_index camSwitch
SEQUENCE_INDEX seq //used to create AI sequence
COVERPOINT_INDEX customCover //used for created cover points
INTERIOR_INSTANCE_INDEX interior_living_room // interiors
STREAMVOL_ID volShip
COVERPOINT_INDEX scriptCover[3] //scripted cover points
//@RJP health pickups
PICKUP_INDEX puiHealthPack[1] //health packs
blip_index blipCrate
OBJECT_INDEX objSofa //shitty sofa to hide during cutscene
OBJECT_INDEX objLoot //loot / cov
object_index objcov1 //crate pile
object_index objcov2 //crate mil small
object_index objcov3 //crate mil large
object_index objcov4 //@RJP adding cover box for ped next to trailer
object_index objcov5 //@RJP adding cover box for ped next to trailer
OBJECT_INDEX objDoor //door into ship, P_PO1_01_DoorM_S
OBJECT_INDEX objDoorHide //door into ship in scene to hide, PORT_XR_DOOR_05
OBJECT_INDEX objBomb[3] //bombs placed when playing from a checkpoint
INT iDoorSyncScene
//INT iDoorCamTime
ENTITY_INDEX objSubHook
BOOL bScubaOutfitSet
// New Sonar Related stuff
BLIP_INDEX biSonarBlip //Sonar blip
FLOAT fCurrentRadius
FLOAT fTargetRadius
FLOAT fSonarIncrement
BOOL bSonarUpdate = TRUE
BOOL bStartSonar = FALSE
INT iStealthKillSyncScene //sync scene for stealth killing anims
//------------------------------ RELATIONSHIPS ------------------------------
REL_GROUP_HASH rel_group_buddy
REL_GROUP_HASH rel_group_enemies
//------------------------------ Mission variables ------------------------------
//INT i
INT iCSDelay
INT iCombatTimer
bool bGotWeapons = false
INT players_scene_id = -1
camera_index camera_a
camera_index camera_b
OBJECT_INDEX objFlare
PTFX_ID flare_ptfx
//------------------------------- Music Scores ------------------------------
bool bdouble_music_cue
bool bCamPan_Cued
bool bCamPan2_Cued
INT iFlyOverMusicTrigger
//------------------------------ stealth stuff ------------------------------
INT iMike_AI_stage
INT istealthkill
INT istealthkillTimer
INT iStealthTimer
BOOL bMikeStealthDiag = false
BOOL bMikeHealthWarn = false
BOOL bMikeCombatWarn = false
//float fAI_distance
vector vAI_coverpoint
float fAI_coverheading
bool bAlertedMerc = false
bool bKilledByBuddy = false
//------------------------------ cutscene stuff ------------------------------
INT icutstage
BOOL b_cutscene_loaded
bool bskip_cut = false
bool bcs_trev = false
bool bcs_cam = false
bool bcs_sub = false
bool bcs_hook = false
bool bSubHandler = false
bool bSwitchOccluders = false
bool bSkipDetonation = false
bool bCanSkip = false
bool bSwappedToFranklin = false
bool bSwappedToTrevor = false
//------------------------------ print / dialogue stuff ------------------------------
bool bDialoguePlayed = false
bool bDialoguePlayed2 = false
bool bDialoguePlayed3 = false
bool bDialoguePlayed4 = false
bool bPrintDisplayed = false
bool bPrintDisplayed2 = false
bool bHelpDisplayed = false
bool bPrintLft_Mike = false
bool bPrintLft_trev = false
bool bPrintMikeLeftArea = false
bool bprinttrevleftarea = false
bool bpauseconv = false
bool bSonarHelp = false
bool bPrintProtect = false
bool bFrankSaysMove = false
bool bMikeAsksForHelp = false
bool bVantageText = false
bool bSternObjDisplayed = false
int iCarMercDiag = 0
int iWayOutDiag = 0
INT iCarConv = 0
INT iImpatientTimer = 0
INT iPoliceHeliState = 0
INT iHeliConv = 0
BOOL bHeliConv = FALSE
//------------------------------ alarm stuff ------------------------------
bool bcsalarmtriggered = false
bool balarmtriggered = false
bool bAlarmInitialised = false
bool bInitialiseDelayALR = false
bool bAlertedEarly = false
INT iAlertedEarlyTimer
//------------------------------ Alarm gone off variables ------------------------------
int isnipedelay //sniper support int
//INT iRespawntimer
//bool bQuickHelp
int iescapeStage
INT iBomb2Spawned = 0
INT iBomb3Spawned = 0
INT iBomb4Spawned = 0
MMF_MISSION_MERC_FLAGS mercsBombArea2[2]
MMF_MISSION_MERC_FLAGS mercsBombArea3[3]
MMF_MISSION_MERC_FLAGS mercsBombArea4[3]
//------------------------------ ties in with stealthy kill active ------------------------------
bool bShotReady = false
bool bSnipeStageCheck = false
bool bincombat = false
int idialogueDelay
int idialoguekillswitch
//------------------------------ mercs stuff ------------------------------
//bool bAllMercsDead = false
string sDuckAnim = "alert_gunshot"
int ireactionlength
//int randoffset
//bool bCarCombatStarted = false
bool bAimIntro = false
bool bAimAtFranklin = false
PED_INDEX piAimAtFranklin = NULL
BOOL bMercSpotterTasked = FALSE
VECTOR vDeadMerc
INT iMercVeh1State
INT iMercVeh2State
INT iMercHeliState
INT iMercHeliTime
bool bRaisedAlarm = false
bool bFrankKilled13 = false
bool bFrankKilled14 = false
INT i_sound_heli_attack = -1
BOOL bHeliAttackSoundsOn = FALSE
//------------------------------ TODS ------------------------------
//time of day variables
structTimelapse sTimelapse
//------------------------------ first aim ------------------------------
BOOL bfirstaim = false
//------------------------------ Sniper stuff ------------------------------
bool bAudio_SnipeLoaded = false
bool bFrankFired = false
int iFrankFiredTimer
int iaudioswitch_snipeStage
ped_index franks_target_ped
vector vfranks_aim_coord
bool b_nightvision_active
bool b_sniper_scope_active
bool bFilledSpecialMeter = false
//int iFranklinCamSwapTimer = -1
//------------------------------ Underwater sounds ------------------------------
INT sound_underwater_ambience = GET_SOUND_ID()
int sound_underwater_rebreather = GET_SOUND_ID()
INT i_sound_scuba_gear = GET_SOUND_ID()
INT i_sound_swishing = GET_SOUND_ID()
//bool bUnderWaterStreamed = false
BOOL bStopRebreather = FALSE
BOOL bAttachSoundPlayed = false
INT i_sound_attach_cargo = GET_SOUND_ID()
//------------------------------ detector stuff ------------------------------
INT ibeepID = GET_SOUND_ID()
//-------------------------------corpse handler stuff ------------------------
INT iCorpseHandlerState = 0
INT iCorpseTimer = 0
//------------------------------ weapon type ------------------------------
WEAPON_TYPE wtEnemyWpn = WEAPONTYPE_ASSAULTRIFLE
WEAPON_TYPE wtSniper = WEAPONTYPE_SNIPERRIFLE
WEAPON_TYPE wtBomb = WEAPONTYPE_STICKYBOMB
weapon_type wtCombatPistol = WEAPONTYPE_COMBATPISTOL
//@RJP weapon type that Michael should have when sneaking during bomb planting stages
WEAPON_TYPE wtSneakingWeapon = WEAPONTYPE_COMBATPISTOL
//Stage Management and skip stuff
STAGE_SWITCHSTATE stageswitch //current switching status
INT mission_stage //current stage
INT mission_substage //current substage
INT requestedStage //the mission stage requested by a mission_stage switch
INT iStageTimer //timer used for debug
Bool bDoSkip //trigger the skip
INT iSkipToStage //the stage to skip to
int iMidReplay
bool bis_zSkip
INT iStairNavMeshBlocker[2]
//hot swap stuff
SELECTOR_PED_STRUCT sSelectorPeds //struct to hold the peds for hotswap
SELECTOR_CAM_STRUCT sCamDetails //camera for hotswap
bool bHotSwap = false //Toggle HotSwap
bool bIncutscene = false
bool bforced = false
int iInterpBackToGameOverRide = -1
int iInterpToSwitchCam = 1000
FLOAT fMass = 500
FLOAT fGravity = 0.2
FLOAT fBuoyancy = -1.0
VECTOR vSecondEntityOffset = << 0.0, -2.2, -2.9 >>
VECTOR vFirstEntityOffset = << 0.0, 0.00, 0.00 >>
VECTOR vRotation = << 0.0, 0.0, -90.0 >>
BOOL bPushInAttached = TRUE
BOOL bPushInAttachStartCam = FALSE
FLOAT fPushInStartPhase = 0.787
FLOAT fPushInStartDistance = 1.0
INT iPushInInterpTime = 1000
INT iPushInCutTime = 600
INT iPushInFXTime = 300
INT iPushInSpeedUpTime = 450
FLOAT fPushInSpeedUpProportion= 0.250
BOOL bPushInDoColourFlash = TRUE
FLOAT fFirstPersonFlashPhase1 = 0.650
BOOL bFirstPersonFlashPlayed
//============================== streaming ==============================
ASSET_MANAGEMENT_DATA sAssetData
CUTSCENE_PED_VARIATION sCutscenePedVariationRegister[MPF_NUM_OF_PEDS]
//----------------
RAYFIRE_INDEX rayfire_ship
BOOL bForcedRayfire
#if IS_DEBUG_BUILD
MissionStageMenuTextStruct zMenuNames[MSF_NUM_OF_STAGES]
WIDGET_GROUP_ID widget_debug
#endif
// ===========================================================================================================
// Trigger boxes
// ===========================================================================================================
// @RJP - This is a structure that's designed to give a name to angled areas.
// I find it difficult to look at an angled-area check, and know where that is, and what its purpose is.
// With this, you can create a "Trigger Box" variable with a name, and you can easily tell by the name, the purpose of it.
STRUCT TRIGGER_BOX
VECTOR vMin
VECTOR vMax
FLOAT flWidth
ENDSTRUCT
//Enum of trigger boxes
ENUM TRIGGER_BOXES
TB_FRANKLIN_KILL_MERC4,
TB_FRANKLIN_KILL_MERC12,
TB_FRANKLIN_KILL_MERC13,
TB_MIKE_WAIT_FOR_MERC3_TO_MOVE,
TB_MIKE_WAIT_FOR_MERC5_TO_MOVE,
TB_MIKE_WAIT_FOR_MERC9_TO_MOVE,
TB_MIKE_WAIT_FOR_MERC10_TO_MOVE,
TB_MIKE_WAIT_FOR_MERC14_TO_MOVE,
TB_BOAT_BOW_UPPER_AREA,
TB_BOAT_BOW_CONTAINERS_AREA,
TB_BOAT_FIRST_MAST_AREA,
TB_BOAT_MID_CONTAINERS_1_AREA,
TB_BOAT_MID_CONTAINERS_2_AREA,
TB_BOAT_MID_CONTAINERS_3_AREA,
TB_BOAT_SECOND_MAST_AREA,
TB_BOAT_STERN_CONTAINERS_AREA,
TB_BOAT_STERN_AREA,
TB_REMOVE_3_PERCEPTION,
TB_REMOVE_9_11_PERCEPTION,
TB_REMOVE_11_PERCEPTION,
TB_REMOVE_14_PERCEPTION,
TB_NUM_TRIGGER_BOXES
ENDENUM
TRIGGER_BOX sTriggerBox[TB_NUM_TRIGGER_BOXES]
FUNC TRIGGER_BOX CREATE_TRIGGER_BOX(VECTOR vMin, VECTOR vMax, FLOAT flWidth)
TRIGGER_BOX tbRetVal
tbRetVal.vMin = vMin
tbRetVal.vMax = vMax
tbRetVal.flWidth = flWidth
RETURN tbRetVal
ENDFUNC
PROC CREATE_SCRIPTED_COVER()
//scripted cover
scriptCover[0] = ADD_COVER_POINT(<<-184.0900, -2374.0142, 8.3191>>, 90.0, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_180 )
scriptCover[1] = ADD_COVER_POINT(<<-127.6602, -2374.7002, 8.3191>>, 0.0, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_180 )
scriptCover[2] = ADD_COVER_POINT(<<-120.2045, -2378.9592, 8.3191>>, 90.0, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_180 )
ENDPROC
PROC CREATE_TRIGGER_BOXES()
sTriggerBox[TB_FRANKLIN_KILL_MERC4] = CREATE_TRIGGER_BOX(<<-106.694305,-2375.552246,7.319069>>, <<-132.539337,-2375.650635,11.371798>>, 15.000000)
sTriggerBox[TB_FRANKLIN_KILL_MERC12] = CREATE_TRIGGER_BOX(<<-186.147293,-2379.649902,7.319110>>, <<-185.926453,-2356.103271,13.425454>>, 23.000000)
sTriggerBox[TB_FRANKLIN_KILL_MERC13] = CREATE_TRIGGER_BOX(<<-209.596725,-2380.277100,7.483111>>, <<-209.650925,-2369.061279,13.319110>>, 30.000000)
sTriggerBox[TB_MIKE_WAIT_FOR_MERC3_TO_MOVE] = CREATE_TRIGGER_BOX(<<-115.710098,-2366.509277,7.345467>>, <<-97.801826,-2366.509277,11.462720>>, 32.000000)
sTriggerBox[TB_MIKE_WAIT_FOR_MERC5_TO_MOVE] = CREATE_TRIGGER_BOX(<<-130.259781,-2352.182373,7.319069>>, <<-130.259781,-2379.292236,11.319069>>, 6.000000)
sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] = CREATE_TRIGGER_BOX(<<-149.013351,-2354.990723,7.367878>>, <<-149.013351,-2379.868896,11.425476>>, 12.000000)
sTriggerBox[TB_MIKE_WAIT_FOR_MERC10_TO_MOVE] = CREATE_TRIGGER_BOX(<<-165.328262,-2355.013428,7.355578>>, <<-165.328262,-2379.838379,11.425476>>, 12.000000)
sTriggerBox[TB_MIKE_WAIT_FOR_MERC14_TO_MOVE] = CREATE_TRIGGER_BOX(<<-194.258270,-2354.992676,7.378938>>, <<-194.248489,-2379.864746,11.425454>>, 13.000000)
sTriggerBox[TB_BOAT_BOW_UPPER_AREA] = CREATE_TRIGGER_BOX(<<-97.801826,-2366.023193,11.338053>>, <<-77.093521,-2366.023193,18.304646>>, 28.000000)
sTriggerBox[TB_BOAT_BOW_CONTAINERS_AREA] = CREATE_TRIGGER_BOX(<<-123.056564,-2366.157471,4.319066>>, <<-97.838348,-2366.157471,18.320217>>, 34.000000)
sTriggerBox[TB_BOAT_FIRST_MAST_AREA] = CREATE_TRIGGER_BOX(<<-132.020584,-2366.692383,4.319069>>, <<-120.831322,-2366.692383,22.319069>>, 34.000000)
sTriggerBox[TB_BOAT_MID_CONTAINERS_1_AREA] = CREATE_TRIGGER_BOX(<<-148.610519,-2366.055664,4.319069>>, <<-129.090439,-2366.055664,24.319069>>, 34.000000)
sTriggerBox[TB_BOAT_MID_CONTAINERS_2_AREA] = CREATE_TRIGGER_BOX(<<-164.543167,-2366.324561,4.319069>>, <<-145.383041,-2366.324561,24.319069>>, 34.000000)
sTriggerBox[TB_BOAT_MID_CONTAINERS_3_AREA] = CREATE_TRIGGER_BOX(<<-182.173538,-2366.210449,4.319110>>, <<-161.555466,-2366.210449,24.319069>>, 34.000000)
sTriggerBox[TB_BOAT_SECOND_MAST_AREA] = CREATE_TRIGGER_BOX(<<-192.630936,-2366.276611,4.319111>>, <<-179.957703,-2366.276611,24.319069>>, 34.000000)
sTriggerBox[TB_BOAT_STERN_CONTAINERS_AREA] = CREATE_TRIGGER_BOX(<<-208.496033,-2366.257324,4.319110>>, <<-190.488571,-2366.257324,24.319111>>, 34.000000)
sTriggerBox[TB_BOAT_STERN_AREA] = CREATE_TRIGGER_BOX(<<-252.817169,-2366.276855,4.458529>>, <<-207.978333,-2366.276855,31.319111>>, 34.000000)
sTriggerBox[TB_REMOVE_3_PERCEPTION] = CREATE_TRIGGER_BOX(<<-100.555099,-2373.169678,7.361284>>, <<-100.727997,-2354.543945,12.599417>>, 7.000000)
sTriggerBox[TB_REMOVE_9_11_PERCEPTION] = CREATE_TRIGGER_BOX(<<-163.841309,-2351.967041,7.340090>>, <<-163.703033,-2368.716553,10.319068>>, 5.000000)
sTriggerBox[TB_REMOVE_11_PERCEPTION] = CREATE_TRIGGER_BOX(<<-178.010101,-2376.210449,7.319069>>, <<-181.661316,-2352.646729,10.319069>>, 6.000000)
sTriggerBox[TB_REMOVE_14_PERCEPTION] = CREATE_TRIGGER_BOX(<<-209.044952,-2374.887939,7.319207>>, <<-209.295425,-2352.120117,10.355095>>, 6.000000)
ENDPROC
FUNC BOOL IS_ENTITY_IN_TRIGGER_BOX(ENTITY_INDEX ped, TRIGGER_BOX trigger)
IF DOES_ENTITY_EXIST(ped) AND NOT IS_ENTITY_DEAD(ped)
IF IS_ENTITY_IN_ANGLED_AREA(ped, trigger.vMin, trigger.vMax, trigger.flWidth)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_IN_TRIGGER_BOX(TRIGGER_BOX trigger)
RETURN IS_ENTITY_IN_TRIGGER_BOX(PLAYER_PED_ID(), trigger)
ENDFUNC
// ===========================================================================================================
// Termination
// ===========================================================================================================
proc LOAD_asset_stage(MSF_MISSION_STAGE_FLAGS loadStage)
SWITCH loadStage
case msf_0_drive_to_bridge
break
case msf_1_snipe_gaurds
// load_asset_model(sAssetData,s_m_y_dockwork_01)
load_asset_model(sAssetData,landstalker)
Load_Asset_AnimDict(sAssetData,"missheistdocks2aswitchig_7")
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_animdict(sAssetData,"missheistdocks2aig_1")
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_2_first_bomb
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_model(sAssetData,landstalker)
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_3_second_bomb
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_4_third_bomb
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_5_fourth_bomb
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_6_way_out
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_model(sAssetData,BUZZARD)
load_asset_animdict(sAssetData,"missheistdocks2a")
load_asset_waypoint(sAssetData,"docksheist2a01")
load_asset_waypoint(sAssetData,"docksheist2a02")
load_asset_waypoint(sAssetData,"docksheist2a03")
load_asset_animdict(sAssetData,"missheistdocks2a@alert")
load_asset_recording(sAssetData,001,"dh2arec")
load_asset_recording(sAssetData,002,"dh2arec")
load_asset_recording(sAssetData,003,"dh2arec")
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_7_detonate
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_model(sAssetData,prop_mil_crate_02)
load_asset_model(sAssetData,prop_cratepile_07a)
load_asset_model(sAssetData,dinghy)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
break
case msf_8_explosion_ctscne
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,landstalker)
load_asset_model(sAssetData,dinghy)
break
case msf_9_the_goods
load_asset_model(sAssetData,s_m_y_blackops_01)
load_asset_model(sAssetData,Prop_Military_Pickup_01)
load_asset_model(sAssetData,submersible)
load_asset_model(sAssetData,dinghy)
Load_Asset_Model(sAssetData,Prop_Flare_01)
load_asset_animdict(sAssetData,"missheistdocks2aswitchig_8")
load_asset_animdict(sAssetData,"swimming@scuba")
break
case msf_10_end_cutscene
load_asset_model(sAssetData,Prop_Military_Pickup_01)
load_asset_model(sAssetData,submersible)
break
// case msf_passed
// load_asset_model(sAssetData,Prop_Military_Pickup_01)
// load_asset_model(sAssetData,submersible)
// break
endswitch
endproc
func ped_index frank_ped()
return peds[mpf_frank].id
endfunc
func ped_index mike_ped()
return peds[mpf_mike].id
endfunc
func ped_index trev_ped()
return peds[mpf_trev].id
endfunc
proc point_gameplay_cam_at_coord(float targetheading)
set_gameplay_cam_relative_heading(targetheading - get_entity_heading(player_ped_id()))
endproc
func bool isentityalive(entity_index mentity)
if does_entity_exist(mentity)
if is_entity_a_vehicle(mentity)
if is_vehicle_driveable(get_vehicle_index_from_entity_index(mentity))
return true
endif
elif is_entity_a_ped(mentity)
if not is_ped_injured(get_ped_index_from_entity_index(mentity))
return true
endif
endif
endif
return false
endfunc
proc safe_remove_blip(blip_index &blipindex)
if does_blip_exist(blipindex)
remove_blip(blipindex)
endif
endproc
proc remove_object(object_index &obj, bool b_force_delete = false)
if does_entity_exist(obj)
if not is_entity_dead(obj)
if is_entity_attached(obj)
detach_entity(obj)
endif
endif
if b_force_delete
delete_object(obj)
else
set_object_as_no_longer_needed(obj)
endif
endif
endproc
proc spawn_ped(ped_index &pedindex, model_names emodel, vector vstart, float fstart = 0.0, bool bdefault = true)
if not does_entity_exist(pedindex)
pedindex = create_ped(pedtype_mission, emodel, vstart, fstart)
if bdefault = true
set_ped_default_component_variation(pedindex)
endif
else
//@RJP if the ped already exists, reset it's coords and heading to be the proper start location/heading
if isentityalive( pedindex )
SET_ENTITY_COORDS( pedindex, vstart )
SET_ENTITY_HEADING( pedindex, fstart )
endif
endif
endproc
proc spawn_vehicle(vehicle_index &vehindex, model_names emodel, vector vstart, float fstart = 0.0, int icolour = -1, float fdirt = 0.0)
if not does_entity_exist(vehindex)
request_model(emodel)
if has_model_loaded(emodel)
vehindex = create_vehicle(emodel, vstart, fstart)
if icolour >= 0
set_vehicle_colours(vehindex, icolour, icolour)
endif
set_vehicle_dirt_level(vehindex, fdirt)
endif
endif
endproc
/// PURPOSE:
/// Ttrying to free up more space for the cutscene. Set FALSE to reset to normal.
PROC REDUCE_AMBIENT_MODELS(BOOL bTurnOn)
// SET_REDUCE_VEHICLE_MODEL_BUDGET(bTurnOn)
// SET_REDUCE_PED_MODEL_BUDGET(bTurnOn)
IF bTurnOn
CPRINTLN(DEBUG_MISSION, "REDUCE_AMBIENT_MODELS: Setting ON")
SET_VEHICLE_POPULATION_BUDGET(0)
SET_PED_POPULATION_BUDGET(0)
ELSE
CPRINTLN(DEBUG_MISSION, "REDUCE_AMBIENT_MODELS: Setting OFF")
SET_VEHICLE_POPULATION_BUDGET(3)
SET_PED_POPULATION_BUDGET(3)
ENDIF
ENDPROC
proc clear_players_task_on_control_input(script_task_name task_name)
if get_script_task_status(player_ped_id(), task_name) = performing_task
int left_stick_x
int left_stick_y
int right_stick_x
int right_stick_y
int stick_dead_zone = 28
get_control_value_of_analogue_sticks(left_stick_x, left_stick_y, right_stick_x, right_stick_y)
if not is_look_inverted()
right_stick_y *= -1
endif
// invert the vertical
if (left_stick_y > stick_dead_zone)
or (left_stick_y < (stick_dead_zone * -1))
or (left_stick_x > stick_dead_zone)
or (left_stick_x < (stick_dead_zone * -1))
//or is_control_pressed(player_control, input_sprint)
clear_ped_tasks(player_ped_id())
endif
endif
endproc
/// PURPOSE:
/// Removes the health pickups on the ship
PROC DELETE_HEALTH_PICKUPS()
IF DOES_PICKUP_EXIST( puiHealthPack[0] )
REMOVE_PICKUP( puiHealthPack[0] )
ENDIF
// IF DOES_PICKUP_EXIST( puiHealthPack[1] )
// REMOVE_PICKUP( puiHealthPack[1] )
// ENDIF
ENDPROC
PROC CREATE_HEALTH_PICKUPS()
DELETE_HEALTH_PICKUPS()
// set placement flags
INT PlacementFlags
PlacementFlags = 0
SET_BIT(PlacementFlags, enum_to_int(PLACEMENT_FLAG_FIXED))
SET_BIT(PlacementFlags, enum_to_int(PLACEMENT_FLAG_LOCAL_ONLY))
puiHealthPack[0] = CREATE_PICKUP_ROTATE(PICKUP_HEALTH_STANDARD, (<<-125.235405,-2357.386230,9.676947>>), (<<0.000000,-0.000000,0.000000>>), PlacementFlags)
// puiHealthPack[1] = CREATE_PICKUP_ROTATE(PICKUP_HEALTH_STANDARD, (<<-225.270004,-2376.050049,9.060000>>), (<<90.00000,-0.000000,-150.000>>), PlacementFlags)
ENDPROC
proc createdockworker(mpf_mission_ped_flags ped)
peds[ped].id = create_ped(pedtype_mission,s_m_y_dockwork_01,peds[ped].startloc,peds[ped].head)
set_ped_money(peds[ped].id,0)
set_ped_flee_attributes(peds[ped].id,fa_return_to_orignal_position_after_flee,false)
set_ped_flee_attributes(peds[ped].id,fa_never_flee,false)
set_ped_flee_attributes(peds[ped].id,fa_wander_at_end,true)
set_ped_flee_attributes(peds[ped].id,fa_prefer_pavements,true)
set_ped_combat_attributes(peds[ped].id,ca_always_flee,true)
set_ped_hearing_range(peds[ped].id,15)
set_ped_seeing_range(peds[ped].id,10)
set_ped_alertness(peds[ped].id,as_alert)
endproc
PROC TASK_MERC_TO_DEFAULT_PATROL_SEQUENCE( INT merc )
IF NOT isentityalive( mercs[merc].id )
EXIT
ENDIF
OPEN_SEQUENCE_TASK( seq )
SWITCH INT_TO_ENUM( MMF_MISSION_MERC_FLAGS, merc )
CASE MERC3_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-110.7773, -2374.6187, 8.3191>> ,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-123.3457, -2366.2498, 8.3191>> ,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-113.7629, -2357.5508, 8.3191>> ,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-99.3139, -2365.4387, 8.3220>> ,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC4_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,MERCS[MERC4_C4_2].STARTLOC,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_ACHIEVE_HEADING( NULL, 180.0 )
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard",2,2,-1,AF_LOOPING)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC5_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-129.9954, -2365.6687, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.6747, -2377.9009, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-147.1642, -2365.7585, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.5969, -2354.1770, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC6_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-129.9954, -2365.6687, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.6747, -2377.9009, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-147.1642, -2365.7585, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.5969, -2354.1770, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC7_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-129.9954, -2365.6687, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.6747, -2377.9009, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-147.1642, -2365.7585, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-138.5969, -2354.1770, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC8_C4_2
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,MERCS[MERC8_C4_2].STARTLOC,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PATROL(NULL,"MISS_PATROL_6",PAS_ALERT)
BREAK
CASE MERC9_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-155.3885, -2353.8774, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-147.7102, -2364.9680, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-154.9743, -2377.9568, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-163.6116, -2367.8689, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC10_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-181.9512, -2367.6396, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-171.5216, -2353.9668, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-163.9121, -2364.6187, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-171.5004, -2378.1313, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC11_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-181.9512, -2367.6396, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-171.5216, -2353.9668, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-163.9121, -2364.6187, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-171.5004, -2378.1313, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC12_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-193.5307, -2378.2000, 10.9717>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard")
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-193.6108, -2375.8923, 10.9717>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard")
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
// TASK_PATROL(NULL,"MISS_PATROL_7",PAS_ALERT)
BREAK
CASE MERC13_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,MERCS[MERC13_C4_3].STARTLOC,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_ACHIEVE_HEADING( NULL, 180.0 )
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard",2,2,-1,AF_LOOPING)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC14_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-200.7796, -2377.9519, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-209.5825, -2368.0845, 8.3192>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-200.6789, -2353.7856, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-190.3428, -2365.7305, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC15_C4_3
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-200.7796, -2377.9519, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-209.5825, -2368.0845, 8.3192>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-200.6789, -2353.7856, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-190.3428, -2365.7305, 8.3191>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC16_C4_4
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-221.3304, -2377.0103, 12.3329>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_STAND_STILL(NULL, 3000)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-230.3291, -2377.7026, 12.3329>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-222.6653, -2375.9956, 16.3326>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-215.1669, -2377.6995, 16.3326>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_STAND_STILL(NULL, 3000)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-222.6653, -2375.9956, 16.3326>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-230.3291, -2377.7026, 12.3329>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP)
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
BREAK
CASE MERC17_C4_4
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,MERCS[MERC17_C4_4].STARTLOC,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PATROL(NULL,"MISS_PATROL_8",PAS_ALERT)
BREAK
CASE MERC18_C4_4
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-250.5147, -2375.5378, 8.3192>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard")
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-252.1649, -2363.8347, 8.3192>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP)
TASK_PLAY_ANIM(NULL,"missheistdocks2a","IDLE_guard")
SET_SEQUENCE_TO_REPEAT(seq,REPEAT_FOREVER)
// TASK_PATROL(NULL,"MISS_PATROL_9",PAS_ALERT)
BREAK
DEFAULT
TASK_STAND_STILL( NULL, -1 )
BREAK
ENDSWITCH
CLOSE_SEQUENCE_TASK( seq )
TASK_PERFORM_SEQUENCE( mercs[merc].id, seq )
CLEAR_SEQUENCE_TASK( seq )
ENDPROC
proc createmercenary(mmf_mission_merc_flags merc,float fseeingrange = 8.0,bool btempblkevents = true,bool blos = false)
load_asset_model(sAssetData,s_m_y_blackops_01)
spawn_ped(mercs[merc].id, s_m_y_blackops_01, mercs[merc].startloc, mercs[merc].head, false)
if isentityalive(mercs[merc].id)
set_ped_relationship_group_hash(mercs[merc].id, rel_group_enemies)
set_ped_as_enemy(mercs[merc].id, true)
give_weapon_to_ped(mercs[merc].id, wtenemywpn, infinite_ammo, true)
set_ped_dies_instantly_in_water(mercs[merc].id, true)
set_ped_money(mercs[merc].id,0)
set_ped_path_can_use_ladders(mercs[merc].id, true)
set_ped_alertness(mercs[merc].id,as_not_alert)
set_ped_flee_attributes(mercs[merc].id,fa_never_flee,true)
//combat attributes
set_ped_target_loss_response(mercs[merc].id,tlr_never_lose_target)
set_ped_combat_attributes(mercs[merc].id,ca_can_shoot_without_los ,blos)
set_ped_combat_attributes(mercs[merc].id, ca_use_cover,true)
set_ped_combat_attributes(mercs[merc].id,ca_can_investigate,true)
set_ped_combat_attributes(mercs[merc].id, ca_use_vehicle, false)
set_ped_combat_movement(mercs[merc].id, cm_defensive)
stop_ped_speaking(mercs[merc].id,true)
set_entity_load_collision_flag(mercs[merc].id,true)
set_ped_hearing_range(mercs[merc].id,10)//temp
set_ped_seeing_range(mercs[merc].id,fseeingrange)
set_ped_config_flag(mercs[merc].id,pcf_runfromfiresandexplosions,false)
set_ped_accuracy(mercs[merc].id,30)
stop_ped_weapon_firing_when_dropped(mercs[merc].id)
SET_PED_DROPS_WEAPONS_WHEN_DEAD(mercs[merc].id,true)
if btempblkevents
set_blocking_of_non_temporary_events(mercs[merc].id,true)
endif
//@RJP init these to prevent problems in replay such as the alarm souding early
mercs[merc].balive = true
mercs[merc].bincombat = false
mercs[merc].bbulletmiss = false
mercs[merc].bStealthKill = false
mercs[merc].currentaction = GA_FIND_COVER
mercs[merc].bSpottedDead = false
mercs[merc].bPrintHelp = false
mercs[merc].bAlertSpeech = false
//@RJP init irevertactiontime so mercs don't reset their patrols when the sneaking section starts
mercs[merc].irevertactiontime = -1
//Mercs won't all say first line at same time
mercs[merc].iDialogueTimer = get_game_Timer() + GET_RANDOM_INT_IN_RANGE( 0, 20000 )
mercs[merc].bzombie = false
if mission_stage < enum_to_int(msf_6_way_out)
//@RJP mercs should be perfoming their patrol routes as they can be seen from the vantage point and from Michael on the dinghy
TASK_MERC_TO_DEFAULT_PATROL_SEQUENCE( ENUM_TO_INT(merc) )
else
if not does_blip_exist(mercs[merc].blip)
mercs[merc].blip = create_blip_for_ped(mercs[merc].id,true)
endif
endif
#if is_debug_build
text_label tdebugname = "merc "
tdebugname += enum_to_int(merc) + 1
set_ped_name_debug(mercs[merc].id, tdebugname)
#endif
INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(mercs[merc].id,true)
endif
endproc
FUNC BOOL createzombiemercenary( mmf_mission_merc_flags merc, VECTOR vPos, FLOAT fHeading, VECTOR vDef )
load_asset_model(sAssetData,s_m_y_blackops_01)
IF WOULD_ENTITY_BE_OCCLUDED( s_m_y_blackops_01, vPos )
spawn_ped(mercs[merc].id, s_m_y_blackops_01, vPos, fHeading, false)
ELSE
RETURN FALSE
ENDIF
if isentityalive(mercs[merc].id)
mercs[merc].bzombie = true
//attributes
set_ped_flee_attributes(mercs[merc].id,fa_never_flee,true)
set_ped_combat_attributes(mercs[merc].id,ca_aggressive,FALSE)
set_ped_combat_attributes(mercs[merc].id, ca_use_cover,TRUE)
set_ped_combat_movement(mercs[merc].id, CM_DEFENSIVE)
//important config
give_weapon_to_ped(mercs[merc].id, wtenemywpn, infinite_ammo, true)
set_ped_can_be_targeted_without_los(mercs[merc].id,false)
set_blocking_of_non_temporary_events(mercs[merc].id,true)
//misc
set_ped_relationship_group_hash(mercs[merc].id, rel_group_enemies)
set_ped_as_enemy(mercs[merc].id, true)
set_ped_dies_instantly_in_water(mercs[merc].id, true)
set_ped_money(mercs[merc].id,0)
set_ped_path_can_use_ladders(mercs[merc].id, true)
//combat attributes
set_ped_target_loss_response(mercs[merc].id,tlr_never_lose_target)
set_ped_combat_range(mercs[merc].id, cr_near)
set_ped_combat_movement(mercs[merc].id, cm_defensive)
set_entity_load_collision_flag(mercs[merc].id,true)
set_ped_hearing_range(mercs[merc].id,200)
set_ped_seeing_range(mercs[merc].id,300)
SET_PED_DROPS_WEAPONS_WHEN_DEAD(mercs[merc].id,true)
set_ped_config_flag(mercs[merc].id,pcf_runfromfiresandexplosions,false)
// if not does_blip_exist(mercs[merc].blip)
// mercs[merc].blip = create_blip_for_ped(mercs[merc].id,true)
// endif
SET_PED_SPHERE_DEFENSIVE_AREA( mercs[merc].id, vDef, 10, TRUE )
#if is_debug_build
text_label tdebugname = "zombie merc "
tdebugname += enum_to_int(merc) + 1
set_ped_name_debug(mercs[merc].id, tdebugname)
#endif
TASK_COMBAT_PED( mercs[merc].id, mike_ped() )
endif
RETURN TRUE
ENDFUNC
func float get_heading_from_coords(vector oldcoords,vector newcoords, bool invert=true)
float heading
float dx = newcoords.x - oldcoords.x
float dy = newcoords.y - oldcoords.y
if dy != 0
heading = atan2(dx,dy)
else
if dx < 0
heading = -90
else
heading = 90
endif
endif
//flip because for some odd reason the coders think west is a heading of 90 degrees, so this'll match the output of commands such as get_entity_heading()
if invert = true
heading *= -1.0
//below not necessary but helps for debugging
if heading < 0
heading += 360.0
endif
endif
return heading
endfunc
/// PURPOSE:
/// Check if an entity exists and is alive
FUNC BOOL IS_ENTITY_OK(ENTITY_INDEX ent)
IF NOT DOES_ENTITY_EXIST(ent)
RETURN FALSE
ENDIF
RETURN NOT IS_ENTITY_DEAD(ent)
ENDFUNC
PROC ENABLE_ALL_DISPATCH_SERVICES(BOOL ok = TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, ok)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, ok)
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, ok)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, ok)
ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, ok)
ENABLE_DISPATCH_SERVICE(DT_POLICE_VEHICLE_REQUEST, ok)
ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, ok)
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, ok)
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, ok)
ENABLE_DISPATCH_SERVICE(DT_GANGS, ok)
ENABLE_DISPATCH_SERVICE(DT_SWAT_HELICOPTER, ok)
ENDPROC
func float GET_HEADING_FROM_ENTITIES(entity_index oldEnd, entity_index newEnt, bool invert=true)
vector v1,v2
v1 = GET_ENTITY_COORDS(oldEnd,FALSE)
v2 = GET_ENTITY_COORDS(newEnt,FALSE)
RETURN GET_HEADING_FROM_COORDS(v1,v2, invert)
endfunc
func float get_sniper_rifle_aim_heading_for_coord(VECTOR vCoord)
vector vec_ba
float aim_heading
vec_ba = vCoord - get_entity_coords(player_ped_id())
//x rotation
aim_heading = (get_heading_from_vector_2d(vec_ba.x, vec_ba.y) - get_entity_heading(player_ped_id()))
if aim_heading > 180
aim_heading -= 360
endif
if aim_heading < -180
aim_heading += 360
endif
return aim_heading
endfunc
func float get_sniper_rifle_aim_pitch_for_coord(VECTOR vCoord)
vector vec_ba
vector direction_vec
IF isentityalive(PLAYER_PED_ID())
vec_ba = vCoord - get_entity_coords(player_ped_id())
endif
direction_vec = normalise_vector(vec_ba)
return (atan2(direction_vec.z, vmag(<<direction_vec.x, direction_vec.y, 0.0>>)))
endfunc
func float get_sniper_rifle_aim_heading_for_ped(ped_index miss_ped)
vector vec_ba
float aim_heading
if isentityalive(miss_ped)
vec_ba = get_entity_coords(miss_ped) - get_entity_coords(player_ped_id())
//x rotation
aim_heading = (get_heading_from_vector_2d(vec_ba.x, vec_ba.y) - get_entity_heading(player_ped_id()))
if aim_heading > 180
aim_heading -= 360
endif
if aim_heading < -180
aim_heading += 360
endif
endif
return aim_heading
endfunc
func float get_sniper_rifle_aim_pitch_for_ped(ped_index miss_ped)
vector vec_ba
vector direction_vec
if isentityalive(miss_ped)
and isentityalive(PLAYER_PED_ID())
vec_ba = get_entity_coords(miss_ped) - get_entity_coords(player_ped_id())
endif
direction_vec = normalise_vector(vec_ba)
return (atan2(direction_vec.z, vmag(<<direction_vec.x, direction_vec.y, 0.0>>)))
endfunc
proc do_exciting_near_bullet_miss_on_ped(ped_index pedtomiss, ped_index sourceofbullets, int &icontroltimer, vector sourceoffset,
int timebetweenbullets = 60, float minxrange = -3.9, float maxxrange = -1.0, float minyrange = -2.9, float maxyrange = 3.9,
weapon_type weapon = weapontype_sniperrifle)
//fire bullets at the player as from the bad guy...
vector bullethit
vector bulletorigin
if ((get_game_timer() - icontroltimer) > timebetweenbullets)
if not is_entity_dead(pedtomiss)
and not is_entity_dead(sourceofbullets)
bullethit = get_offset_from_entity_in_world_coords(pedtomiss, <<get_random_float_in_range(minxrange, maxxrange), get_random_float_in_range(minyrange, maxyrange), 0.0>>)
bulletorigin = get_offset_from_entity_in_world_coords(sourceofbullets, sourceoffset)
get_ground_z_for_3d_coord(bullethit, bullethit.z)
shoot_single_bullet_between_coords(bulletorigin, bullethit, 1,false,weapon)
icontroltimer = get_game_timer()
endif
endif
endproc
// purpose:off radar/ hud / player control
proc prep_start_cutscene(bool bplayercontrol,vector varea,bool brender = true,bool binterp = false,bool bclearprj = true,int interptime = default_interp_to_from_game,set_player_control_flags controlflag = 0)
display_radar(false)
display_hud(false)
set_player_control(player_id(),bplayercontrol,controlflag)
clear_prints()
clear_help()
render_script_cams(brender,binterp,interptime)
if bclearprj
clear_area_of_projectiles(varea,500)
endif
hang_up_and_put_away_phone()
bincutscene = brender
endproc
// purpose:on radar/ hud / player control
proc prep_stop_cutscene(bool bplayercontrol,bool brender = false,bool binterp = false,int iduration = default_interp_to_from_game, set_player_control_flags controlflag = 0)
display_radar(true)
display_hud(true)
set_player_control(player_id(),bplayercontrol,controlflag)
render_script_cams(brender,binterp,iduration)
bincutscene = brender
if not brender
destroy_all_cams()
endif
endproc
proc manage_ipls(BUILDING_STATE_ENUM bstate)
// BUILDINGSTATE_NORMAL = ship fine / BUILDINGSTATE_DESTROYED = exploded
set_building_state(BUILDINGNAME_IPL_CARGOSHIP,bstate)
set_building_state(BUILDINGNAME_IPL_CARGOSHIP_OCCLUSION,bstate)
endproc
proc scuba_suite_up(ped_index scuba_man, bool binwater = false, bool bMask = TRUE)
if isentityalive(scuba_man)
if binwater
SET_PED_COMP_ITEM_CURRENT_SP(scuba_man,comp_type_outfit,outfit_p0_scuba_water,false)
set_enable_scuba(scuba_man,true)
set_ped_dies_in_water(scuba_man,false)
else
SET_PED_COMP_ITEM_CURRENT_SP(scuba_man,comp_type_outfit,outfit_p0_scuba_land,false)
endif
if not bMask
SET_PED_COMP_ITEM_CURRENT_SP(scuba_man, COMP_TYPE_PROPS, PROPS_EYES_NONE)
endif
endif
endproc
proc do_stream_vol(bool bOn = true)
if bOn
volShip = STREAMVOL_CREATE_SPHERE(<<-222.7796, -2369.0286, 21.6855>>,15,FLAG_COLLISIONS_WEAPON)
else
STREAMVOL_DELETE(volShip)
endif
endproc
// -----------------------------------------------------------------------------------------------------------
// SWITCH CAM VARIABLES
// -----------------------------------------------------------------------------------------------------------
ENUM FIB5_SWITCH_CAM_STATE
SWITCH_CAM_IDLE,
SWITCH_CAM_REQUEST_ASSETS,
SWITCH_CAM_SETUP_SPLINE,
SWITCH_CAM_PLAYING_SPLINE,
SWITCH_CAM_SHUTDOWN_SPLINE,
SWITCH_CAM_RETURN_TO_GAMEPLAY,
SWITCH_CAM_WAIT_FOR_INTERPOLATION
ENDENUM
FIB5_SWITCH_CAM_STATE eSwitchCamState = SWITCH_CAM_IDLE
SWITCH_CAM_STRUCT scsSwitchCam_MichaelToTrevor
#IF IS_DEBUG_BUILD
//BOOL bSwitchCamDebugScenarioEnabled = TRUE
//BOOL bResetDebugScenario = FALSE
#ENDIF
BOOL bPlayerControlGiven
BOOL bSwitchCam_CharIsSwapped
BOOL bSwitchCam_SubStartedMoving
BOOL bSwitchCam_SubPropellersStarted
BOOL bSwitchCam_MikeSwitchFX
BOOL bSwitchCam_TrevSwitchFX
FLOAT fSwitchCam_MikeSwitchFXPhase = 0.00142
FLOAT fSwitchCam_TrevSwitchFXPhase = 0.125
FLOAT fSwitchCam_SubPropellersStarted = 0.5
FLOAT fSwitchCam_SubStartedMovingPhase = 0.195
INT iSwitchCam_ReturnToGameplayBlendTime = 1000
//FLOAT fSwitchCam_SubRecPlaybackSpeed = 1.0
//FLOAT fSwitchCam_SubMovementSpeed = 5.0
//VECTOR vSwitchCam_SubTargetDest = <<-403, -2371, -11.5>>
//FLOAT fSwitchCam_MikeLeavesDingy = 0.3
//FLOAT fFranklinStartAimPhase = 0.2
#IF IS_DEBUG_BUILD
BOOL bSwitchCamDebug_SkipToSwitch
#ENDIF
//PED_INDEX piFranklinSwitch
func float get_sniper_rifle_aim_heading_for_vector(VECTOR aim_target)
// vector vec_ba
float aim_heading
//if isentityalive(miss_ped)
// vec_ba = get_entity_coords(miss_ped) - get_entity_coords(player_ped_id())
//x rotation
aim_heading = (get_heading_from_vector_2d(aim_target.x, aim_target.y) - get_entity_heading(player_ped_id()))
if aim_heading > 180
aim_heading -= 360
endif
if aim_heading < -180
aim_heading += 360
endif
//endif
return aim_heading
endfunc
FUNC BOOL IS_PLAYER_PLAYING_IN_FIRST_PERSON_ON_FOOT()
RETURN GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
ENDFUNC
PROC SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_TREVOR(SWITCH_CAM_STRUCT &thisSwitchCam, PED_INDEX piMichael, VEHICLE_INDEX viSub )
CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_TREVOR")
IF NOT thisSwitchCam.bInitialized
//--- Start of Cam Data ---
thisSwitchCam.nodes[0].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[0].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[0].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[0].iNodeTime = 0
thisSwitchCam.nodes[0].vNodePos = <<2.1696, -2.5168, 0.0412>>
thisSwitchCam.nodes[0].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[0].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[0].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[0].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[0].vNodeDir = <<0.5515, 0.2998, 0.2401>>
thisSwitchCam.nodes[0].bPointAtEntity = TRUE
thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[0].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[0].fNodeFOV = 35.0000
thisSwitchCam.nodes[0].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[0].iNodeToClone = 0
thisSwitchCam.nodes[0].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[0].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[0].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[0].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[0].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[0].fNodeCamShake = 0.2000
thisSwitchCam.nodes[0].iCamEaseType = 0
thisSwitchCam.nodes[0].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[0].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[0].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[0].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[0].fTimeScale = 1.0000
thisSwitchCam.nodes[0].iTimeScaleEaseType = 0
thisSwitchCam.nodes[0].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[0].bFlashEnabled = FALSE
thisSwitchCam.nodes[0].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[0].fMinExposure = 0.0000
thisSwitchCam.nodes[0].fMaxExposure = 0.0000
thisSwitchCam.nodes[0].iRampUpDuration = 0
thisSwitchCam.nodes[0].iRampDownDuration = 0
thisSwitchCam.nodes[0].iHoldDuration = 0
thisSwitchCam.nodes[0].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[0].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[0].bUseCustomDOF = FALSE
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[1].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[1].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[1].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[1].iNodeTime = 1500
thisSwitchCam.nodes[1].vNodePos = <<2.1018, -2.5559, 0.0412>>
thisSwitchCam.nodes[1].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[1].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[1].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[1].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[1].vNodeDir = <<0.4967, 0.2380, 0.3844>>
thisSwitchCam.nodes[1].bPointAtEntity = TRUE
thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[1].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[1].fNodeFOV = 35.0000
thisSwitchCam.nodes[1].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[1].iNodeToClone = 0
thisSwitchCam.nodes[1].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 1.0000
thisSwitchCam.nodes[1].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[1].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[1].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[1].fNodeCamShake = 0.2000
thisSwitchCam.nodes[1].iCamEaseType = 2
thisSwitchCam.nodes[1].fCamEaseScaler = 0.9000
thisSwitchCam.nodes[1].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[1].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[1].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[1].fTimeScale = 1.0000
thisSwitchCam.nodes[1].iTimeScaleEaseType = 0
thisSwitchCam.nodes[1].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[1].bFlashEnabled = FALSE
thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[1].fMinExposure = 0.0000
thisSwitchCam.nodes[1].fMaxExposure = 0.0000
thisSwitchCam.nodes[1].iRampUpDuration = 0
thisSwitchCam.nodes[1].iRampDownDuration = 0
thisSwitchCam.nodes[1].iHoldDuration = 0
thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.0
thisSwitchCam.nodes[1].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[1].bUseCustomDOF = FALSE
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[2].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[2].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[2].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[2].iNodeTime = 600
thisSwitchCam.nodes[2].vNodePos = <<-6.3518, -7.3249, 0.0389>>
thisSwitchCam.nodes[2].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[2].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[2].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[2].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[2].vNodeDir = <<-7.9352, -4.5686, 0.1894>>
thisSwitchCam.nodes[2].bPointAtEntity = TRUE
thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[2].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[2].fNodeFOV = 35.0000
thisSwitchCam.nodes[2].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[2].iNodeToClone = 0
thisSwitchCam.nodes[2].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 1.0000
thisSwitchCam.nodes[2].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[2].fNodeMotionBlur = 0.3000
thisSwitchCam.nodes[2].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[2].fNodeCamShake = 0.2000
thisSwitchCam.nodes[2].iCamEaseType = 0
thisSwitchCam.nodes[2].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[2].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[2].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[2].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[2].fTimeScale = 1.0000
thisSwitchCam.nodes[2].iTimeScaleEaseType = 0
thisSwitchCam.nodes[2].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[2].bFlashEnabled = TRUE
thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_SwitchShortTrevorMid
thisSwitchCam.nodes[2].fMinExposure = 200.0000
thisSwitchCam.nodes[2].fMaxExposure = 200.0000
thisSwitchCam.nodes[2].iRampUpDuration = 50
thisSwitchCam.nodes[2].iRampDownDuration = 50
thisSwitchCam.nodes[2].iHoldDuration = 100
thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.9000
thisSwitchCam.nodes[2].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[2].bUseCustomDOF = FALSE
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[3].bIsCamCutNode = TRUE
thisSwitchCam.nodes[4].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[4].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[4].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[4].iNodeTime = 0
thisSwitchCam.nodes[4].vNodePos = <<5.9623, 9.3726, 0.3272>>
thisSwitchCam.nodes[4].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[4].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[4].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[4].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[4].vNodeDir = <<-7.3216, 0.0000, 85.1943>>
thisSwitchCam.nodes[4].bPointAtEntity = FALSE
thisSwitchCam.nodes[4].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[4].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[4].fNodeFOV = 30.000
thisSwitchCam.nodes[4].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[4].iNodeToClone = 0
thisSwitchCam.nodes[4].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[4].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[4].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[4].fNodeMotionBlur = 0.3000
thisSwitchCam.nodes[4].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[4].fNodeCamShake = 0.2000
thisSwitchCam.nodes[4].iCamEaseType = 0
thisSwitchCam.nodes[4].fCamEaseScaler = 1.0000
thisSwitchCam.nodes[4].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[4].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[4].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[4].fTimeScale = 1.0000
thisSwitchCam.nodes[4].iTimeScaleEaseType = 0
thisSwitchCam.nodes[4].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[4].bFlashEnabled = FALSE
thisSwitchCam.nodes[4].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[4].fMinExposure = 0.0000
thisSwitchCam.nodes[4].fMaxExposure = 0.0000
thisSwitchCam.nodes[4].iRampUpDuration = 0
thisSwitchCam.nodes[4].iRampDownDuration = 0
thisSwitchCam.nodes[4].iHoldDuration = 0
thisSwitchCam.nodes[4].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[4].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[4].bUseCustomDOF = FALSE
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[5].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[5].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[5].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[5].iNodeTime = 500
thisSwitchCam.nodes[5].vNodePos = <<6.9998, 3.8269, 0.5564>>
thisSwitchCam.nodes[5].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[5].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[5].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[5].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[5].vNodeDir = <<-7.3216, 0.0000, 97.1138>>
thisSwitchCam.nodes[5].bPointAtEntity = FALSE
thisSwitchCam.nodes[5].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].fNodeFOV = 30.000
thisSwitchCam.nodes[5].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[5].iNodeToClone = 0
thisSwitchCam.nodes[5].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[5].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[5].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[5].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[5].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[5].fNodeCamShake = 0.2000
thisSwitchCam.nodes[5].iCamEaseType = 0
thisSwitchCam.nodes[5].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[5].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[5].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[5].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[5].fTimeScale = 1.0000
thisSwitchCam.nodes[5].iTimeScaleEaseType = 0
thisSwitchCam.nodes[5].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[5].bFlashEnabled = FALSE
thisSwitchCam.nodes[5].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[5].fMinExposure = 0.0000
thisSwitchCam.nodes[5].fMaxExposure = 0.0000
thisSwitchCam.nodes[5].iRampUpDuration = 0
thisSwitchCam.nodes[5].iRampDownDuration = 0
thisSwitchCam.nodes[5].iHoldDuration = 0
thisSwitchCam.nodes[5].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[5].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[5].bUseCustomDOF = FALSE
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[6].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[6].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[6].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[6].iNodeTime = 500
thisSwitchCam.nodes[6].vNodePos = <<3.0225, 6.4558, 0.5031>>
thisSwitchCam.nodes[6].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[6].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[6].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[6].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[6].vNodeDir = <<0.1229, 0.0020, -0.4059>>
thisSwitchCam.nodes[6].bPointAtEntity = TRUE
thisSwitchCam.nodes[6].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[6].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[6].fNodeFOV = 30.000
thisSwitchCam.nodes[6].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[6].iNodeToClone = 0
thisSwitchCam.nodes[6].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[6].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[6].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[6].fNodeMotionBlur = 1.0000
thisSwitchCam.nodes[6].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[6].fNodeCamShake = 0.2000
thisSwitchCam.nodes[6].iCamEaseType = 0
thisSwitchCam.nodes[6].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[6].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[6].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[6].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[6].fTimeScale = 1.0000
thisSwitchCam.nodes[6].iTimeScaleEaseType = 0
thisSwitchCam.nodes[6].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[6].bFlashEnabled = TRUE
thisSwitchCam.nodes[6].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[6].fMinExposure = 200.0000
thisSwitchCam.nodes[6].fMaxExposure = 200.0000
thisSwitchCam.nodes[6].iRampUpDuration = 50
thisSwitchCam.nodes[6].iRampDownDuration = 50
thisSwitchCam.nodes[6].iHoldDuration = 100
thisSwitchCam.nodes[6].fFlashNodePhaseOffset = 0.9500
thisSwitchCam.nodes[6].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[6].bUseCustomDOF = FALSE
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[7].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[7].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[7].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[7].iNodeTime = 3000
thisSwitchCam.nodes[7].vNodePos = <<7.0921, -0.5832, 1.1157>>
thisSwitchCam.nodes[7].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[7].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[7].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[7].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[7].vNodeDir = <<0.1416, -1.1054, -0.2735>>
thisSwitchCam.nodes[7].bPointAtEntity = TRUE
thisSwitchCam.nodes[7].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[7].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[7].fNodeFOV = 30.000
thisSwitchCam.nodes[7].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[7].iNodeToClone = 0
thisSwitchCam.nodes[7].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[7].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[7].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[7].fNodeMotionBlur = 1.0000
thisSwitchCam.nodes[7].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[7].fNodeCamShake = 0.2000
thisSwitchCam.nodes[7].iCamEaseType = 0
thisSwitchCam.nodes[7].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[7].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[7].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[7].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[7].fTimeScale = 1.0000
thisSwitchCam.nodes[7].iTimeScaleEaseType = 0
thisSwitchCam.nodes[7].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[7].bFlashEnabled = FALSE
thisSwitchCam.nodes[7].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[7].fMinExposure = 0.0000
thisSwitchCam.nodes[7].fMaxExposure = 0.0000
thisSwitchCam.nodes[7].iRampUpDuration = 0
thisSwitchCam.nodes[7].iRampDownDuration = 0
thisSwitchCam.nodes[7].iHoldDuration = 0
thisSwitchCam.nodes[7].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[7].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[7].bUseCustomDOF = FALSE
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[8].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[8].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[8].bIsGameplayCamCopy = TRUE
thisSwitchCam.nodes[8].iNodeTime = 2000
thisSwitchCam.nodes[8].vNodePos = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[8].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[8].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[8].vNodeDir = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].bPointAtEntity = TRUE
thisSwitchCam.nodes[8].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[8].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[8].fNodeFOV = 52.5000
thisSwitchCam.nodes[8].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].iNodeToClone = 0
thisSwitchCam.nodes[8].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[8].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[8].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[8].fNodeMotionBlur = 0.3000
thisSwitchCam.nodes[8].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[8].fNodeCamShake = 0.2000
thisSwitchCam.nodes[8].iCamEaseType = 0
thisSwitchCam.nodes[8].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[8].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[8].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[8].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[8].fTimeScale = 0.0000
thisSwitchCam.nodes[8].iTimeScaleEaseType = 0
thisSwitchCam.nodes[8].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[8].bFlashEnabled = FALSE
thisSwitchCam.nodes[8].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[8].fMinExposure = 0.0000
thisSwitchCam.nodes[8].fMaxExposure = 0.0000
thisSwitchCam.nodes[8].iRampUpDuration = 0
thisSwitchCam.nodes[8].iRampDownDuration = 0
thisSwitchCam.nodes[8].iHoldDuration = 0
thisSwitchCam.nodes[8].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[8].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[8].bUseCustomDOF = FALSE
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.camVelocityOverrides[0].fStartPoint = 0.0000
thisSwitchCam.camVelocityOverrides[0].fSpeed = 0.0500
thisSwitchCam.camVelocityOverrides[1].fStartPoint = 0.9000
thisSwitchCam.camVelocityOverrides[1].fSpeed = 0.0500
thisSwitchCam.camVelocityOverrides[2].fStartPoint = 1.0000
thisSwitchCam.camVelocityOverrides[2].fSpeed = 19.0000
thisSwitchCam.camVelocityOverrides[3].fStartPoint = 4.0000
thisSwitchCam.camVelocityOverrides[3].fSpeed = 19.0000
thisSwitchCam.camVelocityOverrides[4].fStartPoint = 4.3000
thisSwitchCam.camVelocityOverrides[4].fSpeed = 19.0000
thisSwitchCam.camVelocityOverrides[5].fStartPoint = 5.3500
thisSwitchCam.camVelocityOverrides[5].fSpeed = 2.5000
thisSwitchCam.camVelocityOverrides[6].fStartPoint = 5.6000
thisSwitchCam.camVelocityOverrides[6].fSpeed = 2.5000
thisSwitchCam.camVelocityOverrides[7].fStartPoint = 6.3000
thisSwitchCam.camVelocityOverrides[7].fSpeed = 25.0000
thisSwitchCam.camVelocityOverrides[8].fStartPoint = 7.8000
thisSwitchCam.camVelocityOverrides[8].fSpeed = 25.0000
thisSwitchCam.camVelocityOverrides[9].fStartPoint = 7.9000
thisSwitchCam.camVelocityOverrides[9].fSpeed = 3.0000
thisSwitchCam.camVelocityOverrides[10].fStartPoint = 8.0000
thisSwitchCam.camVelocityOverrides[10].fSpeed = 0.7000
thisSwitchCam.camBlurOverrides[0].fBlurOverrideStartPoint = 0.0000
thisSwitchCam.camBlurOverrides[0].fBlurOverrideBlurLevel = 0.0000
thisSwitchCam.camBlurOverrides[1].fBlurOverrideStartPoint = 2.8000
thisSwitchCam.camBlurOverrides[1].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[2].fBlurOverrideStartPoint = 3.2000
thisSwitchCam.camBlurOverrides[2].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[3].fBlurOverrideStartPoint = 4.0000
thisSwitchCam.camBlurOverrides[3].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[4].fBlurOverrideStartPoint = 4.8000
thisSwitchCam.camBlurOverrides[4].fBlurOverrideBlurLevel = 0.0000
thisSwitchCam.camBlurOverrides[5].fBlurOverrideStartPoint = 5.8000
thisSwitchCam.camBlurOverrides[5].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[6].fBlurOverrideStartPoint = 6.0000
thisSwitchCam.camBlurOverrides[6].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[7].fBlurOverrideStartPoint = 7.0000
thisSwitchCam.camBlurOverrides[7].fBlurOverrideBlurLevel = 1.0000
thisSwitchCam.camBlurOverrides[8].fBlurOverrideStartPoint = 8.0000
thisSwitchCam.camBlurOverrides[8].fBlurOverrideBlurLevel = 0.0000
thisSwitchCam.iNumNodes = 9
thisSwitchCam.iCamSwitchFocusNode = 4
thisSwitchCam.fSwitchSoundAudioStartPhase = -1.0
thisSwitchCam.fSwitchSoundAudioEndPhase = -1.0
thisSwitchCam.bSplineNoSmoothing = TRUE
thisSwitchCam.bAddGameplayCamAsLastNode = FALSE
thisSwitchCam.iGameplayNodeBlendDuration = 800
//--- End of Cam Data ---
thisSwitchCam.strOutputStructName = "thisSwitchCam"
thisSwitchCam.strOutputFileName = "CameraInfo_HEIST_DOCKS_MichaelToSubmarine.txt"
thisSwitchCam.strXMLFileName = "CameraInfo_HEIST_DOCKS_MichaelToSubmarine.xml"
thisSwitchCam.bInitialized = TRUE
ENDIF
thisSwitchCam.piPeds[0] = piMichael
thisSwitchCam.viVehicles[1] = viSub
ENDPROC
/// PURPOSE:
/// Handle the playback of the switch cam. The will setup, play, shut down and cleanup the switch cam spline
/// PARAMS:
/// thisSwitchCam - Switch camera to playback
/// bReturnTrueOnce - If you only want this function to return TRUE once upon completion. Set to FALSE to have this function to return true every time this is called once the camera is finished playback.
/// RETURNS:
/// TRUE when camera is complete, FALSE if playback is still active, or if the camera has completed playback and bReturnTrueOnce is set to TRUE.
FUNC BOOL HANDLE_SWITCH_CAM_MICHAEL_TO_TREVOR(SWITCH_CAM_STRUCT &thisSwitchCam, BOOL bReturnTrueOnce = TRUE)
INT iCurrentNode
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
SWITCH eSwitchCamState
CASE SWITCH_CAM_IDLE
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_IDLE")
BREAK
CASE SWITCH_CAM_REQUEST_ASSETS
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS")
load_asset_recording(sAssetData, 004, "dh2arec")
REQUEST_ANIM_DICT("missswitch")
SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_TREVOR(thisSwitchCam, mike_ped(), vehs[mvf_sub].id)
LOAD_CAM_SHAKE_LIBRARIES(thisSwitchCam)
BREAK
CASE SWITCH_CAM_SETUP_SPLINE
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_SETUP_SPLINE")
REQUEST_ANIM_DICT("missswitch")
load_asset_recording(sAssetData, 004, "dh2arec")
SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_TREVOR(thisSwitchCam, mike_ped(), vehs[mvf_sub].id)
IF LOAD_CAM_SHAKE_LIBRARIES(thisSwitchCam)
AND HAS_ANIM_DICT_LOADED("missswitch")
DESTROY_ALL_CAMS()
CREATE_SPLINE_CAM(thisSwitchCam)
SET_CAM_ACTIVE(thisSwitchCam.ciSpline, TRUE)
SET_CAM_MOTION_BLUR_STRENGTH(thisSwitchCam.ciSpline, 0.1)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
SETTIMERB(0)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
bPlayerControlGiven = FALSE
SET_VEHICLE_LIGHTS(vehs[mvf_sub].id, SET_VEHICLE_LIGHTS_ON)
bSwitchCam_SubStartedMoving = FALSE
bSwitchCam_SubPropellersStarted = FALSE
bSwitchCam_MikeSwitchFX = FALSE
bSwitchCam_TrevSwitchFX = FALSE
eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE
ENDIF
BREAK
CASE SWITCH_CAM_PLAYING_SPLINE
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE")
CDEBUG3LN(DEBUG_MISSION, GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline))
iCurrentNode = GET_CAM_SPLINE_NODE_INDEX(thisSwitchCam.ciSpline)
// iCurrentNode = UPDATE_SPLINE_CAM(thisSwitchCam)
IF IS_CAM_ACTIVE(thisSwitchCam.ciSpline)
IF iCurrentNode >= thisSwitchCam.iCamSwitchFocusNode
IF NOT bSwitchCam_CharIsSwapped
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE)
bSwitchCam_CharIsSwapped = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bSwitchCam_MikeSwitchFX
IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fSwitchCam_MikeSwitchFXPhase
//PLAY_SOUND_FRONTEND(-1, "Camera_Move_One_Shot", "PLAYER_SWITCH_PORT_OF_LS_HEIST_2A_SOUNDSET")
//PLAY_SOUND_FRONTEND(-1, "Hit_In", "PLAYER_SWITCH_PORT_OF_LS_HEIST_2A_SOUNDSET")
PLAY_SOUND_FRONTEND(-1, "Hit_Out", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
ANIMPOSTFX_PLAY( "SwitchShortMichaelIn", 0, FALSE )
bSwitchCam_MikeSwitchFX = TRUE
ENDIF
ENDIF
IF NOT bSwitchCam_TrevSwitchFX
IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fSwitchCam_TrevSwitchFXPhase
//PLAY_SOUND_FRONTEND(-1, "Short_Transition_Out", "PLAYER_SWITCH_PORT_OF_LS_HEIST_2A_SOUNDSET")
PLAY_SOUND_FRONTEND(-1, "Short_Transition_In", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
ANIMPOSTFX_PLAY( "SwitchShortTrevorMid", 0, FALSE )
bSwitchCam_TrevSwitchFX = TRUE
ENDIF
ENDIF
IF NOT bSwitchCam_SubStartedMoving
IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fSwitchCam_SubStartedMovingPhase
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id, FALSE)
TASK_PLAY_ANIM(trev_ped(), "missswitch", "mid_mission_inside_helicopter_trevor", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_sub].id, 004, "dh2arec", FALSE)
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_sub].id, 3800)
bSwitchCam_SubStartedMoving = TRUE
ENDIF
ENDIF
IF NOT bSwitchCam_SubPropellersStarted
IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fSwitchCam_SubPropellersStarted
FORCE_SUB_THROTTLE_FOR_TIME(vehs[mvf_sub].id, 1.0, 5.0)
bSwitchCam_SubPropellersStarted = TRUE
ENDIF
ENDIF
IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 1.00
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY")
eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY
ELSE
RETURN FALSE
ENDIF
ENDIF
FALLTHRU
CASE SWITCH_CAM_RETURN_TO_GAMEPLAY
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY")
SET_TIME_SCALE(1.0)
RENDER_SCRIPT_CAMS(FALSE, TRUE, iSwitchCam_ReturnToGameplayBlendTime, FALSE)
IF NOT bPlayerControlGiven
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
bPlayerControlGiven = TRUE
ENDIF
SETTIMERA(0)
NEW_LOAD_SCENE_STOP()
CLEAR_PED_TASKS(trev_ped())
STOP_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_sub].id)
REMOVE_VEHICLE_RECORDING(004, "dh2arec")
SET_PLAYER_CONTROL(PLAYER_ID(), true)
FORCE_SUB_THROTTLE_FOR_TIME(vehs[mvf_sub].id, 1.0, 0.5)
REMOVE_ANIM_DICT("missswitch")
CDEBUG3LN(DEBUG_MISSION, "Ending Switch Cam")
eSwitchCamState = SWITCH_CAM_WAIT_FOR_INTERPOLATION
RETURN FALSE
BREAK
CASE SWITCH_CAM_WAIT_FOR_INTERPOLATION
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_WAIT_FOR_INTERPOLATION")
IF NOT IS_INTERPOLATING_FROM_SCRIPT_CAMS()
CDEBUG3LN(DEBUG_MISSION, "Returning To Gameplay Cam")
IF DOES_CAM_EXIST(thisSwitchCam.ciSpline)
SET_CAM_ACTIVE(thisSwitchCam.ciSpline, FALSE)
DESTROY_CAM(thisSwitchCam.ciSpline)
ENDIF
DESTROY_ALL_CAMS()
thisSwitchCam.bIsSplineCamFinishedPlaying = TRUE
sCamDetails.brun = FALSE
eSwitchCamState = SWITCH_CAM_IDLE
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
IF bReturnTrueOnce
RETURN FALSE
ELSE
RETURN thisSwitchCam.bIsSplineCamFinishedPlaying
ENDIF
ENDFUNC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Create the debug widgets for working with the scripted character switch cam.
PROC CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS()
CDEBUG3LN(DEBUG_MISSION, "CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS")
SET_CURRENT_WIDGET_GROUP(scsSwitchCam_MichaelToTrevor.wgidParent)
START_WIDGET_GROUP("Custom Switch Cameras - Extra Tunables")
START_WIDGET_GROUP("Michael To Trevor")
ADD_WIDGET_BOOL("Skip To Switch Scene", bSwitchCamDebug_SkipToSwitch)
//ADD_WIDGET_VECTOR_SLIDER("Sub Go To Dest", vSwitchCam_SubTargetDest, -100000, 10000, 10.0)
ADD_WIDGET_FLOAT_SLIDER("Sub Movement Start Phase", fSwitchCam_SubStartedMovingPhase, 0.0, 1.0, 0.05)
ADD_WIDGET_FLOAT_SLIDER("Sub propellers Start Phase", fSwitchCam_SubPropellersStarted, 0.0, 1.0, 0.1)
ADD_WIDGET_INT_SLIDER("Return TO Gameplay Cam Duration", iSwitchCam_ReturnToGameplayBlendTime, 0, 5000, 100)
//ADD_WIDGET_FLOAT_SLIDER("Sub Movement Rec Playback Speed", fSwitchCam_SubRecPlaybackSpeed, 0.0, 10.0, 1.0)
//ADD_WIDGET_FLOAT_SLIDER("Sub Movement Speed Target", fSwitchCam_SubMovementSpeed, 0.0, 100.0, 1.0)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
PROC HANDLE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS()
// IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_PAD_LEFT)
// bdoskip = true
// iskiptostage = enum_to_int(msf_9_the_goods)
// ENDIF
IF bSwitchCamDebug_SkipToSwitch
//
IF int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage) = msf_9_the_goods
IF NOT IS_SCREEN_FADED_OUT()
OR NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_OUT(100)
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
SET_SYNCHRONIZED_SCENE_RATE(players_scene_id, 8.0)
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
IF mission_substage > 3
SET_ENTITY_COORDS(mike_ped(), (GET_ENTITY_COORDS(objLoot) + <<0.0, 0.0, 2.0>>))
DO_SCREEN_FADE_IN(100)
bSwitchCamDebug_SkipToSwitch = FALSE
ENDIF
ENDIF
ELSE
bSwitchCamDebug_SkipToSwitch = FALSE
ENDIF
ENDIF
ENDPROC
#ENDIF
// -----------------------------------------------------------------------------------------------------------
// Initialise
// -----------------------------------------------------------------------------------------------------------
PROC INITIALISE()
//MERCS
//MSF_1_SNIPE
MERCS[MERC1_START].STARTLOC = << -95.3159, -2370.9175, 13.2960 >>
MERCS[MERC1_START].HEAD = 166.6539
MERCS[MERC2_START].STARTLOC = << -95.4717, -2371.6418, 13.3370 >>
MERCS[MERC2_START].HEAD = 352.3306
MERCS[MERC3_C4_2].STARTLOC = <<-99.3547, -2373.5896, 8.3631>> //FIRST PATROL GUY BY LADDER
MERCS[MERC3_C4_2].HEAD = 94.6563
MERCS[MERC3_C4_2].VDEFFRANK = <<-121.5680, -2378.0593, 8.3191>>
MERCS[MERC4_C4_2].STARTLOC = <<-130.8882, -2381.1301, 8.4830>> //STAIRS TO SHIP
MERCS[MERC4_C4_2].HEAD = 111.7926
MERCS[MERC3_C4_2].VDEFFRANK = <<-131.2666, -2380.9895, 8.4830>>
MERCS[MERC5_C4_2].STARTLOC = <<-133.4564, -2353.7512, 8.3191>> //BOMB AREA WALKING BACK AND FORTH
MERCS[MERC5_C4_2].HEAD = 269.1131
MERCS[MERC5_C4_2].VDEFFRANK = <<-134.2778, -2378.5774, 8.3191>>
// MERCS[MERC6_C4_2].STARTLOC = <<-100.3547, -2371.0896, 8.3631>> //PATROL DARK SIDE LADDER WITH 3
// MERCS[MERC6_C4_2].HEAD = 264.039
MERCS[MERC6_C4_2].STARTLOC = <<-136.5821, -2353.4810, 8.3191>> // PATROL AROUND THE SECOND BLOCK(BEFORE MAST)
MERCS[MERC6_C4_2].HEAD = 257.6619
MERCS[MERC6_C4_2].VDEFFRANK = <<-140.7227, -2378.9175, 8.3191>>
MERCS[MERC8_C4_2].STARTLOC = <<-145.6482, -2373.9126, 10.9717>> //WALKWAY
MERCS[MERC8_C4_2].HEAD = 193.1906
MERCS[MERC9_C4_3].STARTLOC = <<-163.7027, -2358.7537, 8.3191>> //STATIC DARK SIDE
MERCS[MERC9_C4_3].HEAD = 349.0318
MERCS[MERC9_C4_3].VDEFFRANK = <<-153.3035, -2378.9810, 8.3191>>
MERCS[MERC10_C4_3].STARTLOC = <<-175.2808, -2377.9624, 8.3191>> // PATROL WITH 11
MERCS[MERC10_C4_3].HEAD = 105.1062
MERCS[MERC10_C4_3].VDEFFRANK = <<-153.3035, -2378.9810, 8.3191>>
MERCS[MERC11_C4_3].STARTLOC = <<-175.6108, -2378.5624, 8.3191>> // PATROL WITH 10
MERCS[MERC11_C4_3].HEAD = 83.7819
MERCS[MERC11_C4_3].VDEFFRANK = <<-170.2135, -2378.9146, 8.3191>>
MERCS[MERC12_C4_3].STARTLOC = <<-193.3811, -2358.0469, 10.9719>> // PATROL THIRD BOMB BALCONY
MERCS[MERC12_C4_3].HEAD = 352.3621
MERCS[MERC12_C4_3].VDEFFRANK = <<-193.6092, -2378.0381, 10.9717>>
//INSIDE
MERCS[MERC13_C4_3].STARTLOC = <<-209.4923, -2381.1301, 8.4833>> //STATIC STAIRS
MERCS[MERC13_C4_3].HEAD = 180.0
MERCS[MERC13_C4_3].VDEFFRANK = <<-209.8036, -2380.9172, 8.4833>>
MERCS[MERC14_C4_3].STARTLOC = <<-190.3405, -2376.1091, 8.3191>> //PATROL WITH 15
MERCS[MERC14_C4_3].HEAD = 120.2464
MERCS[MERC14_C4_3].VDEFFRANK = <<-198.1502, -2378.9272, 8.3191>>
MERCS[MERC15_C4_3].STARTLOC = <<-190.3402, -2372.9521, 8.3191>> //PATROL WITH 14
MERCS[MERC15_C4_3].HEAD = 170.6087
MERCS[MERC15_C4_3].VDEFFRANK = <<-204.5925, -2378.8252, 8.3191>>
MERCS[MERC16_C4_4].STARTLOC = << -221.0865, -2377.1345, 12.3325 >> //MID STAIRS
MERCS[MERC16_C4_4].HEAD = 92.8979
MERCS[MERC16_C4_4].VDEFFRANK = << -230.0103, -2379.9412, 12.3327 >>
MERCS[MERC17_C4_4].STARTLOC = <<-212.1228, -2371.5813, 16.3318>> //TOP PATROL BALCONY
MERCS[MERC17_C4_4].HEAD = 179.6727
MERCS[MERC17_C4_4].VDEFFRANK = <<-225.4011, -2377.6538, 16.3326>>
MERCS[MERC18_C4_4].STARTLOC = << -250.4333, -2355.8440, 8.5061 >> //PATROL BACK
MERCS[MERC18_C4_4].HEAD = 265.6055
MERCS[MERC18_C4_4].VDEFFRANK = <<-245.1081, -2377.0864, 8.3192>>
MERCS[merc19_car1].startloc = <<-185.0, -2512.0, 5.1600>>
MERCS[merc19_car1].HEAD = 90
MERCS[merc20_car1].startloc = <<-184.0, -2512.0, 5.1600>>
MERCS[merc20_car1].HEAD = 90
MERCS[merc21_car1].startloc = <<-183.0, -2512.0, 5.1600>>
MERCS[merc21_car1].HEAD = 90
MERCS[merc22_car1].startloc = <<-182.0, -2512.0, 5.1600>>
MERCS[merc22_car1].HEAD = 90
MERCS[merc23_car2].startloc = <<-185.0, -2513.0, 5.1600>>
MERCS[merc23_car2].HEAD = 90
MERCS[merc24_car2].startloc = <<-184.0, -2513.0, 5.1600>>
MERCS[merc24_car2].HEAD = 90
MERCS[merc25_car2].startloc = <<-183.0, -2513.0, 5.1600>>
MERCS[merc25_car2].HEAD = 90
MERCS[merc26_car2].startloc = <<-182.0, -2513.0, 5.1600>>
MERCS[merc26_car2].HEAD = 90
MERCS[merc27_cars].startloc = <<-209.39200, -2367.15527, 8.31911>>
MERCS[merc27_cars].HEAD = 83.7819
MERCS[merc28_cars].startloc = <<-209.2853, -2375.9495, 8.3191>>
MERCS[merc28_cars].HEAD = 83.7819
//============================ DEF 1 ============================
MERCS[MERC1_START].VDEF1 = << -96.8524, -2376.0610, 13.7374 >> //
MERCS[MERC2_START].VDEF1 = << -95.3553, -2357.4910, 13.7049 >> //
MERCS[MERC3_C4_2].VDEF1 = << -100.0022, -2372.7339, 8.8395 >> //
MERCS[MERC4_C4_2].VDEF1 = << -114.89989, -2377.92456, 8.65607 >>
MERCS[MERC5_C4_2].VDEF1 = << -121.77245, -2378.60083, 8.31872 >>
MERCS[MERC6_C4_2].VDEF1 = << -124.83544, -2374.71558, 8.31890 >>
MERCS[MERC8_C4_2].VDEF1 = << -128.26039, -2378.96094, 8.31891 >>
MERCS[MERC9_C4_3].VDEF1 = << -92.30511, -2364.47778, 13.29613 >>
MERCS[MERC10_C4_3].VDEF1 = << -128.59235, -2374.08301, 8.31891 >>
MERCS[MERC11_C4_3].VDEF1 = << -126.72150, -2367.66284, 8.31891 >>
MERCS[MERC12_C4_3].VDEF1 = << -121.77224, -2359.75244, 8.31905 >>
MERCS[MERC13_C4_3].VDEF1 = << -124.31957, -2357.06665, 8.31929 >>
MERCS[MERC14_C4_3].VDEF1 = << -131.76596, -2354.90674, 8.31929 >>
MERCS[MERC16_C4_4].VDEF1 = << -95.58605, -2374.12793, 13.29636 >>
MERCS[MERC15_C4_3].VDEF1 = << -136.62875, -2377.87866, 8.31866 >>
MERCS[MERC17_C4_4].VDEF1 = << -145.02155, -2376.83936, 8.35225 >>
MERCS[MERC18_C4_4].VDEF1 = << -163.79602, -2376.07031, 8.31863 >>
//============================ DEF 2 ============================
MERCS[MERC1_START].VDEF2 = << -138.2723, -2377.7776, 8.7653 >>
MERCS[MERC2_START].VDEF2 = << -172.7036, -2377.9490, 8.8366 >>
MERCS[MERC3_C4_2].VDEF2 = << -120.05733, -2378.49194, 8.31872 >>
MERCS[MERC4_C4_2].VDEF2 = << -131.74411, -2376.39160, 8.31891 >>
MERCS[MERC5_C4_2].VDEF2 = << -127.97167, -2367.26147, 8.31891 >>
MERCS[MERC6_C4_2].VDEF2 = << -155.54379, -2379.40674, 8.31870 >>
MERCS[MERC8_C4_2].VDEF2 = << -188.35437, -2373.97168, 8.31869 >>
MERCS[MERC9_C4_3].VDEF2 = << -178.20407, -2377.00854, 8.31867 >>
MERCS[MERC10_C4_3].VDEF2 = << -172.43294, -2379.21973, 8.31863 >>
MERCS[MERC11_C4_3].VDEF2 = << -161.74001, -2376.78613, 8.31863 >>
MERCS[MERC12_C4_3].VDEF2 = << -163.63983, -2366.29907, 8.31889 >>
MERCS[MERC13_C4_3].VDEF2 = << -147.28908, -2366.81079, 8.31867>>
MERCS[MERC14_C4_3].VDEF2 = << -145.35626, -2377.01953, 8.31867 >>
MERCS[MERC16_C4_4].VDEF2 = << -163.80838, -2355.11157, 8.31889 >>
MERCS[MERC15_C4_3].VDEF2 = << -184.80934, -2356.76099, 8.31944 >>
MERCS[MERC17_C4_4].VDEF2 = << -187.86914, -2368.31104, 8.31891>>
MERCS[MERC18_C4_4].VDEF2 = << -181.34264, -2353.20605, 8.31944>>
//============================ DEF 3 ============================
MERCS[MERC1_START].VDEF3 = << -190.0471, -2374.7861, 9.0480 >>
MERCS[MERC2_START].VDEF3 = << -181.0299, -2373.9075, 9.0480 >>
MERCS[MERC3_C4_2].VDEF3 = << -172.33658, -2378.55493, 8.31889 >>
MERCS[MERC4_C4_2].VDEF3 = << -189.87204, -2378.41504, 8.31869 >>
MERCS[MERC5_C4_2].VDEF3 = << -184.40628, -2370.45020, 8.31891 >>
MERCS[MERC6_C4_2].VDEF3 = << -183.70442, -2374.45508, 8.31869 >>
MERCS[MERC8_C4_2].VDEF3 = << -188.05186, -2356.99048, 8.31944 >>
MERCS[MERC9_C4_3].VDEF3 = << -188.38849, -2366.64624, 8.31891 >>
MERCS[MERC10_C4_3].VDEF3 = << -180.21683, -2368.61401, 8.31891 >>
MERCS[MERC11_C4_3].VDEF3 = << -183.14825, -2363.66626, 8.31944 >>
MERCS[MERC12_C4_3].VDEF3 = << -194.14546, -2354.39600, 8.31857 >>
MERCS[MERC13_C4_3].VDEF3 = << -200.58470, -2378.65967, 8.31857 >>
MERCS[MERC14_C4_3].VDEF3 = << -184.26440, -2356.81226, 8.31946 >>
MERCS[MERC16_C4_4].VDEF3 = << -213.72719, -2379.04614, 8.31910 >>
MERCS[MERC15_C4_3].VDEF3 = << -208.06680, -2374.51123, 8.31857 >>
MERCS[MERC17_C4_4].VDEF3 = << -222.39253, -2377.68506, 12.33246 >>
MERCS[MERC18_C4_4].VDEF3 = << -241.69656, -2375.63159, 8.31935 >>
//============================ DEF 4 ============================
MERCS[MERC1_START].VDEF4 = << -215.7887, -2377.3557, 8.9309 >>
MERCS[MERC2_START].VDEF4 = << -236.1554, -2377.2727, 8.8063 >>
MERCS[MERC3_C4_2].VDEF4 = << -187.78954, -2378.71484, 8.31869 >>
MERCS[MERC4_C4_2].VDEF4 = << -192.89276, -2376.36646, 8.31857 >>
MERCS[MERC5_C4_2].VDEF4 = << -205.20845, -2378.42139, 8.31857 >>
MERCS[MERC6_C4_2].VDEF4 = << -213.65590, -2378.89600, 8.31910 >>
MERCS[MERC8_C4_2].VDEF4 = << -216.02234, -2375.47559, 8.31910 >>
MERCS[MERC9_C4_3].VDEF4 = << -230.85701, -2375.86450, 8.31935 >>
MERCS[MERC10_C4_3].VDEF4 = << -221.32365, -2378.48877, 8.31910 >>
MERCS[MERC11_C4_3].VDEF4 = << -233.44698, -2376.79468, 8.31911 >>
MERCS[MERC12_C4_3].VDEF4 = << -210.47473, -2367.42480, 8.31889 >>
MERCS[MERC13_C4_3].VDEF4 = << -207.19572, -2353.86768, 8.31878 >>
MERCS[MERC14_C4_3].VDEF4 = << -211.17357, -2355.48755, 8.31854 >>
MERCS[MERC16_C4_4].VDEF4 = << -213.02431, -2388.07349, 5.00116 >>
MERCS[MERC15_C4_3].VDEF4 = << -247.65251, -2374.14819, 8.31935 >>
MERCS[MERC17_C4_4].VDEF4 = << -216.42989, -2393.81543, 5.02178 >>
MERCS[MERC18_C4_4].VDEF4 = << -241.69656, -2375.63159, 8.31935 >>
//CAR
MERCS[MERC23_CAR2].VDEF4 = <<-215.1942, -2393.8730, 5.0012>>
MERCS[MERC24_CAR2].VDEF4 = <<-211.1478, -2399.8049, 5.0012>>
MERCS[MERC25_CAR2].VDEF4 = <<-216.2771, -2393.3704, 5.0012>>
MERCS[MERC26_CAR2].VDEF4 = <<-216.6585, -2402.0989, 5.0012>>
MERCS[MERC23_CAR2].VDEF3 = <<-213.7170, -2397.4321, 5.0012>>
MERCS[MERC24_CAR2].VDEF3 = <<-202.8748, -2411.4336, 5.0012>>
MERCS[MERC25_CAR2].VDEF3 = <<-215.9651, -2400.3318, 5.0012>>
MERCS[MERC26_CAR2].VDEF3 = <<-205.8522, -2412.7998, 5.0012>>
MERCS[MERC23_CAR2].VDEF2 = <<-202.8748, -2411.4336, 5.0012>>
MERCS[MERC24_CAR2].VDEF2 = <<-199.6583, -2426.8000, 5.0012>>
MERCS[MERC25_CAR2].VDEF2 = <<-205.8522, -2412.7998, 5.0012>>
MERCS[MERC26_CAR2].VDEF2 = <<-206.0718, -2429.2795, 5.0004>>
MERCS[MERC23_CAR2].VDEF1 = <<-199.6583, -2426.8000, 5.0012>>
MERCS[MERC24_CAR2].VDEF1 = <<-175.3211, -2452.2039, 5.0130>>
MERCS[MERC25_CAR2].VDEF1 = <<-206.0718, -2429.2795, 5.0004>>
MERCS[MERC26_CAR2].VDEF1 = <<-178.0965, -2454.5967, 5.0133>>
MERCS[MERC23_CAR2].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(15000, 16000)
MERCS[MERC24_CAR2].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(5000, 6000)
MERCS[MERC25_CAR2].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(15000, 16000)
MERCS[MERC26_CAR2].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(5000, 6000)
MERCS[MERC23_CAR2].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[MERC24_CAR2].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[MERC25_CAR2].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[MERC26_CAR2].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc19_car1].VDEF4 = <<-201.4169, -2400.3948, 5.0012>>
MERCS[merc20_car1].VDEF4 = <<-211.1253, -2389.9844, 5.0012>>
MERCS[merc21_car1].VDEF4 = <<-197.0782, -2397.9023, 5.0013>>
MERCS[merc22_car1].VDEF4 = <<-209.4439, -2388.5757, 5.0012>>
MERCS[merc19_car1].VDEF3 = <<-193.7419, -2422.9417, 5.0007>>
MERCS[merc20_car1].VDEF3 = <<-202.1372, -2396.9736, 5.0012>>
MERCS[merc21_car1].VDEF3 = <<-184.7490, -2422.0982, 5.0013>>
MERCS[merc22_car1].VDEF3 = <<-198.5648, -2396.6946, 5.0013>>
MERCS[merc19_car1].VDEF2 = <<-182.8242, -2430.2419, 5.0013>>
MERCS[merc20_car1].VDEF2 = <<-193.7419, -2422.9417, 5.0007>>
MERCS[merc21_car1].VDEF2 = <<-178.9606, -2429.8459, 5.0013>>
MERCS[merc22_car1].VDEF2 = <<-184.7490, -2422.0982, 5.0013>>
MERCS[merc19_car1].VDEF1 = <<-169.6456, -2449.3494, 5.0139>>
MERCS[merc20_car1].VDEF1 = <<-182.8242, -2430.2419, 5.0013>>
MERCS[merc21_car1].VDEF1 = <<-172.6127, -2450.1057, 5.0129>>
MERCS[merc22_car1].VDEF1 = <<-178.9606, -2429.8459, 5.0013>>
MERCS[merc19_car1].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(10000, 11000)
MERCS[merc20_car1].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc21_car1].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(10000, 11000)
MERCS[merc22_car1].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc19_car1].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc20_car1].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc21_car1].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc22_car1].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc27_cars].vdef4 = << -212.01079, -2386.45850, 5.00033 >>
MERCS[merc28_cars].vdef4 = << -217.41843, -2391.90576, 5.00033 >>
MERCS[merc27_cars].vdef3 = << -212.01079, -2386.45850, 5.00033 >>
MERCS[merc28_cars].vdef3 = << -217.41843, -2391.90576, 5.00033 >>
MERCS[merc27_cars].vdef2 = <<-213.7170, -2397.4321, 5.0012>>
MERCS[merc28_cars].vdef2 = <<-215.9651, -2400.3318, 5.0012>>
MERCS[merc27_cars].vdef1 = <<-202.8748, -2411.4336, 5.0012>>
MERCS[merc28_cars].vdef1 = <<-205.8522, -2412.7998, 5.0012>>
MERCS[merc27_cars].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(25000, 26000)
MERCS[merc28_cars].iAdvanceTime1 = GET_RANDOM_INT_IN_RANGE(25000, 26000)
MERCS[merc27_cars].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc28_cars].iAdvanceTime2 = GET_RANDOM_INT_IN_RANGE(20000, 21000)
MERCS[merc29_heli].startloc = <<-76.5442, -2581.7407, 5.0052>>
MERCS[merc29_heli].HEAD = 267.4709
//BOMBS
C4[C4_0_FRONT_OF_SHIP].EXPPOS = << -83.8000, -2365.8125, 14.5418 >>
C4[C4_1_FIRST_MAST].EXPPOS = << -128.1432, -2366.0024, 8.3193 >>
C4[C4_2_SECOND_MAST].EXPPOS = << -187.9897, -2365.4224, 8.3193 >>
C4[C4_3_INSIDE].EXPPOS = << -221.3571, -2375.6523, 12.3325 >>
//DOCK WORKERS
PEDS[MPF_DOCK1].STARTLOC = <<-262.60956, -2401.81250, 5.00131>> PEDS[MPF_DOCK1].HEAD = 0
PEDS[MPF_DOCK1].VCOV = <<-178.86514, -2511.78882, 5.14006>>
PEDS[MPF_DOCK2].STARTLOC = << -60.73100, -2407.58716, 5.00087 >> PEDS[MPF_DOCK2].HEAD = 0
PEDS[MPF_DOCK2].VCOV = <<-156.21315, -2516.67041, 5.00866>>
// bCarCombatStarted = FALSE
ENDPROC
PROC SETUPMERCPATROL()
//@RJP heavily changing patrol routes
//CONTAINERS BALCONY
OPEN_PATROL_ROUTE("MISS_PATROL_6")
ADD_PATROL_ROUTE_NODE(1, "WORLD_HUMAN_GUARD_STAND", <<-145.5457, -2378.8364, 10.9717>>, <<-145.5457, -2378.8364, 10.9717>>, 3000)
ADD_PATROL_ROUTE_NODE(2, "WORLD_HUMAN_GUARD_STAND", <<-145.5312, -2353.4207, 10.9717>>, <<-145.5312, -2353.4207, 10.9717>>, 3000)
ADD_PATROL_ROUTE_LINK(1, 2)
ADD_PATROL_ROUTE_LINK(2, 1)
CLOSE_PATROL_ROUTE()
CREATE_PATROL_ROUTE()
//THIRD BOMB BALCONY
OPEN_PATROL_ROUTE("MISS_PATROL_7")
ADD_PATROL_ROUTE_NODE(1, "WORLD_HUMAN_GUARD_STAND", <<-193.5774, -2353.0503, 10.9719>>, <<-193.5774, -2353.0503, 10.9719>>, 3000)
ADD_PATROL_ROUTE_NODE(2, "WORLD_HUMAN_GUARD_STAND", <<-193.4915, -2378.8650, 10.9719>>, <<-193.4915, -2378.8650, 10.9719>>, 3000)
ADD_PATROL_ROUTE_LINK(1, 2)
ADD_PATROL_ROUTE_LINK(2, 1)
CLOSE_PATROL_ROUTE()
CREATE_PATROL_ROUTE()
//PATROL TOP CABIN BALCONY
OPEN_PATROL_ROUTE("MISS_PATROL_8")
ADD_PATROL_ROUTE_NODE(1, "WORLD_HUMAN_GUARD_STAND", <<-212.1342, -2377.4421, 16.3326>>, <<-212.1342, -2377.4421, 16.3326>>, 3000)
ADD_PATROL_ROUTE_NODE(2, "WORLD_HUMAN_GUARD_STAND", <<-211.9285, -2355.0430, 16.3321>>, <<-211.9285, -2355.0430, 16.3321>>, 3000)
ADD_PATROL_ROUTE_LINK(1, 2)
ADD_PATROL_ROUTE_LINK(2, 1)
CLOSE_PATROL_ROUTE()
CREATE_PATROL_ROUTE()
//PATROL STERN OF SHIP
OPEN_PATROL_ROUTE("MISS_PATROL_9")
ADD_PATROL_ROUTE_NODE(1, "WORLD_HUMAN_GUARD_STAND",MERCS[MERC18_C4_4].STARTLOC,MERCS[MERC18_C4_4].STARTLOC,2000)
ADD_PATROL_ROUTE_NODE(2, "WORLD_HUMAN_GUARD_STAND",<< -250.2186, -2377.0210, 8.5309 >>,<< -250.2186, -2377.0210, 8.5309 >> ,2000)
ADD_PATROL_ROUTE_LINK(1, 2)
ADD_PATROL_ROUTE_LINK(2, 1)
CLOSE_PATROL_ROUTE()
CREATE_PATROL_ROUTE()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// MISSION STAGE MANAGEMENT
// -----------------------------------------------------------------------------------------------------------
proc mission_stage_management()
switch stageswitch
case stageswitch_requested
println("[stagemanagement] mission_stage switch requested from mission_stage:", mission_stage, "to mission_stage", requestedstage)
stageswitch = stageswitch_exiting
mission_substage = stage_exit
break
case stageswitch_exiting
println("[stagemanagement] exiting mission_stage: ", mission_stage)
stageswitch = stageswitch_entering
mission_substage = stage_entry
mission_stage = requestedstage
break
case stageswitch_entering
println("[stagemanagement] entered mission_stage: ", mission_stage)
requestedstage = -1
stageswitch = stageswitch_idle
break
case stageswitch_idle
if (get_game_timer() - istagetimer) > 2500
println("[stagemanagement] mission_stage: ", mission_stage, " mission_substage: ", mission_substage)
istagetimer = get_game_timer()
endif
break
endswitch
endproc
func bool mission_set_stage(msf_mission_stage_flags newstage)
if stageswitch = stageswitch_idle
requestedstage = enum_to_int(newstage)
stageswitch = stageswitch_requested
return true
else
return false
endif
endfunc
// -----------------------------------------------------------------------------------------------------------
// HOT SWAP
// -----------------------------------------------------------------------------------------------------------
PROC HOTSWAP_MENU(BOOL BBLOCKMIKE = FALSE, BOOL BBLOCKFRANK = FALSE, BOOL BBLOCKTREV = FALSE,
BOOL BHINTMIKE = FALSE, BOOL BHINTFRANK = FALSE, BOOL BHINTTREV = FALSE)
//ENABLE OR DISABLE SELECABILTY IN THE HOT SWAP
IF ISENTITYALIVE(PEDS[MPF_FRANK].ID)
SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN] = PEDS[MPF_FRANK].ID
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_FRANKLIN,BBLOCKFRANK)
SET_SELECTOR_PED_HINT(SSELECTORPEDS,SELECTOR_PED_FRANKLIN,BHINTFRANK)
ELSE
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_FRANKLIN,TRUE)
ENDIF
IF ISENTITYALIVE(PEDS[MPF_TREV].ID)
SSELECTORPEDS.PEDID[SELECTOR_PED_TREVOR] = PEDS[MPF_TREV].ID
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_TREVOR,BBLOCKTREV)
SET_SELECTOR_PED_HINT(SSELECTORPEDS,SELECTOR_PED_TREVOR,BHINTTREV)
ELSE
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_TREVOR,TRUE)
ENDIF
IF ISENTITYALIVE(PEDS[MPF_MIKE].ID)
SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL] = PEDS[MPF_MIKE].ID
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_MICHAEL,BBLOCKMIKE)
SET_SELECTOR_PED_HINT(SSELECTORPEDS,SELECTOR_PED_MICHAEL,BHINTMIKE)
ELSE
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_MICHAEL,TRUE)
ENDIF
ENDPROC
FUNC BOOL DISPLAY_SELECTOR_HUD()
IF UPDATE_SELECTOR_HUD(SSELECTORPEDS, FALSE) // RETURNS TRUE WHEN THE PLAYER HAS MADE A SELECTION
IF NOT HAS_SELECTOR_PED_BEEN_SELECTED(SSELECTORPEDS, SELECTOR_PED_MULTIPLAYER)
SCAMDETAILS.PEDTO = SSELECTORPEDS.PEDID[SSELECTORPEDS.ENEWSELECTORPED]
// SCAMDETAILS.BRUN = TRUE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: CARRIES OUT A SWAP USING THE SCAMDETAIL STRUCT FOR CAM INTERPOLATION
FUNC SWITCHSTATE DO_HOTSWAP(SELECTOR_CAM_INTERP_TYPE SINTERP = SELECTOR_CAM_DEFAULT)
IF NOT SCAMDETAILS.BRUN
RETURN SWITCH_NOSTATE
ELIF mission_stage = ENUM_TO_INT( msf_5_fourth_bomb )
AND mission_substage > 2
IF RUN_CAM_SPLINE_FROM_PLAYER_TO_PED(SCAMDETAILS,0,0,SINTERP,IINTERPBACKTOGAMEOVERRIDE,IINTERPTOSWITCHCAM)
RETURN SWITCH_IN_PROGRESS
ELSE
SCAMDETAILS.BRUN = FALSE
RETURN SWITCH_COMPLETE
ENDIF
//@RJP short code switch if swapping between Michael and Franklin when Michael is on the ship
// ELIF mission_stage > ENUM_TO_INT( msf_0_drive_to_bridge )
// AND mission_stage < ENUM_TO_INT( msf_6_way_out )
//@RJP if swapping from franklin, give a bit of time to get out of aiming before doing the short code switch
// IF PLAYER_PED_ID() = frank_ped()
// IF iFranklinCamSwapTimer > -1
// IF GET_GAME_TIMER() > iFranklinCamSwapTimer
// IF DOES_CAM_EXIST(sCamDetails.camTo)
// if RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM( sCamDetails, sCamDetails.camTo, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SET_PLAYER_CONTROL( PLAYER_ID(), TRUE )
// iFranklinCamSwapTimer = -1
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ELSE
// IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED( sCamDetails, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SET_PLAYER_CONTROL( PLAYER_ID(), TRUE )
// iFranklinCamSwapTimer = -1
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ENDIF
// ENDIF
// ELSE
// iFranklinCamSwapTimer = (GET_GAME_TIMER() + 350)
// SET_PLAYER_CONTROL( PLAYER_ID(), FALSE )
//// SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), FALSE)
// SET_PLAYER_FORCED_AIM(PLAYER_ID(), FALSE)
// ENDIF
// ELIF DOES_CAM_EXIST(sCamDetails.camTo)
// if RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM( sCamDetails, sCamDetails.camTo, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ELSE
// IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED( sCamDetails, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ENDIF
// //@RJP otherwise auto code switch
ELSE
IF DOES_CAM_EXIST(sCamDetails.camTo)
if RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM( sCamDetails, sCamDetails.camTo, SWITCH_TYPE_AUTO )
RETURN SWITCH_IN_PROGRESS
ELSE
SCAMDETAILS.BRUN = FALSE
RETURN SWITCH_COMPLETE
ENDIF
ELSE
IF mission_stage = ENUM_TO_INT(msf_9_the_goods)
IF DOES_CAM_EXIST(cameraIndex)
RENDER_SCRIPT_CAMS(FALSE,FALSE)
IF IS_CAM_RENDERING(cameraIndex)
SET_CAM_ACTIVE(cameraIndex,false)
ENDIF
DESTROY_CAM(cameraIndex)
ENDIF
ENDIF
IF MISSION_STAGE > ENUM_TO_INT(msf_1_snipe_gaurds)
AND MISSION_STAGE < ENUM_TO_INT(msf_6_way_out)
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED( sCamDetails, SWITCH_TYPE_SHORT )
RETURN SWITCH_IN_PROGRESS
ELSE
SCAMDETAILS.BRUN = FALSE
RETURN SWITCH_COMPLETE
ENDIF
ELSE
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED( sCamDetails, SWITCH_TYPE_AUTO )
RETURN SWITCH_IN_PROGRESS
ELSE
SCAMDETAILS.BRUN = FALSE
RETURN SWITCH_COMPLETE
ENDIF
ENDIF
ENDIF
// IF MISSION_STAGE = ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
// or (MISSION_STAGE = ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
// and mission_substage >= 13)
// IF RUN_CAM_SPLINE_FROM_PLAYER_TO_CAM(SCAMDETAILS,400,400) // RETURNS FALSE WHEN THE CAMERA SPLINE IS COMPLETE
//// IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM( SCAMDETAILS, sCamDetails.camTo, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ELSE
// IF RUN_CAM_SPLINE_FROM_PLAYER_TO_PED(SCAMDETAILS,0,0,SINTERP,IINTERPBACKTOGAMEOVERRIDE,IINTERPTOSWITCHCAM) // RETURNS FALSE WHEN THE CAMERA SPLINE IS COMPLETE
//// IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED( SCAMDETAILS, SWITCH_TYPE_AUTO )
// RETURN SWITCH_IN_PROGRESS
// ELSE
// SCAMDETAILS.BRUN = FALSE
// RETURN SWITCH_COMPLETE
// ENDIF
// ENDIF
ENDIF
RETURN SWITCH_NOSTATE
ENDFUNC
FUNC BOOL HOTSWAP_CAM(SELECTOR_SLOTS_ENUM TARGETPED, BOOL BISCUTSCENE = FALSE,INT INTERP_TIME = 4000)
FLOAT DISTANCE_BETWEEN_PEDS
IF NOT SCAMDETAILS.BSPLINECREATED
IF ISENTITYALIVE(SSELECTORPEDS.PEDID[TARGETPED])
DISTANCE_BETWEEN_PEDS = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(SSELECTORPEDS.PEDID[TARGETPED]))
IF DISTANCE_BETWEEN_PEDS < 8.0
and not IS_PED_IN_ANY_VEHICLE(SSELECTORPEDS.PEDID[TARGETPED])
INTERP_TIME = 2000
ENDIF
IF NOT DOES_CAM_EXIST(SCAMDETAILS.CAMID)
SCAMDETAILS.CAMID = CREATE_CAM("DEFAULT_SPLINE_CAMERA", FALSE)
ENDIF
//-----------------------------------------START NODE---------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------
IF BISCUTSCENE
IF DOES_CAM_EXIST(CAMERAINDEX)
SET_CAM_FOV(SCAMDETAILS.CAMID,GET_CAM_FOV(CAMERAINDEX))
// ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_CAM_COORD(CAMERAINDEX), GET_CAM_ROT(CAMERAINDEX),0)
ADD_CAM_SPLINE_NODE_USING_CAMERA_FRAME(SCAMDETAILS.CAMID,CAMERAINDEX,0,CAM_SPLINE_NODE_SMOOTH_ROT)
ENDIF
IINTERPTOSWITCHCAM = 0
ELSE
SET_CAM_FOV(SCAMDETAILS.CAMID, 45)
IF SSELECTORPEDS.PEDID[TARGETPED] = FRANK_PED()
POINT_CAM_AT_ENTITY(SCAMDETAILS.CAMID,MIKE_PED(),<<0,0,0>>)
IINTERPTOSWITCHCAM = 3000
ELSE
POINT_CAM_AT_ENTITY(SCAMDETAILS.CAMID,SSELECTORPEDS.PEDID[TARGETPED],<<0,0,0>>)
IINTERPTOSWITCHCAM = 2000
ENDIF
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_GAMEPLAY_CAM_COORD(), GET_GAMEPLAY_CAM_ROT(), 0)
ENDIF
//------------------------------------------------------------------------------------------------------------------------
//------------------------------------------------------------------------------------------------------------------------
IF IS_PED_IN_ANY_VEHICLE(SSELECTORPEDS.PEDID[TARGETPED],TRUE)
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(SCAMDETAILS.PEDTO), GET_OFFSET_FOR_DEST_CAM(SCAMDETAILS.PEDTO)),GET_ENTITY_ROTATION(SSELECTORPEDS.PEDID[TARGETPED]),5000)
ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME(SCAMDETAILS.CAMID,1000,CAM_SPLINE_NODE_SMOOTH_ROT)
ELSE
VECTOR ENTITYROT = GET_ENTITY_ROTATION(SSELECTORPEDS.PEDID[TARGETPED])
VECTOR VOFFSETCAM
IF SSELECTORPEDS.PEDID[TARGETPED] = FRANK_PED()
VOFFSETCAM = <<0.2,-2,0.8>> //GET_OFFSET_FOR_DEST_CAM(SSELECTORPEDS.PEDID[TARGETPED]) + <<0.1,0,0.5>>
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SSELECTORPEDS.PEDID[TARGETPED],<<0.5,-0.45,0.6>> ) ,ENTITYROT, 5000)
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SSELECTORPEDS.PEDID[TARGETPED],<<0.3,-0.2,0.6>> ) ,ENTITYROT, 5000)
ELIF SSELECTORPEDS.PEDID[TARGETPED] = MIKE_PED()
IF IS_PED_IN_COVER(SSELECTORPEDS.PEDID[TARGETPED])
VOFFSETCAM = <<0,2,1.5>>
ELSE
VOFFSETCAM = GET_OFFSET_FOR_DEST_CAM(SSELECTORPEDS.PEDID[TARGETPED]) + <<0,1,1.5>>
ENDIF
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SSELECTORPEDS.PEDID[TARGETPED],VOFFSETCAM) ,ENTITYROT, 5000)
ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME(SCAMDETAILS.CAMID,1000)
ELIF SSELECTORPEDS.PEDID[TARGETPED] = TREV_PED()
VOFFSETCAM = GET_OFFSET_FOR_DEST_CAM(SSELECTORPEDS.PEDID[TARGETPED])
ADD_CAM_SPLINE_NODE(SCAMDETAILS.CAMID, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SSELECTORPEDS.PEDID[TARGETPED],VOFFSETCAM) ,ENTITYROT, 5000)
ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME(SCAMDETAILS.CAMID,1000)
ENDIF
ENDIF
SET_CAM_SPLINE_SMOOTHING_STYLE(SCAMDETAILS.CAMID,CAM_SPLINE_SLOW_OUT_SMOOTH)
SET_CAM_SPLINE_DURATION(SCAMDETAILS.CAMID, INTERP_TIME)
SCAMDETAILS.BSPLINECREATED = TRUE
SCAMDETAILS.PEDTO = SSELECTORPEDS.PEDID[TARGETPED]
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL SET_CURRENT_PLAYER_PED(SELECTOR_SLOTS_ENUM PEDCHAR, BOOL BWAIT = FALSE, BOOL BCLEANUPMODEL = TRUE)
IF BWAIT
WHILE NOT SET_CURRENT_SELECTOR_PED(PEDCHAR, BCLEANUPMODEL)
WAIT(0)
ENDWHILE
ELSE
IF NOT SET_CURRENT_SELECTOR_PED(PEDCHAR, BCLEANUPMODEL)
RETURN FALSE
ENDIF
ENDIF
// ADDITIONAL STUFF TO SET UP PED FOR USE IN MISSION
SWITCH PEDCHAR
CASE SELECTOR_PED_MICHAEL
PEDS[MPF_MIKE].ID = PLAYER_PED_ID()
BREAK
CASE SELECTOR_PED_FRANKLIN
PEDS[MPF_FRANK].ID = PLAYER_PED_ID()
BREAK
CASE SELECTOR_PED_TREVOR
PEDS[MPF_TREV].ID = PLAYER_PED_ID()
BREAK
ENDSWITCH
RETURN TRUE
ENDFUNC
// PURPOSE: RUN EVERYFRAME FOR HOTSWAPPING OPTION.
PROC MANAGE_HOTSWAP()
//HOT SWAP CHECKS-------------------------------------------------
SWITCHSTATE HSSTATUS
IF BHOTSWAP
IF PLAYER_PED_ID() = MIKE_PED()
// SET_SELECTOR_PED_HINT(SSELECTORPEDS,SELECTOR_PED_FRANKLIN,TRUE)
SET_SELECTOR_PED_PRIORITY(SSELECTORPEDS,SELECTOR_PED_FRANKLIN,SELECTOR_PED_MICHAEL,SELECTOR_PED_TREVOR)
ELIF PLAYER_PED_ID() = FRANK_PED()
// SET_SELECTOR_PED_HINT(SSELECTORPEDS,SELECTOR_PED_MICHAEL,TRUE)
SET_SELECTOR_PED_PRIORITY(SSELECTORPEDS,SELECTOR_PED_MICHAEL,SELECTOR_PED_FRANKLIN,SELECTOR_PED_TREVOR)
ENDIF
IF BFORCED = FALSE
IF NOT SCAMDETAILS.BRUN
IF DISPLAY_SELECTOR_HUD()
INFORM_MISSION_STATS_OF_INCREMENT(DH2A_SWITCHES)
//====================================================== UI NEW PED CHOSEN ============================================================
IF IS_MESSAGE_BEING_DISPLAYED()
CLEAR_PRINTS()
ENDIF
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
//========================================= DINGHY SWITCH ==============================================
IF MISSION_STAGE > ENUM_TO_INT(msf_0_drive_to_bridge)
AND MISSION_STAGE < ENUM_TO_INT(msf_6_way_out)
IF SSELECTORPEDS.ENEWSELECTORPED = SELECTOR_PED_FRANKLIN
IF isentityalive( frank_ped() )
SET_FOCUS_ENTITY( frank_ped() )
CLEAR_PED_TASKS( frank_ped() )
ENDIF
ENDIF
ENDIF
//========================================= BOMB STAGES ===============================================
//SWITCH AUDIO SCENE
IF MISSION_STAGE >= ENUM_TO_INT(MSF_2_FIRST_BOMB)
AND MISSION_STAGE <= ENUM_TO_INT(MSF_4_THIRD_BOMB)
IF SSELECTORPEDS.ENEWSELECTORPED = SELECTOR_PED_MICHAEL
int merc
for merc = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if DOES_BLIP_EXIST(mercs[merc].blip)
remove_blip(mercs[merc].blip)
endif
endfor
IF NOT BALARMTRIGGERED
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPING_SCENE")
STOP_AUDIO_SCENE("DH2A_SNIPING_SCENE")
ENDIF
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ELSE
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SHOOTOUT_SNIPING_SCENE")
STOP_AUDIO_SCENE("DH2A_SHOOTOUT_SNIPING_SCENE")
ENDIF
START_AUDIO_SCENE("DH2A_SHOOTOUT_SCENE")
ENDIF
ELIF SSELECTORPEDS.ENEWSELECTORPED = SELECTOR_PED_FRANKLIN
IF NOT BALARMTRIGGERED
IF IS_AUDIO_SCENE_ACTIVE("DH2A_PLANT_BOMBS_SCENE")
STOP_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ENDIF
START_AUDIO_SCENE("DH2A_SNIPING_SCENE")
ELSE
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SHOOTOUT_SCENE")
STOP_AUDIO_SCENE("DH2A_SHOOTOUT_SCENE")
ENDIF
START_AUDIO_SCENE("DH2A_SHOOTOUT_SNIPING_SCENE")
ENDIF
ENDIF
ENDIF
//================================================= READY TO RUN CAM =======================================================
SCAMDETAILS.BRUN = TRUE
ENDIF
ENDIF
endif
//====================================================== START SWITCH ============================================================
HSSTATUS = DO_HOTSWAP(SELECTOR_CAM_SHORT_SPLINE)
//====================================================== RUNNING ============================================================
IF HSSTATUS = SWITCH_IN_PROGRESS
IF SCAMDETAILS.BOKTOSWITCHPED
IF NOT SCAMDETAILS.BPEDSWITCHED
IF TAKE_CONTROL_OF_SELECTOR_PED(SSELECTORPEDS, TRUE, TRUE)
//======================================= SWITCHED =============================================
SCAMDETAILS.BPEDSWITCHED = TRUE
IF ISENTITYALIVE(PEDS[MPF_FRANK].ID)
IF SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN] = NULL
PEDS[MPF_FRANK].ID = PLAYER_PED_ID()
ELSE
PEDS[MPF_FRANK].ID = SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN]
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PEDS[MPF_FRANK].ID, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(PEDS[MPF_FRANK].ID,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(frank_ped(),rel_group_buddy)
ENDIF
ENDIF
IF ISENTITYALIVE(PEDS[MPF_TREV].ID)
IF SSELECTORPEDS.PEDID[SELECTOR_PED_TREVOR] = NULL
PEDS[MPF_TREV].ID = PLAYER_PED_ID()
ELSE
PEDS[MPF_TREV].ID = SSELECTORPEDS.PEDID[SELECTOR_PED_TREVOR]
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PEDS[MPF_TREV].ID, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(PEDS[MPF_TREV].ID,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(trev_ped(),rel_group_buddy)
ENDIF
ENDIF
IF ISENTITYALIVE(PEDS[MPF_MIKE].ID)
IF SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL] = NULL
PEDS[MPF_MIKE].ID = PLAYER_PED_ID()
IF MISSION_STAGE = ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
TRIGGER_MUSIC_EVENT("DH2A_1ST_SWITCH")
ENDIF
IF MISSION_STAGE = ENUM_TO_INT(msf_0_drive_to_bridge)
TRIGGER_MUSIC_EVENT("DH2A_RIB")
endif
ELSE
PEDS[MPF_MIKE].ID = SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL]
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PEDS[MPF_MIKE].ID, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(PEDS[MPF_MIKE].ID,TRUE)
SET_PED_RELATIONSHIP_GROUP_HASH(mike_ped(),rel_group_buddy)
ENDIF
ENDIF
ENDIF
ELSE
IF SCAMDETAILS.PEDTO = FRANK_PED()
and MISSION_STAGE >= ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
// SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), TRUE)
// SET_PLAYER_FORCED_AIM(PLAYER_ID(), TRUE)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(MIKE_PED()))
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(MIKE_PED()))
// SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
//@RJP removing giving Mike a ton of health
IF GET_ENTITY_HEALTH(MIKE_PED()) < 200
SET_ENTITY_HEALTH(MIKE_PED(),200)
ENDIF
ELIF SCAMDETAILS.PEDTO = MIKE_PED()
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
// SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), FALSE)
SET_PLAYER_FORCED_AIM(PLAYER_ID(), FALSE)
IF NOT bFilledSpecialMeter
bFilledSpecialMeter = TRUE
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
// SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(SCAMDETAILS.PEDTO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_LOOK_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_LOOK_LR)
// SET_CAM_AFFECTS_AIMING(SCAMDETAILS.CAMID,FALSE)
IF MISSION_STAGE = ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
AND SSELECTORPEDS.ENEWSELECTORPED = SELECTOR_PED_MICHAEL
POINT_GAMEPLAY_CAM_AT_COORD(90)
ENDIF
IF ISENTITYALIVE(VEHS[MVF_SUB].ID)
FREEZE_ENTITY_POSITION(VEHS[MVF_SUB].ID,FALSE)
ENDIF
IF IS_MESSAGE_BEING_DISPLAYED()
CLEAR_PRINTS()
ENDIF
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
if mission_stage = enum_to_int(msf_0_drive_to_bridge)
if mission_substage < 14
IF GET_SCRIPT_TASK_STATUS(mike_ped(),SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD) != PERFORMING_TASK
SET_VEHICLE_FORWARD_SPEED(vehs[mvf_sub].id,20)
SET_VEHICLE_ENGINE_ON(vehs[mvf_sub].id,true,true)
TASK_VEHICLE_DRIVE_TO_COORD(mike_ped(),vehs[mvf_dinghy].id,<<-457.7198, -2333.4165, 0.70821>>,15,DRIVINGSTYLE_ACCURATE,dinghy,DRIVINGMODE_PLOUGHTHROUGH,5,-1)
ENDIF
if get_game_timer() - iFlyOverMusicTrigger > 4000
and not bCamPan_Cued
TRIGGER_MUSIC_EVENT("DH2A_RIB")
bCamPan_Cued = true
endif
endif
//@RJP removing this task, if Franklin is aiming when switching then we would immediately go into the sniper cam during the switch
else
IF ISENTITYALIVE(FRANK_PED())
and isentityalive(mike_ped())
IF mission_stage = enum_to_int(msf_5_fourth_bomb)
AND mission_substage > 2
CLEAR_PED_TASKS( FRANK_PED() )
ELSE
IF GET_SCRIPT_TASK_STATUS(FRANK_PED(),SCRIPT_TASK_AIM_GUN_AT_ENTITY) != PERFORMING_TASK
TASK_AIM_GUN_AT_ENTITY(FRANK_PED(),MIKE_PED(),-1,TRUE)
ENDIF
ENDIF
ENDIF
endif
ENDIF
//====================================================== DONE ============================================================
IF HSSTATUS = SWITCH_COMPLETE
AND NOT SCAMDETAILS.BRUN
//================================= MIKE ====================================
IF PLAYER_PED_ID() = MIKE_PED()
IF MISSION_STAGE < ENUM_TO_INT(MSF_7_DETONATE)
and mission_stage > enum_to_int(msf_1_snipe_gaurds)
WEAPON_TYPE currentWeapon
SET_ENTITY_COORDS(FRANK_PED(),<< -143.8203, -2488.2612, 43.4412 >>)
IF NOT balarmtriggered
IF has_ped_got_weapon( MIKE_PED(), wtcombatpistol )
IF GET_CURRENT_PED_WEAPON( MIKE_PED(), currentWeapon )
IF currentWeapon != wtcombatpistol
set_current_ped_weapon( MIKE_PED(), wtcombatpistol, TRUE )
ENDIF
ENDIF
ENDIF
ENDIF
endif
ELSE
//============================ FRANK AND TREV =================================
//============ FRANK =============
IF PLAYER_PED_ID() = FRANK_PED()
IF ISENTITYALIVE(MIKE_PED())
if MISSION_STAGE >= ENUM_TO_INT(MSF_1_SNIPE_GAURDS)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(MIKE_PED()))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(MIKE_PED()))
else
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(mercs[merc1_start].id))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(mercs[merc1_start].id))
endif
SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), TRUE)
SET_PLAYER_FORCED_AIM(PLAYER_ID(), TRUE)
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
FORCE_PED_AI_AND_ANIMATION_UPDATE( PLAYER_PED_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
DISPLAY_SNIPER_SCOPE_THIS_FRAME()
BFIRSTAIM = TRUE
ENDIF
ENDIF
//============ TREVOR =============
IF PLAYER_PED_ID() = TREV_PED()
IF ISENTITYALIVE(VEHS[MVF_SUB].ID)
FREEZE_ENTITY_POSITION(VEHS[MVF_SUB].ID,FALSE)
SET_VEHICLE_FORWARD_SPEED(vehs[mvf_sub].id,20)
SET_VEHICLE_ENGINE_ON(vehs[mvf_sub].id,true,true)
ENDIF
ENDIF
//============ BOTH =============
IMIKE_AI_STAGE = 0
ISTEALTHKILL = 0
ENDIF
//================================= STAGE SPECIFC ====================================
//================================= ALWAYS ====================================
IF BFORCED
BFORCED = FALSE
ENDIF
IF NOT IS_PED_IN_COVER(PLAYER_PED_ID())
AND NOT IS_PED_PLANTING_BOMB(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
SET_TIME_SCALE(1)
CLEAR_FOCUS()
CLEANUP_SELECTOR_CAM(SCAMDETAILS)
ENDIF
ENDIF
//----------------------------------------------------------------
ENDPROC
PROC DO_FORCED_HOTSWAP(SELECTOR_SLOTS_ENUM TARGETPED)
BFORCED = TRUE
IF MAKE_SELECTOR_PED_SELECTION(SSELECTORPEDS,TARGETPED)
SCAMDETAILS.PEDTO = SSELECTORPEDS.PEDID[TARGETPED]
SCAMDETAILS.BRUN = TRUE
// HOTSWAP_CAM(TARGETPED,BINCUTSCENE)
ENDIF
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Helpers
// -----------------------------------------------------------------------------------------------------------
proc give_mission_weapons(BOOL bDoFrank = TRUE)
if not bGotWeapons
int targetammo
int newammo
//weapons
if isentityalive(mike_ped())
REMOVE_ALL_PED_WEAPONS(mike_ped())
//bomb stuff
give_weapon_to_ped(mike_ped(),wtbomb,0)
CPRINTLN( DEBUG_MISSION, "GAVE BOMBS TO MICHAEL" )
targetammo = 10
newammo = targetammo - get_ammo_in_ped_weapon(mike_ped(),wtbomb)
if newammo > 0
add_ammo_to_ped(mike_ped(),wtbomb,newammo)
endif
if not has_ped_got_weapon(mike_ped(),weapontype_knife)
give_weapon_to_ped(mike_ped(),weapontype_knife,infinite_ammo,true,true)
endif
//pistol stuff
give_weapon_to_ped(mike_ped(),wtcombatpistol,0,true,true)
give_weapon_component_to_ped(mike_ped(),wtcombatpistol, weaponcomponent_at_pi_supp)
set_current_ped_weapon(mike_ped(),wtcombatpistol,true)
targetammo = 50
newammo = targetammo - get_ammo_in_ped_weapon(mike_ped(),wtcombatpistol)
if newammo > 0
add_ammo_to_ped(mike_ped(),wtcombatpistol,newammo)
endif
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), comp_type_props, props_p0_headset)
HUD_SET_WEAPON_WHEEL_TOP_SLOT(wtcombatpistol)
HUD_SET_WEAPON_WHEEL_TOP_SLOT(wtbomb)
endif
if isentityalive(frank_ped())
if not has_ped_got_weapon(frank_ped(),wtsniper)
if bDoFrank
give_weapon_to_ped(frank_ped(),wtsniper,250,true,true)
else
give_weapon_to_ped(frank_ped(),wtsniper,250,false,false)
endif
else
if bDoFrank
set_current_ped_weapon(frank_ped(),wtsniper,true)
endif
add_ammo_to_ped(frank_ped(),wtsniper,250)
endif
if not has_ped_got_weapon_component(frank_ped(),wtsniper,weaponcomponent_at_scope_max)
give_weapon_component_to_ped(frank_ped(),wtsniper, weaponcomponent_at_scope_max)
endif
if not has_ped_got_weapon_component(frank_ped(),wtsniper, weaponcomponent_at_ar_supp_02)
give_weapon_component_to_ped(frank_ped(),wtsniper, weaponcomponent_at_ar_supp_02)
endif
endif
bGotWeapons = true
endif
endproc
proc FRANK_sniper_support()
if isentityalive(frank_ped())
if not bFrankFired
if get_game_timer() > isnipedelay
get_closest_ped(get_entity_coords(mike_ped()),20,false,true,franks_target_ped,false,true)
if isentityalive(franks_target_ped)
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
if get_distance_between_coords(get_entity_coords(mike_ped()),vfranks_aim_coord) < 15
IF NOT IS_ENTITY_OCCLUDED( franks_target_ped )
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), franks_target_ped)
TASK_SHOOT_AT_COORD( frank_ped(), vfranks_aim_coord, 1000, FIRING_TYPE_DEFAULT )
EXPLODE_PED_HEAD( franks_target_ped )
CPRINTLN( DEBUG_MISSION, "FRANK_sniper_support: Franklin shooting now." )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_4C", CONV_PRIORITY_MEDIUM )
iFrankFiredTimer = get_game_timer()
isnipedelay = get_game_timer() + 4500
bFrankFired = true
ENDIF
ENDIF
endif
else
if not bFrankSaysMove
if IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_1A", CONV_PRIORITY_MEDIUM )
bFrankSaysMove = TRUE
ENDIF
endif
endif
endif
endif
endif
if not has_ped_got_weapon(frank_ped(),wtsniper)
give_weapon_to_ped(frank_ped(),wtsniper,200,true,true)
give_weapon_component_to_ped(frank_ped(),wtsniper, weaponcomponent_at_scope_max)
else
if not get_current_ped_weapon(frank_ped(),wtsniper)
set_current_ped_weapon(frank_ped(),wtsniper,true)
endif
endif
endif
if bFrankFired
and get_game_timer() - iFrankFiredTimer > 1000
bFrankFired = false
endif
endproc
proc FRANK_manage_ai_stealth()
// float bestmercdist = 2000
// float currentmercdist
// mmf_mission_merc_flags closestmerc
// int ii
//Franklin will snipe a ped close to Mike if Mike hasn't killed him after 4.5 seconds
if not bFrankFired
if isentityalive(franks_target_ped)
if VDIST2(get_entity_coords(mike_ped()),GET_ENTITY_COORDS(franks_target_ped)) < 121
if isnipedelay > 0
if IS_PED_IN_COMBAT( franks_target_ped, mike_ped() )
if get_game_timer() > (isnipedelay-2000)
if not IS_ENTITY_OCCLUDED(franks_target_ped)
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), franks_target_ped)
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
// TASK_SHOOT_AT_ENTITY( frank_ped(), franks_target_ped, 1000, FIRING_TYPE_DEFAULT )
TASK_SHOOT_AT_COORD( frank_ped(), vfranks_aim_coord, 1000, FIRING_TYPE_DEFAULT )
EXPLODE_PED_HEAD( franks_target_ped )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_3C", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "FRANK_manage_ai_stealth: Franklin shooting combat ped now." )
iFrankFiredTimer = get_game_timer()
bFrankFired = TRUE
isnipedelay = -1
ENDIF
endif
endif
else
if get_game_timer() > isnipedelay
if not IS_ENTITY_OCCLUDED(franks_target_ped)
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), franks_target_ped)
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
// TASK_SHOOT_AT_ENTITY( frank_ped(), franks_target_ped, 1000, FIRING_TYPE_DEFAULT )
TASK_SHOOT_AT_COORD( frank_ped(), vfranks_aim_coord, 1000, FIRING_TYPE_DEFAULT )
EXPLODE_PED_HEAD( franks_target_ped )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_3C", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "FRANK_manage_ai_stealth: Franklin shooting now." )
iFrankFiredTimer = get_game_timer()
bFrankFired = TRUE
isnipedelay = -1
ENDIF
endif
endif
endif
else
if not IS_ENTITY_OCCLUDED(franks_target_ped)
if not is_synchronized_scene_running(iStealthKillSyncScene)
if not is_entity_playing_anim(franks_target_ped, "missheistdocks2a","stabbing_guard_guard", anim_synced_scene)
CPRINTLN( DEBUG_MISSION, "FRANK_manage_ai_stealth: reset iSnipeDelay" )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
isnipedelay = get_game_timer() + 4500
endif
endif
endif
endif
else
isnipedelay = -1
endif
else
get_closest_ped(get_entity_coords(mike_ped()),50,false,true,franks_target_ped,false,true)
isnipedelay = -1
endif
endif
IF isentityalive( mercs[merc4_C4_2].id )
IF IS_PLAYER_IN_TRIGGER_BOX( sTriggerBox[TB_FRANKLIN_KILL_MERC4] )
AND isentityalive(mike_ped())
IF NOT IS_ENTITY_OCCLUDED( mercs[merc4_C4_2].id )
AND NOT bshotready
AND IS_SAFE_TO_START_CONVERSATION()
if not is_synchronized_scene_running(iStealthKillSyncScene)
and not is_entity_playing_anim(mercs[merc4_C4_2].id, "missheistdocks2a","stabbing_guard_guard", anim_synced_scene)
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_STEPS1F", CONV_PRIORITY_MEDIUM )
bshotready = true
ENDIF
endif
ENDIF
IF bshotready
AND IS_SAFE_TO_START_CONVERSATION()
AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), mercs[merc4_C4_2].id)
franks_target_ped = mercs[merc4_C4_2].id
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
bFrankFired = true
iFrankFiredTimer = get_game_timer()
APPLY_FORCE_TO_ENTITY( mercs[merc4_C4_2].id, APPLY_TYPE_IMPULSE, <<10.0, 0.0, 0.0>>, <<1,0,0>>, 0, FALSE, TRUE, TRUE )
shoot_single_bullet_between_coords(<<-125.6115, -2380.9084, 12.0460>>,get_offset_from_entity_in_world_coords(mercs[merc4_C4_2].id,<<0,0,0.4>>),1000,true,wtsniper)
CPRINTLN( DEBUG_MISSION, "FRANK_manage_ai_stealth: Apply force to merc4_C4_2.")
EXPLODE_PED_HEAD( mercs[merc4_C4_2].id )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GUY1F", CONV_PRIORITY_MEDIUM )
bkilledbybuddy = true
bshotready = false
ENDIF
ENDIF
ENDIF
IF isentityalive( mercs[merc12_C4_3].id )
IF IS_PLAYER_IN_TRIGGER_BOX( sTriggerBox[TB_FRANKLIN_KILL_MERC12] )
AND isentityalive(mike_ped())
IF NOT IS_ENTITY_OCCLUDED( mercs[merc12_C4_3].id )
AND NOT bshotready
AND IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_BALC", CONV_PRIORITY_MEDIUM )
bshotready = true
ENDIF
ENDIF
IF bshotready
AND IS_SAFE_TO_START_CONVERSATION()
AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), mercs[merc12_C4_3].id)
franks_target_ped = mercs[merc12_C4_3].id
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
bFrankFired = true
iFrankFiredTimer = get_game_timer()
shoot_single_bullet_between_coords(<< -143.17641, -2487.5, 45.44402 >>,get_offset_from_entity_in_world_coords(mercs[merc12_C4_3].id,<<0,0,0.4>>),1000,true,wtsniper)
EXPLODE_PED_HEAD( mercs[merc12_C4_3].id )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_3D", CONV_PRIORITY_MEDIUM )
bkilledbybuddy = true
bshotready = false
ENDIF
ENDIF
ENDIF
IF isentityalive( mercs[merc13_C4_3].id )
IF IS_PLAYER_IN_TRIGGER_BOX( sTriggerBox[TB_FRANKLIN_KILL_MERC13] )
AND isentityalive(mike_ped())
// and get_game_timer() - icsdelay > 2000
IF NOT IS_ENTITY_OCCLUDED( mercs[merc13_C4_3].id )
AND NOT bshotready
AND IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_STEPS2F", CONV_PRIORITY_MEDIUM )
bshotready = true
ENDIF
ENDIF
IF bshotready
AND IS_SAFE_TO_START_CONVERSATION()
AND HAS_ENTITY_CLEAR_LOS_TO_ENTITY(frank_ped(), mercs[merc13_C4_3].id)
franks_target_ped = mercs[merc13_C4_3].id
vfranks_aim_coord = get_offset_from_entity_in_world_coords(franks_target_ped,<<0,0,0.4>>)
bFrankFired = true
iFrankFiredTimer = get_game_timer()
APPLY_FORCE_TO_ENTITY( mercs[merc13_C4_3].id, APPLY_TYPE_IMPULSE, <<10.0, 0.0, 0.0>>, <<1,0,0>>, 0, FALSE, TRUE, TRUE )
shoot_single_bullet_between_coords(<<-204.6591, -2381.0024, 11.9054>>,get_offset_from_entity_in_world_coords(mercs[merc13_C4_3].id,<<0,0,0.4>>),1000,true,wtsniper)
EXPLODE_PED_HEAD( mercs[merc13_C4_3].id )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_3A", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "FRANK_manage_ai_stealth: Apply force to merc13_C4_3.")
// SET_ENTITY_HEALTH( mercs[merc13_C4_3].id, 0 )
bkilledbybuddy = true
bshotready = false
ENDIF
ENDIF
ENDIF
if bFrankFired
and get_game_timer() - iFrankFiredTimer > 1000
bFrankFired = false
endif
endproc
func bool MIKE_stealth_killing( MERC_STRUCT &merc )
if isentityalive(merc.id)
switch istealthkill
case 0
if is_ped_in_combat(merc.id)
or merc.currentsit <> MS_SIT_NONE
// if is_entity_at_entity(mike_ped(),merc.id,<<3,3,2>>)
clear_ped_tasks_immediately(mike_ped())
wtSneakingWeapon = wtcombatpistol
task_combat_ped(mike_ped(),merc.id)
set_ped_sphere_defensive_area(mike_ped(),get_entity_coords(merc.id),2.2)
set_ped_combat_attributes(mike_ped(),ca_perfect_accuracy,true)
set_ped_combat_attributes(mike_ped(),ca_requires_los_to_shoot,true)
istealthkill++
// endif
else
if is_entity_at_entity(mike_ped(),merc.id,<<1,1,1>>)
wtSneakingWeapon = weapontype_knife
merc.bStealthKill = TRUE
iStealthKillSyncScene = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(merc.id),<<0,0,GET_ENTITY_HEADING(merc.id)>>)
TASK_SYNCHRONIZED_SCENE(mike_ped(),iStealthKillSyncScene,"missheistdocks2a","stabbing_guard_michael",SLOW_BLEND_IN,NORMAL_BLEND_OUT,SYNCED_SCENE_NONE,RBF_NONE,SLOW_BLEND_IN)
TASK_SYNCHRONIZED_SCENE(merc.id,iStealthKillSyncScene,"missheistdocks2a","stabbing_guard_guard",NORMAL_BLEND_IN,NORMAL_BLEND_OUT)
// task_stealth_kill(mike_ped(),merc,get_hash_key("AR_stealth_kill_knife"))
istealthkill++
endif
endif
break
case 1
if is_ped_in_combat(merc.id)
or merc.currentsit <> MS_SIT_NONE
if has_entity_been_damaged_by_entity(merc.id,mike_ped())
set_entity_health(merc.id,0)
istealthkill = 0
bkilledbybuddy = true
return true
endif
else
if GET_SYNCHRONIZED_SCENE_PHASE( iStealthKillSyncScene ) > 0.99
DETACH_SYNCHRONIZED_SCENE( iStealthKillSyncScene )
set_entity_health(merc.id,0)
bkilledbybuddy = true
istealthkill = 0
return true
endif
// if is_ped_performing_stealth_kill(mike_ped())
// istealthkilltimer = get_game_timer()
// bkilledbybuddy = true
// istealthkill++
// endif
endif
break
case 2
if get_game_timer() - istealthkilltimer > 1000
istealthkill = 0
return true
endif
break
endswitch
else
return true
istealthkill = 0
istealthkilltimer = get_game_timer()
endif
return false
endfunc
proc MIKE_stealth_combat()
if not isentityalive(mike_ped())
EXIT
endif
WEAPON_TYPE wtCurrentWeapon
IF GET_CURRENT_PED_WEAPON( mike_ped(), wtCurrentWeapon )
IF wtCurrentWeapon != wtCombatPistol
set_current_ped_weapon( mike_ped(),wtCombatPistol,true )
ENDIF
ENDIF
IF NOT IS_PED_IN_COMBAT( mike_ped() )
CPRINTLN( DEBUG_MISSION, "MIKE_stealth_combat: Mike has entered stealth combat." )
CLEAR_PED_TASKS( mike_ped() )
TASK_COMBAT_HATED_TARGETS_AROUND_PED( mike_ped(), 20 )
ENDIF
endproc
proc MIKE_manage_ai_stealth()
if isentityalive(mike_ped())
//@RJP check to see if mike_ped is carrying the desired weapon, if not, set the desired weapon
WEAPON_TYPE wtCurrentWeapon
IF GET_CURRENT_PED_WEAPON( mike_ped(), wtCurrentWeapon )
IF wtCurrentWeapon != wtSneakingWeapon
set_current_ped_weapon( mike_ped(),wtSneakingWeapon,true )
ENDIF
ENDIF
SET_PED_ACCURACY(mike_ped(), 100)
//if the player is sniping then move mike up as the enemy gets shot.
switch INT_TO_ENUM( MSF_MISSION_STAGE_FLAGS, mission_stage)
// bomb 1
case msf_2_first_bomb
switch imike_ai_stage
case 0
if not c4[c4_0_front_of_ship].bplanted
wtSneakingWeapon = wtbomb
set_current_ped_weapon( mike_ped(),wtbomb,true )
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-83.92709, -2366.11841, 13.29613>>,pedmove_run,default_time_never_warp)
TASK_PLANT_BOMB(null,<<-83.92709, -2366.11841, 13.29613>>,90)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
imike_ai_stage++
endif
break
case 1
// if is_projectile_type_in_angled_area((c4[c4_0_front_of_ship].exppos + <<-0.75,3,2>>),(c4[c4_0_front_of_ship].exppos + <<-0.75,3,-2>>),10,wtbomb)
if c4[c4_0_front_of_ship].bplanted = true
wtSneakingWeapon = wtCombatPistol
safe_remove_blip(c4[c4_0_front_of_ship].blip)
icsdelay = get_game_timer()
imike_ai_stage++
endif
break
case 2
if get_game_timer() - icsdelay > 1000
c4[c4_0_front_of_ship].bplanted = true
imike_ai_stage++
endif
break
case 3
//end state
break
endswitch
break
// bomb 2
case msf_3_second_bomb
switch imike_ai_stage
case 0
wtSneakingWeapon = wtCombatPistol
//@RJP changing Mike's first cover point so he will not be so easily killed by new patrols
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_UPPER_AREA] )
vai_coverpoint = <<-95.5662, -2375.6272, 13.2963>>
fai_coverheading = 87.6044
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike in TB_BOAT_BOW_UPPER_AREA, imike_ai_stage++" )
imike_ai_stage++
ELIF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_CONTAINERS_AREA] )
OR IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_FIRST_MAST_AREA] )
vai_coverpoint = <<-124.3208, -2373.9026, 8.3191>>
fai_coverheading = 87.6044
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike in TB_BOAT_BOW_UPPER_AREA, imike_ai_stage = 3" )
imike_ai_stage = 3
ELSE
vai_coverpoint = <<-132.6543, -2377.2488, 8.3191>>
fai_coverheading = 358.0533
remove_cover_point(customcover)
customcover = add_cover_point(vai_coverpoint,fai_coverheading ,COVUSE_WALLTOLEFT,COVHEIGHT_TOOHIGH,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,vai_coverpoint,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,vai_coverpoint,infinite_task_time,false,0.25,true,false,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike in TB_BOAT_BOW_UPPER_AREA, imike_ai_stage = 4" )
imike_ai_stage = 4
ENDIF
break
case 1
remove_cover_point(customcover)
customcover = add_cover_point(vai_coverpoint,fai_coverheading ,COVUSE_WALLTONEITHER,COVHEIGHT_LOW,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,vai_coverpoint,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,vai_coverpoint,infinite_task_time,false,0.25,true,false,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to cover, imike_ai_stage++" )
imike_ai_stage++
break
case 2
//@RJP Removing the stealth kill of merc6
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc3_c4_2].id)
or not IS_ENTITY_IN_TRIGGER_BOX( mercs[merc3_c4_2].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC3_TO_MOVE] )
AND IS_SAFE_TO_START_CONVERSATION()
task_follow_nav_mesh_to_coord(mike_ped(),<< -124.5024, -2374.0386, 8.3189 >>,pedmove_run,default_time_never_warp)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_LADDER", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to advance to first mast, imike_ai_stage++" )
iStealthTimer = 0
bMikeStealthDiag = FALSE
imike_ai_stage++
else
if isentityalive(mercs[merc3_c4_2].id)
if not DOES_BLIP_EXIST(mercs[merc3_c4_2].blip)
mercs[merc3_c4_2].blip = CREATE_BLIP_FOR_PED(mercs[merc3_c4_2].id,true)
endif
endif
if not bMikeStealthDiag
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK", CONV_PRIORITY_MEDIUM )
bMikeStealthDiag = TRUE
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-95.5662, -2375.6272, 13.2963>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 3
//@RJP putting Michael into cover near first mast until Franklin clears the way
vai_coverpoint = << -124.5024, -2374.0386, 8.3189 >>
fai_coverheading = 87.6044
remove_cover_point(customcover)
customcover = add_cover_point(vai_coverpoint,fai_coverheading ,COVUSE_WALLTORIGHT,COVHEIGHT_TOOHIGH,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,vai_coverpoint,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,vai_coverpoint,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to cover at first mast, imike_ai_stage++" )
imike_ai_stage++
break
case 4
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
//merc 5+7 now patrol together
if not isentityalive(mercs[merc5_c4_2].id)
// and not isentityalive(mercs[MERC6_C4_2].id)
or not IS_ENTITY_IN_TRIGGER_BOX( mercs[merc5_c4_2].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC5_TO_MOVE] )
// and not IS_ENTITY_IN_TRIGGER_BOX( mercs[MERC6_C4_2].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC5_TO_MOVE] ))
if isentityalive(mercs[merc4_c4_2].id)
AND IS_SAFE_TO_START_CONVERSATION()
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_STEPS1M", CONV_PRIORITY_MEDIUM )
task_follow_to_offset_of_entity(mike_ped(),mercs[merc4_c4_2].id,<<0.0,-0.1,0>>,pedmove_walk,-1)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to stealth kill merc4, imike_ai_stage++" )
iStealthTimer = 0
bMikeAsksForHelp = FALSE
imike_ai_stage++
else
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". merc4 dead, imike_ai_stage=6" )
iStealthTimer = 0
imike_ai_stage = 6
endif
else
if isentityalive(mercs[merc5_c4_2].id)
if not DOES_BLIP_EXIST(mercs[merc5_C4_2].blip)
mercs[merc5_C4_2].blip = CREATE_BLIP_FOR_PED(mercs[merc5_C4_2].id,true)
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), << -124.5024, -2374.0386, 8.3189 >>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 5
if MIKE_stealth_killing(mercs[merc4_c4_2])
wtSneakingWeapon = wtcombatpistol
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GUY1M", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike stealth killed merc4, imike_ai_stage++" )
imike_ai_stage++
endif
break
case 6
vai_coverpoint = <<-132.6543, -2377.2488, 8.3191>>
fai_coverheading = 358.0533
remove_cover_point(customcover)
customcover = add_cover_point(vai_coverpoint,fai_coverheading ,COVUSE_WALLTOLEFT,COVHEIGHT_TOOHIGH,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,vai_coverpoint,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,vai_coverpoint,infinite_task_time,false,0.25,true,false,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to cover near bomb site, imike_ai_stage++" )
imike_ai_stage++
break
case 7
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc5_c4_2].id)
or not IS_ENTITY_IN_TRIGGER_BOX( mercs[merc5_c4_2].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC5_TO_MOVE] )
wtSneakingWeapon = wtbomb
set_current_ped_weapon( mike_ped(),wtbomb,true )
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<< -128.70566, -2367.17944, 8.31891 >>,pedmove_run,default_time_never_warp)
TASK_PLANT_BOMB(null,<<-128.69624, -2366.82788, 9.22130 >>,270)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to plant bomb, imike_ai_stage++" )
iStealthTimer = 0
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc5_c4_2].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ELSE
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
bMikeAsksForHelp = FALSE
imike_ai_stage++
ELSE
if isentityalive(mercs[merc5_c4_2].id)
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc9_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
ENDIF
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-132.6543, -2377.2488, 8.3191>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 8
// if is_projectile_type_in_angled_area((c4[c4_1_first_mast].exppos + <<-0.75,3,2>>),(c4[c4_1_first_mast].exppos + <<-0.75,3,-2>>),10,wtbomb)
if c4[c4_1_first_mast].bplanted = true
wtSneakingWeapon = wtCombatPistol
safe_remove_blip(c4[c4_1_first_mast].blip)
icsdelay = get_game_timer()
imike_ai_stage++
endif
break
case 9
if get_game_timer() - icsdelay > 1000
c4[c4_1_first_mast].bplanted = true
imike_ai_stage++
endif
break
case 10
//end
break
endswitch
break
// bomb 3
case msf_4_third_bomb
switch imike_ai_stage
case 0
wtSneakingWeapon = wtCombatPistol
// vai_coverpoint = << -148.31889, -2376.58008, 8.31907 >>
//@RJP first cover point should give cover from mercs 8+9
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_UPPER_AREA] )
OR IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_CONTAINERS_AREA] )
OR IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_FIRST_MAST_AREA] )
imike_ai_stage++
ELIF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_1_AREA] )
imike_ai_stage = 3
ELIF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_2_AREA] )
vai_coverpoint = <<-161.0396, -2377.5042, 8.3191>>
fai_coverheading = 356.7672
imike_ai_stage = 5
ELIF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_3_AREA] )
vai_coverpoint = <<-177.2718, -2377.5042, 8.3191>>
imike_ai_stage = 7
ELSE IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_SECOND_MAST_AREA] )
imike_ai_stage = 9
ENDIF
break
case 1
vai_coverpoint = << -132.01889, -2376.58008, 8.31907 >>
fai_coverheading = 89.7021
remove_cover_point(customcover)
customcover = add_cover_point(vai_coverpoint,fai_coverheading,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,vai_coverpoint,pedmove_run,default_time_never_warp,0.7)
task_put_ped_directly_into_cover(null,vai_coverpoint,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked to cover, imike_ai_stage++" )
imike_ai_stage++
break
case 2
//@RJP Michael should wait in 1st cover spot until path ahead is clear
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc9_c4_3].id)
OR NOT IS_ENTITY_IN_TRIGGER_BOX( mercs[merc9_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] )
set_current_ped_weapon(mike_ped(),wtCombatPistol,true)
task_follow_nav_mesh_to_coord(mike_ped(),<<-144.5449, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Merc9 passed, Mike tasked to move to cover, imike_ai_stage++" )
iStealthTimer = 0
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc9_c4_3].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ELSE
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
bMikeAsksForHelp = FALSE
imike_ai_stage++
else
if isentityalive(mercs[merc9_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc9_c4_3].blip)
mercs[merc9_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc9_c4_3].id,true)
endif
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc9_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), << -132.01889, -2376.58008, 8.31907 >>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 3
remove_cover_point(customcover)
//@RJP changing this cover point to the next block of cargo containers
customcover =add_cover_point(<<-144.5449, -2377.5042, 8.3191>>, 354.7062,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-144.5449, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<<-144.5449, -2377.5042, 8.3191>>,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked into cover, imike_ai_stage++" )
iStealthTimer = 0
imike_ai_stage++
break
case 4
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc9_c4_3].id)
OR NOT IS_ENTITY_IN_TRIGGER_BOX( mercs[merc9_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] )
task_follow_nav_mesh_to_coord(mike_ped(),<<-161.0396, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Merc9 passed, Mike tasked to move to cover, imike_ai_stage++" )
iStealthTimer = 0
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc9_c4_3].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
bMikeAsksForHelp = FALSE
imike_ai_stage++
else
if isentityalive(mercs[merc9_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc9_c4_3].blip)
mercs[merc9_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc9_c4_3].id,true)
endif
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc9_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC9_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-144.5449, -2377.5042, 8.3191>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 5
remove_cover_point(customcover)
//@RJP changing this cover point to the next block of cargo containers
customcover =add_cover_point(<<-161.0396, -2377.5042, 8.3191>>, 354.7062,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-161.0396, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<<-161.0396, -2377.5042, 8.3191>>,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked into cover, imike_ai_stage++" )
iStealthTimer = 0
bMikeAsksForHelp = FALSE
imike_ai_stage++
break
case 6
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc11_c4_3].id)
OR NOT IS_ENTITY_IN_TRIGGER_BOX( mercs[merc11_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC10_TO_MOVE] )
if not bdouble_music_cue
trigger_music_event("dh2a_double_guards")
bdouble_music_cue = true
endif
set_current_ped_weapon(mike_ped(),wtCombatPistol,true)
task_follow_nav_mesh_to_coord(mike_ped(),<<-177.2718, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Merc10 and 11 passed, Mike tasked to move to cover, imike_ai_stage++" )
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc11_c4_3].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
bMikeAsksForHelp = FALSE
iStealthTimer = 0
imike_ai_stage++
else
if isentityalive(mercs[merc11_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc11_c4_3].blip)
mercs[merc11_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc11_c4_3].id,true)
endif
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc11_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC10_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-161.0396, -2377.5042, 8.3191>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 7
remove_cover_point(customcover)
//@RJP changing this cover point to the next block of cargo containers
customcover =add_cover_point(<<-177.2718, -2377.5042, 8.3191>>, 354.7062,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-177.2718, -2377.5042, 8.3191>>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<<-177.2718, -2377.5042, 8.3191>>,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked into cover, imike_ai_stage++" )
iStealthTimer = 0
imike_ai_stage++
break
case 8
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc14_c4_3].id)
OR NOT IS_ENTITY_IN_TRIGGER_BOX( mercs[merc14_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC14_TO_MOVE] )
task_follow_nav_mesh_to_coord(mike_ped(),<<-187.2977, -2374.7778, 8.3191>>,pedmove_run,default_time_never_warp)
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Merc14 and 16 passed, Mike tasked to move to cover, imike_ai_stage++" )
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc14_c4_3].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
bMikeAsksForHelp = FALSE
iStealthTimer = 0
imike_ai_stage++
else
if isentityalive(mercs[merc12_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc12_c4_3].blip)
mercs[merc12_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc12_c4_3].id,true)
endif
endif
if isentityalive(mercs[merc14_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc14_c4_3].blip)
mercs[merc14_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc14_c4_3].id,true)
endif
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc14_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC14_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-177.2718, -2377.5042, 8.3191>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 9
remove_cover_point(customcover)
//@RJP changing this cover point to the next block of cargo containers
customcover =add_cover_point(<<-187.2977, -2374.7778, 8.3191>>, 354.7062,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-187.2977, -2374.7778, 8.3191>>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<<-187.2977, -2374.7778, 8.3191>>,infinite_task_time,false,0.25,true,true,customcover,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Mike tasked into cover, imike_ai_stage++" )
iStealthTimer = 0
imike_ai_stage++
break
case 10
IF iStealthTimer > 0
IF (GET_GAME_TIMER() - iStealthTimer) > 1000
if not isentityalive(mercs[merc14_c4_3].id)
OR NOT IS_ENTITY_IN_TRIGGER_BOX( mercs[merc14_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC14_TO_MOVE] )
wtSneakingWeapon = wtBomb
set_current_ped_weapon( mike_ped(),wtbomb,true )
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<< -188.1089, -2365.5100, 8.3194 >>,pedmove_walk,default_time_never_warp)
TASK_PLANT_BOMB(null,<< -188.1089, -2365.5100, 8.3194 >>,270)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
IF bMikeAsksForHelp
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[merc14_c4_3].id, frank_ped() )
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_2A", CONV_PRIORITY_MEDIUM )
ENDIF
ENDIF
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Merc14 and 16 passed, Mike tasked to plant bomb, imike_ai_stage++" )
iStealthTimer = 0
bMikeAsksForHelp = FALSE
imike_ai_stage++
else
if isentityalive(mercs[merc12_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc12_c4_3].blip)
mercs[merc12_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc12_c4_3].id,true)
endif
endif
if isentityalive(mercs[merc14_c4_3].id)
if not DOES_BLIP_EXIST(mercs[merc14_c4_3].blip)
mercs[merc14_c4_3].blip = CREATE_BLIP_FOR_PED(mercs[merc14_c4_3].id,true)
endif
if not bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
if IS_ENTITY_IN_TRIGGER_BOX( mercs[merc14_c4_3].id, sTriggerBox[TB_MIKE_WAIT_FOR_MERC14_TO_MOVE] )
if CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DECK2", CONV_PRIORITY_MEDIUM )
bMikeAsksForHelp = TRUE
endif
endif
endif
endif
endif
endif
ENDIF
ELSE
IF IS_ENTITY_AT_COORD( mike_ped(), <<-187.2977, -2374.7778, 8.3191>>, <<2.0,2.0,2.0>> )
AND IS_PED_IN_COVER( mike_ped() )
iStealthTimer = GET_GAME_TIMER()
ENDIF
ENDIF
break
case 11
// if is_projectile_type_in_angled_area((c4[c4_2_second_mast].exppos + <<-0.75,3,2>>),(c4[c4_2_second_mast].exppos + <<-0.75,3,-2>>),10,wtbomb)
if c4[c4_2_second_mast].bplanted = true
wtSneakingWeapon = wtCombatPistol
safe_remove_blip(c4[c4_2_second_mast].blip)
icsdelay = get_game_timer()
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Bomb planted, imike_ai_stage++" )
imike_ai_stage++
endif
break
case 12
if get_game_timer() - icsdelay > 1000
c4[c4_2_second_mast].bplanted = true
CPRINTLN( DEBUG_MISSION, "MIKE_manage_ai_stealth: ai_stage: ", imike_ai_stage, ". Third bomb complete, imike_ai_stage++" )
imike_ai_stage++
endif
break
case 13
//end state
break
endswitch
break
// bomb 4
case msf_5_fourth_bomb
switch imike_ai_stage
case 0
wtSneakingWeapon = wtCombatPistol
if mission_stage = enum_to_int(msf_5_fourth_bomb)
remove_cover_point(customcover)
customcover = add_cover_point(<< -193.7045, -2376.3953, 8.3186 >>, 88.3441,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<< -193.7045, -2376.3953, 8.3186 >>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<< -193.7045, -2376.3953, 8.3186 >>,infinite_task_time,false,0.25,true,true,null,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
imike_ai_stage++
endif
break
case 1
if isentityalive(mercs[merc13_c4_3].id)
if IS_SAFE_TO_START_CONVERSATION()
AND NOT IS_MESSAGE_BEING_DISPLAYED()
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_STEPS2M", CONV_PRIORITY_MEDIUM )
task_follow_to_offset_of_entity(mike_ped(),mercs[merc13_c4_3].id,<<0,0.25,0>>,pedmove_run,default_time_never_warp)
istealthkill = 0
imike_ai_stage++
endif
else
imike_ai_stage = 3
endif
break
case 2
if MIKE_stealth_killing(mercs[merc13_c4_3])
and get_game_timer() - istealthkilltimer > 2000
wtSneakingWeapon = wtcombatpistol
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GUY2M", CONV_PRIORITY_MEDIUM )
imike_ai_stage++
endif
break
case 3
remove_cover_point(customcover)
customcover = add_cover_point(<<-210.9928, -2375.6543, 8.3191>>, 88.3441,covuse_walltoright,covheight_toohigh,covarc_180)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-210.9928, -2375.6543, 8.3191>>,pedmove_run,default_time_never_warp)
task_put_ped_directly_into_cover(null,<<-210.9928, -2375.6543, 8.3191>>,infinite_task_time,false,0.25,true,true,null,true)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
imike_ai_stage++
break
case 4
if not isentityalive(mercs[MERC16_C4_4].id)
set_current_ped_weapon(mike_ped(),wtCombatPistol,true)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,c4[c4_3_inside].exppos,pedmove_run,default_time_never_warp)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MOVE1", CONV_PRIORITY_MEDIUM )
imike_ai_stage++
else
if not DOES_BLIP_EXIST(mercs[MERC16_C4_4].blip)
mercs[MERC16_C4_4].blip = CREATE_BLIP_FOR_PED(mercs[MERC16_C4_4].id,true)
endif
endif
break
endswitch
break
endswitch
//-------------checks---------------
set_ped_stealth_movement(mike_ped(),true)
endif
endproc
//@RJP returns TRUE if any merc from 3 to 18 is combatting Mike
FUNC BOOL IS_ANY_MERC_COMBATTING_MIKE()
INT i
FOR i = merc3_C4_2 TO merc18_c4_4
IF isentityalive( mercs[i].id )
IF IS_PED_IN_COMBAT( mercs[i].id, mike_ped() )
RETURN TRUE
ENDIF
ENDIF
ENDFOR
RETURN FALSE
ENDFUNC
proc MIKE_manage_combat()
if isentityalive(mike_ped())
//@RJP michael should die easier
// set_ped_suffers_critical_hits(mike_ped(),false)
set_ped_combat_attributes(mike_ped(), ca_use_cover,true)
set_ped_combat_attributes(mike_ped(), ca_aggressive,true)
set_ped_combat_attributes(mike_ped(), ca_can_shoot_without_los ,false)
set_ped_combat_ability(mike_ped(), cal_professional)
set_ped_combat_movement(mike_ped(), CM_WILLADVANCE)
set_ped_combat_range(mike_ped(),CR_MEDIUM)
SET_RAGDOLL_BLOCKING_FLAGS( mike_ped(), RBF_BULLET_IMPACT )
IF NOT bMikeHealthWarn
IF isentityalive(mike_ped())
IF GET_ENTITY_HEALTH(mike_ped()) < 120
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DIE_NS", CONV_PRIORITY_HIGH )
CPRINTLN( DEBUG_MISSION, "Mike's health low, setting bMikeHealthWarn" )
bMikeHealthWarn = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bMikeCombatWarn
IF IS_ANY_MERC_COMBATTING_MIKE()
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_HLP_NS", CONV_PRIORITY_MEDIUM )
bMikeCombatWarn = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_MERC_COMBATTING_MIKE()
bMikeCombatWarn = FALSE
ENDIF
ENDIF
//move towards first bomb area if not planted yet and close to it.
if mission_stage = enum_to_int(msf_2_first_bomb)
if c4[c4_0_front_of_ship].bplanted = false
set_ped_sphere_defensive_area(mike_ped(),<< -86.0638, -2366.2502, 13.8644 >>,10)
IF IS_ANY_MERC_COMBATTING_MIKE()
IF NOT IS_PED_IN_COMBAT( mike_ped() )
set_current_ped_weapon(mike_ped(),GET_BEST_PED_WEAPON( mike_ped() ),true)
CLEAR_PED_TASKS( mike_ped() )
task_combat_hated_targets_around_ped(mike_ped(),40)
ENDIF
ELIF GET_SCRIPT_TASK_STATUS( mike_ped(), SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CLEAR_PED_TASKS( mike_ped() )
set_current_ped_weapon(mike_ped(),wtbomb,true)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<<-83.92709, -2366.11841, 13.29613>>,pedmove_run,default_time_never_warp)
TASK_PLANT_BOMB(null,<<-83.92709, -2366.11841, 13.29613>>,90)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MVE_NS", CONV_PRIORITY_MEDIUM )
ENDIF
else
set_ped_sphere_defensive_area(mike_ped(),<< -126.6504, -2375.7917, 9.6284 >>,10)
endif
//move towards the second bomb area unless its been planted if so move to the third
elif mission_stage = enum_to_int(msf_3_second_bomb)
if c4[c4_1_first_mast].bplanted = false
set_ped_sphere_defensive_area(mike_ped(),<< -126.6504, -2375.7917, 9.6284 >>,10)
IF IS_ANY_MERC_COMBATTING_MIKE()
IF NOT IS_PED_IN_COMBAT( mike_ped() )
set_current_ped_weapon(mike_ped(),GET_BEST_PED_WEAPON( mike_ped() ),true)
// if has_ped_got_weapon(mike_ped(),weapontype_carbinerifle)
// set_current_ped_weapon(mike_ped(),WEAPONTYPE_CARBINERIFLE,true)
// endif
CLEAR_PED_TASKS( mike_ped() )
task_combat_hated_targets_around_ped(mike_ped(),40)
ENDIF
ELIF GET_SCRIPT_TASK_STATUS( mike_ped(), SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CLEAR_PED_TASKS( mike_ped() )
set_current_ped_weapon(mike_ped(),wtbomb,true)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<< -128.70566, -2367.17944, 8.31891 >>,pedmove_run,default_time_never_warp)
TASK_PLANT_BOMB(null,<<-128.69624, -2366.82788, 9.22130 >>,270)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MVE_NS", CONV_PRIORITY_MEDIUM )
ENDIF
else
set_ped_sphere_defensive_area(mike_ped(),<< -186.4871, -2375.8062, 9.7455 >>,10)
endif
//move towards the third bomb area unless its been planted other wise move further onwards.
elif mission_stage = enum_to_int(msf_4_third_bomb)
if c4[c4_2_second_mast].bplanted = false
set_ped_sphere_defensive_area(mike_ped(),<< -186.4871, -2375.8062, 9.7455 >>,10)
IF IS_ANY_MERC_COMBATTING_MIKE()
IF NOT IS_PED_IN_COMBAT( mike_ped() )
set_current_ped_weapon(mike_ped(),GET_BEST_PED_WEAPON( mike_ped() ),true)
CLEAR_PED_TASKS( mike_ped() )
task_combat_hated_targets_around_ped(mike_ped(),40)
ENDIF
ELIF GET_SCRIPT_TASK_STATUS( mike_ped(), SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CLEAR_PED_TASKS( mike_ped() )
set_current_ped_weapon(mike_ped(),wtbomb,true)
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,<< -188.1089, -2365.5100, 8.3194 >>,pedmove_run,default_time_never_warp)
TASK_PLANT_BOMB(null,<< -188.1089, -2365.5100, 8.3194 >>,270)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MVE_NS", CONV_PRIORITY_MEDIUM )
ENDIF
else
set_ped_sphere_defensive_area(mike_ped(),<< -211.9178, -2377.0576, 9.1952 >>,10)
endif
elif mission_stage = enum_to_int(msf_5_fourth_bomb)
set_ped_sphere_defensive_area(mike_ped(),<< -216.4087, -2377.5801, 8.6987 >>,10)
IF IS_ANY_MERC_COMBATTING_MIKE()
IF NOT IS_PED_IN_COMBAT( mike_ped() )
set_current_ped_weapon(mike_ped(),GET_BEST_PED_WEAPON( mike_ped() ),true)
CLEAR_PED_TASKS( mike_ped() )
task_combat_hated_targets_around_ped(mike_ped(),40)
ENDIF
ELIF GET_SCRIPT_TASK_STATUS( mike_ped(), SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CLEAR_PED_TASKS( mike_ped() )
clear_sequence_task(seq)
open_sequence_task(seq)
task_follow_nav_mesh_to_coord(null,c4[c4_3_inside].exppos,pedmove_run,default_time_never_warp)
close_sequence_task(seq)
task_perform_sequence(mike_ped(),seq)
clear_sequence_task(seq)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MVE_NS", CONV_PRIORITY_MEDIUM )
ENDIF
//once player cant see turn back to combat mode for franklin. defensive spehere is current location.
elif mission_stage = enum_to_int(msf_6_way_out)
ped_index clsped = null
float peddist = 15
int merc
for merc = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if isentityalive(mercs[merc].id)
if get_distance_between_coords(get_entity_coords(mike_ped()),get_entity_coords(mercs[merc].id)) < peddist
clsped = mercs[merc].id
peddist = get_distance_between_coords(get_entity_coords(mike_ped()),get_entity_coords(mercs[merc].id))
endif
endif
endfor
if peddist < 15
if isentityalive(clsped)
set_ped_sphere_defensive_area(mike_ped(),get_entity_coords(mike_ped()),2)
set_ped_combat_attributes(clsped,ca_use_cover,false)
endif
else
set_ped_sphere_defensive_area(mike_ped(),get_entity_coords(mike_ped()),1)
endif
//move to final bomb spot if all else fails.
else
set_ped_sphere_defensive_area(mike_ped(),<< -216.4087, -2377.5801, 8.6987 >>,2)
endif
// if has_ped_got_weapon(mike_ped(),weapontype_carbinerifle)
// set_current_ped_weapon(mike_ped(),weapontype_carbinerifle,true)
// endif
// if not is_ped_in_combat(mike_ped())
// task_combat_hated_targets_around_ped(mike_ped(),40)
// endif
endif
endproc
proc MERC_manage_force_tasks(mmf_mission_merc_flags merc)
if isentityalive(mercs[merc].id)
if isentityalive(mike_ped())
if get_script_task_status(mercs[merc].id,script_task_combat)!= performing_task
and get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != performing_task
task_combat_ped(mercs[merc].id,mike_ped())
endif
endif
endif
endproc
PROC MIKE_WAY_OUT_CONV_MANAGER()
SWITCH iWayOutDiag
CASE 0
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_COVER", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
BREAK
CASE 1
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GOUP", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
BREAK
CASE 2
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GUYON", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
BREAK
CASE 3
//Do nothing here
BREAK
CASE 4
IF IS_SAFE_TO_START_CONVERSATION()
IF isentityalive(mike_ped())
AND isentityalive(mercs[merc13_C4_3].id)
IF IS_ENTITY_AT_COORD( mike_ped(), <<-225.4856, -2377.7957, 16.3326>>, <<6,6,4>> )
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GUYMORE", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
ELSE
iWayOutDiag++
ENDIF
ENDIF
BREAK
CASE 5
//Do nothing here
BREAK
CASE 6
IF IS_SAFE_TO_START_CONVERSATION()
IF bFrankKilled13
AND bFrankKilled14
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_TAKEOUT", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_4H", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
ENDIF
BREAK
CASE 7
IF IS_SAFE_TO_START_CONVERSATION()
IF isentityalive(mike_ped())
IF isentityalive(mercs[MERC15_C4_3].id)
OR isentityalive(mercs[MERC16_C4_4].id)
IF IS_ENTITY_AT_COORD( mike_ped(), <<-229.89893, -2379.28979, 12.33288>>, <<6,6,3>> )
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MORE2", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
ELSE
iWayOutDiag++
ENDIF
ENDIF
ENDIF
BREAK
CASE 8
//Do nothing here
BREAK
CASE 9
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DEAD", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
BREAK
CASE 10
IF IS_SAFE_TO_START_CONVERSATION()
IF isentityalive(mike_ped())
IF isentityalive(mercs[merc17_c4_4].id)
OR isentityalive(mercs[merc18_c4_4].id)
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MAIN", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ELSE
iWayOutDiag++
ENDIF
ENDIF
ENDIF
BREAK
CASE 11
//Do nothing here
BREAK
CASE 12
IF IS_SAFE_TO_START_CONVERSATION()
IF NOT isentityalive(mercs[merc17_c4_4].id)
AND NOT isentityalive(mercs[merc18_c4_4].id)
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_4H", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
ENDIF
BREAK
CASE 13
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_NORTH", CONV_PRIORITY_MEDIUM )
iWayOutDiag++
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC HEATSCALE_MANAGER( PED_INDEX &ped, INT i )
IF NOT isentityalive( ped )
EXIT
ENDIF
SWITCH sPedHeatScale[i].iHeatState
CASE 0
IF sPedHeatScale[i].iHeatScale < 255
sPedHeatScale[i].iHeatScale += 10
IF sPedHeatScale[i].iHeatScale > 255
sPedHeatScale[i].iHeatScale = 255
ENDIF
SET_ENTITY_VISIBLE( ped, TRUE )
SET_PED_HEATSCALE_OVERRIDE( ped, sPedHeatScale[i].iHeatScale )
ELSE
sPedHeatScale[i].iHeatState ++
ENDIF
BREAK
CASE 1
DISABLE_PED_HEATSCALE_OVERRIDE( ped )
sPedHeatScale[i].iHeatState ++
BREAK
CASE 2
//End case
BREAK
ENDSWITCH
ENDPROC
func bool MIKE_way_out()
HEATSCALE_MANAGER( peds[mpf_mike].id, 0 )
switch iescapeStage
// right at top
case 0
//@RJP add navmesh blockers to prevent Michael going around the back side of the boat
ADD_NAVMESH_BLOCKING_OBJECT( <<-227.320953,-2359.709961,25.235537>>,<<3.000000,2.000000,2.000000>>, 0 )
ADD_NAVMESH_BLOCKING_OBJECT( <<-236.819199,-2359.233643,17.231823>>,<<6.000000,3.000000,2.000000>>, 0 )
ADD_NAVMESH_BLOCKING_OBJECT( <<-213.448837,-2375.129150,10.319207>>,<<2.500000,1.000000,2.000000>>, 0 )
ADD_NAVMESH_BLOCKING_OBJECT( <<-222.074005,-2374.517578,14.051224>>,<<2.000000,1.000000,2.000000>>, 0 )
SET_ENTITY_VISIBLE( mike_ped(), TRUE )
//mike
SET_PED_SPHERE_DEFENSIVE_AREA(mike_ped(),<<-225.4856, -2377.7957, 16.3326>>,2,true)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_WAYPOINT_RECORDING( null, "docksheist2A02" )
TASK_PUT_PED_DIRECTLY_INTO_COVER(null,<<-225.4856, -2377.7957, 16.3326>>,-1,true,0.25,false,false,null,true)
TASK_COMBAT_HATED_TARGETS_AROUND_PED(null,50)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_ped(),seq)
CLEAR_SEQUENCE_TASK(seq)
iCSDelay = (GET_GAME_TIMER()+4000)
iescapeStage++
break
case 1
IF (iWayOutDiag = 3)
AND GET_GAME_TIMER() > iCSDelay
//merc from top right
createmercenary(merc13_C4_3,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[merc13_C4_3].id, RBF_BULLET_IMPACT)
SET_ENTITY_COORDS(mercs[merc13_C4_3].id,<<-214.50433, -2355.67139, 16.33203>>)
SET_ENTITY_HEADING( mercs[merc13_C4_3].id, 285.8376 )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc13_C4_3].id,<<-213.24863, -2374.95581, 16.33176>>,2,true)
SET_ENTITY_VISIBLE( mercs[merc13_C4_3].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[merc13_C4_3].id, 0 )
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD( null, <<-213.24863, -2374.95581, 16.33176>>, PEDMOVE_RUN )
TASK_PUT_PED_DIRECTLY_INTO_COVER(null,<<-213.24863, -2374.95581, 16.33176>>,2000,true,0.25,false,false,null,true)
TASK_COMBAT_PED(null,mike_ped())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc13_C4_3].id,seq)
CLEAR_SEQUENCE_TASK(seq)
//merc from top left
createmercenary(merc14_C4_3,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[merc14_C4_3].id, RBF_BULLET_IMPACT)
set_entity_coords(mercs[merc14_C4_3].id,<< -220.8900, -2369.9204, 24.3350 >> )
SET_ENTITY_HEADING( mercs[merc14_C4_3].id, 111.7760 )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc14_C4_3].id,<<-231.06622, -2374.59497, 16.33076>>,2,true)
SET_ENTITY_VISIBLE( mercs[merc14_C4_3].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[merc14_C4_3].id, 0 )
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_WAYPOINT_RECORDING( null, "docksheist2A03" )
TASK_PUT_PED_DIRECTLY_INTO_COVER(null,<<-231.06622, -2374.59497, 16.33076>>,2000,true,0.25,false,false,null,true)
TASK_COMBAT_PED(null,mike_ped())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc14_C4_3].id,seq)
CLEAR_SEQUENCE_TASK(seq)
iWayOutDiag = 4
iescapeStage++
ENDIF
break
// second level
case 2
if not isentityalive(mercs[merc13_C4_3].id)
and not isentityalive(mercs[merc14_C4_3].id)
and not is_entity_occluded(mike_ped())
//merc 15 & 16
createmercenary(MERC16_C4_4,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[MERC16_C4_4].id, RBF_BULLET_IMPACT)
set_entity_coords(mercs[MERC16_C4_4].id, <<-250.5471, -2363.4216, 8.3192>>)
SET_ENTITY_HEADING( mercs[MERC16_C4_4].id, 186.5092 )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[MERC16_C4_4].id,<<-248.8481, -2375.2900, 8.3192>>,2,true)
SET_ENTITY_VISIBLE( mercs[MERC16_C4_4].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[MERC16_C4_4].id, 0 )
TASK_COMBAT_PED(mercs[MERC16_C4_4].id,mike_ped())
createmercenary(MERC15_C4_3,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[MERC15_C4_3].id, RBF_BULLET_IMPACT)
set_entity_coords(mercs[MERC15_C4_3].id, <<-250.6802, -2364.6062, 8.3192>>)
SET_ENTITY_HEADING( mercs[MERC15_C4_3].id, 197.7292 )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[MERC15_C4_3].id,<<-245.86349, -2376.99048, 8.31911>>,2,true)
SET_ENTITY_VISIBLE( mercs[MERC15_C4_3].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[MERC15_C4_3].id, 0 )
TASK_COMBAT_PED(mercs[MERC15_C4_3].id,mike_ped())
//mike
SET_PED_SPHERE_DEFENSIVE_AREA(mike_ped(),<<-229.89893, -2379.28979, 12.33288>>,5,true)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<-229.89893, -2379.28979, 12.33288>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP)
TASK_COMBAT_HATED_TARGETS_AROUND_PED(null,50)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_ped(),seq)
CLEAR_SEQUENCE_TASK(seq)
iWayOutDiag = 6
iescapeStage++
else
HEATSCALE_MANAGER( mercs[merc13_C4_3].id, 1 )
HEATSCALE_MANAGER( mercs[merc14_C4_3].id, 2 )
endif
break
//on deck
case 3
if not isentityalive(mercs[MERC16_C4_4].id)
and not isentityalive(mercs[MERC15_C4_3].id)
and not is_entity_occluded(mike_ped())
//merc 17 & 18
createmercenary(merc17_c4_4,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[merc17_c4_4].id, RBF_BULLET_IMPACT)
set_entity_coords(mercs[merc17_c4_4].id,<<-209.40309, -2362.73633, 8.31911>>)
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc17_c4_4].id,<<-210.73999, -2375.15332, 8.31911>>,2,true)
SET_ENTITY_VISIBLE( mercs[merc17_c4_4].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[merc17_c4_4].id, 0 )
TASK_COMBAT_PED(mercs[merc17_c4_4].id,mike_ped())
createmercenary(merc18_c4_4,50, TRUE)
SET_RAGDOLL_BLOCKING_FLAGS(mercs[merc18_c4_4].id, RBF_BULLET_IMPACT)
set_entity_coords(mercs[merc18_c4_4].id,<<-207.84383, -2363.50244, 8.31911>>)
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc18_c4_4].id,<<-211.05281, -2377.40332, 8.31911>>,2,true)
SET_ENTITY_VISIBLE( mercs[merc18_c4_4].id, FALSE )
SET_PED_HEATSCALE_OVERRIDE( mercs[merc18_c4_4].id, 0 )
TASK_COMBAT_PED(mercs[merc18_c4_4].id,mike_ped())
//mike
SET_PED_SPHERE_DEFENSIVE_AREA(mike_ped(),<<-218.31186, -2377.13525, 8.31911>>,2,true)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<-222.1750, -2376.2395, 12.3329>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<-218.31186, -2377.13525, 8.31911>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP)
TASK_COMBAT_HATED_TARGETS_AROUND_PED(null,30)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_ped(),seq)
CLEAR_SEQUENCE_TASK(seq)
iWayOutDiag = 9
iescapeStage++
else
HEATSCALE_MANAGER( mercs[MERC16_C4_4].id, 3 )
HEATSCALE_MANAGER( mercs[MERC15_C4_3].id, 4 )
ENDIF
break
case 4
if not isentityalive(mercs[merc17_c4_4].id)
and not isentityalive(mercs[merc18_c4_4].id)
and not is_entity_occluded(mike_ped())
//music cue
trigger_music_event("dh2a_clear_path")
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( null, TRUE )
IF NOT IS_ENTITY_AT_COORD( mike_ped(), <<-218.31186, -2377.13525, 8.31911>>, <<8,8,2>> )
TASK_FOLLOW_NAV_MESH_TO_COORD(null, <<-218.31186, -2377.13525, 8.31911>>, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP )
ENDIF
task_follow_waypoint_recording(null,"docksheist2a01",0,ewaypoint_start_from_closest_point | ewaypoint_use_tighter_turn_settings)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_ped(),seq)
CLEAR_SEQUENCE_TASK(seq)
iWayOutDiag = 12
return true
else
HEATSCALE_MANAGER( mercs[merc17_c4_4].id, 5 )
HEATSCALE_MANAGER( mercs[merc18_c4_4].id, 6 )
endif
break
endswitch
//@RJP removing MERC_manage_force_tasks as the tasking above handles combat fine and tasking them this way can break the AI
// int merc
// for merc = enum_to_int(merc11_C4_3) to enum_to_int(merc18_c4_4)
// if isentityalive(mercs[merc].id)
// MERC_manage_force_tasks(int_to_enum(MMF_MISSION_MERC_FLAGS,merc))
// endif
// endfor
return false
endfunc
proc MERC_manage_combat()
if isentityalive(mike_ped())
float fdefdist = get_distance_between_coords(get_entity_coords(mike_ped()),<<-116, -2366, 12>>)
boat_section section = boat_front
if get_distance_between_coords(get_entity_coords(mike_ped()),<<-154, -2366, 12>>) < fdefdist
fdefdist = get_distance_between_coords(get_entity_coords(mike_ped()),<<-154, -2366, 12>>)
section = boat_mid1
endif
if get_distance_between_coords(get_entity_coords(mike_ped()),<<-186, -2366, 12>>) < fdefdist
fdefdist = get_distance_between_coords(get_entity_coords(mike_ped()),<<-186, -2366, 12>>)
section = boat_mid2
endif
if get_distance_between_coords(get_entity_coords(mike_ped()),<<-223, -2365, 12>>) < fdefdist
fdefdist = get_distance_between_coords(get_entity_coords(mike_ped()),<<-223, -2365, 12>>)
section = boat_back
endif
float fdist
int merc
for merc = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[merc].id)
if not mercs[merc].bzombie
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
IF GET_PED_COMBAT_MOVEMENT( mercs[merc].id ) = CM_DEFENSIVE
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
SET_PED_COMBAT_MOVEMENT( mercs[merc].id, CM_WILLADVANCE )
ENDIF
IF GET_PED_COMBAT_RANGE( mercs[merc].id ) != CR_NEAR
SET_PED_COMBAT_RANGE( mercs[merc].id, CR_NEAR )
ENDIF
if not DOES_BLIP_EXIST( mercs[merc].blip )
mercs[merc].blip = create_blip_for_ped( mercs[merc].id, TRUE )
else
SET_BLIP_SHOW_CONE( mercs[merc].blip, FALSE )
endif
//@RJP Make sure no peds are in combat with franklin if player is Michael
if PLAYER_PED_ID() = mike_ped()
if IS_PED_IN_COMBAT( mercs[merc].id, frank_ped() )
CLEAR_PED_TASKS( mercs[merc].id )
endif
endif
if not is_ped_in_combat(mercs[merc].id)
//@RJP Simplifying merc combat AI to go to Mike and enter combat
switch section
case boat_front
// set_ped_sphere_defensive_area(mercs[merc].id,mercs[merc].vdef1,2)
fdist = get_distance_between_coords(get_entity_coords(mercs[merc].id),mercs[merc].vdef1)
if fdist > 35
or get_distance_between_coords(get_entity_coords(mercs[merc].id), GET_ENTITY_COORDS( mike_ped())) > 35
if get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != performing_task
and get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != WAITING_TO_START_TASK
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
task_follow_nav_mesh_to_coord(mercs[merc].id,mercs[merc].vdef1,pedmove_run,default_time_never_warp)
endif
//special case fix for enemy number 18, bug B*1858582
//if the ped reaches his destination but is still further away from michael than 35 go to combat
IF ( merc = enum_to_int(merc18_c4_4) )
if fdist < 2
and get_distance_between_coords(get_entity_coords(mercs[merc].id), GET_ENTITY_COORDS( mike_ped())) > 35
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
task_combat_ped(mercs[merc].id,mike_ped(), COMBAT_PED_DISABLE_AIM_INTRO)
ENDIF
ENDIF
else
if not is_ped_in_combat(mercs[merc].id,mike_ped())
//@RJP release ped to AI for combat
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
task_combat_ped(mercs[merc].id,mike_ped(), COMBAT_PED_DISABLE_AIM_INTRO)
endif
endif
break
case boat_mid1
// set_ped_sphere_defensive_area(mercs[merc].id,mercs[merc].vdef2,2)
fdist = get_distance_between_coords(get_entity_coords(mercs[merc].id),mercs[merc].vdef2)
if fdist > 35
or get_distance_between_coords(get_entity_coords(mercs[merc].id),GET_ENTITY_COORDS( mike_ped())) > 35
if get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord)!= performing_task
and get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != WAITING_TO_START_TASK
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
task_follow_nav_mesh_to_coord(mercs[merc].id,mercs[merc].vdef2,pedmove_run,default_time_never_warp)
endif
else
if not is_ped_in_combat(mercs[merc].id,mike_ped())
//@RJP release ped to AI for combat
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
task_combat_ped(mercs[merc].id,mike_ped(), COMBAT_PED_DISABLE_AIM_INTRO)
endif
endif
break
case boat_mid2
// set_ped_sphere_defensive_area(mercs[merc].id,mercs[merc].vdef3,2) // other wise back to decent location.
fdist = get_distance_between_coords(get_entity_coords(mercs[merc].id),mercs[merc].vdef3)
if fdist > 35
or get_distance_between_coords(get_entity_coords(mercs[merc].id),GET_ENTITY_COORDS( mike_ped())) > 35
if get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord)!= performing_task
and get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != WAITING_TO_START_TASK
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
task_follow_nav_mesh_to_coord(mercs[merc].id,mercs[merc].vdef3,pedmove_run,default_time_never_warp)
endif
else
if not is_ped_in_combat(mercs[merc].id,mike_ped())
//@RJP release ped to AI for combat
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
task_combat_ped(mercs[merc].id,mike_ped(), COMBAT_PED_DISABLE_AIM_INTRO)
endif
endif
break
case boat_back
// set_ped_sphere_defensive_area(mercs[merc].id,mercs[merc].vdef4,2) // other wise back to decent location.
fdist = get_distance_between_coords(get_entity_coords(mercs[merc].id),mercs[merc].vdef4)
if fdist > 35
or get_distance_between_coords(get_entity_coords(mercs[merc].id),GET_ENTITY_COORDS( mike_ped())) > 35
if get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord)!= performing_task
and get_script_task_status(mercs[merc].id,script_task_follow_nav_mesh_to_coord) != WAITING_TO_START_TASK
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
task_follow_nav_mesh_to_coord(mercs[merc].id,mercs[merc].vdef4,pedmove_run,default_time_never_warp)
endif
else
if not is_ped_in_combat(mercs[merc].id,mike_ped())
//@RJP release ped to AI for combat
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
task_combat_ped(mercs[merc].id,mike_ped(), COMBAT_PED_DISABLE_AIM_INTRO)
endif
endif
break
endswitch
endif
endif
endif
endfor
endif
endproc
proc MERC_react_to_sniper_fire(INT i)
SWITCH i%2
CASE 0
task_play_anim(null, "missheistdocks2a@crouch", "enter_crouch_a", normal_blend_in, normal_blend_out)
task_play_anim(null, "missheistdocks2a@crouch", "crouching_idle_a", normal_blend_in, REALLY_SLOW_BLEND_OUT)
BREAK
CASE 1
task_play_anim(null,"missheistdocks2a@alert",sduckanim,normal_blend_in,NORMAL_BLEND_OUT)
BREAK
ENDSWITCH
TASK_COMBAT_PED(null, frank_ped())
endproc
proc MERC_do_reaction()
merc_situation_enum current_merc_rs
current_merc_rs = ms_sit_none
IF NOT IS_GAMEPLAY_CAM_RENDERING()
EXIT
ENDIF
int i
int iDeadMerc
WEAPON_TYPE eCurrentWeaponType
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[i].id)
and isentityalive(mike_ped())
and isentityalive(frank_ped())
if mercs[i].bStealthKill
EXIT
endif
if not is_ped_in_combat(mercs[i].id)
if current_merc_rs = MS_SIT_ATTACKED
current_merc_rs = ms_sit_none
endif
if has_entity_been_damaged_by_entity(mercs[i].id,mike_ped())
current_merc_rs = MS_SIT_ATTACKED
endif
//--------------------michael seen reaction--------------------
if current_merc_rs = ms_sit_mike_seen
current_merc_rs = ms_sit_none
endif
//@RJP can_ped_see_hated_ped breaks for peds with without blocking of non-temp events
if can_ped_see_hated_ped(mercs[i].id,mike_ped())
or CAN_PED_HEAR_PLAYER( PLAYER_ID(), mercs[i].id )
// or has_entity_been_damaged_by_entity(mercs[i].id,mike_ped())
CPRINTLN( DEBUG_MISSION,"ms_sit_mike_seen: merc ",(i+1) )
current_merc_rs = ms_sit_mike_seen
endif
//-------------------- shot heard ------------------------------
if current_merc_rs = ms_sit_shot_heard
current_merc_rs = ms_sit_none
endif
if mission_stage > ENUM_TO_INT(msf_1_snipe_gaurds)
if current_merc_rs = ms_sit_none
if has_ped_received_event(mercs[i].id,event_shot_fired)
or has_ped_received_event(mercs[i].id,EVENT_SHOCKING_GUNSHOT_FIRED)
// or has_ped_received_event(mercs[i].id,event_shout_target_position)
current_merc_rs = ms_sit_shot_heard
endif
IF NOT IS_PED_CURRENT_WEAPON_SILENCED(MIKE_PED())
IF GET_CURRENT_PED_WEAPON(MIKE_PED(), eCurrentWeaponType)
IF IS_PED_SHOOTING(MIKE_PED())
IF (eCurrentWeaponType != WEAPONTYPE_STICKYBOMB)
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: MICHAEL IS SHOOTING A NON_SILENCED WEAPON" )
IF VDIST2(GET_ENTITY_COORDS(mercs[i].id), GET_ENTITY_COORDS(MIKE_PED())) < 2025 //45 m, enough for ped on stairs to hear unsilenced weapon
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: hearing unsilenced weapon: merc ",(i+1) )
current_merc_rs = ms_sit_shot_heard
ENDIF
ELSE
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: MICHAEL IS SHOOTING A WEAPONTYPE_STICKYBOMB" )
ENDIF
ENDIF
ENDIF
ENDIF
endif
endif
//--------near bullet miss from micheal and franklin-------------
if current_merc_rs = ms_sit_bullet_ping
current_merc_rs = ms_sit_none
endif
if current_merc_rs = ms_sit_none
or current_merc_rs = ms_sit_shot_heard
if player_ped_id() = frank_ped()
//@RJP tweaking these values so peds react to bullets greater than 2 meters away
// if is_sniper_bullet_in_area(get_offset_from_entity_in_world_coords(mercs[i].id,<<-2,-2,-1>>),get_offset_from_entity_in_world_coords(mercs[i].id,<<2,2,1>>))
if is_sniper_bullet_in_area(get_offset_from_entity_in_world_coords(mercs[i].id,<<-5,-5,-1>>),get_offset_from_entity_in_world_coords(mercs[i].id,<<5,5,1>>))
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: merc ",(i+1) )
current_merc_rs = ms_sit_bullet_ping
if bMikeAsksForHelp
if IS_SAFE_TO_START_CONVERSATION()
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MISS", CONV_PRIORITY_MEDIUM )
endif
endif
endif
elif player_ped_id() = mike_ped()
if bFrankFired
current_merc_rs = ms_sit_none
else
if has_ped_received_event(mercs[i].id,event_shot_fired_bullet_impact)
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: merc ",(i+1) )
current_merc_rs = ms_sit_bullet_ping
endif
endif
endif
endif
////-------------------- body found ------------------------------
VECTOR vDeadBody
if current_merc_rs = ms_sit_dead_body
current_merc_rs = ms_sit_none
endif
if mercs[i].currentsit = ms_sit_none
if current_merc_rs = ms_sit_none
if has_ped_received_event(mercs[i].id,EVENT_ACQUAINTANCE_PED_DEAD)
current_merc_rs = ms_sit_dead_body
endif
int j
//@RJP iterate over dead mercs to see if merc can see a dead body
MMF_MISSION_MERC_FLAGS startMerc
IF mission_stage < ENUM_TO_INT(msf_2_first_bomb)
startMerc = merc3_C4_2
ELSE
startMerc = merc1_start
ENDIF
for j = startMerc to merc18_c4_4
if DOES_ENTITY_EXIST( mercs[j].id )
AND NOT (j = ENUM_TO_INT(MERC16_C4_4))
if IS_PED_INJURED( mercs[j].id )
vDeadBody = GET_ENTITY_COORDS(mercs[j].id, FALSE)
if vDeadBody.z < 10.5
and vDeadBody.z > 8.3
or IS_ENTITY_IN_TRIGGER_BOX(mercs[i].id, sTriggerBox[TB_BOAT_BOW_UPPER_AREA])
if GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS(mercs[i].id), vDeadBody ) < 15
if HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT( mercs[i].id, mercs[j].id )
current_merc_rs = ms_sit_dead_body
mercs[i].bSpottedDead = TRUE
iDeadMerc = j
endif
endif
endif
elif IS_PED_SHOOTING( mercs[j].id )
IF VDIST2( GET_ENTITY_COORDS(mercs[j].id), GET_ENTITY_COORDS(mercs[i].id) ) < 900 //30 m
IF NOT IS_ENTITY_OCCLUDED( mercs[i].id )
CPRINTLN( DEBUG_MISSION,"ms_sit_shot_heard: hearing another guard's weapon: merc ",(i+1) )
current_merc_rs = ms_sit_shot_heard
ENDIF
ENDIF
endif
endif
endfor
endif
endif
//---------------------------------------------------------------
if current_merc_rs <> ms_sit_none
if mercs[i].currentsit <> current_merc_rs
ireactionlength = -1
clear_sequence_task(seq)
open_sequence_task(seq)
switch current_merc_rs
case MS_SIT_ATTACKED
set_ped_seeing_range(mercs[i].id,16)
SET_PED_HEARING_RANGE(mercs[i].id,16)
task_combat_ped(null,mike_ped())
break
case ms_sit_mike_seen
//add timer in here for how long they have seen mike
ireactionlength = get_random_int_in_range(10000, 15000)
set_ped_seeing_range(mercs[i].id,16)
SET_PED_HEARING_RANGE(mercs[i].id,16)
TASK_AIM_GUN_AT_ENTITY(NULL, MIKE_PED(), 1500)
task_combat_ped(null,mike_ped())
CPRINTLN( DEBUG_MISSION, "ms_sit_mike_seen: merc ",(i+1))
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
break
case ms_sit_shot_heard
set_ped_seeing_range(mercs[i].id,16)
SET_PED_HEARING_RANGE(mercs[i].id,16)
ireactionlength = get_random_int_in_range(30000, 60000)
task_aim_gun_at_entity(null,mike_ped(),1000)
task_go_to_coord_while_aiming_at_coord(null,get_entity_coords(mike_ped()),get_entity_coords(mike_ped()),PEDMOVE_RUN,false,1)
CPRINTLN( DEBUG_MISSION,"ms_sit_shot_heard: merc ",(i+1) )
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
break
case MS_SIT_DEAD_BODY
//@RJP task merc to go to dead body and look around
CPRINTLN( DEBUG_MISSION, "MERC_do_reaction: merc, ", i, " has spotted a dead body." )
set_ped_seeing_range(mercs[i].id,16)
SET_PED_HEARING_RANGE(mercs[i].id,16)
SET_PED_ALERTNESS( mercs[i].id, AS_VERY_ALERT )
TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD( null, GET_ENTITY_COORDS( mercs[iDeadMerc].id, FALSE ), GET_ENTITY_COORDS( mercs[iDeadMerc].id, FALSE ), PEDMOVE_RUN, FALSE, 3.0 )
// TASK_FOLLOW_NAV_MESH_TO_COORD( null, GET_ENTITY_COORDS( mercs[iDeadMerc].id, FALSE ), PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP, 3.0 )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<<GET_RANDOM_INT_IN_RANGE(0,10),GET_RANDOM_INT_IN_RANGE(0,10),0>>), GET_RANDOM_INT_IN_RANGE(2000,2500) )
ireactionlength = get_random_int_in_range(10000,15000)
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
break
case ms_sit_bullet_ping
if player_ped_id() = mike_ped()
//inital duck from shot
//@RJP Removing initial animation if player is Michael, prevents peds from looking around all confused, and not going into combat with Michael even
// if he is standing right there until the anim finishes
// task_play_anim(null,"missheistdocks2a@alert",sduckanim,normal_blend_in,NORMAL_BLEND_OUT)
set_ped_seeing_range(mercs[i].id,16)
SET_PED_HEARING_RANGE(mercs[i].id,16)
ireactionlength = get_random_int_in_range(30000, 60000)
task_aim_gun_at_entity(null,mike_ped(),1000)
task_go_to_coord_while_aiming_at_coord(null,get_entity_coords(mike_ped()),get_entity_coords(mike_ped()),pedmove_walk,false,1)
println("ms_sit_bullet_ping: merc ",(i+1))
CPRINTLN( DEBUG_MISSION,"ms_sit_bullet_ping: merc ",(i+1) )
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
else
switch mercs[i].currentaction
case ga_aim_at_sniper
MERC_react_to_sniper_fire(i)
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
break
case ga_find_cover
//inital duck from shot
mercs[i].currentaction = ga_aim_at_sniper
MERC_react_to_sniper_fire(i)
ireactionlength = get_random_int_in_range(5000, 6000)
if not DOES_BLIP_EXIST(mercs[i].blip)
mercs[i].blip = CREATE_BLIP_FOR_PED(mercs[i].id,true)
endif
//@RJP we should print a line making players aware that something happened and they should kill the mercs before alarm is raised
if not mercs[i].bPrintHelp
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED( "DCKH_QUICK" )
print_help("DCKH_QUICK")
endif
mercs[i].bPrintHelp = true
endif
// if not bQuickHelp
// print_help("DCKH_QUICK")
// bQuickHelp = true
// endif
break
endswitch
endif
break
endswitch
close_sequence_task(seq)
if isentityalive(mercs[i].id)
println("BEFORE CLEAR TASKS tasking merc ",i+1," reaction. ped health: ",GET_ENTITY_HEALTH(mercs[i].id))
// CLEAR_PED_TASKS_IMMEDIATELY(mercs[i].id)
CLEAR_PED_TASKS( mercs[i].id )
println("AFTER CLEAR TASKS tasking merc ",i+1," reaction. ped health: ",GET_ENTITY_HEALTH(mercs[i].id))
task_perform_sequence(mercs[i].id,seq)
println("AFTER TASK_PERFORM_SEQUENCE tasking merc ",i+1," reaction. ped health: ",GET_ENTITY_HEALTH(mercs[i].id))
endif
mercs[i].currentsit = current_merc_rs
if ireactionlength >= 0
mercs[i].irevertactiontime = get_game_timer() + ireactionlength
else
mercs[i].irevertactiontime = -1
endif
endif
else
if mercs[i].irevertactiontime >=0
if get_game_timer() >= mercs[i].irevertactiontime
if mercs[i].currentaction != ga_aim_at_sniper
if not is_ped_injured(mercs[i].id)
TASK_MERC_TO_DEFAULT_PATROL_SEQUENCE( i )
println("revert: merc ",(i+1))
endif
endif
mercs[i].currentsit = ms_sit_none
mercs[i].irevertactiontime = -1
endif
endif
endif
endif
endif
endfor
endproc
//@RJP handles mercs in cars advancing
PROC MANAGE_CAR_MERC_COMBAT( INT i )
//Exit early if the merc is dead
IF NOT isentityalive( mercs[i].id )
EXIT
ENDIF
SWITCH iCarMercDiag
CASE 0
IF IS_SAFE_TO_START_CONVERSATION()
ADD_PED_FOR_DIALOGUE(convo_struct,8,mercs[i].id,"MERRYWEATHER5",true)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MWPOS5", CONV_PRIORITY_MEDIUM )
iCarMercDiag++
ENDIF
BREAK
CASE 1
IF IS_SAFE_TO_START_CONVERSATION()
ADD_PED_FOR_DIALOGUE(convo_struct,8,mercs[i].id,"MERRYWEATHER5",true)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_MWGO5", CONV_PRIORITY_MEDIUM )
iCarMercDiag++
ENDIF
BREAK
CASE 2
IF IS_SAFE_TO_START_CONVERSATION()
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_SHOTAT", CONV_PRIORITY_MEDIUM )
iCarMercDiag++
ENDIF
BREAK
ENDSWITCH
//Exit early if ped is in a vehicle
IF IS_PED_IN_ANY_VEHICLE( mercs[i].id )
EXIT
ENDIF
IF NOT IS_PED_IN_COMBAT( mercs[i].id )
TASK_COMBAT_PED( mercs[i].id, frank_ped() )
ENDIF
SWITCH mercs[i].iAdvanceState
CASE 0
IF IS_ENTITY_AT_COORD( mercs[i].id, mercs[i].vdef3, <<4,4,4>> )
IF mercs[i].iAdvanceTimer > 0
IF ( GET_GAME_TIMER()-mercs[i].iAdvanceTimer ) > mercs[i].iAdvanceTime1
SET_PED_SPHERE_DEFENSIVE_AREA( mercs[i].id, mercs[i].vdef2, 2, TRUE )
mercs[i].iAdvanceTimer = 0
mercs[i].iAdvanceState++
ENDIF
ELSE
mercs[i].iAdvanceTimer = GET_GAME_TIMER()
ENDIF
ELSE
SET_PED_SPHERE_DEFENSIVE_AREA( mercs[i].id, mercs[i].vdef3, 2, TRUE )
ENDIF
BREAK
CASE 1
//end state
BREAK
ENDSWITCH
ENDPROC
proc manage_car_crash_stuff()
if isentityalive(vehs[mvf_merc1].id)
if is_playback_going_on_for_vehicle(vehs[mvf_merc1].id)
if not isentityalive(mercs[merc19_car1].id)
stop_playback_recorded_vehicle(vehs[mvf_merc1].id)
if isentityalive(mercs[merc20_car1].id)
set_ped_sphere_defensive_area(mercs[merc20_car1].id,<< -165.7794, -2421.9829, 5.6480 >>,2)
endif
if isentityalive(mercs[merc22_car1].id)
set_ped_sphere_defensive_area(mercs[merc22_car1].id,<< -163.9438, -2416.1736, 5.4341 >>,2)
endif
else
if is_vehicle_tyre_burst(vehs[mvf_merc1].id,sc_wheel_car_front_left)
or is_vehicle_tyre_burst(vehs[mvf_merc1].id,sc_wheel_car_rear_left)
stop_playback_recorded_vehicle(vehs[mvf_merc1].id)
open_sequence_task(seq)
task_vehicle_temp_action(null,vehs[mvf_merc1].id,tempact_swerveleft,4000)
close_sequence_task(seq)
task_perform_sequence(mercs[merc19_car1].id,seq)
clear_sequence_task(seq)
if isentityalive(mercs[merc20_car1].id)
set_ped_sphere_defensive_area(mercs[merc20_car1].id,<< -165.7794, -2421.9829, 5.6480 >>,2)
endif
if isentityalive(mercs[merc22_car1].id)
set_ped_sphere_defensive_area(mercs[merc22_car1].id,<< -163.9438, -2416.1736, 5.4341 >>,2)
endif
elif is_vehicle_tyre_burst(vehs[mvf_merc1].id,sc_wheel_car_front_right)
or is_vehicle_tyre_burst(vehs[mvf_merc1].id,sc_wheel_car_rear_right)
stop_playback_recorded_vehicle(vehs[mvf_merc1].id)
open_sequence_task(seq)
task_vehicle_temp_action(null,vehs[mvf_merc1].id,tempact_swerveright,4000)
close_sequence_task(seq)
task_perform_sequence(mercs[merc19_car1].id,seq)
clear_sequence_task(seq)
if isentityalive(mercs[merc20_car1].id)
set_ped_sphere_defensive_area(mercs[merc20_car1].id,<< -165.7794, -2421.9829, 5.6480 >>,2)
endif
if isentityalive(mercs[merc22_car1].id)
set_ped_sphere_defensive_area(mercs[merc22_car1].id,<< -163.9438, -2416.1736, 5.4341 >>,2)
endif
endif
endif
// else
// if does_entity_exist(vehs[mvf_merc1].id)
// if has_entity_collided_with_anything(vehs[mvf_merc1].id)
// and not is_vehicle_stopped(vehs[mvf_merc1].id)
// speed = get_entity_speed(vehs[mvf_merc1].id)
// if speed > 5
// add_explosion(get_entity_coords(vehs[mvf_merc1].id),exp_tag_car)
// endif
// endif
// endif
endif
endif
if isentityalive(vehs[mvf_merc2].id)
if is_playback_going_on_for_vehicle(vehs[mvf_merc2].id)
if not isentityalive(mercs[merc23_car2].id)
stop_playback_recorded_vehicle(vehs[mvf_merc2].id)
if isentityalive(mercs[merc25_car2].id)
set_ped_sphere_defensive_area(mercs[merc25_car2].id,<< -112.3173, -2426.4836, 5.3646 >>,2)
endif
else
if is_vehicle_tyre_burst(vehs[mvf_merc2].id,sc_wheel_car_front_left)
or is_vehicle_tyre_burst(vehs[mvf_merc2].id,sc_wheel_car_rear_left)
stop_playback_recorded_vehicle(vehs[mvf_merc2].id)
open_sequence_task(seq)
task_vehicle_temp_action(null,vehs[mvf_merc2].id,tempact_swerveleft,4000)
close_sequence_task(seq)
task_perform_sequence(mercs[merc23_car2].id,seq)
clear_sequence_task(seq)
if isentityalive(mercs[merc23_car2].id)
set_ped_sphere_defensive_area(mercs[merc23_car2].id,<< -105.7819, -2427.7837, 5.8586 >>,2)
endif
if isentityalive(mercs[merc25_car2].id)
set_ped_sphere_defensive_area(mercs[merc25_car2].id,<< -112.3173, -2426.4836, 5.3646 >>,2)
endif
elif is_vehicle_tyre_burst(vehs[mvf_merc2].id,sc_wheel_car_front_right)
or is_vehicle_tyre_burst(vehs[mvf_merc2].id,sc_wheel_car_rear_right)
stop_playback_recorded_vehicle(vehs[mvf_merc2].id)
open_sequence_task(seq)
task_vehicle_temp_action(null,vehs[mvf_merc2].id,tempact_swerveright,4000)
close_sequence_task(seq)
task_perform_sequence(mercs[merc23_car2].id,seq)
clear_sequence_task(seq)
if isentityalive(mercs[merc23_car2].id)
set_ped_sphere_defensive_area(mercs[merc23_car2].id,<< -105.7819, -2427.7837, 5.8586 >>,2)
endif
if isentityalive(mercs[merc25_car2].id)
set_ped_sphere_defensive_area(mercs[merc25_car2].id,<< -112.3173, -2426.4836, 5.3646 >>,2)
endif
endif
endif
// else
// if does_entity_exist(vehs[mvf_merc2].id)
// if has_entity_collided_with_anything(vehs[mvf_merc2].id)
// and not is_vehicle_stopped(vehs[mvf_merc2].id)
// speed = get_entity_speed(vehs[mvf_merc2].id)
// if speed > 5
// add_explosion(get_entity_coords(vehs[mvf_merc2].id),exp_tag_car)
// endif
// endif
// endif
endif
endif
// //****temp******
// if does_entity_exist(vehs[mvf_merc1].id)
// if has_entity_been_damaged_by_entity(vehs[mvf_merc1].id,frank_ped())
// set_vehicle_tyre_burst(vehs[mvf_merc1].id,sc_wheel_car_front_right)
// endif
// endif
// if does_entity_exist(vehs[mvf_merc2].id)
// if has_entity_been_damaged_by_entity(vehs[mvf_merc2].id,frank_ped())
// set_vehicle_tyre_burst(vehs[mvf_merc2].id,sc_wheel_car_front_right)
// endif
// endif
//*********
endproc
//@RJP blip enemies on the boat when sneaking
proc MICHAEL_SNEAKING_ENEMY_BLIP_MANAGER()
INT i
BOOL bBlipMerc[MMF_NUM_OF_MERCS]
//@RJP blip enemies who have been alerted in some way
FOR i = 2 TO 17
IF mercs[i].bPrintHelp
bBlipMerc[i] = TRUE
ENDIF
ENDFOR
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_UPPER_AREA] )
FOR i = 2 TO 3
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_CONTAINERS_AREA] )
FOR i = 2 TO 6
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_FIRST_MAST_AREA] )
FOR i = 2 TO 6
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_1_AREA] )
FOR i = 3 TO 8
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_2_AREA] )
FOR i = 3 TO 10
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_MID_CONTAINERS_3_AREA] )
FOR i = 8 TO 11
bBlipMerc[i] = TRUE
ENDFOR
bBlipMerc[13] = TRUE
bBlipMerc[14] = TRUE
bBlipMerc[15] = TRUE
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_SECOND_MAST_AREA] )
FOR i = 9 TO 11
bBlipMerc[i] = TRUE
ENDFOR
bBlipMerc[13] = TRUE
bBlipMerc[14] = TRUE
bBlipMerc[15] = TRUE
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_STERN_CONTAINERS_AREA] )
FOR i = 9 TO 16
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
IF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_STERN_AREA] )
FOR i = 12 TO 17
bBlipMerc[i] = TRUE
ENDFOR
ENDIF
FOR i = merc3_C4_2 TO merc18_c4_4
IF bBlipMerc[i]
IF isentityalive(mercs[i].id)
IF NOT DOES_BLIP_EXIST( mercs[i].blip )
mercs[i].blip = CREATE_BLIP_FOR_PED( mercs[i].id, TRUE )
ELSE
IF PLAYER_PED_ID() = mike_ped()
SET_BLIP_SHOW_CONE( mercs[i].blip, TRUE )
ELSE
SET_BLIP_SHOW_CONE( mercs[i].blip, FALSE )
ENDIF
ENDIF
ELSE
safe_remove_blip( mercs[i].blip )
ENDIF
ELSE
safe_remove_blip( mercs[i].blip )
ENDIF
ENDFOR
endproc
PROC RELEASE_ZOMBIE_TO_COMBAT( MMF_MISSION_MERC_FLAGS merc )
IF NOT isentityalive( mercs[merc].id )
EXIT
ENDIF
IF (GET_PED_COMBAT_MOVEMENT( mercs[merc].id ) = CM_DEFENSIVE)
set_ped_combat_movement( mercs[merc].id, CM_WILLADVANCE )
SET_PED_COMBAT_ATTRIBUTES( mercs[merc].id, CA_CAN_CHARGE, TRUE )
REMOVE_PED_DEFENSIVE_AREA( mercs[merc].id )
ENDIF
IF NOT IS_PED_IN_COMBAT( mercs[merc].id )
IF isentityalive( mike_ped() )
TASK_COMBAT_PED( mercs[merc].id, mike_ped() )
ENDIF
ENDIF
ENDPROC
PROC MANAGE_ALARM_EXTRA_GUARDS()
INT i
IF NOT c4[C4_1_first_mast].bPlanted
AND IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_BOW_UPPER_AREA] )
IF iBomb2Spawned < 2
for i = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if not DOES_ENTITY_EXIST(mercs[i].id)
SWITCH iBomb2Spawned
CASE 0
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-129.0482, -2361.1956, 8.3191>>, 356.6929, <<-128.6367, -2357.4873, 8.3191>> )
mercsBombArea2[iBomb2Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb2Spawned ++
ENDIF
BREAK
CASE 1
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-128.9855, -2362.3123, 8.3191>>, 189.3570, <<-128.6614, -2373.9871, 8.3191>> )
mercsBombArea2[iBomb2Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb2Spawned ++
ENDIF
BREAK
ENDSWITCH
endif
endfor
ENDIF
ELIF IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_FIRST_MAST_AREA] )
REPEAT iBomb2Spawned i
RELEASE_ZOMBIE_TO_COMBAT( mercsBombArea2[int_to_enum(mmf_mission_merc_flags,i)] )
ENDREPEAT
ENDIF
IF NOT c4[c4_2_second_mast].bplanted
AND NOT IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_SECOND_MAST_AREA] )
AND NOT IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_STERN_CONTAINERS_AREA] )
AND NOT IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_STERN_AREA] )
IF iBomb3Spawned < 3
for i = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if not DOES_ENTITY_EXIST(mercs[i].id)
SWITCH iBomb3Spawned
CASE 0
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-189.0334, -2360.9258, 8.3191>>, 7.7789, <<-188.0162, -2373.9033, 8.3191>> )
mercsBombArea3[iBomb3Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb3Spawned ++
ENDIF
BREAK
CASE 1
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-188.9252, -2362.5430, 8.3191>>, 166.6817, <<-188.0314, -2368.5366, 8.3191>> )
mercsBombArea3[iBomb3Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb3Spawned ++
ENDIF
BREAK
CASE 2
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-190.5101, -2362.8284, 8.3191>>, 150.3902, <<-178.0869, -2355.4004, 8.3191>> )
mercsBombArea3[iBomb3Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb3Spawned ++
ENDIF
BREAK
ENDSWITCH
endif
endfor
ENDIF
ELSE
REPEAT iBomb3Spawned i
RELEASE_ZOMBIE_TO_COMBAT( mercsBombArea3[int_to_enum(mmf_mission_merc_flags,i)] )
ENDREPEAT
ENDIF
IF NOT IS_ENTITY_IN_TRIGGER_BOX( mike_ped(), sTriggerBox[TB_BOAT_STERN_AREA] )
IF iBomb4Spawned < 3
for i = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if not DOES_ENTITY_EXIST(mercs[i].id)
SWITCH iBomb4Spawned
CASE 0
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-221.0331, -2376.2307, 8.3192>>, 236.8918, <<-209.0507, -2376.4771, 8.3192>> )
mercsBombArea4[iBomb4Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb4Spawned ++
ENDIF
BREAK
CASE 1
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-222.0928, -2375.8884, 12.3329>>, 188.8545, <<-221.2283, -2377.7432, 12.3329>> )
mercsBombArea4[iBomb4Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb4Spawned ++
ENDIF
BREAK
CASE 2
IF createzombiemercenary(int_to_enum(mmf_mission_merc_flags,i), <<-221.7503, -2355.7732, 8.3192>>, 356.4612, <<-207.1320, -2355.4556, 8.3191>> )
mercsBombArea4[iBomb4Spawned] = int_to_enum(mmf_mission_merc_flags,i)
iBomb4Spawned ++
ENDIF
BREAK
ENDSWITCH
endif
endfor
ENDIF
ELSE
REPEAT iBomb4Spawned i
RELEASE_ZOMBIE_TO_COMBAT( mercsBombArea4[int_to_enum(mmf_mission_merc_flags,i)] )
ENDREPEAT
ENDIF
ENDPROC
PROC MANAGE_PLAYER_SWITCH_LOAD_SCENES()
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
CPRINTLN( DEBUG_MISSION, "STARTING LOAD SCENE OF FRANKLIN ON VANTAGE POINT" )
NEW_LOAD_SCENE_START_SPHERE(<< -143.8203, -2488.2612, 43.4412 >>, 18)
ENDIF
ENDPROC
proc manage_stealth_killed_merc(merc_struct &merc)
if does_entity_exist(merc.id) and not is_entity_dead(merc.id)
if is_synchronized_scene_running(iStealthKillSyncScene)
if is_entity_playing_anim(merc.id, "missheistdocks2a","stabbing_guard_guard", anim_synced_scene)
if get_synchronized_scene_phase(iStealthKillSyncScene) > 0.99
detach_synchronized_scene(iStealthKillSyncScene)
set_entity_health(merc.id, 0)
bkilledbybuddy = true
istealthkill = 0
println(get_this_script_name(), ": Killing off merc playing stealth kill sync scene anim.")
endif
endif
endif
endif
endproc
proc manage_bomb_stages()
// stage flow stuff
//--------------------------------------------blips-----------------------------------------------
if player_ped_id() = frank_ped()
safe_remove_blip(c4[c4_0_front_of_ship].blip)
safe_remove_blip(c4[c4_1_first_mast].blip)
safe_remove_blip(c4[c4_2_second_mast].blip)
else
//@RJP only blip one bomb location at a time
if mission_stage = ENUM_TO_INT(msf_2_first_bomb)
if not c4[c4_0_front_of_ship].bplanted
if not does_blip_exist(c4[c4_0_front_of_ship].blip)
c4[c4_0_front_of_ship].blip = create_blip_for_coord(c4[c4_0_front_of_ship].exppos)
endif
else
safe_remove_blip(c4[c4_0_front_of_ship].blip)
endif
else
safe_remove_blip(c4[c4_0_front_of_ship].blip)
endif
if mission_stage = ENUM_TO_INT(msf_3_second_bomb)
if not c4[c4_1_first_mast].bplanted
if not does_blip_exist(c4[c4_1_first_mast].blip)
c4[c4_1_first_mast].blip = create_blip_for_coord(c4[c4_1_first_mast].exppos)
endif
else
safe_remove_blip(c4[c4_1_first_mast].blip)
endif
else
safe_remove_blip(c4[c4_1_first_mast].blip)
endif
if mission_stage = ENUM_TO_INT(msf_4_third_bomb)
if not c4[c4_2_second_mast].bplanted
if not does_blip_exist(c4[c4_2_second_mast].blip)
c4[c4_2_second_mast].blip = create_blip_for_coord(c4[c4_2_second_mast].exppos)
endif
else
safe_remove_blip(c4[c4_2_second_mast].blip)
endif
else
safe_remove_blip(c4[c4_2_second_mast].blip)
endif
endif
//
//check if alarm should be raised + delay on setting off alarm
int i
int timer = 5000
if not balarmtriggered
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[i].id)
if is_ped_in_combat(mercs[i].id,mike_ped())
mercs[i].bincombat = true
timer = 5000
elif mercs[i].currentaction = ga_aim_at_sniper
mercs[i].bincombat = true
timer = 15000
//@RJP check alarm if mercs have spotted a dead merc
elif mercs[i].bSpottedDead
mercs[i].bincombat = true
timer = 15000
else
mercs[i].bincombat = false
endif
else
mercs[i].bincombat = false
endif
endfor
bincombat = false
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if mercs[i].bincombat
and isentityalive(mercs[i].id)
bincombat = true
endif
endfor
if bincombat
if not binitialisedelayalr
icombattimer = get_game_timer()
binitialisedelayalr = true
else
if get_game_timer() - icombattimer > timer
IF PLAYER_PED_ID() = mike_ped()
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_ALRF_NS", CONV_PRIORITY_MEDIUM )
ELSE
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_ALRM_NS", CONV_PRIORITY_MEDIUM )
ENDIF
INFORM_MISSION_STATS_OF_INCREMENT( DH2A_NO_ALARMS )
CPRINTLN( DEBUG_MISSION, "DH2A_NO_ALARMS incremented to 1" )
balarmtriggered = true
endif
endif
else
binitialisedelayalr = false
endif
endif
// if not b_early_alarm_streamed
// if prepare_music_event("dh2a_early_alarm")
// b_early_alarm_streamed = true
// endif
// endif
//all combat michael if alarm set off.
if balarmtriggered
if balarminitialised = false
balarminitialised = true
trigger_music_event("dh2a_early_alarm")
if is_audio_scene_active("dh2a_plant_bombs_scene")
stop_audio_scene("dh2a_plant_bombs_scene")
endif
if is_audio_scene_active("dh2a_sniping_scene")
stop_audio_scene("dh2a_sniping_scene")
endif
if player_ped_id() = frank_ped()
start_audio_scene("dh2a_shootout_sniping_scene")
elif player_ped_id() = mike_ped()
start_audio_scene("dh2a_shootout_scene")
endif
create_conversation(convo_struct,"d2aaud","dh2a_alrm",conv_priority_medium)
// spawn all other bomb areas that the ped hasn't reached yet and set all alarm settings on.
bhotswap = true
hotswap_menu(false,false,true)
if player_ped_id() = mike_ped()
clear_ped_tasks(frank_ped())
else
clear_ped_tasks(mike_ped())
endif
prep_stop_cutscene(true)
destroy_all_cams()
endif
MERC_manage_combat()
//buddy support
if player_ped_id() = frank_ped()
MIKE_manage_combat()
else
FRANK_sniper_support()
set_ped_combat_attributes(mike_ped(), ca_requires_los_to_shoot, false)
safe_remove_blip(peds[mpf_mike].blip)
endif
MANAGE_ALARM_EXTRA_GUARDS()
else //alarm not triggered
//Disable threat engage cover bonus on Michael as per B*1417785
IF PLAYER_PED_ID() = mike_ped()
SET_PED_RESET_FLAG(mike_ped(), PRF_IgnoreThreatEngagePlayerCoverBonus, TRUE)
ENDIF
//@RJP Controls blipping of enemies while Michael is sneaking
MICHAEL_SNEAKING_ENEMY_BLIP_MANAGER()
//@RJP if player is Franklin, give mercs defensive areas that put them on the side of the ship, otherwise remove defensive areas
if isentityalive(frank_ped())
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[i].id)
if PLAYER_PED_ID() = frank_ped()
set_ped_sphere_defensive_area(mercs[i].id,mercs[i].vdeffrank,2)
else
REMOVE_PED_DEFENSIVE_AREA( mercs[i].id )
endif
endif
endfor
endif
//loop patrol waypoint if not in combat or alarm triggered
// if isentityalive(mercs[merc7_c4_2].id)
// and get_is_waypoint_recording_loaded("docksheist2a02")
// if not is_waypoint_playback_going_on_for_ped(mercs[merc7_c4_2].id)
// if not is_ped_in_combat(mercs[merc7_c4_2].id)
// and mercs[merc7_c4_2].iRevertActionTime = -1
// and mercs[merc7_c4_2].currentsit = ms_sit_none
// if IS_ENTITY_AT_COORD(mercs[merc7_C4_2].id,<<-163.53667, -2375.51953, 8.31907>>,<<2,2,2>>)
// task_follow_waypoint_recording(mercs[merc7_c4_2].id,"docksheist2a02",0)
// else
// task_follow_waypoint_recording(mercs[merc7_c4_2].id,"docksheist2a02",0,EWAYPOINT_START_FROM_CLOSEST_POINT)
// endif
// endif
// endif
// endif
// check if the player is looking to stealth kill someone whilst franklin or michael.
if not scamdetails.brun
if player_ped_id() = mike_ped()
FRANK_manage_ai_stealth()
manage_stealth_killed_merc(mercs[merc4_c4_2])
manage_stealth_killed_merc(mercs[merc13_c4_3])
else
IF IS_ANY_MERC_COMBATTING_MIKE()
MIKE_stealth_combat()
ELSE
MIKE_manage_ai_stealth()
ENDIF
endif
endif
endif // end of alarmed triggered check
endproc
FUNC STRING GET_MERRYWEATHER_VOICE_NAME(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "MERRYWEATHER1" BREAK
CASE 1 sRet = "MERRYWEATHER2" BREAK
CASE 2 sRet = "MERRYWEATHER3" BREAK
CASE 3 sRet = "MERRYWEATHER4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
FUNC STRING GET_PATROL_LINE(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "DH2A_MERC3" BREAK
CASE 1 sRet = "DH2A_MERC2" BREAK
CASE 2 sRet = "DH2A_MWPAT3" BREAK
CASE 3 sRet = "DH2A_MERC4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
FUNC STRING GET_HEAR_MIKE_LINE(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "DH2A_MWHEAR1" BREAK
CASE 1 sRet = "DH2A_MWHEAR2" BREAK
CASE 2 sRet = "DH2A_MWHEAR3" BREAK
CASE 3 sRet = "DH2A_MWHEAR4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
FUNC STRING GET_FIND_BODY_LINE(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "DH2A_MWFIND1" BREAK
CASE 1 sRet = "DH2A_MWFIND2" BREAK
CASE 2 sRet = "DH2A_MWFIND3" BREAK
CASE 3 sRet = "DH2A_MWFIND4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
FUNC STRING GET_SEE_MIKE_LINE(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "DH2A_MWSEE1" BREAK
CASE 1 sRet = "DH2A_MWSEE2" BREAK
CASE 2 sRet = "DH2A_MWSEE3" BREAK
CASE 3 sRet = "DH2A_MWSEE4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
FUNC STRING GET_RAISE_ALARM_LINE(INT merc)
STRING sRet
SWITCH merc%4
CASE 0 sRet = "DH2A_MERC1" BREAK
CASE 1 sRet = "DH2A_MERC" BREAK
CASE 2 sRet = "DH2A_ARL3" BREAK
CASE 3 sRet = "DH2A_MWALR4" BREAK
ENDSWITCH
RETURN sRet
ENDFUNC
//Line for merryweather guard raising alarm
proc AUDIO_dialogue_merc_combat()
if bRaisedAlarm
EXIT
endif
int merc
for merc = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if isEntityalive(mercs[merc].id)
if IS_SAFE_TO_START_CONVERSATION()
if mercs[merc].currentsit <> MS_SIT_NONE
ADD_PED_FOR_DIALOGUE( convo_struct, (merc%4+4), mercs[merc].id, GET_MERRYWEATHER_VOICE_NAME(merc) )
CREATE_CONVERSATION( convo_struct, "D2AAUD", GET_RAISE_ALARM_LINE(merc), CONV_PRIORITY_MEDIUM )
bRaisedAlarm = TRUE
EXIT
endif
endif
endif
endfor
endproc
//Ambient patrol lines and reactions to seeing or hearing player/spotting dead body
proc AUDIO_dialogue_merc_stealth()
int merc
bool bAMercCurrentlyAlerted = FALSE
for merc = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if isEntityalive(mercs[merc].id)
if get_game_timer() > mercs[merc].iDialogueTimer
and mercs[merc].currentsit = MS_SIT_NONE
ADD_PED_FOR_DIALOGUE( convo_struct, (merc%4+4), mercs[merc].id, GET_MERRYWEATHER_VOICE_NAME(merc) )
CREATE_CONVERSATION( convo_struct, "D2AAUD", GET_PATROL_LINE(merc), CONV_PRIORITY_LOW, DO_NOT_DISPLAY_SUBTITLES )
mercs[merc].iDialogueTimer = get_game_Timer() + GET_RANDOM_INT_IN_RANGE( 15000, 20000 )
elif mercs[merc].currentsit <> MS_SIT_NONE
bAMercCurrentlyAlerted = TRUE
if IS_SAFE_TO_START_CONVERSATION()
and not bAlertedMerc
if not mercs[merc].bAlertSpeech
if not is_ambient_speech_playing(mercs[merc].id)
ADD_PED_FOR_DIALOGUE( convo_struct, (merc%4+4), mercs[merc].id, GET_MERRYWEATHER_VOICE_NAME(merc) )
mercs[merc].bAlertSpeech = TRUE
SWITCH mercs[merc].currentsit
CASE MS_sit_MIKE_SEEN
CREATE_CONVERSATION( convo_struct, "D2AAUD", GET_SEE_MIKE_LINE(merc), CONV_PRIORITY_MEDIUM )
bAlertedMerc = TRUE
// play_ped_ambient_speech_with_voice(mercs[merc].id, GET_SEE_MIKE_LINE(merc), GET_MERRYWEATHER_VOICE_NAME(merc), SPEECH_PARAMS_FORCE_SHOUTED_CLEAR)
BREAK
CASE MS_SIT_SHOT_HEARD
CASE ms_sit_bullet_ping
CREATE_CONVERSATION( convo_struct, "D2AAUD", GET_HEAR_MIKE_LINE(merc), CONV_PRIORITY_MEDIUM )
bAlertedMerc = TRUE
// play_ped_ambient_speech_with_voice(mercs[merc].id, GET_HEAR_MIKE_LINE(merc), GET_MERRYWEATHER_VOICE_NAME(merc), SPEECH_PARAMS_FORCE_SHOUTED_CLEAR)
BREAK
CASE MS_SIT_DEAD_BODY
CREATE_CONVERSATION( convo_struct, "D2AAUD", GET_FIND_BODY_LINE(merc), CONV_PRIORITY_MEDIUM )
bAlertedMerc = TRUE
// play_ped_ambient_speech_with_voice(mercs[merc].id, GET_FIND_BODY_LINE(merc), GET_MERRYWEATHER_VOICE_NAME(merc), SPEECH_PARAMS_FORCE_SHOUTED_CLEAR)
BREAK
ENDSWITCH
endif
endif
endif
endif
endif
endfor
//Reset bAlertedMerc if there is no one alerted
if not bAMercCurrentlyAlerted
if bAlertedMerc
bAlertedMerc = FALSE
endif
endif
endproc
proc AUDIO_dialogue_killed_merc()
//dialogue for killing mercs
if not balarmtriggered
and not bcsalarmtriggered
and mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_6_way_out)
and mission_substage > stage_entry
//----------------second bomb merc-----------------
if not isentityalive(mercs[merc3_c4_2].id)
and mercs[merc3_c4_2].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if IS_SAFE_TO_START_CONVERSATION()
and not is_message_being_displayed()
if player_ped_id() = mike_ped()
// create_conversation(convo_struct,"d2aaud","dh2a_1a",conv_priority_low)
else
create_conversation(convo_struct,"d2aaud","dh2a_2a",conv_priority_low)
endif
endif
idialoguekillswitch = 0
mercs[merc3_c4_2].balive = false
endif
break
endswitch
endif
if not isentityalive(mercs[merc4_c4_2].id)
and mercs[merc4_c4_2].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if IS_SAFE_TO_START_CONVERSATION()
and not is_message_being_displayed()
if player_ped_id() = mike_ped()
if bKilledByBuddy
create_conversation(convo_struct,"d2aaud","dh2a_1c",conv_priority_low)
bKilledByBuddy = FALSE
endif
else
create_conversation(convo_struct,"d2aaud","dh2a_2c",conv_priority_low)
endif
endif
mercs[merc4_c4_2].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
//@RJP merc 7 patrols with merc 5, including both here
if not isentityalive(mercs[merc5_c4_2].id)
// and not isentityalive(mercs[MERC6_C4_2].id)
and mercs[merc5_c4_2].balive
// and mercs[MERC6_C4_2].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if IS_SAFE_TO_START_CONVERSATION()
if player_ped_id() = mike_ped()
// create_conversation(convo_struct,"d2aaud","dh2a_1b",conv_priority_low)
else
create_conversation(convo_struct,"d2aaud","dh2a_2b",conv_priority_low)
endif
endif
mercs[merc5_c4_2].balive = false
// mercs[MERC6_C4_2].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
//----------------------third bomb mercs----------------------------
//@RJP merc 9 is now patrolling around here, no longer merc7
if not isentityalive(mercs[merc9_c4_3].id)
and mercs[merc9_c4_3].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if IS_SAFE_TO_START_CONVERSATION()
and not is_message_being_displayed()
if player_ped_id() = frank_ped()
create_conversation(convo_struct,"d2aaud","dh2a_3a",conv_priority_low)
endif
endif
mercs[merc9_c4_3].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
// if not isentityalive(mercs[merc10_c4_3].id)
// and not isentityalive(mercs[merc11_c4_3].id)
// and mercs[merc10_c4_3].balive
// and mercs[merc11_c4_3].balive
// switch idialoguekillswitch
// case 0
// idialoguedelay = get_game_timer()
// idialoguekillswitch++
// break
// case 1
// if get_game_timer() - idialoguedelay >= 500
// if player_ped_id() = frank_ped()
// if not is_any_conversation_ongoing_or_queued()
// and not is_message_being_displayed()
// create_conversation(convo_struct,"d2aaud","dh2a_3b",conv_priority_low)
// endif
// endif
// mercs[merc10_c4_3].balive = false
// mercs[merc11_c4_3].balive = false
// idialoguekillswitch = 0
// endif
// break
// endswitch
// endif
if not isentityalive(mercs[merc11_c4_3].id)
and mercs[merc11_c4_3].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if player_ped_id() = frank_ped()
if IS_SAFE_TO_START_CONVERSATION()
and not is_message_being_displayed()
create_conversation(convo_struct,"d2aaud","dh2a_3b1",conv_priority_low)
endif
endif
mercs[merc11_c4_3].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
// if not isentityalive(mercs[merc10_c4_3].id)
// and mercs[merc10_c4_3].balive
// switch idialoguekillswitch
// case 0
// idialoguedelay = get_game_timer()
// idialoguekillswitch++
// break
// case 1
// if get_game_timer() - idialoguedelay >= 500
// if player_ped_id() = frank_ped()
// if not is_any_conversation_ongoing_or_queued()
// and not is_message_being_displayed()
// create_conversation(convo_struct,"d2aaud","dh2a_3b2",conv_priority_low)
// endif
// endif
// mercs[merc10_c4_3].balive = false
// idialoguekillswitch = 0
// endif
// break
// endswitch
// endif
//@RJP Franklin should not tell Michael to move until 14 and 15 are eliminated
if not isentityalive(mercs[merc14_c4_3].id)
// and not isentityalive(mercs[MERC15_C4_3].id)
and mercs[merc14_c4_3].balive
// and mercs[MERC15_C4_3].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if mission_stage > enum_to_int(msf_3_second_bomb)
if player_ped_id() = frank_ped()
if IS_SAFE_TO_START_CONVERSATION()
create_conversation(convo_struct,"d2aaud","dh2a_3c",conv_priority_low)
endif
endif
endif
mercs[merc14_c4_3].balive = false
// mercs[MERC15_C4_3].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
if not isentityalive(mercs[merc12_c4_3].id)
and mercs[merc12_c4_3].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if mission_stage > enum_to_int(msf_3_second_bomb)
if IS_SAFE_TO_START_CONVERSATION()
if player_ped_id() = mike_ped()
if bKilledByBuddy
create_conversation(convo_struct,"d2aaud","dh2a_3d",conv_priority_low)
bKilledByBuddy = false
endif
else
create_conversation(convo_struct,"d2aaud","dh2a_3d",conv_priority_low)
endif
endif
endif
mercs[merc12_c4_3].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
if not isentityalive(mercs[merc13_c4_3].id)
and mercs[merc13_c4_3].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if mission_stage > enum_to_int(msf_4_third_bomb)
if IS_SAFE_TO_START_CONVERSATION()
if player_ped_id() = mike_ped()
if bkilledbybuddy
create_conversation(convo_struct,"d2aaud","dh2a_4c",conv_priority_low) // frank speaks
else
// create_conversation(convo_struct,"d2aaud","dh2a_4d",conv_priority_low) // mike speaks
endif
else
if bkilledbybuddy
// create_conversation(convo_struct,"d2aaud","dh2a_4d",conv_priority_low) // mike speaks
else
create_conversation(convo_struct,"d2aaud","dh2a_4c",conv_priority_low) // frank speaks
endif
endif
endif
endif
bkilledbybuddy = false
mercs[merc13_c4_3].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
if not isentityalive(mercs[MERC16_C4_4].id)
and mercs[MERC16_C4_4].balive
switch idialoguekillswitch
case 0
idialoguedelay = get_game_timer()
idialoguekillswitch++
break
case 1
if get_game_timer() - idialoguedelay >= 500
if mission_stage > enum_to_int(msf_4_third_bomb)
if IS_SAFE_TO_START_CONVERSATION()
if player_ped_id() = mike_ped()
if bkilledbybuddy
create_conversation(convo_struct,"d2aaud","dh2a_4h",conv_priority_low) // frank speaks
else
// create_conversation(convo_struct,"d2aaud","dh2a_4h",conv_priority_low) // mike speaks
endif
else
create_conversation(convo_struct,"d2aaud","dh2a_4h",conv_priority_low) // frank speaks
endif
endif
endif
bkilledbybuddy = false
mercs[MERC16_C4_4].balive = false
idialoguekillswitch = 0
endif
break
endswitch
endif
endif
endproc
/// PURPOSE:
/// Helper function to remove sonar blip and outline
PROC REMOVE_CURRENT_SONAR_BLIP()
// Main blip
IF DOES_BLIP_EXIST(biSonarBlip)
REMOVE_BLIP(biSonarBlip)
ENDIF
ENDPROC
/// PURPOSE:
/// Update wreckage area blip when far away and sonar blips when nearby
PROC UPDATE_SONAR_BLIPS()
// Get current player location
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
FLOAT fDistance
IF DOES_ENTITY_EXIST(objLoot)
fDistance = GET_DISTANCE_BETWEEN_COORDS(get_entity_coords(objLoot), vPlayerPos, FALSE)
ENDIF
// Trigger sonar update
IF bSonarUpdate
// Remove any previous existing blip
REMOVE_CURRENT_SONAR_BLIP()
// Initialise sonar blip
fCurrentRadius = 0
fTargetRadius = fDistance
// Set minimum size based on whether player is in the dinghy or swimming
fTargetRadius = CLAMP(fTargetRadius, SONAR_MIN_SIZE_SWIM, 200)
// Set update rate
fSonarIncrement = fTargetRadius*SONAR_UPDATE_SPEED
bSonarUpdate = FALSE
PLAY_SOUND_FROM_COORD(ibeepid,"sonar_pulse",GET_ENTITY_COORDS(objLoot),"docks_heist_finale_2a_sounds")
ELSE
// Remove blip ready for update
REMOVE_CURRENT_SONAR_BLIP()
// Update size
fCurrentRadius = fCurrentRadius +@(fSonarIncrement * 30.0)
fCurrentRadius = CLAMP(fCurrentRadius, 0, fTargetRadius)
// Resize sonar blip based on distance
biSonarBlip = ADD_BLIP_FOR_RADIUS(get_entity_coords(objLoot), fCurrentRadius)
SET_BLIP_ALPHA(biSonarBlip, 255)
SET_BLIP_COLOUR(biSonarBlip, BLIP_COLOUR_WHITE)
SET_BLIP_AS_SHORT_RANGE(biSonarBlip, TRUE)
SET_RADIUS_BLIP_EDGE(biSonarBlip, TRUE)
SHOW_HEIGHT_ON_BLIP(biSonarBlip, FALSE)
// We need to create a new blip
IF fCurrentRadius >= fTargetRadius
bSonarUpdate = TRUE
ENDIF
ENDIF
ENDPROC
//handles the audio scene and effects while the player is underwater
proc AUDIO_underwater()
if isentityalive(player_ped_id())
vector v_game_cam_pos = get_gameplay_cam_coord()
vector v_player_pos = get_entity_coords(player_ped_id())
//get distance from the ship
// float fdistancetoship
// fdistancetoship = get_distance_between_coords(get_entity_coords(player_ped_id()),<< -196.3878, -2328.8262, -14.7554 >>)
// SET_VARIABLE_ON_UNDER_WATER_STREAM("DISTANCE_TO_SHIP",fdistancetoship)
if player_ped_id() = mike_ped()
if does_entity_exist(objLoot)
float distancefromcrate = get_distance_between_coords(get_entity_coords(objLoot),get_entity_coords(player_ped_id()))
set_variable_on_sound(ibeepid,"bombdistance",distancefromcrate)
IF NOT bStopRebreather
if player_ped_id() = mike_ped()
and not scamdetails.brun
IF bStartSonar
UPDATE_SONAR_BLIPS()
endif
ENDIF
endif
endif
IF IS_PED_SWIMMING(mike_ped())
FORCE_SONAR_BLIPS_THIS_FRAME()
ENDIF
if has_sound_finished(sound_underwater_rebreather)
play_sound_from_entity(sound_underwater_rebreather, "rebreather",mike_ped(),"docks_heist_finale_2a_sounds")
endif
ENDIF
if v_player_pos.z < 0
and v_game_cam_pos.z < 0
if has_sound_finished(sound_underwater_ambience)
play_sound_frontend(sound_underwater_ambience, "uw_ambience")
endif
// if not bUnderWaterStreamed
// if load_stream("underwater_stream","docks_heist_finale_2a_sounds")
// bUnderWaterStreamed = true
// endif
// else
// play_stream_frontend()
// set_variable_on_stream("distance_to_ship",fdistancetoship)
// set_variable_on_stream("above_water",0)
// endif
if player_ped_id() = mike_ped()
IF NOT bStopRebreather
if has_sound_finished(sound_underwater_rebreather)
play_sound_from_entity(sound_underwater_rebreather, "rebreather",mike_ped(),"docks_heist_finale_2a_sounds")
endif
float f_player_speed = get_entity_speed(mike_ped())
if f_player_speed > 1.0
if has_sound_finished(i_sound_swishing)
play_sound_from_entity(i_sound_swishing, "foot_swish", mike_ped(),"docks_heist_finale_2a_sounds")
set_variable_on_sound(i_sound_swishing, "swimspeed", (f_player_speed - 1.0) / 4.0)
else
set_variable_on_sound(i_sound_swishing, "swimspeed", (f_player_speed - 1.0) / 4.0)
endif
else
if not has_sound_finished(i_sound_swishing)
stop_sound(i_sound_swishing)
endif
endif
ENDIF
elif player_ped_id() = trev_ped()
or scamdetails.brun
if not has_sound_finished(ibeepid)
stop_sound(ibeepid)
endif
if not has_sound_finished(sound_underwater_rebreather)
stop_sound(sound_underwater_rebreather)
endif
if not has_sound_finished(i_sound_swishing)
stop_sound(i_sound_swishing)
endif
if not has_sound_finished(i_sound_scuba_gear)
stop_sound(i_sound_scuba_gear)
endif
endif
else
if not has_sound_finished(ibeepid)
stop_sound(ibeepid)
endif
// if bUnderWaterStreamed
// set_variable_on_stream("above_water",1)
// endif
if is_audio_scene_active("dock_heist_underwater_scene")
stop_audio_scene("dock_heist_underwater_scene")
endif
if not has_sound_finished(sound_underwater_ambience)
stop_sound(sound_underwater_ambience)
endif
if not has_sound_finished(sound_underwater_rebreather)
stop_sound(sound_underwater_rebreather)
endif
if not has_sound_finished(i_sound_swishing)
stop_sound(i_sound_swishing)
endif
if not has_sound_finished(i_sound_scuba_gear)
stop_sound(i_sound_scuba_gear)
endif
endif
endif
endproc
proc AUDIO_sniping()
float snipeWidth = 0.1
if not bAudio_SnipeLoaded
if REQUEST_SCRIPT_AUDIO_BANK("PORT_OF_LS_SNIPING")
bAudio_snipeLoaded = true
endif
endif
switch iaudioswitch_snipeStage
case 0
if bFrankFired
CPRINTLN( DEBUG_MISSION, "AUDIO_sniping: Playing FRANKLIN FIRED SOUNDS" )
PLAY_SOUND_FROM_COORD(-1, "SNIPER_SHOT_ZIP", GET_ENTITY_COORDS(frank_ped()) * snipeWidth
+ vfranks_aim_coord * (1-snipeWidth), "DOCKS_HEIST_FINALE_2A_SOUNDS")
if isentityalive(franks_target_ped)
if HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(franks_target_ped,wtsniper,GENERALWEAPON_TYPE_INVALID)
PLAY_SOUND_FROM_COORD(-1, "SNIPER_SHOT_SPLAT", vfranks_aim_coord,"DOCKS_HEIST_FINALE_2A_SOUNDS")
PLAY_SOUND_FROM_COORD(-1, "SNIPER_SHOT_SPRAY", GET_ENTITY_COORDS(frank_ped()) * (-1* snipeWidth)
+ vfranks_aim_coord * (1+snipeWidth), "DOCKS_HEIST_FINALE_2A_SOUNDS")
endif
else
PLAY_SOUND_FROM_COORD(-1, "SNIPER_SHOT_SPLAT", vfranks_aim_coord,"DOCKS_HEIST_FINALE_2A_SOUNDS")
PLAY_SOUND_FROM_COORD(-1, "SNIPER_SHOT_SPRAY", GET_ENTITY_COORDS(frank_ped()) * (-1* snipeWidth)
+ vfranks_aim_coord * (1+snipeWidth), "DOCKS_HEIST_FINALE_2A_SOUNDS")
endif
iaudioswitch_snipeStage++
endif
break
case 1
if not bFrankFired
iaudioswitch_snipeStage = 0
endif
break
endswitch
endproc
proc do_tods_dh2a()
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
while not do_timelapse(sp_heist_docks_2a,sTimelapse,FALSE,TRUE,TRUE, TRUE)
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_START(<<-79.16,-2355.64,1.87>>,NORMALISE_VECTOR(<<0.69,-0.72,0.11>>),300)
ENDIF
wait(0)
endwhile
FREEZE_ENTITY_POSITION(frank_ped(),FALSE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_TODS_CUTSCENE_RUNNING(sTimelapse, FALSE, FALSE, 2000, FALSE, FALSE)
SET_PLAYER_CONTROL(player_id(),false)
SET_FOCUS_ENTITY( mike_ped() )
INT iCamSceneId
players_scene_id = CREATE_SYNCHRONIZED_SCENE(<<0,0,0>>, <<0,0,0>>)
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
ENDIF
iCamSceneId = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(vehs[mvf_dinghy].id) + << 0.0, 0.0, 0.30 >>, GET_ENTITY_ROTATION(vehs[mvf_dinghy].id))
IF NOT IS_PED_INJURED(mike_ped())
TASK_SYNCHRONIZED_SCENE( mike_ped(), players_scene_id, "missheistdocks2aswitchig_7", "IG_7_m_dinghy_f_sniping_michael", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT )
ENDIF
PLAY_SYNCHRONIZED_CAM_ANIM(camera_a, iCamSceneId, "IG_7_m_dinghy_f_sniping_cam", "missheistdocks2aswitchig_7")
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(players_scene_id, vehs[mvf_dinghy].id, 0)
SET_CAM_ACTIVE(camera_a, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
KILL_ANY_CONVERSATION()
CREATE_CONVERSATION(convo_struct,"D2AAUD","DS2A_GO",CONV_PRIORITY_MEDIUM)
endproc
func bool fly_over_cutscene()
switch icutstage
case 0
//make mercs
int imerc
for imerc = enum_to_int(merc3_c4_2) to enum_to_int(merc18_c4_4)
if not isentityalive(mercs[imerc].id)
createmercenary(int_to_enum(mmf_mission_merc_flags,imerc))
endif
endfor
bcampan_cued = false
if isentityalive(mercs[merc3_c4_2].id)
set_entity_coords(mercs[merc3_c4_2].id, << -131.54675, -2375.49292, 8.31907 >>)
endif
if isentityalive(mercs[merc7_c4_2].id)
set_entity_coords(mercs[merc7_c4_2].id, << -163.77, -2359.94, 8.32 >>)
endif
if isentityalive(mercs[merc12_c4_3].id)
set_entity_coords(mercs[merc12_c4_3].id,<<-181.17540, -2367.26172, 8.31907 >>)
endif
cameraindex = create_cam("default_spline_camera")
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-83.6341, -2384.2241, 18.8433>>, <<-11.6585, 2.4080, -3.8427>>, 20.7496, true), 0, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-105.5889, -2379.0615, 13.1824>>, <<-15.4827, -0.5527, 80.9819>>, 20.7496, true), 4800, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-143.5431, -2377.3916, 8.8925>>, <<0.0128, 1.1140, 89.8615>>, 20.7496, true), 5800, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-174.7800, -2380.8171, 10.4344>>, <<1.1428, 5.1966, 77.3842>>, 20.7496, true), 6500, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-188.0171, -2392.9490, 10.7295>>, <<-1.5796, 2.6956, -0.0101>>, 20.7496, true), 6000, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-214.2664, -2399.5540, 11.2041>>, <<-5.6128, 2.6956, -6.2567>>, 20.7496, true), 7400, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-246.3513, -2386.9656, 14.2404>>, <<-2.4819, 2.6956, -65.2727>>, 20.7496, true), 6000, cam_spline_node_smooth_rot)
add_cam_spline_node_using_camera(cameraindex, create_cam_with_params("default_scripted_camera", <<-248.4400, -2378.4102, 17.4281>>, <<-8.2277, 2.6956, -86.6964>>, 20.7496, true), 2000, cam_spline_node_smooth_rot)
set_cam_active(cameraindex,true)
shake_cam(cameraindex, "hand_shake", 0.5000)
iflyovermusictrigger = 10000
prep_start_cutscene(false,<< -85.9317, -2364.7205, 13.2961 >>,true,false,false)
icsdelay = get_game_timer() - 6000
bhotswap = false
icutstage++
break
case 1
if get_game_timer() - icsdelay > 1500
and prepare_music_event("dh2a_camera_pan")
create_conversation(convo_struct,"d2aaud","dh2a_tk1",conv_priority_medium)
icutstage++
endif
break
case 2
if get_game_timer() - icsdelay > iflyovermusictrigger
and trigger_music_event("dh2a_camera_pan")
bcampan_cued = true
icutstage++
endif
break
case 3
if get_game_timer() - icsdelay > (iflyovermusictrigger + 14000)
if prepare_music_event("dh2a_camera_pan_2nd")
icutstage++
endif
endif
break
case 4
if get_game_timer() - icsdelay > 41000
if trigger_music_event("dh2a_camera_pan_2nd")
bcampan2_cued = true
icutstage++
endif
endif
break
case 5
if get_game_timer() - icsdelay > 46000
return true
endif
break
endswitch
if icutstage > 1
if is_control_just_pressed(frontend_control,INPUT_SKIP_CUTSCENE)
if not bcampan_cued
cancel_music_event("dh2a_camera_pan")
elif bcampan_cued
and not bcampan2_cued
cancel_music_event("dh2a_camera_pan_2nd")
endif
return true
endif
endif
// if isentityalive(mercs[merc7_c4_2].id)
// and get_is_waypoint_recording_loaded("docksheist2a02")
// if not is_waypoint_playback_going_on_for_ped(mercs[merc7_c4_2].id)
// if IS_ENTITY_AT_COORD(mercs[merc7_C4_2].id,<<-163.53667, -2375.51953, 8.31907>>,<<2,2,2>>)
// task_follow_waypoint_recording(mercs[merc7_c4_2].id,"docksheist2a02",0)
// else
// task_follow_waypoint_recording(mercs[merc7_c4_2].id,"docksheist2a02",0,EWAYPOINT_START_FROM_CLOSEST_POINT)
// endif
// endif
// endif
return false
endfunc
func bool alarm_cutscene()
switch icutstage
case 0
if balarmtriggered
bcsalarmtriggered = true
balarmtriggered = false
endif
bDialoguePlayed = FALSE
CLEAR_PED_TASKS(frank_ped())
//@RJP delete peds during cutscene so they can't kill Michael
int i
for i = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if DOES_ENTITY_EXIST(mercs[i].id)
delete_ped(mercs[i].id)
endif
endfor
//skip scene stuff
settimera(0)
//cam
cameraIndex = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
set_cam_active(cameraindex,true)
prep_start_cutscene(false,<< -209.5674, -2386.8694, 15.0927 >>)
//door
IF DOES_ENTITY_EXIST(objDoorHide)
SET_ENTITY_VISIBLE(objDoorHide, FALSE)
SET_ENTITY_DYNAMIC( objDoorHide, FALSE )
ELSE
objDoorHide = GET_CLOSEST_OBJECT_OF_TYPE( <<-222.0200, -2375.3555, 13.5443>>, 2, PORT_XR_DOOR_05 )
FREEZE_ENTITY_POSITION( objDoorHide, TRUE )
SET_ENTITY_VISIBLE(objDoorHide, FALSE)
SET_ENTITY_DYNAMIC( objDoorHide, FALSE )
ENDIF
objDoor = CREATE_OBJECT( P_PO1_01_DoorM_S, <<-222.0200, -2375.3955, 12.327>> )
iDoorSyncScene = CREATE_SYNCHRONIZED_SCENE ( <<-222.0200, -2375.3955, 13.2843>>, <<0,0,0>>)
//mike
SET_ENTITY_INVINCIBLE( mike_ped(), TRUE )
SET_CURRENT_PED_WEAPON(mike_ped(), WEAPONTYPE_COMBATPISTOL, TRUE)
IF bcsalarmtriggered
TASK_SYNCHRONIZED_SCENE( mike_ped(), iDoorSyncScene, "missheistdocks2aig_1", "IG_1_MichaelEnterBoat_Action", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
PLAY_ENTITY_ANIM( objDoor, "IG_1_MichaelEnterBoat_Action_DOOR", "missheistdocks2aig_1", INSTANT_BLEND_IN, FALSE, FALSE, FALSE, 0.025 )
// PLAY_SYNCHRONIZED_ENTITY_ANIM(objDoor, iDoorSyncScene, "IG_1_MichaelEnterBoat_Action_DOOR", "missheistdocks2aig_1", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
PLAY_SYNCHRONIZED_CAM_ANIM(cameraIndex, iDoorSyncScene, "IG_1_MichaelEnterBoat_Action_cam", "missheistdocks2aig_1")
SET_SYNCHRONIZED_SCENE_PHASE(iDoorSyncScene,0.025)
ELSE
TASK_SYNCHRONIZED_SCENE( mike_ped(), iDoorSyncScene, "missheistdocks2aig_1", "IG_1_MichaelEnterBoat_Stealth", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
PLAY_ENTITY_ANIM( objDoor, "IG_1_MichaelEnterBoat_Stealth_DOOR", "missheistdocks2aig_1", INSTANT_BLEND_IN, FALSE, FALSE, FALSE, 0.035 )
// PLAY_SYNCHRONIZED_ENTITY_ANIM(objDoor, iDoorSyncScene, "IG_1_MichaelEnterBoat_Stealth_DOOR", "missheistdocks2aig_1", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
PLAY_SYNCHRONIZED_CAM_ANIM(cameraIndex, iDoorSyncScene, "IG_1_MichaelEnterBoat_stealth_cam", "missheistdocks2aig_1")
SET_SYNCHRONIZED_SCENE_PHASE(iDoorSyncScene,0.035)
CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GOIN", CONV_PRIORITY_MEDIUM )
ENDIF
SET_SEETHROUGH(FALSE)
//b_nightvision_active = FALSE
SET_CAM_ACTIVE(cameraIndex, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
//frank
set_entity_coords(frank_ped(),<< -143.8203, -2488.2612, 43.4412 >>)
// task_aim_gun_at_coord(frank_ped(),c4[c4_3_inside].exppos,-1)
//misc
REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
give_mission_weapons()
icsdelay = get_game_timer()
icutstage++
break
case 1
IF bcsalarmtriggered
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_IN_NS", CONV_PRIORITY_MEDIUM )
icutstage++
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_GOIN", CONV_PRIORITY_MEDIUM )
icutstage++
ENDIF
ENDIF
break
case 2
IF NOT (PLAYER_PED_ID() = frank_ped())
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds,selector_ped_franklin)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds,TRUE,TRUE)
bSwappedToFranklin = TRUE
SET_PLAYER_FORCED_AIM(PLAYER_ID(),TRUE)
SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), TRUE )
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
NEW_LOAD_SCENE_START_SPHERE(<< -143.8203, -2488.2612, 43.4412 >>, 25)
// NEW_LOAD_SCENE_START(<<-144.16,-2486.51,44.55>>,NORMALISE_VECTOR(<<0.15,-0.97,0.17>>),50)
ENDIF
ELSE
if bcsalarmtriggered
IF GET_SYNCHRONIZED_SCENE_PHASE(iDoorSyncScene) >= 0.7
icsdelay = get_game_timer()
icutstage++
ENDIF
else
IF GET_SYNCHRONIZED_SCENE_PHASE(iDoorSyncScene) >= 0.72
icsdelay = get_game_timer()
icutstage++
ENDIF
endif
ENDIF
IF IS_SAFE_TO_START_CONVERSATION()
IF NOT bDialoguePlayed
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"MICHAEL")
if bcsalarmtriggered
if create_conversation(convo_struct,"d2aaud","DH2A_WTCH_NS",conv_priority_medium)
bDialoguePlayed = TRUE
endif
else
if create_conversation(convo_struct,"d2aaud","DH2A_FMB",conv_priority_medium)
bDialoguePlayed = TRUE
endif
endif
ENDIF
ENDIF
break
case 3
players_scene_id = CREATE_SYNCHRONIZED_SCENE( <<-143.8, -2487.555, 43.450>>, <<0,0,-34.5>> )
TASK_SYNCHRONIZED_SCENE( frank_ped(), players_scene_id, "missheistdocks2aswitchig_7", "IG_7_m_door_f_sniping_franklin", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_PROCESS_ATTACHMENTS_ON_START)
PLAY_SYNCHRONIZED_CAM_ANIM( cameraIndex, players_scene_id, "IG_7_m_door_f_sniping_cam", "missheistdocks2aswitchig_7")
CPRINTLN(DEBUG_MISSION, "RUNNING FRANKLIN SNIPING SYNC SCENE")
IF bSwappedToFranklin
ANIMPOSTFX_PLAY("SwitchSceneFranklin", 1000, FALSE)
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
ENDIF
bDialoguePlayed = FALSE
icutstage++
break
case 4
IF GET_SYNCHRONIZED_SCENE_PHASE(players_scene_id) > 0.999
CPRINTLN(DEBUG_MISSION, "FRANKLIN SNIPING SYNC SCENE FINISHED")
icsdelay = get_game_timer()
if DOES_ENTITY_EXIST(MIKE_PED())
SET_ENTITY_VISIBLE(mike_ped(),false)
endif
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SHOOTOUT_SCENE")
STOP_AUDIO_SCENE("DH2A_SHOOTOUT_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("DH2A_PLANT_BOMBS_scene")
STOP_AUDIO_SCENE("DH2A_PLANT_BOMBS_scene")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPING_SCENE")
STOP_AUDIO_SCENE("DH2A_SNIPING_SCENE")
ENDIF
CPRINTLN( DEBUG_MISSION, "STARTING: DH2A_SHOOTOUT_SNIPING_scene" )
start_audio_scene("DH2A_SHOOTOUT_SNIPING_SCENE")
trigger_music_event("dh2a_main_alarm")
IF DOES_ENTITY_EXIST(objDoorHide)
SET_ENTITY_VISIBLE(objDoorHide, TRUE)
SET_OBJECT_AS_NO_LONGER_NEEDED(objDoorHide)
ENDIF
if does_entity_exist(objDoor)
delete_object(objDoor)
endif
CLEAR_PED_TASKS( PLAYER_PED_ID() )
SET_CURRENT_PED_WEAPON( PLAYER_PED_ID(), wtSniper, TRUE )
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(get_sniper_rifle_aim_heading_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(get_sniper_rifle_aim_pitch_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), TRUE )
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
DISPLAY_SNIPER_SCOPE_THIS_FRAME()
FORCE_PED_MOTION_STATE( PLAYER_PED_ID(), MS_AIMING )
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(),TRUE)
REPLAY_STOP_EVENT()
prep_stop_cutscene(TRUE)
balarmtriggered = TRUE
bDialoguePlayed = FALSE
icsdelay = get_game_timer()
return true
ELIF GET_SYNCHRONIZED_SCENE_PHASE(players_scene_id) > 0.3
IF NOT bDialoguePlayed
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
NEW_LOAD_SCENE_START(<<-143.73,-2488.60,45.02>>,NORMALISE_VECTOR(<<-0.56,0.80,-0.22>>),300)
bDialoguePlayed = TRUE
ENDIF
ENDIF
break
endswitch
//======= cutscene checks =============
if timera() > 1500
if is_control_just_pressed(frontend_control,INPUT_SKIP_CUTSCENE)
REPLAY_CANCEL_EVENT()
IF NOT (PLAYER_PED_ID() = frank_ped())
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds,selector_ped_franklin)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds,TRUE,TRUE)
ENDIF
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
CPRINTLN( DEBUG_MISSION, "alarm_cutscene: Stopping new load scene." )
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_HEADING(get_sniper_rifle_aim_heading_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(get_sniper_rifle_aim_pitch_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
SET_PLAYER_FORCED_AIM(PLAYER_ID(),TRUE)
SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), TRUE )
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(),TRUE)
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SHOOTOUT_SCENE")
STOP_AUDIO_SCENE("DH2A_SHOOTOUT_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("DH2A_PLANT_BOMBS_scene")
STOP_AUDIO_SCENE("DH2A_PLANT_BOMBS_scene")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPING_SCENE")
STOP_AUDIO_SCENE("DH2A_SNIPING_SCENE")
ENDIF
CPRINTLN( DEBUG_MISSION, "STARTING: DH2A_SHOOTOUT_SNIPING_scene" )
start_audio_scene("DH2A_SHOOTOUT_SNIPING_SCENE")
bdoskip = true
iskiptostage = enum_to_int(msf_6_way_out)
endif
endif
//=====================================
return false
endfunc
proc run_intro_cutscene()
#if is_debug_build
if is_cutscene_active()
if is_keyboard_key_just_pressed(key_j)
stop_cutscene()
remove_cutscene()
while is_cutscene_active()
wait(0)
endwhile
endif
endif
#endif
if not b_cutscene_loaded
if not is_cutscene_active()
SET_SRL_FORCE_PRESTREAM(SRL_PRESTREAM_FORCE_COMPLETELY_OFF)
println("REQUESTING CS SECTIONS")
if get_current_player_ped_enum() = char_trevor
request_cutscene_with_playback_list("lsdh_2a_int",cs_section_1 |cs_section_2 | cs_section_3 | cs_section_4 | cs_section_5 | cs_section_6)
elif get_current_player_ped_enum() = char_michael
request_cutscene_with_playback_list("lsdh_2a_int",cs_section_3 | cs_section_4 | cs_section_5 | cs_section_6)
elif get_current_player_ped_enum() = char_franklin
request_cutscene_with_playback_list("lsdh_2a_int",cs_section_5 | cs_section_6)
endif
wait(0)
endif
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
// if has_cutscene_loaded()
//IF IS_GAMEPLAY_HINT_ACTIVE()
// STOP_GAMEPLAY_HINT()
//ENDIF
//Grab ownership of the entities created by the lead-in to this mission
//and bind them into the intro cutscene.
//See trigger_scene_docks_2A.sch for the lead-in scripts.
// g_sTriggerSceneAssets.ped[0] - Wade
// g_sTriggerSceneAssets.ped[1] - Floyd
// g_sTriggerSceneAssets.ped[2] - Trevor
// g_sTriggerSceneAssets.ped[3] - Michael
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[0], FALSE, TRUE)
REGISTER_ENTITY_FOR_CUTSCENE(g_sTriggerSceneAssets.ped[0], "Wade", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, IG_WADE)
ENDIF
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[1])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[1], FALSE, TRUE)
REGISTER_ENTITY_FOR_CUTSCENE(g_sTriggerSceneAssets.ped[1], "Floyd", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, IG_FLOYD)
ENDIF
//Franklin
IF DOES_ENTITY_EXIST( g_sTriggerSceneAssets.ped[4] )
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = g_sTriggerSceneAssets.ped[4]
SET_ENTITY_AS_MISSION_ENTITY(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE, TRUE)
FREEZE_ENTITY_POSITION( sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE )
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
CPRINTLN( DEBUG_MISSION, "PLAYER IS FRANKLIN" )
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PLAYER_PED_ID()
ENDIF
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN])
CPRINTLN( DEBUG_MISSION, "FRANKLIN EXISTS, REGISTER HIM" )
REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_ONE)
ENDIF
ELSE
CPRINTLN( DEBUG_MISSION, "FRANKLIN DOES NOT EXIST, REGISTER NULL" )
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_ONE)
ENDIF
//Michael
IF DOES_ENTITY_EXIST( g_sTriggerSceneAssets.ped[3] )
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = g_sTriggerSceneAssets.ped[3]
SET_ENTITY_AS_MISSION_ENTITY(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE, TRUE)
FREEZE_ENTITY_POSITION( sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE )
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
CPRINTLN( DEBUG_MISSION, "PLAYER IS MICHAEL" )
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = PLAYER_PED_ID()
ENDIF
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
CPRINTLN( DEBUG_MISSION, "MICHAEL EXISTS, REGISTER HIM" )
REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_ZERO)
ENDIF
ELSE
CPRINTLN( DEBUG_MISSION, "MICHAEL DOES NOT EXIST, REGISTER NULL" )
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Michael", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_ZERO)
ENDIF
//Trevor
IF DOES_ENTITY_EXIST( g_sTriggerSceneAssets.ped[2] )
sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = g_sTriggerSceneAssets.ped[2]
SET_ENTITY_AS_MISSION_ENTITY(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], FALSE, TRUE)
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
CPRINTLN( DEBUG_MISSION, "PLAYER IS TREVOR" )
sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = PLAYER_PED_ID()
ELSE
IF NOT IS_REPLAY_IN_PROGRESS()
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
bSwappedToTrevor = TRUE
CPRINTLN( DEBUG_MISSION, "MAKE_SELECTOR_PED_SELECTION TREVOR TRUE" )
SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE( PLAYER_PED_ID() )
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
CPRINTLN( DEBUG_MISSION, "TREVOR EXISTS, REGISTER HIM" )
REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_TWO)
ENDIF
ELSE
CPRINTLN( DEBUG_MISSION, "TREVOR DOES NOT EXIST, REGISTER NULL" )
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_TWO)
ENDIF
//Ensure the trigger scene assets are cleaned up from memory.
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_HEIST_DOCKS_2A)
//replace the [MF] fix for B*1744611 from below with resolve vehicle command to re-position the vehicle blocking staircase instead of deleting it
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1150.051147,-1523.638184,3.329700>>, <<-1142.782593,-1518.456421,12.556736>>, 4.0,
<< -1154.6117, -1520.0699, 3.3456 >> ,33.0431, TRUE, FALSE, TRUE, TRUE) //staircase
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1153.675415,-1516.567017,9.632723>>, <<-1149.717529,-1522.150024,12.633055>>, 4.0,
<< -1154.6117, -1520.0699, 3.3456 >> ,33.0431, TRUE, FALSE, TRUE, TRUE) //house interior
vehs[mvf_mission_veh].id = GET_MISSION_START_VEHICLE_INDEX()
IF isentityalive( vehs[mvf_mission_veh].id )
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehs[mvf_mission_veh].id)
SET_ENTITY_AS_MISSION_ENTITY( vehs[mvf_mission_veh].id, TRUE, TRUE )
ENDIF
SET_VEHICLE_DOORS_SHUT( vehs[mvf_mission_veh].id )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_mission_veh].id )
REQUEST_VEHICLE_ASSET(GET_ENTITY_MODEL(vehs[mvf_mission_veh].id))
ENDIF
//once the mission start vehicle has been made into mission entity, call the clear areas as orignally intented
//[MF] Fix for B* 1744611 - Delete any vehicles that could be blocking the stairs to Trevor's apartment
CLEAR_AREA_OF_VEHICLES((<<-1151.3, -1520.1, 11.1>>), 4.0)
CLEAR_AREA_OF_VEHICLES((<<-1149.4, -1523.4, 10.9>>), 3.0)
CLEAR_AREA_OF_VEHICLES((<<-1145.9, -1521.6, 9.3>>), 2.0)
CLEAR_AREA_OF_VEHICLES((<<-1143.6, -1519.0, 7.5>>), 2.5)
CLEAR_AREA_OF_VEHICLES((<<-1147.4, -1520.5, 5.9>>), 2.5)
//interior
interior_living_room = get_interior_at_coords(<< -1158.3411, -1520.8929, 9.6345 >>)
if is_valid_interior(interior_living_room)
pin_interior_in_memory(interior_living_room)
// while not is_interior_ready(interior_living_room)
// wait(0)
// endwhile
endif
// clear_area(<< -1154.6117, -1520.0699, 3.3456 >>,100,true)
CLEAR_AREA_OF_PEDS( << -1154.6117, -1520.0699, 3.3456 >>, 100 )
CLEAR_AREA_OF_VEHICLES( << -1154.6117, -1520.0699, 3.3456 >>, 100 )
set_scripts_safe_for_cutscene(true)
set_cutscene_fade_values(false,false,false,false)
SWITCH GET_PLAYER_CHARACTER_AT_MISSION_START()
CASE CHAR_TREVOR
start_cutscene()
BREAK
CASE CHAR_FRANKLIN
CASE CHAR_MICHAEL
start_cutscene(CUTSCENE_PLAYER_FP_FLASH_TREVOR)
BREAK
ENDSWITCH
SET_PED_AS_NO_LONGER_NEEDED( g_sTriggerSceneAssets.ped[0] )
SET_PED_AS_NO_LONGER_NEEDED( g_sTriggerSceneAssets.ped[1] )
SET_MODEL_AS_NO_LONGER_NEEDED( IG_WADE )
SET_MODEL_AS_NO_LONGER_NEEDED( IG_FLOYD )
b_cutscene_loaded = true
endif
endif
endproc
//------------------------------------------------------------------------------------------------------------
// Stage set-up
//------------------------------------------------------------------------------------------------------------
PROC check_time()
IF NOT IS_TIME_BETWEEN_THESE_HOURS(g_sMissionStaticData[sp_heist_docks_2a].startHour, g_sMissionStaticData[sp_heist_docks_2a].endHour)
CPRINTLN( DEBUG_MISSION, "check_time: time is not in window, setting to start time" )
SET_CLOCK_TIME(g_sMissionStaticData[sp_heist_docks_2a].startHour, 00, 00)
ENDIF
ENDPROC
PROC SU_GENERAL()
//DIALOGUE
IF ISENTITYALIVE(FRANK_PED())
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT, 3, FRANK_PED(), "FRANKLIN")
SET_ENTITY_LOAD_COLLISION_FLAG(FRANK_PED(),TRUE)
//RESTORE_PLAYER_PED_VARIATIONS(FRANK_PED())
SET_PED_COMP_ITEM_CURRENT_SP(FRANK_PED(), COMP_TYPE_PROPS, PROPS_P1_HEADSET)
SET_PED_CONFIG_FLAG(FRANK_PED(),PCF_WILLFLYTHROUGHWINDSCREEN,FALSE)
if player_ped_id() != frank_ped()
SET_PED_RELATIONSHIP_GROUP_HASH(FRANK_PED(),rel_group_buddy)
endif
ENDIF
IF ISENTITYALIVE(TREV_PED())
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT, 2, TREV_PED(), "TREVOR")
SET_ENTITY_LOAD_COLLISION_FLAG(TREV_PED(),TRUE)
//RESTORE_PLAYER_PED_VARIATIONS(TREV_PED())
SET_PED_COMP_ITEM_CURRENT_SP(TREV_PED(), COMP_TYPE_PROPS, PROPS_P2_HEADSET)
SET_PED_CONFIG_FLAG(TREV_PED(),PCF_WILLFLYTHROUGHWINDSCREEN,FALSE)
if player_ped_id() != trev_ped()
SET_PED_RELATIONSHIP_GROUP_HASH(TREV_PED(),rel_group_buddy)
endif
ENDIF
IF ISENTITYALIVE(MIKE_PED())
SCUBA_SUITE_UP(MIKE_PED())
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT, 1, MIKE_PED(), "MICHAEL")
SET_ENTITY_LOAD_COLLISION_FLAG(MIKE_PED(),TRUE)
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
SET_PED_CONFIG_FLAG(MIKE_PED(),PCF_WILLFLYTHROUGHWINDSCREEN,FALSE)
if player_ped_id() != mike_ped()
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_PED(),rel_group_buddy)
endif
ENDIF
ENDPROC
PROC CREATE_PROXY_BOMBS(INT iNumBombs)
IF iNumBombs = 3
objBomb[2] = CREATE_OBJECT( GET_WEAPONTYPE_MODEL(wtBomb), <<-187.77, -2365.49, 9.32>> )
IF DOES_ENTITY_EXIST(objBomb[2])
FREEZE_ENTITY_POSITION( objBomb[2], TRUE )
SET_ENTITY_ROTATION( objBomb[2], <<22.668, -90.000, -10.000>> )
ENDIF
ENDIF
IF iNumBombs >= 2
objBomb[1] = CREATE_OBJECT( GET_WEAPONTYPE_MODEL(wtBomb), <<-127.93, -2365.46, 9.33>> )
IF DOES_ENTITY_EXIST(objBomb[1])
FREEZE_ENTITY_POSITION( objBomb[1], TRUE )
SET_ENTITY_ROTATION( objBomb[1], <<22.668, -90.000, -10.000>> )
ENDIF
ENDIF
IF iNumBombs >= 1
objBomb[0] = CREATE_OBJECT( GET_WEAPONTYPE_MODEL(wtBomb), <<-84.715, -2365.90, 14.30>> )
IF DOES_ENTITY_EXIST(objBomb[0])
FREEZE_ENTITY_POSITION( objBomb[0], TRUE )
SET_ENTITY_ROTATION( objBomb[0], <<22.668, 79.339, 4.143>> )
ENDIF
ENDIF
ENDPROC
PROC SU_0_DRIVE_TO_BRIDGE()
//PLAYER
// IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_FRANKLIN,TRUE)
IF NOT IS_REPLAY_BEING_SET_UP()
SET_CURRENT_PLAYER_PED(SELECTOR_PED_TREVOR,TRUE)
CPRINTLN(DEBUG_MISSION, "SU_0_DRIVE_TO_BRIDGE: REPLAY NOT BEING PROCESSED")
//TREVOR
SET_ENTITY_COORDS(trev_ped(),<<-1149.8112, -1522.1071, 9.6330>>)
SET_ENTITY_HEADING(trev_ped(),228.2091)
while not NEW_LOAD_SCENE_START_SPHERE(<<-1149.8112, -1522.1071, 9.6330>>,10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
//FRANK
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[mpf_frank].ID,CHAR_FRANKLIN,<<-1154.6628, -1518.2433, 9.6327>>, 306.3135 )
WAIT(0)
ENDWHILE
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PEDS[mpf_frank].ID
END_REPLAY_SETUP()
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1150.7572, -1520.9470, 9.6327>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1149.5098, -1522.4679, 9.6331>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1147.3914, -1522.7167, 9.4130>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, 312.1079)
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
ELSE
SIMULATE_PLAYER_INPUT_GAIT( PLAYER_ID(), PEDMOVE_WALK, 3500 )
ENDIF
FORCE_PED_MOTION_STATE( PLAYER_PED_ID(), MS_ON_FOOT_WALK, TRUE, FAUS_CUTSCENE_EXIT )
BSKIP_CUT = TRUE
// ELSE
// WAIT(0)
// ENDIF
ENDPROC
PROC SU_1_SNIPE_GAURDS()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_FRANKLIN,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
//FRANK
SET_ENTITY_COORDS(FRANK_PED(),<< -143.8203, -2488.2612, 43.4412 >>)
SET_ENTITY_HEADING(FRANK_PED(), 337.5851)
while not NEW_LOAD_SCENE_START_SPHERE(<< -143.8203, -2488.2612, 43.4412 >>,10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
//MIKE
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_MIKE].ID,CHAR_MICHAEL,<<-77.9618, -2359.0828, 0.5>>,90.7853)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,1,MIKE_PED(),"MICHAEL")
SCUBA_SUITE_UP(MIKE_PED())
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
set_ped_dies_in_water(mike_ped(),false)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_PED(),TRUE)
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
//MERCS
CREATEMERCENARY(MERC1_START, 8, TRUE)
CREATEMERCENARY(MERC2_START, 8, TRUE)
GIVE_WEAPON_TO_PED(MERCS[MERC1_START].ID,WEAPONTYPE_HEAVYSNIPER,200,TRUE,TRUE)
GIVE_WEAPON_TO_PED(MERCS[MERC2_START].ID,WEAPONTYPE_HEAVYSNIPER,200,TRUE,TRUE)
CREATEMERCENARY(MERC4_C4_2)
//CREATE PATROLLING GUARDS
CREATEMERCENARY(MERC3_C4_2)
CREATEMERCENARY(MERC5_C4_2)
// CREATEMERCENARY(MERC6_C4_2) //@RJP B*1321797 - removing patrols of two guys
//SECOND MAST STAGE
// CREATEMERCENARY(MERC7_C4_2) // WILL FOLLOW WAYPOINT
// CREATEMERCENARY(MERC8_C4_2)
CREATEMERCENARY(MERC12_C4_3)
CREATEMERCENARY(MERC9_C4_3)
// CREATEMERCENARY(MERC10_C4_3,1) //@RJP B*1321797 - removing patrols of two guys
CREATEMERCENARY(MERC11_C4_3,1)
//TRAPPED STAGE
CREATEMERCENARY(MERC13_C4_3)
CREATEMERCENARY(MERC14_C4_3)
CREATEMERCENARY(MERC16_C4_4)
// CREATEMERCENARY(MERC15_C4_3) //@RJP B*1321797 - removing patrols of two guys
// CREATEMERCENARY(MERC17_C4_4)
CREATEMERCENARY(MERC18_C4_4)
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
WHILE NOT PREPARE_MUSIC_EVENT("DH2A_START")
WAIT(0)
ENDWHILE
// Load_Asset_NewLoadScene_Sphere(sAssetData,<< -144.0797, -2489.8604, 43.4097 >>,10)
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
SET_ENTITY_COORDS( PLAYER_PED_ID(), << -143.8203, -2488.2612, 43.4412 >> )
// SET_ENTITY_HEADING( PLAYER_PED_ID(), 337.5851 )
// NEW_LOAD_SCENE_START_SPHERE( << -93.3159, -2368.9175, 13.2960 >>, 50 )
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(MERCS[MERC1_START].ID))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(MERCS[MERC1_START].ID))
SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), TRUE)
SET_PLAYER_FORCED_AIM(PLAYER_ID(), TRUE)
FORCE_PED_AI_AND_ANIMATION_UPDATE( PLAYER_PED_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
DISPLAY_SNIPER_SCOPE_THIS_FRAME()
TRIGGER_MUSIC_EVENT("DH2A_SNIPE_GUARDS_RT")
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1,"Stage 1: Snipe Guards")
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_2_FIRST_BOMB()
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
SET_ENTITY_COORDS(MIKE_PED(), <<-83.5905, -2361.7979, 13.2963>>)
set_entity_heading(mike_ped(),119.7045)
while not NEW_LOAD_SCENE_START_SPHERE(C4[C4_0_FRONT_OF_SHIP].EXPPOS,15,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PEDS[MPF_FRANK].ID
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_LAND )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_PED())
WAIT(0)
ENDWHILE
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(),COMP_TYPE_PROPS,PROPS_P0_HEADSET)
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
iStairNavMeshBlocker[0] = ADD_NAVMESH_BLOCKING_OBJECT(<<-135.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
iStairNavMeshBlocker[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<-214.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
//MERCS
CREATEMERCENARY(MERC4_C4_2)
//CREATE PATROLLING GUARDS
CREATEMERCENARY(MERC3_C4_2)
CREATEMERCENARY(MERC5_C4_2)
// CREATEMERCENARY(MERC6_C4_2) //@RJP B*1321797 - removing patrols of two guys
//SECOND MAST STAGE
// CREATEMERCENARY(MERC7_C4_2) // WILL FOLLOW WAYPOINT
// CREATEMERCENARY(MERC8_C4_2)
CREATEMERCENARY(MERC12_C4_3)
CREATEMERCENARY(MERC9_C4_3)
// CREATEMERCENARY(MERC10_C4_3,1) //@RJP B*1321797 - removing patrols of two guys
CREATEMERCENARY(MERC11_C4_3,1)
//TRAPPED STAGE
CREATEMERCENARY(MERC13_C4_3)
CREATEMERCENARY(MERC14_C4_3)
CREATEMERCENARY(MERC16_C4_4)
// CREATEMERCENARY(MERC15_C4_3) //@RJP B*1321797 - removing patrols of two guys
// CREATEMERCENARY(MERC17_C4_4)
CREATEMERCENARY(MERC18_C4_4)
//Pickups
CREATE_HEALTH_PICKUPS()
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//MISC
HOTSWAP_MENU(FALSE,FALSE,TRUE)
BHOTSWAP = TRUE
//COVER
CREATE_SCRIPTED_COVER()
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2,"STAGE 2: FIRST BOMB")
TRIGGER_MUSIC_EVENT("DH2A_1ST_BOMB_RT")
GIVE_MISSION_WEAPONS()
// do_stream_vol()
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
IF g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_FRANKLIN )
TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds, TRUE, TRUE )
IF isentityalive(mike_ped())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mike_ped(), TRUE)
ENDIF
ENDIF
ENDIF
IF PLAYER_PED_ID() = frank_ped()
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
bfirstaim = TRUE
ELSE
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
bFilledSpecialMeter = TRUE
ENDIF
IF PLAYER_PED_ID() = mike_ped()
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ELSE
START_AUDIO_SCENE("DH2A_SNIPE_GUARDS_scene")
ENDIF
ENDPROC
PROC SU_3_SECOND_BOMB()
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
//MIKE
SET_ENTITY_COORDS(MIKE_PED(), <<-94.9569, -2371.8770, 13.2969>>)
SET_ENTITY_HEADING(MIKE_PED(),97.3018)
while not NEW_LOAD_SCENE_START_SPHERE(C4[C4_0_FRONT_OF_SHIP].EXPPOS,15,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PEDS[MPF_FRANK].ID
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_LAND )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_PED())
WAIT(0)
ENDWHILE
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
//MISC
HOTSWAP_MENU(FALSE,FALSE,TRUE)
BHOTSWAP = TRUE
C4[C4_0_FRONT_OF_SHIP].BPLANTED = TRUE
CREATEMERCENARY(MERC4_C4_2)
//CREATE PATROLLING GUARDS
CREATEMERCENARY(MERC3_C4_2)
CREATEMERCENARY(MERC5_C4_2)
// CREATEMERCENARY(MERC6_C4_2) //@RJP B*1321797 - removing patrols of two guys
//SECOND MAST STAGE
// CREATEMERCENARY(MERC7_C4_2) // WILL FOLLOW WAYPOINT
// CREATEMERCENARY(MERC8_C4_2)
CREATEMERCENARY(MERC12_C4_3)
CREATEMERCENARY(MERC9_C4_3)
// CREATEMERCENARY(MERC10_C4_3,1) //@RJP B*1321797 - removing patrols of two guys
CREATEMERCENARY(MERC11_C4_3,1)
//TRAPPED STAGE
CREATEMERCENARY(MERC13_C4_3)
CREATEMERCENARY(MERC14_C4_3)
CREATEMERCENARY(MERC16_C4_4)
// CREATEMERCENARY(MERC15_C4_3) //@RJP B*1321797 - removing patrols of two guys
// CREATEMERCENARY(MERC17_C4_4)
CREATEMERCENARY(MERC18_C4_4)
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
iStairNavMeshBlocker[0] = ADD_NAVMESH_BLOCKING_OBJECT(<<-135.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
iStairNavMeshBlocker[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<-214.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
//Pickups
CREATE_HEALTH_PICKUPS()
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
//COVER
CREATE_SCRIPTED_COVER()
TRIGGER_MUSIC_EVENT("DH2A_2ND_BOMB_RT")
GIVE_MISSION_WEAPONS()
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3,"STAGE 3: SECOND BOMB")
// do_stream_vol()
CREATE_PROXY_BOMBS(1)
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
IF g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_FRANKLIN )
TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds, TRUE, TRUE )
IF isentityalive(mike_ped())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mike_ped(), TRUE)
ENDIF
ENDIF
ENDIF
IF PLAYER_PED_ID() = frank_ped()
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
bfirstaim = TRUE
ELSE
IF isentityalive(frank_ped())
TASK_AIM_GUN_AT_ENTITY( frank_ped(), mike_ped(), -1 )
ENDIF
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
bFilledSpecialMeter = TRUE
ENDIF
IF PLAYER_PED_ID() = mike_ped()
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ELSE
START_AUDIO_SCENE("DH2A_SNIPING_scene")
ENDIF
ENDPROC
PROC SU_4_THIRD_BOMB()
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
SET_ENTITY_COORDS(MIKE_PED(),<< -129.6871, -2366.8972, 8.3193 >>)
SET_ENTITY_HEADING(MIKE_PED(), 183.9491)
while not NEW_LOAD_SCENE_START_SPHERE(C4[C4_1_first_mast].EXPPOS,15,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PEDS[MPF_FRANK].ID
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_LAND )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_PED())
WAIT(0)
ENDWHILE
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
// PREVIOUS MERCS DEAD ALREADY NO NEED FOR DIALOGUE
MERCS[MERC3_C4_2].BALIVE = FALSE
MERCS[MERC4_C4_2].BALIVE = FALSE
MERCS[MERC5_C4_2].BALIVE = FALSE
MERCS[MERC6_C4_2].BALIVE = FALSE
MERCS[MERC7_C4_2].BALIVE = FALSE
//SECOND MAST STAGE
//@RJP merc7 is now right next to the bomb site, don't spawn him in this stage
// CREATEMERCENARY(MERC7_C4_2) // WILL FOLLOW WAYPOINT
// CREATEMERCENARY(MERC8_C4_2)
CREATEMERCENARY(MERC12_C4_3)
CREATEMERCENARY(MERC9_C4_3)
// CREATEMERCENARY(MERC10_C4_3,1) //@RJP B*1321797 - removing patrols of two guys
CREATEMERCENARY(MERC11_C4_3,1)
//TRAPPED STAGE
CREATEMERCENARY(MERC13_C4_3)
CREATEMERCENARY(MERC14_C4_3)
CREATEMERCENARY(MERC16_C4_4)
// CREATEMERCENARY(MERC15_C4_3) //@RJP B*1321797 - removing patrols of two guys
// CREATEMERCENARY(MERC17_C4_4)
CREATEMERCENARY(MERC18_C4_4)
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
iStairNavMeshBlocker[0] = ADD_NAVMESH_BLOCKING_OBJECT(<<-135.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
iStairNavMeshBlocker[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<-214.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
//Pickups
CREATE_HEALTH_PICKUPS()
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//MISC
HOTSWAP_MENU(FALSE,FALSE,TRUE)
BHOTSWAP = TRUE
C4[C4_0_FRONT_OF_SHIP].BPLANTED = TRUE
C4[C4_1_FIRST_MAST].BPLANTED = TRUE
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
//COVER
CREATE_SCRIPTED_COVER()
GIVE_MISSION_WEAPONS()
TRIGGER_MUSIC_EVENT("DH2A_3RD_BOMB_RT")
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4,"STAGE 3: THIRD BOMB")
CREATE_PROXY_BOMBS(2)
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
IF g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_FRANKLIN )
TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds, TRUE, TRUE )
IF isentityalive(mike_ped())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mike_ped(), TRUE)
ENDIF
ENDIF
ENDIF
IF PLAYER_PED_ID() = frank_ped()
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
bfirstaim = TRUE
ELSE
IF isentityalive(frank_ped())
TASK_AIM_GUN_AT_ENTITY( frank_ped(), mike_ped(), -1 )
ENDIF
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
bFilledSpecialMeter = TRUE
ENDIF
IF PLAYER_PED_ID() = mike_ped()
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ELSE
START_AUDIO_SCENE("DH2A_SNIPING_scene")
ENDIF
// do_stream_vol()
ENDPROC
PROC SU_5_FOURTH_BOMB()
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
//MIKE
SET_ENTITY_COORDS(MIKE_PED(),<< -191.4221, -2365.4763, 8.3193 >>)
SET_ENTITY_HEADING(MIKE_PED(), 176.1654)
while not NEW_LOAD_SCENE_START_SPHERE(C4[C4_2_second_mast].EXPPOS,15,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = PEDS[MPF_FRANK].ID
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_FRANK].ID, TRUE )
ENDIF
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_LAND )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_PED())
WAIT(0)
ENDWHILE
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,1,PEDS[MPF_MIKE].ID,"MICHAEL")
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
// PREVIOUS MERCS DEAD ALREADY NO NEED FOR DIALOGUE
MERCS[MERC3_C4_2].BALIVE = FALSE
MERCS[MERC4_C4_2].BALIVE = FALSE
MERCS[MERC5_C4_2].BALIVE = FALSE
MERCS[MERC6_C4_2].BALIVE = FALSE
MERCS[MERC7_C4_2].BALIVE = FALSE
MERCS[MERC8_C4_2].BALIVE = FALSE
MERCS[MERC10_C4_3].BALIVE = FALSE
MERCS[MERC11_C4_3].BALIVE = FALSE
MERCS[MERC12_C4_3].BALIVE = FALSE
MERCS[MERC14_C4_3].BALIVE = FALSE
MERCS[MERC15_C4_3].BALIVE = FALSE
CREATEMERCENARY(MERC13_C4_3)
// CREATEMERCENARY(MERC14_C4_3)
CREATEMERCENARY(MERC16_C4_4)
// CREATEMERCENARY(MERC15_C4_3)
// CREATEMERCENARY(MERC17_C4_4)
CREATEMERCENARY(MERC18_C4_4)
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
iStairNavMeshBlocker[0] = ADD_NAVMESH_BLOCKING_OBJECT(<<-135.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
iStairNavMeshBlocker[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<-214.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
//Pickups
CREATE_HEALTH_PICKUPS()
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//MISC
HOTSWAP_MENU(FALSE,FALSE,TRUE)
BHOTSWAP = TRUE
C4[C4_0_FRONT_OF_SHIP].BPLANTED = TRUE
C4[C4_1_FIRST_MAST].BPLANTED = TRUE
C4[C4_2_SECOND_MAST].BPLANTED = TRUE
IMIKE_AI_STAGE = 0
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
//COVER
CREATE_SCRIPTED_COVER()
give_mission_weapons()
// TRIGGER_MUSIC_EVENT("DH2A_3RD_BOMB_PLANTED")
TRIGGER_MUSIC_EVENT("DH2A_4TH_BOMB_RT")
CREATE_PROXY_BOMBS(3)
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
IF g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_FRANKLIN )
TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds, TRUE, TRUE )
IF isentityalive(mike_ped())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mike_ped(), TRUE)
ENDIF
ENDIF
ENDIF
IF PLAYER_PED_ID() = frank_ped()
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
bfirstaim = TRUE
ELSE
IF isentityalive(frank_ped())
TASK_AIM_GUN_AT_ENTITY( frank_ped(), mike_ped(), -1 )
ENDIF
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
bFilledSpecialMeter = TRUE
ENDIF
IF PLAYER_PED_ID() = mike_ped()
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
ELSE
START_AUDIO_SCENE("DH2A_SNIPING_scene")
ENDIF
ENDPROC
PROC SU_6_WAY_OUT()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_FRANKLIN,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
//frank
SET_ENTITY_COORDS(PLAYER_PED_ID(),<< -143.8203, -2488.2612, 43.4412 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 35.7369)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-86.7, -2353.2, 0>>, 270.3750)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
//MERCS
MERCS[MERC3_C4_2].BALIVE = FALSE
MERCS[MERC4_C4_2].BALIVE = FALSE
MERCS[MERC5_C4_2].BALIVE = FALSE
MERCS[MERC7_C4_2].BALIVE = FALSE
MERCS[MERC8_C4_2].BALIVE = FALSE
MERCS[MERC10_C4_3].BALIVE = FALSE
MERCS[MERC11_C4_3].BALIVE = FALSE
MERCS[MERC12_C4_3].BALIVE = FALSE
// CREATEMERCENARY(merc27_cars,150,TRUE)
// CREATEMERCENARY(merc28_cars,150,TRUE)
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
CREATE_PROXY_BOMBS(3)
GIVE_MISSION_WEAPONS()
HOTSWAP_MENU(FALSE,FALSE,TRUE)
TRIGGER_MUSIC_EVENT("DH2A_WAY_OUT_RT")
START_AUDIO_SCENE("DH2A_SHOOTOUT_SNIPING_SCENE")
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
SET_ENTITY_COORDS( PLAYER_PED_ID(), << -143.8203, -2488.2612, 43.4412 >> )
// SET_ENTITY_HEADING( PLAYER_PED_ID(), 35.7369 )
// NEW_LOAD_SCENE_START_SPHERE( <<-221.8633, -2376.6187, 12.3329>>, 50 )
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PED_NO_TIME_DELAY_BEFORE_SHOT( PLAYER_PED_ID() )
balarmtriggered = TRUE
bAimIntro = TRUE
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_7_DETONATE()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_FRANKLIN,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
//FRANK
SET_ENTITY_COORDS(PLAYER_PED_ID(),<< -143.8203, -2488.2612, 43.4412 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 10.7369)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-80.2056, -2288.2832,0>>, 22)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
//FRANK
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_MIKE].ID,CHAR_MICHAEL,<< -228.9973, -2283.4854, 3.3515 >>,10)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,1,PEDS[MPF_MIKE].ID,"MICHAEL")
SCUBA_SUITE_UP(MIKE_PED(),TRUE)
SET_ENABLE_SCUBA(MIKE_PED(),TRUE)
SET_PED_DIES_IN_WATER(MIKE_PED(),FALSE)
//MERC
MERCS[MERC3_C4_2].BALIVE = FALSE
MERCS[MERC4_C4_2].BALIVE = FALSE
MERCS[MERC5_C4_2].BALIVE = FALSE
MERCS[MERC7_C4_2].BALIVE = FALSE
MERCS[MERC8_C4_2].BALIVE = FALSE
MERCS[MERC10_C4_3].BALIVE = FALSE
MERCS[MERC11_C4_3].BALIVE = FALSE
MERCS[MERC12_C4_3].BALIVE = FALSE
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
VEHS[MVF_MERC1].ID = CREATE_VEHICLE(landstalker,<<-198.2650, -2404.2424, 5.0013>>, 127.4752)
VEHS[MVF_MERC2].ID = CREATE_VEHICLE(landstalker,<<-210.8442, -2406.9985, 5.0012>>, 297.9603)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[MVF_MERC1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[MVF_MERC2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[MVF_MERC1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[MVF_MERC2].ID,TRUE)
//SET UP CRATES
OBJCOV1 = CREATE_OBJECT (PROP_CRATEPILE_07A, <<-215.770004,-2392.330078,5>>)
SET_ENTITY_ROTATION(OBJCOV1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( OBJCOV1, 200 )
OBJCOV2 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-211.029999,-2388.360107,5>>)
SET_ENTITY_ROTATION (OBJCOV2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( OBJCOV2, 200 )
OBJCOV3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5>>)
SET_ENTITY_ROTATION (OBJCOV3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( OBJCOV3, 200 )
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
GIVE_MISSION_WEAPONS()
HOTSWAP_MENU(FALSE,FALSE,TRUE)
TRIGGER_MUSIC_EVENT("DH2A_DETONATE_RT")
CREATE_PROXY_BOMBS(3)
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
balarmtriggered = TRUE
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_8_EXPLOSION_CTSCNE()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(MIKE_PED(),<<-80.2056, -2288.2832,0>>)
SET_ENTITY_HEADING(MIKE_PED(), 22)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(PEDS[MPF_FRANK].ID,CHAR_FRANKLIN,<< -143.8203, -2488.2612, 43.4412 >>, 10.7369)
WAIT(0)
ENDWHILE
ADD_PED_FOR_DIALOGUE(CONVO_STRUCT,3,PEDS[MPF_FRANK].ID,"FRANKLIN")
//dinghy
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-80.2056, -2288.2832,0>>, 22)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
//VEHICLES
VEHS[MVF_MERC1].ID = CREATE_VEHICLE(landstalker,<<-198.2650, -2404.2424, 5.0013>>, 127.4752)
VEHS[MVF_MERC2].ID = CREATE_VEHICLE(landstalker,<<-210.8442, -2406.9985, 5.0012>>, 297.9603)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[MVF_MERC1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[MVF_MERC2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[MVF_MERC1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[MVF_MERC2].ID,TRUE)
//MISC
HOTSWAP_MENU(FALSE,FALSE,TRUE)
REQUEST_CUTSCENE("LSDH_2A_RF_01")
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_WATER )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(),TRUE)
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
SET_ENABLE_SCUBA(MIKE_PED(),TRUE)
SET_PED_DIES_IN_WATER(MIKE_PED(),FALSE)
GIVE_MISSION_WEAPONS()
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP()
BOOL bFinishedLoad = FALSE
INT iWaitTime = (GET_GAME_TIMER()+5000)
//audio
while not bFinishedLoad
IF LOAD_STREAM("PORT_OF_LS_SHIP_BLOW_UP_MASTER")
CPRINTLN( DEBUG_MISSION, "FINISHED LOADING STREAM PORT_OF_LS_SHIP_BLOW_UP_MASTER" )
bFinishedLoad = TRUE
ELIF GET_GAME_TIMER() > iWaitTime
CPRINTLN( DEBUG_MISSION, "TIME'S UP, FAILED TO LOAD" )
bFinishedLoad = TRUE
ENDIF
CPRINTLN( DEBUG_MISSION, "LOADING STREAM PORT_OF_LS_SHIP_BLOW_UP_MASTER" )
wait(0)
endwhile
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_9_THE_GOODS()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_DESTROYED)
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(MIKE_PED(),<<-90.4927, -2288.0029, -1.3081>>)
SET_ENTITY_HEADING(MIKE_PED(), 130.4705)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
//dinghy
IF NOT isentityalive( vehs[mvf_dinghy].id )
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-78.1857, -2287.6528, 0.0>>, 56.7927)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
ENDIF
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
PRELOAD_OUTFIT( MIKE_PED(), OUTFIT_P0_SCUBA_WATER )
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(MIKE_PED())
AND NOT HAS_PED_PRELOAD_PROP_DATA_FINISHED(MIKE_PED())
WAIT(0)
ENDWHILE
SCUBA_SUITE_UP(MIKE_PED(),TRUE)
WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_PED())
WAIT(0)
ENDWHILE
RELEASE_PED_PRELOAD_VARIATION_DATA(MIKE_PED())
RELEASE_PED_PRELOAD_PROP_DATA(MIKE_PED())
request_ptfx_asset()
IF NOT has_ptfx_asset_loaded()
WAIT(0)
ENDIF
CPRINTLN(DEBUG_MISSION, "ready to END_REPLAY_SETUP" )
END_REPLAY_SETUP(vehs[mvf_dinghy].id)
IF NOT IS_PED_IN_ANY_VEHICLE( mike_ped() )
AND NOT IS_ENTITY_DEAD(vehs[mvf_dinghy].id)
SET_PED_INTO_VEHICLE(mike_ped(),vehs[mvf_dinghy].id)
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
SET_BOAT_REMAINS_ANCHORED_WHILE_PLAYER_IS_DRIVER(vehs[mvf_dinghy].id,TRUE)
SET_BOAT_ANCHOR(vehs[mvf_dinghy].id,TRUE)
ENDIF
// GIVE_MISSION_WEAPONS()
HOTSWAP_MENU(TRUE,FALSE,FALSE)
POINT_GAMEPLAY_CAM_AT_COORD(254.4721)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(45)
TRIGGER_MUSIC_EVENT("DH2A_GOODS_RT")
REQUEST_IPL( "SUNK_SHIP_FIRE" )
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_10_END_CUTSCENE()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_TREVOR,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_DESTROYED)
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(),<<-332.2139, -2570.9912, 5.0010>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 97.2111)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
vehs[mvf_sub].id = CREATE_VEHICLE( SUBMERSIBLE, <<-466.7967, -2381.3794, -12.1213>> )
objLoot = CREATE_OBJECT(Prop_Military_Pickup_01,<<-191.12270, -2331.33813, -19.40053>>)
REQUEST_CUTSCENE("LSDH_2A_EXT")
REQUEST_SCRIPT("docks2ASubHandler")
END_REPLAY_SETUP()
HOTSWAP_MENU(TRUE,TRUE,FALSE)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
ELSE
WAIT(0)
ENDIF
ENDPROC
PROC SU_PASSED()
//PLAYER
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_TREVOR,TRUE)
//IPL
MANAGE_IPLS(BUILDINGSTATE_DESTROYED)
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(),<<-332.2139, -2570.9912, 5.0010>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 97.2111)
while not NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(player_ped_id()),10,NEWLOADSCENE_FLAG_REQUIRE_COLLISION)
wait(0)
endwhile
while not IS_NEW_LOAD_SCENE_LOADED()
wait(0)
endwhile
NEW_LOAD_SCENE_STOP()
ENDIF
END_REPLAY_SETUP()
HOTSWAP_MENU(TRUE,TRUE,FALSE)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
ELSE
WAIT(0)
ENDIF
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Cleanup
// -----------------------------------------------------------------------------------------------------------
proc mission_cleanup(bool bmissionpassed = false)
REPLAY_STOP_EVENT()
SET_RADAR_ZOOM_PRECISE(0)
RELEASE_SCRIPT_AUDIO_BANK()
IF IS_ENTITY_OK(PLAYER_PED_ID())
STOP_PED_SPEAKING( PLAYER_PED_ID(), FALSE )
ENDIF
IF IS_GAMEPLAY_HINT_ACTIVE()
STOP_GAMEPLAY_HINT()
ENDIF
IF IS_IPL_ACTIVE("SUNK_SHIP_FIRE")
REMOVE_IPL("SUNK_SHIP_FIRE")
ENDIF
//restore Michael's weapons from before the mission
if isentityalive(mike_ped())
RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT( mike_ped() ) //if michael ped exists and is the player
else
IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL ) //if michael ped is the player and is dead
IF IS_PED_INJURED(PLAYER_PED_ID())
g_RestoreSnapshotWeaponsOnDeath = TRUE
ENDIF
ENDIF
RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT_FOR_CHAR(CHAR_MICHAEL) //if michael ped does not exists or is not the player
endif
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rayfire_ship)
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rayfire_ship, RFMO_STATE_RESET)
ENDIF
//Set water back to normal
WATER_OVERRIDE_SET_STRENGTH(0)
CLEAR_TIMECYCLE_MODIFIER()
//-------------------peds-----------------------
//all peds are no longer needed except the player ped
int i
for i = 0 to enum_to_int(mpf_num_of_peds)-1
if isentityalive(peds[i].id)
if peds[i].id != player_ped_id()
if DOES_ENTITY_BELONG_TO_THIS_SCRIPT( peds[i].id )
set_ped_as_no_longer_needed(peds[i].id)
endif
endif
if does_blip_exist(peds[i].blip)
remove_blip(peds[i].blip)
endif
endif
endfor
if isentityalive(player_ped_id())
clear_ped_tasks(player_ped_id())
endif
//--------------------mercs-----------------------
for i = 0 to enum_to_int(mmf_num_of_mercs) -1
if isentityalive(mercs[i].id)
if does_blip_exist(mercs[i].blip)
remove_blip(mercs[i].blip)
endif
SET_PED_KEEP_TASK(mercs[i].id,true)
if DOES_ENTITY_BELONG_TO_THIS_SCRIPT( mercs[i].id )
set_ped_as_no_longer_needed(mercs[i].id)
endif
endif
endfor
//---------------------vehs-----------------------
for i = 0 to enum_to_int(mvf_num_of_veh)-1
if isentityalive(vehs[i].id)
if DOES_ENTITY_BELONG_TO_THIS_SCRIPT( vehs[i].id )
set_vehicle_as_no_longer_needed(vehs[i].id)
endif
endif
if does_blip_exist(vehs[i].blip)
remove_blip(vehs[i].blip)
endif
endfor
//-------------------bombs-------------------------
for i = 0 to enum_to_int(c4_num_of_bombs) - 1
if does_blip_exist(c4[i].blip)
remove_blip(c4[i].blip)
endif
endfor
//-------------------alarm-------------------------
IF IS_ALARM_PLAYING( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
STOP_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS", TRUE )
ENDIF
//-------------------destroy-----------------------
clear_prints()
clear_focus()
clear_help()
destroy_all_cams()
if is_cutscene_active()
stop_cutscene()
remove_cutscene()
endif
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(1.0)
IF IS_VALID_INTERIOR( interior_living_room )
unpin_interior(interior_living_room)
ENDIF
REMOVE_ALL_COVER_BLOCKING_AREAS()
SET_ALL_VEHICLE_GENERATORS_ACTIVE()
remove_scenario_blocking_areas()
CLEAR_PED_NON_CREATION_AREA()
kill_any_conversation()
if does_blip_exist(blip_objective)
remove_blip(blip_objective)
endif
if does_blip_exist(blipcrate)
remove_blip(blipcrate)
endif
IF DOES_BLIP_EXIST(biSonarBlip)
REMOVE_BLIP(biSonarBlip)
ENDIF
if does_entity_exist(objDoor)
delete_object(objDoor)
endif
IF DOES_ENTITY_EXIST(objDoorHide)
SET_ENTITY_VISIBLE(objDoorHide, TRUE)
SET_OBJECT_AS_NO_LONGER_NEEDED(objDoorHide)
ENDIF
IF DOES_ENTITY_EXIST( objSofa )
SET_ENTITY_VISIBLE( objSofa, TRUE )
SET_OBJECT_AS_NO_LONGER_NEEDED( objSofa )
ENDIF
if does_entity_exist(objFlare)
delete_object(objFlare)
endif
REPEAT COUNT_OF(objBomb) i
if does_entity_exist(objBomb[i])
delete_object(objBomb[i])
endif
ENDREPEAT
if does_particle_fx_looped_exist(flare_ptfx)
STOP_PARTICLE_FX_LOOPED(flare_ptfx)
endif
IF DOES_CAM_EXIST( camera_a )
DESTROY_CAM( camera_a )
ENDIF
IF DOES_CAM_EXIST( camera_b )
DESTROY_CAM( camera_b )
ENDIF
//locates stuff
clear_mission_locate_stuff(slocatesdata)
clear_mission_location_text_and_blips(slocatesdata)
//phone book
remove_contact_from_individual_phonebook(char_detonatebomb,michael_book)
RESET_PUSH_IN(sPushInData)
// do_stream_vol(false)
//-------------------resets------------------------
set_wanted_level_multiplier(1) //wanted level for mission reset to normal
SET_MAX_WANTED_LEVEL(5)
display_radar(true)
display_hud(true)
disable_taxi_hailing(false)
set_player_control(player_id(), true)
if isentityalive(player_ped_id())
set_player_force_skip_aim_intro(player_id(), false)
set_player_forced_aim(player_id(), false)
endif
set_time_scale(1.0)
if is_screen_faded_out()
and bmissionpassed
do_screen_fade_in(2000)
endif
ENABLE_ALL_DISPATCH_SERVICES(TRUE)
if not has_sound_finished(sound_underwater_ambience)
stop_sound(sound_underwater_ambience)
endif
if not has_sound_finished(sound_underwater_rebreather)
stop_sound(sound_underwater_rebreather)
endif
if not has_sound_finished(i_sound_scuba_gear)
stop_sound(i_sound_scuba_gear)
endif
if not has_sound_finished(i_sound_swishing)
stop_sound(i_sound_swishing)
endif
STOP_AUDIO_SCENES()
// OVERRIDE_UNDERWATER_STREAM("DH_FINALE_2A_STREAM", FALSE)
// if bUnderWaterStreamed
// STOP_STREAM()
// endif
unregister_script_with_audio()
set_vehicle_model_is_suppressed(tailgater,false)
set_vehicle_model_is_suppressed(BUFFALO,false)
set_vehicle_model_is_suppressed(FORKLIFT,false)
disable_taxi_hailing(false)
restore_player_ped_variations(mike_ped())
restore_player_ped_variations(frank_ped())
restore_player_ped_variations(trev_ped())
allow_dialogue_in_water(false)
//set_follow_ped_cam_view_mode(cam_view_mode_third_person_medium)
if GET_USINGSEETHROUGH()
SET_SEETHROUGH(false)
endif
SEETHROUGH_RESET()
CLEANUP_SELECTOR_CAM(SCAMDETAILS)
//---------------------------------------------------
println("...docks heist 2a mission cleanup")
endproc
// -----------------------------------------------------------------------------------------------------------
// mission pass
// -----------------------------------------------------------------------------------------------------------
proc mission_passed()
trigger_music_event("dh2a_mission_complete")
int icrewmem
repeat get_heist_crew_size(heist_docks) icrewmem
set_heist_end_screen_crew_status(heist_docks, get_heist_crew_member_at_index(heist_docks, icrewmem), cmst_fine)
endrepeat
//INFORM_MISSION_STATS_OF_INCREMENT(DH2A_ITEMS_STOLEN)
INFORM_MISSION_STATS_OF_FINANCIAL_DAMAGE(0)
set_heist_end_screen_potential_take(heist_docks, 10000000)
set_heist_end_screen_actual_take(heist_docks, 10000000)
//add_heist_end_screen_stolen_item(heist_docks, "weapons_lbl", 10000000)//item logging is now gone
//set_heist_end_screen_max_items(heist_docks, 1 )
//display_heist_end_screen(heist_docks) //this has been integrated with the mission stat system
println("...docks heist 2a mission passed")
AWARD_ACHIEVEMENT_FOR_MISSION(ACH06) // Back On the Boat
mission_flow_mission_passed()
mission_cleanup()
terminate_this_thread()
endproc
// -----------------------------------------------------------------------------------------------------------
// mission fail
// -----------------------------------------------------------------------------------------------------------
proc mission_failed(mff_mission_fail_flags fail_condition = mff_default)
if not sCamDetails.bRun
string strreason = ""
//show fail message
switch fail_condition
case mff_debug_fail
strreason = "dckh_fail"
break
case mff_franklin_dead
strreason = "cmn_fdied"
break
case mff_michael_dead
strreason = "cmn_mdied"
break
case mff_trevor_dead
strreason = "cmn_tdied"
break
case mff_left_trev
strreason = "CMN_FLEFT"
break
case mff_left_michael
strreason = "cmn_mleft"
break
case mff_left_docks
strreason = "dckh_mfla" //mike abandoned the heist
break
case mff_out_pos
strreason = "dckh_mfoutpos"
break
case mff_TREV_LEFT
strreason = "DCKH_TFLA"
break
case mff_frank_car_des
strreason = "cmn_fdest"
break
case mff_spotted
strreason = "dckh_mfspo"
break
case mff_sub_des
strreason = "dckh_mfds"
break
case mff_sub_stuck
strreason = "DCKH_MFDS2"
break
case mff_area
IF PLAYER_PED_ID() = mike_ped()
strreason = "dckh_flemt"
ELSE
strreason = "DCKH_FLEFT"
ENDIF
break
case mff_ammo
strreason = "dckh_ammo"
break
case mff_ammob
strreason = "dckh_ammob"
break
case mff_dinghy_des
strreason = "dckh_Fdingy"
break
case mff_dinghy_stuck
strreason = "dckh_Fdingy2"
break
case mff_police
strreason = "dckh_polf"
break
case mff_bombs_exploded
strreason = "DCKH_MFBOMB" //bombs were exploded too early
break
default
strreason = "dckh_fail"
break
endswitch
trigger_music_event("dh2a_dead")
println("...docks heist 2a mission failed")
IF PLAYER_PED_ID() = FRANK_PED()
AND mission_stage > ENUM_TO_INT(msf_0_drive_to_bridge)
g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<-143.7584, -2488.7458, 43.4355>>, 5.5522)
SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<-148.3160, -2498.0483, 47.2429>>, 54.9127)
ELIF PLAYER_PED_ID() = MIKE_PED()
g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_MIKE
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<14.6669, -2543.3850, 5.0503>>, 32.8470)
SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<17.0702, -2542.6228, 5.0500>>, 235.9222)
ENDIF
mission_flow_mission_failed_with_reason(strreason)
while not get_mission_flow_safe_to_cleanup()
//maintain anything that could look weird during fade out (e.g. enemies walking off).
wait(0)
endwhile
// check if we need to respawn the player in a different position,
// if so call mission_flow_set_fail_warp_location() + set_replay_declined_vehicle_warp_location here
mission_cleanup() // must only take 1 frame and terminate the thread
terminate_this_thread()
endif
endproc
proc reset_everything()
//-----------------------destroys---------------------------
if is_cutscene_active()
stop_cutscene()
remove_cutscene()
while is_cutscene_active()
wait(0)
endwhile
endif
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
STOP_PED_SPEAKING( PLAYER_PED_ID(), TRUE )
SET_RADAR_ZOOM_PRECISE(0)
RELEASE_SCRIPT_AUDIO_BANK()
//Set water back to normal
WATER_OVERRIDE_SET_STRENGTH(0)
CLEAR_TIMECYCLE_MODIFIER()
//-------------------alarm-------------------------
IF IS_ALARM_PLAYING( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
STOP_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS", TRUE )
ENDIF
//all peds are deleted
int i
for i = 0 to enum_to_int(mpf_num_of_peds)-1
if does_entity_exist(peds[i].id)
and (not is_ped_injured(peds[i].id))
IF NOT bSkipDetonation
if is_ped_in_any_vehicle(peds[i].id)
set_ped_coords_no_gang(peds[i].id,(get_entity_coords(get_vehicle_ped_is_in(peds[i].id))+<<0,-2,0>>))
endif
if peds[i].id != player_ped_id()
delete_ped(peds[i].id)
endif
endif
endif
endfor
//all mercs are deleted
for i = 0 to enum_to_int(mmf_num_of_mercs) -1
mercs[i].bstats = false
mercs[i].iAdvanceTimer = 0
mercs[i].iAdvanceState = 0
mercs[i].currentsit = MS_SIT_NONE
mercs[i].currentaction = GA_FIND_COVER
mercs[i].bincombat = FALSE
mercs[i].bbulletmiss = FALSE
mercs[i].bStealthKill = false
mercs[i].bSpottedDead = FALSE
mercs[i].bPrintHelp = FALSE
mercs[i].bAlertSpeech = FALSE
mercs[i].bzombie = false
mercs[i].irevertactiontime = -1
if DOES_BLIP_EXIST( mercs[i].blip )
REMOVE_BLIP( mercs[i].blip )
endif
REMOVE_COVER_POINT(mercs[i].cov)
if does_entity_exist(mercs[i].id)
if(not is_ped_injured(mercs[i].id))
if is_ped_in_any_vehicle(mercs[i].id)
set_ped_coords_no_gang(mercs[i].id,(get_entity_coords(get_vehicle_ped_is_in(mercs[i].id))+<<0,-2,0>>))
endif
delete_ped(mercs[i].id)
else
delete_ped(mercs[i].id)
endif
endif
endfor
//all vehicles are deleted
for i = 0 to enum_to_int(mvf_num_of_veh)-1
if does_entity_exist(vehs[i].id)
IF NOT bSkipDetonation
delete_vehicle(vehs[i].id)
ENDIF
endif
endfor
bSkipDetonation = FALSE
for i = 0 to enum_to_int(c4_num_of_bombs) -1
if does_blip_exist(c4[i].blip)
remove_blip(c4[i].blip)
endif
endfor
for i = 0 TO COUNT_OF(sPedHeatScale) - 1
sPedHeatScale[i].iHeatScale = 0
sPedHeatScale[i].iHeatState = 0
endfor
//Remove health pickups
DELETE_HEALTH_PICKUPS()
if does_entity_exist(objLoot)
delete_object(objLoot)
endif
if does_blip_exist(blipcrate)
remove_blip(blipcrate)
endif
if does_entity_exist(objcov1)
delete_object(objcov1)
endif
if does_entity_exist(objcov2)
delete_object(objcov2)
endif
if does_entity_exist(objcov3)
delete_object(objcov3)
endif
if does_entity_exist(objcov4)
delete_object(objcov4)
endif
if does_entity_exist(objcov5)
delete_object(objcov5)
endif
if does_blip_exist(blip_objective)
remove_blip(blip_objective)
endif
if does_entity_exist(objDoor)
delete_object(objDoor)
endif
if does_particle_fx_looped_exist(flare_ptfx)
STOP_PARTICLE_FX_LOOPED(flare_ptfx)
endif
if does_entity_exist(objFlare)
delete_object(objFlare)
endif
IF DOES_CAM_EXIST( camera_a )
DESTROY_CAM( camera_a )
ENDIF
IF DOES_CAM_EXIST( camera_b )
DESTROY_CAM( camera_b )
ENDIF
IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iStairNavMeshBlocker[0])
REMOVE_NAVMESH_BLOCKING_OBJECT(iStairNavMeshBlocker[0])
ENDIF
IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iStairNavMeshBlocker[1])
REMOVE_NAVMESH_BLOCKING_OBJECT(iStairNavMeshBlocker[1])
ENDIF
IF DOES_ENTITY_EXIST(objDoorHide)
SET_ENTITY_VISIBLE(objDoorHide, TRUE)
SET_OBJECT_AS_NO_LONGER_NEEDED(objDoorHide)
ENDIF
IF DOES_ENTITY_EXIST( objSubHook )
CPRINTLN( DEBUG_MISSION, "SETTING SUBHHOOK AS NO LONGER NEEDED." )
SET_ENTITY_AS_NO_LONGER_NEEDED( objSubHook )
ENDIF
REPEAT COUNT_OF(objBomb) i
if does_entity_exist(objBomb[i])
delete_object(objBomb[i])
endif
ENDREPEAT
//locates stuff
clear_mission_locate_stuff(slocatesdata)
clear_mission_location_text_and_blips(slocatesdata)
//clear ai tasks
if isentityalive(player_ped_id())
clear_ped_tasks(player_ped_id())
endif
//phone book
remove_contact_from_individual_phonebook(char_detonatebomb,michael_book)
//sequence
clear_sequence_task(seq)
clear_prints()
kill_any_conversation()
clear_focus()
//sounds
STOP_AUDIO_SCENES()
STOP_STREAM()
if not has_sound_finished(ibeepid)
stop_sound(ibeepid)
endif
if not has_sound_finished(sound_underwater_ambience)
stop_sound(sound_underwater_ambience)
endif
if not has_sound_finished(sound_underwater_rebreather)
stop_sound(sound_underwater_rebreather)
endif
if not has_sound_finished(i_sound_swishing)
stop_sound(i_sound_swishing)
endif
if not has_sound_finished(i_sound_scuba_gear)
stop_sound(i_sound_scuba_gear)
endif
if not has_sound_finished(i_sound_heli_attack)
stop_sound(i_sound_heli_attack)
endif
// OVERRIDE_UNDERWATER_STREAM("DH_FINALE_2A_STREAM", FALSE)
IF IS_VALID_INTERIOR( interior_living_room )
unpin_interior(interior_living_room)
ENDIF
// do_stream_vol(false)
SET_PLAYER_PED_CAN_ENTER_SAVEHOUSE(CHAR_FRANKLIN, SAVEHOUSE_TREVOR_VB, false)
REMOVE_COVER_POINT(CUSTOMCOVER)
REMOVE_COVER_POINT( scriptCover[0] )
REMOVE_COVER_POINT( scriptCover[1] )
REMOVE_COVER_POINT( scriptCover[2] )
//------------resets-------------------------
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
//wanted level
set_wanted_level_multiplier(0)
clear_player_wanted_level(player_id())
//reset player control
set_player_control(player_id(), true)
set_player_force_skip_aim_intro(player_id(), false)
set_player_forced_aim(player_id(), false)
//bomb stage init
set_time_scale(1)
allow_dialogue_in_water(false)
bFilledSpecialMeter = FALSE
//bools
bAimIntro = false
bhotswap = false
bforced = false
bGotWeapons = false
bRaisedAlarm = false
bFrankKilled13 = false
bFrankKilled14 = false
//------------ Sniper ------------
b_sniper_scope_active = false
b_nightvision_active = false
//-------------text------------
bdialogueplayed = false
bdialogueplayed2 = false
bDialoguePlayed3 = false
bDialoguePlayed4 = false
bprintdisplayed = false
bprintdisplayed2 = false
bHelpDisplayed = false
bprintlft_mike = false
bprintlft_trev = false
// bQuickHelp = false
bVantageText = false
bSonarHelp = false
bMikeStealthDiag = false
bMikeHealthWarn = false
bMikeCombatWarn = FALSE
bPrintProtect = FALSE
bFrankSaysMove = FALSE
//---------alarm stuff----------
bcsalarmtriggered = false
balarmtriggered = false
balarminitialised = false
binitialisedelayalr = false
bAlertedEarly = false
bsnipestagecheck = false
bfirstaim = false
bkilledbybuddy = false
bFrankFired = false
bincombat = false
//-----------Audio------------
bAudio_snipeLoaded = false
iaudioswitch_snipeStage = 0
bAttachSoundPlayed = false
bStopRebreather = false
//----------Cutscene---------
b_cutscene_loaded = false
bCanSkip = false
bSwappedToFranklin = false
bSwappedToTrevor = false
bSwitchOccluders = false
iPoliceHeliState = 0
icutstage = 0
iCarMercDiag = 0
iCarConv = 0
iWayOutDiag = 0
iHeliConv = 0
bHeliConv = FALSE
iCorpseHandlerState = 0
iBomb2Spawned = 0
iBomb3Spawned = 0
iBomb4Spawned = 0
players_scene_id = -1
isnipedelay = -1
iMercVeh1State = 0
iMercVeh2State = 0
iMercHeliState = 0
//@RJP restting cam swap timer
// iFranklinCamSwapTimer = -1
//cams
if GET_USINGSEETHROUGH()
SET_SEETHROUGH(false)
endif
cleanup_selector_cam(scamdetails)
prep_stop_cutscene(true)
destroy_all_cams()
for i = 0 to enum_to_int(c4_num_of_bombs) -1
c4[i].bplanted = false
clear_area(c4[i].exppos,300,true)
wash_decals_in_range(c4[i].exppos,300,100)
endfor
//set_follow_ped_cam_view_mode(cam_view_mode_third_person_medium)
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(0)
endproc
proc mission_stage_skip()
//a skip has been made
if bdoskip = true
//begin the skip if the switching is idle
if stageswitch = stageswitch_idle
if not is_screen_faded_out()
if not is_screen_fading_out()
do_screen_fade_out(1000)
endif
else
mission_set_stage(int_to_enum(msf_mission_stage_flags, iskiptostage))
endif
//@RJP only reset the rayfire if we are switching stages that change the state of the ship
if (mission_stage < ENUM_TO_INT( msf_8_explosion_ctscne ) AND requestedstage > ENUM_TO_INT( msf_7_detonate ))
or (mission_stage > ENUM_TO_INT( msf_7_detonate ) AND requestedstage < ENUM_TO_INT( msf_8_explosion_ctscne ))
CPRINTLN( DEBUG_MISSION, "mission_stage_management: setting bResetRayfire to TRUE" )
endif
//needs to be carried out before states own entering stage
elif stageswitch = stageswitch_entering
render_script_cams(false,false)
set_player_control(player_id(), true)
clear_prints()
clear_help()
if is_cutscene_active()
stop_cutscene()
remove_cutscene()
while is_cutscene_active()
wait(0)
endwhile
endif
reset_everything()
// mark all assets for clean up
Start_Skip_Streaming(sAssetData)
Load_asset_Stage(int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage))
PRINTLN("Start Skip Loading")
WHILE NOT Update_Skip_Streaming(sAssetData)
WAIT(0)
ENDWHILE
PRINTLN("End Skip Loading")
switch int_to_enum(msf_mission_stage_flags, mission_stage)
case msf_0_drive_to_bridge
su_0_drive_to_bridge()
break
case msf_1_snipe_gaurds
su_1_snipe_gaurds()
break
case msf_2_first_bomb
su_2_first_bomb()
break
case msf_3_second_bomb
su_3_second_bomb()
break
case msf_4_third_bomb
su_4_third_bomb()
break
case msf_5_fourth_bomb
SU_5_FOURTH_BOMB()
break
case msf_6_way_out
su_6_way_out()
break
case msf_7_detonate
su_7_detonate()
break
case msf_8_explosion_ctscne
su_8_explosion_ctscne()
break
case msf_9_the_goods
su_9_the_goods()
break
case msf_10_end_cutscene
su_10_end_cutscene()
break
// case msf_passed
// su_passed()
// break
endswitch
su_general()
set_gameplay_cam_relative_heading()
set_gameplay_cam_relative_pitch()
bdoskip = false
endif
#if is_debug_build
//check is a skip being asked for, dont allow skip during setup stage
elif launch_mission_stage_menu(zmenunames, iskiptostage, mission_stage, true)
if iskiptostage > enum_to_int(msf_10_end_cutscene)
mission_passed()
else
iskiptostage = clamp_int(iskiptostage, 0, enum_to_int(msf_num_of_stages)-1)
if is_screen_faded_in()
do_screen_fade_out(1000)
bdoskip = true
endif
endif
RESET_PUSH_IN(sPushInData)
check_time()
bis_zskip = true
#endif
endif
endproc
PROC update_merc_blip( MERC_STRUCT &merc )
IF NOT DOES_ENTITY_EXIST( merc.id )
safe_remove_blip(merc.blip)
EXIT
ENDIF
IF IS_PED_INJURED( merc.id )
safe_remove_blip(merc.blip)
EXIT
ENDIF
IF NOT DOES_BLIP_EXIST( merc.blip )
IF IS_PED_IN_COMBAT( merc.id )
merc.blip = create_blip_for_ped( merc.id, TRUE )
ENDIF
ELSE
IF merc.bPrintHelp
SET_BLIP_FLASHES( merc.blip, TRUE )
ELSE
SET_BLIP_FLASHES( merc.blip, FALSE )
ENDIF
ENDIF
ENDPROC
proc mission_checks()
IF mission_substage = STAGE_ENTRY
EXIT
ENDIF
IF IS_REPLAY_BEING_SET_UP()
EXIT
ENDIF
// handle wanted controls
if mission_stage = enum_to_int(msf_0_drive_to_bridge)
or mission_stage = enum_to_int(msf_9_the_goods)
ENABLE_ALL_DISPATCH_SERVICES(TRUE)
set_wanted_level_multiplier(1)
SET_MAX_WANTED_LEVEL(5)
else
ENABLE_ALL_DISPATCH_SERVICES(FALSE)
set_wanted_level_multiplier(0)
SET_MAX_WANTED_LEVEL(0)
endif
//--------------------------------------------------death/fail checks-----------------------------------------------
int i
for i = 0 to enum_to_int(mpf_num_of_peds) -1
if does_entity_exist(peds[i].id)
if not isentityalive(peds[i].id)
if peds[i].id = peds[mpf_frank].id
mission_failed(mff_franklin_dead)
endif
if peds[i].id = peds[mpf_mike].id
mission_failed(mff_michael_dead)
endif
if peds[i].id = peds[mpf_trev].id
mission_failed(mff_trevor_dead)
endif
set_ped_as_no_longer_needed(peds[i].id)
endif
endif
endfor
BOOL bAlertHelp = FALSE
for i = 0 to enum_to_int(mmf_num_of_mercs) -1
if mission_stage < enum_to_int(msf_6_way_out)
update_merc_blip( mercs[i] )
endif
if does_entity_exist(mercs[i].id)
if is_ped_injured(mercs[i].id)
safe_remove_blip(mercs[i].blip)
if mercs[i].bzombie
or balarmtriggered
or bcsalarmtriggered
IF mission_stage = ENUM_TO_INT( msf_6_way_out )
IF i = ENUM_TO_INT( merc13_C4_3 )
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[i].id, PLAYER_PED_ID() )
bFrankKilled13 = TRUE
ENDIF
ENDIF
IF i = ENUM_TO_INT( merc14_C4_3 )
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[i].id, PLAYER_PED_ID() )
bFrankKilled14 = TRUE
ENDIF
ENDIF
ENDIF
set_ped_as_no_longer_needed(mercs[i].id)
else
if not mercs[i].bstats
INFORM_MISSION_STATS_OF_INCREMENT(DH2A_STEALTH_KILLS)
mercs[i].bstats = true
endif
endif
if mercs[i].bPrintHelp
mercs[i].bPrintHelp = FALSE
endif
endif
if mercs[i].bPrintHelp
bAlertHelp = TRUE
endif
else
safe_remove_blip(mercs[i].blip)
endif
endfor
IF NOT bAlertHelp
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DCKH_QUICK")
CLEAR_HELP()
ENDIF
ENDIF
for i = 0 to enum_to_int(mvf_num_of_veh) -1
if does_entity_exist(vehs[i].id)
if not is_vehicle_driveable(vehs[i].id)
if vehs[i].id = vehs[mvf_sub].id
and mission_stage = enum_to_int(msf_9_the_goods)
mission_failed(mff_sub_des)
endif
if vehs[i].id = vehs[mvf_dinghy].id
and mission_stage = enum_to_int(msf_0_drive_to_bridge)
mission_failed(mff_dinghy_des)
endif
set_vehicle_as_no_longer_needed(vehs[i].id)
endif
endif
endfor
//@RJP end mission if players destroy a sticky bomb before the detonation cutscene (player shoots sticky bomb)
if mission_stage > enum_to_int( msf_1_snipe_gaurds )
and mission_stage < enum_to_int( msf_8_explosion_ctscne )
IF IS_EXPLOSION_IN_ANGLED_AREA( EXP_TAG_STICKYBOMB, (C4[C4_0_front_of_ship].ExpPos + <<-0.75,3,2>>),(C4[C4_0_front_of_ship].ExpPos + <<-0.75,3,-2>>),10 )
OR IS_EXPLOSION_IN_ANGLED_AREA( EXP_TAG_STICKYBOMB, (C4[C4_1_first_mast].ExpPos + <<-0.75,3,2>>),(C4[C4_1_first_mast].ExpPos + <<-0.75,3,-2>>),10 )
OR IS_EXPLOSION_IN_ANGLED_AREA( EXP_TAG_STICKYBOMB, (C4[C4_2_second_mast].ExpPos + <<-0.75,3,2>>),(C4[C4_2_second_mast].ExpPos + <<-0.75,3,-2>>),10 )
mission_failed(mff_bombs_exploded)
ENDIF
endif
//franklin on the vantage point check
if mission_stage > enum_to_int(msf_0_drive_to_bridge)
and mission_stage < enum_to_int(msf_8_explosion_ctscne)
if isentityalive(frank_ped())
if player_ped_id() = frank_ped()
//stop the player changing from the sniper rifle
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_PREV_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_NEXT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_JUMP)
// IF IS_SELECTOR_ONSCREEN()
// SET_PLAYER_CONTROL( PLAYER_ID(), FALSE )
// ELSE
// SET_PLAYER_CONTROL( PLAYER_ID(), TRUE )
// ENDIF
// check that the player is still at the vantage point.
if not is_entity_at_coord(frank_ped(),<< -142.1772, -2494.1208, 45.5379 >>,<<20,20,20>>)
if not bprintlft_mike
and not scamdetails.brun
print_now("dckh_retvant",default_god_text_time,1)
bprintlft_mike = true
endif
if not does_blip_exist(blip_checksob)
blip_checksob = create_blip_for_coord(<< -147.1491, -2495.4390, 48.9368 >>)
endif
if not is_entity_at_coord(frank_ped(),<< -142.1772, -2494.1208, 45.5379 >>,<<40,40,40>>)
mission_failed(mff_left_michael)
endif
else
bprintlft_mike = false
if is_entity_at_coord(frank_ped(),<< -147.1491, -2495.4390, 48.9368 >>,<<2,2,2>>)
if does_blip_exist(blip_checksob)
remove_blip(blip_checksob)
endif
endif
endif
else
if does_blip_exist(blip_checksob)
remove_blip(blip_checksob)
endif
endif
endif
else
if does_blip_exist(blip_checksob)
remove_blip(blip_checksob)
endif
endif
//Franklin left Trev check
if mission_stage = enum_to_int(msf_0_drive_to_bridge)
and mission_substage = 7
and isentityalive(trev_ped())
and isentityalive(frank_ped())
if GET_DISTANCE_BETWEEN_COORDS(get_entity_coords(frank_ped()), get_entity_coords(trev_ped())) > 150
mission_failed(mff_left_trev)
elif GET_DISTANCE_BETWEEN_COORDS(get_entity_coords(frank_ped()), get_entity_coords(trev_ped())) > 100
if not bPrintLft_trev
print_now("CMN_FLEAVE",default_god_text_time,1)
bPrintLft_trev = true
endif
else
bPrintLft_trev = false
endif
endif
//mike in the right area still
if mission_stage < enum_to_int(msf_7_detonate)
and mission_stage > enum_to_int(msf_0_drive_to_bridge)
if isentityalive(mike_ped())
if player_ped_id() = mike_ped()
if not is_entity_at_coord(mike_ped(), << -171.1301, -2366.4204, 13.0810 >>,<<120,60,50>>)
if not bprintmikeleftarea
print_now("dckh_retship",default_god_text_time,1)
bprintmikeleftarea = true
endif
if not is_entity_at_coord(mike_ped(), << -171.1301, -2366.4204, 13.0810 >>,<<130,70,50>>)
mission_failed(mff_area) // mike left area fail.
endif
else
bprintmikeleftarea = false
endif
//@RJP fail mission if Michael off boat
if mission_stage < enum_to_int(msf_6_way_out)
VECTOR vMichaelPos = GET_ENTITY_COORDS( mike_ped() )
if vMichaelPos.z < 8.0
mission_failed(mff_area) // mike left area fail.
endif
endif
endif
endif
elif mission_stage = enum_to_int(msf_0_drive_to_bridge)
if isentityalive(mike_ped())
if player_ped_id() = mike_ped()
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mike_ped()),<<-163.55930, -2367.28882, 8.31906>>) > 1100
mission_failed(mff_area) // mike left area fail.
elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mike_ped()),<<-163.55930, -2367.28882, 8.31906>>) > 1000
if not bprintmikeleftarea
print_now("DCKH_RET",default_god_text_time,1)
bprintmikeleftarea = true
endif
else
bprintmikeleftarea = false
endif
endif
endif
endif
//trevor has left in the sub
if mission_stage = enum_to_int(msf_9_the_goods)
if isentityalive(trev_ped())
if player_ped_id() = trev_ped()
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(trev_ped()),<<-163.55930, -2367.28882, 8.31906>>) > 1100
mission_failed(mff_TREV_LEFT) // mike left area fail.
elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(trev_ped()),<<-163.55930, -2367.28882, 8.31906>>) > 1000
if not bprinttrevleftarea
print_now("DCKH_RET",default_god_text_time,1)
bprinttrevleftarea = true
endif
else
bprinttrevleftarea = false
endif
endif
endif
endif
//ammo check
if bGotWeapons
if player_ped_id() = mike_ped()
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage <= enum_to_int(msf_5_fourth_bomb)
if not C4[C4_0_front_of_ship].bPlanted
or not C4[C4_1_first_mast].bPlanted
or not C4[C4_2_second_mast].bPlanted
or not C4[C4_3_inside].bPlanted
bool bAmmo = true
if HAS_PED_GOT_WEAPON(MIKE_PED(),wtBomb)
if GET_AMMO_IN_PED_WEAPON(MIKE_PED(),wtBomb) > 0
bAmmo = false
endif
endif
if bAmmo
CPRINTLN( DEBUG_MISSION, "MIKE OUT OF STICKY BOMB AMMO" )
Mission_Failed(mff_ammob)//ran out of ammo
endif
endif
endif
endif
endif
//sniper ammo check
if bGotWeapons
if mission_stage < enum_to_int(msf_7_detonate)
if PLAYER_PED_ID() = frank_ped()
if not (mission_stage = enum_to_int(msf_0_drive_to_bridge) and mission_substage < 10)
and not (mission_substage = STAGE_ENTRY)
bool bAmmo = true
if HAS_PED_GOT_WEAPON(FRANK_PED(),WEAPONTYPE_SNIPERRIFLE)
if GET_AMMO_IN_PED_WEAPON(FRANK_PED(),WEAPONTYPE_SNIPERRIFLE) > 0
bAmmo = false
endif
endif
if HAS_PED_GOT_WEAPON(FRANK_PED(),WEAPONTYPE_HEAVYSNIPER)
if GET_AMMO_IN_PED_WEAPON(FRANK_PED(),WEAPONTYPE_HEAVYSNIPER) > 0
bAmmo = false
endif
endif
if bAmmo
Mission_Failed(mff_ammo)//temp fail for test
endif
endif
endif
endif
endif
//police check
if GET_PLAYER_WANTED_LEVEL(player_id()) > 0
mission_failed(mff_police)
endif
//@RJP check to see that mercs 1 and 2 are not alerted during drive to bridge stage
if mission_stage = enum_to_int(msf_0_drive_to_bridge)
for i = enum_to_int(merc1_start) to enum_to_int(merc2_start)
if DOES_ENTITY_EXIST(mercs[i].id)
if isentityalive(frank_ped())
if HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mercs[i].id,frank_ped())
mission_failed(mff_out_pos)
endif
endif
if not IS_PED_INJURED(mercs[i].id)
if IS_PED_IN_COMBAT( mercs[i].id )
mission_failed(mff_out_pos)
endif
endif
endif
endfor
endif
//@RJP also check if Michael kills a ped, and during the first stage as well
//shooting early
// if mission_stage = enum_to_int(msf_0_drive_to_bridge)
// or (mission_stage = enum_to_int(msf_1_snipe_gaurds) AND mission_substage = 1)
//
// for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
// if DOES_ENTITY_EXIST(mercs[i].id)
// if isentityalive(frank_ped())
// if HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mercs[i].id,frank_ped())
// bAlertedEarly = TRUE
//// mission_failed(mff_out_pos)
// endif
// endif
// if not IS_PED_INJURED(mercs[i].id)
// if IS_PED_IN_COMBAT( mercs[i].id )
// bAlertedEarly = TRUE
//// mission_failed(mff_out_pos)
// endif
// endif
// endif
// endfor
// endif
if mission_stage = enum_to_int(msf_0_drive_to_bridge)
or (mission_stage = enum_to_int(msf_1_snipe_gaurds) AND mission_substage = 1)
IF balarmtriggered
IF bAlertedEarly
IF GET_GAME_TIMER() > iAlertedEarlyTimer
mission_failed(mff_out_pos)
ENDIF
ELSE
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_NOSHT", CONV_PRIORITY_MEDIUM )
bAlertedEarly = TRUE
iAlertedEarlyTimer = (GET_GAME_TIMER()+5000)
ENDIF
ENDIF
ENDIF
ENDIF
INT timer
if not balarmtriggered
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[i].id)
if is_ped_in_combat(mercs[i].id)
mercs[i].bincombat = true
timer = 2500
elif mercs[i].currentaction = ga_aim_at_sniper
mercs[i].bincombat = true
timer = 2500
//@RJP check alarm if mercs have spotted a dead merc
elif mercs[i].bSpottedDead
mercs[i].bincombat = true
timer = 2500
elif mercs[i].currentsit <> MS_SIT_NONE
mercs[i].bincombat = true
timer = 2500
else
mercs[i].bincombat = false
endif
else
mercs[i].bincombat = false
endif
endfor
bincombat = false
for i = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if mercs[i].bincombat
and isentityalive(mercs[i].id)
bincombat = true
endif
endfor
if bincombat
if not binitialisedelayalr
icombattimer = get_game_timer()
binitialisedelayalr = true
else
if get_game_timer() - icombattimer > timer
INFORM_MISSION_STATS_OF_INCREMENT( DH2A_NO_ALARMS )
CPRINTLN( DEBUG_MISSION, "DH2A_NO_ALARMS incremented to 1" )
balarmtriggered = true
endif
endif
else
binitialisedelayalr = false
endif
endif
ENDIF
//----------------------------------------------------------------------------------------------------------
//--------------------------------player ped stuff--------------------------------
if isentityalive(player_ped_id())
IF player_ped_id() = MIKE_PED()
IF mission_stage < ENUM_TO_INT(msf_6_way_out)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE)
ENDIF
ENDIF
set_ped_combat_attributes(player_ped_id(),ca_requires_los_to_shoot,false)
endif
//-------------------------------- Thermal --------------------------------
if mission_stage >= enum_to_int(msf_1_snipe_gaurds)
and mission_stage <= enum_to_int(msf_7_detonate)
if player_ped_id() = frank_ped()
and IS_FIRST_PERSON_AIM_CAM_ACTIVE()
and not sCamDetails.bRun
and not bIncutscene
b_sniper_scope_active = true
else
b_sniper_scope_active = false
endif
else
if GET_USINGSEETHROUGH()
SET_SEETHROUGH(false)
endif
b_nightvision_active = FALSE
b_sniper_scope_active = false
endif
if b_sniper_scope_active
IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_WEAPON_SPECIAL_TWO)
IF b_nightvision_active
b_nightvision_active = FALSE
ELSE
b_nightvision_active = TRUE
ENDIF
ENDIF
endif
if b_nightvision_active
and b_sniper_scope_active
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
SET_SEETHROUGH(true)
else
SET_SEETHROUGH(false)
endif
//------------------------------------------stage checks--------------------------------------
//------------------------------------ alarm ------------------------------------
if balarmtriggered
or bcsalarmtriggered
if PREPARE_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
IF NOT IS_ALARM_PLAYING( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
START_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS", FALSE )
ENDIF
endif
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_6_way_out)
AUDIO_dialogue_merc_combat()
endif
else
IF IS_ALARM_PLAYING( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
STOP_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS", TRUE )
ENDIF
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_6_way_out)
AUDIO_dialogue_merc_stealth()
endif
endif
//------------mercs seeing distance------------
if not balarmtriggered
and not bcsalarmtriggered
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_6_way_out)
if isentityalive(mike_ped())
vector vmikecoord = get_entity_coords(mike_ped())
//@RJP may want to play with seeing range, bit odd right now
int imercs
for imercs = enum_to_int(merc3_C4_2) to enum_to_int(merc18_c4_4)
if isentityalive(mercs[imercs].id)
IF mercs[imercs].currentsit = ms_sit_none
//@RJP if the player is Franklin, give the ped enough seeing range to combat Franklin if he is in ga_aim_at_sniper
if PLAYER_PED_ID() = frank_ped()
if mercs[imercs].currentaction = ga_aim_at_sniper
or IS_PED_IN_COMBAT( mercs[imercs].id, frank_ped() )
set_ped_seeing_range(mercs[imercs].id,200)
else
if vmikecoord.z < 12
set_ped_seeing_range(mercs[imercs].id,11)
SET_PED_HEARING_RANGE(mercs[imercs].id,11)
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 2 )
else
set_ped_seeing_range(mercs[imercs].id,8)
SET_PED_HEARING_RANGE(mercs[imercs].id,8)
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 2 )
endif
SET_PED_VISUAL_FIELD_MIN_ELEVATION_ANGLE( mercs[imercs].id, -75 )
SET_PED_VISUAL_FIELD_MAX_ELEVATION_ANGLE( mercs[imercs].id, 60 )
endif
else
if vmikecoord.z < 12
set_ped_seeing_range(mercs[imercs].id,11)
SET_PED_HEARING_RANGE(mercs[imercs].id,11)
else
set_ped_seeing_range(mercs[imercs].id,8)
SET_PED_HEARING_RANGE(mercs[imercs].id,8)
endif
//@RJP set peripheral vision based on how much player moving
if IS_PED_STILL( mike_ped() )
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 2 )
elif IS_PED_WALKING( mike_ped() )
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 3 )
elif IS_PED_RUNNING( mike_ped() )
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 4 )
elif IS_PED_SPRINTING( mike_ped() )
SET_PED_VISUAL_FIELD_PERIPHERAL_RANGE( mercs[imercs].id, 5 )
endif
SET_PED_VISUAL_FIELD_MIN_ELEVATION_ANGLE( mercs[imercs].id, -30 )
SET_PED_VISUAL_FIELD_MAX_ELEVATION_ANGLE( mercs[imercs].id, 30 )
IF VDIST2( vmikecoord, GET_ENTITY_COORDS(mercs[imercs].id)) <= 225
SET_PED_RESET_FLAG( mercs[imercs].id, PRF_ConsiderAsPlayerCoverThreatWithoutLOS, TRUE )
ENDIF
endif
ENDIF
endif
endfor
endif
else
int imercs
for imercs = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if isentityalive(mercs[imercs].id)
set_ped_seeing_range(mercs[imercs].id,200)
SET_PED_HEARING_RANGE( mercs[imercs].id,60 )
endif
endfor
endif
else //alarm sounded mercs can see ped to attack.
int imercs
for imercs = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if isentityalive(mercs[imercs].id)
set_ped_seeing_range(mercs[imercs].id,200)
SET_PED_HEARING_RANGE( mercs[imercs].id,60 )
endif
endfor
endif
//------------action mode check------------
if mission_stage < ENUM_TO_INT( msf_6_way_out )
if isentityalive(mike_ped())
and PLAYER_PED_ID() != mike_ped()
if balarmtriggered
or bcsalarmtriggered
set_ped_using_action_mode(mike_ped(),true)
else
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
endif
endif
endif
//------------mercs all dead check / none in combat check------------
int imercs
// bool bpeace = true
// ballmercsdead = true
for imercs = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if isentityalive(mercs[imercs].id)
// ballmercsdead = false
if is_player_dead(player_id())
task_wander_standard(mercs[i].id)//clear task when frank dead
endif
if is_ped_in_combat(mercs[imercs].id)
and player_ped_id() = mike_ped()
// bpeace = false
endif
endif
endfor
// if bpeace
// AUDIO_dialogue_killed_merc()
// endif
//------------hot swap------------
manage_hotswap()
//------------------------audio------------------------
if mission_stage > enum_to_int(msf_8_explosion_ctscne)
audio_underwater()
endif
if isentityalive(mike_ped())
if is_ped_swimming_under_water(mike_ped())
set_current_ped_weapon(mike_ped(),weapontype_unarmed,true)
endif
endif
AUDIO_sniping()
//dock workers
// AUDIO_manage_dock_workers()
//------------------------first aim stuff------------------------
//lock aim to enemies
if mission_stage <= enum_to_int(msf_6_way_out)
if player_ped_id() = frank_ped()
if bfirstaim
if is_player_free_aiming(player_id())
if mission_stage <= enum_to_int(msf_1_snipe_gaurds)
if isentityalive(mercs[merc1_start].id)
set_gameplay_cam_relative_heading(get_sniper_rifle_aim_heading_for_ped(mercs[merc1_start].id))
set_gameplay_cam_relative_pitch(get_sniper_rifle_aim_pitch_for_ped(mercs[merc1_start].id))
set_first_person_aim_cam_zoom_factor(10)
bfirstaim = false
endif
else
if isentityalive(mike_ped())
set_gameplay_cam_relative_heading(get_sniper_rifle_aim_heading_for_ped(mike_ped()))
set_gameplay_cam_relative_pitch(get_sniper_rifle_aim_pitch_for_ped(mike_ped()))
set_first_person_aim_cam_zoom_factor(10)
bfirstaim = false
endif
endif
endif
endif
endif
endif
//------------------------critical hit by frank on all mercs------------------------
int merc
if isentityalive(frank_ped())
for merc = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if isentityalive(mercs[merc].id)
if has_entity_been_damaged_by_entity(mercs[merc].id,frank_ped())
set_entity_health(mercs[merc].id,50)
endif
endif
endfor
endif
//------------------------event response for merc------------------------
//if mission_stage > enum_to_int(msf_1_snipe_gaurds)
if mission_stage < enum_to_int(msf_6_way_out)
and not balarmtriggered
and not bcsalarmtriggered
MERC_do_reaction()
endif
//----------------------------------blipping mike----------------------------------------
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_7_detonate)
and isentityalive(frank_ped())
and isentityalive(mike_ped())
if player_ped_id() = frank_ped()
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_PED())
SET_BLIP_PRIORITY(peds[mpf_mike].blip, BLIPPRIORITY_HIGHEST)
endif
else
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
REMOVE_BLIP(peds[mpf_mike].blip)
endif
endif
else
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
REMOVE_BLIP(peds[mpf_mike].blip)
endif
endif
//@RJP set Franklin invincible if playing as Michael
if mission_stage > enum_to_int(msf_1_snipe_gaurds)
and mission_stage < enum_to_int(msf_6_way_out)
and player_ped_id() = mike_ped()
IF DOES_ENTITY_EXIST( frank_ped() )
SET_ENTITY_INVINCIBLE(frank_ped(), TRUE)
ENDIF
else
IF DOES_ENTITY_EXIST( frank_ped() )
SET_ENTITY_INVINCIBLE(frank_ped(), FALSE)
ENDIF
endif
//----------------------------------------------MINI MAP--------------------------------------------
// if mission_stage > enum_to_int(msf_0_drive_to_bridge)
// and mission_stage < enum_to_int(msf_7_detonate)
// IF PLAYER_PED_ID() = mike_ped()
// //3432762226
// set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
// ENDIF
// elif mission_stage > enum_to_int(msf_8_explosion_ctscne)
// and mission_substage < 12
// //2092539216
// set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1sunk"),-165.0,-2350.0,0)
// endif
//----------------------------------------------STATS--------------------------------------------
if isentityalive(player_ped_id())
//damage taken
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(player_ped_id(), DH2A_DAMAGE)
//veh damage / speed
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(GET_VEHICLE_PED_IS_IN(player_ped_id()), DH2A_CAR_DAMAGE)
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(GET_VEHICLE_PED_IS_IN(player_ped_id()))
else
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(null, DH2A_CAR_DAMAGE)
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(null)
endif
endif
endproc
proc mission_setup()
initialise()
setupmercpatrol()
//no need to do this
//IF NOT IS_REPLAY_IN_PROGRESS()
// RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT_FOR_CHAR(CHAR_MICHAEL)
//ENDIF
printstring("docks heist - mission_setup")printnl()
// loads the mission text
request_additional_text("h5heist", mission_text_slot)
// request_additional_text("cst7aud", mission_dialogue_text_slot)
while not has_additional_text_loaded(mission_text_slot)
// or not has_additional_text_loaded(mission_dialogue_text_slot)
wait(0)
endwhile
//sfx
register_script_with_audio()
while not request_ambient_audio_bank("script\\underwater")
wait(0)
endwhile
//relationship
remove_relationship_group(rel_group_buddy)
remove_relationship_group(rel_group_enemies)
add_relationship_group("buddy", rel_group_buddy)
add_relationship_group("enemies", rel_group_enemies)
//ignore
// set_relationship_between_groups(acquaintance_type_ped_ignore,rel_group_enemies,rel_group_buddy)
// set_relationship_between_groups(acquaintance_type_ped_ignore,rel_group_enemies,relgrouphash_player)
//haters
set_relationship_between_groups(acquaintance_type_ped_hate,rel_group_enemies,rel_group_buddy)
set_relationship_between_groups(acquaintance_type_ped_hate,rel_group_buddy,rel_group_enemies)
set_relationship_between_groups(acquaintance_type_ped_hate,relgrouphash_player,rel_group_enemies)
set_relationship_between_groups(acquaintance_type_ped_hate,rel_group_enemies,relgrouphash_player)
//friends
set_relationship_between_groups(acquaintance_type_ped_like,rel_group_enemies,rel_group_enemies)
set_relationship_between_groups(acquaintance_type_ped_like,rel_group_buddy,relgrouphash_player)
set_relationship_between_groups(acquaintance_type_ped_like,relgrouphash_player,rel_group_buddy)
//Cover blocking
ADD_COVER_BLOCKING_AREA(<<-214.774490,-2376.247314,8.319207>>, <<-212.231201,-2374.965820,11.515604>>, TRUE, TRUE, TRUE)
ADD_COVER_BLOCKING_AREA(<<-208.063126,-2382.714111,7.937626>>, <<-212.805313,-2378.890381,10.319207>>, TRUE, TRUE, TRUE)
//suppress vehciles
set_vehicle_model_is_suppressed(tailgater,true)
set_vehicle_model_is_suppressed(buffalo,true)
set_vehicle_model_is_suppressed(FORKLIFT,true)
//vehicle generators at the docks
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA( <<-146.52478, -2530.88916,38>>,<<34.11267, -2326.69922, 1.23919>>,FALSE )
//scenario block docks
add_scenario_blocking_area(<<-146.52478, -2530.88916,38>>,<<34.11267, -2326.69922, 1.23919>>)
set_ped_non_creation_area(<<-146.52478, -2530.88916,38>>,<<34.11267, -2326.69922, 1.23919>>)
//cutscene
b_cutscene_loaded = false
disable_taxi_hailing(true)
IF GET_PLAYER_WANTED_LEVEL(player_id()) > 0
SET_PLAYER_WANTED_LEVEL( player_id(), 0 )
ENDIF
println("start setup loading")
WHILE NOT Update_Skip_Streaming(sAssetData)
WAIT(0)
ENDWHILE
println("end setup loading")
endproc
//PURPOSE: Creates the players vehicle using the stored data in the replay structs. If no data is found it will create the default vehicle for michael.
// Should be called until returns true. (May not create a vehicle if bIsVehicleNeeded = FALSE)
FUNC BOOL Create_Player_Mission_Vehicle(VEHICLE_INDEX &vehicle, VECTOR vCoord, FLOAT fHeading)
// VEHICLE_SETUP_STRUCT s_vehicle_struct
// Populate the struct
IF IS_REPLAY_IN_PROGRESS()
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(<<0,0,0>>,TRUE)
CREATE_VEHICLE_FOR_REPLAY( vehicle, vCoord, fHeading, FALSE, FALSE, FALSE, FALSE, TRUE, BUFFALO2, 0, CHAR_FRANKLIN )
RETURN TRUE
ELSE
CREATE_VEHICLE_FOR_REPLAY( vehicle, <<-1161.4044, -1504.9207, 3.3707>>, 318.8535, FALSE, FALSE, FALSE, FALSE, TRUE, BUFFALO2, 0, CHAR_FRANKLIN )
RETURN TRUE
ENDIF
ELSE
IF CREATE_PLAYER_VEHICLE(vehicle, CHAR_FRANKLIN, vCoord, fHeading, TRUE, VEHICLE_TYPE_CAR)
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_PLAYER_VEH_MODEL(CHAR_FRANKLIN), TRUE)
RETURN TRUE
ENDIF
ENDIF
ELSE
IF CREATE_PLAYER_VEHICLE(vehicle, CHAR_FRANKLIN, vCoord, fHeading, TRUE, VEHICLE_TYPE_CAR)
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_PLAYER_VEH_MODEL(CHAR_FRANKLIN), TRUE)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL Create_End_Cutscene_Vehicle(VEHICLE_INDEX &vehicle, VECTOR vCoord, FLOAT fHeading)
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(<<0,0,0>>,TRUE)
AND IS_THIS_MODEL_A_CAR( GET_REPLAY_START_VEHICLE_MODEL() )
REQUEST_REPLAY_START_VEHICLE_MODEL()
IF HAS_REPLAY_START_VEHICLE_LOADED()
vehicle = CREATE_REPLAY_START_VEHICLE( vCoord, fHeading )
RETURN TRUE
ENDIF
ELSE
IF CREATE_PLAYER_VEHICLE(vehicle, CHAR_FRANKLIN, vCoord, fHeading, TRUE, VEHICLE_TYPE_CAR)
RETURN TRUE
ENDIF
ENDIF
ELSE
IF CREATE_PLAYER_VEHICLE(vehicle, CHAR_FRANKLIN, vCoord, fHeading, TRUE, VEHICLE_TYPE_CAR)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_LR)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
ENDIF
ENDPROC
/// PURPOSE:
/// Controls conversation on trip to bridge between Franklin and Trevor
PROC CAR_CONVERSATION_MANAGER()
SWITCH iCarConv
CASE 0
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_COMON1", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Trevor tells Franklin to hurry up" )
iCarConv++
ENDIF
ENDIF
BREAK
CASE 1
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_FRESP", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Franklin says he's coming" )
iImpatientTimer = GET_GAME_TIMER()+15000
iCarConv++
ENDIF
ENDIF
BREAK
CASE 2
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
iCarConv++
ELIF GET_GAME_TIMER() > iImpatientTimer
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_FRGO", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Franklin impatient" )
iCarConv++
ENDIF
ENDIF
ENDIF
BREAK
CASE 3
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_ENTITY_MODEL( GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) = GET_PLAYER_VEH_MODEL( CHAR_FRANKLIN, VEHICLE_TYPE_CAR )
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_FRCAR", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Franklin says we taking my car?" )
iCarConv++
ENDIF
ENDIF
ELIF GET_ENTITY_MODEL( GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) = GET_PLAYER_VEH_MODEL( CHAR_FRANKLIN, VEHICLE_TYPE_BIKE )
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_FRBIKE", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Franklin says that's my bike" )
iCarConv++
ENDIF
ENDIF
ELSE
iCarConv++
ENDIF
ENDIF
BREAK
CASE 4
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_WHERE", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Trevor says where to go" )
iCarConv++
ENDIF
ENDIF
ENDIF
BREAK
CASE 5
IF bDialoguePlayed2
iCarConv++
ELIF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_PED_IN_VEHICLE(FRANK_PED(),GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF IS_SAFE_TO_START_CONVERSATION()
IF GET_MISSION_COMPLETE_STATE( SP_MISSION_FRANKLIN_1 )
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_01", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: DS2A_01" )
iCarConv++
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_02", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: DS2A_02" )
iCarConv++
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE 6
IF bDialoguePlayed2
iCarConv++
ELIF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_PED_IN_VEHICLE(FRANK_PED(),GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_03", CONV_PRIORITY_MEDIUM )
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: DS2A_03" )
iCarConv++
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE 7
IF bDialoguePlayed2
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct, "D2AAUD", "DS2A_PARK", CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Trevor says to park" )
iCarConv++
ENDIF
ENDIF
ENDIF
BREAK
CASE 8
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct, "D2AAUD", "DS2A_COOL", CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CAR_CONVERSATION_MANAGER: Franklin says cool" )
iCarConv++
ENDIF
ENDIF
BREAK
CASE 9
//End case, no more car conversation
BREAK
ENDSWITCH
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission stages
// -----------------------------------------------------------------------------------------------------------
PROC ST_0_DRIVE_TO_BRIDGE()
ENTITY_INDEX entity_franklin
ENTITY_INDEX entity_trevor
ENTITY_INDEX entity_michael
ENTITY_INDEX tempEntity
TEXT_LABEL_23 tlConv
STRING sConv
SWITCH mission_substage
case Stage_entry
if IS_REPLAY_IN_PROGRESS()
or bskip_cut
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
mission_substage = 2
else
mission_substage++
endif
break
case 1
DISPLAY_RADAR(false)
DISPLAY_HUD(false)
SET_PLAYER_CONTROL(PLAYER_ID(),false)
REDUCE_AMBIENT_MODELS(TRUE)
RUN_INTRO_CUTSCENE()
if b_cutscene_loaded
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
endif
break
case 2
IF IS_GAMEPLAY_HINT_ACTIVE()
STOP_GAMEPLAY_HINT()
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN])
entity_franklin = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin")
IF DOES_ENTITY_EXIST(entity_franklin)
sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = GET_PED_INDEX_FROM_ENTITY_INDEX(entity_franklin)
ENDIF
ELSE
SET_ENTITY_VISIBLE( sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], TRUE )
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
entity_trevor = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor")
IF DOES_ENTITY_EXIST(entity_trevor)
sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = GET_PED_INDEX_FROM_ENTITY_INDEX(entity_trevor)
ENDIF
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
entity_michael = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael")
IF DOES_ENTITY_EXIST(entity_michael)
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = GET_PED_INDEX_FROM_ENTITY_INDEX(entity_michael)
ENDIF
ELSE
SET_ENTITY_VISIBLE( sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], TRUE )
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST( objSofa )
objSofa = GET_CLOSEST_OBJECT_OF_TYPE( <<-1158.5811, -1519.2471, 9.6308>>, 2.0, V_RES_TRE_SOFA_MESS_C )
ELSE
SET_ENTITY_VISIBLE( objSofa, FALSE )
ENDIF
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
CPRINTLN( DEBUG_MISSION, "EXIT STATE FOR FRANKLIN: TRUE" )
IF IS_ENTITY_OK(SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN])
FORCE_PED_MOTION_STATE( SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN], MS_ON_FOOT_WALK, true, FAUS_CUTSCENE_EXIT )
SET_ENTITY_COORDS( sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], <<-1154.6628, -1518.2433, 9.6327>> )
SET_ENTITY_HEADING( sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], 306.3135 )
ENDIF
ENDIF
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
CPRINTLN( DEBUG_MISSION, "EXIT STATE FOR MICHAEL: TRUE" )
IF DOES_ENTITY_EXIST(SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL])
IF NOT IS_ENTITY_DEAD(SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL])
STORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT(SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL]) //store Michael's weapons from before the mission
ENDIF
ENDIF
ENDIF
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
entity_trevor = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor")
IF DOES_ENTITY_EXIST(entity_trevor)
sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = GET_PED_INDEX_FROM_ENTITY_INDEX(entity_trevor)
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
CPRINTLN( DEBUG_MISSION, "GET_CURRENT_PLAYER_PED_ENUM: PLAYER NOT TREVOR" )
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
CPRINTLN( DEBUG_MISSION, "MAKE_SELECTOR_PED_SELECTION TREVOR TRUE" )
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
ENDIF
ENDIF
IF IS_ENTITY_OK(PLAYER_PED_ID())
SET_ENTITY_COORDS( PLAYER_PED_ID(), <<-1151.6340, -1519.4980, 9.6327>> )
SET_ENTITY_HEADING( PLAYER_PED_ID(), 215.0 )
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE)
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1150.7572, -1520.9470, 9.6327>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1149.5098, -1522.4679, 9.6331>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1147.3914, -1522.7167, 9.4130>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, 312.1079)
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
ELSE
SIMULATE_PLAYER_INPUT_GAIT( PLAYER_ID(), PEDMOVE_WALK, 3500 )
ENDIF
FORCE_PED_MOTION_STATE( PLAYER_PED_ID(), MS_ON_FOOT_WALK, TRUE, FAUS_CUTSCENE_EXIT )
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
IF bSwappedToTrevor
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) != CAM_VIEW_MODE_FIRST_PERSON
ANIMPOSTFX_PLAY("SwitchSceneTrevor", 1000, FALSE)
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
ENDIF
ENDIF
REPLAY_STOP_EVENT()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
ENDIF
if not IS_CUTSCENE_PLAYING()
or IS_REPLAY_IN_PROGRESS()
or bskip_cut
if GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
SET_ENTITY_LOAD_COLLISION_FLAG(PLAYER_PED_ID(), TRUE)
SET_RADAR_ZOOM_PRECISE(1)
ENDIF
ELSE
IF isentityalive( SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL] )
PEDS[MPF_MIKE].ID = SSELECTORPEDS.PEDID[SELECTOR_PED_MICHAEL]
DELETE_PED( PEDS[MPF_MIKE].ID )
endif
if isentityalive( SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN] )
PEDS[mpf_frank].ID = SSELECTORPEDS.PEDID[SELECTOR_PED_FRANKLIN]
endif
PEDS[mpf_trev].ID = PLAYER_PED_ID()
SET_RADAR_ZOOM_PRECISE(1)
IF DOES_ENTITY_EXIST( objSofa )
SET_ENTITY_VISIBLE( objSofa, TRUE )
SET_OBJECT_AS_NO_LONGER_NEEDED( objSofa )
ENDIF
IF IS_THIS_TV_AVAILABLE_FOR_USE(TV_LOC_TREVOR_VENICE)
STOP_TV_PLAYBACK(TRUE, TV_LOC_TREVOR_VENICE)
ENDIF
mission_substage++
ENDIF
endif
// SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE( V_ILEV_TREV_DOORFRONT, <<-1149.7089, -1521.0879, 10.7827>>, TRUE, 0, 0, 1 )
break
case 3
REDUCE_AMBIENT_MODELS(FALSE)
//trevor
IF isentityalive( TREV_PED() )
ADD_PED_FOR_DIALOGUE(convo_struct, 2, TREV_PED(), "TREVOR")
ENDIF
IF isentityalive( frank_ped() )
ADD_PED_FOR_DIALOGUE(convo_struct, 3, FRANK_PED(), "FRANKLIN")
SET_PED_CONFIG_FLAG( FRANK_PED(), PCF_ForcedToUseSpecificGroupSeatIndex, true )
TASK_FOLLOW_NAV_MESH_TO_COORD( FRANK_PED(), <<-1151.3347, -1520.3198, 3.3653>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP )
ENDIF
// SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE( V_ILEV_TREV_DOORFRONT, <<-1149.7089, -1521.0879, 10.7827>>, FALSE, 0, 0, 0 )
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
REMOVE_CUTSCENE()
SET_PLAYER_PED_CAN_ENTER_SAVEHOUSE(CHAR_FRANKLIN, SAVEHOUSE_TREVOR_VB, true)
// SET_DOOR_STATE(DOORNAME_T_APARTMENT_VB,DOORSTATE_UNLOCKED)
// Point_Gameplay_cam_at_coord(GET_ENTITY_HEADING(player_ped_id()))
SU_General()
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
break
case 4
if not isentityalive( vehs[mvf_mission_veh].id )
Create_Player_Mission_Vehicle( vehs[mvf_mission_veh].id, << -1154.6117, -1520.0699, 3.3456 >> ,33.0431)
else
mission_substage++
endif
break
case 5
if HAVE_ALL_STREAMING_REQUESTS_COMPLETED(TREV_PED())
and HAVE_ALL_STREAMING_REQUESTS_COMPLETED(FRANK_PED())
if PREPARE_MUSIC_EVENT("DH2A_START")
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
DISPLAY_RADAR(true)
DISPLAY_HUD(true)
//trev
SET_PED_RELATIONSHIP_GROUP_HASH(frank_ped(),rel_group_buddy)
//@RJP make sure the boat is in the right state at the start of the mission
MANAGE_IPLS(BUILDINGSTATE_NORMAL)
//scene
bpauseconv = false
bDialoguePlayed = false
bDialoguePlayed2 = false
// bPrintDisplayed = false
SET_PLAYER_CONTROL(PLAYER_ID(),true)
SET_RADAR_ZOOM_PRECISE(0)
mission_substage++
endif
endif
break
case 6
CAR_CONVERSATION_MANAGER()
VECTOR vPlayerPos
vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF vPlayerPos.z < 5.0
AND NOT IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-1142.679688,-1518.525635,3.279745>>, <<-1148.989014,-1522.986450,9.341030>>, 6.000000)
mission_substage++
ENDIF
break
case 7
CAR_CONVERSATION_MANAGER()
if IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
if IS_PED_IN_VEHICLE(frank_ped(),GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
//@RJP remove blip for Franklin's car when he is in it
if DOES_BLIP_EXIST( blip_playerCar )
REMOVE_BLIP( blip_playerCar )
endif
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(trev_ped()),<<-160.51218, -2502.88281, 47.93985>>) < 125
and not bDialoguePlayed2
KILL_FACE_TO_FACE_CONVERSATION()
TASK_LOOK_AT_ENTITY( FRANK_PED(), trev_ped(), -1 )
manage_ipls( BUILDINGSTATE_NORMAL )
Load_Asset_AnimDict(sAssetData,"missheistdocks2a")
Load_Asset_AnimDict(sAssetData,"missheistdocks2aig_1")
load_asset_animdict(sAssetData,"missheistdocks2a@crouch")
Load_Asset_AnimDict(sAssetData,"missheistdocks2a@alert")
Load_Asset_AnimDict(sAssetData,"missheistdocks2aswitchig_6")
Load_Asset_AnimDict(sAssetData,"missheistdocks2aswitchig_7")
// load_asset_model(sAssetData,s_m_y_dockwork_01)
Load_Asset_Model(sAssetData,S_M_Y_BlackOps_01)
Load_Asset_Model(sAssetData,Prop_Military_Pickup_01)
Load_Asset_Model(sAssetData,landstalker)
Load_Asset_Model(sAssetData,PROP_MIL_CRATE_02)
Load_Asset_Model(sAssetData,PROP_CRATEPILE_07A)
Load_Asset_Weapon_Asset(sAssetData, wtSniper, WRF_REQUEST_ALL_ANIMS, WEAPON_COMPONENT_SCOPE|WEAPON_COMPONENT_SCLIP2)
//@RJP load dingy at start to prevent problem with jumping out of car and dingy not being loaded in time
Load_Asset_Model(sAssetData,DINGHY)
bDialoguePlayed2 = true
endif
if GET_GAME_TIMER() - iCSDelay > 10000
And not bDialoguePlayed
IF IS_VALID_INTERIOR( interior_living_room )
unpin_interior(interior_living_room)
ENDIF
SET_DOOR_STATE(DOORNAME_T_APARTMENT_VB,DOORSTATE_LOCKED)
SET_PLAYER_PED_CAN_ENTER_SAVEHOUSE(CHAR_FRANKLIN, SAVEHOUSE_TREVOR_VB, false)
bDialoguePlayed = true
endif
if not bpauseconv
PAUSE_FACE_TO_FACE_CONVERSATION(false)
bpauseconv = true
endif
else
if bPauseconv
tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF ARE_STRINGS_EQUAL(sConv, "DS2A_01")
OR ARE_STRINGS_EQUAL(sConv, "DS2A_02")
OR ARE_STRINGS_EQUAL(sConv, "DS2A_03")
PAUSE_FACE_TO_FACE_CONVERSATION(true)
bpauseconv = false
ENDIF
endif
endif
IF NOT (GET_VEHICLE_PED_IS_IN(player_ped_id()) = vehs[mvf_mission_veh].id)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
vehs[mvf_mission_veh].id = GET_VEHICLE_PED_IS_IN(player_ped_id())
SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_mission_veh].id, TRUE, TRUE)
ENDIF
else
if bPauseconv
tlConv = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
sConv = CONVERT_TEXT_LABEL_TO_STRING(tlConv)
IF ARE_STRINGS_EQUAL(sConv, "DS2A_01")
OR ARE_STRINGS_EQUAL(sConv, "DS2A_02")
OR ARE_STRINGS_EQUAL(sConv, "DS2A_03")
PAUSE_FACE_TO_FACE_CONVERSATION(true)
bpauseconv = false
ENDIF
endif
endif
IF IS_PED_IN_ANY_HELI(trev_ped())
if IS_PLAYER_AT_LOCATION_WITH_BUDDIES_IN_ANY_VEHICLE(sLocatesData,<<-160.51218, -2502.88281, 47.93985>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,true,frank_ped(),NULL,NULL,"DCKH_DRIVE","DCKH_DONT_L_T","","","DCKH_P_UP_B","DCKH_CAR","DCKH_CARBK",FALSE,FALSE)
or ((DOES_BLIP_EXIST(sLocatesData.LocationBlip)And IS_ENTITY_IN_ANGLED_AREA(FRANK_PED(),<<-168.01913, -2497.72852, 44.1933 >>,<< -146.66716, -2512.51978, 54.0683 >>,10))
AND IS_PED_IN_VEHICLE( frank_ped(), vehs[mvf_mission_veh].id ))
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
vehs[mvf_mission_veh].id = GET_VEHICLE_PED_IS_IN(player_ped_id())
SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_mission_veh].id)
bDialoguePlayed =false
bDialoguePlayed2 =false
HANG_UP_AND_PUT_AWAY_PHONE()
SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
// BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_mission_veh].id,10)
CLEAR_MISSION_LOCATE_STUFF(sLocatesData,true)
TRIGGER_MUSIC_EVENT("DH2A_ON_BRIDGE")
Load_Asset_Model(sAssetData,DINGHY)
mission_substage++
ENDIF
ELSE
if IS_PLAYER_AT_LOCATION_WITH_BUDDIES_IN_ANY_VEHICLE(sLocatesData,<<-160.51218, -2502.88281, 47.93985>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,true,frank_ped(),NULL,NULL,"DCKH_DRIVE","DCKH_DONT_L_T","","","DCKH_P_UP_B","DCKH_CAR","DCKH_CARBK",FALSE,FALSE)
or ((DOES_BLIP_EXIST(sLocatesData.LocationBlip)And IS_ENTITY_IN_ANGLED_AREA(FRANK_PED(),<<-168.01913, -2497.72852, 44.1933 >>,<< -146.66716, -2512.51978, 52.0683 >>,4))
AND IS_PED_IN_VEHICLE( frank_ped(), vehs[mvf_mission_veh].id ))
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
vehs[mvf_mission_veh].id = GET_VEHICLE_PED_IS_IN(player_ped_id())
SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_mission_veh].id)
bDialoguePlayed =false
bDialoguePlayed2 =false
HANG_UP_AND_PUT_AWAY_PHONE()
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_mission_veh].id,10)
//@RJP disable player control when vehicle is coming to a stop to prevent player from exiting and breaking script
// SET_PLAYER_CONTROL( player_id(), false, SPC_LEAVE_CAMERA_CONTROL_ON )
CLEAR_MISSION_LOCATE_STUFF(sLocatesData,true)
TRIGGER_MUSIC_EVENT("DH2A_ON_BRIDGE")
Load_Asset_Model(sAssetData,DINGHY)
mission_substage++
endif
ENDIF
break
case 8
CAR_CONVERSATION_MANAGER()
if IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_mission_veh].id)
blip_objective = CREATE_BLIP_FOR_COORD(<< -143.8537, -2488.4031, 43.4098 >>)
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_FRANKLIN )
TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds )
ANIMPOSTFX_PLAY("SwitchSceneFranklin", 1000, FALSE)
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
ENDIF
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_mission_veh].id,FALSE)
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
//dinghy and mike
vehs[mvf_dinghy].id = CREATE_VEHICLE(dinghy,<<-77.9618, -2359.0828, 0>>, 232.3750)
SET_BOAT_ANCHOR(vehs[mvf_dinghy].id, true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_dinghy].id,0)
SET_VEHICLE_RADIO_ENABLED( vehs[mvf_dinghy].id, FALSE )
NEW_LOAD_SCENE_START(<<-142.35, -2487.92, 44.80>>, NORMALISE_VECTOR(<<-100, -0.03, 0.06>>), 400 )
// NEW_LOAD_SCENE_START(<<-143.55, -2489.59, 45.58>>, NORMALISE_VECTOR(<<0.02, 0.97, -0.23>>), 1000 )
REPLAY_RECORD_BACK_FOR_TIME(10.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
elif IS_PED_IN_ANY_HELI(trev_ped())
IF GET_SCRIPT_TASK_STATUS( trev_ped(), SCRIPT_TASK_VEHICLE_MISSION ) > PERFORMING_TASK
TASK_HELI_MISSION(trev_ped(), GET_VEHICLE_PED_IS_IN(trev_ped()), null, null,<<-160.51218, -2502.88281, 47.93985>>,MISSION_LAND,10,1,-1,48,0 )
ENDIF
else
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_mission_veh].id,10)
endif
break
case 9
CAR_CONVERSATION_MANAGER()
if not IS_PED_IN_VEHICLE(FRANK_PED(),vehs[mvf_mission_veh].id)
if CREATE_PLAYER_PED_INSIDE_VEHICLE(peds[mpf_mike].id,CHAR_MICHAEL,vehs[mvf_dinghy].id)
//mike
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_mike].id,"MICHAEL")
Scuba_suite_up(MIKE_PED(),FALSE,FALSE)
SET_PED_COMP_ITEM_CURRENT_SP(MIKE_PED(), COMP_TYPE_PROPS, PROPS_P0_HEADSET)
SET_PED_DIES_IN_WATER( MIKE_PED(), FALSE )
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_PED(),rel_group_buddy)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_PED(),true)
//frank
give_mission_weapons(FALSE)
if HAS_PED_GOT_WEAPON(FRANK_PED(),wtSniper)
// SET_CURRENT_PED_WEAPON(FRANK_PED(),wtSniper,true)
else
GIVE_WEAPON_TO_PED(FRANK_PED(),wtSniper,200,FALSE,FALSE)
endif
if not IS_AUDIO_SCENE_ACTIVE("DH2A_GET_TO_VANTAGE_POINT")
START_AUDIO_SCENE("DH2A_GET_TO_VANTAGE_POINT")
endif
SET_PLAYER_CONTROL(player_id(),true)
//create mercs for snipe
int merc
for merc = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
//@RJP there is no longer a merc8 or merc6
if merc != enum_to_int( merc8_C4_2 )
and merc != enum_to_int( merc7_C4_2 )
and merc != enum_to_int( merc6_C4_2 )
and merc != enum_to_int( merc10_C4_3 )
and merc != enum_to_int( MERC15_C4_3 )
and merc != enum_to_int( merc17_c4_4 )
//@RJP mercs should start blocking non-temporary events until we get to the bomb stages
createmercenary(int_to_enum(MMF_MISSION_MERC_FLAGS,merc), 8, TRUE)
endif
endfor
//@RJP adding parked vehicle for cover in way out section
//VEHICLES
VEHS[mvf_parked1].id = CREATE_VEHICLE(landstalker,<<-203.5000, -2413.4336, 5.0012>>, 293.3041)
VEHS[mvf_parked2].id = CREATE_VEHICLE(landstalker,<<-180.8568, -2431.3264, 5.0013>>, 94.2693)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked1].ID,0)
SET_VEHICLE_COLOUR_COMBINATION(VEHS[mvf_parked2].ID,0)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked1].ID,TRUE)
SET_VEHICLE_CAN_LEAK_PETROL(VEHS[mvf_parked2].ID,TRUE)
// createdockworker(mpf_dock1)
// createdockworker(mpf_dock2)
// Unload_Asset_Model(sAssetData,S_M_Y_DOCKWORK_01)
// //set up docks
TASK_PLAY_ANIM(mercs[merc1_start].id,"missheistdocks2a","idle_guard",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_LOOPING)
TASK_PLAY_ANIM(mercs[merc2_start].id,"missheistdocks2a","idle_guard",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_LOOPING)
GIVE_WEAPON_TO_PED(mercs[merc1_start].id,WEAPONTYPE_HEAVYSNIPER,INFINITE_AMMO,true,true)
GIVE_WEAPON_TO_PED(mercs[merc2_start].id,WEAPONTYPE_HEAVYSNIPER,INFINITE_AMMO,true,true)
SET_PED_ALERTNESS(mercs[merc1_start].id,AS_alert)
SET_PED_ALERTNESS(mercs[merc2_start].id,AS_alert)
mission_substage++
endif
endif
break
case 10
CAR_CONVERSATION_MANAGER()
//Turn off players ability to jump when near the vantage point to prevent 1442328
IF IS_ENTITY_AT_COORD(FRANK_PED(),<<-142.7872, -2489.0518, 43.4330>>,<<8,8,10>>,FALSE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_ALTERNATE)
ENDIF
if IS_ENTITY_AT_COORD(FRANK_PED(),<<-142.7872, -2489.0518, 43.5330>>,<<1,1,2>>,TRUE)
and not IS_PED_RAGDOLL(FRANK_PED())
if DOES_BLIP_EXIST(blip_objective)
remove_blip(blip_objective)
endif
CLEAR_AREA(<< -147.0720, -2495.3691, 47.6477 >>,50,true)
//audio
if IS_AUDIO_SCENE_ACTIVE("DH2A_GET_TO_VANTAGE_POINT")
STOP_AUDIO_SCENE("DH2A_GET_TO_VANTAGE_POINT")
endif
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPE_GUARDS_scene")
START_AUDIO_SCENE("DH2A_SNIPE_GUARDS_scene")
endif
HANG_UP_AND_PUT_AWAY_PHONE()
//frank
if HAS_PED_GOT_WEAPON(FRANK_PED(),wtSniper)
SET_CURRENT_PED_WEAPON(FRANK_PED(),wtSniper,false)
else
GIVE_WEAPON_TO_PED(FRANK_PED(),wtSniper,200,false,true)
endif
SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
//frank
OPEN_SEQUENCE_TASK(seq)
TASK_GO_STRAIGHT_TO_COORD(null,<<-143.8061, -2488.3064, 43.4408>>,PEDMOVE_WALK)
TASK_ACHIEVE_HEADING(null,GET_HEADING_FROM_ENTITIES( frank_ped(),mercs[merc1_start].id))
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(FRANK_PED(),seq)
CLEAR_SEQUENCE_TASK(seq)
if not bVantageText
//sort out trev and mike car
if IsEntityAlive(TREV_PED())
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_trev].id)
endif
if IsEntityAlive(vehs[mvf_mission_veh].id)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
endif
endif
REPLAY_RECORD_BACK_FOR_TIME(4.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ELSE
IF NOT IS_ENTITY_AT_COORD(FRANK_PED(),<<-142.7872, -2489.0518, 43.4330>>,<<80,80,80>>)
Print_now("DCKH_VANTAGE",DEFAULT_GOD_TEXT_TIME,1)
IF NOT IS_ENTITY_AT_COORD(FRANK_PED(),<<-142.7872, -2489.0518, 43.4330>>,<<100,100,100>>)
mission_failed(mff_area)
ENDIF
ENDIF
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if not bVantageText
Print_now("DCKH_VANTAGE",DEFAULT_GOD_TEXT_TIME,1)
bVantageText = TRUE
OPEN_SEQUENCE_TASK(seq)
TASK_CLEAR_LOOK_AT(null)
TASK_VEHICLE_DRIVE_TO_COORD(null,vehs[mvf_mission_veh].id,<<188.8807, -2988.6001, 4.7541>>,25,DRIVINGSTYLE_ACCURATE,GET_ENTITY_MODEL(vehs[mvf_mission_veh].id),DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS,4,-1)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(TREV_PED(),seq)
CLEAR_SEQUENCE_TASK(seq)
//sort out trev and mike car
if IsEntityAlive(TREV_PED())
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_trev].id)
endif
if IsEntityAlive(vehs[mvf_mission_veh].id)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
endif
endif
endif
endif
break
case 11
IF isentityalive( vehs[mvf_dinghy].id )
CPRINTLN( DEBUG_MISSION, "SETTING DINGHY LOD MULTIPLIER" )
SET_VEHICLE_LOD_MULTIPLIER( vehs[mvf_dinghy].id, 5 )
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, FALSE )
SET_BOAT_REMAINS_ANCHORED_WHILE_PLAYER_IS_DRIVER( vehs[mvf_dinghy].id, FALSE )
ENDIF
//cam
camera_a = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
set_cam_active(camera_a,true)
prep_start_cutscene(false,<< -209.5674, -2386.8694, 15.0927 >>)
SET_FORCE_FOOTSTEP_UPDATE(frank_ped(), TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(frank_ped())
SET_CURRENT_PED_WEAPON(FRANK_PED(),wtSniper,false)
players_scene_id = CREATE_SYNCHRONIZED_SCENE( << -143.8203, -2488.2612, 43.4412 >>, <<0,0,-34.5>>) //<<-143.8, -2487.555, 43.450>>, <<0,0,-34.5>> )
TASK_SYNCHRONIZED_SCENE( frank_ped(), players_scene_id, "missheistdocks2aswitchig_6", "IG_6_f_sniping_m_dingy_franklin", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_PROCESS_ATTACHMENTS_ON_START)
PLAY_SYNCHRONIZED_CAM_ANIM(camera_a, players_scene_id, "IG_6_f_sniping_m_dingy_franklin_cam", "missheistdocks2aswitchig_6")
SET_CAM_ACTIVE(camera_a, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
FORCE_PED_AI_AND_ANIMATION_UPDATE(frank_ped(),TRUE)
bDialoguePlayed2 = FALSE
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
break
case 12
IF IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
SET_CURRENT_PED_WEAPON(FRANK_PED(),wtSniper,true)
tempEntity = GET_CURRENT_PED_WEAPON_ENTITY_INDEX(frank_ped())
IF DOES_ENTITY_EXIST(tempEntity)
REQUEST_WEAPON_HIGH_DETAIL_MODEL(GET_OBJECT_INDEX_FROM_ENTITY_INDEX(tempEntity))
ENDIF
REQUEST_WEAPON_ASSET(wtSniper, DEFAULT, WEAPON_COMPONENT_SCOPE | WEAPON_COMPONENT_GRIP | WEAPON_COMPONENT_SCLIP2)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting weapon asset.")
ENDIF
IF isentityalive( vehs[mvf_dinghy].id )
REQUEST_VEHICLE_HIGH_DETAIL_MODEL( vehs[mvf_dinghy].id )
ENDIF
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.95
SET_FORCE_FOOTSTEP_UPDATE(frank_ped(), FALSE)
do_tods_dh2a()
mission_substage++
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.5
IF NOT bDialoguePlayed2
if IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
endif
IF IS_TIME_BETWEEN_THESE_HOURS(g_sMissionStaticData[sp_heist_docks_2a].startHour, g_sMissionStaticData[sp_heist_docks_2a].endHour)
NEW_LOAD_SCENE_START(<<-79.16,-2355.64,1.87>>,NORMALISE_VECTOR(<<0.69,-0.72,0.11>>),300)
ELSE
NEW_LOAD_SCENE_START(<<-24.19,-2417.54,7.80>>,NORMALISE_VECTOR(<<-0.97,0.16,0.18>>),500)
ENDIF
bDialoguePlayed2 = TRUE
ENDIF
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.2
IF NOT bDialoguePlayed
KILL_ANY_CONVERSATION()
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(convo_struct,"D2AAUD","DS2A_DING","DS2A_DING_1",CONV_PRIORITY_MEDIUM)
IF isentityalive( vehs[mvf_dinghy].id )
CPRINTLN( DEBUG_MISSION, "SETTING DINGHY ANCHOR FALSE" )
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, FALSE )
ENDIF
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
NEW_LOAD_SCENE_START(<<-143.55, -2489.59, 45.58>>, NORMALISE_VECTOR(<<0.02, 0.97, -0.23>>), 1000 )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
break
case 13
IF isentityalive(frank_ped())
tempEntity = GET_CURRENT_PED_WEAPON_ENTITY_INDEX(frank_ped())
IF DOES_ENTITY_EXIST(tempEntity)
REQUEST_WEAPON_HIGH_DETAIL_MODEL(GET_OBJECT_INDEX_FROM_ENTITY_INDEX(tempEntity))
REQUEST_WEAPON_ASSET(wtSniper, DEFAULT, WEAPON_COMPONENT_SCOPE | WEAPON_COMPONENT_GRIP | WEAPON_COMPONENT_SCLIP2)
ENDIF
ENDIF
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.99
CLEAR_FOCUS()
players_scene_id = CREATE_SYNCHRONIZED_SCENE( << -143.8203, -2488.2612, 43.4412 >>, <<0,0,-34.5>>) //<<-143.8, -2487.555, 43.450>>, <<0,0,-34.5>> )
TASK_SYNCHRONIZED_SCENE( frank_ped(), players_scene_id, "missheistdocks2aswitchig_7", "IG_7_f_sniping_franklin", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_PROCESS_ATTACHMENTS_ON_START)
PLAY_SYNCHRONIZED_CAM_ANIM(camera_a, players_scene_id, "IG_7_f_sniping_cam", "missheistdocks2aswitchig_7")
bDialoguePlayed = FALSE
mission_substage++
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.5
IF NOT bDialoguePlayed
bDialoguePlayed = TRUE
if IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
endif
NEW_LOAD_SCENE_START(<<-139.22,-2486.47,44.71>>,NORMALISE_VECTOR(<<-0.83,-0.56,0.06>>),300)
ENDIF
ENDIF
break
case 14
IF isentityalive(frank_ped())
tempEntity = GET_CURRENT_PED_WEAPON_ENTITY_INDEX(frank_ped())
IF DOES_ENTITY_EXIST(tempEntity)
REQUEST_WEAPON_HIGH_DETAIL_MODEL(GET_OBJECT_INDEX_FROM_ENTITY_INDEX(tempEntity))
REQUEST_WEAPON_ASSET(wtSniper, DEFAULT, WEAPON_COMPONENT_SCOPE | WEAPON_COMPONENT_GRIP | WEAPON_COMPONENT_SCLIP2)
ENDIF
ENDIF
if GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.999
IF IS_ENTITY_OK(PLAYER_PED_ID())
CLEAR_PED_TASKS( PLAYER_PED_ID() )
SET_CURRENT_PED_WEAPON( PLAYER_PED_ID(), wtSniper, TRUE )
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(mercs[merc1_start].id))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(mercs[merc1_start].id))
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), TRUE )
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
FORCE_PED_MOTION_STATE( PLAYER_PED_ID(), MS_AIMING )
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(),TRUE)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
prep_stop_cutscene(TRUE)
REPLAY_STOP_EVENT()
//@RJP make sure Michael has the combat pistol suppressor at the start
if not HAS_PED_GOT_WEAPON_COMPONENT( mike_ped(), wtcombatpistol, weaponcomponent_at_pi_supp )
give_weapon_component_to_ped(mike_ped(),wtcombatpistol, weaponcomponent_at_pi_supp)
endif
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPE_GUARDS_scene")
START_AUDIO_SCENE("DH2A_SNIPE_GUARDS_scene")
endif
if IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
endif
IF isentityalive( vehs[mvf_dinghy].id )
SET_VEHICLE_LOD_MULTIPLIER( vehs[mvf_dinghy].id, 1 )
ENDIF
bDialoguePlayed = FALSE
mission_substage++
else
IF NOT bDialoguePlayed
bDialoguePlayed = TRUE
if IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
endif
NEW_LOAD_SCENE_START_SPHERE( << -95.3159, -2370.9175, 13.2960 >>, 25 )
// NEW_LOAD_SCENE_START(<<-143.82,-2488.26,45.02>>,NORMALISE_VECTOR(<<0.37,0.90,-0.23>>),200)
ENDIF
endif
break
case 15
CPRINTLN( DEBUG_MISSION, "PLAYER SHOULD BE AIMING NOW" )
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2aswitchig_6")
SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), FALSE)
bDialoguePlayed = false
if IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
endif
mission_set_stage(msf_1_snipe_gaurds)
mission_substage = STAGE_ENTRY
break
endswitch
if IsEntityAlive(FRANK_PED())
and mission_substage > 6
if IS_ENTITY_IN_ANGLED_AREA(FRANK_PED(),<< 29.3069, -2545.3843, 1.2836 >>,<< -266.0822, -2313.2078, 20 >>,170)
and not IS_PED_RAGDOLL(frank_ped())
Mission_Failed(mff_out_pos)//temp
endif
endif
if IsEntityAlive(FRANK_PED())
if IS_ENTITY_IN_ANGLED_AREA(FRANK_PED(),<< -874.0031, -1981.0035, 23.5805 >>,<< 10.8306, -2628.9680, 81.1363 >>,80)
SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.01)
else
SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(1)
endif
endif
// clear_players_task_on_control_input(SCRIPT_TASK_GO_STRAIGHT_TO_COORD)
ENDPROC
PROC ST_1_SNIPE_GUARDS()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
SWITCH mission_substage
case STAGE_ENTRY
SET_PICKUP_GENERATION_RANGE_MULTIPLIER(2.0)
Give_mission_weapons()
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1,"Stage 1: Snipe Guards")
//mercs
if not DOES_BLIP_EXIST(mercs[merc1_start].blip)
mercs[merc1_start].blip = CREATE_BLIP_FOR_PED(mercs[merc1_start].id,true)
endif
if not DOES_BLIP_EXIST(mercs[merc2_start].blip)
mercs[merc2_start].blip = CREATE_BLIP_FOR_PED(mercs[merc2_start].id,true)
endif
if isentityalive(mercs[merc1_start].id)
TASK_PLAY_ANIM(mercs[merc1_start].id,"missheistdocks2a","idle_guard",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_LOOPING)
IF IS_ENTITY_OK(mercs[merc1_start].id)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mercs[merc1_start].id,true)
ENDIF
endif
if isentityalive(mercs[merc2_start].id)
TASK_PLAY_ANIM(mercs[merc2_start].id,"missheistdocks2a","idle_guard",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1,AF_LOOPING)
IF IS_ENTITY_OK(mercs[merc2_start].id)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mercs[merc2_start].id,true)
ENDIF
endif
//mike
IF IS_ENTITY_OK(MIKE_PED())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_PED(),true)
CLEAR_PED_TASKS(mike_ped())
ENDIF
//set up crates
if not DOES_ENTITY_EXIST(objcov1)
objcov1 = CREATE_OBJECT (prop_cratepile_07a, <<-215.770004,-2392.330078,5.0>>)
SET_ENTITY_ROTATION(objcov1, <<-0.000000,0.000000,-29.999996>>)
SET_ENTITY_LOD_DIST( objcov1, 200 )
endif
if not DOES_ENTITY_EXIST(objcov2)
objcov2 = CREATE_OBJECT (prop_mil_crate_02, <<-211.029999,-2388.360107,5.0>>)
SET_ENTITY_ROTATION (Objcov2, <<-0.000000,0.000000,-12.000000>>)
SET_ENTITY_LOD_DIST( objcov2, 200 )
endif
if not DOES_ENTITY_EXIST(objcov3)
objcov3 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-212.509995,-2387.169922,5.0>>)
set_entity_rotation (objcov3, <<-0.000000,0.000000,-39.999992>> )
SET_ENTITY_LOD_DIST( objcov3, 200 )
endif
if not DOES_ENTITY_EXIST(objcov4)
OBJCOV4 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-184.7490, -2422.6982, 5.0013>>)
SET_ENTITY_ROTATION (OBJCOV4, <<0.0,0.0,8.3525>> )
SET_ENTITY_LOD_DIST( OBJCOV4, 200 )
endif
if not DOES_ENTITY_EXIST(objcov5)
OBJCOV5 = CREATE_OBJECT (PROP_MIL_CRATE_02, <<-193.7419, -2422.9417, 5.0007>>)
SET_ENTITY_ROTATION (OBJCOV5, <<0.0,0.0,220.8658>> )
SET_ENTITY_LOD_DIST( OBJCOV5, 200 )
endif
//target bool
bfirstaim = true
//get rid of trevor now that he is not needed and driven off
if IsEntityAlive(peds[mpf_trev].id)
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_trev].id)
endif
if IsEntityAlive(vehs[mvf_mission_veh].id)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_mission_veh].id)
endif
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPE_GUARDS_scene")
START_AUDIO_SCENE("DH2A_SNIPE_GUARDS_scene")
endif
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bPrintDisplayed = FALSE
iStairNavMeshBlocker[0] = ADD_NAVMESH_BLOCKING_OBJECT(<<-135.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
iStairNavMeshBlocker[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<-214.905899,-2383.557861,5.000676>>,<<1.500000,1.500000,1.500000>>,0)
mission_substage++
break
case 1
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
//display sniping zoom help text, fix for B*2090105
IF GET_ALLOW_MOVEMENT_WHILE_ZOOMED()
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SNIPE_HLP0")
CLEAR_HELP(TRUE)
PRINT_HELP_FOREVER("SNIPE_HLP0")
ENDIF
ELSE
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SNIPE_HLP1")
CLEAR_HELP(TRUE)
PRINT_HELP_FOREVER("SNIPE_HLP1")
ENDIF
ENDIF
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
endif
IF IsEntityAlive(mercs[merc1_start].id)
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mercs[merc1_start].id,FRANK_PED())
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
SET_ENTITY_HEALTH(mercs[merc1_start].id,0)
ENDIF
ENDIF
IF IsEntityAlive(mercs[merc2_start].id)
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mercs[merc2_start].id,FRANK_PED())
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
SET_ENTITY_HEALTH(mercs[merc2_start].id,0)
ENDIF
ENDIF
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
IF NOT bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_GO2", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ELIF NOT bDialoguePlayed2
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DS2A_SHADY", CONV_PRIORITY_MEDIUM )
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
ELIF NOT bPrintDisplayed
IF IS_SAFE_TO_DISPLAY_GODTEXT()
PRINT("DCKH_SNIPER",DEFAULT_GOD_TEXT_TIME,1)
bPrintDisplayed = TRUE
ENDIF
ENDIF
if not IsEntityAlive(mercs[merc1_start].id)
and not IsEntityAlive(mercs[merc2_start].id)
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bPrintDisplayed = FALSE
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_START( <<-93.05,-2367.14,14.99>>, NORMALISE_VECTOR(<<0.91,0.42,0.03>>), 500 )
ENDIF
IF IS_THIS_PRINT_BEING_DISPLAYED( "DCKH_SNIPER" )
CLEAR_THIS_PRINT( "DCKH_SNIPER" )
ENDIF
mission_substage++
elif not IsEntityAlive(mercs[merc1_start].id)
and IsEntityAlive(mercs[merc2_start].id)
if bSnipeStageCheck = false
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
task_play_anim(null,"missheistdocks2a@alert",sduckanim,normal_blend_in,NORMAL_BLEND_OUT)
TASK_AIM_GUN_AT_ENTITY(null,frank_ped(),1000)
TASK_SHOOT_AT_ENTITY(null,FRANK_PED(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc2_start].id,seq)
bSnipeStageCheck = true
endif
elif IsEntityAlive(mercs[merc1_start].id)
and not IsEntityAlive(mercs[merc2_start].id)
if bSnipeStageCheck = false
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
task_play_anim(null, "missheistdocks2a@crouch", "enter_crouch_a", normal_blend_in, normal_blend_out)
task_play_anim(null, "missheistdocks2a@crouch", "crouching_idle_a", normal_blend_in, REALLY_SLOW_BLEND_OUT)
TASK_AIM_GUN_AT_ENTITY(null,frank_ped(),1000)
TASK_SHOOT_AT_ENTITY(null,FRANK_PED(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc1_start].id,seq)
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
bSnipeStageCheck = true
endif
elif IS_SNIPER_BULLET_IN_AREA( GET_ENTITY_COORDS( mercs[merc1_start].id ), <<5,5,5>> )
OR HAS_PED_RECEIVED_EVENT(mercs[merc1_start].id,EVENT_SHOT_FIRED_BULLET_IMPACT)
or HAS_PED_RECEIVED_EVENT(mercs[merc2_start].id,EVENT_SHOT_FIRED_BULLET_IMPACT)
if bSnipeStageCheck = false
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
task_play_anim(null, "missheistdocks2a@crouch", "enter_crouch_a", normal_blend_in, normal_blend_out)
task_play_anim(null, "missheistdocks2a@crouch", "crouching_idle_a", normal_blend_in, REALLY_SLOW_BLEND_OUT)
TASK_AIM_GUN_AT_ENTITY(null,frank_ped(),1000)
TASK_SHOOT_AT_ENTITY(null,FRANK_PED(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc1_start].id,seq)
CLEAR_SEQUENCE_TASK(seq)
OPEN_SEQUENCE_TASK(seq)
task_play_anim(null,"missheistdocks2a@alert",sduckanim,normal_blend_in,NORMAL_BLEND_OUT)
TASK_AIM_GUN_AT_ENTITY(null,frank_ped(),1000)
TASK_SHOOT_AT_ENTITY(null,FRANK_PED(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc2_start].id,seq)
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
bSnipeStageCheck = true
endif
endif
break
case 2
iCSDelay = GET_GAME_TIMER()
TRIGGER_MUSIC_EVENT("DH2A_START")
Give_mission_weapons()
if has_ped_got_weapon(mike_ped(),wtCombatPistol)
SET_CURRENT_PED_WEAPON(mike_ped(),wtCombatPistol,true)
endif
//if not IS_ENTITY_AT_COORD(mike_ped(),<<-83.5905, -2361.7979, 14.2963>>,<<5,5,3>>)
// SET_ENTITY_COORDS(mike_ped(),<<-83.5905, -2361.7979, 14.2963>>)
// set_entity_heading(mike_ped(),155.7045)
// CLEAR_PED_TASKS(mike_ped())
//else
icutstage = 0
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
// SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
// CLEAR_PED_TASKS(mike_ped())
// SET_CURRENT_PED_WEAPON( mike_ped(), WEAPONTYPE_UNARMED, TRUE )
mission_substage++
//endif
break
case 3
if GET_GAME_TIMER()- iCSDelay > 2000
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_SUPP",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CREATED CONVERSATION DH2A_SUPP" )
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ENDIF
ENDIF
ENDIF
break
case 4
CLEAR_HELP(TRUE)
SET_SEETHROUGH(FALSE)
//b_nightvision_active = FALSE
players_scene_id = CREATE_SYNCHRONIZED_SCENE( << -143.8203, -2488.2612, 43.4412 >>, <<0,0,-34.5>>) //<<-143.8, -2487.555, 43.450>>, <<0,0,-34.5>> )
cameraIndex = CREATE_CAMERA( CAMTYPE_ANIMATED, TRUE )
render_script_cams(true, false)
TASK_SYNCHRONIZED_SCENE( frank_ped(), players_scene_id, "missheistdocks2aswitchig_7", "IG_7_F_SNIPING_M_CLIMBING_FRANKLIN", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_PROCESS_ATTACHMENTS_ON_START)
PLAY_SYNCHRONIZED_CAM_ANIM(cameraIndex, players_scene_id, "IG_7_F_SNIPING_M_CLIMBING_CAM", "missheistdocks2aswitchig_7")
prep_start_cutscene( false, <<-143.3857, -2488.5540, 43.4383>> )
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
break
case 5
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.99
SET_TIME_SCALE(1)
iCSDelay = GET_GAME_TIMER()
players_scene_id = CREATE_SYNCHRONIZED_SCENE(<<-79.7377, -2359.4518, 14.2669>>, <<0,0,155.7045>>)
CLEAR_PED_TASKS_IMMEDIATELY( mike_ped() )
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
SET_PED_STEALTH_MOVEMENT(mike_ped(),true)
SET_CURRENT_PED_WEAPON( mike_ped(), WEAPONTYPE_UNARMED, TRUE )
task_synchronized_scene( mike_ped(), players_scene_id, "missheistdocks2aig_1", "ig_1_michaelclimboverboat", instant_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT )
FORCE_PED_AI_AND_ANIMATION_UPDATE( mike_ped() )
PLAY_SYNCHRONIZED_CAM_ANIM( cameraIndex, players_scene_id, "ig_1_michaelclimboverboat_cam", "missheistdocks2aig_1" )
SET_SYNCHRONIZED_SCENE_PHASE( players_scene_id, 0.2 )
if IS_AUDIO_SCENE_ACTIVE("DH2A_SNIPE_GUARDS_scene")
STOP_AUDIO_SCENE("DH2A_SNIPE_GUARDS_scene")
endif
CPRINTLN( DEBUG_MISSION, "STARTING DH2A_PLANT_BOMBS_SCENE" )
START_AUDIO_SCENE("DH2A_PLANT_BOMBS_SCENE")
// prep_start_cutscene( false, <<-81.7093, -2358.2287, 14.2969>> )
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = peds[mpf_mike].id
bDialoguePlayed2 = FALSE
mission_substage++
ENDIF
break
case 6
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_NEXT_CAMERA)
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > PICK_FLOAT(IS_PLAYER_PLAYING_IN_FIRST_PERSON_ON_FOOT(), fPushInStartPhase, 0.8)
IF MAKE_SELECTOR_PED_SELECTION( sSelectorPeds, SELECTOR_PED_MICHAEL )
IF TAKE_CONTROL_OF_SELECTOR_PED( sSelectorPeds, TRUE, TRUE )
//handle common stuff when ending synched scene
IF isentityalive(frank_ped())
IF GET_SCRIPT_TASK_STATUS( frank_ped(), SCRIPT_TASK_AIM_GUN_AT_ENTITY ) > PERFORMING_TASK
TASK_AIM_GUN_AT_ENTITY( frank_ped(), mike_ped(), -1 )
ENDIF
ENDIF
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
REPLAY_STOP_EVENT()
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
//handle specific stuff depending on camera view mode
IF IS_PLAYER_PLAYING_IN_FIRST_PERSON_ON_FOOT()
FILL_PUSH_IN_DATA(sPushInData, mike_ped(), CHAR_MICHAEL, fPushInStartDistance, iPushInInterpTime, iPushInCutTime, iPushInFXTime, iPushInSpeedUpTime, fPushInSpeedUpProportion)
mission_substage = 70 //go to special case to handle the push in
ELSE
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
CLEAR_PED_TASKS( mike_ped() )
SET_PED_STEALTH_MOVEMENT(mike_ped(), TRUE)
FORCE_PED_MOTION_STATE( mike_ped(), MS_STEALTHMODE_IDLE, FALSE, FAUS_DEFAULT)
ANIMPOSTFX_PLAY("SwitchSceneMichael", 1000, FALSE)
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
prep_stop_cutscene( true, false, true )
mission_substage++ //increment the stage as normal
ENDIF
ENDIF
ENDIF
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.5
IF NOT bDialoguePlayed
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_TK1", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.1
IF NOT bDialoguePlayed2
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
NEW_LOAD_SCENE_START( <<-79.51,-2362.08,14.38>>, NORMALISE_VECTOR(<<-1.00,0.07,0.00>>), 500 )
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
break
case 70 //special case for handling push in when playing in first person
DISABLE_CONTROL_ACTION(CAMERA_CONTROL, INPUT_NEXT_CAMERA)
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
IF HANDLE_PUSH_IN(sPushInData, bPushInAttached, DEFAULT, DEFAULT, bPushInAttachStartCam, bPushInDoColourFlash)
CLEAR_PED_TASKS( mike_ped() )
SET_PED_STEALTH_MOVEMENT(mike_ped(), TRUE)
FORCE_PED_MOTION_STATE( mike_ped(), MS_STEALTHMODE_IDLE, FALSE, FAUS_DEFAULT)
prep_stop_cutscene( true, false, false )
mission_substage = 7
ENDIF
ENDIF
break
case 7
if TRIGGER_MUSIC_EVENT("DH2A_READY_FOR_2ND")
// SET_CURRENT_PED_WEAPON( mike_ped(), WEAPONTYPE_STICKYBOMB)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(mike_ped())
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(),TRUE)
bFilledSpecialMeter = TRUE
CREATE_SCRIPTED_COVER()
SET_PLAYER_CONTROL(player_id(),true)
prep_stop_cutscene(true,false,true)
KILL_ANY_CONVERSATION()
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_02",CONV_PRIORITY_MEDIUM)
Hotswap_Menu(false,false,true)
bHotSwap = true
// do_stream_vol()
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
endif
break
case 8
//@RJP getting rid of delay before things are blipped and we move to next stage
// if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// or GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES)= 0
// if C4[C4_0_front_of_ship].bPlanted = FALSE
// print_now("DCKH_PLB1",7500,1)
// endif
//Pickups
CREATE_HEALTH_PICKUPS()
//@RJP unload animdict containing Mike climbing onto boat
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2aig_1")
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2aswitchig_7")
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2,"Stage 2: first bomb")
PRINT_HELP("DCKH_SWHELP")
mission_set_stage(msf_2_first_bomb)
mission_substage = STAGE_ENTRY
// endif
break
endswitch
ENDPROC
PROC ST_2_FIRST_BOMB()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
MANAGE_PLAYER_SWITCH_LOAD_SCENES()
Manage_bomb_stages()
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
SWITCH mission_substage
case STAGE_ENTRY
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
#IF IS_DEBUG_BUILD
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_BOAT_ANCHOR() for DINGHY.")
#ENDIF
ENDIF
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
imike_ai_stage = 0
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
IF PLAYER_PED_ID() = mike_ped()
IF isentityalive(frank_ped())
TASK_AIM_GUN_AT_ENTITY( frank_ped(), mike_ped(), -1 )
ENDIF
ENDIF
bDialoguePlayed = FALSE
bPrintDisplayed = FALSE
mission_substage++
break
case 1 //@RJP new stage to make sure the objective prints
if IS_SAFE_TO_DISPLAY_GODTEXT()
if C4[C4_0_front_of_ship].bPlanted = FALSE
print_now("DCKH_PLB1",DEFAULT_GOD_TEXT_TIME,1)
endif
SET_CURRENT_PED_WEAPON( mike_ped(), WEAPONTYPE_STICKYBOMB)
mission_substage++
endif
break
case 2
IF IS_THIS_PRINT_BEING_DISPLAYED("DCKH_BOMB1")
AND NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_0_front_of_ship].ExpPos, <<3, 1.5, 2>>)
CLEAR_THIS_PRINT("DCKH_BOMB1")
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_0_front_of_ship].ExpPos, <<3,1.5, 2>>)
AND C4[C4_0_front_of_ship].bPlanted = FALSE
IF not IS_THIS_PRINT_BEING_DISPLAYED("DCKH_PLB1")
IF IS_SAFE_TO_START_CONVERSATION()
IF NOT bPrintDisplayed
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_06",CONV_PRIORITY_MEDIUM)
bPrintDisplayed = TRUE
endif
ENDIF
ENDIF
if IS_SAFE_TO_DISPLAY_GODTEXT()
Print_now("DCKH_BOMB1",DEFAULT_GOD_TEXT_TIME,1)
endif
ENDIF
ENDIF
IF c4[C4_0_front_of_ship].bPlanted = false
IF IS_PROJECTILE_TYPE_IN_ANGLED_AREA(<<-87.442337,-2365.910889,12.796924>>, <<-82.767159,-2365.917480,15.296924>>, 2.5,wtBomb)
OR C4[C4_0_front_of_ship].bPlanted = TRUE
if balarmtriggered
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BMB1_NS",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_0_front_of_ship].blip)
c4[C4_0_front_of_ship].bPlanted = true
bDialoguePlayed = FALSE
bPrintDisplayed = FALSE
mission_set_stage(msf_3_second_bomb)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage = STAGE_ENTRY
endif
else
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_03",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_0_front_of_ship].blip)
c4[C4_0_front_of_ship].bPlanted = true
bDialoguePlayed = FALSE
bPrintDisplayed = FALSE
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
mission_set_stage(msf_3_second_bomb)
mission_substage = STAGE_ENTRY
REPLAY_RECORD_BACK_FOR_TIME(3, 0.0, REPLAY_IMPORTANCE_HIGH)
endif
endif
ENDIF
ENDIF
break
endswitch
IF PLAYER_PED_ID() = frank_ped()
IF NOT bPrintProtect
AND NOT sCamDetails.bRun
if IS_SAFE_TO_DISPLAY_GODTEXT()
CPRINTLN(DEBUG_MISSION, "GIVE FRANKLIN PROTECT OBJECTIVE")
PRINT_NOW("DCKH_PROTECT",DEFAULT_GOD_TEXT_TIME,1)
bPrintProtect = TRUE
endif
ENDIF
ENDIF
ENDPROC
PROC ST_3_SECOND_BOMB()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
MANAGE_PLAYER_SWITCH_LOAD_SCENES()
Manage_bomb_stages()
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
SWITCH mission_substage
case STAGE_ENTRY
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
#IF IS_DEBUG_BUILD
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_BOAT_ANCHOR() for DINGHY.")
#ENDIF
ENDIF
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
imike_ai_stage = 0
bDialoguePlayed = false
bDialoguePlayed2 = false
bDialoguePlayed3 = false
bPrintDisplayed = FALSE
set_replay_mid_mission_stage_with_name(3,"stage 3: second bomb")
mission_substage++
break
case 1
IF IS_THIS_PRINT_BEING_DISPLAYED("DCKH_BOMB2")
AND NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_1_first_mast].ExpPos, <<1.5, 1.5, 2>>)
CLEAR_THIS_PRINT("DCKH_BOMB2")
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_1_first_mast].ExpPos, <<1.5, 1.5, 2>>)
AND C4[C4_1_first_mast].bPlanted = FALSE
and not sCamDetails.bRun
IF IS_SAFE_TO_START_CONVERSATION()
IF NOT bDialoguePlayed2
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_06",CONV_PRIORITY_MEDIUM)
bDialoguePlayed2 = TRUE
endif
ENDIF
ENDIF
IF IS_SAFE_TO_DISPLAY_GODTEXT()
//Tell them to place the C4
Print_now("DCKH_BOMB2",DEFAULT_GOD_TEXT_TIME,1)
ENDIF
endif
IF c4[C4_1_first_mast].bPlanted = false
IF IS_PROJECTILE_TYPE_IN_ANGLED_AREA((C4[C4_1_first_mast].ExpPos + <<-0.75,3,2>>),(C4[C4_1_first_mast].ExpPos + <<-0.75,-3,-2>>),10,wtBomb)
OR C4[C4_1_first_mast].bPlanted = TRUE
IF balarmtriggered
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BMB2_NS",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_1_first_mast].blip)
c4[C4_1_first_mast].bPlanted = true
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
if not balarmtriggered
trigger_music_event("dh2a_2nd_bomb_planted")
endif
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bDialoguePlayed3 = FALSE
bPrintDisplayed = FALSE
mission_set_stage(msf_4_third_bomb)
mission_substage = STAGE_ENTRY
endif
ELSE
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_04",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_1_first_mast].blip)
c4[C4_1_first_mast].bPlanted = true
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
if not balarmtriggered
trigger_music_event("dh2a_2nd_bomb_planted")
endif
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bPrintDisplayed = FALSE
mission_set_stage(msf_4_third_bomb)
mission_substage = STAGE_ENTRY
REPLAY_RECORD_BACK_FOR_TIME(3, 0.0, REPLAY_IMPORTANCE_HIGH)
endif
ENDIF
ENDIF
IF NOT bPrintDisplayed
IF IS_SAFE_TO_DISPLAY_GODTEXT()
IF PLAYER_PED_ID() = MIKE_PED()
Print_now("DCKH_PLB2",DEFAULT_GOD_TEXT_TIME,1)
bPrintDisplayed = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bDialoguePlayed3
AND NOT balarmtriggered
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_SCHAT1", CONV_PRIORITY_MEDIUM )
bDialoguePlayed3 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//all clear convo
if not IsEntityAlive(mercs[merc3_C4_2].id)
and not IsEntityAlive(mercs[merc4_C4_2].id)
and not IsEntityAlive(mercs[merc5_C4_2].id)
and bDialoguePlayed = false
and not balarmtriggered
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_09",CONV_PRIORITY_MEDIUM)
bDialoguePlayed = true
endif
endif
endif
break
endswitch
IF PLAYER_PED_ID() = frank_ped()
IF NOT bPrintProtect
AND NOT sCamDetails.bRun
if IS_SAFE_TO_DISPLAY_GODTEXT()
CPRINTLN(DEBUG_MISSION, "GIVE FRANKLIN PROTECT OBJECTIVE")
PRINT_NOW("DCKH_PROTECT",DEFAULT_GOD_TEXT_TIME,1)
bPrintProtect = TRUE
endif
ENDIF
ENDIF
ENDPROC
PROC ST_4_THIRD_BOMB()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
MANAGE_PLAYER_SWITCH_LOAD_SCENES()
Manage_bomb_stages()
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
SWITCH mission_substage
case STAGE_ENTRY
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
#IF IS_DEBUG_BUILD
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_BOAT_ANCHOR() for DINGHY.")
#ENDIF
ENDIF
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
imike_ai_stage = 0
bDialoguePlayed = false
bDialoguePlayed2 = false
bDialoguePlayed3 = false
bPrintDisplayed = false
set_replay_mid_mission_stage_with_name(4,"stage 4: third bomb")
mission_substage++
break
case 1
IF IS_THIS_PRINT_BEING_DISPLAYED("DCKH_BOMB2")
AND NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_2_second_mast].ExpPos, <<1.5, 1.5, 2>>)
CLEAR_THIS_PRINT("DCKH_BOMB2")
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), C4[C4_2_second_mast].ExpPos, <<1.5, 1.5, 2>>)
AND C4[C4_2_second_mast].bPlanted = FALSE
and not sCamDetails.bRun
IF IS_SAFE_TO_START_CONVERSATION()
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT bDialoguePlayed2
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_06",CONV_PRIORITY_MEDIUM)
bDialoguePlayed2 = TRUE
endif
ENDIF
ENDIF
IF IS_SAFE_TO_DISPLAY_GODTEXT()
Print_now("DCKH_BOMB2",DEFAULT_GOD_TEXT_TIME,1)
ENDIF
ENDIF
IF c4[C4_2_second_mast].bPlanted = false
IF IS_PROJECTILE_TYPE_IN_ANGLED_AREA((C4[C4_2_second_mast].ExpPos + <<-0.75,3,2>>),(C4[C4_2_second_mast].ExpPos + <<-0.75,-3,-2>>),10,wtBomb)
OR C4[C4_2_second_mast].bPlanted = TRUE
IF balarmtriggered
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BMB3_NS",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_2_second_mast].blip)
c4[C4_2_second_mast].bPlanted = true
if not balarmtriggered
trigger_music_event("dh2a_3rd_bomb_planted")
endif
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
mission_set_stage(msf_5_fourth_bomb)
mission_substage = STAGE_ENTRY
endif
ELSE
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BMB3",CONV_PRIORITY_HIGH)
SAFE_REMOVE_BLIP(C4[C4_2_second_mast].blip)
c4[C4_2_second_mast].bPlanted = true
if not balarmtriggered
trigger_music_event("dh2a_3rd_bomb_planted")
endif
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bDialoguePlayed3 = FALSE
mission_set_stage(msf_5_fourth_bomb)
mission_substage = STAGE_ENTRY
REPLAY_RECORD_BACK_FOR_TIME(3, 0.0, REPLAY_IMPORTANCE_HIGH)
endif
ENDIF
ENDIF
IF NOT bPrintDisplayed
AND NOT balarmtriggered
IF IS_SAFE_TO_DISPLAY_GODTEXT()
IF PLAYER_PED_ID() = MIKE_PED()
Print_now("DCKH_PLB4",DEFAULT_GOD_TEXT_TIME,1)
bPrintDisplayed = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bDialoguePlayed3
AND NOT balarmtriggered
IF IS_SAFE_TO_START_CONVERSATION()
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_SCHAT2", CONV_PRIORITY_MEDIUM )
bDialoguePlayed3 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//all clear convo
if not IsEntityAlive(mercs[merc12_C4_3].id)
and not IsEntityAlive(mercs[merc14_C4_3].id)
and bDialoguePlayed = false
and not balarmtriggered
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_09",CONV_PRIORITY_MEDIUM)
bDialoguePlayed = true
endif
endif
break
endswitch
IF PLAYER_PED_ID() = frank_ped()
IF NOT bPrintProtect
AND NOT sCamDetails.bRun
if IS_SAFE_TO_DISPLAY_GODTEXT()
CPRINTLN(DEBUG_MISSION, "GIVE FRANKLIN PROTECT OBJECTIVE")
PRINT_NOW("DCKH_PROTECT",DEFAULT_GOD_TEXT_TIME,1)
bPrintProtect = TRUE
endif
ENDIF
ENDIF
ENDPROC
PROC ST_5_FOURTH_BOMB()
int i
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
IF mission_substage < 3
MANAGE_PLAYER_SWITCH_LOAD_SCENES()
ENDIF
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
SWITCH mission_substage
case STAGE_ENTRY
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
#IF IS_DEBUG_BUILD
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_BOAT_ANCHOR() for DINGHY.")
#ENDIF
ENDIF
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
imike_ai_stage = 0
Load_Asset_AnimDict(sAssetData,"missheistdocks2aswitchig_7")
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(5,"Stage 5: fourth bomb")
bDialoguePlayed = false
bDialoguePlayed2 = false
iCSDelay = GET_GAME_TIMER()
mission_substage++
break
case 1
if not balarmtriggered
and IS_SAFE_TO_START_CONVERSATION()
and not IS_MESSAGE_BEING_DISPLAYED()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_TK3",CONV_PRIORITY_MEDIUM)
if not DOES_BLIP_EXIST(C4[C4_3_inside].blip)
C4[C4_3_inside].blip = CREATE_BLIP_FOR_COORD(c4[C4_3_inside].ExpPos)
endif
Load_Asset_Waypoint(sAssetData,"docksheist2A01")
Load_Asset_Model(sAssetData,landstalker)
Load_Asset_Model(sAssetData,P_PO1_01_DOORM_S)
Load_Asset_AnimDict(sAssetData, "missheistdocks2aig_1")
iCSDelay = GET_GAME_TIMER()
// IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
// NEW_LOAD_SCENE_START(<<-219.36,-2381.92,14.26>>,NORMALISE_VECTOR(<<-0.39,0.92,-0.08>>),50)
// ENDIF
mission_substage++
endif
else
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_ENT_NS",CONV_PRIORITY_MEDIUM)
if not DOES_BLIP_EXIST(C4[C4_3_inside].blip)
C4[C4_3_inside].blip = CREATE_BLIP_FOR_COORD(c4[C4_3_inside].ExpPos)
endif
Load_Asset_Model(sAssetData,P_PO1_01_DOORM_S)
Load_Asset_AnimDict(sAssetData, "missheistdocks2aig_1")
Load_Asset_Waypoint(sAssetData,"docksheist2A01")
Load_Asset_Model(sAssetData,landstalker)
iCSDelay = GET_GAME_TIMER()
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_START(<<-219.36,-2381.92,14.26>>,NORMALISE_VECTOR(<<-0.39,0.92,-0.08>>),50)
ENDIF
bDialoguePlayed2 = FALSE
mission_substage++
endif
endif
break
case 2
if IS_ENTITY_AT_COORD(MIKE_PED(),C4[C4_3_inside].ExpPos,<<2,2,2>>)
And not sCamDetails.bRun
AND REQUEST_SCRIPT_AUDIO_BANK("PORT_OF_LS_SHIP_DOOR")
IF isentityalive( mercs[MERC16_C4_4].id )
IF CAN_PED_SEE_HATED_PED( mercs[MERC16_C4_4].id, mike_ped() )
OR IS_PED_IN_COMBAT( mercs[MERC16_C4_4].id, mike_ped() )
IF NOT bDialoguePlayed2
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_HLP_NS", CONV_PRIORITY_MEDIUM )
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
ENDIF
ELSE
c4[C4_3_inside].bPlanted = true
if not sCamDetails.bRun
bhotswap = false
endif
Load_Asset_Recording(sAssetData,001,"DH2AREC")
Load_Asset_Recording(sAssetData,002,"DH2AREC")
Load_Asset_Recording(sAssetData,003,"DH2AREC")
load_asset_waypoint(sAssetData,"docksheist2a02")
load_asset_waypoint(sAssetData,"docksheist2a03")
Load_Asset_Model(sAssetData,BUZZARD)
icutstage = 0
PREPARE_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
mission_substage++
ENDIF
ELSE
c4[C4_3_inside].bPlanted = true
if not sCamDetails.bRun
bhotswap = false
endif
Load_Asset_Recording(sAssetData,001,"DH2AREC")
Load_Asset_Recording(sAssetData,002,"DH2AREC")
Load_Asset_Recording(sAssetData,003,"DH2AREC")
load_asset_waypoint(sAssetData,"docksheist2a02")
load_asset_waypoint(sAssetData,"docksheist2a03")
Load_Asset_Model(sAssetData,BUZZARD)
icutstage = 0
PREPARE_ALARM( "PORT_OF_LS_HEIST_SHIP_ALARMS" )
mission_substage++
ENDIF
else
if not bSternObjDisplayed
//@RJP only display objective text to go to stern if current player is Michael
if player_ped_id() = MIKE_PED()
if IS_SAFE_TO_DISPLAY_GODTEXT()
CLEAR_PRINTS()
PRINT_NOW("DCKH_PLB3",DEFAULT_GOD_TEXT_TIME,1)
bSternObjDisplayed = TRUE
endif
endif
endif
endif
break
case 3
if ALARM_CUTSCENE()
icsdelay = GET_GAME_TIMER()
IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iStairNavMeshBlocker[0])
REMOVE_NAVMESH_BLOCKING_OBJECT(iStairNavMeshBlocker[0])
ENDIF
IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iStairNavMeshBlocker[1])
REMOVE_NAVMESH_BLOCKING_OBJECT(iStairNavMeshBlocker[1])
ENDIF
bHotSwap = false
mission_substage = STAGE_EXIT
endif
break
case STAGE_EXIT
for i = enum_to_int(merc1_start) to enum_to_int(merc18_c4_4)
if IsEntityAlive(mercs[i].id)
delete_ped(mercs[i].id)
endif
endfor
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
CPRINTLN( DEBUG_MISSION, "ST_5_FOURTH_BOMB: Stopping new load scene." )
ENDIF
DISPLAY_SNIPER_SCOPE_THIS_FRAME()
RELEASE_NAMED_SCRIPT_AUDIO_BANK("PORT_OF_LS_SHIP_DOOR")
// SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), FALSE )
if IsEntityAlive(mike_ped())
delete_ped(peds[mpf_mike].id)
endif
Unload_Asset_Model(sAssetData,P_PO1_01_DOORM_S)
Unload_Asset_Anim_Dict(sAssetData, "missheistdocks2aig_1")
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2aswitchig_7")
mission_set_stage(msf_6_way_out)
break
endswitch
//================ Mission stage checks ========================
//carry on with bomb stage untill frank reaches the door.
if mission_substage < 3
Manage_bomb_stages()
if not IsEntityAlive(mercs[merc14_C4_3].id)
and not IsEntityAlive(mercs[merc13_C4_3].id)
// and not IsEntityAlive(mercs[MERC15_C4_3].id)
and not IsEntityAlive(mercs[MERC16_C4_4].id)
and IS_SAFE_TO_START_CONVERSATION()
and not bDialoguePlayed
IF PLAYER_PED_ID() = MIKE_PED()
IF balarmtriggered
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_UP_NS", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = true
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_INVIEW", CONV_PRIORITY_MEDIUM )
trigger_music_event("DH2A_ALL_CLEAR")
bDialoguePlayed = true
ENDIF
ENDIF
ELSE
IF balarmtriggered
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_UPM_NS", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = true
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_UP", CONV_PRIORITY_MEDIUM )
trigger_music_event("DH2A_ALL_CLEAR")
bDialoguePlayed = true
ENDIF
ENDIF
ENDIF
endif
if player_ped_id() = FRANK_PED()
SAFE_REMOVE_BLIP(C4[C4_3_inside].blip)
IF NOT bPrintProtect
AND NOT sCamDetails.bRun
if IS_SAFE_TO_DISPLAY_GODTEXT()
CPRINTLN(DEBUG_MISSION, "GIVE FRANKLIN PROTECT OBJECTIVE")
PRINT_NOW("DCKH_PROTECT",DEFAULT_GOD_TEXT_TIME,1)
bPrintProtect = TRUE
endif
ENDIF
else
if not c4[C4_3_inside].bPlanted
if not DOES_BLIP_EXIST(c4[C4_3_inside].blip)
c4[C4_3_inside].blip = CREATE_BLIP_FOR_COORD(c4[C4_3_inside].ExpPos)
endif
endif
endif
endif
ENDPROC
FUNC BOOL UPDATE_MERC_VEH1( BOOL bCombat = FALSE )
INT i
SWITCH iMercVeh1State
CASE 0
//-------merc car 2--------
vehs[mvf_merc1].id = CREATE_VEHICLE(landstalker,<< 14.9690, -2524.4229, 5.5353 >>)
SET_ENTITY_LOD_DIST(vehs[mvf_merc1].id,300)
SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_merc1].id,true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_merc1].id,0)
SET_VEHICLE_CAN_LEAK_PETROL(vehs[mvf_merc1].id,true)
createMercenary(merc19_car1,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc19_car1].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc19_car1].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc19_car1].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc19_car1].id,300)
SET_PED_INTO_VEHICLE(mercs[merc19_car1].id,vehs[mvf_merc1].id,VS_DRIVER)
createMercenary(merc20_car1,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc20_car1].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc20_car1].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc20_car1].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc20_car1].id,300)
SET_PED_INTO_VEHICLE(mercs[merc20_car1].id,vehs[mvf_merc1].id,VS_FRONT_RIGHT)
createMercenary(merc21_car1,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc21_car1].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc21_car1].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc21_car1].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc21_car1].id,300)
SET_PED_INTO_VEHICLE(mercs[merc21_car1].id,vehs[mvf_merc1].id,VS_BACK_LEFT)
createMercenary(merc22_car1,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc22_car1].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc22_car1].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc22_car1].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc22_car1].id,300)
SET_PED_INTO_VEHICLE(mercs[merc22_car1].id,vehs[mvf_merc1].id,VS_BACK_RIGHT)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_merc1].id,002,"DH2AREC")
SET_PLAYBACK_SPEED(vehs[mvf_merc1].id,0.80)
ADD_ENTITY_TO_AUDIO_MIX_GROUP( vehs[mvf_merc1].id, "DH2A_ENEMY_VEHICLES" )
iMercVeh1State ++
BREAK
CASE 1
if IsEntityAlive(vehs[mvf_merc1].id)
if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_merc1].id)
and IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_merc1].id)
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP( vehs[mvf_merc1].id )
for i = enum_to_int(merc19_car1) to ENUM_TO_INT(merc22_car1)
int delayleave
if i = enum_to_int(merc20_car1)
delayleave = 0
elif i = enum_to_int(merc21_car1)
delayleave = 200
elif i = enum_to_int(merc22_car1)
delayleave = 800
else
delayleave = 1000
endif
if IsEntityAlive(mercs[i].id)
IF DOES_BLIP_EXIST(mercs[i].blip)
SET_BLIP_SCALE(mercs[i].blip, BLIP_SIZE_PED)
ENDIF
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef4,10,true)
SET_PED_COMBAT_ATTRIBUTES(MERCS[i].ID,CA_FLEE_WHILST_IN_VEHICLE,FALSE)
SET_PED_COMBAT_ATTRIBUTES(MERCS[i].ID,CA_USE_VEHICLE,FALSE)
SET_PED_ACCURACY(MERCS[i].ID,CAR_MERC_ACCURACY)
OPEN_SEQUENCE_TASK(seq)
TASK_LEAVE_ANY_VEHICLE( null, delayleave )
TASK_SWAP_WEAPON( null, TRUE )
IF bCombat
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef3,2,true)
TASK_COMBAT_PED( null, frank_ped() )
ELSE
TASK_FOLLOW_NAV_MESH_TO_COORD( null, mercs[i].vdef4, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP )
TASK_AIM_GUN_AT_COORD( null, <<-222.0173, -2376.4438, 12.3329>>, -1 )
ENDIF
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[i].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
endfor
iMercVeh1State++
endif
else
iMercVeh1State++
endif
BREAK
CASE 2
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL UPDATE_MERC_VEH2( BOOL bCombat = FALSE )
INT i
SWITCH iMercVeh2State
CASE 0
//-------merc car 2--------
vehs[mvf_merc2].id = CREATE_VEHICLE(landstalker,<< 14.9690, -2524.4229, 5.5353 >>)
SET_ENTITY_LOD_DIST(vehs[mvf_merc2].id,300)
SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_merc2].id,true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_merc2].id,0)
SET_VEHICLE_CAN_LEAK_PETROL(vehs[mvf_merc2].id,true)
createMercenary(merc23_car2,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc23_car2].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc23_car2].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc23_car2].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc23_car2].id,300)
SET_PED_INTO_VEHICLE(mercs[merc23_car2].id,vehs[mvf_merc2].id,VS_DRIVER)
createMercenary(merc24_car2,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc24_car2].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc24_car2].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc24_car2].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc24_car2].id,300)
SET_PED_INTO_VEHICLE(mercs[merc24_car2].id,vehs[mvf_merc2].id,VS_FRONT_RIGHT)
createMercenary(merc25_car2,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc25_car2].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc25_car2].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc25_car2].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc25_car2].id,300)
SET_PED_INTO_VEHICLE(mercs[merc25_car2].id,vehs[mvf_merc2].id,VS_BACK_LEFT)
createMercenary(merc26_car2,150,true,true)
SET_PED_DIES_WHEN_INJURED( mercs[merc26_car2].id, TRUE )
SET_COMBAT_FLOAT(mercs[merc26_car2].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
SET_BLIP_SCALE(mercs[merc26_car2].blip, BLIP_SIZE_VEHICLE)
SET_ENTITY_LOD_DIST(mercs[merc26_car2].id,300)
SET_PED_INTO_VEHICLE(mercs[merc26_car2].id,vehs[mvf_merc2].id,VS_BACK_RIGHT)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_merc2].id,001,"DH2AREC")
SET_PLAYBACK_SPEED(vehs[mvf_merc2].id,1.0)
ADD_ENTITY_TO_AUDIO_MIX_GROUP( vehs[mvf_merc2].id, "DH2A_ENEMY_VEHICLES" )
iMercVeh2State ++
BREAK
CASE 1
if IsEntityAlive(vehs[mvf_merc2].id)
if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_merc2].id)
and IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_merc2].id)
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP( vehs[mvf_merc2].id )
for i = enum_to_int(merc23_car2) to ENUM_TO_INT(merc26_car2)
CPRINTLN(DEBUG_MISSION, "BSW tasking ped #", i, " out")
int delayleave
if i = enum_to_int(merc24_car2)
delayleave = 0
elif i = enum_to_int(merc25_car2)
delayleave = 200
elif i = enum_to_int(merc26_car2)
delayleave = 400
else
delayleave = 600
endif
if IsEntityAlive(mercs[i].id)
IF DOES_BLIP_EXIST(mercs[i].blip)
SET_BLIP_SCALE(mercs[i].blip, BLIP_SIZE_PED)
ENDIF
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef4,10,true)
SET_PED_COMBAT_ATTRIBUTES(MERCS[i].ID,CA_FLEE_WHILST_IN_VEHICLE,FALSE)
SET_PED_COMBAT_ATTRIBUTES(MERCS[i].ID,CA_USE_VEHICLE,FALSE)
SET_PED_ACCURACY(MERCS[i].ID,CAR_MERC_ACCURACY)
OPEN_SEQUENCE_TASK(seq)
TASK_LEAVE_ANY_VEHICLE( null, delayleave )
TASK_SWAP_WEAPON( null, TRUE )
IF bCombat
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef3,2,true)
TASK_COMBAT_PED( null, frank_ped() )
ELSE
TASK_FOLLOW_NAV_MESH_TO_COORD( null, mercs[i].vdef4, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP )
TASK_AIM_GUN_AT_COORD( null, <<-222.0173, -2376.4438, 12.3329>>, -1 )
ENDIF
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[i].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
endfor
iMercVeh2State++
endif
else
iMercVeh2State++
endif
BREAK
CASE 2
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL HELI_CONV_MANAGER()
SWITCH iHeliConv
CASE 0
//Do nothing in this state
BREAK
CASE 1
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_H2",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "HELI_CONV_MANAGER: playing DH2A_H2" )
iHeliConv++
ENDIF
ENDIF
BREAK
CASE 2
//Do nothing in this state
BREAK
CASE 3
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_H3",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "HELI_CONV_MANAGER: playing DH2A_H3" )
iHeliConv++
ENDIF
ENDIF
BREAK
CASE 4
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_DEAL",CONV_PRIORITY_MEDIUM)
iHeliConv++
ENDIF
ENDIF
BREAK
CASE 5
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_MOAN",CONV_PRIORITY_MEDIUM)
iHeliConv++
ENDIF
ENDIF
BREAK
CASE 6
//Do nothing in this state
BREAK
CASE 7
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_H4",CONV_PRIORITY_MEDIUM)
iHeliConv++
ENDIF
ENDIF
BREAK
CASE 8
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_4E",CONV_PRIORITY_MEDIUM)
RETURN TRUE
ENDIF
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL UPDATE_HELICOPTER()
SWITCH iMercHeliState
CASE 0
//-------heli--------
vehs[mvf_heli].id = CREATE_VEHICLE(BUZZARD,<<-51.4938, -2587.0032, 5.0052>>)
SET_ENTITY_LOD_DIST(vehs[mvf_heli].id,300)
SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_heli].id,true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_heli].id,0)
createMercenary(merc29_heli,150,true,true)
SET_BLIP_SCALE( mercs[merc29_heli].blip, BLIP_SIZE_VEHICLE )
SET_PED_PROP_INDEX( mercs[merc29_heli].id, ANCHOR_HEAD, 2 )
SET_ENTITY_LOD_DIST(mercs[merc29_heli].id,300)
SET_PED_INTO_VEHICLE(mercs[merc29_heli].id,vehs[mvf_heli].id,VS_DRIVER)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id,003,"DH2AREC")
SET_PLAYBACK_SPEED(vehs[mvf_heli].id,1.0)
SET_PED_SHOOT_RATE( mercs[merc29_heli].id, 100 )
SET_PED_FIRING_PATTERN( mercs[merc29_heli].id, FIRING_PATTERN_BURST_FIRE_HELI )
SET_CURRENT_PED_VEHICLE_WEAPON(mercs[merc29_heli].id, WEAPONTYPE_VEHICLE_PLAYER_BUZZARD)
SET_PED_ACCURACY( mercs[merc29_heli].id, 4 )
iMercHeliState ++
BREAK
CASE 1
IF isentityalive( vehs[mvf_heli].id )
AND isentityalive( mercs[merc29_heli].id )
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE( vehs[mvf_heli].id )
IF GET_TIME_POSITION_IN_RECORDING( vehs[mvf_heli].id ) > 12000
IF NOT IS_AUDIO_SCENE_ACTIVE("DH2A_CHOPPER_ARRIVES")
START_AUDIO_SCENE("DH2A_CHOPPER_ARRIVES")
ENDIF
ADD_ENTITY_TO_AUDIO_MIX_GROUP( vehs[mvf_heli].id, "DH2A_CHOPPER_group" )
CPRINTLN( DEBUG_MISSION, "UPDATE_HELICOPTER: Helicopter at bridge, starting audio scene")
iHeliConv = 1
iMercHeliState ++
ENDIF
ENDIF
ENDIF
BREAK
CASE 2
IF isentityalive( vehs[mvf_heli].id )
AND isentityalive( mercs[merc29_heli].id )
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE( vehs[mvf_heli].id )
IF GET_TIME_POSITION_IN_RECORDING( vehs[mvf_heli].id ) > 15000
stop_playback_recorded_vehicle( vehs[mvf_heli].id )
CPRINTLN( DEBUG_MISSION, "UPDATE_HELICOPTER: Helicopter stopping playback, going to heli mission")
iHeliConv = 3
iMercHeliState ++
ENDIF
ENDIF
ENDIF
BREAK
CASE 3
IF isentityalive( vehs[mvf_heli].id )
AND isentityalive( mercs[merc29_heli].id )
IF GET_SCRIPT_TASK_STATUS( mercs[merc29_heli].id, SCRIPT_TASK_VEHICLE_MISSION) > PERFORMING_TASK
OR GET_GAME_TIMER() - iMercHeliTime > 1000
TASK_HELI_MISSION( mercs[merc29_heli].id, vehs[mvf_heli].id, null, null, <<-168.6174, -2454.9380, 34.2428>>, MISSION_GOTO,
40.0, 5, GET_HEADING_FROM_ENTITIES( vehs[mvf_heli].id, frank_ped()), 34, 10, -1, HF_AttainRequestedOrientation )
CPRINTLN( DEBUG_MISSION, "UPDATE_HELICOPTER: Helicopter tasked to combat spot")
iMercHeliState ++
ENDIF
ENDIF
BREAK
CASE 4
IF isentityalive( vehs[mvf_heli].id )
AND isentityalive( mercs[merc29_heli].id )
IF GET_SCRIPT_TASK_STATUS( mercs[merc29_heli].id, SCRIPT_TASK_VEHICLE_MISSION) = PERFORMING_TASK
AND IS_ENTITY_AT_COORD( vehs[mvf_heli].id, <<-168.6174, -2454.9380, 34.2428>>, <<10,10,10>> )
CLEAR_PED_TASKS( mercs[merc29_heli].id )
SET_CURRENT_PED_VEHICLE_WEAPON(mercs[merc29_heli].id, WEAPONTYPE_VEHICLE_PLAYER_BUZZARD)
TASK_HELI_MISSION( mercs[merc29_heli].id, vehs[mvf_heli].id, null, frank_ped(), GET_ENTITY_COORDS(frank_ped()), MISSION_ATTACK,
40.0, 40.0, -1, 36, 10 )
iMercHeliTime = GET_GAME_TIMER()
i_sound_heli_attack = GET_SOUND_ID()
bHeliAttackSoundsOn = FALSE
CPRINTLN( DEBUG_MISSION, "UPDATE_HELICOPTER: Helicopter tasked to attack!")
iMercHeliState ++
ENDIF
ENDIF
BREAK
ENDSWITCH
IF NOT isentityalive( vehs[mvf_heli].id )
OR NOT isentityalive( mercs[merc29_heli].id )
// stop recording only if heli exists
IF DOES_ENTITY_EXIST(vehs[mvf_heli].id)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE( vehs[mvf_heli].id )
stop_playback_recorded_vehicle( vehs[mvf_heli].id )
ENDIF
ENDIF
IF iHeliConv < 7
iHeliConv = 7
ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC MANAGE_HELI_ATTACK_SOUNDS()
IF iMercHeliState <= 4
EXIT
ENDIF
IF isentityalive( vehs[mvf_heli].id )
AND isentityalive( mercs[merc29_heli].id )
IF NOT bHeliAttackSoundsOn
IF IS_PED_SHOOTING(mercs[merc29_heli].id)
IF NOT IS_AUDIO_SCENE_ACTIVE("DH2A_CHOPPER_SHOOTING")
START_AUDIO_SCENE("DH2A_CHOPPER_SHOOTING")
CPRINTLN( DEBUG_MISSION, "DH2A_CHOPPER_SHOOTING turning ON")
ENDIF
IF HAS_SOUND_FINISHED(i_sound_heli_attack)
PLAY_SOUND_FROM_ENTITY(i_sound_heli_attack, "CONDUCTORS_PORT_OF_LS_2A_LOOP", vehs[mvf_heli].id)
CPRINTLN( DEBUG_MISSION, "CONDUCTORS_PORT_OF_LS_2A_LOOP turning ON")
ENDIF
bHeliAttackSoundsOn = TRUE
ENDIF
ELSE
IF NOT IS_PED_SHOOTING(mercs[merc29_heli].id)
IF IS_AUDIO_SCENE_ACTIVE("DH2A_CHOPPER_SHOOTING")
STOP_AUDIO_SCENE("DH2A_CHOPPER_SHOOTING")
CPRINTLN( DEBUG_MISSION, "DH2A_CHOPPER_SHOOTING turning OFF")
ENDIF
IF NOT HAS_SOUND_FINISHED(i_sound_heli_attack)
STOP_SOUND(i_sound_heli_attack)
CPRINTLN( DEBUG_MISSION, "CONDUCTORS_PORT_OF_LS_2A_LOOP turning OFF")
ENDIF
bHeliAttackSoundsOn = FALSE
ENDIF
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("DH2A_CHOPPER_SHOOTING")
STOP_AUDIO_SCENE("DH2A_CHOPPER_SHOOTING")
CPRINTLN( DEBUG_MISSION, "Heli gone: DH2A_CHOPPER_SHOOTING turning OFF")
ENDIF
IF NOT HAS_SOUND_FINISHED(i_sound_heli_attack)
STOP_SOUND(i_sound_heli_attack)
CPRINTLN( DEBUG_MISSION, "Heli gone: CONDUCTORS_PORT_OF_LS_2A_LOOP turning OFF")
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_PLAYER_FIRED_ON_CAR_MERCS( BOOL bCarArrived = FALSE )
INT i
FLOAT fClosestMerc = 1000
MMF_MISSION_MERC_FLAGS startingMerc
IF bCarArrived
startingMerc = merc23_car2
ELSE
startingMerc = merc27_cars
ENDIF
//@RJP check if mercs have been fried upon, and get the merc who should react to the sniper fire
if not bAimAtFranklin
if piAimAtFranklin = NULL
for i = startingMerc TO merc28_cars
if DOES_ENTITY_EXIST(mercs[i].id)
if is_sniper_bullet_in_area(get_offset_from_entity_in_world_coords(mercs[i].id,<<-5,-5,-1>>),get_offset_from_entity_in_world_coords(mercs[i].id,<<5,5,1>>))
or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY( mercs[i].id, PLAYER_PED_ID() )
if isentityalive( mercs[i].id )
if not IS_PED_IN_ANY_VEHICLE( mercs[i].id )
//@RJP merc close to sniper fire will react
CPRINTLN( DEBUG_MISSION, "Merc ", i," should now react to sniper fire." )
piAimAtFranklin = mercs[i].id
endif
else
//@RJP get dead peds position for closest merc to react to
bAimAtFranklin = TRUE
CPRINTLN( DEBUG_MISSION, "Merc ", i," is dead, closest ped should react to sniper fire." )
vDeadMerc = mercs[i].vdef4
endif
endif
else
///@RJP get dead peds position for closest merc to react to, this in case merc has been set as no longer needed
bAimAtFranklin = TRUE
CPRINTLN( DEBUG_MISSION, "Merc ", i," is dead, closest ped should react to sniper fire." )
vDeadMerc = mercs[i].vdef4
endif
endfor
endif
else
//@RJP determine which merc is closest to the dead merc
for i = merc19_car1 TO merc28_cars
if isentityalive( mercs[i].id )
if not IS_PED_IN_ANY_VEHICLE( mercs[i].id )
if GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS( mercs[i].id ), vDeadMerc ) < fClosestMerc
fClosestMerc = GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS( mercs[i].id ), vDeadMerc )
piAimAtFranklin = mercs[i].id
endif
endif
endif
endfor
endif
if (piAimAtFranklin != NULL)
for i = merc19_car1 TO merc28_cars
IF isentityalive( mercs[i].id )
IF NOT IS_PED_IN_ANY_VEHICLE(mercs[i].id, TRUE)
IF NOT bMercSpotterTasked
CLEAR_PED_TASKS( mercs[i].id )
ELIF NOT (i = ENUM_TO_INT(merc24_car2))
CLEAR_PED_TASKS( mercs[i].id )
ENDIF
CPRINTLN(DEBUG_MISSION, "BSW clearing task for ped #", i)
ENDIF
ENDIF
endfor
ADD_PED_FOR_DIALOGUE(convo_struct,8,piAimAtFranklin,"MERRYWEATHER5",true)
iCSDelay = GET_GAME_TIMER()
RETURN TRUE
endif
RETURN FALSE
ENDFUNC
PROC ST_6_WAY_OUT()
//--------------------------------- stage checks ---------------------------------------
Manage_car_crash_stuff()
//---------------------------------- substages ---------------------------------------
//disable controls when sniping in first person
//since the player can now move in first person while sniping
DISABLE_PLAYER_MOVEMENT_FOR_FIRST_PERSON_SNIPING()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
SET_PED_NO_TIME_DELAY_BEFORE_SHOT(PLAYER_PED_ID())
ENDIF
bool bMercsInCarAlive = false // for dialouge of peds shouting up at mike. If all dead dont play. alive ped will set to true
int i
IF NOT isentityalive( vehs[mvf_heli].id )
IF IS_AUDIO_SCENE_ACTIVE("DH2A_CHOPPER_ARRIVES")
CPRINTLN( DEBUG_MISSION, "HELICOPTER DEAD, STOPPING DH2A_CHOPPER_ARRIVES AUDIO SCENE" )
STOP_AUDIO_SCENE("DH2A_CHOPPER_ARRIVES")
ENDIF
ENDIF
SWITCH mission_substage
case STAGE_ENTRY
IF IS_ENTITY_OK(vehs[mvf_dinghy].id)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
#IF IS_DEBUG_BUILD
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_BOAT_ANCHOR() for DINGHY.")
#ENDIF
ENDIF
// bCarCombatStarted = FALSE
bAimAtFranklin = FALSE
bMercSpotterTasked = FALSE
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
piAimAtFranklin = NULL
ADD_PED_FOR_DIALOGUE(convo_struct,3,FRANK_PED(),"FRANKLIN")
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"MICHAEL")
vDeadMerc = <<0,0,0>>
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SHOOTOUT_SNIPING_SCENE")
START_AUDIO_SCENE("DH2A_SHOOTOUT_SNIPING_SCENE")
endif
IF bAimIntro
SET_PLAYER_FORCED_AIM( PLAYER_ID(), TRUE )
SET_PLAYER_FORCE_SKIP_AIM_INTRO( PLAYER_ID(), TRUE )
SET_GAMEPLAY_CAM_RELATIVE_HEADING(get_sniper_rifle_aim_heading_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
SET_GAMEPLAY_CAM_RELATIVE_PITCH(get_sniper_rifle_aim_pitch_for_coord(<<-222.0200, -2375.3955, 14.2843>>))
TASK_AIM_GUN_AT_COORD(PLAYER_PED_ID(), <<-222.0200, -2375.3955, 14.2843>>, 10)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(),TRUE)
SET_FIRST_PERSON_AIM_CAM_ZOOM_FACTOR(7)
DISPLAY_SNIPER_SCOPE_THIS_FRAME()
ENDIF
if IS_REPLAY_IN_PROGRESS()
and bis_zSkip = false
if iMidReplay = 7
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(7,"Stage 6: way out- B escape")
// vehs[mvf_merc2].id = CREATE_VEHICLE(landstalker,<<-200.1866, -2403.9558, 5.0004>>, 111.0261)
vehs[mvf_merc2].id = CREATE_VEHICLE(landstalker,<<-200.3281, -2398.2253, 5.0012>>, 98.1005)
SET_ENTITY_LOD_DIST(vehs[mvf_merc2].id,300)
SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_merc2].id,true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_merc2].id,0)
// vehs[mvf_merc1].id = CREATE_VEHICLE(landstalker,<<-211.9978, -2407.3733, 5.0004>>, 281.4008)
vehs[mvf_merc1].id = CREATE_VEHICLE(landstalker,<<-213.6754, -2399.7925, 5.0012>>, 317.5730)
SET_ENTITY_LOD_DIST(vehs[mvf_merc1].id,300)
SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_merc1].id,true)
SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_merc1].id,0)
bDialoguePlayed = true
mission_substage = 10
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
else
mission_substage++
endif
elif not IS_REPLAY_IN_PROGRESS()
or bis_zSkip
mission_substage++
endif
break
case 1
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(6,"Stage 6: way out- A trucks")
createMercenary(merc27_cars,150,TRUE)
if isentityalive(mercs[merc27_cars].id)
SET_PED_DIES_WHEN_INJURED( mercs[merc27_cars].id, TRUE )
SET_ENTITY_COORDS(mercs[merc27_cars].id,<<-209.39200, -2367.15527, 8.31911>>)
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc27_cars].id,<< -212.01079, -2386.45850, 5.00033 >>,1)
SET_COMBAT_FLOAT(mercs[merc27_cars].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD( null, <<-210.4364, -2378.1077, 8.3191>>, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP )
TASK_AIM_GUN_AT_COORD( null, <<-222.0173, -2376.4438, 12.3329>>, -1 )
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc27_cars].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
createMercenary(merc28_cars,150,TRUE)
if isentityalive(mercs[merc28_cars].id)
SET_PED_DIES_WHEN_INJURED( mercs[merc28_cars].id, TRUE )
SET_ENTITY_COORDS(mercs[merc28_cars].id,<<-209.2853, -2375.9495, 8.3191>>)
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[merc28_cars].id,<< -217.41843, -2391.90576, 5.00033 >>,1)
SET_COMBAT_FLOAT(mercs[merc28_cars].id, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5)
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD( null, <<-230.6206, -2376.1785, 8.3191>>, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP )
TASK_AIM_GUN_AT_COORD( null, <<-222.0173, -2376.4438, 12.3329>>, -1 )
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[merc28_cars].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
iCSDelay = get_game_timer()
mission_substage++
break
case 2
IF IS_SAFE_TO_START_CONVERSATION()
IF bcsalarmtriggered
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_OUT_NS", CONV_PRIORITY_MEDIUM )
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ENDIF
ELSE
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_ALRM", CONV_PRIORITY_MEDIUM )
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ENDIF
ENDIF
ENDIF
break
case 3
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
IF GET_GAME_TIMER() - iCSDelay > 8000
IF UPDATE_MERC_VEH2()
IF NOT bDialoguePlayed2
//convo mike comments on cars
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CLEAR",CONV_PRIORITY_MEDIUM)
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
CPRINTLN( DEBUG_MISSION, "UPDATE_MERC_VEH1: vehicle arrived, setting mission_substage++" )
bDialoguePlayed = FALSE
iCSDelay = get_game_timer()
mission_substage++
ENDIF
ENDIF
IF HAS_PLAYER_FIRED_ON_CAR_MERCS()
CPRINTLN( DEBUG_MISSION, "HAS_PLAYER_FIRED_ON_CAR_MERCS: car not arrived yet, setting mission_substage to 4" )
iCSDelay = GET_GAME_TIMER()
mission_substage = 4
ENDIF
break
case 4
IF HAS_PLAYER_FIRED_ON_CAR_MERCS(TRUE)
CPRINTLN( DEBUG_MISSION, "HAS_PLAYER_FIRED_ON_CAR_MERCS: setting mission_substage++" )
iCSDelay = GET_GAME_TIMER()
mission_substage++
ELIF NOT bMercSpotterTasked
IF GET_GAME_TIMER() - iCSDelay > 10000
if IsEntityAlive(mercs[merc24_car2].id)
OPEN_SEQUENCE_TASK( seq )
TASK_FOLLOW_NAV_MESH_TO_COORD( NULL, <<-208.0867, -2403.1211, 5.0012>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP )
TASK_LOOK_AT_ENTITY( NULL, FRANK_PED(), 100 )
TASK_PAUSE( NULL, 100 )
TASK_AIM_GUN_AT_ENTITY( null, frank_ped(), 2000)
task_play_anim(null,"missheistdocks2a@alert","spot_high",normal_blend_in,NORMAL_BLEND_OUT)
TASK_COMBAT_PED(NULL, FRANK_PED())
CLOSE_SEQUENCE_TASK( seq )
TASK_PERFORM_SEQUENCE( mercs[merc24_car2].id, seq )
CLEAR_SEQUENCE_TASK( seq )
bMercSpotterTasked = TRUE
endif
ENDIF
ELSE
if IsEntityAlive(mercs[merc24_car2].id)
if IS_ENTITY_PLAYING_ANIM( mercs[merc24_car2].id, "missheistdocks2a@alert", "spot_high" )
ADD_PED_FOR_DIALOGUE(convo_struct,8,mercs[merc24_car2].id,"MERRYWEATHER5",true)
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CARS",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "Merc24 animating spotting player: setting mission_substage++" )
piAimAtFranklin = mercs[merc24_car2].id
endif
endif
ENDIF
break
case 5
IF UPDATE_MERC_VEH2(TRUE)
IF NOT bDialoguePlayed2
//convo mike comments on cars
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CLEAR",CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
ENDIF
//@RJP task peds to play anim reacting to sniper fire
for i = merc19_car1 TO merc28_cars
if mercs[i].id = piAimAtFranklin
if not bMercSpotterTasked
if isentityalive( mercs[i].id )
if GET_SCRIPT_TASK_STATUS( mercs[i].id, SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CPRINTLN( DEBUG_MISSION, "Tasking merc to respond to sniper fire." )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef3,2,true)
CLEAR_PED_TASKS( mercs[i].id )
OPEN_SEQUENCE_TASK(seq)
TASK_PAUSE(null, 50)
TASK_AIM_GUN_AT_ENTITY( null, frank_ped(), 2000)
task_play_anim(null,"missheistdocks2a@alert","spot_high",normal_blend_in,NORMAL_BLEND_OUT)
TASK_COMBAT_PED( null, frank_ped())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[i].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
endif
elif not (i = ENUM_TO_INT(merc24_car2))
if isentityalive( mercs[i].id )
if GET_SCRIPT_TASK_STATUS( mercs[i].id, SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CPRINTLN( DEBUG_MISSION, "Tasking merc to respond to sniper fire." )
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef3,2,true)
CLEAR_PED_TASKS( mercs[i].id )
OPEN_SEQUENCE_TASK(seq)
TASK_PAUSE(null, 50)
TASK_AIM_GUN_AT_ENTITY( null, frank_ped(), 2000)
task_play_anim(null,"missheistdocks2a@alert","spot_high",normal_blend_in,NORMAL_BLEND_OUT)
TASK_COMBAT_PED( null, frank_ped())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[i].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
endif
endif
else
if isentityalive( mercs[i].id )
if not IS_PED_IN_ANY_VEHICLE( mercs[i].id )
if GET_SCRIPT_TASK_STATUS( mercs[i].id, SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
SET_PED_SPHERE_DEFENSIVE_AREA(mercs[i].id,mercs[i].vdef3,2,true)
CLEAR_PED_TASKS( mercs[i].id )
OPEN_SEQUENCE_TASK(seq)
TASK_PAUSE(null, GET_RANDOM_INT_IN_RANGE(100,1000))
TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<<GET_RANDOM_INT_IN_RANGE(-100,100),0.0,0.0>>, GET_RANDOM_INT_IN_RANGE(500,1000) )
TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<<GET_RANDOM_INT_IN_RANGE(-100,100),0.0,0.0>>, GET_RANDOM_INT_IN_RANGE(500,1000) )
TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<<GET_RANDOM_INT_IN_RANGE(-100,100),0.0,0.0>>, GET_RANDOM_INT_IN_RANGE(500,1000) )
TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<<GET_RANDOM_INT_IN_RANGE(-100,100),0.0,0.0>>, GET_RANDOM_INT_IN_RANGE(500,1000) )
TASK_AIM_GUN_AT_ENTITY( null, frank_ped(), GET_RANDOM_INT_IN_RANGE(500,1000) )
TASK_COMBAT_PED( null, frank_ped())
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mercs[i].id,seq)
CLEAR_SEQUENCE_TASK(seq)
endif
endif
endif
endif
endfor
if GET_GAME_TIMER() - iCSDelay > 3500
CPRINTLN( DEBUG_MISSION, "Merc playing anim, advancing mission_substage to 5." )
mission_substage++
endif
break
case 6
IF UPDATE_MERC_VEH2(TRUE)
IF NOT bDialoguePlayed2
//convo mike comments on cars
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CLEAR",CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
ENDIF
IF NOT ((piAimAtFranklin = mercs[merc24_car2].id) AND bMercSpotterTasked)
if IS_SAFE_TO_START_CONVERSATION()
//god text
bMercsInCarAlive = false
for i = enum_to_int(merc19_car1) to ENUM_TO_INT(merc26_car2)
if IsEntityAlive(mercs[i].id)
bMercsInCarAlive = true
endif
endfor
if bMercsInCarAlive
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CARS",CONV_PRIORITY_MEDIUM)
endif
bDialoguePlayed = false
mission_substage++
endif
ELSE
bDialoguePlayed = false
mission_substage++
ENDIF
break
case 7
IF UPDATE_MERC_VEH2(TRUE)
IF NOT bDialoguePlayed2
//convo mike comments on cars
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CLEAR",CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
//@RJP handle mercs advancing in cover
for i = enum_to_int(merc19_car1) to ENUM_TO_INT(merc28_cars)
MANAGE_CAR_MERC_COMBAT( i )
endfor
ENDIF
IF GET_GAME_TIMER() - iCSDelay > 10000
IF UPDATE_MERC_VEH1(TRUE)
iCSDelay = GET_GAME_TIMER()
mission_substage++
ENDIF
ENDIF
break
case 8
if not bDialoguePlayed
and IS_SAFE_TO_START_CONVERSATION()
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"Michael")
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_PLANT",CONV_PRIORITY_MEDIUM)
bDialoguePlayed = true
endif
endif
IF UPDATE_MERC_VEH2(TRUE)
IF NOT bDialoguePlayed2
//convo mike comments on cars
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CLEAR",CONV_PRIORITY_MEDIUM)
bDialoguePlayed2 = TRUE
ENDIF
//@RJP handle mercs advancing in cover
for i = enum_to_int(merc19_car1) to ENUM_TO_INT(merc28_cars)
MANAGE_CAR_MERC_COMBAT( i )
endfor
ENDIF
IF HELI_CONV_MANAGER()
bHeliConv = TRUE
ENDIF
MANAGE_HELI_ATTACK_SOUNDS()
IF GET_GAME_TIMER() - iCSDelay > 10000
IF UPDATE_HELICOPTER()
AND bHeliConv
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
mission_substage++
ENDIF
ENDIF
BREAK
case 9
bool bCarMercsAlive
bCarMercsAlive = FALSE
MANAGE_HELI_ATTACK_SOUNDS()
for i = enum_to_int(merc19_car1) to ENUM_TO_INT(merc28_cars)
if IsEntityAlive(mercs[i].id)
bCarMercsAlive = TRUE
//@RJP handle mercs advancing in cover
MANAGE_CAR_MERC_COMBAT( i )
endif
endfor
if not bCarMercsAlive
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_4GO", CONV_PRIORITY_MEDIUM )
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(7,"Stage 6: way out- B escape")
mission_substage++
ENDIF
ENDIF
else
IF NOT bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_CLEAR2", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
endif
break
case 10
//mike
if CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id,CHAR_MICHAEL,<< -220.8900, -2369.9204, 24.3350 >>, 111.7760)
SET_PED_HEATSCALE_OVERRIDE( mike_ped(), 0 )
SET_RAGDOLL_BLOCKING_FLAGS(mike_ped(),RBF_BULLET_IMPACT)
SET_ENTITY_VISIBLE( mike_ped(), FALSE )
set_ped_suffers_critical_hits(mike_ped(),false)
set_ped_combat_attributes(mike_ped(), ca_use_cover,true)
set_ped_combat_attributes(mike_ped(), ca_can_shoot_without_los ,true)
// set_ped_combat_ability(mike_ped(), cal_professional)
SET_PED_ACCURACY( mike_ped(), 15 )
set_ped_combat_movement(mike_ped(), CM_DEFENSIVE)
set_ped_combat_range(mike_ped(),CR_far)
SET_ENTITY_HEALTH(MIKE_PED(),1500)
GIVE_WEAPON_TO_PED(MIKE_PED(),wtEnemyWpn,INFINITE_AMMO,true,true)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_PED(),rel_group_buddy)
SET_ENTITY_LOAD_COLLISION_FLAG(PEDS[MPF_MIKE].ID,TRUE)
SET_PED_DIES_IN_WATER( PEDS[MPF_MIKE].ID,FALSE )
IF IS_ENTITY_OK(PEDS[MPF_MIKE].ID)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( PEDS[MPF_MIKE].ID, TRUE )
ENDIF
SCUBA_SUITE_UP(MIKE_PED(), FALSE, FALSE)
ADD_PED_FOR_DIALOGUE(convo_struct,1,peds[mpf_mike].id,"Michael")
iCSDelay = get_game_timer()
bfirstaim = false
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
mission_substage++
endif
break
case 11
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_H1",CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 8.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ENDIF
ENDIF
break
case 12
if get_game_timer() - iCSDelay > 5000
trigger_music_event("DH2A_CHOPPER_DEAD")
bDialoguePlayed = false
iescapeStage = 0
mission_substage++
endif
break
case 13
MIKE_WAY_OUT_CONV_MANAGER()
if MIKE_way_out()
mission_substage++
endif
break
case 14
MIKE_WAY_OUT_CONV_MANAGER()
if IS_ENTITY_AT_COORD(MIKE_PED(),<< -210.2508, -2357.4490, 8.5070 >>,<<3,3,2>>)
or IS_PED_SWIMMING(MIKE_PED())
SET_SEETHROUGH(FALSE)
b_nightvision_active = FALSE
for i = enum_to_int(merc1_start) to enum_to_int(merc26_car2)
if DOES_ENTITY_EXIST(mercs[i].id)
DELETE_ped(mercs[i].id)
endif
endfor
//cam
set_current_ped_weapon(MIKE_PED(),WEAPONTYPE_UNARMED,true)
cameraIndex = CREATE_CAMERA( CAMTYPE_ANIMATED, TRUE )
SET_CAM_ACTIVE(cameraIndex, true)
PLAY_CAM_ANIM( cameraIndex, "michael_jumpsoff_boat_cam", "missheistdocks2a", <<-206.703, -2354.962, 8.354>>, <<0,0,0>> )
START_AUDIO_SCENE( "DH2A_MICHAEL_DASH_AND_DIVE" )
Prep_start_Cutscene(false,<<-206.703, -2354.962, 8.354>>)
iCSDelay = get_game_timer()
// SET_PLAYER_FORCE_SKIP_AIM_INTRO(PLAYER_ID(), false)
SET_PLAYER_FORCED_AIM(PLAYER_ID(), false)
IF isentityalive(frank_ped())
TASK_AIM_GUN_AT_COORD( frank_ped(), <<-209.3837, -2352.4211, 8.3192>>, -1 )
ENDIF
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
bDialoguePlayed = FALSE
mission_substage++
endif
break
case 15
IF GET_CAM_ANIM_CURRENT_PHASE( cameraIndex ) > 0.99
OR is_control_just_pressed(frontend_control,INPUT_SKIP_CUTSCENE)
IF isentityalive(frank_ped())
CLEAR_PED_TASKS(frank_ped())
SET_PLAYER_FORCED_AIM(PLAYER_ID(), false)
ENDIF
TRIGGER_MUSIC_EVENT("DH2A_FRANK_JUMPS")
if is_audio_scene_active("dh2a_shootout_sniping_scene")
stop_audio_scene("dh2a_shootout_sniping_scene")
endif
if is_audio_scene_active("DH2A_MICHAEL_DASH_AND_DIVE")
stop_audio_scene("DH2A_MICHAEL_DASH_AND_DIVE")
endif
REPLAY_STOP_EVENT()
Prep_stop_Cutscene(true)
Scuba_suite_up(MIKE_PED(),true)
bDialoguePlayed = FALSE
mission_substage++
ELIF GET_CAM_ANIM_CURRENT_PHASE( cameraIndex ) > 0.7
IF NOT bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_DIVE", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
endif
break
case 16
// do_stream_vol(false)
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2a")
Mission_Set_Stage(msf_7_detonate)
Mission_substage = STAGE_ENTRY
break
endswitch
ENDPROC
PROC ST_7_DETONATE()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1"),-165.34,-2350.03,0)
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
ELSE
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
SET_RADAR_ZOOM_PRECISE(75)
ENDIF
if mission_substage < 2
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
endif
SWITCH mission_substage
case STAGE_ENTRY
STOP_AUDIO_SCENES()
if not IS_AUDIO_SCENE_ACTIVE("DH2A_PREPARE_DETONATION")
START_AUDIO_SCENE("DH2A_PREPARE_DETONATION")
endif
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
REMOVE_BLIP(peds[mpf_mike].blip)
endif
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(8,"Stage 7: detonate")
ADD_PED_FOR_DIALOGUE(convo_struct,3,FRANK_PED(),"FRANKLIN")
ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"MICHAEL")
// add detonate contact to phone
ADD_CONTACT_TO_PHONEBOOK(CHAR_DETONATEBOMB, FRANKLIN_BOOK, FALSE)
MAKE_CONTACT_ENTRY_PRIORITY(CHAR_DETONATEBOMB)
request_cutscene("lsdh_2a_rf_01")
mission_substage++
break
case 1
IF LOAD_STREAM("PORT_OF_LS_SHIP_BLOW_UP_MASTER")
mission_substage++
endif
break
case 2
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_07",CONV_PRIORITY_MEDIUM)
bPrintDisplayed = FALSE
mission_substage++
endif
break
case 3
IF IS_CONTACTS_LIST_ON_SCREEN()
FORCE_SELECTION_OF_THIS_CONTACT_ONLY(CHAR_DETONATEBOMB)
ENDIF
IF IS_CALLING_CONTACT(CHAR_DETONATEBOMB)
IF isentityalive( vehs[mvf_dinghy].id )
set_entity_coords(vehs[mvf_dinghy].id,<<-80.2056, -2288.2832,0>>)
set_entity_heading(vehs[mvf_dinghy].id,21)
SET_BOAT_ANCHOR( vehs[mvf_dinghy].id, TRUE )
ENDIF
IF isentityalive( mike_ped() )
set_entity_coords(mike_ped(),<<-90.4927, -2288.0029, -1.3081>>)
set_entity_heading(mike_ped(),130.4705)
ENDIF
TRIGGER_MUSIC_EVENT("DH2A_DETONATE")
SET_PLAYER_CONTROL(PLAYER_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
iCSDelay = GET_GAME_TIMER()
CLEAR_HELP()
CLEAR_PRINTS()
bDialoguePlayed = FALSE
mission_Substage++
endif
IF NOT bPrintDisplayed
if IS_SAFE_TO_DISPLAY_GODTEXT()
PRINT_NOW("DCKH_DETONATE",DEFAULT_GOD_TEXT_TIME,1)
PRINT_HELP("DCKH_BOMBH")
iCSDelay = GET_GAME_TIMER()+10000
bDialoguePlayed = FALSE
bPrintDisplayed = TRUE
endif
ELIF NOT bDialoguePlayed
IF GET_GAME_TIMER() > iCSDelay
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION( convo_struct, "D2AAUD", "DH2A_NOBLO", CONV_PRIORITY_MEDIUM )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
break
case 4
if get_game_timer() - iCSDelay > 1000
mission_substage = STAGE_EXIT
endif
break
case STAGE_EXIT
INT i
balarmtriggered = false
bcsalarmtriggered = false
REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(CHAR_DETONATEBOMB,FRANKLIN_BOOK)
unLoad_Asset_Waypoint(sAssetData,"docksheist2A01")
unLoad_Asset_Waypoint(sAssetData,"docksheist2A02")
unLoad_Asset_Waypoint(sAssetData,"docksheist2A03")
unLoad_Asset_Recording(sAssetData,001,"DH2AREC")
unLoad_Asset_Recording(sAssetData,002,"DH2AREC")
unLoad_Asset_Recording(sAssetData,003,"DH2AREC")
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2a@crouch")
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2a@alert")
Unload_Asset_Model(sAssetData,PROP_CRATEPILE_07A)
Unload_Asset_Model(sAssetData,PROP_MIL_CRATE_02)
Unload_Asset_Model(sAssetData,landstalker)
Unload_Asset_Model(sAssetData,BUZZARD)
REPEAT COUNT_OF(objBomb) i
if does_entity_exist(objBomb[i])
delete_object(objBomb[i])
endif
ENDREPEAT
//Remove health pickups
DELETE_HEALTH_PICKUPS()
mission_Set_Stage(msf_8_explosion_ctscne)
break
endswitch
//@RJP going to the pause menu while the contact list is up here would cause the script to break, this fixes that
IF NOT IS_PAUSE_MENU_ACTIVE()
if IS_CONTACTS_LIST_ON_SCREEN()
if not IS_AUDIO_SCENE_ACTIVE("DH_2A_DETONATE_BOMBS")
START_AUDIO_SCENE("DH_2A_DETONATE_BOMBS")
endif
else
if IS_AUDIO_SCENE_ACTIVE("DH_2A_DETONATE_BOMBS")
STOP_AUDIO_SCENE("DH_2A_DETONATE_BOMBS")
endif
endif
ENDIF
ENDPROC
INT iWaterModState
PROC HANDLE_WATER_MOD()
INT i
SWITCH iWaterModState
CASE 0
if GET_CUTSCENE_TIME() > 13250
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 13000
FOR i = -86 TO -246 STEP -10
MODIFY_WATER( TO_FLOAT(i), -2347.0, 4.0, 0.5)
ENDFOR
endif
BREAK
CASE 1
if GET_CUTSCENE_TIME() > 15250
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 15000
FOR i = -81 TO -241 STEP -10
MODIFY_WATER( TO_FLOAT(i), -2345.0, 4.0, 0.5)
ENDFOR
endif
BREAK
CASE 2
if GET_CUTSCENE_TIME() > 19000
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 18700
MODIFY_WATER( -132, -2338.0, 4.0, 0.5)
MODIFY_WATER( -137, -2338.0, 4.0, 0.5)
MODIFY_WATER( -142, -2338.0, 4.0, 0.5)
MODIFY_WATER( -148, -2338.0, 4.0, 0.5)
MODIFY_WATER( -160, -2338.0, 4.0, 0.5)
endif
BREAK
CASE 3
if GET_CUTSCENE_TIME() > 19400
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 19200
MODIFY_WATER( -122, -2342.0, 5.0, 0.5)
MODIFY_WATER( -134, -2344.0, 5.0, 0.5)
MODIFY_WATER( -143, -2344.0, 5.0, 0.5)
MODIFY_WATER( -148, -2338.0, 5.0, 0.5)
MODIFY_WATER( -160, -2338.0, 5.0, 0.5)
endif
BREAK
CASE 4
if GET_CUTSCENE_TIME() > 20666
CPRINTLN(DEBUG_MISSION, "going in to explosion timecycle")
SET_TRANSITION_TIMECYCLE_MODIFIER("ship_explosion_underwater", 0.2)
iWaterModState++
endif
BREAK
CASE 5
if GET_CUTSCENE_TIME() > 21666
AND GET_TIMECYCLE_MODIFIER_INDEX() <> -1
CPRINTLN(DEBUG_MISSION, "clearing explosion timecycle")
SET_TRANSITION_OUT_OF_TIMECYCLE_MODIFIER(0.2)
iWaterModState++
endif
BREAK
CASE 6
if GET_CUTSCENE_TIME() > 22166
AND GET_TIMECYCLE_MODIFIER_INDEX() = -1
CPRINTLN(DEBUG_MISSION, "setting explosion timecycle")
SET_TRANSITION_TIMECYCLE_MODIFIER("ship_explosion_underwater", 0.2)
iWaterModState++
endif
BREAK
CASE 7
if GET_CUTSCENE_TIME() > 22666
AND GET_TIMECYCLE_MODIFIER_INDEX() <> -1
CPRINTLN(DEBUG_MISSION, "clearing explosion timecycle")
SET_TRANSITION_OUT_OF_TIMECYCLE_MODIFIER(0.2)
iWaterModState++
endif
BREAK
CASE 8
if GET_CUTSCENE_TIME() > 23000
AND GET_TIMECYCLE_MODIFIER_INDEX() = -1
CPRINTLN(DEBUG_MISSION, "setting explosion timecycle")
SET_TRANSITION_TIMECYCLE_MODIFIER("ship_explosion_underwater", 0.2)
iWaterModState++
endif
BREAK
CASE 9
if GET_CUTSCENE_TIME() > 23500
AND GET_TIMECYCLE_MODIFIER_INDEX() <> -1
CPRINTLN(DEBUG_MISSION, "clearing explosion timecycle")
SET_TRANSITION_OUT_OF_TIMECYCLE_MODIFIER(0.2)
iWaterModState++
endif
BREAK
CASE 10
if GET_CUTSCENE_TIME() > 24000
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 23500
MODIFY_WATER( -105, -2340.0, 5.0, 0.5)
MODIFY_WATER( -109, -2341.0, 5.0, 0.5)
MODIFY_WATER( -114, -2341.0, 5.0, 0.5)
MODIFY_WATER( -119, -2341.0, 5.0, 0.5)
MODIFY_WATER( -126, -2344.0, 5.0, 0.5)
MODIFY_WATER( -127, -2345.0, 5.0, 0.5)
MODIFY_WATER( -132, -2345.0, 5.0, 0.5)
MODIFY_WATER( -132, -2340.0, 5.0, 0.5)
MODIFY_WATER( -132, -2335.0, 5.0, 0.5)
MODIFY_WATER( -137, -2335.0, 5.0, 0.5)
MODIFY_WATER( -142, -2335.0, 5.0, 0.5)
MODIFY_WATER( -148, -2346.0, 5.0, 0.5)
MODIFY_WATER( -148, -2341.0, 5.0, 0.5)
MODIFY_WATER( -148, -2336.0, 5.0, 0.5)
MODIFY_WATER( -148, -2331.0, 5.0, 0.5)
MODIFY_WATER( -151, -2329.5, 3.0, 0.5)
MODIFY_WATER( -153, -2331.0, 5.0, 0.5)
MODIFY_WATER( -157, -2329.5, 3.0, 0.5)
MODIFY_WATER( -160, -2331.0, 5.0, 0.5)
MODIFY_WATER( -168, -2339.0, 5.0, 0.5)
MODIFY_WATER( -173, -2339.0, 5.0, 0.5)
MODIFY_WATER( -178, -2339.0, 5.0, 0.5)
MODIFY_WATER( -186, -2342.0, 5.0, 0.5)
MODIFY_WATER( -194, -2339.0, 5.0, 0.5)
MODIFY_WATER( -199, -2339.0, 5.0, 0.5)
MODIFY_WATER( -204, -2339.0, 5.0, 0.5)
MODIFY_WATER( -213, -2341.0, 5.0, 0.5)
MODIFY_WATER( -214, -2335.0, 5.0, 0.5)
MODIFY_WATER( -219, -2335.0, 5.0, 0.5)
MODIFY_WATER( -224, -2335.0, 5.0, 0.5)
MODIFY_WATER( -229, -2335.0, 5.0, 0.5)
MODIFY_WATER( -172, -2339.0, 5.0, 0.5)
MODIFY_WATER( -167, -2339.0, 5.0, 0.5)
MODIFY_WATER( -162, -2339.0, 5.0, 0.5)
endif
BREAK
CASE 11
if GET_CUTSCENE_TIME() > 25500
CPRINTLN(DEBUG_MISSION, "ADVANCING iWaterModState")
iWaterModState++
elif GET_CUTSCENE_TIME() > 24800
MODIFY_WATER( -124, -2319.0, 5.0, 0.5)
MODIFY_WATER( -126, -2343.0, 5.0, 0.5)
MODIFY_WATER( -132, -2344.0, 5.0, 0.5)
MODIFY_WATER( -132, -2339.0, 5.0, 0.5)
MODIFY_WATER( -133, -2333.0, 5.0, 0.5)
MODIFY_WATER( -137, -2333.0, 5.0, 0.5)
MODIFY_WATER( -142, -2333.0, 5.0, 0.5)
MODIFY_WATER( -145, -2343.0, 5.0, 0.5)
MODIFY_WATER( -148, -2346.0, 5.0, 0.5)
MODIFY_WATER( -148, -2342.0, 5.0, 0.5)
MODIFY_WATER( -148, -2337.0, 5.0, 0.5)
MODIFY_WATER( -148, -2332.0, 5.0, 0.5)
MODIFY_WATER( -152, -2332.0, 5.0, 0.5)
MODIFY_WATER( -156, -2332.0, 5.0, 0.5)
MODIFY_WATER( -160, -2332.0, 5.0, 0.5)
MODIFY_WATER( -162, -2343.0, 5.0, 0.5)
MODIFY_WATER( -165, -2345.0, 5.0, 0.5)
MODIFY_WATER( -168, -2338.0, 5.0, 0.5)
MODIFY_WATER( -173, -2338.0, 5.0, 0.5)
MODIFY_WATER( -178, -2338.0, 5.0, 0.5)
MODIFY_WATER( -179, -2345.0, 5.0, 0.5)
MODIFY_WATER( -187, -2344.0, 5.0, 0.5)
MODIFY_WATER( -186, -2342.0, 5.0, 0.5)
MODIFY_WATER( -180, -2346.0, 5.0, 0.5)
MODIFY_WATER( -185, -2346.0, 5.0, 0.5)
MODIFY_WATER( -194, -2345.0, 5.0, 0.5)
MODIFY_WATER( -194, -2340.0, 5.0, 0.5)
MODIFY_WATER( -199, -2340.0, 5.0, 0.5)
MODIFY_WATER( -204, -2340.0, 5.0, 0.5)
MODIFY_WATER( -213, -2341.0, 5.0, 0.5)
MODIFY_WATER( -214, -2346.0, 5.0, 0.5)
MODIFY_WATER( -214, -2333.0, 5.0, 0.5)
MODIFY_WATER( -219, -2333.0, 5.0, 0.5)
MODIFY_WATER( -224, -2333.0, 5.0, 0.5)
MODIFY_WATER( -229, -2333.0, 5.0, 0.5)
endif
BREAK
ENDSWITCH
ENDPROC
BOOL bCutsceneSkipped
CAMERA_INDEX ScriptedCamera
PROC ST_8_EXPLOSION_CUTSCENE()
SWITCH mission_substage
case STAGE_ENTRY
DISPLAY_RADAR(FALSE)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(9,"Stage 8: explosion cutscene")
IF isentityalive(mike_ped())
CPRINTLN( DEBUG_MISSION, "SETTING MIKE COORDS" )
Scuba_suite_up(MIKE_PED(),true)
set_entity_coords( mike_ped(), <<-180,-2320,0>> )
IF isentityalive( vehs[mvf_dinghy].id )
SET_BOAT_ANCHOR(vehs[mvf_dinghy].id,TRUE)
SET_BOAT_REMAINS_ANCHORED_WHILE_PLAYER_IS_DRIVER(vehs[mvf_dinghy].id,TRUE)
// SET_PED_INTO_VEHICLE(mike_ped(),vehs[mvf_dinghy].id)
SET_ENTITY_VISIBLE( vehs[mvf_dinghy].id, FALSE )
ENDIF
SET_ENTITY_VISIBLE( mike_ped(), FALSE)
SET_FOCUS_ENTITY( mike_ped() )
ENDIF
WATER_OVERRIDE_SET_SHOREWAVEAMPLITUDE(0)
WATER_OVERRIDE_SET_SHOREWAVEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_SHOREWAVEMAXAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANNOISEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEMAXAMPLITUDE(0)
WATER_OVERRIDE_SET_RIPPLEBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEMINBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEMAXBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEDISTURB(0)
WATER_OVERRIDE_SET_STRENGTH(0.1)
iWaterModState = 0
mission_substage++
break
case 1
//start rayfire
//rayfire
if HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
SETTIMERA(0)
HANG_UP_AND_PUT_AWAY_PHONE()
IF isentityalive(mike_ped())
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = peds[mpf_mike].id
SET_SELECTOR_PED_BLOCKED(SSELECTORPEDS,SELECTOR_PED_MICHAEL,FALSE)
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds,SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds,TRUE,TRUE)
SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(frank_ped())
ENDIF
ENDIF
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
SET_CUTSCENE_ORIGIN(<<8.885, -2526.579, 5.046>>,0,0)
STOP_AUDIO_SCENES()
if not IS_AUDIO_SCENE_ACTIVE("DH2A_RAYFIRE")
START_AUDIO_SCENE("DH2A_RAYFIRE")
endif
PLAY_STREAM_FRONTEND()
bHotSwap = false
bCutsceneSkipped = FALSE
mission_substage++
endif
break
case 2
if IS_CUTSCENE_ACTIVE()
load_asset_model(sAssetData,SUBMERSIBLE)
Load_Asset_Model(sAssetData,Prop_Military_Pickup_01)
request_ptfx_asset()
Load_Asset_Model(sAssetData,Prop_Flare_01)
load_asset_animdict(sAssetData,"missheistdocks2aswitchig_8")
load_asset_animdict(sAssetData,"swimming@scuba")
//@RJP delete cover objects and vehicles at this point to free up memory
IF DOES_ENTITY_EXIST(objcov1)
DELETE_OBJECT(objcov1)
ENDIF
IF DOES_ENTITY_EXIST(objcov2)
DELETE_OBJECT(objcov2)
ENDIF
IF DOES_ENTITY_EXIST(objcov3)
DELETE_OBJECT(objcov3)
ENDIF
IF DOES_ENTITY_EXIST(objcov4)
DELETE_OBJECT(objcov4)
ENDIF
IF DOES_ENTITY_EXIST(objcov5)
DELETE_OBJECT(objcov5)
ENDIF
IF DOES_ENTITY_EXIST(VEHS[mvf_parked1].id)
DELETE_VEHICLE(VEHS[mvf_parked1].id)
ENDIF
IF DOES_ENTITY_EXIST(VEHS[mvf_parked2].id)
DELETE_VEHICLE(VEHS[mvf_parked2].id)
ENDIF
IF DOES_ENTITY_EXIST(VEHS[mvf_merc1].id)
DELETE_VEHICLE(VEHS[mvf_merc1].id)
ENDIF
IF DOES_ENTITY_EXIST(VEHS[mvf_merc2].id)
DELETE_VEHICLE(VEHS[mvf_merc2].id)
ENDIF
SET_SRL_POST_CUTSCENE_CAMERA(<<-75.1, -2286.4, 2.1>>, <<3.1, -0.0, 132.1>>)
SET_ENTITY_VISIBLE( mike_ped(), FALSE )
IF DOES_CAM_EXIST(camera_a)
DESTROY_CAM(camera_a)
ENDIF
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
mission_substage++
endif
break
case 3
IF NOT bCanSkip
IF HAS_MODEL_LOADED( SUBMERSIBLE )
AND HAS_MODEL_LOADED( Prop_Military_Pickup_01 )
AND HAS_MODEL_LOADED( Prop_Flare_01 )
AND HAS_ANIM_DICT_LOADED( "missheistdocks2aswitchig_8" )
AND HAS_ANIM_DICT_LOADED( "swimming@scuba" )
AND HAS_PTFX_ASSET_LOADED()
CPRINTLN( DEBUG_MISSION, "!!!PLAYER CAN SKIP DETONATION CUTSCENE NOW!!!" )
bCanSkip = TRUE
SET_CUTSCENE_CAN_BE_SKIPPED(TRUE)
ELSE
SET_CUTSCENE_CAN_BE_SKIPPED(FALSE)
ENDIF
ENDIF
IF IS_CUTSCENE_PLAYING()
if not bDialoguePlayed
if GET_CUTSCENE_TIME() > 17500
TRIGGER_MUSIC_EVENT("DH2A_FINAL_EXP")
bDialoguePlayed = TRUE
endif
endif
IF GET_CUTSCENE_TIME() > 22300
REQUEST_IPL( "SUNK_SHIP_FIRE" )
ENDIF
IF NOT bSwitchOccluders
IF GET_CUTSCENE_TIME() > 21000
set_building_state( BUILDINGNAME_IPL_CARGOSHIP_OCCLUSION, BUILDINGSTATE_DESTROYED )
bSwitchOccluders = true
CPRINTLN( DEBUG_MISSION, "DETONATE CUTSCENE: Swapping ship occluders to destroyed state" )
ENDIF
ENDIF
//match last cutscene shot with scripted camera and render from it after cutscene ends
IF NOT DOES_CAM_EXIST(ScriptedCamera)
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
//SET_CAM_PARAMS(ScriptedCamera, <<-121.454781,-2298.167480,20.978750>>,<<-19.987669,0.997791,133.803146>>,40.000000)
SET_CAM_PARAMS(ScriptedCamera,<<-122.356133,-2297.994629,21.029718>>,<<-19.659889,1.225318,134.042130>>,40.000000)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
HANDLE_WATER_MOD()
ENDIF
IF NOT DOES_RAYFIRE_MAP_OBJECT_EXIST(rayfire_ship)
CPRINTLN(DEBUG_MISSION, "RJM - Getting rayfire object of the boat")
rayfire_ship = GET_RAYFIRE_MAP_OBJECT(<<-159.7051, -2374.3184, 5.0459>>, 50.0, "des_shipsink")
ENDIF
IF HAS_CUTSCENE_FINISHED()
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
//while rendering from scripted camera matching last cutscene shot, wait for end rayfire end state and start synched scene
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rayfire_ship) AND GET_STATE_OF_RAYFIRE_MAP_OBJECT(rayfire_ship) = RFMO_STATE_END
IF isentityalive( vehs[mvf_dinghy].id )
AND isentityalive( mike_ped() )
set_entity_coords(vehs[mvf_dinghy].id,<<-78.1857, -2287.6528, 0.0>>)
set_entity_heading(vehs[mvf_dinghy].id, 56.7927)
SET_ENTITY_VISIBLE( vehs[mvf_dinghy].id, TRUE )
SET_ENTITY_VISIBLE( mike_ped(), TRUE )
SET_PED_INTO_VEHICLE( mike_ped(), vehs[mvf_dinghy].id )
//SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
SET_BOAT_REMAINS_ANCHORED_WHILE_PLAYER_IS_DRIVER(vehs[mvf_dinghy].id,TRUE)
SET_BOAT_ANCHOR(vehs[mvf_dinghy].id,TRUE)
ENDIF
IF ( bCutsceneSkipped = TRUE )
CLEAR_TIMECYCLE_MODIFIER()
STOP_FIRE_IN_RANGE(<<-78.1857, -2287.6528, 0.0>>, 1000.0)
REMOVE_DECALS_IN_RANGE(<<-78.1857, -2287.6528, 0.0>>, 1000.0)
REMOVE_PARTICLE_FX_IN_RANGE(<<-78.1857, -2287.6528, 0.0>>, 1000.0)
ENDIF
IF HAS_ANIM_DICT_LOADED( "missheistdocks2aswitchig_8" )
IF NOT DOES_CAM_EXIST(camera_a)
CPRINTLN( DEBUG_MISSION, "CAM A DOES NOT EXIT: STARTING SYNC SCENE 1" )
camera_a = CREATE_CAM_WITH_PARAMS( "default_scripted_camera", <<-75.1, -2286.4, 1.5>>, <<3.1, -0.0, 132.1>>, 50 )
set_cam_active(camera_a, true)
render_script_cams(true, false)
if isentityalive( vehs[mvf_dinghy].id )
ATTACH_CAM_TO_ENTITY( camera_a, vehs[mvf_dinghy].id, << 3.6348, -1.745, 1.15 >> )
endif
players_scene_id = CREATE_SYNCHRONIZED_SCENE(<<0,0,0>>, <<0,0,0>>)
task_synchronized_scene(player_ped_id(), players_scene_id, "missheistdocks2aswitchig_8", "ig_8_switch", instant_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(players_scene_id, vehs[mvf_dinghy].id, 0)
SET_SYNCHRONIZED_SCENE_PHASE( players_scene_id, 0.35 )
PLAY_SOUND_FROM_ENTITY(-1,"BODY_FALL_DIVE_WATER_MASTER",player_ped_id(),"docks_heist_finale_2a_sounds")
ENDIF
ENDIF
PLAY_SOUND_FROM_ENTITY(-1,"BODY_FALL_DIVE_WATER_MASTER",player_ped_id(),"docks_heist_finale_2a_sounds")
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) != CAM_VIEW_MODE_FIRST_PERSON
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
ANIMPOSTFX_PLAY("SwitchSceneMichael", 1000, FALSE)
ENDIF
ENDIF
ELSE
CLEAR_FOCUS()
STOP_STREAM()
REQUEST_IPL( "SUNK_SHIP_FIRE" )
if IS_AUDIO_SCENE_ACTIVE("DH2A_RAYFIRE")
STOP_AUDIO_SCENE("DH2A_RAYFIRE")
endif
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SWIM_TO_CONTAINER")
STOP_AUDIO_SCENES()
START_AUDIO_SCENE("DH2A_SWIM_TO_CONTAINER")
endif
int i
for i = 0 to enum_to_int(MMF_NUM_OF_MERCS)-1
if DOES_ENTITY_EXIST(mercs[i].id)
DELETE_PED(mercs[i].id)
endif
endfor
bHotSwap = false
DISPLAY_RADAR(TRUE)
SET_PLAYER_CONTROL(PLAYER_id(),true)
manage_ipls(BUILDINGSTATE_DESTROYED)
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
REPLAY_STOP_EVENT()
mission_substage++
ENDIF
ELSE
IF ( bCutsceneSkipped = FALSE )
IF WAS_CUTSCENE_SKIPPED()
STOP_STREAM()
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE)
bCutsceneSkipped = TRUE
ENDIF
ENDIF
ENDIF
break
case 4
REPLAY_STOP_EVENT()
bCanSkip = FALSE
mission_set_Stage(msf_9_the_goods)
mission_substage = STAGE_ENTRY
break
endswitch
ENDPROC
FUNC BOOL CREATE_CORPSE(MMF_MISSION_MERC_FLAGS merc)
VECTOR vCorpseSpawnPos
IF PLAYER_PED_ID() = mike_ped()
vCorpseSpawnPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS( PLAYER_PED_ID(), <<GET_RANDOM_FLOAT_IN_RANGE(-2,2),8,3>> )
ELSE
vCorpseSpawnPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS( PLAYER_PED_ID(), <<GET_RANDOM_FLOAT_IN_RANGE(-3,3),12,6>> )
ENDIF
IF NOT WOULD_ENTITY_BE_OCCLUDED(S_M_Y_BLACKOPS_01, vCorpseSpawnPos)
RETURN FALSE
ENDIF
CPRINTLN( DEBUG_MISSION, "CORPSE_HANDLER: Creating corpse at", vCorpseSpawnPos )
createmercenary(merc)
SET_ENTITY_HEALTH(mercs[merc].id,0)
SET_ENTITY_COORDS(mercs[merc].id,vCorpseSpawnPos)
SET_ENTITY_HEADING(mercs[merc].id,GET_RANDOM_FLOAT_IN_RANGE(0,360))
RETURN TRUE
ENDFUNC
PROC CORPSE_HANDLER()
IF NOT IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-231.434326,-2319.805664,-42.960861>>, <<-99.622238,-2323.623047,8.504173>>, 40.000000)
EXIT
ENDIF
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF PLAYER_PED_ID() = mike_ped()
IF vPlayerPos.z > -5
EXIT
ENDIF
ELSE
IF vPlayerPos.z > -8
EXIT
ENDIF
ENDIF
SWITCH iCorpseHandlerState
CASE 0
IF CREATE_CORPSE( merc13_C4_3 )
iCorpseTimer = GET_GAME_TIMER()+GET_RANDOM_INT_IN_RANGE(20000,25000)
iCorpseHandlerState ++
ENDIF
BREAK
CASE 1
IF GET_GAME_TIMER() > iCorpseTimer
iCorpseHandlerState ++
ENDIF
BREAK
CASE 2
IF CREATE_CORPSE( merc14_C4_3 )
iCorpseTimer = GET_GAME_TIMER()+GET_RANDOM_INT_IN_RANGE(20000,25000)
iCorpseHandlerState ++
ENDIF
BREAK
CASE 3
IF GET_GAME_TIMER() > iCorpseTimer
iCorpseHandlerState ++
ENDIF
BREAK
CASE 4
IF CREATE_CORPSE( MERC15_C4_3 )
iCorpseTimer = GET_GAME_TIMER()+GET_RANDOM_INT_IN_RANGE(20000,25000)
iCorpseHandlerState ++
ENDIF
BREAK
CASE 5
IF GET_GAME_TIMER() > iCorpseTimer
iCorpseHandlerState ++
ENDIF
BREAK
CASE 6
IF CREATE_CORPSE( MERC16_C4_4 )
iCorpseTimer = GET_GAME_TIMER()+GET_RANDOM_INT_IN_RANGE(20000,25000)
iCorpseHandlerState ++
ENDIF
BREAK
CASE 7
IF GET_GAME_TIMER() > iCorpseTimer
iCorpseHandlerState ++
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC POLICE_HELI_HANDLER()
IF mission_substage = 10
IF isentityalive( vehs[mvf_policeHeli].id )
AND isentityalive( peds[mpf_heli].id )
iPoliceHeliState = 100
ENDIF
ENDIF
SWITCH iPoliceHeliState
CASE 0
Load_Asset_Model( sAssetData, POLMAV )
Load_Asset_Model( sAssetData, S_M_Y_SWAT_01 )
iPoliceHeliState++
BREAK
CASE 1
IF HAS_MODEL_LOADED( POLMAV )
AND HAS_MODEL_LOADED( S_M_Y_SWAT_01 )
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli and swat loaded" )
iPoliceHeliState++
ENDIF
BREAK
CASE 2
vehs[mvf_policeHeli].id = CREATE_VEHICLE( POLMAV, <<-92.8689, -2015.0421, 17.0169>>, 214.9528 )
spawn_ped( peds[mpf_heli].id, S_M_Y_SWAT_01, <<-89.4357, -2014.3889, 17.0169>>, 190.5788 )
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS( peds[mpf_heli].id, TRUE )
SET_PED_INTO_VEHICLE( peds[mpf_heli].id, vehs[mvf_policeHeli].id )
SET_VEHICLE_SEARCHLIGHT( vehs[mvf_policeHeli].id, TRUE, TRUE )
SET_VEHICLE_LIVERY( vehs[mvf_policeHeli].id, 0 )
TASK_HELI_MISSION( peds[mpf_heli].id, vehs[mvf_policeHeli].id, NULL, NULL, <<-85.5841, -2281.5090, 57.3485>>, MISSION_GOTO, 30, 10, -1, 55, 20, -1 )
Unload_Asset_Model( sAssetData, POLMAV )
Unload_Asset_Model( sAssetData, S_M_Y_SWAT_01 )
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli and swat created" )
iPoliceHeliState++
BREAK
CASE 3
IF isentityalive( vehs[mvf_policeHeli].id )
AND isentityalive( peds[mpf_heli].id )
IF IS_ENTITY_AT_COORD( peds[mpf_heli].id, <<-85.5841, -2281.5090, 57.3485>>, <<30,30,30>> )
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli has arrived" )
iPoliceHeliState++
ENDIF
ENDIF
BREAK
CASE 4
IF isentityalive( vehs[mvf_policeHeli].id )
AND isentityalive( peds[mpf_heli].id )
CLEAR_PED_TASKS( peds[mpf_heli].id )
OPEN_SEQUENCE_TASK(seq)
TASK_HELI_MISSION( NULL, vehs[mvf_policeHeli].id, NULL, NULL, <<-97.1803, -2340.7891, 26.4520>>, MISSION_GOTO, 20, 10, 96.0322, 40, 20, -1, HF_AttainRequestedOrientation )
TASK_HELI_MISSION( NULL, vehs[mvf_policeHeli].id, NULL, NULL, <<-157.1283, -2400.2373, 38.6996>>, MISSION_GOTO, 20, 10, 6.1374, 40, 20, -1, HF_AttainRequestedOrientation )
TASK_HELI_MISSION( NULL, vehs[mvf_policeHeli].id, NULL, NULL, <<-255.1758, -2371.6716, 30.6111>>, MISSION_GOTO, 20, 10, 303.2508, 40, 20, -1, HF_AttainRequestedOrientation )
TASK_HELI_MISSION( NULL, vehs[mvf_policeHeli].id, NULL, NULL, <<-266.8602, -2297.8379, 26.4934>>, MISSION_GOTO, 20, 10, -132.2165, 40, 20, -1, HF_AttainRequestedOrientation )
TASK_HELI_MISSION( NULL, vehs[mvf_policeHeli].id, NULL, NULL, <<-157.1116, -2301.1860, 19.5018>>, MISSION_GOTO, 20, 10, 174.5608, 40, 20, -1, HF_AttainRequestedOrientation )
SET_SEQUENCE_TO_REPEAT( seq, REPEAT_FOREVER )
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE( peds[mpf_heli].id, seq )
CLEAR_SEQUENCE_TASK(seq)
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli tasked to circle" )
iPoliceHeliState++
ENDIF
BREAK
CASE 5
IF isentityalive( peds[mpf_heli].id )
IF GET_SCRIPT_TASK_STATUS( peds[mpf_heli].id, SCRIPT_TASK_PERFORM_SEQUENCE ) > PERFORMING_TASK
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli got off task, retasking" )
iPoliceHeliState = 4
ENDIF
ENDIF
BREAK
CASE 100
IF isentityalive( vehs[mvf_policeHeli].id )
AND isentityalive( peds[mpf_heli].id )
CLEAR_PED_TASKS( peds[mpf_heli].id )
TASK_HELI_MISSION( peds[mpf_heli].id, vehs[mvf_policeHeli].id, NULL, NULL, <<723.2252, -1478.7260, 119.2312>>, MISSION_GOTO, 30, 10, -1, 55, 20, -1 )
SET_PED_KEEP_TASK( peds[mpf_heli].id, TRUE )
SET_PED_AS_NO_LONGER_NEEDED( peds[mpf_heli].id )
SET_VEHICLE_AS_NO_LONGER_NEEDED( vehs[mvf_policeHeli].id )
CPRINTLN( DEBUG_MISSION, "POLICE_HELI_HANDLER: heli tasked to leave area and no longer needed" )
iPoliceHeliState++
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC ST_9_THE_GOODS()
// IF mission_substage < 10
// CORPSE_HANDLER()
// ENDIF
POLICE_HELI_HANDLER()
set_radar_as_interior_this_frame(get_hash_key("v_fakeboatpo1sh1sunk"),-165.34,-2350.03,0)
SET_RADAR_AS_EXTERIOR_THIS_FRAME()
IF PLAYER_PED_ID() = mike_ped()
SET_RADAR_ZOOM_PRECISE(1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_LR)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_NEXT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_PREV)
SET_PED_RESET_FLAG( PLAYER_PED_ID(), PRF_DisableTakeOffScubaGear, TRUE )
ELSE
SET_RADAR_ZOOM_PRECISE(85)
ENDIF
IF mission_substage < 9
IF isentityalive(mike_ped())
IF IS_PED_SWIMMING(mike_ped())
IF GET_PED_COMP_ITEM_CURRENT_SP( mike_ped(), COMP_TYPE_SPECIAL ) != SPECIAL_P0_SCUBA_ACCS_1
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(),COMP_TYPE_SPECIAL,SPECIAL_P0_SCUBA_ACCS_1,FALSE)
ENDIF
ENDIF
ENDIF
ENDIF
VECTOR vMikeArrivedPos = <<-191.0846, -2330.0593, -19.2324>>
VECTOR vMikeArrivedRot = <<0.0, 0.0, 180.0>>
SWITCH mission_substage
case STAGE_ENTRY
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
bcsalarmtriggered = false
balarmtriggered = false
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(10,"Stage 9: the goods",true)
//sub
if IsEntityAlive(vehs[mvf_sub].id)
SET_ENTITY_COORDS(vehs[mvf_sub].id,<<-466.7967, -2381.3794, -12.1213>>)
SET_ENTITY_HEADING(vehs[mvf_sub].id, 279.5468 )
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id,true)
else
vehs[mvf_sub].id = CREATE_VEHICLE(SUBMERSIBLE,<<-466.7967, -2381.3794, -12.1213>>, 279.5468 )
SET_VEHICLE_AS_RESTRICTED(vehs[mvf_sub].id,0)
SET_VEHICLE_IGNORED_BY_QUICK_SAVE(vehs[mvf_sub].id)
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id,true)
endif
//crate
objLoot = CREATE_OBJECT(Prop_Military_Pickup_01,<<-191.12270, -2331.33813, -19.40053>>)
//mike
Scuba_suite_up(MIKE_PED(),true)
SET_PED_DIES_IN_WATER(MIKE_PED(),false)
//RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT( mike_ped() ) //commented out as it was restoring weapons too early
//misc
Load_Asset_AnimDict(sAssetData,"missheistdocks2a@swimtocontainer")
ADD_PED_FOR_DIALOGUE(convo_struct,1,MIKE_PED(),"MICHAEL")
ALLOW_DIALOGUE_IN_WATER(TRUE)
if not IS_AUDIO_SCENE_ACTIVE("DH2A_SWIM_TO_CONTAINER")
START_AUDIO_SCENE("DH2A_SWIM_TO_CONTAINER")
endif
// OVERRIDE_UNDERWATER_STREAM("DH_FINALE_2A_STREAM", TRUE)
WATER_OVERRIDE_SET_SHOREWAVEAMPLITUDE(0)
WATER_OVERRIDE_SET_SHOREWAVEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_SHOREWAVEMAXAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANNOISEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEMINAMPLITUDE(0)
WATER_OVERRIDE_SET_OCEANWAVEMAXAMPLITUDE(0)
WATER_OVERRIDE_SET_RIPPLEBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEMINBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEMAXBUMPINESS(0)
WATER_OVERRIDE_SET_RIPPLEDISTURB(0)
WATER_OVERRIDE_SET_STRENGTH(0.1)
IF DOES_ENTITY_EXIST(vehs[mvf_mission_veh].id)
DELETE_VEHICLE(vehs[mvf_mission_veh].id)
ENDIF
IF IS_ENTITY_OK( vehs[mvf_dinghy].id )
SET_VEHICLE_ON_GROUND_PROPERLY( vehs[mvf_dinghy].id )
ENDIF
IF NOT DOES_CAM_EXIST(camera_a)
CPRINTLN( DEBUG_MISSION, "CAM A DOES NOT EXIT: STARTING SYNC SCENE 3" )
camera_a = CREATE_CAM_WITH_PARAMS( "default_scripted_camera", <<-75.1, -2286.4, 1.5>>, <<3.1, -0.0, 132.1>>, 50 )
set_cam_active(camera_a, true)
render_script_cams(true, false)
if isentityalive( vehs[mvf_dinghy].id )
ATTACH_CAM_TO_ENTITY( camera_a, vehs[mvf_dinghy].id, << 3.6348, -1.745, 1.15 >> )
endif
players_scene_id = CREATE_SYNCHRONIZED_SCENE(<<0,0,0>>, <<0,0,0>>)
task_synchronized_scene(player_ped_id(), players_scene_id, "missheistdocks2aswitchig_8", "ig_8_switch", instant_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(players_scene_id, vehs[mvf_dinghy].id, 0)
SET_SYNCHRONIZED_SCENE_PHASE( players_scene_id, 0.35 )
PLAY_SOUND_FROM_ENTITY(-1,"BODY_FALL_DIVE_WATER_MASTER",player_ped_id(),"docks_heist_finale_2a_sounds")
ENDIF
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
bPrintDisplayed = FALSE
bPrintDisplayed2 = FALSE
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bDialoguePlayed3 = FALSE
bDialoguePlayed4 = FALSE
bSonarUpdate = TRUE
bStartSonar = FALSE
bForcedRayfire = FALSE
bFirstPersonFlashPlayed = FALSE
//stats
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(DH2A_TIME_TO_FIND_CONTAINER)
CREATE_CONVERSATION(convo_struct, "D2AAUD", "DH2A_ROLL", CONV_PRIORITY_MEDIUM)
mission_substage++
#IF IS_DEBUG_BUILD
//bSwitchCamDebug_SkipToSwitch = TRUE
#ENDIF
break
case 1
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.99
OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
// DO THIS HERE AGAIN AS SAFETY
if not does_particle_fx_looped_exist(flare_ptfx)
objFlare = create_object(PROP_FLARE_01, get_offset_from_entity_in_world_coords(player_ped_id(), <<0.0, 0.0, 1.0>>))
attach_entity_to_entity(objFlare, player_ped_id(), get_ped_bone_index(player_ped_id(), BONETAG_PH_L_HAND), <<0.07, 0.0, 0.03>>, <<-90.0, 0.0, 0.0>>)
flare_ptfx = START_PARTICLE_FX_LOOPED_ON_entity("scr_bio_flare", objFlare, <<0.0, 0.0, 0.11>>, <<0.0, 0.0, 0.0>>)
TRIGGER_MUSIC_EVENT("DH2A_DIVER")
endif
IF DOES_CAM_EXIST( camera_a )
IF IS_CAM_RENDERING( camera_a )
render_script_cams(FALSE, FALSE)
ENDIF
DESTROY_CAM( camera_a )
ENDIF
IF DOES_CAM_EXIST( camera_b )
DESTROY_CAM( camera_b )
ENDIF
OPEN_SEQUENCE_TASK(seq)
TASK_PLAY_ANIM(NULL, "SWIMMING@scuba", "dive_run", SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, 1000, AF_LOOPING )
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_diving_swim))
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seq)
CLEAR_SEQUENCE_TASK(seq)
SET_BOAT_REMAINS_ANCHORED_WHILE_PLAYER_IS_DRIVER(vehs[mvf_dinghy].id,FALSE)
//Set water back to normal
WATER_OVERRIDE_SET_STRENGTH(0)
SET_TRANSITION_TIMECYCLE_MODIFIER("PORT_heist_underwater", 0.5)
bStartSonar = TRUE
mission_substage++
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.675
IF IS_CAM_RENDERING( camera_a )
render_script_cams(FALSE, FALSE)
REPLAY_STOP_EVENT()
ENDIF
ELIF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.65
if not does_particle_fx_looped_exist(flare_ptfx)
objFlare = create_object(PROP_FLARE_01, get_offset_from_entity_in_world_coords(player_ped_id(), <<0.0, 0.0, 1.0>>))
attach_entity_to_entity(objFlare, player_ped_id(), get_ped_bone_index(player_ped_id(), BONETAG_PH_L_HAND), <<0.07, 0.0, 0.03>>, <<-90.0, 0.0, 0.0>>)
flare_ptfx = START_PARTICLE_FX_LOOPED_ON_entity("scr_bio_flare", objFlare, <<0.0, 0.0, 0.11>>, <<0.0, 0.0, 0.0>>)
TRIGGER_MUSIC_EVENT("DH2A_DIVER")
endif
//IF IS_CAM_RENDERING( camera_a )
// render_script_cams(FALSE, FALSE)
//ENDIF
IF NOT bForcedRayfire
IF NOT DOES_RAYFIRE_MAP_OBJECT_EXIST(rayfire_ship)
rayfire_ship = GET_RAYFIRE_MAP_OBJECT(<<-159.7051, -2374.3184, 5.0459>>, 50.0, "des_shipsink")
ELSE
CPRINTLN(DEBUG_MISSION, "RJM - Forcing the Rayfire to ENDING state")
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rayfire_ship, RFMO_STATE_ENDING)
REQUEST_IPL( "sunkcargoship" )
bForcedRayfire = TRUE
ENDIF
ENDIF
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(players_scene_id)
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > fFirstPersonFlashPhase1
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
IF ( bFirstPersonFlashPlayed = FALSE )
ANIMPOSTFX_PLAY(PICK_STRING(IS_REPLAY_IN_PROGRESS(), "CamPushInNeutral", "CamPushInMichael"), 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
bFirstPersonFlashPlayed = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
break
case 2
if CREATE_PLAYER_PED_INSIDE_VEHICLE(peds[mpf_trev].id,CHAR_TREVOR,vehs[mvf_sub].id)
sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = peds[mpf_trev].id
Unload_Asset_Anim_Dict( sAssetData, "missheistdocks2aswitchig_8" )
Unload_Asset_Anim_Dict( sAssetData, "SWIMMING@scuba" )
Unload_Asset_Model( sAssetData, PROP_FLARE_01 )
ADD_PED_FOR_DIALOGUE(convo_struct,2,peds[mpf_trev].id,"TREVOR")
// print_help("DCKH_SCUBH")
mission_substage++
endif
break
case 3
#IF IS_DEBUG_BUILD
IF bSwitchCamDebug_SkipToSwitch != TRUE
#ENDIF
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_FRCRT",CONV_PRIORITY_MEDIUM)
mission_substage++
endif
endif
#IF IS_DEBUG_BUILD
ELSE
mission_substage++
ENDIF
#ENDIF
break
case 4
if not bDialoguePlayed2
if not bPrintDisplayed
if IS_SAFE_TO_DISPLAY_GODTEXT()
Print_now("DCKH_LOCCARGO",DEFAULT_GOD_TEXT_TIME,1)
bPrintDisplayed = TRUE
endif
elif not bDialoguePlayed
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_LOOK",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Michael says he's looking" )
bDialoguePlayed = TRUE
endif
endif
elif not bDialoguePlayed4
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_HOLDUP",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Trevor says what's the hold up" )
bDialoguePlayed4 = TRUE
endif
endif
endif
endif
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),GET_ENTITY_COORDS(objLoot)) < 15
if not does_blip_exist(blipcrate)
blipcrate = CREATE_BLIP_FOR_OBJECT(objLoot)
endif
if not bDialoguePlayed2
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_DEVICE",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Michael sees the device" )
bDialoguePlayed2 = TRUE
endif
endif
elif not bDialoguePlayed3
if IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_GO",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Trevor tells Michael to get it" )
bDialoguePlayed3 = TRUE
endif
endif
endif
endif
if not IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("DCKH_SCUBH")
if not bSonarHelp
print_help("DCKH_SONARH")
bSonarHelp = TRUE
endif
endif
if IS_ENTITY_AT_COORD(MIKE_PED(),GET_ENTITY_COORDS(objLoot),<<5,5,4>>)
bStopRebreather = TRUE
players_scene_id = CREATE_SYNCHRONIZED_SCENE( vMikeArrivedPos, vMikeArrivedRot )
cameraIndex = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
TASK_SYNCHRONIZED_SCENE( mike_ped(), players_scene_id, "missheistdocks2a@swimtocontainer", "Michael_Swim_to_Container", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
PLAY_SYNCHRONIZED_CAM_ANIM( cameraIndex, players_scene_id, "CAM_Swim_to_Container", "missheistdocks2a@swimtocontainer")
set_cam_active(cameraindex,true)
Prep_start_Cutscene(false,<< -195.9108, -2318.3926, -18.6068 >>,true,false)
if DOES_BLIP_EXIST(blipCrate)
REMOVE_BLIP(blipCrate)
endif
REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGH)
//misc
iCSDelay = GET_GAME_TIMER()
//stats
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
IF isentityalive(vehs[mvf_sub].id)
SET_VEHICLE_DOORS_LOCKED(vehs[mvf_sub].id,VEHICLELOCK_LOCKED_PLAYER_INSIDE)
SET_VEHICLE_FULLBEAM(vehs[mvf_sub].id,true)
ENDIF
REMOVE_CURRENT_SONAR_BLIP()
bPrintDisplayed = FALSE
bPrintDisplayed2 = FALSE
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bDialoguePlayed3 = FALSE
bDialoguePlayed4 = FALSE
mission_substage++
eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS
HANDLE_SWITCH_CAM_MICHAEL_TO_TREVOR(scsSwitchCam_MichaelToTrevor)
endif
break
case 5
IF NOT bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CONF",CONV_PRIORITY_MEDIUM)
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
IF GET_SYNCHRONIZED_SCENE_PHASE( players_scene_id ) > 0.43
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
Hotswap_Menu(false,true,false,false,false,false)
eSwitchCamState = SWITCH_CAM_SETUP_SPLINE
IF DOES_ENTITY_EXIST(objFlare)
IF IS_ENTITY_ATTACHED(objFlare)
detach_entity(objFlare)
ENDIF
ENDIF
//help for trevor.
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE)
mission_substage++
ENDIF
ENDIF
ENDIF
break
case 6
//if not sCamDetails.bRun
IF HANDLE_SWITCH_CAM_MICHAEL_TO_TREVOR(scsSwitchCam_MichaelToTrevor)
if player_ped_id() = TREV_PED()
TRIGGER_MUSIC_EVENT("DH2A_MINISUB")
FREEZE_ENTITY_POSITION(vehs[mvf_sub].id,false)
STOP_PED_SPEAKING( PLAYER_PED_ID(), TRUE )
//mike
CLEAR_PED_TASKS(MIKE_PED())
SET_ENTITY_COORDS(MIKE_PED(),<<-231.6731, -2309.1953, -24.9887>>)
set_entity_heading(MIKE_PED(), 95.6420)
FREEZE_ENTITY_POSITION(MIKE_PED(),true)
SET_ENTITY_LOAD_COLLISION_FLAG(MIKE_PED(),true)
//crate
SET_ENTITY_COORDS(objLoot,<<-231.21761, -2301.24365, -26.59173>>)
SET_OBJECT_PHYSICS_PARAMS(objLoot,40,1,<<-1,-1,-1>>, <<-1,-1,-1>>,-1,-1,0)
FREEZE_ENTITY_POSITION(objLoot,TRUE)
//misc
if not IS_AUDIO_SCENE_ACTIVE("DH2A_CONTROL_SUB")
START_AUDIO_SCENE("DH2A_CONTROL_SUB")
endif
// print_help("DCKH_SUBINS")
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_INC",CONV_PRIORITY_MEDIUM)
bHotSwap = false
Prep_stop_Cutscene(true,false,true)
iCSDelay = GET_GAME_TIMER()
Unload_Asset_Anim_Dict(sAssetData,"missheistdocks2a@swimtocontainer")
bPrintDisplayed = FALSE
mission_substage++
// else
// PRINT_NOW("DCKH_SWP_TRVR",DEFAULT_GOD_TEXT_TIME,1)
endif
else
if IS_AUDIO_SCENE_ACTIVE("DH2A_SWIM_TO_CONTAINER")
STOP_AUDIO_SCENE("DH2A_SWIM_TO_CONTAINER")
endif
endif
break
case 7
// if IS_PLAYER_AT_LOCATION_IN_VEHICLE(sLocatesData,GET_ENTITY_COORDS(objLoot),<<0.1,0.1,0.1>>,false,vehs[mvf_sub].id,"DCKH_PICK","","DCKH_GETBK")
IF NOT bPrintDisplayed
IF IS_SAFE_TO_DISPLAY_GODTEXT()
bPrintDisplayed = TRUE
PRINT( "DCKH_PICK", DEFAULT_GOD_TEXT_TIME, 1 )
PRINT_HELP("DCKH_SUB_HELP")
REPLAY_RECORD_BACK_FOR_TIME(5.0, 8.0, REPLAY_IMPORTANCE_HIGHEST)
ENDIF
ENDIF
IF NOT bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_DRIVE",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Trevor and Michael talk as Trevor drives to weapon" )
bDialoguePlayed = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bHelpDisplayed
IF VDIST2( GET_ENTITY_COORDS(trev_ped()), GET_ENTITY_COORDS(objLoot) ) < 400
PRINT_HELP( "DCKH_PCKUPH" )
bHelpDisplayed = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(mike_ped())
AND DOES_ENTITY_EXIST( objLoot )
IF VDIST2( GET_ENTITY_COORDS(trev_ped()), GET_ENTITY_COORDS(objLoot) ) < 1600
FREEZE_ENTITY_POSITION( MIKE_PED(), FALSE )
IF GET_SCRIPT_TASK_STATUS( mike_ped(), SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY ) > PERFORMING_TASK
TASK_TURN_PED_TO_FACE_ENTITY( mike_ped(), trev_ped() )
ENDIF
IF NOT bDialoguePlayed2
IF NOT IS_ENTITY_OCCLUDED( objLoot )
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_SEES",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Trevor says he sees it" )
bDialoguePlayed2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(),vehs[mvf_sub].id)
IF IS_ENTITY_TOUCHING_ENTITY(vehs[mvf_sub].id,mike_ped())
IF IS_SAFE_TO_START_CONVERSATION()
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Michael says ouch" )
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_SMACK",CONV_PRIORITY_MEDIUM)
ENDIF
ENDIF
ENDIF
ENDIF
IF bDialoguePlayed2
IF NOT bDialoguePlayed3
IF IS_SAFE_TO_START_CONVERSATION()
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_EASY",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Michael tells Trevor to go easy" )
iCSDelay = GET_GAME_TIMER() + 15000
bDialoguePlayed3 = TRUE
ENDIF
ENDIF
ELIF NOT bDialoguePlayed4
IF GET_GAME_TIMER() > iCSDelay
IF CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_CRT",CONV_PRIORITY_MEDIUM)
CPRINTLN( DEBUG_MISSION, "CONVERSATION: Michael tells Trevor to hurry up" )
bDialoguePlayed4 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
if not does_blip_exist(blipcrate)
blipcrate = CREATE_BLIP_FOR_OBJECT(objLoot)
endif
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(),vehs[mvf_sub].id)
//Save Trevor eyes / head components
peds[mpf_trev].ePedCompPropHead = GET_PED_COMP_ITEM_CURRENT_SP(trev_ped(),COMP_TYPE_PROPS,ENUM_TO_INT(ANCHOR_HEAD))
peds[mpf_trev].ePedCompPropEyes = GET_PED_COMP_ITEM_CURRENT_SP(trev_ped(),COMP_TYPE_PROPS,ENUM_TO_INT(ANCHOR_EYES))
peds[mpf_trev].ePedCompSpecial= GET_PED_COMP_ITEM_CURRENT_SP(trev_ped(),COMP_TYPE_SPECIAL)
IF IS_ENTITY_TOUCHING_ENTITY(vehs[mvf_sub].id,objLoot)
SET_PLAYER_CONTROL( PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON )
BRING_VEHICLE_TO_HALT( vehs[mvf_sub].id, 2.0, 2 )
//objective
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
//frank
FREEZE_ENTITY_POSITION(MIKE_PED(),false)
SET_ENTITY_INVINCIBLE(MIKE_PED(),TRUE)
if does_particle_fx_looped_exist(flare_ptfx)
STOP_PARTICLE_FX_LOOPED(flare_ptfx)
endif
CLEAR_PED_TASKS(MIKE_PED())
bPrintDisplayed = FALSE
bPrintDisplayed2 = FALSE
bDialoguePlayed = FALSE
bDialoguePlayed2 = FALSE
bDialoguePlayed3 = FALSE
mission_substage++
ELIF HAS_ENTITY_COLLIDED_WITH_ANYTHING( vehs[mvf_sub].id )
IF GET_ENTITY_SPEED(vehs[mvf_sub].id) > 2.0
IF NOT IS_ENTITY_TOUCHING_ENTITY(vehs[mvf_sub].id,mike_ped())
IF IS_SAFE_TO_START_CONVERSATION()
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BANG",CONV_PRIORITY_MEDIUM)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
break
case 8//<<< being used for minimap (mission checks)
if IS_ENTITY_ATTACHED( objLoot )
SET_PLAYER_CONTROL( PLAYER_ID(), TRUE )
REPLAY_RECORD_BACK_FOR_TIME(3, 0.0, REPLAY_IMPORTANCE_HIGH)
if does_blip_exist(blipcrate)
remove_blip(blipcrate)
endif
//misc
bDialoguePlayed = false
Load_Asset_Model( sAssetData, P_CS_SUB_HOOK_01_S )
Load_Asset_Model( sAssetData, PROP_ROPE_HOOK_01 )
mission_substage++
else
if not bAttachSoundPlayed
IF REQUEST_SCRIPT_AUDIO_BANK( "PORT_OF_LS_ATTACH_CARGO" )
REPLAY_RECORD_BACK_FOR_TIME(5.0, 8.0, REPLAY_IMPORTANCE_HIGHEST)
CLEAR_PED_TASKS( trev_ped() )
bAttachSoundPlayed = TRUE
FREEZE_ENTITY_POSITION(objLoot,FALSE)
SET_OBJECT_PHYSICS_PARAMS(objLoot, fMass, fGravity, << -1.0, -1.0, -1.0 >>, << -1.0, -1.0, -1.0 >>, DEFAULT, DEFAULT, fBuoyancy)
//ATTACH_ENTITY_TO_ENTITY( objLoot, vehs[mvf_sub].id, 1, <<0,-2.0,-1.7>>, <<0,0,90>>, FALSE, FALSE, FALSE )
//SET_ENTITY_NO_COLLISION_ENTITY( objLoot, vehs[mvf_sub].id, FALSE )
//SET_ENTITY_NO_COLLISION_ENTITY( vehs[mvf_sub].id, objLoot, FALSE )
ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(objLoot, vehs[mvf_sub].id, -1, 1, vSecondEntityOffset, vFirstEntityOffset, vRotation, -1, TRUE)
play_sound_from_entity(i_sound_attach_cargo, "Attach_Cargo",vehs[mvf_sub].id,"docks_heist_finale_2a_sounds")
OPEN_SEQUENCE_TASK(seq)
TASK_GO_STRAIGHT_TO_COORD(NULL, <<-261.1416, -2328.5322, -17.0984>>, PEDMOVE_RUN, -1)
TASK_GO_STRAIGHT_TO_COORD(NULL, <<-278.5093, -2378.8352, -2.3485>>, PEDMOVE_RUN, -1)
TASK_WANDER_STANDARD(NULL)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_ped(), seq)
CLEAR_SEQUENCE_TASK(seq)
ENDIF
ENDIF
endif
break
case 9
if not bDialoguePlayed3
if IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-348.900330,-2573.658936,2.997342>>, <<-468.707886,-2471.864014,-23.989750>>, 100.000000)
IF IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_FLOYD",CONV_PRIORITY_MEDIUM)
bDialoguePlayed3 = true
endif
endif
endif
endif
IF isentityalive( vehs[mvf_sub].id )
IF GET_ENTITY_SPEED(vehs[mvf_sub].id) > 2.0
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING( vehs[mvf_sub].id )
IF IS_SAFE_TO_START_CONVERSATION()
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_BANG2",CONV_PRIORITY_MEDIUM)
ENDIF
ENDIF
ENDIF
ENDIF
if not bDialoguePlayed
IF IS_SAFE_TO_START_CONVERSATION()
AND NOT IS_ANY_TEXT_BEING_DISPLAYED( sLocatesData )
ADD_PED_FOR_DIALOGUE(convo_struct,4,null,"FLOYD")
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_DONE",CONV_PRIORITY_MEDIUM)
bDialoguePlayed = true
endif
endif
elif not bDialoguePlayed2
IF IS_SAFE_TO_START_CONVERSATION()
if CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_RADIO",CONV_PRIORITY_MEDIUM)
bDialoguePlayed2 = true
endif
ENDIF
endif
if DOES_BLIP_EXIST(sLocatesData.LocationBlip)
SET_BLIP_ROUTE(sLocatesData.LocationBlip,false)
IF GET_BLIP_COLOUR( sLocatesData.LocationBlip ) != BLIP_COLOUR_YELLOW
SET_BLIP_COLOUR( sLocatesData.LocationBlip, BLIP_COLOUR_YELLOW )
ENDIF
endif
if not b_cutscene_loaded
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),<<-358.59189, -2560.92188, -5>>) < DEFAULT_CUTSCENE_LOAD_DIST
REQUEST_CUTSCENE("LSDH_2A_EXT")
REQUEST_SCRIPT("docks2ASubHandler")
//[MF] Removing for Fix of B* 1642786
// IF isentityalive(peds[mpf_mike].id)
// DELETE_PED(peds[mpf_mike].id)
// CPRINTLN(DEBUG_MISSION, "DELETING MIKE PED")
// ENDIF
b_cutscene_loaded = true
endif
else
if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()),<<-358.59189, -2560.92188, -5>>) > DEFAULT_CUTSCENE_UNLOAD_DIST
REMOVE_CUTSCENE()
b_cutscene_loaded = false
endif
endif
if can_request_assets_for_cutscene_entity()
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
//INT iComponent
//REPEAT NUM_PED_COMPONENTS iComponent
// SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", INT_TO_ENUM(PED_COMPONENT, iComponent), g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[iComponent], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[iComponent], GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
//ENDREPEAT
SET_CUTSCENE_PED_OUTFIT("MICHAEL", PLAYER_ZERO, OUTFIT_P0_SCUBA_LAND)
PRINTLN("Setting Michael's cutscene outfit to OUTFIT_P0_SCUBA_LAND attempt 1.")
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED( "TREVOR", PLAYER_PED_ID() )
endif
if IS_PLAYER_AT_LOCATION_IN_VEHICLE(sLocatesData,<<-358.59189, -2560.92188, -5>>,<<0.1,0.1,0.1>>,false,vehs[mvf_sub].id,"DCKH_RETCARGO","","DCKH_GETBK")
or (DOES_BLIP_EXIST(sLocatesData.LocationBlip)And GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(objLoot),<<-358.59189, -2560.92188, -12.90297>>) < 20 )
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CREATE_CONVERSATION(convo_struct,"D2AAUD","DH2A_THERE",CONV_PRIORITY_MEDIUM)
iCSDelay = get_game_timer()
RELEASE_NAMED_SCRIPT_AUDIO_BANK("PORT_OF_LS_ATTACH_CARGO")
ALLOW_DIALOGUE_IN_WATER( FALSE )
REPLAY_RECORD_BACK_FOR_TIME(8.0, 2.0, REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
else
DRAW_MARKER(MARKER_RING,<<-358.59189, -2560.92188, -6>>,<<0,0,0>>,<<0,0,0>>,<<5,5,5>>,255,255,0,65)
endif
break
case 10
if can_request_assets_for_cutscene_entity()
IF isentityalive(mike_ped())
SET_PED_COMP_ITEM_CURRENT_SP(mike_ped(), COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
//INT iComponent
//REPEAT NUM_PED_COMPONENTS iComponent
// SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", INT_TO_ENUM(PED_COMPONENT, iComponent), g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[iComponent], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[iComponent], GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
//ENDREPEAT
SET_CUTSCENE_PED_OUTFIT("MICHAEL", PLAYER_ZERO, OUTFIT_P0_SCUBA_LAND)
PRINTLN("Setting Michael's cutscene outfit to OUTFIT_P0_SCUBA_LAND attempt 2.")
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED( "TREVOR", PLAYER_PED_ID() )
// SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS( CHAR_MICHAEL, "MICHAEL" )
endif
if IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_sub].id)
// or get_game_Timer() - iCSDelay > 2000
and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
STOP_PED_SPEAKING( PLAYER_PED_ID(), FALSE )
mission_set_Stage(msf_10_end_cutscene)
mission_substage = STAGE_ENTRY
else
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_sub].id, DEFAULT_VEH_STOPPING_DISTANCE, 10)
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
REMOVE_BLIP(sLocatesData.LocationBlip)
ENDIF
endif
break
endswitch
if player_ped_id() = MIKE_PED()
if get_distance_between_coords(GET_ENTITY_COORDS(objLoot),get_entity_coords(MIKE_PED())) > 240
if bPrintDisplayed2 = false
print_now("DCKH_LEAVEA",DEFAULT_GOD_TEXT_TIME,1)
bPrintDisplayed2 =true
endif
if get_distance_between_coords(GET_ENTITY_COORDS(objLoot),get_entity_coords(MIKE_PED())) > 250
MISSION_FAILED(mff_left_docks)
endif
else
bPrintDisplayed2 = false
endif
endif
//freez sub so easier to get into.
if IsEntityAlive(vehs[mvf_sub].id)
and IsEntityAlive(TREV_PED())
and mission_substage > 6
and mission_substage < 11
if player_ped_id() = TREV_PED()
IF IS_VEHICLE_STUCK_TIMER_UP(vehs[mvf_sub].id, VEH_STUCK_ON_ROOF, ROOF_TIME)
OR IS_VEHICLE_STUCK_TIMER_UP(vehs[mvf_sub].id, VEH_STUCK_JAMMED, 15000)
OR IS_VEHICLE_STUCK_TIMER_UP(vehs[mvf_sub].id, VEH_STUCK_HUNG_UP, 15000)
OR IS_VEHICLE_STUCK_TIMER_UP(vehs[mvf_sub].id, VEH_STUCK_ON_SIDE, 15000)
Mission_Failed(mff_sub_stuck)
endif
endif
endif
ENDPROC
PROC ST_10_END_CUTSCENE()
SWITCH mission_substage
case STAGE_ENTRY
if can_request_assets_for_cutscene_entity()
//INT iComponent
//REPEAT NUM_PED_COMPONENTS iComponent
// SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", INT_TO_ENUM(PED_COMPONENT, iComponent), g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[iComponent], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[iComponent], GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
//ENDREPEAT
SET_CUTSCENE_PED_OUTFIT("MICHAEL", PLAYER_ZERO, OUTFIT_P0_SCUBA_LAND)
PRINTLN("Setting Michael's cutscene outfit to OUTFIT_P0_SCUBA_LAND attempt 3.")
//Store Trevor's ped comps
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED( "TREVOR", PLAYER_PED_ID() )
endif
if HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
and HAS_SCRIPT_LOADED("docks2ASubHandler")
and Create_End_Cutscene_Vehicle( vehs[mvf_mission_veh].id, <<-329.75, -2577.94, 5.64>>, 128.25 )
REMOVE_PTFX_ASSET()
IF DOES_ENTITY_EXIST( objLoot )
DETACH_ENTITY( objLoot )
REGISTER_ENTITY_FOR_CUTSCENE(objLoot,"Miltary_Pickup",CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
ENDIF
//sub
IF IS_ENTITY_OK( vehs[mvf_sub].id )
REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_sub].id,"submersible",CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
REGISTER_ENTITY_FOR_CUTSCENE( NULL, "Sub_Rope_complete", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PROP_CS_SUB_ROPE_01 )
REGISTER_ENTITY_FOR_CUTSCENE( NULL, "DOM_Flatbed_truck", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, FLATBED )
IF IS_ENTITY_OK(peds[mpf_mike].id)
RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT(peds[mpf_mike].id) //restore Michael's weapons from before the mission
REGISTER_ENTITY_FOR_CUTSCENE( peds[mpf_mike].id, "MICHAEL", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_MICHAEL) )
ELSE
REGISTER_ENTITY_FOR_CUTSCENE( peds[mpf_mike].id, "MICHAEL", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_MICHAEL) )
ENDIF
IF IS_ENTITY_OK(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE( PLAYER_PED_ID(), "TREVOR", CU_ANIMATE_EXISTING_SCRIPT_ENTITY )
ENDIF
HANG_UP_AND_PUT_AWAY_PHONE()
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
endif
BREAK
case 1
if IS_CUTSCENE_PLAYING()
CLEAR_TIMECYCLE_MODIFIER()
IF IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(800)
ENDIF
STOP_AUDIO_SCENES()
TRIGGER_MUSIC_EVENT("DH2A_MISSION_COMPLETE")
CLEAR_AREA(<<-332.24289, -2571.74365, 5.00101>>,50,true)
bScubaOutfitSet = FALSE
mission_substage++
endif
break
case 2
IF isentityalive( trev_ped() )
IF (GET_PED_PROP_CURRENT_FROM_LOOKUP( trev_ped(), ANCHOR_EYES ) = PROPS_P2_SCUBA_MASK )
CPRINTLN( DEBUG_MISSION, "SWAPPING MASK FOR PREVIOUS HEADGEAR FOR TREVOR" )
SET_PED_COMP_ITEM_CURRENT_SP(TREV_PED(), COMP_TYPE_PROPS, peds[mpf_trev].ePedCompPropHead,FALSE)
SET_PED_COMP_ITEM_CURRENT_SP(TREV_PED(), COMP_TYPE_PROPS, peds[mpf_trev].ePedCompPropEyes,FALSE)
SET_PED_COMP_ITEM_CURRENT_SP(TREV_PED(), COMP_TYPE_SPECIAL, peds[mpf_trev].ePedCompSpecial)
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(objSubHook)
objSubHook = (GET_ENTITY_INDEX_OF_REGISTERED_ENTITY( "Sub_Rope_complete", PROP_CS_SUB_ROPE_01 ))
ENDIF
IF ( bScubaOutfitSet = FALSE )
IF NOT DOES_ENTITY_EXIST(peds[mpf_mike].id)
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY( "MICHAEL" ))
peds[mpf_mike].id = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY( "MICHAEL" ))
SET_CUTSCENE_PED_OUTFIT("MICHAEL", PLAYER_ZERO, OUTFIT_P0_SCUBA_LAND)
PRINTLN("Setting Michael's cutscene outfit to OUTFIT_P0_SCUBA_LAND attempt 4.")
ENDIF
ELSE
IF isentityalive( peds[mpf_mike].id )
IF NOT IS_PED_COMP_ITEM_CURRENT_SP(peds[mpf_mike].id, COMP_TYPE_OUTFIT, OUTFIT_P0_SCUBA_LAND)
//PRINTLN("Setting Michael's outfit to scuba gear without flippers.")
SET_PED_COMP_ITEM_CURRENT_SP(peds[mpf_mike].id, COMP_TYPE_OUTFIT, OUTFIT_P0_SCUBA_LAND, FALSE)
PRINTLN("Setting Michael's cutscene outfit to OUTFIT_P0_SCUBA_LAND attempt 5.")
ENDIF
IF (GET_PED_PROP_INDEX( peds[mpf_mike].id, ANCHOR_EYES ) > -1)
CPRINTLN( DEBUG_MISSION, "REMOVING MASK FROM MIKE" )
SET_PED_COMP_ITEM_CURRENT_SP(peds[mpf_mike].id, COMP_TYPE_PROPS, PROPS_EYES_NONE)
ENDIF
bScubaOutfitSet = TRUE
PRINTLN("Setting bScubaOutfitSet to TRUE.")
ENDIF
ENDIF
ENDIF
IF isentityalive( vehs[mvf_sub].id )
SET_VEHICLE_FULLBEAM( vehs[mvf_sub].id, FALSE )
SET_VEHICLE_LIGHTS( vehs[mvf_sub].id, FORCE_VEHICLE_LIGHTS_OFF )
ENDIF
IF NOT DOES_ENTITY_EXIST( vehs[mvf_getAwayVan].id )
vehs[mvf_getAwayVan].id = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY( "DOM_Flatbed_truck", FLATBED ))
ELSE
IF GET_CUTSCENE_TIME() > 112000
IF IS_VEHICLE_DRIVEABLE( vehs[mvf_getAwayVan].id )
SET_VEHICLE_LIGHTS( vehs[mvf_getAwayVan].id, FORCE_VEHICLE_LIGHTS_ON )
ENDIF
ENDIF
ENDIF
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor",PLAYER_TWO)
PRINTLN(GET_THIS_SCRIPT_NAME(), "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned TRUE for Trevor.")
bcs_trev = true
endif
if CAN_SET_EXIT_STATE_FOR_CAMERA()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
PRINTLN(GET_THIS_SCRIPT_NAME(), "CAN_SET_EXIT_STATE_FOR_CAMERA() returned TRUE for camera.")
bcs_cam = true
endif
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY( "Sub_Rope_complete" )
IF DOES_ENTITY_EXIST( objSubHook )
bcs_hook = TRUE
CPRINTLN( DEBUG_MISSION, "EXIT STATE for SubHook" )
FREEZE_ENTITY_POSITION( objSubHook, TRUE )
ENDIF
PRINTLN(GET_THIS_SCRIPT_NAME(), "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned TRUE for Sub_Rope_complete.")
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY( "submersible" )
IF DOES_ENTITY_EXIST( vehs[mvf_sub].id )
bcs_sub = TRUE
CPRINTLN( DEBUG_MISSION, "EXIT STATE for submersible" )
SET_ENTITY_AS_MISSION_ENTITY( vehs[mvf_sub].id )
FREEZE_ENTITY_POSITION( vehs[mvf_sub].id, TRUE )
ENDIF
PRINTLN(GET_THIS_SCRIPT_NAME(), "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned TRUE for submersible.")
ENDIF
if bcs_sub and bcs_hook
and not bSubHandler
StructDocksSubHandover sSubHandover
sSubHandover.subHandover = vehs[mvf_sub].id
sSubHandover.hookHandover = objSubHook
START_NEW_SCRIPT_WITH_ARGS("docks2ASubHandler", sSubHandover, SIZE_OF(sSubHandover), DEFAULT_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED("docks2ASubHandler")
CPRINTLN(DEBUG_MISSION, "Sub handed over to handler script.")
bSubHandler = TRUE
endif
if bcs_trev and bcs_cam
AND NOT IS_CUTSCENE_PLAYING()
IF DOES_ENTITY_EXIST( vehs[mvf_getAwayVan].id )
DELETE_VEHICLE( vehs[mvf_getAwayVan].id )
ENDIF
IF DOES_ENTITY_EXIST(peds[mpf_mike].id)
DELETE_PED(peds[mpf_mike].id)
ENDIF
IF DOES_ENTITY_EXIST( vehs[mvf_mission_veh].id )
DELETE_VEHICLE( vehs[mvf_mission_veh].id )
ENDIF
REPLAY_STOP_EVENT()
Mission_Passed()
endif
PRINTLN(GET_THIS_SCRIPT_NAME(), "bcs_trev is ", GET_STRING_FROM_BOOL(bcs_trev))
PRINTLN(GET_THIS_SCRIPT_NAME(), "bcs_cam is ", GET_STRING_FROM_BOOL(bcs_cam))
PRINTLN(GET_THIS_SCRIPT_NAME(), "IS_CUTSCENE_PLAYING() is ", GET_STRING_FROM_BOOL(IS_CUTSCENE_PLAYING()))
break
ENDSWITCH
ENDPROC
Proc ST_PASSED()
switch mission_substage
case STAGE_ENTRY
if HAS_CUTSCENE_LOADED()
START_CUTSCENE()
mission_substage++
endif
break
case 1
mission_passed()
break
endswitch
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// MISSION FLOW
// -----------------------------------------------------------------------------------------------------------
PROC mission_flow()
IF bDoSkip
EXIT
ENDIF
Switch int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage)
case msf_0_drive_to_bridge ST_0_DRIVE_TO_BRIDGE() break
case msf_1_snipe_gaurds ST_1_SNIPE_GUARDS() break
case msf_2_first_bomb ST_2_FIRST_BOMB() break
case msf_3_second_bomb ST_3_SECOND_BOMB() break
case msf_4_third_bomb ST_4_THIRD_BOMB() break
case msf_5_fourth_bomb ST_5_FOURTH_BOMB() break
case msf_6_way_out ST_6_WAY_OUT() break
case msf_7_detonate ST_7_DETONATE() break
case msf_8_explosion_ctscne ST_8_EXPLOSION_CUTSCENE() break
case msf_9_the_goods ST_9_THE_GOODS() break
case msf_10_end_cutscene ST_10_END_CUTSCENE() break
// case msf_passed ST_PASSED() break
endswitch
ENDPROC
#if is_debug_build
proc do_debug()
if is_keyboard_key_just_pressed(key_s)
mission_passed()
elif is_keyboard_key_just_pressed(key_f)
mission_failed(mff_debug_fail)
endif
endproc
#endif
// ===========================================================================================================
// script loop
// ===========================================================================================================
script
printstring("...docks 2a mission launched")
printnl()
if (has_force_cleanup_occurred())
if not sCamDetails.bRun
trigger_music_event("dh2a_dead")
printstring("...docks 2a mission force cleanup")
printnl()
IF PLAYER_PED_ID() = mike_ped()
g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_MIKE
ELIF PLAYER_PED_ID() = frank_ped()
g_replay.iReplayInt[WHICH_PLAYER] = PLAYER_IS_FRANK
ENDIF
mission_flow_mission_force_cleanup()
mission_cleanup(true)
terminate_this_thread()
endif
endif
IF NOT GET_MISSION_FLAG()
CPRINTLN(DEBUG_MISSION, "SETTING MISSION FLAG: TRUE")
set_mission_flag(true)
ENDIF
#if is_debug_build
//z menu for skipping stages+
zmenunames[msf_0_drive_to_bridge].stxtlabel = "stage 0: drive to bridge"
zmenunames[msf_1_snipe_gaurds].stxtlabel = "stage 1: snipe guards"
zmenunames[msf_2_first_bomb].stxtlabel = "stage 2: first bomb"
zmenunames[msf_3_second_bomb].stxtlabel = "stage 3: second bomb"
zmenunames[msf_4_third_bomb].stxtlabel = "stage 4: third bomb"
zmenunames[msf_5_fourth_bomb].stxtlabel = "stage 5: fourth bomb"
zmenunames[msf_6_way_out].stxtlabel = "stage 6: way out"
zmenunames[msf_7_detonate].stxtlabel = "stage 7: detonate"
zmenunames[msf_8_explosion_ctscne].stxtlabel = "stage 8: explosion cutscene"
zmenunames[msf_9_the_goods].stxtlabel = "stage 9: the goods"
zmenunames[msf_10_end_cutscene].stxtlabel = "stage 10: end cutscene"
zmenunames[cst_init].stxtlabel = "initial cutscene"
zmenunames[cst_init].bselectable = false
zmenunames[cst_mcs_1].stxtlabel = "stage 0: mcs_1"
zmenunames[cst_mcs_1].bselectable = false
zmenunames[cst_mcs_2].stxtlabel = "stage 5: mcs_2"
zmenunames[cst_mcs_2].bselectable = false
zmenunames[cst_mcs_3].stxtlabel = "stage 9: mcs_3"
zmenunames[cst_mcs_3].bselectable = false
zmenunames[cst_ext].stxtlabel = "exit cutscene"
zmenunames[cst_ext].bselectable = false
widget_debug = start_widget_group("docks heist 2a menu")
start_widget_group("mission stage logic")
add_widget_int_read_only("mission stage", mission_stage)
add_widget_int_read_only("mission subtage", mission_substage)
stop_widget_group()
start_widget_group("alarm logic - read only ")
add_widget_bool("alarm init:", balarminitialised)
add_widget_bool("alarm ", balarmtriggered)
add_widget_bool("alarm cs", bcsalarmtriggered)
stop_widget_group()
start_widget_group("ai logic")
add_widget_int_read_only("imike_ai_stage:", imike_ai_stage)
ADD_WIDGET_INT_READ_ONLY("snipe sound stage:", iaudioswitch_snipeStage)
ADD_WIDGET_BOOL("Frank Fired:",bFrankFired)
stop_widget_group()
start_widget_group("loot attachment")
add_widget_float_slider("fMass", fMass, 0.0, 3000.0, 1.0)
add_widget_float_slider("fGravity", fGravity, -1.0, 3000.0, 1.0)
add_widget_float_slider("fBuoyancy", fBuoyancy, -1.0, 3000.0, 1.0)
add_widget_vector_slider("vSecondEntityOffset", vSecondEntityOffset, -10.0, 10.0, 1.0)
add_widget_vector_slider("vFirstEntityOffset", vFirstEntityOffset, -10.0, 10.0, 1.0)
add_widget_vector_slider("vRotation", vRotation, -360.0, 360.0, 1.0)
stop_widget_group()
// CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS()
start_widget_group("push in")
add_widget_bool("bPushInAttached", bPushInAttached)
add_widget_bool("bPushInAttachStartCam", bPushInAttachStartCam)
add_widget_float_slider("fPushInStartPhase", fPushInStartPhase, 0.0, 1.0, 0.1)
add_widget_float_slider("fPushInDistance", fPushInStartDistance, 0.0, 10.0, 1.0)
add_widget_int_slider("iPushInInterpTime", iPushInInterpTime, 0, 10000, 100)
add_widget_int_slider("iPushInCutTime", iPushInCutTime, 0, 10000, 100)
add_widget_int_slider("iPushInFXTime", iPushInFXTime, 0, 10000, 100)
add_widget_int_slider("iPushInSpeedUpTime", iPushInSpeedUpTime, 0, 10000, 100)
add_widget_float_slider("fPushInSpeedUpProportion", fPushInSpeedUpProportion, 0.0, 10.0, 1.0)
add_widget_bool("bPushInDoColourFlash", bPushInDoColourFlash)
stop_widget_group()
add_widget_float_slider("fFirstPersonFlashPhase1", fFirstPersonFlashPhase1, 0.0, 1.0, 0.01)
stop_widget_group()
set_locates_header_widget_group(widget_debug)
SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_TREVOR(scsSwitchCam_MichaelToTrevor, mike_ped(), vehs[mvf_sub].id)
CREATE_SPLINE_CAM_WIDGETS(scsSwitchCam_MichaelToTrevor, "Michael", "Submarine", widget_debug)
#endif
// if not IS_REPLAY_IN_PROGRESS()
// do_tods_dh2a()
// endif
//initialize mission
mission_setup()
CREATE_TRIGGER_BOXES() //initialize the trigger boxes
if is_replay_in_progress()
remove_cutscene()
//if heli stages send to start of stage inside stage will sort out parameters
imidreplay = get_replay_mid_mission_stage()
if g_bshitskipaccepted
imidreplay++
endif
VECTOR vReplayPos
FLOAT fReplayHeading
BOOL bFranklin = FALSE
BOOL bMichael = FALSE
SWITCH imidreplay
CASE 0
vReplayPos = <<-1151.6340, -1519.4980, 9.6327>> //<<-1149.8112, -1522.1071, 9.6330>>
fReplayHeading = 215.0
BREAK
CASE 1
vReplayPos = << -93.3159, -2368.9175, 13.2960 >>
fReplayHeading = 337.5851
bFranklin = TRUE
BREAK
CASE 2
vReplayPos = << -83.5905, -2361.7979, 13.2963 >>
fReplayHeading = 119.7045
bMichael = TRUE
BREAK
CASE 3
vReplayPos = << -94.9569, -2371.8770, 13.2969 >>
fReplayHeading = 97.3018
bMichael = TRUE
BREAK
CASE 4
vReplayPos = << -129.6871, -2366.8972, 8.3193 >>
fReplayHeading = 183.9491
bMichael = TRUE
BREAK
CASE 5
vReplayPos = << -191.4221, -2365.4763, 8.3193 >>
fReplayHeading = 176.1654
bMichael = TRUE
BREAK
CASE 6
vReplayPos = <<-221.8633, -2376.6187, 12.3329>>
fReplayHeading = 35.7369
bFranklin = TRUE
BREAK
CASE 7
vReplayPos = << -143.8203, -2488.2612, 43.4412 >>
fReplayHeading = 35.7369
bFranklin = TRUE
BREAK
CASE 8
vReplayPos = << -143.8203, -2488.2612, 43.4412 >>
fReplayHeading = 10.7369
bFranklin = TRUE
BREAK
CASE 9
CASE 10
vReplayPos = <<-90.4927, -2288.0029, -1.3081>>
fReplayHeading = 130.4705
bMichael = TRUE
BREAK
CASE 11
vReplayPos = <<-332.2139, -2570.9912, 5.0010>>
fReplayHeading = 97.2111
BREAK
ENDSWITCH
IF bFranklin
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_FRANKLIN,TRUE)
CPRINTLN(DEBUG_MISSION, "START_REPLAY_SETUP as FRANKLIN at ", vReplayPos )
START_REPLAY_SETUP( vReplayPos, fReplayHeading )
ENDIF
ELIF bMichael
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_MICHAEL,TRUE)
CPRINTLN(DEBUG_MISSION, "START_REPLAY_SETUP as MICHAEL at ", vReplayPos )
START_REPLAY_SETUP( vReplayPos, fReplayHeading )
ENDIF
ELSE
IF SET_CURRENT_PLAYER_PED(SELECTOR_PED_TREVOR,TRUE)
CPRINTLN(DEBUG_MISSION, "START_REPLAY_SETUP as TREVOR at ", vReplayPos )
START_REPLAY_SETUP( vReplayPos, fReplayHeading )
ENDIF
ENDIF
if imidreplay = 7 // if replay comes back stage 7 tell it to go to stage 6
iskiptostage = enum_to_int(msf_6_way_out) // the later stage will need to be told to skip to the actual stages
elif imidreplay = 8
iskiptostage = enum_to_int(msf_7_detonate) //st_7_detonate
elif imidreplay = 9
iskiptostage = enum_to_int(msf_8_explosion_ctscne) //st 8 explosion
elif imidreplay = 10
iskiptostage = enum_to_int(msf_9_the_goods) //st 9_goods
elif imidreplay = 11
iskiptostage = enum_to_int(msf_10_end_cutscene) // passed stage
else
iskiptostage = imidreplay// else set as normal
endif
bdoskip = true
bis_zskip = false
mission_set_stage(int_to_enum(msf_mission_stage_flags, iskiptostage))
else //start from begining
set_replay_mid_mission_stage_with_name(0,"stage 0: drive to bridge")
mission_stage = enum_to_int(msf_0_drive_to_bridge)
mission_set_stage(int_to_enum(msf_mission_stage_flags, mission_stage))
run_intro_cutscene()
bis_zskip = false
endif
mission_substage = stage_entry
while (true)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_TheMerryweatherHeistFreight")
//prestreaming loop
Update_Asset_Management_System(sAssetData) // Deals with loading any assets and keeps track of what has been loaded
Update_Cutscene_Prestreaming(sCutscenePedVariationRegister)
mission_stage_management()
mission_stage_skip()
mission_checks()
mission_flow()
#if is_debug_build
do_debug()
HANDLE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS()
UPDATE_SPLINE_CAM_WIDGETS(scsSwitchCam_MichaelToTrevor)
#endif
wait(0)
endwhile
endscript