// ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // 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(<>))) 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(<>))) 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, <>) 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(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)+<>), GET_RANDOM_INT_IN_RANGE(2000,2500) ) TASK_AIM_GUN_AT_COORD( null, (GET_ENTITY_COORDS(mercs[i].id)-<>), 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(500,1000) ) TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<>, GET_RANDOM_INT_IN_RANGE(500,1000) ) TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<>, GET_RANDOM_INT_IN_RANGE(500,1000) ) TASK_AIM_GUN_AT_COORD( null, GET_ENTITY_COORDS(frank_ped())+<>, 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(), <> ) ELSE vCorpseSpawnPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS( PLAYER_PED_ID(), <> ) 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