//Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. //Uber car chase data // total should not exceed 225 CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 1 CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 1 CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 4 // total should not exceed 12 CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 1 CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 4 // this should be fine CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 1 //const_int max_attached_objects 30 //const_int maximum_real_setpiece_vehicles 4 const_int total_number_of_wave_0_enemies 9 const_int total_number_of_wave_0_inside_enemies 4 const_int total_number_of_wave_0_vehicles 3 const_int total_number_of_wave_2_enemies 20 const_int total_number_of_wave_2_vehicles 8 // @SBA - to track rushing enemies CONST_INT kiNumberOfWaveRushersAllowed 2 const_int total_number_of_wave_3_enemies 4 const_int total_number_of_wave_3_vehicles 1 const_int total_number_of_ambient_enemies 4 const_int total_number_of_ambient_enemy_vehicles 2 const_int total_number_of_the_parked_cars 4 CONST_INT MAX_SKIP_MENU_LENGTH 6 // number of stages in mission USING "rage_builtins.sch" USING "globals.sch" using "script_heist.sch" USING "flow_public_core_override.sch" using "commands_misc.sch" using "commands_pad.sch" using "commands_script.sch" using "commands_player.sch" using "commands_streaming.sch" using "commands_vehicle.sch" using "commands_camera.sch" using "commands_path.sch" using "commands_fire.sch" using "commands_graphics.sch" using "commands_object.sch" using "commands_misc.sch" using "commands_recording.sch" using "script_player.sch" using "script_debug.sch" using "streamed_scripts.sch" using "model_enums.sch" using "cellphone_public.sch" using "selector_public.sch" using "dialogue_public.sch" using "player_ped_public.sch" using "chase_hint_cam.sch" using "locates_public.sch" using "script_blips.sch" using "traffic.sch" using "select_mission_stage.sch" using "replay_public.sch" using "commands_cutscene.sch" using "mission_stat_public.sch" using "cutscene_public.sch" USING "CompletionPercentage_public.sch" using "building_control_public.sch" using "clearmissionarea.sch" using "emergency_call.sch" USING "taxi_functions.sch" USING "script_misc.sch" #IF IS_DEBUG_BUILD USING "rerecord_recording.sch" #ENDIF struct ped_structure ped_index ped model_names model blip_index blip vector pos vector run_to_pos float heading int health int accuracy bool damaged_by_player bool allow_body_armour bool created BOOL bRushInside // @SBA - flag for tracking when an enemy has been tasked inside BOOL been_killed weapon_type weapon text_label name endstruct struct vehicle_struct vehicle_index veh model_names model blip_index blip vector pos float heading float speed float skip_time int health float engine_health float petrol_tank_health int colour int recording_number bool been_destroyed endstruct struct object_struct object_index obj blip_index blip model_names model vector pos vector offset_pos vector offset_pos_2 vector rot vector offset_rot float heading float scale float health string room_name int time bool been_created endstruct struct quaternion float x float y float z float w endstruct struct decal DECAL_ID the_decal_id DECAL_RENDERSETTING_ID decal_texture_id vector pos vector direction vector side float width float height float fAlpha float life float wash_amount blip_index blip bool decal_removed endstruct struct cover_point_struct vector pos vector cover_from_pos float heading coverpoint_index cover_point endstruct enum main_mission_flow intro_mocap = 0, get_to_meth_lab, wave_0_system, // wave_1_system, @SBA - NO LONGER ACTIVE wave_2_system, wave_3_system, mission_passed_mocap, vehicle_recording, load_stage_selector_assets, mission_fail_stage endenum enum main_mission_shootout initial_attack_phase = 0, get_into_pos, run_to_other_side_of_building, get_to_other_side_of_building, run_to_front_of_building, get_to_front_of_building, run_into_shop, get_into_shop, charge_back_stairs, // @SBA - added this one to handle survivors combat_player, run_away, attack_from_pos_2, grenade_launcher_explosion, do_nothing endenum main_mission_flow mission_flow = intro_mocap main_mission_shootout wave_0_status[total_number_of_wave_0_enemies] main_mission_shootout wave_2_status[total_number_of_wave_2_enemies] main_mission_shootout wave_3_status[total_number_of_wave_3_enemies] main_mission_shootout ambient_enemy_status[total_number_of_ambient_enemies] ped_structure buddy ped_structure translator ped_structure cheng ped_structure wave_0_enemy[total_number_of_wave_0_enemies] ped_structure wave_2_enemy[total_number_of_wave_2_enemies] ped_structure wave_3_enemy[total_number_of_wave_3_enemies] ped_structure wave_0_inside_enemy[total_number_of_wave_0_inside_enemies] ped_structure ambient_enemy[total_number_of_ambient_enemies] // enemies MODEL_NAMES GoonModel1 = G_M_Y_MexGoon_02 MODEL_NAMES GoonModel2 = G_M_Y_Azteca_01 vehicle_struct trevors_truck vehicle_struct wave_0_enemy_vehicle[total_number_of_wave_0_vehicles] vehicle_struct wave_2_enemy_vehicle[total_number_of_wave_2_vehicles] vehicle_struct wave_3_enemy_vehicle[total_number_of_wave_3_vehicles] vehicle_struct ambient_enemy_vehicle[total_number_of_ambient_enemy_vehicles] object_struct explosive_barrels[4] object_struct bins[3] object_struct c4[3] object_struct cover_box cover_point_struct buddy_cover_point_data[6] //decal blood[2] // @SBA - stole this from Bob (RJM). 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 bool stop_mission_fail_checks = false bool wave_0_complete = false bool wave_2_complete = false bool wave_3_complete = false bool allow_buddy_ai_system = true bool ram_cutscene_finished = false bool allow_ambient_enemy_blips_to_flash = false bool display_blips_as_friendly = false bool no_vehicle_recording_skip = false bool fence_shot = false bool grenade_launcher_cutscene_playing = false bool stop_player_proofing = false bool use_main_cover_point = true bool refresh_the_task = false bool grenade_launcher_first_person_cam_active = false int i int original_time int waypoint_node_pos = 0 int total_number_of_points = 0 int remaining_enemies = 0 int player_waypoint_status = 22 int dialogue_time int dialogue_time_2 int buddy_waypoint_target_node = 0 int buddy_time int player_grenade_launcher_cutscene_status = 0 int cutscene_index int uber_vehicle_status = 0 int cutscene_trigger_time int wave_0_inside_enemy_status[total_number_of_wave_0_inside_enemies] int get_to_meth_lab_status = 0 int intro_mocap_status = 0 int vehicle_recording_system_status = 0 int get_to_meth_lab_dialogue_system_status = 0 int mission_passed_mocap_status = 0 int i_triggered_text_hashes[50] int flash_blip_time = 0 int proofing_time = 0 int attack_time = 0 int get_to_meth_lab_audio_scene_system_status = 0 int wave_0_audio_scene_system_status = 0 int wave_2_audio_scene_system_status = 0 int wave_3_audio_scene_system_status = 0 #IF IS_DEBUG_BUILD int get_to_meth_lab_skip_status = 0 int wave_0_system_skip_status = 0 int wave_3_system_skip_status int p_skip_time #endif //*****not present in initialise_mission_variables() int launch_mission_stage_menu_status = 0 //wave 0 INT iWave0SetupStage = 0 int wave_0_master_flow_system_status = 0 int wave_0_dialogue_system_status = 0 int wave_0_buddy_ai_system_status = 0 int ramming_gates_cutscene_status = 0 int wave_0_assisted_nodes_system_status = 0 //wave 1 - REMOVED @SBA //wave2 int wave_2_master_flow_system_status = 0 int wave_2_dialogue_system_status = 0 int wave_2_buddy_ai_system_status = 0 int wave_2_assisted_nodes_system_status = 0 //wave3 int wave_3_master_flow_system_status = 0 int wave_3_dialogue_system_status = 0 int wave_3_buddy_ai_system_status = 0 int wave_3_assisted_nodes_system_status = 0 vector player_position vector target_waypoint_pos vector cutscene_pos vector cutscene_rot string buddy_waypoint_string string mission_failed_text vehicle_index parked_cars[total_number_of_the_parked_cars] vehicle_index wave_1_uber_vehicle vehicle_index ambient_car[5] object_index players_weapon_obj camera_index camera_a camera_index camera_b //camera_index camera_c //camera_index camera_d sequence_index seq interior_instance_index meth_interior coverpoint_index cpWaterHeaterCover // @SBA - added for wave 0 rushers coverpoint_index buddy_cover_point[2] coverpoint_index players_cover_point coverpoint_index players_cover_point_2 coverpoint_index wave_3_0_cover_point coverpoint_index wave_3_1_cover_point coverpoint_index cover_point_back_roof_AC blip_index outside_meth_lab_blip blip_index meth_lab_blip blip_index ice_box_blip int remaining_enemy_status[2] ped_index remaining_enemy[2] //ped_index blood_ped structPedsForConversation scripted_speech[2] LOCATES_HEADER_DATA locates_data #IF IS_DEBUG_BUILD widget_group_id chinese_1_widget_group MissionStageMenuTextStruct menu_stage_selector[MAX_SKIP_MENU_LENGTH] int menu_return_stage = 0 #endif // *** @SBA - additional variables*** // to remember if player received the grenade launcher during the mission CONST_INT PLAYER_RECEIVED_GRENADE_LAUNCHER 0 //Array positino for replay globals // to remember which vehicles the player destroyed CONST_INT PLAYER_DESTROYED_VEHICLES 1 //Array positino for replay globals CONST_INT NOT_GOT_GLAUNCHER 0 CONST_INT HAS_GOT_GLAUNCHER 1 CONST_INT WAVE0_BOTH_CARS_DEAD -1 CONST_INT WAVE0_ONLY_CAR0_ALIVE 0 CONST_INT WAVE0_ONLY_CAR1_ALIVE 1 CONST_INT WAVE0_BOTH_CARS_ALIVE 2 // The ammount of ammo in the grenade launcher CONST_INT kiGrenadeLauncherAmmo 5 // @SBA - changed to 5 pere Leslie's feedback. OLD = 3 BOOL bPlayerInVehicle // bar PED_INDEX piBarLady PED_INDEX piJosef PED_INDEX piOldMan1A PED_INDEX piOldMan2 PED_INDEX piDrunk BOOL bBarPatronsCreated BOOL bIsBarCleanedUp SCENARIO_BLOCKING_INDEX sbiBarBlockingArea // For timing the conversation INT iGetToMethLabDialogTimer // For counting hits to the Blue SUV (init'd as needed) INT iSuvDamageCount = 0 // timer for wave rushes INT iWave_Rush_Time = 0 // Duration of wait before rush INT iWaitTimeBeforeRush = 0 // Rush counter INT iWaveRushersSoFar = 0 // IDs for navmesh blocking objects INT iNavBlockingUpstairsDoor INT iNavBlockingUpstairsDoorway INT iNavBlockingBackYardTrailer // Timer to delay the order for the next rusher to rush structtimer tmrNextRusherDelay BOOL bClearCarGen = FALSE // Checking player's vehicle for suitability BOOL bTrevorsVehicleIsOkay = FALSE // gating a load BOOL bLoadedLastShootoutStuff = FALSE // For gating a check to to break the window BOOL bPlayerInOpeningCover = FALSE // Gating the start of the initial wave BOOL bStartedInitialWave = FALSE BOOL bInitialWavePropsMade = FALSE BOOL bSetTaxiDropoff = FALSE // chef run back stairs BOOL bChefRunsToBackStairs = FALSE structtimer tmrChefRunsDelay // gate for door BOOL bBackStairsDoorClosed = FALSE // Has player used special ability BOOL bPlayerUsedAbility = FALSE // sound played yet? BOOL bPlayGunFire = FALSE // Meth lab arrival cutscene resolve volume TRIGGER_BOX tbArrivalCutResolveVol // Volume outside of front doors TRIGGER_BOX tbFrontDoorVolume // Volume for upstairs in meth lab for wave 0 fight TRIGGER_BOX tbUpstairsRushVolume // In the room where Trevor takes cover TRIGGER_BOX tbUpstairsCloserRushVolume // Volume for alley to the back stairs (outside) TRIGGER_BOX tbBackStairsAlleyVolume // Volume on the back stairs, starting several steps up (outside) TRIGGER_BOX tbOnBackStairsVolume // Volume for top of the back stairs (outside) TRIGGER_BOX tbTopBackStairsVolume // Volume that covers all the back stairs and the landing (outside) TRIGGER_BOX tbFullBackStairsVolume // Volume for area outside gates, by gas station TRIGGER_BOX tbOutsideMainGatesVolume // Volumes for the back yard, back roof, and just beyond the back gate(wave 2) TRIGGER_BOX tbBackYardVolume TRIGGER_BOX tbBackRoofVolume TRIGGER_BOX tbBackFullRoofVolume // abandonment volume TRIGGER_BOX tbBackUpstairsRoomVolume TRIGGER_BOX tbBackGateVolume // Volume inside the liquor store (wave 3) TRIGGER_BOX tbLiquorStoreVolume // Volumes for final cutscene trigger TRIGGER_BOX tbIceBoxInnerVol TRIGGER_BOX tbIceBoxOuterVol TRIGGER_BOX tbIceBoxCameraVol // Arrival Lead-in variables ENUM ARRIVAL_LEAD_IN_STATE ALI_HALT_VEHICLE, ALI_CAM_INTERP, ALI_FINISH_DRIVE, ALI_EXIT_VEHICLE, ALI_VEHICLE_STOP, ALI_FINISH_INTERP, ALI_WAIT_FOR_TIMER ENDENUM ARRIVAL_LEAD_IN_STATE ArivialLeadInState = ALI_HALT_VEHICLE VECTOR vArrivalMethLab = <<1406.26929, 3598.70752, 34.9>> // <<1403.1777, 3597.2070, 34.5>> structTimer tmrArrival VECTOR vVehicleLeadinLocR = <<1425.60095, 3604.64648, 33.89210>> VECTOR vVehicleLeadinLocL = <<1382.39490, 3580.00366, 34.01978>> VECTOR vTrevorsVehicleMethLabLoc = <<1409.9990, 3600.4973, 33.8676>> FLOAT fTrevorsVehicleMethLabHead = 108.7487 // Vector for Trevor's start pos in window (cover) VECTOR vTrevorWindowStartPos = <<1389.7571, 3599.7686, 37.9419>> // Vector for Trevor's pos on the back deck (cover) VECTOR vTrevorBackDeckStartPos = <<1409.21973, 3612.25244, 38.005>> //<<1409.44043, 3611.84180, 38.00555>> // Vector for Trevor's pos in the liquor store (cover) VECTOR vTrevorLiquorStartPos = <<1391.1561, 3607.2720, 33.9809>> // Back door to roof VECTOR vBackDoorToRoof = <<1399.7, 3607.8, 39.1>> // Door to back stairs VECTOR vDoorToBackStairs = <<1388.5, 3614.8, 39.1>> // Door between liquor store and interior stairs VECTOR vInteriorDoorStore = <<1395.61, 3609.33, 35.13>> // Cover point used by teh chef in 2nd part of wave 0 VECTOR vChefCoverPointBackStairs = <<1384.0, 3615.31, 37.93>> VECTOR vChefCoverPointBackStairs2 = <<1383.3361, 3617.2415, 37.9259>> // chef wave 3 VECTOR vChefCoverPointLiquorStore = <<1393.85, 3608.19, 33.98>> // Timer used to determine when an abandoned chef message should play structtimer tmrAbandonChef // Timer used to determine when an LOS check should happen (if not in LOS when Chef should die, kill him) structtimer tmrCheckChefForLOS //For timing the outbursts uttered by the Chef when in danger structtimer tmrChefOutburstTimer // Outburst time frequency FLOAT fOutburstTime // For timing when the Chef should die when abandoned structtimer tmrChefDeathTimer // Time from when being in danger to when the Chef dies CONST_FLOAT kfChefDeathTime 8.000 // Timer used for a reminder if player takes too long getting Cheng out of ice box structtimer tmrIceBoxReminder // Timer used for the blend-in to the final cutscene structtimer tmrIceBoxBlendin // Timer for Chef's move from the roof to the shop structtimer tmrStartChefMove // Timer for Chef's move from the roof to the shop structtimer tmrWave3ChefFailsafe // For enemy dialogue after player uses grenade launcher INT iEnemyGrenLaunchDialogue = 0 structTIMER tmrGrenLaunchTimer CONST_FLOAT kfGrenLaunchWaitTime 1.500 PED_INDEX piEnemyToSpeak // Gren launcher pickup PICKUP_INDEX puiGrenadeLauncher // Flag for whether to skip the grn launcher cutscene (if played already got the launcher) BOOL bSkipGrenLaunchCutscene = FALSE // Flag for setting pickup ammo BOOL bPickupAmmoSet = FALSE // blend-in to final cutscene INT CHENG_CUTSCENE_INDEX INT TRANSLATOR_CUTSCENE_INDEX MODEL_NAMES mnIceBox = P_ICE_BOX_01_S //prop_ice_box_01 MODEL_NAMES mnIceBoxProxy = P_Ice_Box_Proxy_col OBJECT_INDEX oiIceBox OBJECT_INDEX oiIceBoxProxy VECTOR vIceBoxPos = <<1388.6, 3599.4, 34.8>> VECTOR vIceBoxRot = <<0, 0, 290.0>> // @SBA - new dialogue // Enemies have gotten inside STRING sChefWarn1 = "attack_int" // Enemies are in the same/adjacent room STRING sChefWarn2 = "They_Here" // Enemies are approaching the back stairs after truck ram STRING sChefBackStairsWarn = "They_Coming" // Chef is in danger, needs help (death timer) STRING sChefHelp1 = "Need_Help" // Chef makes a periodic short exclamation about being in danger STRING sChefOutburst = "Outburst" // Chef took enough damage STRING sChefHurt = "chin_killed" BOOL bChefComeOn = FALSE BOOL bTellChefGetInside = FALSE BOOL bSetIceBoxBlip = FALSE // Cheng car dances STRING sCrazyDanceDict = "MISSChinese1CrazyDance" STRING sCrazyDanceBase = "Crazy_Dance_BASE" STRING sCrazyDance1 = "Crazy_Dance_1" STRING sCrazyDance2 = "Crazy_Dance_2" STRING sCrazyDance3 = "Crazy_Dance_3" // craziest STRING sDanceMove = sCrazyDanceBase BOOL bDanceAnimDictUnloaded = FALSE // Timer for Cheng starting/stopping dance INT iChengDanceTime INT iChengDanceStopTime = -1 ENUM CHENG_DANCE_STATE eCDS_BaseAnim, eCDS_FlavorAnim ENDENUM CHENG_DANCE_STATE eCDS_DanceState // ending BOOL bOutroShitSkip = FALSE BOOL bStartTranslatorEmergeBox = FALSE BOOL bMissionPassed = FALSE VEHICLE_INDEX viGetAwayCar // *** End additional variables *** // *** @SBA - Trigger Box Functions *** // I stole these from Bob (RJM). They proved a means of naming an angled area and using that name // to create and check the area 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 FUNC BOOL IS_ENTITY_IN_TRIGGER_BOX(ENTITY_INDEX ent, TRIGGER_BOX trigger, BOOL bDoDeadCheck = TRUE) IF NOT DOES_ENTITY_EXIST(ent) RETURN FALSE ENDIF IF bDoDeadCheck AND IS_ENTITY_DEAD(ent) RETURN FALSE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(ent, trigger.vMin, trigger.vMax, trigger.flWidth) RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - Returns TRUE if any ped in the given ped structure is in the given trigger box FUNC BOOL IS_ANY_PED_IN_TRIGGER_BOX(PED_STRUCTURE &psPedInfo[], TRIGGER_BOX trigger) INT idx FOR idx = 0 TO (COUNT_OF(psPedInfo) - 1) IF IS_ENTITY_IN_TRIGGER_BOX(psPedInfo[idx].ped, trigger) //CPRINTLN(DEBUG_MISSION, "IS_ANY_PED_IN_TRIGGER_BOX: This Ped is in a trigger box: ", psPedInfo[idx].name) RETURN TRUE ENDIF ENDFOR RETURN FALSE ENDFUNC // @SBA - Returns the PED_INDEX of the first ped in the given ped structure that is found alive in the given trigger box FUNC PED_INDEX GET_FIRST_LIVING_PED_IN_TRIGGER_BOX(PED_STRUCTURE &psPedInfo[], TRIGGER_BOX trigger) INT idx FOR idx = 0 TO (COUNT_OF(psPedInfo) - 1) IF IS_ENTITY_IN_TRIGGER_BOX(psPedInfo[idx].ped, trigger) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "GET_FIRST_LIVING_PED_IN_TRIGGER_BOX: This Ped is alive in a trigger box: ", psPedInfo[idx].name) #ENDIF RETURN psPedInfo[idx].ped ENDIF ENDFOR RETURN NULL ENDFUNC FUNC BOOL IS_PLAYER_IN_TRIGGER_BOX(TRIGGER_BOX trigger) RETURN IS_ENTITY_IN_TRIGGER_BOX(PLAYER_PED_ID(), trigger) ENDFUNC // @SBA - only remake truck, then set attributes PROC RECREATE_PLAYERS_VEHICLE(VECTOR vPos, FLOAT vHead, BOOL bSetVehicleLocked = TRUE) CREATE_VEHICLE_FOR_REPLAY(trevors_truck.veh, vPos, vHead, FALSE, FALSE, FALSE, FALSE, TRUE, BODHI2, 32, CHAR_TREVOR) INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(trevors_truck.veh,CHI1_CAR_DAMAGE) IF IS_VEHICLE_DRIVEABLE(trevors_truck.veh) IF bSetVehicleLocked set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) ENDIF set_vehicle_engine_on(trevors_truck.veh, false, true) ENDIF ENDPROC //*** @SBA - Grenade Launcher Related Functions *** // @SBA - set ammo in grenade launcher to desired ammount PROC SET_GRENADE_LAUNCHER_AMMO() IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), weapontype_grenadelauncher) SET_AMMO_IN_CLIP(PLAYER_PED_ID(), weapontype_grenadelauncher, 0) SET_PED_AMMO(PLAYER_PED_ID(), weapontype_grenadelauncher, kiGrenadeLauncherAmmo) CPRINTLN(DEBUG_MISSION,"SET_GRENADE_LAUNCHER_AMMO: Setting ammo to ", kiGrenadeLauncherAmmo) ENDIF ENDPROC // @SBA - create the grenade launcher pickup (which Chef will throw to player) PROC SETUP_GRENADE_LAUNCHER_PICKUP() // @SBA - remove the pickup on the roof to ensure we get a new one on restart IF DOES_PICKUP_EXIST(puiGrenadeLauncher) REMOVE_PICKUP(puiGrenadeLauncher) ENDIF // 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)) puiGrenadeLauncher = CREATE_PICKUP_ROTATE(PICKUP_WEAPON_GRENADELAUNCHER, (<<1407.3669, 3617.3169, 38.4050>>), (<<16.6000, 90.0000, 21.8000>>), PlacementFlags) //PRINTLN("SETUP_GRENADE_LAUNCHER_PICKUP") ENDPROC // @SBA - returns TRUE if the grenade launcher has less ammo than the required ammount FUNC BOOL DOES_GRENADE_LAUNCHER_NEED_MORE_AMMO(BOOL bSubtractPickupAmmo = FALSE) // bail if player doesn't have weapon IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), weapontype_grenadelauncher) RETURN FALSE ENDIF // check total ammo INT iClipAmmo, iPickupAmmo, iTotalAmmo GET_AMMO_IN_CLIP(PLAYER_PED_ID(), weapontype_grenadelauncher, iClipAmmo) iTotalAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), weapontype_grenadelauncher) + iClipAmmo //@SBA - if player has gotten more ammo from the pickup, don't include it in the calculation IF bSubtractPickupAmmo iPickupAmmo = GET_DEFAULT_AMMO_FOR_WEAPON_PICKUP(PICKUP_WEAPON_GRENADELAUNCHER) #IF IS_DEBUG_BUILD PRINTLN("DOES_GRENADE_LAUNCHER_NEED_MORE_AMMO: Pickup ammo = ", iPickupAmmo) PRINTLN("DOES_GRENADE_LAUNCHER_NEED_MORE_AMMO: Subtotal ammo = ", iTotalAmmo) #ENDIF iTotalAmmo = iTotalAmmo - iPickupAmmo ENDIF #IF IS_DEBUG_BUILD PRINTLN("DOES_GRENADE_LAUNCHER_NEED_MORE_AMMO: Total ammo = ", iTotalAmmo) #ENDIF IF iTotalAmmo < kiGrenadeLauncherAmmo RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - check if player has gotten grenade launcher pickup, then give appropriate ammo if needed PROC SET_AMMO_FOR_PICKED_UP_GRENADE_LAUNCHER() // Have we set the ammo once? IF bPickupAmmoSet EXIT ENDIF IF NOT DOES_PICKUP_EXIST(puiGrenadeLauncher) EXIT ENDIF // If player got pickup, check ammo level and set minimum ammount if needed IF HAS_PICKUP_BEEN_COLLECTED(puiGrenadeLauncher) // set flag to skip cutscene because player has pickup IF NOT bSkipGrenLaunchCutscene bSkipGrenLaunchCutscene = TRUE g_replay.iReplayInt[PLAYER_RECEIVED_GRENADE_LAUNCHER] = HAS_GOT_GLAUNCHER ENDIF IF DOES_GRENADE_LAUNCHER_NEED_MORE_AMMO(TRUE) SET_GRENADE_LAUNCHER_AMMO() ENDIF bPickupAmmoSet = TRUE ENDIF ENDPROC //*** @SBA - Wave Rusher Related Functions *** // @SBA - set some attributes for rushers PROC SET_ENEMY_RUSHER_ATTRIBUTES(PED_INDEX piRusher, INT iNewAccuracy, FLOAT fBlanksCloseChance, FLOAT fBlanksFarChance) IF PRIVATE_isEntityAlive(piRusher) SET_PED_CHANCE_OF_FIRING_BLANKS(piRusher, fBlanksCloseChance, fBlanksFarChance) SET_PED_ACCURACY(piRusher, iNewAccuracy) ENDIF ENDPROC // @SBA - Returns TRUE if the passed in ped info shows the ped is ok and hasn't rushed yet FUNC BOOL IS_ENEMY_VALID_FOR_RUSHING(PED_STRUCTURE &psPedInfo, main_mission_shootout &PedStatus, BOOL bCheckStatus = FALSE) // @SBA - Check if the ped is in the correct state to process a rush. // In some cases we don't want to do this as it would inturrupt the peds' strict rushing order. IF bCheckStatus IF PedStatus != run_into_shop AND PedStatus != run_to_front_of_building // @SBA - wave0 uses this one #IF IS_DEBUG_BUILD PRINTLN("IS_ENEMY_VALID_FOR_RUSHING: This Ped is not in the correct state: ", psPedInfo.name) #ENDIF RETURN FALSE ENDIF ENDIF IF NOT IS_PED_INJURED(psPedInfo.ped) IF NOT psPedInfo.bRushInside #IF IS_DEBUG_BUILD PRINTLN("IS_ENEMY_VALID_FOR_RUSHING: Ped is VALID, setting rush flag for: ", psPedInfo.name) #ENDIF psPedInfo.bRushInside = TRUE RETURN TRUE ENDIF ELSE // If the ped is injured, set this flag true anyway for tracking IF NOT psPedInfo.bRushInside #IF IS_DEBUG_BUILD PRINTLN("IS_ENEMY_VALID_FOR_RUSHING: Ped is INJURED, setting rush flag for: ", psPedInfo.name) #ENDIF psPedInfo.bRushInside = TRUE ENDIF ENDIF RETURN FALSE ENDFUNC // @SBA - determines and returns the index for the next valid enemy in wave 0 // Lets the enemies be checked in a specific order FUNC INT GET_NEXT_WAVE_0_INDEX() IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[3], wave_0_status[3], TRUE) RETURN 3 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[1], wave_0_status[1], TRUE) RETURN 1 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[4], wave_0_status[4], TRUE) RETURN 4 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[0], wave_0_status[0], TRUE) RETURN 0 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[5], wave_0_status[5], TRUE) RETURN 5 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[2], wave_0_status[2], TRUE) RETURN 2 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[6], wave_0_status[6], TRUE) RETURN 6 ENDIF // @SBA - don't currently need the last two, since the truck smashing the gate should intervene // when two (or fewer) enemies are left // IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[7], wave_0_status[7]) // RETURN 7 // ENDIF // // IF IS_ENEMY_VALID_FOR_RUSHING(wave_0_enemy[8], wave_0_status[8]) // RETURN 8 // ENDIF // No valid enemy found RETURN -1 ENDFUNC // @SBA - determines and returns the index for the next valid enemy in wave 2 // Lets the enemies be checked in a specific order, but will skip a ped that's not in the correct state FUNC INT GET_NEXT_WAVE_2_INDEX() IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[5], wave_2_status[5], TRUE) RETURN 5 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[4], wave_2_status[4], TRUE) RETURN 4 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[1], wave_2_status[1], TRUE) RETURN 1 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[0], wave_2_status[0], TRUE) RETURN 0 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[2], wave_2_status[2], TRUE) RETURN 2 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[18], wave_2_status[18], TRUE) RETURN 18 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[3], wave_2_status[3], TRUE) RETURN 3 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[19], wave_2_status[19], TRUE) RETURN 19 ENDIF // @SBA - the enemies below are the second part of wave 2 IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[6], wave_2_status[6], TRUE) RETURN 6 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[7], wave_2_status[7], TRUE) RETURN 7 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[8], wave_2_status[8], TRUE) RETURN 8 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[9], wave_2_status[9], TRUE) RETURN 9 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[10], wave_2_status[10], TRUE) RETURN 10 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[11], wave_2_status[11], TRUE) RETURN 11 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[12], wave_2_status[12], TRUE) RETURN 12 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[13], wave_2_status[13], TRUE) RETURN 13 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[14], wave_2_status[14], TRUE) RETURN 14 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[15], wave_2_status[15], TRUE) RETURN 15 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[16], wave_2_status[16], TRUE) RETURN 16 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_2_enemy[17], wave_2_status[17], TRUE) RETURN 17 ENDIF // No valid enemy found RETURN -1 ENDFUNC // @SBA Returns a randomized time to wait between rush attempts for wave 2 //FUNC INT GET_RANDOM_WAIT_TIME_FOR_WAVE_2(INT iEnemyRushCount) // // // Return a "long" time after two rushes // IF iEnemyRushCount % 2 = 0 // RETURN GET_RANDOM_INT_IN_RANGE(15000, 20000) // ENDIF // // // Otherwise return a "normal" time // RETURN GET_RANDOM_INT_IN_RANGE(2500, 4000) //ENDFUNC // @SBA - checks if enemies have been set to rush and are still alive. If we have too few, it's ok to request more. FUNC BOOL ARE_WE_READY_FOR_A_NEW_RUSHER(PED_STRUCTURE &psPedInfo[], INT iMaxNumRushers = kiNumberOfWaveRushersAllowed) INT k, iCounter // @SBA - count up the number of enemies who have been told to rush and are uninjured FOR k = 0 TO COUNT_OF(psPedInfo) - 1 IF psPedInfo[k].bRushInside IF NOT IS_PED_INJURED(psPedInfo[k].ped) //CPRINTLN(DEBUG_MISSION, "*** ARE_WE_READY_FOR_A_NEW_RUSHER: Counting enemy ", k) iCounter ++ ENDIF ENDIF ENDFOR // CPRINTLN(DEBUG_MISSION, "*** ARE_WE_READY_FOR_A_NEW_RUSHER: Number of active rushers = ", iCounter) // CPRINTLN(DEBUG_MISSION, "*** ARE_WE_READY_FOR_A_NEW_RUSHER: Max Number of rushers = ", iMaxNumRushers) // @SBA - if we're below the max number of allowed rushers at one time, it's ok to request a new one IF iCounter < iMaxNumRushers RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - determines and returns the index for the next valid enemy in wave 3 // Lets the enemies be checked in a specific order FUNC INT GET_NEXT_WAVE_3_INDEX() IF IS_ENEMY_VALID_FOR_RUSHING(wave_3_enemy[2], wave_3_status[2]) RETURN 2 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_3_enemy[3], wave_3_status[3]) RETURN 3 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_3_enemy[1], wave_3_status[1]) RETURN 1 ENDIF IF IS_ENEMY_VALID_FOR_RUSHING(wave_3_enemy[0], wave_3_status[0]) RETURN 0 ENDIF // No valid enemy found RETURN -1 ENDFUNC // @SBA Returns a randomized time to wait between rush attempts for wave 3 FUNC INT GET_RANDOM_WAIT_TIME_FOR_WAVE_3() // Return a shorter time after the third rush IF wave_3_enemy[1].bRushInside RETURN GET_RANDOM_INT_IN_RANGE(4000, 6000) // Or return a longer time after first two rushes ELIF wave_3_enemy[2].bRushInside AND wave_3_enemy[3].bRushInside RETURN GET_RANDOM_INT_IN_RANGE(20000, 25000) ENDIF // Otherwise return a "normal" time RETURN GET_RANDOM_INT_IN_RANGE(6000, 8000) ENDFUNC //*** @SBA - Other General Functions *** // @SBA - sets the given ped's health, if not already set to that value PROC SET_HEALTH_FOR_PED(PED_INDEX piPed, INT iNewHealth) IF DOES_ENTITY_EXIST(piPed) IF NOT IS_ENTITY_DEAD(piPed) IF GET_ENTITY_HEALTH(piPed) != iNewHealth SET_ENTITY_HEALTH(piPed, iNewHealth) ENDIF ENDIF ENDIF ENDPROC // @SBA - creates a blip for the ped in the passed-in struct if he's not in a vehicle PROC HANDLE_ENEMY_BLIP_CREATION(PED_STRUCTURE &psPedInfo) IF NOT DOES_BLIP_EXIST(psPedInfo.blip) IF NOT IS_PED_IN_ANY_VEHICLE(psPedInfo.ped) psPedInfo.blip = CREATE_BLIP_FOR_PED(psPedInfo.ped, TRUE) SET_BLIP_DISPLAY(psPedInfo.blip, DISPLAY_BLIP) ENDIF ENDIF ENDPROC PROC REMOVE_VEHICLE_BLIP(vehicle_struct &vsVeh) IF DOES_BLIP_EXIST(vsVeh.blip) REMOVE_BLIP(vsVeh.blip) ENDIF ENDPROC PROC REMOVE_DEAD_VEHICLE_BLIPS(vehicle_struct &vsVeh[]) INT idx REPEAT COUNT_OF(vsVeh) idx IF DOES_BLIP_EXIST(vsVeh[idx].blip) IF DOES_ENTITY_EXIST(vsVeh[idx].veh) IF NOT IS_VEHICLE_DRIVEABLE(vsVeh[idx].veh) REMOVE_BLIP(vsVeh[idx].blip) ELSE IS_VEHICLE_EMPTY(vsVeh[idx].veh, TRUE) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsVeh[idx].veh) CPRINTLN(DEBUG_MISSION, "REMOVE_DEAD_VEHICLE_BLIPS: Vehicle has no living ped in it, removing blip.") REMOVE_BLIP(vsVeh[idx].blip) ENDIF ENDIF ENDIF ENDIF ENDREPEAT ENDPROC // @SBA - bit of a hack to blow up player if he's silly PROC KILL_INVINCIBLE_PLAYER_IF_IN_EXPLOSION() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), 5.0) SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, FALSE, FALSE, TRUE, TRUE) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) APPLY_DAMAGE_TO_PED(PLAYER_PED_ID(), 1000, TRUE) ENDIF ENDIF ENDPROC // so we can recreate the live ones, if we want PROC STORE_ENEMY_VEHICLES_STILL_ALIVE() INT iCounter = 0 g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_BOTH_CARS_DEAD IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[0].veh) IF NOT IS_ENTITY_DEAD(wave_0_enemy_vehicle[0].veh) g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_ONLY_CAR0_ALIVE iCounter ++ ENDIF ENDIF IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[1].veh) IF NOT IS_ENTITY_DEAD(wave_0_enemy_vehicle[1].veh) g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_ONLY_CAR1_ALIVE iCounter ++ ENDIF ENDIF IF iCounter = 2 g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_BOTH_CARS_ALIVE ENDIF CPRINTLN(DEBUG_MISSION,"STORE_ENEMY_VEHICLES_STILL_ALIVE: setting to ", g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES]) ENDPROC PROC HANDLE_VEHICLE_TOO_NEAR_ICE_BOX() IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) EXIT ENDIF IF NOT IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxOuterVol) EXIT ENDIF IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 4.0) TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID()) ENDIF ENDPROC proc remove_all_blips() if does_blip_exist(outside_meth_lab_blip) remove_blip(outside_meth_lab_blip) endif if does_blip_exist(meth_lab_blip) remove_blip(meth_lab_blip) endif if does_blip_exist(buddy.blip) remove_blip(buddy.blip) endif if does_blip_exist(cheng.blip) remove_blip(cheng.blip) endif if does_blip_exist(translator.blip) remove_blip(translator.blip) endif // @SBA - remove ice box blip as well if does_blip_exist(ice_box_blip) remove_blip(ice_box_blip) endif for i = 0 to count_of(wave_0_enemy) - 1 if does_blip_exist(wave_0_enemy[i].blip) remove_blip(wave_0_enemy[i].blip) endif endfor for i = 0 to count_of(wave_0_inside_enemy) - 1 if does_blip_exist(wave_0_inside_enemy[i].blip) remove_blip(wave_0_inside_enemy[i].blip) endif endfor for i = 0 to count_of(wave_2_enemy) - 1 if does_blip_exist(wave_2_enemy[i].blip) remove_blip(wave_2_enemy[i].blip) endif endfor for i = 0 to count_of(wave_3_enemy) - 1 if does_blip_exist(wave_3_enemy[i].blip) remove_blip(wave_3_enemy[i].blip) endif endfor // vehicles too for i = 0 to count_of(wave_0_enemy_vehicle) - 1 REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[i]) ENDFOR for i = 0 to count_of(wave_2_enemy_vehicle) - 1 REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[i]) ENDFOR for i = 0 to count_of(wave_3_enemy_vehicle) - 1 REMOVE_VEHICLE_BLIP(wave_3_enemy_vehicle[i]) ENDFOR endproc PROC RECORD_ENEMY_IN_ARRAY_KILLED(ped_structure &enemyStruct[]) INT k REPEAT COUNT_OF(enemyStruct) k IF DOES_ENTITY_EXIST(enemyStruct[k].ped) IF NOT enemyStruct[k].been_killed IF IS_ENTITY_DEAD(enemyStruct[k].ped) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(enemyStruct[k].ped, PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "RECORD_ENEMY_IN_ARRAY_KILLED") enemyStruct[k].been_killed = TRUE INFORM_MISSION_STATS_OF_INCREMENT(CHI1_BODY_COUNT) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(enemyStruct[k].ped, weapontype_grenadelauncher) CPRINTLN(DEBUG_MISSION, "CHI1_GRENADE_LAUNCHER_KILLS") INFORM_MISSION_STATS_OF_INCREMENT(CHI1_GRENADE_LAUNCHER_KILLS) ENDIF ENDIF ENDIF ENDIF ENDIF ENDREPEAT ENDPROC PROC RECORD_VEHICLE_IN_ARRAY_DESTROYED(vehicle_struct &vehStruct[]) INT k REPEAT COUNT_OF(vehStruct) k IF DOES_ENTITY_EXIST(vehStruct[k].veh) IF NOT vehStruct[k].been_destroyed IF IS_ENTITY_DEAD(vehStruct[k].veh) CPRINTLN(DEBUG_MISSION, "RECORD_VEHICLE_IN_ARRAY_DESTROYED") vehStruct[k].been_destroyed = TRUE INFORM_MISSION_STATS_OF_INCREMENT(CHI1_VEHICLES_DESTROYED) ENDIF ENDIF ENDIF ENDREPEAT ENDPROC PROC UPDATE_DAMAGE_WATCH_STATS() IF IS_ENTITY_DEAD(PLAYER_PED_ID()) EXIT ENDIF IF bPlayerInVehicle IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "UPDATE_DAMAGE_WATCH_STATS: Player is NOT in vehicle.") INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(PLAYER_PED_ID(), CHI1_UNMARKED) INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(player_ped_id()) bPlayerInVehicle = FALSE ENDIF ELSE IF DOES_ENTITY_EXIST(trevors_truck.veh) IF IS_VEHICLE_DRIVEABLE(trevors_truck.veh) IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), trevors_truck.veh) CPRINTLN(DEBUG_MISSION, "UPDATE_DAMAGE_WATCH_STATS: Player IS in vehicle.") INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(trevors_truck.veh, CHI1_CAR_DAMAGE) INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(trevors_truck.veh) bPlayerInVehicle = TRUE ENDIF ENDIF ENDIF ENDIF ENDPROC // Update stats PROC HANDLE_CHINESE1_STATS() RECORD_ENEMY_IN_ARRAY_KILLED(wave_0_enemy) RECORD_ENEMY_IN_ARRAY_KILLED(wave_0_inside_enemy) RECORD_ENEMY_IN_ARRAY_KILLED(wave_2_enemy) RECORD_ENEMY_IN_ARRAY_KILLED(wave_3_enemy) RECORD_ENEMY_IN_ARRAY_KILLED(ambient_enemy) RECORD_VEHICLE_IN_ARRAY_DESTROYED(wave_0_enemy_vehicle) RECORD_VEHICLE_IN_ARRAY_DESTROYED(wave_2_enemy_vehicle) RECORD_VEHICLE_IN_ARRAY_DESTROYED(wave_3_enemy_vehicle) RECORD_VEHICLE_IN_ARRAY_DESTROYED(ambient_enemy_vehicle) UPDATE_DAMAGE_WATCH_STATS() ENDPROC //**************************************************LAWRENCE SDK************************************************** proc disable_dispatch_services() enable_dispatch_service(dt_fire_department, false) enable_dispatch_service(dt_police_automobile, false) enable_dispatch_service(dt_police_helicopter, false) enable_dispatch_service(dt_ambulance_department, false) endproc proc enable_dispatch_services() enable_dispatch_service(dt_fire_department, true) enable_dispatch_service(dt_police_automobile, true) enable_dispatch_service(dt_police_helicopter, true) enable_dispatch_service(dt_ambulance_department, true) endproc func bool HAVE_ALL_STREAMING_REQUESTS_COMPLETED_for_ped(ped_index miss_ped) if does_entity_exist(miss_ped) if not is_ped_injured(miss_ped) if HAVE_ALL_STREAMING_REQUESTS_COMPLETED(miss_ped) return true endif endif endif return false endfunc func bool start_new_cutscene_no_fade(bool clear_players_tasks = true, bool hide_weapon_for_cutscene = true, bool kill_conversation_line_immediately = true, BOOL dDisplayRadarHud = FALSE, bool ignore_can_player_start_cutscene = false) if can_player_start_cutscene() or ignore_can_player_start_cutscene SPECIAL_ABILITY_DEACTIVATE(player_id()) SET_SCRIPTS_SAFE_FOR_CUTSCENE(true) clear_prints() clear_help() if kill_conversation_line_immediately KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() else kill_any_conversation() endif display_hud(dDisplayRadarHud) display_radar(dDisplayRadarHud) set_widescreen_borders(true, 500) if clear_players_tasks set_player_control(player_id(), false, spc_clear_tasks) else set_player_control(player_id(), false) endif if hide_weapon_for_cutscene hide_ped_weapon_for_scripted_cutscene(player_ped_id(), true) endif disable_dispatch_services() return true endif return false endfunc proc end_cutscene(bool clear_tasks = true, float interp_heading = 0.0, float interp_pitch = 0.0, bool enable_emergency_services = true) SET_SCRIPTS_SAFE_FOR_CUTSCENE(false) clear_prints() clear_help() kill_face_to_face_conversation() display_hud(true) display_radar(true) set_widescreen_borders(false, 500) if is_player_playing(player_id()) render_script_cams(false, false) set_gameplay_cam_relative_heading(interp_heading) set_gameplay_cam_relative_pitch(interp_pitch) if clear_tasks clear_ped_tasks(player_ped_id()) endif set_player_control(player_id(), true) hide_ped_weapon_for_scripted_cutscene(player_ped_id(), false) endif if enable_emergency_services enable_dispatch_services() else disable_dispatch_services() endif // if mission_car_marked // mark_vehicle_as_no_longer_needed(current_car) // mission_car_marked = false // endif //allow_emergency_services(true) do_screen_fade_in(DEFAULT_FADE_TIME) endproc proc end_cutscene_no_fade(bool clear_tasks = true, bool interpolate_behind_player = false, float interp_heading = 0.0, float interp_pitch = 0.0, int interp_to_game_time = 3000, bool enable_emergency_services = true, bool update_game_camera = true) SET_SCRIPTS_SAFE_FOR_CUTSCENE(false) clear_prints() clear_help() kill_face_to_face_conversation() display_hud(true) display_radar(true) set_widescreen_borders(false, 500) // 500 if is_player_playing(player_id()) destroy_all_cams() if update_game_camera if interpolate_behind_player set_gameplay_cam_relative_heading(interp_heading) set_gameplay_cam_relative_pitch(interp_pitch) render_script_cams(false, true, interp_to_game_time) else render_script_cams(false, false) set_gameplay_cam_relative_heading(interp_heading) set_gameplay_cam_relative_pitch(interp_pitch) endif endif if clear_tasks clear_ped_tasks(player_ped_id()) endif set_player_control(player_id(), true) hide_ped_weapon_for_scripted_cutscene(player_ped_id(), false) endif if enable_emergency_services enable_dispatch_services() else disable_dispatch_services() endif endproc // @SBA - no frills PROC END_CUTSCENE_BASIC() SET_SCRIPTS_SAFE_FOR_CUTSCENE(false) clear_prints() clear_help() kill_face_to_face_conversation() display_hud(true) display_radar(true) set_widescreen_borders(false, 500) // 500 if is_player_playing(player_id()) set_player_control(player_id(), true) hide_ped_weapon_for_scripted_cutscene(player_ped_id(), false) ENDIF ENDPROC func bool lk_timer(int &start_time, int time) int current_time current_time = get_game_timer() if ((current_time - start_time) > time) return true endif return false endfunc func bool is_skip_button_pressed() return is_control_just_pressed(frontend_control, input_frontend_accept) endfunc func bool skip_scripted_cut(int &original_time_temp, int cutscene_skip_time) if lk_timer(original_time_temp, cutscene_skip_time) if is_screen_faded_in() if IS_CUTSCENE_SKIP_BUTTON_PRESSED() return true endif endif endif return false endfunc func bool mission_ped_created_and_injured(bool &mission_ped_created, ped_index &mission_ped) if mission_ped_created return is_ped_injured(mission_ped) endif return false endfunc func bool mission_ped_injured(ped_index &this_ped) if DOES_ENTITY_EXIST(this_ped) return is_ped_injured(this_ped) endif return false endfunc func bool mission_vehicle_injured(vehicle_index &this_vehicle) if DOES_ENTITY_EXIST(this_vehicle) if not is_vehicle_driveable(this_vehicle) return true endif endif return false endfunc func bool is_mission_entity_attacked(ped_index &mission_ped, bool clear_damage_entity = false) if DOES_ENTITY_EXIST(mission_ped) if not is_ped_injured(mission_ped) if HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mission_ped, PLAYER_ped_ID()) if clear_damage_entity CLEAR_ENTITY_LAST_DAMAGE_ENTITY(mission_ped) endif return true endif else return true endif endif return false endfunc func bool has_char_task_finished_2(ped_index ped, script_task_name taskname) scripttaskstatus status status = get_script_task_status(ped, taskname) if status = finished_task or status = dormant_task return true endif return false endfunc //gets the currenent car the player is in func bool get_current_player_vehicle(vehicle_index &test_car) if is_ped_sitting_in_any_vehicle(player_ped_id()) test_car = get_players_last_vehicle() if DOES_ENTITY_EXIST(test_car) if is_vehicle_driveable(test_car) return true endif endif endif return false endfunc PROC STOP_PLAYER_vehicle() VEHICLE_INDEX player_car if get_current_player_vehicle(player_car) FLOAT player_car_speed SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) SET_ENTITY_PROOFS(player_car, true, true, true, true, true) player_car_speed = GET_ENTITY_SPEED(player_car) WHILE player_car_speed > 0.2 WAIT(0) if not IS_ENTITY_DEAD(player_car) player_car_speed = GET_ENTITY_SPEED(player_car) endif ENDWHILE SET_ENTITY_PROOFS(player_car, false, false, false, false, false) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF ENDPROC func bool add_ped_to_players_group(ped_index &this_ped, group_index &players_group) if DOES_ENTITY_EXIST(this_ped) if not is_ped_injured(this_ped) players_group = get_player_group(player_id()) set_ped_as_group_member(this_ped, players_group) return true endif endif return false endfunc func float distance_from_player_to_ped(ped_index &mission_ped) vector player_pos vector mission_ped_pos if DOES_ENTITY_EXIST(mission_ped) if not is_ped_injured(mission_ped) player_pos = GET_ENTITY_COORDS(player_ped_id()) mission_ped_pos = GET_ENTITY_COORDS(mission_ped) return get_distance_between_coords(player_pos, mission_ped_pos) endif endif return -1.0 endfunc func bool has_ped_task_finished_2(ped_index ped, script_task_name taskname = script_task_perform_sequence) scripttaskstatus status status = get_script_task_status(ped, taskname) if status = finished_task or status = dormant_task return true endif return false endfunc func bool is_ped_playing_anim_at_phase(string anim_dict_name, string anim_name, float phase_target) // printstring("test 0") // printnl() if IS_ENTITY_PLAYING_ANIM(player_ped_id(), anim_dict_name, anim_name) // printstring("test 1") // printnl() if GET_ENTITY_ANIM_CURRENT_TIME(player_ped_id(), anim_dict_name, anim_name) > phase_target // script_assert("test 2") return true endif endif return false endfunc func bool are_vectors_alomost_equal(vector vector_a, vector vector_b, vector unit_vector_x_multiplier) //vec b is the target vector //vec a is the current positon of the object //unit_vector_x_multiplier is the unitvector * frame time * multiplier vector vector_ba vector future_vector vector_ba = vector_b - vector_a if (vmag(vector_ba) < 0.2) return true endif future_vector = (vector_b - (vector_a + unit_vector_x_multiplier)) if (vmag(future_vector) > vmag(vector_ba)) return true endif return false endfunc //The players group does not include the player himself. RELGROUPHASH_PLAYER is the player REL_GROUP_HASH player_group REL_GROUP_HASH enemy_group proc add_relationship_groups() ADD_RELATIONSHIP_GROUP("players group", player_group) ADD_RELATIONSHIP_GROUP("enemy group", enemy_group) endproc proc setup_relationship_contact(ped_index &this_ped, bool block_temporary_events = false) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_LIKE, player_group, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, player_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, enemy_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, player_group, enemy_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, enemy_group, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, enemy_group, player_group) if DOES_ENTITY_EXIST(this_ped) if NOT is_ped_injured(this_ped) SET_PED_RELATIONSHIP_GROUP_HASH(this_ped, player_group) SET_PED_TARGET_LOSS_RESPONSE(this_ped, tlr_never_lose_target) set_ped_combat_attributes(this_ped, CA_DISABLE_PINNED_DOWN, true) set_ped_combat_attributes(this_ped, CA_DISABLE_PIN_DOWN_OTHERS, true) if block_temporary_events set_blocking_of_non_temporary_events(this_ped, true) else set_blocking_of_non_temporary_events(this_ped, false) endif endif endif endproc proc setup_relationship_enemy(ped_index &this_ped, bool block_temporary_events = false) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_LIKE, player_group, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, player_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, enemy_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, player_group, enemy_group) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, enemy_group, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_between_groups(ACQUAINTANCE_TYPE_PED_HATE, enemy_group, player_group) if DOES_ENTITY_EXIST(this_ped) if NOT is_ped_injured(this_ped) SET_ped_RELATIONSHIP_GROUP_hash(this_ped, enemy_group) set_ped_combat_attributes(this_ped, ca_will_scan_for_dead_peds, false) SET_PED_COMBAT_ATTRIBUTES(this_ped, ca_use_vehicle, false) SET_PED_COMBAT_ATTRIBUTES(this_ped, CA_LEAVE_VEHICLES, true) set_ped_combat_attributes(this_ped, CA_DISABLE_PINNED_DOWN, true) set_ped_combat_attributes(this_ped, CA_DISABLE_PIN_DOWN_OTHERS, true) set_ped_combat_movement(this_ped, cm_defensive) SET_PED_TARGET_LOSS_RESPONSE(this_ped, tlr_never_lose_target) set_entity_is_target_priority(this_ped, true) if block_temporary_events set_blocking_of_non_temporary_events(this_ped, true) else set_blocking_of_non_temporary_events(this_ped, false) endif endif endif endproc proc setup_enemy_attributes(ped_structure &mission_entity) set_ped_dies_when_injured(mission_entity.ped, true) set_ped_as_enemy(mission_entity.ped, true) set_entity_is_target_priority(mission_entity.ped, true) set_ped_keep_task(mission_entity.ped, true) set_ped_can_evasive_dive(mission_entity.ped, true) set_blocking_of_non_temporary_events(mission_entity.ped, true) SET_PED_CONFIG_FLAG(mission_entity.ped, PCF_KeepRelationshipGroupAfterCleanUp, true) set_ped_config_flag(mission_entity.ped, PCF_DisableHurt, true) give_weapon_to_ped(mission_entity.ped, mission_entity.weapon, infinite_ammo, true) set_ped_accuracy(mission_entity.ped, mission_entity.accuracy) SET_ENTITY_HEALTH(mission_entity.ped, mission_entity.health) set_ped_max_health(mission_entity.ped, mission_entity.health) if mission_entity.damaged_by_player SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(mission_entity.ped, true) endif if mission_entity.allow_body_armour add_armour_to_ped(mission_entity.ped, 100) endif mission_entity.created = true set_ped_name_debug(mission_entity.ped, mission_entity.name) set_ped_hearing_range(mission_entity.ped, 250.00) set_ped_seeing_range(mission_entity.ped, 250.00) set_ped_id_range(mission_entity.ped, 250.00) mission_entity.blip = create_blip_for_ped(mission_entity.ped, true) set_blip_display(mission_entity.blip, DISPLAY_BLIP) INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(mission_entity.ped) endproc proc setup_enemy(ped_structure &enemy) clear_area(enemy.pos, 2.0, true) enemy.ped = create_ped(pedtype_mission, enemy.model, enemy.pos, enemy.heading) set_ped_random_component_variation(enemy.ped) set_ped_dies_when_injured(enemy.ped, true) set_ped_as_enemy(enemy.ped, true) set_entity_is_target_priority(enemy.ped, true) set_ped_keep_task(enemy.ped, true) SET_PED_CONFIG_FLAG(enemy.ped, PCF_KeepRelationshipGroupAfterCleanUp, true) set_ped_config_flag(enemy.ped, PCF_DisableHurt, true) give_weapon_to_ped(enemy.ped, enemy.weapon, infinite_ammo, true) SET_ENTITY_HEALTH(enemy.ped, enemy.health) set_ped_max_health(enemy.ped, enemy.health) if enemy.damaged_by_player SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(enemy.ped, true) endif if enemy.allow_body_armour add_armour_to_ped(enemy.ped, 100) endif set_ped_name_debug(enemy.ped, enemy.name) set_ped_seeing_range(enemy.ped, 250.00) set_ped_hearing_range(enemy.ped, 250.00) set_ped_id_range(enemy.ped, 250.00) enemy.blip = CREATE_BLIP_FOR_PED(enemy.ped, true) set_blip_display(enemy.blip, DISPLAY_BLIP) set_ped_can_evasive_dive(enemy.ped, true) setup_relationship_enemy(enemy.ped, true) set_ped_accuracy(enemy.ped, enemy.accuracy) INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(enemy.ped) //CHI1_BODY_COUNT stats enemy.created = true endproc proc setup_buddy(ped_structure &mission_buddy, BOOL bCreateBlip = TRUE) clear_area(mission_buddy.pos, 4.0, true) mission_buddy.ped = create_ped(pedtype_mission, mission_buddy.model, mission_buddy.pos, mission_buddy.heading) set_entity_health(mission_buddy.ped, mission_buddy.health) set_ped_dies_when_injured(mission_buddy.ped, false) set_ped_can_be_targetted(mission_buddy.ped, false) set_ped_suffers_critical_hits(mission_buddy.ped, false) set_ped_can_evasive_dive(mission_buddy.ped, false) set_entity_is_target_priority(mission_buddy.ped, false) set_ped_keep_task(mission_buddy.ped, true) set_ped_can_ragdoll(mission_buddy.ped, false) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(mission_buddy.ped, false) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_KeepRelationshipGroupAfterCleanUp, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_WillFlyThroughWindscreen, false) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_RunFromFiresAndExplosions, FALSE) set_ped_config_flag(mission_buddy.ped, PCF_CanActivateRagdollWhenVehicleUpsideDown, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_DisableExplosionReactions, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_DisableHurt, true) set_ped_name_debug(mission_buddy.ped, mission_buddy.name) // @SBA - sometimes we don't want a blip IF bCreateBlip mission_buddy.blip = CREATE_BLIP_FOR_PED(mission_buddy.ped, false) set_blip_display(mission_buddy.blip, DISPLAY_BLIP) // Also will set Cheng and translator, but shouldn't hurt since there are no enemies, etc. while they exist. SET_BLIP_PRIORITY(mission_buddy.blip, BLIPPRIORITY_HIGHEST) ENDIF IF mission_buddy.weapon != WEAPONTYPE_INVALID give_weapon_to_ped(mission_buddy.ped, mission_buddy.weapon, infinite_ammo, false) ENDIF set_ped_seeing_range(mission_buddy.ped, 250.00) set_ped_hearing_range(mission_buddy.ped, 250.00) set_ped_id_range(mission_buddy.ped, 250.00) // give glasses IF mission_buddy.model = GET_NPC_PED_MODEL(CHAR_CHEF) OR mission_buddy.model = GET_NPC_PED_MODEL(CHAR_cheng) OR mission_buddy.model = IG_TaosTranslator SET_PED_PROP_INDEX(mission_buddy.ped, ANCHOR_EYES, 0) //Glasses prop. ENDIF setup_relationship_contact(mission_buddy.ped, true) endproc // @SBA - create Chef for initial cutscene PROC HANDLE_SETUP_INITIAL_CHEF() IF NOT DOES_ENTITY_EXIST(buddy.ped) IF HAS_MODEL_LOADED(buddy.model) setup_buddy(buddy, FALSE) CPRINTLN(DEBUG_MISSION, "HANDLE_SETUP_INITIAL_CHEF: Chef has been created") ENDIF ENDIF ENDPROC proc setup_buddy_attributes(ped_structure &mission_buddy) set_entity_health(mission_buddy.ped, mission_buddy.health) set_ped_dies_when_injured(mission_buddy.ped, false) set_ped_can_be_targetted(mission_buddy.ped, false) set_ped_suffers_critical_hits(mission_buddy.ped, false) set_ped_can_evasive_dive(mission_buddy.ped, false) set_entity_is_target_priority(mission_buddy.ped, false) set_ped_keep_task(mission_buddy.ped, true) set_ped_can_ragdoll(mission_buddy.ped, false) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_KeepRelationshipGroupAfterCleanUp, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_WillFlyThroughWindscreen, false) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_RunFromFiresAndExplosions, FALSE) set_ped_config_flag(mission_buddy.ped, PCF_CanActivateRagdollWhenVehicleUpsideDown, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_DisableExplosionReactions, true) SET_PED_CONFIG_FLAG(mission_buddy.ped, PCF_DisableHurt, true) set_ped_name_debug(mission_buddy.ped, mission_buddy.name) IF mission_buddy.weapon != WEAPONTYPE_INVALID give_weapon_to_ped(mission_buddy.ped, mission_buddy.weapon, infinite_ammo, false) ENDIF set_ped_seeing_range(mission_buddy.ped, 250.00) set_ped_hearing_range(mission_buddy.ped, 250.00) set_ped_id_range(mission_buddy.ped, 250.00) endproc PROC SET_START_VERSIONS_OF_BUDDIES() IF NOT IS_PED_INJURED(cheng.ped) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HEAD, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_BERD, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HAIR, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_TORSO, 2, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_LEG, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HAND, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_FEET, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_TEETH, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_SPECIAL, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_SPECIAL2, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_DECL, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_JBIB, 1, 0) SET_PED_PROP_INDEX(cheng.ped, ANCHOR_EYES,0) ENDIF IF NOT IS_PED_INJURED(translator.ped) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HEAD, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_BERD, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HAIR, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_TORSO, 1, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_LEG, 1, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HAND, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_FEET, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_TEETH, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_SPECIAL, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_SPECIAL2, 1, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_DECL, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_JBIB, 1, 0) SET_PED_PROP_INDEX(translator.ped, ANCHOR_EYES,0) ENDIF ENDPROC PROC INIT_CHENGS_CRAZY_CAR_DANCING(INT iTime = 4000) eCDS_DanceState = eCDS_BaseAnim sDanceMove = sCrazyDanceBase iChengDanceTime = GET_GAME_TIMER() + iTime iChengDanceStopTime = -1 ENDPROC PROC HANDLE_CHENGS_CRAZY_CAR_DANCING() IF NOT DOES_ENTITY_EXIST(cheng.ped) EXIT ELIF IS_PED_INJURED(cheng.ped) EXIT ENDIF // don't dance after aproaching meth lab IF get_to_meth_lab_status > 0 IF GET_SCRIPT_TASK_STATUS(cheng.ped, SCRIPT_TASK_PLAY_ANIM) = PERFORMING_TASK CLEAR_PED_TASKS(cheng.ped) ENDIF EXIT ENDIF // if player has left car clear peds tasks if needed so Cheng can exit IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_SCRIPT_TASK_STATUS(cheng.ped, SCRIPT_TASK_PLAY_ANIM) = PERFORMING_TASK CLEAR_PED_TASKS(cheng.ped) ENDIF INIT_CHENGS_CRAZY_CAR_DANCING() EXIT ENDIF ENDIF // Only dance to certain music IF GET_PLAYER_RADIO_STATION_GENRE() != ENUM_TO_INT(RADIO_GENRE_DANCE) AND GET_PLAYER_RADIO_STATION_GENRE() != ENUM_TO_INT(RADIO_GENRE_POP) IF iChengDanceStopTime = -1 iChengDanceStopTime = GET_GAME_TIMER() + 1000 ENDIF ENDIF IF iChengDanceStopTime != -1 IF GET_GAME_TIMER() > iChengDanceStopTime IF GET_SCRIPT_TASK_STATUS(cheng.ped, SCRIPT_TASK_PLAY_ANIM) = PERFORMING_TASK CLEAR_PED_TASKS(cheng.ped) ENDIF INIT_CHENGS_CRAZY_CAR_DANCING(2000) EXIT ENDIF ENDIF // don't dance if not in a vehicle IF NOT IS_PED_SITTING_IN_ANY_VEHICLE(cheng.ped) IF GET_SCRIPT_TASK_STATUS(cheng.ped, SCRIPT_TASK_PLAY_ANIM) = PERFORMING_TASK CLEAR_PED_TASKS(cheng.ped) ENDIF INIT_CHENGS_CRAZY_CAR_DANCING() EXIT ELSE // only dance in front passenger seat IF GET_SEAT_PED_IS_IN(cheng.ped) != VS_FRONT_RIGHT EXIT ENDIF // only dance in trevors truck VEHICLE_INDEX viChengVeh = GET_VEHICLE_PED_IS_IN(cheng.ped) IF NOT IS_VEHICLE_MODEL(viChengVeh, trevors_truck.model) EXIT ENDIF ENDIF IF GET_GAME_TIMER() < iChengDanceTime //CPRINTLN(DEBUG_MISSION, "HANDLE_CHENGS_CRAZY_CAR_DANCING: timer ", iChengDanceTime - GET_GAME_TIMER()) EXIT ENDIF // If ped is in a vehicle play base anim // after a timer, check where we are in the anim phase. If we're low or high, transition to a flavor anim ANIMATION_FLAGS AF_LOCAL_FLAG = AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_ABORT_ON_WEAPON_DAMAGE FLOAT fChance SWITCH eCDS_DanceState CASE eCDS_BaseAnim IF NOT IS_ENTITY_PLAYING_ANIM(cheng.ped, sCrazyDanceDict, sDanceMove) TASK_PLAY_ANIM(cheng.ped, sCrazyDanceDict, sDanceMove, SLOW_BLEND_IN, SLOW_BLEND_OUT, DEFAULT, AF_LOCAL_FLAG) ELSE IF GET_ENTITY_ANIM_CURRENT_TIME(cheng.ped, sCrazyDanceDict, sDanceMove) >= 0.99 fChance = GET_RANDOM_FLOAT_IN_RANGE() IF fChance < 0.5 fChance = GET_RANDOM_FLOAT_IN_RANGE() IF fChance <= 0.6 sDanceMove = sCrazyDance1 ELIF fChance <= 0.9 sDanceMove = sCrazyDance2 ELSE sDanceMove = sCrazyDance3 ENDIF AF_LOCAL_FLAG = AF_DEFAULT | AF_NOT_INTERRUPTABLE | AF_ABORT_ON_WEAPON_DAMAGE TASK_PLAY_ANIM(cheng.ped, sCrazyDanceDict, sDanceMove, SLOW_BLEND_IN, SLOW_BLEND_OUT, DEFAULT, AF_LOCAL_FLAG) eCDS_DanceState = eCDS_FlavorAnim ENDIF CPRINTLN(DEBUG_MISSION, "HANDLE_CHENGS_CRAZY_CAR_DANCING: Choosing ", sDanceMove) ENDIF ENDIF BREAK CASE eCDS_FlavorAnim IF IS_ENTITY_PLAYING_ANIM(cheng.ped, sCrazyDanceDict, sDanceMove) IF GET_ENTITY_ANIM_CURRENT_TIME(cheng.ped, sCrazyDanceDict, sDanceMove) >= 0.99 sDanceMove = sCrazyDanceBase CPRINTLN(DEBUG_MISSION, "HANDLE_CHENGS_CRAZY_CAR_DANCING: Going to ", sDanceMove) TASK_PLAY_ANIM(cheng.ped, sCrazyDanceDict, sDanceMove, DEFAULT, SLOW_BLEND_OUT, DEFAULT, AF_LOCAL_FLAG) eCDS_DanceState = eCDS_BaseAnim ENDIF ELSE CPRINTLN(DEBUG_MISSION, "HANDLE_CHENGS_CRAZY_CAR_DANCING: We dropped out? Going to ", sDanceMove) sDanceMove = sCrazyDanceBase eCDS_DanceState = eCDS_BaseAnim ENDIF BREAK ENDSWITCH ENDPROC PROC SETUP_ENEMY_VEHICLE(vehicle_struct &vsVeh, FLOAT fDirtLevel = 13.0) vsVeh.veh = create_vehicle(vsVeh.model, vsVeh.pos, vsVeh.heading) IF DOES_ENTITY_EXIST(vsVeh.veh) SET_VEHICLE_DIRT_LEVEL(vsVeh.veh, fDirtLevel) SET_VEHICLE_DOORS_LOCKED(vsVeh.veh, vehiclelock_locked) vsVeh.blip = CREATE_BLIP_FOR_VEHICLE(vsVeh.veh, TRUE) IF DOES_BLIP_EXIST(vsVeh.blip) SET_BLIP_PRIORITY(vsVeh.blip, BLIPPRIORITY_HIGHEST) ENDIF SET_ENTITY_AS_MISSION_ENTITY(vsVeh.veh) ENDIF ENDPROC // @SBA - if the passed in ped is damaged by the player whilst driving, kill the ped PROC KILL_PED_HIT_BY_PLAYERS_VEHICLE(PED_INDEX piPed) IF NOT DOES_ENTITY_EXIST(piPed) EXIT ENDIF IF IS_ENTITY_DEAD(piPed) EXIT ENDIF VEHICLE_INDEX viPlayersVehicle IF get_current_player_vehicle(viPlayersVehicle) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piPed, PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "KILL_PED_HIT_BY_PLAYERS_VEHICLE: Player's vehicle has damaged ped! Killing ped.") APPLY_DAMAGE_TO_PED(piPed, 1000, TRUE) ENDIF ENDIF ENDPROC // break glass at Trevor's first position PROC IN_CASE_OF_ATTACK_BREAK_GLASS() // @SBA - crack the glass so Tevor gets a good first shot // Just firing the shot was causing a crash - hoping to circumvent that with this approach IF NOT bPlayerInOpeningCover CPRINTLN(DEBUG_MISSION, "Breaking the window!") object_index glass_window IF NOT DOES_ENTITY_EXIST(glass_window) glass_window = get_closest_object_of_type(<<1389.11, 3600.43, 39.51>>, 2.0, v_ret_ml_win5) ENDIF break_entity_glass(glass_window, (<<1388.92908, 3600.90259, 40.0>>), 1.0, (<<0.0, 1.0, 0.0>>), 1100.00, 1, TRUE) // SHOOT_SINGLE_BULLET_BETWEEN_COORDS((<<1380.0, 3599.5, 38.2>>), (<<1388.92908, 3600.90259, 40.0>>), 0, TRUE) SET_OBJECT_AS_NO_LONGER_NEEDED(glass_window) bPlayerInOpeningCover = TRUE ENDIF ENDPROC proc setup_enemy_in_vehicle(ped_structure &enemy, vehicle_index &mission_veh, vehicle_seat veh_seat = vs_driver) //clear_area(enemy.pos, 2.0, true) REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() enemy.ped = create_ped_inside_vehicle(mission_veh, pedtype_mission, enemy.model, veh_seat) set_ped_random_component_variation(enemy.ped) set_ped_dies_when_injured(enemy.ped, true) set_ped_as_enemy(enemy.ped, true) set_entity_is_target_priority(enemy.ped, true) set_ped_keep_task(enemy.ped, true) SET_PED_CONFIG_FLAG(enemy.ped, PCF_KeepRelationshipGroupAfterCleanUp, true) set_ped_config_flag(enemy.ped, PCF_DisableHurt, true) give_weapon_to_ped(enemy.ped, enemy.weapon, infinite_ammo, true) set_current_ped_weapon(enemy.ped, enemy.weapon, true) SET_ENTITY_HEALTH(enemy.ped, enemy.health) set_ped_max_health(enemy.ped, enemy.health) if enemy.damaged_by_player SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(enemy.ped, true) endif if enemy.allow_body_armour add_armour_to_ped(enemy.ped, 100) endif enemy.created = true set_ped_name_debug(enemy.ped, enemy.name) set_ped_hearing_range(enemy.ped, 250.00) // @SBA - quick fix. Only blip the driver so we don't have multiple blips on the vehicle IF veh_seat = vs_driver enemy.blip = CREATE_BLIP_FOR_PED(enemy.ped, true) set_blip_display(enemy.blip, DISPLAY_BLIP) ENDIF set_ped_can_evasive_dive(enemy.ped, true) setup_relationship_enemy(enemy.ped, true) set_ped_accuracy(enemy.ped, enemy.accuracy) INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(enemy.ped) endproc func bool ped_structure_are_all_enemies_dead(ped_structure &enemy_array[], bool set_ped_no_longer_needed = true) int peds_dead = 0 int k = 0 for k = 0 to (count_of(enemy_array) - 1) if DOES_ENTITY_EXIST(enemy_array[k].ped) if is_ped_injured(enemy_array[k].ped) //INFORM_MISSION_STATS_OF_INCREMENT(CHI1_BODY_COUNT) if set_ped_no_longer_needed SET_PED_AS_NO_LONGER_NEEDED(enemy_array[k].ped) endif if does_blip_exist(enemy_array[k].blip) REMOVE_BLIP(enemy_array[k].blip) endif if is_special_ability_active(player_id()) //INFORM_STAT_CHINESE_ONE_SPECIAL_ABILITY_KILL() endif //INFORM_STAT_CHINESE_ONE_ENEMY_KILLED() peds_dead ++ endif else if enemy_array[k].created peds_dead ++ endif endif endfor if peds_dead = count_of(enemy_array) return TRUE endif return FALSE endfunc //*****call this function underneath ped_structure_are_all_enemies_dead func bool ped_structure_are_specific_number_enemies_dead(ped_structure &enemy_array[], int number_of_dead_peds) int peds_dead = 0 int k = 0 for k = 0 to count_of(enemy_array) - 1 if enemy_array[k].created if is_ped_injured(enemy_array[k].ped) peds_dead++ endif endif endfor if peds_dead >= number_of_dead_peds return TRUE endif return FALSE endfunc func int ped_structure_get_total_number_of_enemies_dead(ped_structure &enemy_array[]) int peds_dead = 0 int k = 0 // printstring("peds dead: ") // printint(peds_dead) // printnl() for k = 0 to count_of(enemy_array) - 1 if enemy_array[k].created if is_ped_injured(enemy_array[k].ped) // printint(k) // printnl() peds_dead++ endif endif endfor return peds_dead endfunc func bool is_coord_in_area_2d(vector test_coord, vector top_left, vector bottom_right) vector tl vector br if top_left.x < bottom_right.x tl.x = top_left.x br.x = bottom_right.x else tl.x = bottom_right.x br.x = top_left.x endif if top_left.y < bottom_right.y tl.y = top_left.y br.y = bottom_right.y else tl.y = bottom_right.y br.y = top_left.y endif if (test_coord.x > tl.x) and (test_coord.x < br.x) if (test_coord.y > tl.y) and (test_coord.y < br.y) return true endif endif return false endfunc func bool has_ped_been_harmed(ped_index &mission_ped, int &original_health) int current_health if DOES_ENTITY_EXIST(mission_ped) if not is_ped_injured(mission_ped) current_health = GET_ENTITY_HEALTH(mission_ped) if HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mission_ped , player_ped_id()) or (current_health < original_health) or is_ped_responding_to_event(mission_ped, EVENT_DAMAGE) return true endif else return true endif endif return false endfunc func bool has_peds_been_harmed(ped_structure &ped_struct[]) for i = 0 to (count_of(ped_struct) - 1) if has_ped_been_harmed(ped_struct[i].ped, ped_struct[i].health) return true endif endfor return false endfunc func bool has_player_antagonised_ped(ped_index &mission_ped, float distance, bool distance_check_on = true) if not is_ped_injured(mission_ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(mission_ped)) < distance //if has_char_spotted_char(this_ped, player_char_id()) if CAN_PED_SEE_HATED_PED(mission_ped, PLAYER_PED_ID()) IF IS_ped_ARMED(PLAYER_ped_ID(), WF_INCLUDE_MELEE|WF_INCLUDE_PROJECTILE|WF_INCLUDE_GUN) if IS_PLAYER_TARGETTING_ENTITY(player_id(), mission_ped) return TRUE endif if is_player_free_aiming_at_entity(player_id(), mission_ped) return TRUE endif endif endif if is_ped_shooting(player_ped_id()) return true endif endif if is_bullet_in_area(get_entity_coords(mission_ped), 4.0) return true endif if distance_check_on if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(mission_ped)) < 1.5 return true endif endif endif return FALSE endfunc func bool is_player_targeting_ped(ped_index &mission_ped) if not is_ped_injured(mission_ped) if is_player_targetting_entity(player_id(), mission_ped) or is_player_free_aiming_at_entity(player_id(), mission_ped) return true endif endif return false endfunc func bool is_player_targeting_any_peds(ped_structure &mission_ped_array[]) int k = 0 for k = 0 to count_of(mission_ped_array) - 1 if is_player_targeting_ped(mission_ped_array[k].ped) return true endif endfor return false endfunc func bool has_vehicle_been_harmed(vehicle_index &mission_vehicle, int &original_car_health) int vehicle_health if DOES_ENTITY_EXIST(mission_vehicle) if is_vehicle_driveable(mission_vehicle) vehicle_health = GET_ENTITY_HEALTH(mission_vehicle) if get_vehicle_petrol_tank_health(mission_vehicle) < original_car_health or get_vehicle_engine_health(mission_vehicle) < original_car_health or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mission_vehicle, player_ped_id()) or vehicle_health < original_car_health return true endif else return true endif endif return false endfunc func bool has_vehicles_been_harmed(vehicle_struct &veh_struct[]) for i = 0 to (count_of(veh_struct) - 1) if has_vehicle_been_harmed(veh_struct[i].veh, veh_struct[i].health) return true endif endfor return false endfunc func bool is_ped_at_coords(ped_index &mission_ped, vector pos, vector locate_size) if not is_ped_injured(mission_ped) if IS_ENTITY_AT_COORD(mission_ped, pos, locate_size, false, true) return true endif endif return false endfunc func bool is_ped_in_angled_area_lk(ped_index &mission_ped, vector vec1, vector vec2, float distance_from_point) if not is_ped_injured(mission_ped) if IS_ENTITY_IN_ANGLED_AREA(mission_ped, vec1, vec2, distance_from_point) return true endif endif return false endfunc func bool is_vehicle_in_angled_area_lk(vehicle_index &mission_vehicle, vector vec1, vector vec2, float distance_from_point) if DOES_ENTITY_EXIST(mission_vehicle) if is_vehicle_driveable(mission_vehicle) if is_point_in_angled_area(GET_ENTITY_COORDS(mission_vehicle), vec1, vec2, distance_from_point) return true endif endif endif return false endfunc func bool is_ped_in_specific_room(ped_index mission_ped, vector interior_pos, string room_name) interior_instance_index interior interior_instance_index ped_current_interior int ped_current_room_hash_key int room_hash_key if not is_ped_injured(mission_ped) interior = get_interior_at_coords(interior_pos) ped_current_interior = GET_INTERIOR_FROM_ENTITY(mission_ped) if not (interior = null) if (interior = ped_current_interior) ped_current_room_hash_key = GET_KEY_FOR_ENTITY_IN_ROOM(mission_ped) room_hash_key = get_hash_key(room_name) if (ped_current_room_hash_key != 0) if ped_current_room_hash_key = room_hash_key return true endif endif endif endif endif return false endfunc //func bool is_ped_inside_interior(ped_index mission_ped, vector interior_pos) // // interior_instance_index interior // interior_instance_index mission_ped_interior // // interior = get_interior_at_coords(interior_pos) // mission_ped_interior = GET_INTERIOR_FROM_ENTITY(mission_ped) // // if not (mission_ped_interior = null) // if (mission_ped_interior = interior) // return true // endif // endif // // return false // //endfunc func bool is_ped_inside_interior(ped_index mission_ped, vector interior_pos, string interior_name) interior_instance_index interior interior_instance_index mission_ped_interior interior = get_interior_at_coords_with_type(interior_pos, interior_name) mission_ped_interior = GET_INTERIOR_FROM_ENTITY(mission_ped) if not (mission_ped_interior = null) if (mission_ped_interior = interior) return true endif endif return false endfunc func bool is_vehicle_stuck_every_check(vehicle_index &vehicle) if DOES_ENTITY_EXIST(vehicle) if is_vehicle_driveable(vehicle) if is_vehicle_stuck_timer_up(vehicle, VEH_STUCK_ON_ROOF, ROOF_TIME) or is_vehicle_stuck_timer_up(vehicle, VEH_STUCK_JAMMED, JAMMED_TIME) or is_vehicle_stuck_timer_up(vehicle, VEH_STUCK_HUNG_UP, HUNG_UP_TIME) or is_vehicle_stuck_timer_up(vehicle, VEH_STUCK_ON_SIDE, SIDE_TIME) return true endif endif endif return false endfunc func bool allow_dialogue_to_continue(ped_index mission_ped, vehicle_index mission_veh, int instruct_text_time, bool allow_wanted_level_check = false) if not is_ped_injured(mission_ped) if is_ped_in_group(mission_ped) if allow_wanted_level_check if is_player_wanted_level_greater(player_id(), 0) instruct_text_time = get_game_timer() return false endif //if you get a wanted level and the god text renders. If you then lose the wanted level and get //instruction text this ensures the instruction text is rendered for 3 seconds before the //dialogue is unpaused if not lk_timer(instruct_text_time, 3000) return false endif endif if (is_ped_on_foot(mission_ped) and is_ped_on_foot(player_ped_id())) return true endif if does_entity_exist(mission_veh) if is_vehicle_driveable(mission_veh) if (is_ped_sitting_in_vehicle(mission_ped, mission_veh) and is_ped_sitting_in_vehicle(player_ped_id(), mission_veh)) return true endif endif endif endif endif return false endfunc proc repostion_players_last_vehicle(vehicle_index &mission_veh, vector area_pos_check, vector area_dimensions, vector veh_pos, float veh_heading) mission_veh = get_players_last_vehicle() if does_entity_exist(mission_veh) if is_vehicle_driveable(mission_veh) if not is_big_vehicle(mission_veh) if not (get_entity_model(mission_veh) = taxi) if is_entity_at_coord(mission_veh, area_pos_check, area_dimensions) if not is_entity_a_mission_entity(mission_veh) set_entity_as_mission_entity(mission_veh) endif if not is_vehicle_in_players_garage(mission_veh, get_current_player_ped_enum(), false) clear_area(veh_pos, 10.0, true) set_entity_coords(mission_veh, veh_pos) set_entity_heading(mission_veh, veh_heading) set_vehicle_on_ground_properly(mission_veh) endif endif endif endif endif endif endproc func bool is_players_last_vehicle_present_and_acceptable(vehicle_index player_vehicle, vector pos, int number_of_seats, vector secondary_pos, float secondary_heading) if does_entity_exist(player_vehicle) if is_vehicle_driveable(player_vehicle) if is_entity_at_coord(player_vehicle, pos, <<10.0, 10.0, 10.0>>, false)//<<25.0, 25.0, 10.0>> INT iNumVehSeats = get_vehicle_max_number_of_passengers(player_vehicle) CPRINTLN(DEBUG_MISSION, "Number of passenger seats = ", iNumVehSeats) if iNumVehSeats >= number_of_seats return true else clear_area(secondary_pos, 10.0, true) set_entity_coords(player_vehicle, secondary_pos) set_entity_heading(player_vehicle, secondary_heading) set_vehicle_engine_on(player_vehicle, false, true) set_vehicle_on_ground_properly(player_vehicle) set_vehicle_as_no_longer_needed(player_vehicle) endif endif endif endif CPRINTLN(DEBUG_MISSION,"Need a different vehicle") return false endfunc func bool is_enemy_near_player(ped_structure &mission_struct[], float distance) for i = 0 to count_of(mission_struct) - 1 if not is_ped_injured(mission_struct[i].ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(mission_struct[i].ped)) < distance return true endif endif endfor return false endfunc func bool is_direction_stick_pushed() int left_stick_x int left_stick_y int right_stick_x int right_stick_y int stick_dead_zone = 127 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 IF (left_stick_y > (STICK_DEAD_ZONE + 28)) OR (left_stick_y < (STICK_DEAD_ZONE - 28)) return true endif return false endfunc //PARAM NOTES: //PURPOSE: If a players fires a weapon during a cutscene and you want to ensure he has the weapon // and enough ammo during the cutscene. Also for the ammo to be reset at the end so that when the //player goes back into gameplay he has the same amount of ammo or decent amount. //At the end of a cutscene ensure you set the players ammo to ammo_in_players_weapon proc setup_players_weapon_for_cutscene(weapon_type mission_weapon, int ammo_amount, int &ammo_in_players_weapon) if not has_ped_got_weapon(player_ped_id(), mission_weapon) ammo_in_players_weapon = ammo_amount give_weapon_to_ped(player_ped_id(), mission_weapon, ammo_in_players_weapon, true, true) else ammo_in_players_weapon = get_ammo_in_ped_weapon(player_ped_id(), mission_weapon) weapon_type players_weapon get_current_ped_weapon(player_ped_id(), players_weapon) if players_weapon != mission_weapon set_current_ped_weapon(player_ped_id(), mission_weapon, true) endif if ammo_in_players_weapon < ammo_amount ammo_in_players_weapon = ammo_amount set_ped_ammo(player_ped_id(), mission_weapon, ammo_in_players_weapon) endif endif endproc /// PURPOSE: /// Sorts the triggered label array such that all the empty elements are at the end. PROC REMOVE_LABEL_ARRAY_SPACES() INT k = 0 REPEAT (COUNT_OF(i_triggered_text_hashes) - 1) k IF i_triggered_text_hashes[k] = 0 IF i_triggered_text_hashes[k+1] != 0 i_triggered_text_hashes[k] = i_triggered_text_hashes[k+1] i_triggered_text_hashes[k+1] = 0 ENDIF ENDIF ENDREPEAT ENDPROC /// PURPOSE: /// Finds the array index of a particular triggered label, or -1 if the label hasn't been added. FUNC INT GET_LABEL_INDEX(INT i_label_hash) INT k = 0 REPEAT COUNT_OF(i_triggered_text_hashes) k IF i_triggered_text_hashes[k] = 0 //We've reached the end of the filled section of the array, no need to continue. RETURN -1 ELIF i_triggered_text_hashes[k] = i_label_hash RETURN k ENDIF ENDREPEAT RETURN -1 ENDFUNC /// PURPOSE: /// Returns TRUE if the given label has been triggered. FUNC BOOL HAS_LABEL_BEEN_TRIGGERED(STRING str_label) RETURN (GET_LABEL_INDEX(GET_HASH_KEY(str_label)) != -1) ENDFUNC /// PURPOSE: /// Adds/removes a text label to/from the list of labels that have been triggered. PROC SET_LABEL_AS_TRIGGERED(STRING str_label, BOOL b_trigger) INT i_hash = GET_HASH_KEY(str_label) INT k = 0 IF b_trigger BOOL b_added = FALSE WHILE NOT b_added AND k < COUNT_OF(i_triggered_text_hashes) IF i_triggered_text_hashes[k] = i_hash //The label is already in the array, don't add it again. b_added = TRUE ELIF i_triggered_text_hashes[k] = 0 i_triggered_text_hashes[k] = i_hash b_added = TRUE ENDIF k++ ENDWHILE #IF IS_DEBUG_BUILD IF NOT b_added SCRIPT_ASSERT("SET_LABEL_AS_TRIGGERED: Failed to add label, array is full.") ENDIF #ENDIF ELSE INT i_index = GET_LABEL_INDEX(i_hash) IF i_index != -1 i_triggered_text_hashes[i_index] = 0 REMOVE_LABEL_ARRAY_SPACES() ENDIF ENDIF ENDPROC PROC CLEAR_TRIGGERED_LABELS() INT k = 0 REPEAT COUNT_OF(i_triggered_text_hashes) k i_triggered_text_hashes[k] = 0 ENDREPEAT ENDPROC proc flash_ambient_enemy_blips(int &flash_timer) if allow_ambient_enemy_blips_to_flash for i = 0 to count_of(ambient_enemy) - 1 if not is_ped_injured(ambient_enemy[i].ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(ambient_enemy[i].ped)) > 50.00 if does_blip_exist(ambient_enemy[i].blip) remove_blip(ambient_enemy[i].blip) endif endif ELSE if does_blip_exist(ambient_enemy[i].blip) remove_blip(ambient_enemy[i].blip) endif endif endfor if lk_timer(flash_timer, 500) for i = 0 to count_of(ambient_enemy) - 1 if does_blip_exist(ambient_enemy[i].blip) if display_blips_as_friendly set_blip_as_friendly(ambient_enemy[i].blip, true) else set_blip_as_friendly(ambient_enemy[i].blip, false) endif endif endfor if display_blips_as_friendly display_blips_as_friendly = false else display_blips_as_friendly = true endif flash_timer = get_game_timer() endif endif endproc func bool is_player_in_cover_pos(cover_point_struct cover_data) if is_entity_at_coord(player_ped_id(), cover_data.pos, <<1.0, 1.0, 2.0>>) if is_ped_in_cover(player_ped_id()) return true endif endif return false endfunc /// PURPOSE: /// Checks if the player is currently hanging around where the given ped is trying to get to. This is useful for checking if peds /// playing synced scenes need to break into AI due to the player getting in the way. /// PARAMS: /// ped - The ped moving towards the destination. /// v_destination - The destination /// f_max_dist_before_check - The ped must be within this distance of the destination before we start checking what the player is doing. /// b_player_must_be_in_cover - If TRUE then the player must be in cover for them to be considered in the way. FUNC BOOL IS_PLAYER_STEALING_PEDS_DESTINATION(PED_INDEX ped, VECTOR destination, FLOAT distance_check, BOOL player_must_be_in_cover = true) IF NOT IS_PED_INJURED(ped) VECTOR player_pos = GET_ENTITY_COORDS(PLAYER_PED_ID()) VECTOR ped_pos = GET_ENTITY_COORDS(ped) FLOAT dist_from_ped_to_dest = VDIST(ped_pos, destination) FLOAT dist_from_player_to_dest = VDIST(player_pos, destination) IF dist_from_ped_to_dest < distance_check //CPRINTLN(DEBUG_MISSION, "IS_PLAYER_STEALING_PEDS_DESTINATION: test 0") IF dist_from_player_to_dest < dist_from_ped_to_dest and is_entity_at_coord(player_ped_id(), destination, <<1.0, 1.0, 2.0>>) CPRINTLN(DEBUG_MISSION, "IS_PLAYER_STEALING_PEDS_DESTINATION: test 1") IF player_must_be_in_cover IF IS_PED_IN_COVER(PLAYER_PED_ID()) //or is_ped_going_into_cover(player_ped()) CPRINTLN(DEBUG_MISSION, "IS_PLAYER_STEALING_PEDS_DESTINATION: test 2") RETURN TRUE ENDIF ELSE RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC //put_ped_into proc get_buddy_into_cover(ped_index &mission_ped, cover_point_struct &first_cover_data, cover_point_struct &second_cover_data, bool &go_to_main_cover_point, bool &refresh_task) vector cover_pos if not is_ped_in_cover(mission_ped) if go_to_main_cover_point cover_pos = first_cover_data.pos if IS_PLAYER_STEALING_PEDS_DESTINATION(mission_ped, first_cover_data.pos, 3.0, false) cover_pos = second_cover_data.pos refresh_task = true go_to_main_cover_point = false exit endif else cover_pos = second_cover_data.pos if IS_PLAYER_STEALING_PEDS_DESTINATION(mission_ped, second_cover_data.pos, 3.0, false) cover_pos = first_cover_data.pos refresh_task = true go_to_main_cover_point = true exit endif endif if is_entity_at_coord(mission_ped, cover_pos, <<2.0, 2.0, 2.0>>) IF (NOT IS_PED_IN_COVER(mission_ped) AND NOT IS_PED_GOING_INTO_COVER(mission_ped) AND GET_SCRIPT_TASK_STATUS(mission_ped, SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) != PERFORMING_TASK and GET_SCRIPT_TASK_STATUS(mission_ped, SCRIPT_TASK_SEEK_COVER_TO_COVER_POINT) != PERFORMING_TASK and GET_SCRIPT_TASK_STATUS(mission_ped, SCRIPT_TASK_SEEK_COVER_TO_COORDS) != performing_task) or refresh_task SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mission_ped, TRUE) TASK_PUT_PED_DIRECTLY_INTO_COVER(mission_ped, cover_pos, -1, FALSE, 0, false, false, null, true) refresh_task = false //script_assert("test 1") endif else if get_script_task_status(mission_ped, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != performing_task or refresh_task SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mission_ped, TRUE) task_follow_nav_mesh_to_coord(mission_ped, cover_pos, pedmove_run, -1) refresh_task = false //script_assert("test 3") endif ENDIF endif endproc PROC EQUIP_BEST_PLAYER_WEAPON(ped_index mission_ped, BOOL bForceIntoHand = true) IF NOT IS_PED_INJURED(mission_ped) WEAPON_TYPE bestWeapon = GET_BEST_PED_WEAPON(mission_ped) IF bestWeapon != WEAPONTYPE_UNARMED SET_CURRENT_PED_WEAPON(mission_ped, bestWeapon, bForceIntoHand) ENDIF ENDIF ENDPROC proc setup_player_fail_weapon(ped_index mission_ped) weapon_type players_weapon players_weapon = Get_Fail_Weapon(enum_to_int(get_player_ped_enum(mission_ped))) if players_weapon != WEAPONTYPE_INVALID and players_weapon != WEAPONTYPE_UNARMED set_current_ped_weapon(mission_ped, players_weapon, true) endif endproc proc setup_weapon_for_ped(ped_index mission_ped, weapon_type ped_weapon, int num_of_bullets, bool force_weapon_into_hand = true, bool equip_weapon = true, bool equipe_best_weapon = true) IF not HAS_PED_GOT_FIREARM(mission_ped, false) give_weapon_to_ped(mission_ped, ped_weapon, num_of_bullets, force_weapon_into_hand, equip_weapon) exit else weapon_type players_weapon if equipe_best_weapon EQUIP_BEST_PLAYER_WEAPON(mission_ped, force_weapon_into_hand) get_current_ped_weapon(mission_ped, players_weapon) else players_weapon = Get_Fail_Weapon(enum_to_int(get_player_ped_enum(mission_ped))) if players_weapon = WEAPONTYPE_INVALID or players_weapon = WEAPONTYPE_UNARMED if not HAS_PED_GOT_WEAPON(mission_ped, ped_weapon) give_weapon_to_ped(mission_ped, ped_weapon, num_of_bullets, force_weapon_into_hand, equip_weapon) exit else players_weapon = ped_weapon endif //script_assert("test 0") endif endif // printint(enum_to_int(players_weapon)) // printnl() // printint(enum_to_int(weapontype_pistol)) // printnl() // script_assert("test 1") if players_weapon = WEAPONTYPE_GRENADELAUNCHER or players_weapon = WEAPONTYPE_RPG if get_ammo_in_ped_weapon(mission_ped, players_weapon) < 5 set_ped_ammo(mission_ped, players_weapon, 5) endif else if get_ammo_in_ped_weapon(mission_ped, players_weapon) < num_of_bullets set_ped_ammo(mission_ped, players_weapon, num_of_bullets) endif endif set_current_ped_weapon(mission_ped, players_weapon, force_weapon_into_hand) endif endproc func int get_first_alive_ped(ped_structure &mission_ped[]) int k for k = 0 to count_of(mission_ped) - 1 if not is_ped_injured(mission_ped[i].ped) return k endif endfor return -1 endfunc func bool dialogue_monitoring_system(blip_index target_blip) if does_blip_exist(target_blip) // Unpause conversations if the locate blip is active IF IS_CELLPHONE_CONVERSATION_PAUSED() PAUSE_CELLPHONE_CONVERSATION(FALSE) ELIF IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(false) endif if not is_any_text_being_displayed(locates_data) return true endif // If there's no blip, is there locate-related text on screen? ELIF IS_ANY_TEXT_BEING_DISPLAYED(locates_data) // then pause any covnersation if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_CELLPHONE_CONVERSATION_PAUSED() PAUSE_CELLPHONE_CONVERSATION(TRUE) ELIF not IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(true) endif endif ELSE // If there's still no locate blip, but the text is gone (or ignored), unpause the conversation so it can continue IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_CELLPHONE_CONVERSATION_PAUSED() PAUSE_CELLPHONE_CONVERSATION(FALSE) ELIF IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(false) ENDIF ENDIF endif return false endfunc //PURPOSE: repositions the players last vehicle if it exists via calling GET_MISSION_START_VEHICLE_INDEX() // and sets the vehicle as a mission entity so that clear area will not clear it. Remember to proc reposition_players_last_vehicle(vector car_pos, float car_heading) vehicle_index players_last_car players_last_car = GET_MISSION_START_VEHICLE_INDEX() if does_entity_exist(players_last_car) if is_vehicle_driveable(players_last_car) SET_ENTITY_AS_MISSION_ENTITY(players_last_car, true, true) clear_area(car_pos, 5.0, true) set_entity_coords(players_last_car, car_pos) set_entity_heading(players_last_car, car_heading) set_vehicle_on_ground_properly(players_last_car) SET_VEHICLE_DOORS_SHUT(players_last_car) set_entity_as_mission_entity(players_last_car) // @SBA - make sure we have anims for whatever the vehicle is request_vehicle_asset(GET_ENTITY_MODEL(players_last_car)) endif endif endproc // @SBA - kill enemies that have gotten away from the mission PROC KILL_ANY_ERRANT_ENEMY(PED_STRUCTURE &psPedInfo[]) INT idx BOOL bYouDieNow = FALSE FOR idx = 0 TO COUNT_OF(psPedInfo) - 1 IF DOES_ENTITY_EXIST(psPedInfo[idx].ped) IF NOT IS_PED_INJURED(psPedInfo[idx].ped) // do we want to check this? All examples so far, the ped was on foot. IF NOT IS_PED_IN_ANY_VEHICLE(psPedInfo[idx].ped) VECTOR vPedCoords = GET_ENTITY_COORDS(psPedInfo[idx].ped, FALSE) // If ped is far enough from meth lab and from player, he dies IF GET_DISTANCE_BETWEEN_COORDS(vArrivalMethLab, vPedCoords) > 200.0 AND distance_from_player_to_ped(psPedInfo[idx].ped) > 50.0 bYouDieNow = TRUE ELSE // see if enemy is below ground IF vPedCoords.z < 29.0 bYouDieNow = TRUE ENDIF ENDIF IF bYouDieNow // remove flag IF psPedInfo[idx].bRushInside psPedInfo[idx].bRushInside = FALSE ENDIF // kill him EXPLODE_PED_HEAD(psPedInfo[idx].ped) APPLY_DAMAGE_TO_PED(psPedInfo[idx].ped, 1000, FALSE) CPRINTLN(DEBUG_MISSION,"KILL_ANY_ERRANT_ENEMY: *** ENEMY ", psPedInfo[idx].name," HAS BUGGERED OFF. KILLING HIM! ***.") ENDIF ENDIF ENDIF ENDIF ENDFOR ENDPROC //Focus hint cam variables VECTOR vEntityHint = <<-0.5, -1.00, 0.40>> FLOAT fHintScalar = 0.41 FLOAT fHintHOffset = 0.12 FLOAT fHintVOffset = 0.11 //FLOAT fHintPitch = 0.0 FLOAT fHintFOV = 40.0 BOOL bResetFocusCam = FALSE PROC HANDLE_HINT_CAM_FOR_LEAD_IN() IF bResetFocusCam IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT(TRUE) ENDIF SET_GAMEPLAY_ENTITY_HINT( oiIceBox, vEntityHint, TRUE, -1, 2500 ) //SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET( fHintPitch ) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET( fHintHOffset ) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET( fHintVOffset ) SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR( fHintScalar ) SET_GAMEPLAY_HINT_FOV( fHintFOV ) bResetFocusCam = FALSE ENDIF // exit if we're coming from a shit skip, as the Ice box won't exist // and we won't need the hint cam (unless I'll need to show the lead in - I sure hope not) IF bOutroShitSkip EXIT ENDIF // is player in lead in trigger IF IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxCameraVol) // exit if player is also inside IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") EXIT ENDIF IF NOT IS_GAMEPLAY_HINT_ACTIVE() SET_GAMEPLAY_ENTITY_HINT(oiIceBox, vEntityHint, TRUE, -1, 2500) SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(fHintScalar) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(fHintHOffset) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET(fHintVOffset) SET_GAMEPLAY_HINT_FOV(fHintFOV) SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE) ENDIF ELSE IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT() ENDIF ENDIF // if player is in cutscene trigger, halt him there // IF IS_PLAYER_CONTROL_ON(PLAYER_ID()) // IF IS_GAMEPLAY_HINT_ACTIVE() // IF IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxInnerVol) // CPRINTLN(DEBUG_MISSION, "HANDLE_HINT_CAM_FOR_LEAD_IN: Locking player") // SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON) // IF NOT IS_ENTITY_DEAD(translator.ped) // TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(), translator.ped) // ENDIF // ENDIF // ENDIF // ENDIF ENDPROC // *********************************************************************************** // @SBA - Chef Abandonment functions // *********************************************************************************** // @SBA - iterate over ped array and see if any ped is in the given room FUNC BOOL IS_ANY_PED_IN_SPECIFIC_ROOM(PED_STRUCTURE &psPedInfo[], VECTOR interior_pos, STRING room_name) INT idx FOR idx = 0 TO COUNT_OF(psPedInfo) - 1 // Is enemy rush flag set (so we can ignore the others) IF psPedInfo[idx].bRushInside // IF is_ped_in_specific_room(psPedInfo[idx].ped, interior_pos, room_name) RETURN TRUE ENDIF ENDIF ENDFOR RETURN FALSE ENDFUNC // @SBA - play dialogue if player is close enough FUNC BOOL PLAY_CHEF_CONVERSATION(STRING sChefConv) // is player close enough IF distance_from_player_to_ped(buddy.ped) < 100 IF CREATE_CONVERSATION(scripted_speech[0], "methaud", sChefConv, CONV_PRIORITY_HIGH) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC // @SBA - check for abandonment with specifics for the opening fight FUNC BOOL HAS_PLAYER_ABANDONED_CHEF_WAVE_0() // See if player has left the upstairs rooms IF NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.2, 3614.1, 39.0>>), "v_39_UpperRm1") AND NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") AND NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1390.91, 3608.21, 38.91>>), "v_39_UpperRm3") RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - check for abandonment with specifics for the back stairs fight FUNC BOOL HAS_PLAYER_ABANDONED_CHEF_WAVE_0_PART2() IF distance_from_player_to_ped(buddy.ped) > 17.0 RETURN TRUE ENDIF IF IS_PLAYER_IN_TRIGGER_BOX(tbOutsideMainGatesVolume) RETURN TRUE ENDIF IF IS_PLAYER_IN_TRIGGER_BOX(tbBackRoofVolume) RETURN TRUE ENDIF IF IS_PLAYER_IN_TRIGGER_BOX(tbBackUpstairsRoomVolume) RETURN TRUE ENDIF IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1390.91, 3608.21, 38.91>>), "v_39_UpperRm3") RETURN TRUE ENDIF IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1393.0, 3612.2, 35.0>>), "v_39_StairsRm") RETURN TRUE ENDIF IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") RETURN TRUE ENDIF // Overlaps with tbBackUpstairsRoomVolume, added for fringes IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - check for abandonment with specifics for the back roof fight FUNC BOOL HAS_PLAYER_ABANDONED_CHEF_WAVE_2() IF NOT IS_PLAYER_IN_TRIGGER_BOX(tbBackFullRoofVolume) AND NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - check for abandonment with specifics for the (final) liquor store fight FUNC BOOL HAS_PLAYER_ABANDONED_CHEF_WAVE_3() IF NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") AND NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), (<<1394.18225, 3599.79858, 34.01332>>), (<<5.0, 5.0, 2.0>>)) RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - displays the passed message string if it hasn't been displayed before, and no text is on screen PROC DISPLAY_MESSAGE_WHEN_ABLE(STRING sMessage) IF NOT HAS_LABEL_BEEN_TRIGGERED(sMessage) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(LOCATES_DATA) PRINT_NOW(sMessage, DEFAULT_GOD_TEXT_TIME, 1) SET_LABEL_AS_TRIGGERED(sMessage, TRUE) ENDIF ENDIF ENDPROC // @SBA - displays a message to get back to Chef if you get too far away. Repeats after a timer. PROC HANDLE_ABANDONMENT_MESSAGE(BOOL bIsChefAbandoned) IF bIsChefAbandoned DISPLAY_MESSAGE_WHEN_ABLE("METH_GOD_18") // Return to Chef IF NOT IS_TIMER_STARTED(tmrAbandonChef) CPRINTLN(DEBUG_MISSION,"HANDLE_ABANDONMENT_MESSAGE: Player has buggered off - start timer.") START_TIMER_NOW(tmrAbandonChef) ELIF TIMER_DO_WHEN_READY(tmrAbandonChef, (default_god_text_time*2)/1000) CPRINTLN(DEBUG_MISSION, "HANDLE_ABANDONMENT_MESSAGE: Print Message.") //reset's the god text SET_LABEL_AS_TRIGGERED("METH_GOD_18", FALSE) CANCEL_TIMER(tmrAbandonChef) ENDIF ELSE // clear and reset the god text IF IS_THIS_PRINT_BEING_DISPLAYED("METH_GOD_18") CLEAR_THIS_PRINT("METH_GOD_18") ENDIF IF HAS_LABEL_BEEN_TRIGGERED("METH_GOD_18") SET_LABEL_AS_TRIGGERED("METH_GOD_18", FALSE) ENDIF IF IS_TIMER_STARTED(tmrAbandonChef) CPRINTLN(DEBUG_MISSION, "HANDLE_ABANDONMENT_MESSAGE: Player is back - cancel timer.") CANCEL_TIMER(tmrAbandonChef) ENDIF ENDIF ENDPROC // @SBA - resets stuff if Chef is no longer about to die PROC RESET_ABANDONMENT_STUFF() IF IS_TIMER_STARTED(tmrCheckChefForLOS) CANCEL_TIMER(tmrCheckChefForLOS) ENDIF IF IS_TIMER_STARTED(tmrChefDeathTimer) CANCEL_TIMER(tmrChefDeathTimer) ENDIF ENDPROC // @SBA - kills the chef if he can't be seen PROC KILL_THE_CHEF() IF NOT IS_PED_INJURED(buddy.ped) BOOL bKillChef = FALSE VECTOR vChefPos = GET_ENTITY_COORDS(buddy.ped) IF NOT IS_SPHERE_VISIBLE(vChefPos, 1.0) CPRINTLN(DEBUG_MISSION, "KILL_THE_CHEF: Chef's sphere not visible!") bKillChef = TRUE ELSE IF NOT IS_TIMER_STARTED(tmrCheckChefForLOS) START_TIMER_NOW(tmrCheckChefForLOS) ELIF TIMER_DO_WHEN_READY(tmrCheckChefForLOS, 1.000) IF NOT HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(), buddy.ped) CPRINTLN(DEBUG_MISSION, "KILL_THE_CHEF: Chef's not in LOS!") bKillChef = TRUE RESET_ABANDONMENT_STUFF() ENDIF ENDIF ENDIF IF bKillChef CPRINTLN(DEBUG_MISSION,"KILL_THE_CHEF: Killing the Chef Now!") // Do we need a sound? SHOOT_SINGLE_BULLET_BETWEEN_COORDS((<>), vChefPos, 10000, TRUE) EXPLODE_PED_HEAD(buddy.ped) APPLY_DAMAGE_TO_PED(buddy.ped, 10000, TRUE) ENDIF ENDIF ENDPROC // @SBA - for first part of wave 0, handles killing the chef if he's overrun by bad guys and the player isn't there PROC HANDLE_WAVE_0_CHEF_DEMISE() // Is Chef already on the outs? IF IS_PED_INJURED(buddy.ped) EXIT ENDIF // Is Player close enough to Chef? IF NOT HAS_PLAYER_ABANDONED_CHEF_WAVE_0() RESET_ABANDONMENT_STUFF() EXIT ENDIF // @SBA - check if bad guys are in the vicinity IF IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1391.1970, 3601.0510, 37.9418>>), "v_39_UpperRm3") OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") IF NOT IS_TIMER_STARTED(tmrChefDeathTimer) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_CHEF_DEMISE: Chef is in danger - starting death timer!") START_TIMER_NOW(tmrChefDeathTimer) // play Chef's help dialogue IF PLAY_CHEF_CONVERSATION(sChefHelp1) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_CHEF_DEMISE: Playing Chef's help dialogue!") ENDIF ENDIF // If timer is up, ok to kill the Chef IF TIMER_DO_WHEN_READY(tmrChefDeathTimer, kfChefDeathTime) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_CHEF_DEMISE: The Chef must die!") KILL_THE_CHEF() ENDIF ELSE RESET_ABANDONMENT_STUFF() ENDIF ENDPROC // @SBA - for second part of wave 0, handles killing the chef if he's overrun by bad guys and the player isn't there PROC HANDLE_WAVE_0_PART_2_CHEF_DEMISE() // Is Chef already on the outs? IF IS_PED_INJURED(buddy.ped) EXIT ENDIF // Is Player close enough to Chef? IF NOT HAS_PLAYER_ABANDONED_CHEF_WAVE_0_PART2() RESET_ABANDONMENT_STUFF() EXIT ENDIF // @SBA - check if bad guys are in the vicinity IF IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbTopBackStairsVolume) OR IS_ANY_PED_IN_TRIGGER_BOX(wave_0_inside_enemy, tbTopBackStairsVolume) IF NOT IS_TIMER_STARTED(tmrChefDeathTimer) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_PART_2_CHEF_DEMISE: Chef is in danger - starting death timer!") START_TIMER_NOW(tmrChefDeathTimer) // play Chef's help dialogue IF PLAY_CHEF_CONVERSATION(sChefHelp1) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_PART_2_CHEF_DEMISE: Playing Chef's help dialogue!") ENDIF ENDIF // If timer is up, ok to kill the Chef IF TIMER_DO_WHEN_READY(tmrChefDeathTimer, kfChefDeathTime) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_0_PART_2_CHEF_DEMISE: The Chef must die!") KILL_THE_CHEF() ENDIF ELSE RESET_ABANDONMENT_STUFF() ENDIF ENDPROC // @SBA - for wave 2, handles killing the chef if he's overrun by bad guys and the player isn't there PROC HANDLE_WAVE_2_CHEF_DEMISE() // Is Chef already on the outs? IF IS_PED_INJURED(buddy.ped) EXIT ENDIF // Is Player close enough to Chef? IF NOT HAS_PLAYER_ABANDONED_CHEF_WAVE_2() RESET_ABANDONMENT_STUFF() EXIT ENDIF // @SBA - check if bad guys are in the vicinity IF IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackRoofVolume) IF NOT IS_TIMER_STARTED(tmrChefDeathTimer) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_2_CHEF_DEMISE: Chef is in danger - starting death timer!") START_TIMER_NOW(tmrChefDeathTimer) // play Chef's help dialogue IF PLAY_CHEF_CONVERSATION(sChefHelp1) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_2_CHEF_DEMISE: Playing Chef's help dialogue!") ENDIF ENDIF // If timer is up, ok to kill the Chef IF TIMER_DO_WHEN_READY(tmrChefDeathTimer, kfChefDeathTime) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_2_CHEF_DEMISE: The Chef must die!") KILL_THE_CHEF() ENDIF ELSE RESET_ABANDONMENT_STUFF() ENDIF ENDPROC // @SBA - for wave 2, handles killing the chef if he's overrun by bad guys and the player isn't there PROC HANDLE_WAVE_3_CHEF_DEMISE() // Is Chef already on the outs? IF IS_PED_INJURED(buddy.ped) EXIT ENDIF // Is Player close enough to Chef? IF NOT HAS_PLAYER_ABANDONED_CHEF_WAVE_3() RESET_ABANDONMENT_STUFF() EXIT ENDIF // @SBA - check if bad guys are in the vicinity IF IS_ANY_PED_IN_TRIGGER_BOX(wave_3_enemy, tbLiquorStoreVolume) IF NOT IS_TIMER_STARTED(tmrChefDeathTimer) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_3_CHEF_DEMISE: Chef is in danger - starting death timer!") START_TIMER_NOW(tmrChefDeathTimer) // play Chef's help dialogue IF PLAY_CHEF_CONVERSATION(sChefHelp1) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_3_CHEF_DEMISE: Playing Chef's help dialogue!") ENDIF ENDIF // If timer is up, ok to kill the Chef IF TIMER_DO_WHEN_READY(tmrChefDeathTimer, kfChefDeathTime) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_3_CHEF_DEMISE: The Chef must die!") KILL_THE_CHEF() ENDIF ELSE RESET_ABANDONMENT_STUFF() ENDIF ENDPROC /// PURPOSE: /// Chef will say a line of dialogue if he's taken enough damage PROC HANDLE_CHEF_DAMAGED_DIALOGUE() // Is Chef already gone? IF IS_PED_INJURED(buddy.ped) EXIT ENDIF // only play once until reset IF HAS_LABEL_BEEN_TRIGGERED(sChefHurt) EXIT ENDIF // quit bellyaching about every little gun shot wound IF GET_ENTITY_HEALTH(buddy.ped) > 150 EXIT ENDIF // ignore friendly fire (which should be fatal anyway) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(buddy.ped, PLAYER_PED_ID()) EXIT ENDIF ENDIF // play Chef's owie dialogue IF PLAY_CHEF_CONVERSATION(sChefHurt) CPRINTLN(DEBUG_MISSION,"HANDLE_WAVE_3_CHEF_DEMISE: Playing Chef's I'm hurt dialogue!") SET_LABEL_AS_TRIGGERED(sChefHurt, TRUE) ENDIF ENDPROC // @SBA - specific test for after back porch wave, on the way to last wave FUNC BOOL IS_PLAYER_NEAR_CHEF_ON_STAIRS() VECTOR vplayer_position = GET_ENTITY_COORDS(player_ped_id()) // IF player is already on ground floor, continue IF (vplayer_position.z < 37.00) RETURN TRUE ENDIF // Check distance to Chef if player isn't on other side of wall from him IF NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1390.91, 3608.21, 38.91>>), "v_39_UpperRm3") // If the player is, is he close enough to Chef IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(buddy.ped), vplayer_position) < 5.5 RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC // *********************************************************************************** //*****WIDGETS #IF IS_DEBUG_BUILD bool widget_reset_cutscene = false bool widget_create_object = false bool widget_modify = false bool widget_vehicle_camera_active = false bool widget_reset_deformation = false bool widget_apply_deformation = false bool widget_activate_ptfx = false int widget_blip_alpha float widget_temp_width float widget_temp_height float widget_temp_depth float widget_angled_length float widget_anim_speed = 1.0 float widget_heading float widget_fov = 45.00 float widget_blip_scale float widget_vehicle_damage float widget_vehicle_deformation vector widget_offset_bl vector widget_offset_br vector widget_bl vector widget_br vector widget_object_pos vector widget_object_rot vector widget_object_pos_2 vector widget_object_rot_2 vector widget_cam_attach_offset vector widget_cam_point_offset vector widget_blip_pos vector widget_veh_offset vector widget_ptfx_pos vector widget_ptfx_rot camera_index widget_camera //mission specific widget variables int x_squares = 1 int y_squares = 1 proc locate_widget() vector widget_player_pos widget_player_pos = GET_ENTITY_COORDS(player_ped_id()) IS_ENTITY_AT_COORD(player_ped_id(), widget_player_pos, <>, false, true) endproc proc angled_area_locate_widget() widget_bl = get_offset_from_entity_in_world_coords(player_ped_id(), widget_offset_bl) widget_br = get_offset_from_entity_in_world_coords(player_ped_id(), widget_offset_br) IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), widget_bl, widget_br, widget_angled_length, false) if widget_offset_br.z > 0.0 SET_ENTITY_HEADING(player_ped_id(), widget_heading) endif endproc proc attach_object_to_ped_and_move(ped_index mission_ped, object_index &mission_object) if DOES_ENTITY_EXIST(mission_ped) if not is_ped_injured(mission_ped) if DOES_ENTITY_EXIST(mission_object) ATTACH_ENTITY_TO_ENTITY(mission_object, mission_ped, bonetag_ph_r_hand, widget_object_pos, widget_object_rot) endif endif endif endproc proc set_the_ped_anim_speed(ped_index mission_ped, string dict_name, string anim_name, float anim_speed) if DOES_ENTITY_EXIST(mission_ped) if not is_ped_injured(mission_ped) if IS_ENTITY_PLAYING_ANIM(mission_ped, dict_name, anim_name) SET_ENTITY_ANIM_SPEED(mission_ped, dict_name, anim_name, anim_speed) endif endif endif endproc proc create_and_move_object(object_index &mission_object) if DOES_ENTITY_EXIST(mission_object) SET_ENTITY_COORDS_NO_OFFSET(mission_object, widget_object_pos) SET_ENTITY_ROTATION(mission_object, widget_object_rot) endif endproc proc create_and_move_object_2(object_index &mission_object) if DOES_ENTITY_EXIST(mission_object) SET_ENTITY_COORDS_NO_OFFSET(mission_object, widget_object_pos_2) SET_ENTITY_ROTATION(mission_object, widget_object_rot_2) endif endproc proc attach_object_to_object_and_move(object_index &parent_object, object_index &mission_object) if DOES_ENTITY_EXIST(parent_object) if DOES_ENTITY_EXIST(mission_object) ATTACH_ENTITY_TO_ENTITY(mission_object, parent_object, -1, widget_object_pos_2, widget_object_rot_2) endif endif endproc proc create_and_move_pickup_widget(pickup_index &widget_mission_pickup, pickup_type pick_type, vector &pos, vector &rot) if widget_create_object if not widget_modify widget_mission_pickup = create_pickup_rotate(pick_type, pos, rot, true) widget_object_pos.x = pos.x widget_object_pos.y = pos.y widget_object_pos.z = pos.z widget_object_rot.x = rot.x widget_object_rot.y = rot.y widget_object_rot.z = rot.z widget_modify = true else if lk_timer(original_time, 500) if does_pickup_exist(widget_mission_pickup) remove_pickup(widget_mission_pickup) else widget_mission_pickup = create_pickup_rotate(pick_type, widget_object_pos, widget_object_rot, true) endif original_time = get_game_timer() endif endif endif endproc proc camera_attached_to_vehicle_widget(vehicle_index &mission_veh) if widget_vehicle_camera_active if not does_cam_exist(widget_camera) widget_camera = create_cam("default_scripted_camera", false) ATTACH_CAM_TO_ENTITY(widget_camera, mission_veh, widget_cam_attach_offset) POINT_CAM_AT_ENTITY(widget_camera, mission_veh, widget_cam_point_offset) set_cam_active(widget_camera, true) render_script_cams(true, false) else ATTACH_CAM_TO_ENTITY(widget_camera, mission_veh, widget_cam_attach_offset) POINT_CAM_AT_ENTITY(widget_camera, mission_veh, widget_cam_point_offset) set_cam_fov(widget_camera, widget_fov) endif endif endproc proc blip_pos_scale_and_alpha_widget(blip_index &mission_blip) if does_blip_exist(mission_blip) set_blip_coords(mission_blip, widget_blip_pos) set_blip_scale(mission_blip, widget_blip_scale) set_blip_alpha(mission_blip, widget_blip_alpha) else mission_blip = add_blip_for_coord(widget_blip_pos) set_blip_as_friendly(mission_blip, true) endif endproc proc vehicle_offset_system(vehicle_index miss_veh) if does_entity_exist(miss_veh) if is_vehicle_driveable(miss_veh) DRAW_MARKER(MARKER_CYLINDER, get_offset_from_entity_in_world_coords(miss_veh, widget_offset_br), <<0.0, 0.0, 0.0>>, <<0.0, 0.0, 0.0>>, <>, 255, 0, 128, 178) endif endif endproc proc vehicle_damage_widget(vehicle_index mission_vehicle) if does_entity_exist(mission_vehicle) if is_vehicle_driveable(mission_vehicle) if widget_reset_deformation set_vehicle_fixed(mission_vehicle) widget_reset_deformation = false widget_apply_deformation = false endif if widget_apply_deformation SET_VEHICLE_DAMAGE(mission_vehicle, widget_veh_offset, widget_vehicle_damage, widget_vehicle_deformation, TRUE) widget_apply_deformation = false endif endif endif endproc proc pfx_widget() if widget_activate_ptfx START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_chin1_freezer_gust", widget_ptfx_pos, widget_ptfx_rot) // START_PARTICLE_FX_LOOPED_AT_COORD("cs_dry_ice_freezer_door", widget_ptfx_pos, widget_ptfx_rot) // cs_dry_ice_freezer_door // scr_chin1_freezer_gust widget_activate_ptfx = false endif endproc //**************************************************WIDGETS************************************************** proc load_lk_widgets() chinese_1_widget_group = start_widget_group("Chinese1") // @SBA - uncomment to be able to switch whether to play the greneade cutscene or not //ADD_WIDGET_INT_SLIDER("Flip Grenade Launcher cutscene", g_replay.iReplayInt[PLAYER_RECEIVED_GRENADE_LAUNCHER], NOT_GOT_GLAUNCHER, HAS_GOT_GLAUNCHER, 1) #IF IS_DEBUG_BUILD start_widget_group("locate widget") add_widget_float_slider("width", widget_temp_width, -3000.0, 3000.0, 0.1) add_widget_float_slider("depth", widget_temp_depth, -3000.0, 3000.0, 0.1) add_widget_float_slider("height", widget_temp_height, -3000.0, 3000.0, 0.1) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("angled_area") add_widget_float_slider("left offset x", widget_offset_bl.x, -2000.0, 2000.0, 0.1) add_widget_float_slider("left offset y", widget_offset_bl.y, -2000.0, 2000.0, 0.1) add_widget_float_slider("left offset z", widget_offset_bl.z, -2000.0, 2000.0, 0.1) add_widget_float_slider("right offset x", widget_offset_br.x, -2000.0, 2000.0, 0.1) add_widget_float_slider("right offset y", widget_offset_br.y, -2000.0, 2000.0, 0.1) add_widget_float_slider("right offset z", widget_offset_br.z, -2000.0, 2000.0, 0.1) add_widget_float_slider("angled area length", widget_angled_length, -2000.0, 2000.0, 0.1) add_widget_float_slider("heading", widget_heading, -2000.0, 2000.0, 0.1) add_widget_float_read_only("widget_bl x", widget_bl.x) add_widget_float_read_only("widget_bl y", widget_bl.y) add_widget_float_read_only("widget_bl z", widget_bl.z) add_widget_float_read_only("widget_br x", widget_br.x) add_widget_float_read_only("widget_br y", widget_br.y) add_widget_float_read_only("widget_br z", widget_br.z) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("object attach to ped widget") add_widget_float_slider("pos offset x", widget_object_pos.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos offset y", widget_object_pos.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos offset z", widget_object_pos.z, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot offset x", widget_object_rot.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot offset y", widget_object_rot.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot offset z", widget_object_rot.z, -3000.0, 3000.0, 0.01) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("grid square widget") add_widget_float_slider("bl x", widget_bl.x, -5000.0, 5000.0, 0.01) add_widget_float_slider("bl y", widget_bl.y, -5000.0, 5000.0, 0.01) add_widget_float_slider("bl z", widget_bl.z, -5000.0, 5000.0, 0.01) add_widget_float_slider("tr x", widget_br.x, -5000.0, 5000.0, 0.01) add_widget_float_slider("tr y", widget_br.y, -5000.0, 5000.0, 0.01) add_widget_float_slider("tr z", widget_br.z, -5000.0, 5000.0, 0.01) add_widget_int_slider("x_squares", x_squares, 1, 500, 1) add_widget_int_slider("y_squares", y_squares, 1, 500, 1) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("anim speed widget") add_widget_float_slider("anim speed", widget_anim_speed, 0.1, 10.0, 0.01) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("reset cutscene widget") add_widget_bool("reset cutscene", widget_reset_cutscene) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("object pos and rot widget") add_widget_float_slider("pos x", widget_object_pos.x, -4000.0, 4000.0, 0.01) add_widget_float_slider("pos y", widget_object_pos.y, -4000.0, 4000.0, 0.01) add_widget_float_slider("pos z", widget_object_pos.z, -4000.0, 4000.0, 0.01) add_widget_float_slider("rot x", widget_object_rot.x, -4000.0, 4000.0, 0.01) add_widget_float_slider("rot y", widget_object_rot.y, -4000.0, 4000.0, 0.01) add_widget_float_slider("rot z", widget_object_rot.z, -4000.0, 4000.0, 0.01) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("object pos and rot widget 2") add_widget_float_slider("pos x", widget_object_pos_2.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos y", widget_object_pos_2.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos z", widget_object_pos_2.z, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot x", widget_object_rot_2.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot y", widget_object_rot_2.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot z", widget_object_rot_2.z, -3000.0, 3000.0, 0.01) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("attach object to object pos and rot widget") add_widget_float_slider("pos x", widget_object_pos_2.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos y", widget_object_pos_2.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("pos z", widget_object_pos_2.z, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot x", widget_object_rot_2.x, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot y", widget_object_rot_2.y, -3000.0, 3000.0, 0.01) add_widget_float_slider("rot z", widget_object_rot_2.z, -3000.0, 3000.0, 0.01) stop_widget_group() #endif #IF IS_DEBUG_BUILD start_widget_group("create and move PICKUP inside interior") ADD_WIDGET_bool("create_object", widget_create_object) ADD_WIDGET_FLOAT_SLIDER("object pos x", widget_object_pos.x, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("object pos y", widget_object_pos.y, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("object pos z", widget_object_pos.z, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("object rotation x", widget_object_rot.x, 0.0, 360.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("object rotation y", widget_object_rot.y, 0.0, 360.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("object rotation z", widget_object_rot.z, 0.0, 360.0, 0.1) stop_widget_group() #endif start_widget_group("camaera attached to vehicle widget") add_widget_bool("create camera", widget_vehicle_camera_active) ADD_WIDGET_FLOAT_SLIDER("pos x", widget_cam_attach_offset.x, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("pos y", widget_cam_attach_offset.y, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("pos z", widget_cam_attach_offset.z, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("point offset x", widget_cam_point_offset.x, -3000.0, 3000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("point offset y", widget_cam_point_offset.y, -3000.0, 3000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("point offset z", widget_cam_point_offset.z, -3000.0, 3000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("FOV", widget_fov, -3000.0, 3000.0, 0.1) stop_widget_group() start_widget_group("blip position, scale and alpha widget") ADD_WIDGET_FLOAT_SLIDER("pos x", widget_blip_pos.x, -4000.0, 4000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("pos y", widget_blip_pos.y, -4000.0, 4000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("pos z", widget_blip_pos.z, -4000.0, 4000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("scale", widget_blip_scale, -1.0, 40.0, 0.01) ADD_WIDGET_int_SLIDER("alpha", widget_blip_alpha, -1, 400, 1) stop_widget_group() start_widget_group("vehicle offset sphere") ADD_WIDGET_FLOAT_SLIDER("offset x", widget_offset_br.x, -400.0, 400.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("offset y", widget_offset_br.y, -400.0, 400.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("offset z", widget_offset_br.z, -400.0, 400.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("sphere radius", widget_blip_scale, -1.0, 40.0, 0.01) stop_widget_group() start_widget_group("vehicle damage") ADD_WIDGET_bool("Reset vehicle deformation", widget_reset_deformation) ADD_WIDGET_bool("Apply vehicle deformation", widget_apply_deformation) ADD_WIDGET_FLOAT_SLIDER("vehicle offset x", widget_veh_offset.x, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("vehicle offset y", widget_veh_offset.y, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("vehicle offset z", widget_veh_offset.z, -3000.0, 3000.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("vehicle damage", widget_vehicle_damage, 0.0, 2000, 1000) ADD_WIDGET_FLOAT_SLIDER("vehicle deformation", widget_vehicle_deformation, 0.0, 2000, 1000) stop_widget_group() START_WIDGET_GROUP("Focus push tweaks") ADD_WIDGET_VECTOR_SLIDER( "HINT ENTITY OFFSET", vEntityHint, -1.0, 1.0, 0.01 ) ADD_WIDGET_FLOAT_SLIDER( "HINT SCALAR", fHintScalar, 0, 1.0, 0.01 ) ADD_WIDGET_FLOAT_SLIDER( "HINT HORIZONTAL", fHintHOffset, -1.0, 1.0, 0.01 ) ADD_WIDGET_FLOAT_SLIDER( "HINT VERTICAL", fHintVOffset, -1.0, 1.0, 0.01 ) //ADD_WIDGET_FLOAT_SLIDER( "HINT PITCH", fHintPitch, -90.0, 90.0, 1.0 ) ADD_WIDGET_FLOAT_SLIDER( "HINT FOV", fHintFOV, 0, 50.0, 1.0 ) ADD_WIDGET_BOOL( "RESET HINT", bResetFocusCam ) STOP_WIDGET_GROUP() start_WIDGET_GROUP("ptfx widget") add_widget_bool("toggle ptfx", widget_activate_ptfx) add_widget_float_slider("widget_ptfx_pos x", widget_ptfx_pos.x, -4000.0, 4000.0, 0.1) add_widget_float_slider("widget_ptfx_pos y", widget_ptfx_pos.y, -4000.0, 4000.0, 0.1) add_widget_float_slider("widget_ptfx_pos z", widget_ptfx_pos.z, -4000.0, 4000.0, 0.1) add_widget_float_slider("widget_ptfx_rot x", widget_ptfx_rot.x, -4000.0, 4000.0, 0.1) add_widget_float_slider("widget_ptfx_rot y", widget_ptfx_rot.y, -4000.0, 4000.0, 0.1) add_widget_float_slider("widget_ptfx_rot z", widget_ptfx_rot.z, -4000.0, 4000.0, 0.1) stop_widget_group() stop_widget_group() endproc #endif //**************************************************LOCAL MISSION FUNCTIONS************************************************** // @SBA - reset some values for Chef's warning system PROC RESET_CHEF_WARNINGS_FOR_NEXT_WAVE() SET_LABEL_AS_TRIGGERED(sChefWarn1, FALSE) SET_LABEL_AS_TRIGGERED(sChefWarn2, FALSE) SET_LABEL_AS_TRIGGERED(sChefBackStairsWarn, FALSE) SET_LABEL_AS_TRIGGERED(sChefHurt, FALSE) CANCEL_TIMER(tmrChefOutburstTimer) RESET_ABANDONMENT_STUFF() ENDPROC // @SBA - clean up the script-created cover points PROC REMOVE_ALL_COVERPOINTS() INT idx REMOVE_COVER_POINT(players_cover_point) REMOVE_COVER_POINT(players_cover_point_2) REMOVE_COVER_POINT(wave_3_0_cover_point) REMOVE_COVER_POINT(wave_3_1_cover_point) REMOVE_COVER_POINT(cpWaterHeaterCover) REMOVE_COVER_POINT(cover_point_back_roof_AC) REPEAT COUNT_OF(buddy_cover_point) idx REMOVE_COVER_POINT(buddy_cover_point[idx]) ENDREPEAT REPEAT COUNT_OF(buddy_cover_point_data) idx REMOVE_COVER_POINT(buddy_cover_point_data[idx].cover_point) ENDREPEAT ENDPROC PROC REMOVE_ALL_RECORDINGS() REMOVE_VEHICLE_RECORDING(001, "lkmethlab") REMOVE_VEHICLE_RECORDING(002, "lkmethlab") REMOVE_VEHICLE_RECORDING(003, "lkmethlab") REMOVE_VEHICLE_RECORDING(007, "lkmethlab") REMOVE_VEHICLE_RECORDING(008, "lkmethlab") REMOVE_VEHICLE_RECORDING(009, "lkmethlab") REMOVE_VEHICLE_RECORDING(010, "lkmethlab") REMOVE_VEHICLE_RECORDING(011, "lkmethlab") REMOVE_VEHICLE_RECORDING(012, "lkmethlab") REMOVE_VEHICLE_RECORDING(017, "lkmethlab") REMOVE_VEHICLE_RECORDING(018, "lkmethlab") REMOVE_VEHICLE_RECORDING(019, "lkmethlab") REMOVE_VEHICLE_RECORDING(020, "lkmethlab") REMOVE_VEHICLE_RECORDING(021, "lkmethlab") REMOVE_WAYPOINT_RECORDING("methlab1") REMOVE_WAYPOINT_RECORDING("methlab3") REMOVE_WAYPOINT_RECORDING("methlab4") REMOVE_WAYPOINT_RECORDING("methlab5") REMOVE_WAYPOINT_RECORDING("methlab7") ENDPROC PROC UNLOCK_ALL_MISSION_VEHICLES() if does_entity_exist(trevors_truck.veh) if is_vehicle_driveable(trevors_truck.veh) CPRINTLN(DEBUG_MISSION, "UNLOCK_ALL_MISSION_VEHICLES: unlocking player's vehicle") set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_unlocked) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, true) endif endif for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) if is_vehicle_driveable(parked_cars[i]) set_vehicle_doors_locked(parked_cars[i], vehiclelock_unlocked) endif endif endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if does_entity_exist(wave_0_enemy_vehicle[i].veh) if not is_entity_dead(wave_0_enemy_vehicle[i].veh) CPRINTLN(DEBUG_MISSION, "wave_0_enemy_vehicle not dead: ", i) if is_vehicle_driveable(wave_0_enemy_vehicle[i].veh) set_vehicle_doors_locked(wave_0_enemy_vehicle[i].veh, vehiclelock_unlocked) CPRINTLN(DEBUG_MISSION, "doors unlocked vehicle driveable: ", i) else if i = 1 //blue jeep if get_vehicle_petrol_tank_health(wave_0_enemy_vehicle[i].veh) < 500 set_vehicle_petrol_tank_health(wave_0_enemy_vehicle[i].veh, 1000.00) endif SET_VEHICLE_CAN_LEAK_PETROL(wave_0_enemy_vehicle[i].veh, FALSE) set_vehicle_doors_locked(wave_0_enemy_vehicle[i].veh, vehiclelock_unlocked) endif endif else CPRINTLN(DEBUG_MISSION, "wave_0_enemy_vehicle DEAD: ", i) endif endif endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if does_entity_exist(wave_2_enemy_vehicle[i].veh) if is_vehicle_driveable(wave_2_enemy_vehicle[i].veh) set_vehicle_doors_locked(wave_2_enemy_vehicle[i].veh, vehiclelock_unlocked) endif endif endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 if does_entity_exist(wave_3_enemy_vehicle[i].veh) if is_vehicle_driveable(wave_3_enemy_vehicle[i].veh) set_vehicle_doors_locked(wave_3_enemy_vehicle[i].veh, vehiclelock_unlocked) endif endif endfor // @SBA - added this for i = 0 to count_of(ambient_enemy_vehicle) - 1 if does_entity_exist(ambient_enemy_vehicle[i].veh) if is_vehicle_driveable(ambient_enemy_vehicle[i].veh) set_vehicle_doors_locked(ambient_enemy_vehicle[i].veh, vehiclelock_unlocked) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(ambient_enemy_vehicle[i].veh, true) endif endif endfor ENDPROC /// PURPOSE: /// @SBA - trying 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 CLEAN_UP_NAVMESH_BLOCKERS() IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iNavBlockingUpstairsDoorway) REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlockingUpstairsDoorway) ENDIF IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iNavBlockingUpstairsDoor) REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlockingUpstairsDoor) ENDIF IF DOES_NAVMESH_BLOCKING_OBJECT_EXIST(iNavBlockingBackYardTrailer) REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlockingBackYardTrailer) ENDIF ENDPROC PROC CLEANUP_BAR() IF DOES_ENTITY_EXIST(piBarLady) SET_PED_AS_NO_LONGER_NEEDED(piBarLady) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(IG_JANET) IF DOES_ENTITY_EXIST(piJosef) SET_PED_AS_NO_LONGER_NEEDED(piJosef) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(IG_JOSEF) IF DOES_ENTITY_EXIST(piOldMan1A) SET_PED_AS_NO_LONGER_NEEDED(piOldMan1A) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(IG_OLD_MAN1A) IF DOES_ENTITY_EXIST(piOldMan2) SET_PED_AS_NO_LONGER_NEEDED(piOldMan2) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(IG_OLD_MAN2) IF DOES_ENTITY_EXIST(piDrunk) SET_PED_AS_NO_LONGER_NEEDED(piDrunk) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(IG_RUSSIANDRUNK) REMOVE_SCENARIO_BLOCKING_AREA(sbiBarBlockingArea) ENDPROC proc mission_cleanup() kill_any_conversation() set_fake_wanted_level(0) //g_allowmaxwantedlevelcheck = true // @SBA set to 6? Below, CLEAR_BLOCKED_PLAYER_FOR_LEAD_IN sets it to 5. //set_max_wanted_level(6) set_create_random_cops(true) SET_ALL_RANDOM_PEDS_FLEE(player_id(), false) REDUCE_AMBIENT_MODELS(FALSE) RELEASE_SUPPRESSED_EMERGENCY_CALLS() SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, true) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, true) REMOVE_SCENARIO_BLOCKING_AREAS() // Spawn Chef IF bMissionPassed SET_SCENARIO_PEDS_SPAWN_IN_SPHERE_AREA((<<1389.77686, 3600.51782, 38.0>>), 3.0, 1) bMissionPassed = FALSE ENDIF ASSISTED_MOVEMENT_remove_ROUTE("meth1") ASSISTED_MOVEMENT_remove_ROUTE("Meth1_new") ASSISTED_MOVEMENT_remove_ROUTE("Meth2") ASSISTED_MOVEMENT_remove_ROUTE("methrew_newA") ASSISTED_MOVEMENT_remove_ROUTE("methrew_newB") ASSISTED_MOVEMENT_remove_ROUTE("Wave01457s") SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, 0.0) IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT() ENDIF //stops the buddy from attacking the player when the mission cleansup if DOES_ENTITY_EXIST(buddy.ped) if not is_ped_injured(buddy.ped) SET_PED_RELATIONSHIP_GROUP_HASH(buddy.ped, RELGROUPHASH_PLAYER) endif endif enable_dispatch_services() clear_mission_locate_stuff(locates_data, true) set_time_scale(1.0) CLEAR_WEATHER_TYPE_PERSIST() SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) if is_player_playing(player_id()) set_entity_proofs(player_ped_id(), false, false, false, false, false) SET_PED_USING_ACTION_MODE(player_ped_id(), false) ENDIF CLEAR_BLOCKED_PLAYER_FOR_LEAD_IN() IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, "mission_cleanup: calling NEW_LOAD_SCENE_STOP.") ENDIF // clean up srl if loaded END_SRL() // @SBA - allow player into vehicles again UNLOCK_ALL_MISSION_VEHICLES() // @SBA - remove tactical points CLEAR_TACTICAL_NAV_MESH_POINTS() // @SBA - reset door states SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, FALSE, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, FALSE, 0.0, 0.0, 0.0) // @SBA - clean up stuff I added IF DOES_PICKUP_EXIST(puiGrenadeLauncher) REMOVE_PICKUP(puiGrenadeLauncher) ENDIF IF DOES_ENTITY_EXIST(oiIceBox) DELETE_OBJECT(oiIceBox) ENDIF IF DOES_ENTITY_EXIST(oiIceBoxProxy) DELETE_OBJECT(oiIceBoxProxy) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(mnIceBox) SET_MODEL_AS_NO_LONGER_NEEDED(mnIceBoxProxy) REMOVE_MODEL_HIDE(vIceBoxPos, 2.0, prop_ice_box_01) // @SBA - these didn't appear to be getting cleaned up REMOVE_ANIM_DICT(sCrazyDanceDict) REMOVE_ANIM_DICT("MissChinese1") REMOVE_ANIM_DICT("MissChinese1LeadInOutCHI_1_MCS_4") // Same with recordings - maybe it's automatic? But doesn't hurt. REMOVE_ALL_RECORDINGS() REMOVE_ALL_COVERPOINTS() CLEANUP_BAR() remove_all_blips() RESET_CHEF_WARNINGS_FOR_NEXT_WAVE() SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_NONE ) STOP_AUDIO_SCENES() RELEASE_SCRIPT_AUDIO_BANK() trigger_music_event("CHN1_FAIL") terminate_this_thread() endproc proc mission_passed() Mission_Flow_Mission_Passed() REMOVE_ALL_COVERPOINTS() clear_player_wanted_level(player_id()) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, FALSE) // @SBA - reset player control SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) bMissionPassed = TRUE mission_cleanup() endproc PROC REMOVE_VEHICLE(VEHICLE_INDEX &veh, BOOL b_force_delete = FALSE) IF DOES_ENTITY_EXIST(veh) IF IS_VEHICLE_DRIVEABLE(veh) IF IS_ENTITY_ATTACHED(veh) DETACH_ENTITY(veh) ENDIF ENDIF IF IS_ENTITY_A_MISSION_ENTITY(veh) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(veh, false) IF b_force_delete DELETE_VEHICLE(veh) ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(veh) ENDIF endif ENDIF ENDPROC proc remove_all_vehicles() REMOVE_VEHICLE(trevors_truck.veh, true) endproc proc delete_assets_for_mission_fail() //remove_all_vehicles() if does_entity_exist(buddy.ped) DELETE_PED(buddy.ped) endif set_model_as_no_longer_needed(buddy.model) if does_entity_exist(cheng.ped) DELETE_PED(cheng.ped) endif set_model_as_no_longer_needed(cheng.model) if does_entity_exist(translator.ped) DELETE_PED(translator.ped) endif set_model_as_no_longer_needed(translator.model) for i = 0 to count_of(wave_0_enemy) - 1 if does_entity_exist(wave_0_enemy[i].ped) DELETE_PED(wave_0_enemy[i].ped) endif set_model_as_no_longer_needed(wave_0_enemy[i].model) endfor for i = 0 to count_of(wave_2_enemy) - 1 if does_entity_exist(wave_2_enemy[i].ped) DELETE_PED(wave_2_enemy[i].ped) endif set_model_as_no_longer_needed(wave_2_enemy[i].model) endfor for i = 0 to count_of(wave_3_enemy) - 1 if does_entity_exist(wave_3_enemy[i].ped) DELETE_PED(wave_3_enemy[i].ped) endif set_model_as_no_longer_needed(wave_3_enemy[i].model) endfor for i = 0 to count_of(ambient_enemy) - 1 if does_entity_exist(ambient_enemy[i].ped) DELETE_PED(ambient_enemy[i].ped) endif set_model_as_no_longer_needed(ambient_enemy[i].model) endfor for i = 0 to count_of(wave_0_inside_enemy) - 1 if does_entity_exist(wave_0_inside_enemy[i].ped) DELETE_PED(wave_0_inside_enemy[i].ped) endif set_model_as_no_longer_needed(wave_0_inside_enemy[i].model) endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if does_entity_exist(wave_0_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_0_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_0_enemy_vehicle[i].model) endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if does_entity_exist(wave_2_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_2_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_2_enemy_vehicle[i].model) endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 if does_entity_exist(wave_3_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_3_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_3_enemy_vehicle[i].model) endfor for i = 0 to count_of(ambient_enemy_vehicle) - 1 if does_entity_exist(ambient_enemy_vehicle[i].veh) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), ambient_enemy_vehicle[i].veh) DELETE_VEHICLE(ambient_enemy_vehicle[i].veh) ENDIF ENDIF endif set_model_as_no_longer_needed(ambient_enemy_vehicle[i].model) endfor for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) DELETE_VEHICLE(parked_cars[i]) endif endfor set_model_as_no_longer_needed(phoenix) for i = 0 to count_of(explosive_barrels) - 1 if does_entity_exist(explosive_barrels[i].obj) DELETE_OBJECT(explosive_barrels[i].obj) endif set_model_as_no_longer_needed(explosive_barrels[i].model) endfor for i = 0 to count_of(bins) - 1 if does_entity_exist(bins[i].obj) DELETE_OBJECT(bins[i].obj) endif set_model_as_no_longer_needed(bins[i].model) endfor for i = 0 to count_of(c4) - 1 if does_entity_exist(c4[i].obj) DELETE_OBJECT(c4[i].obj) endif set_model_as_no_longer_needed(c4[i].model) endfor if does_entity_exist(cover_box.obj) delete_object(cover_box.obj) set_model_as_no_longer_needed(cover_box.model) endif endproc proc mission_failed() RESTORE_PLAYER_PED_VARIATIONS(player_ped_id()) // 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 // //CREATE_VEHICLE_FOR_REPLAY MISSION_CLEANUP() delete_assets_for_mission_fail() endproc func bool mission_fail_checks() switch mission_flow case intro_mocap if mission_ped_injured(cheng.ped) mission_failed_text = "METH_FAIL_0" return true endif if mission_ped_injured(translator.ped) mission_failed_text = "METH_FAIL_1" return true endif mission_vehicle_injured(trevors_truck.veh) break case get_to_meth_lab if mission_ped_injured(cheng.ped) mission_failed_text = "METH_FAIL_0" return true endif if mission_ped_injured(translator.ped) mission_failed_text = "METH_FAIL_1" return true endif IF does_entity_exist(cheng.ped) AND does_entity_exist(translator.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(cheng.ped)) > 200.00 and get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(translator.ped)) > 200.00 if not is_entity_on_screen(cheng.ped) and not is_entity_on_screen(translator.ped) //ADD OBANDONED CHENG TEXT mission_failed_text = "METH_FAIL_5" return true endif endif ENDIF if does_entity_exist(cheng.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(cheng.ped)) > 200.00 if not is_entity_on_screen(cheng.ped) //ADD OBANDONED CHENG TEXT mission_failed_text = "METH_FAIL_6" return true endif endif endif if does_entity_exist(translator.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(translator.ped)) > 200.00 if not is_entity_on_screen(translator.ped) //ADD OBANDONED TRANSLATOR TEXT mission_failed_text = "METH_FAIL_7" return true endif endif endif break case wave_0_system if mission_ped_injured(buddy.ped) mission_failed_text = "METH_FAIL_3" return true endif if get_distance_between_coords(get_entity_coords(player_ped_id()), <<1389.5963, 3600.4568, 37.9419>>) > 200.00 mission_failed_text = "METH_FAIL_5" return true endif break case wave_2_system if mission_ped_injured(buddy.ped) mission_failed_text = "METH_FAIL_3" return true endif if get_distance_between_coords(get_entity_coords(player_ped_id()), <<1389.5963, 3600.4568, 37.9419>>) > 200.00 mission_failed_text = "METH_FAIL_5" return true endif break case wave_3_system case mission_passed_mocap if mission_ped_injured(buddy.ped) mission_failed_text = "METH_FAIL_3" return true endif if get_distance_between_coords(get_entity_coords(player_ped_id()), <<1389.5963, 3600.4568, 37.9419>>) > 200.00 mission_failed_text = "METH_FAIL_5" return true endif if mission_ped_injured(cheng.ped) mission_failed_text = "METH_FAIL_0" return true endif if mission_ped_injured(translator.ped) mission_failed_text = "METH_FAIL_1" return true endif IF does_entity_exist(cheng.ped) AND does_entity_exist(translator.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(cheng.ped)) > 200.00 and get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(translator.ped)) > 200.00 if not is_entity_on_screen(cheng.ped) and not is_entity_on_screen(translator.ped) mission_failed_text = "METH_FAIL_5" return true endif endif ENDIF if does_entity_exist(cheng.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(cheng.ped)) > 200.00 if not is_entity_on_screen(cheng.ped) mission_failed_text = "METH_FAIL_6" return true endif endif endif if does_entity_exist(translator.ped) if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(translator.ped)) > 200.00 if not is_entity_on_screen(translator.ped) mission_failed_text = "METH_FAIL_7" return true endif endif endif break endswitch return false endfunc proc setup_mission_fail() STORE_ENEMY_VEHICLES_STILL_ALIVE() remove_all_blips() stop_mission_fail_checks = true trigger_music_event("CHN1_FAIL") MISSION_FLOW_MISSION_FAILED_WITH_REASON(mission_failed_text) mission_flow = mission_fail_stage endproc proc remove_all_mission_assets() if IS_CUTSCENE_PLAYING() STOP_CUTSCENE() else REMOVE_CUTSCENE() endif while is_cutscene_active() wait(0) endwhile REMOVE_CUTSCENE() // @SBA - make sure to reset to game cam if needed and clean cameras IF NOT IS_GAMEPLAY_CAM_RENDERING() RENDER_SCRIPT_CAMS(FALSE, FALSE) ENDIF IF DOES_CAM_EXIST(camera_a) SET_CAM_ACTIVE(camera_a, FALSE) DESTROY_CAM(camera_a) ENDIF IF DOES_CAM_EXIST(camera_b) SET_CAM_ACTIVE(camera_b, FALSE) DESTROY_CAM(camera_b) ENDIF IF DOES_PICKUP_EXIST(puiGrenadeLauncher) REMOVE_PICKUP(puiGrenadeLauncher) ENDIF IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, "remove_all_mission_assets: calling NEW_LOAD_SCENE_STOP.") ENDIF clear_area(<<1403.1777, 3597.2070, 33.7417>>, 200.00, true) clear_area(<<1948.1082, 3842.8328, 31.2855>>, 200.00, true) clear_ped_tasks_immediately(player_ped_id()) if does_entity_exist(trevors_truck.veh) delete_vehicle(trevors_truck.veh) endif clear_mission_locate_stuff(locates_data, true) REMOVE_SCENARIO_BLOCKING_AREAS() ASSISTED_MOVEMENT_remove_ROUTE("meth1") ASSISTED_MOVEMENT_remove_ROUTE("Meth1_new") ASSISTED_MOVEMENT_remove_ROUTE("Meth2") ASSISTED_MOVEMENT_remove_ROUTE("methrew_newA") ASSISTED_MOVEMENT_remove_ROUTE("methrew_newB") ASSISTED_MOVEMENT_remove_ROUTE("Wave01457s") REPLAY_CANCEL_EVENT() remove_all_blips() if does_entity_exist(buddy.ped) DELETE_PED(buddy.ped) endif set_model_as_no_longer_needed(buddy.model) if does_entity_exist(cheng.ped) DELETE_PED(cheng.ped) endif set_model_as_no_longer_needed(cheng.model) if does_entity_exist(translator.ped) DELETE_PED(translator.ped) endif set_model_as_no_longer_needed(translator.model) for i = 0 to count_of(wave_0_enemy) - 1 if does_entity_exist(wave_0_enemy[i].ped) DELETE_PED(wave_0_enemy[i].ped) endif set_model_as_no_longer_needed(wave_0_enemy[i].model) endfor for i = 0 to count_of(wave_2_enemy) - 1 if does_entity_exist(wave_2_enemy[i].ped) DELETE_PED(wave_2_enemy[i].ped) endif set_model_as_no_longer_needed(wave_2_enemy[i].model) endfor for i = 0 to count_of(wave_3_enemy) - 1 if does_entity_exist(wave_3_enemy[i].ped) DELETE_PED(wave_3_enemy[i].ped) endif set_model_as_no_longer_needed(wave_3_enemy[i].model) endfor for i = 0 to count_of(ambient_enemy) - 1 if does_entity_exist(ambient_enemy[i].ped) DELETE_PED(ambient_enemy[i].ped) endif set_model_as_no_longer_needed(ambient_enemy[i].model) endfor for i = 0 to count_of(wave_0_inside_enemy) - 1 if does_entity_exist(wave_0_inside_enemy[i].ped) DELETE_PED(wave_0_inside_enemy[i].ped) endif set_model_as_no_longer_needed(wave_0_inside_enemy[i].model) endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if does_entity_exist(wave_0_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_0_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_0_enemy_vehicle[i].model) endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if does_entity_exist(wave_2_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_2_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_2_enemy_vehicle[i].model) endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 if does_entity_exist(wave_3_enemy_vehicle[i].veh) DELETE_VEHICLE(wave_3_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(wave_3_enemy_vehicle[i].model) endfor for i = 0 to count_of(ambient_enemy_vehicle) - 1 if does_entity_exist(ambient_enemy_vehicle[i].veh) DELETE_VEHICLE(ambient_enemy_vehicle[i].veh) endif set_model_as_no_longer_needed(ambient_enemy_vehicle[i].model) endfor for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) DELETE_VEHICLE(parked_cars[i]) endif endfor set_model_as_no_longer_needed(phoenix) for i = 0 to count_of(explosive_barrels) - 1 if does_entity_exist(explosive_barrels[i].obj) DELETE_OBJECT(explosive_barrels[i].obj) endif set_model_as_no_longer_needed(explosive_barrels[i].model) endfor for i = 0 to count_of(bins) - 1 if does_entity_exist(bins[i].obj) DELETE_OBJECT(bins[i].obj) endif set_model_as_no_longer_needed(bins[i].model) endfor for i = 0 to count_of(c4) - 1 if does_entity_exist(c4[i].obj) DELETE_OBJECT(c4[i].obj) endif set_model_as_no_longer_needed(c4[i].model) endfor if does_entity_exist(cover_box.obj) delete_object(cover_box.obj) set_model_as_no_longer_needed(cover_box.model) endif REMOVE_ALL_RECORDINGS() CLEANUP_BAR() endproc proc initialise_mission_variables() stop_mission_fail_checks = false wave_0_complete = false wave_2_complete = false wave_3_complete = false allow_buddy_ai_system = true // plant_bomb_dialogue_reminder = false ram_cutscene_finished = false //player_message_printed = false //buddy_message_printed = false //is_vehicle_exploded = false allow_ambient_enemy_blips_to_flash = false display_blips_as_friendly = false no_vehicle_recording_skip = false fence_shot = false grenade_launcher_cutscene_playing = false stop_player_proofing = false use_main_cover_point = true refresh_the_task = false grenade_launcher_first_person_cam_active = false waypoint_node_pos = 0 total_number_of_points = 0 remaining_enemies = 0 player_waypoint_status = 22 buddy_waypoint_target_node = 0 player_grenade_launcher_cutscene_status = 0 uber_vehicle_status = 0 get_to_meth_lab_status = 0 intro_mocap_status = 0 get_to_meth_lab_dialogue_system_status = 0 mission_passed_mocap_status = 0 get_to_meth_lab_audio_scene_system_status = 0 wave_0_audio_scene_system_status = 0 wave_3_audio_scene_system_status = 0 #IF IS_DEBUG_BUILD get_to_meth_lab_skip_status = 0 wave_0_system_skip_status = 0 wave_3_system_skip_status = 0 #endif #IF IS_DEBUG_BUILD menu_stage_selector[0].sTxtLabel = "Outside Hicks Bar" menu_stage_selector[1].sTxtLabel = "Outside Meth Lab - CHI_1_MCS_1" menu_stage_selector[2].sTxtLabel = "Start of Wave 0 shootout" menu_stage_selector[3].sTxtLabel = "Wave 0 outside enemies" menu_stage_selector[4].sTxtLabel = "Wave 2 after grenade launcher cutscene" menu_stage_selector[5].sTxtLabel = "Wave 3 CHI_1_MCS_4" #endif // blood[0].decal_texture_id = DECAL_RSID_BLOOD_DIRECTIONAL // blood[0].pos = <<1984.59, 3050.58, 47.533>> //47.43 // blood[0].direction = <<0.0, 0.0, -1.0>> // blood[0].side = normalise_vector(<<0.0, 1.0, 0.0>>) //heading // blood[0].width = 0.2 // blood[0].height = 0.2 // blood[0].fAlpha = 1.0 // blood[0].life = -1 // blood[0].wash_amount = 0.3 // blood[0].decal_removed = false // // // blood[1].decal_texture_id = DECAL_RSID_BLOOD_SPLATTER // blood[1].pos = <<1984.64, 3050.62, 47.423>> //47.32 // blood[1].direction = <<0.0, -1.0, 0.0>>//<<0.0, -1.0, 0.0>> // blood[1].side = normalise_vector(<<1.0, 0.0, 0.0>>) //heading //<<1.0, 1.0, 0.0>> // blood[1].width = 0.2 // blood[1].height = 0.2 // blood[1].fAlpha = 1.0 // blood[1].life = -1 // blood[1].wash_amount = 0.3 // blood[1].decal_removed = false buddy_cover_point_data[0].pos = vChefCoverPointBackStairs buddy_cover_point_data[0].cover_from_pos = <<1372.99622, 3617.98950, 33.89206>> buddy_cover_point_data[0].heading = 105.0 buddy_cover_point_data[1].pos = vChefCoverPointBackStairs2 buddy_cover_point_data[1].cover_from_pos = <<1372.99622, 3617.98950, 33.89206>> buddy_cover_point_data[1].heading = 105.0 buddy_cover_point_data[2].pos = <<1406.77, 3615.64, 38.01>> buddy_cover_point_data[2].cover_from_pos = <<1420.11, 3617.82, 36.26>> buddy_cover_point_data[2].heading = 290.8229 buddy_cover_point_data[3].pos = <<1408.31, 3614.82, 38.00>> buddy_cover_point_data[3].cover_from_pos = <<1420.11, 3617.82, 36.26>> buddy_cover_point_data[3].heading = 290.8229 // wave 3 - liquor store buddy_cover_point_data[4].pos = vChefCoverPointLiquorStore buddy_cover_point_data[4].cover_from_pos = <<1394.83398, 3601.50195, 33.98091>> buddy_cover_point_data[4].heading = 197.4313 buddy_cover_point_data[5].pos = vTrevorLiquorStartPos buddy_cover_point_data[5].cover_from_pos = <<1394.83398, 3601.50195, 33.98091>> buddy_cover_point_data[5].heading = 197.4313 //wave 0 wave_0_master_flow_system_status = 0 wave_0_dialogue_system_status = 0 wave_0_buddy_ai_system_status = 0 ramming_gates_cutscene_status = 0 wave_0_assisted_nodes_system_status = 0 //wave 1 - REMOVED @SBA //wave2 wave_2_master_flow_system_status = 0 wave_2_dialogue_system_status = 0 wave_2_buddy_ai_system_status = 0 wave_2_assisted_nodes_system_status = 0 //wave3 wave_3_master_flow_system_status = 0 wave_3_dialogue_system_status = 0 wave_3_buddy_ai_system_status = 0 wave_3_assisted_nodes_system_status = 0 trevors_truck.pos = <<1960.0896, 3838.5664, 31.2088>> trevors_truck.heading = 300.0665 trevors_truck.model = get_player_veh_model(char_trevor) cheng.pos = <<1995.13013, 3058.72192, 46.05180>> //<<1996.9528, 3058.3777, 46.0490>> cheng.heading = 0.0//179.1673 cheng.model = get_npc_ped_model(char_cheng) //IG_TaoCheng cheng.weapon = WEAPONTYPE_INVALID // WEAPONTYPE_pistol cheng.health = 500 cheng.name = "cheng" translator.pos = <<2000.2826, 3056.5327, 46.0492>> translator.heading = 323.0890//280.00 translator.model = IG_TaosTranslator translator.weapon = WEAPONTYPE_INVALID // WEAPONTYPE_PUMPSHOTGUN translator.health = 500 translator.name = "translator" buddy.pos = <<1388.3929, 3607.6262, 37.9419>> buddy.heading = 114.5685 buddy.model = GET_NPC_PED_MODEL(CHAR_CHEF) // @SBA - ensure we get correct model //A_M_Y_GenStreet_01 ig_cook buddy.weapon = WEAPONTYPE_carbinerifle buddy.health = 300 // @SBA - making the Chef more vulnerable. OLD = 1000 //WAVE 0 iWave0SetupStage = 0 wave_0_enemy[0].model = GoonModel2//A_M_Y_BeachVesp_01 //U_M_M_CHEMSEC_01 wave_0_enemy[0].pos = <<1353.6407, 3603.9707, 33.9350>> wave_0_enemy[0].heading = 215.4769 wave_0_enemy[0].run_to_pos = <<1362.16003, 3590.75684, 33.93283>> wave_0_enemy[0].health = 200 wave_0_enemy[0].weapon = WEAPONTYPE_ASSAULTRIFLE wave_0_enemy[0].accuracy = 2 wave_0_enemy[0].damaged_by_player = true wave_0_enemy[0].name = "wave_0 0" wave_0_enemy[1].model = GoonModel1 wave_0_enemy[1].pos = <<1349.3075, 3607.7500, 33.9041>> wave_0_enemy[1].heading = 229.00 wave_0_enemy[1].run_to_pos = <<1364.8840, 3600.9895, 33.8943>> wave_0_enemy[1].health = 200 wave_0_enemy[1].weapon = weapontype_pistol wave_0_enemy[1].accuracy = 2 wave_0_enemy[1].name = "wave_0 1" wave_0_enemy[2].model = GoonModel2 wave_0_enemy[2].run_to_pos = <<1363.7, 3585.7, 34.3>>//<<1367.6045, 3587.3115, 33.9385>>//<<1363.6156, 3584.8359, 33.9350>> wave_0_enemy[2].health = 200 wave_0_enemy[2].weapon = WEAPONTYPE_ASSAULTRIFLE wave_0_enemy[2].accuracy = 2 wave_0_enemy[2].damaged_by_player = true wave_0_enemy[2].name = "wave_0 2" wave_0_enemy[3].model = GoonModel1 wave_0_enemy[3].run_to_pos = <<1374.11609, 3588.79761, 33.92868>> wave_0_enemy[3].health = 200 wave_0_enemy[3].weapon = weapontype_pistol wave_0_enemy[3].accuracy = 2 wave_0_enemy[3].name = "wave_0 3" wave_0_enemy[4].model = GoonModel2 wave_0_enemy[4].run_to_pos = <<1369.97827, 3596.78906, 33.89490>> wave_0_enemy[4].health = 200 wave_0_enemy[4].weapon = weapontype_pistol wave_0_enemy[4].accuracy = 2 wave_0_enemy[4].damaged_by_player = true wave_0_enemy[4].name = "wave_0 4" wave_0_enemy[5].model = GoonModel1 wave_0_enemy[5].run_to_pos = <<1375.2, 3602.02, 34.0>> // doors = <<1394.700, 3598.500, 35.1>> // @SBA - want this guy to run to doors. OLD = <<1372.86182, 3594.96143, 33.85409>>//<<1370.9216, 3596.7520, 33.8951>> wave_0_enemy[5].health = 200 wave_0_enemy[5].weapon = WEAPONTYPE_PUMPSHOTGUN wave_0_enemy[5].accuracy = 2 wave_0_enemy[5].name = "wave_0 5" wave_0_enemy[6].model = GoonModel2 wave_0_enemy[6].run_to_pos = <<1373.23328, 3589.86597, 34.06313>> wave_0_enemy[6].health = 200 wave_0_enemy[6].weapon = WEAPONTYPE_ASSAULTRIFLE wave_0_enemy[6].accuracy = 2 wave_0_enemy[6].damaged_by_player = true wave_0_enemy[6].name = "wave_0 6" wave_0_enemy[7].model = GoonModel1 wave_0_enemy[7].run_to_pos = <<1367.63049, 3601.10352, 33.90302>>//<<1366.8850, 3596.2249, 33.8948>> wave_0_enemy[7].health = 200 wave_0_enemy[7].weapon = weapontype_pistol wave_0_enemy[7].accuracy = 2 wave_0_enemy[7].name = "wave_0 7" wave_0_enemy[8].model = GoonModel2 wave_0_enemy[8].run_to_pos = <<1365.79187, 3601.94165, 33.90197>> wave_0_enemy[8].health = 200 wave_0_enemy[8].weapon = WEAPONTYPE_PUMPSHOTGUN wave_0_enemy[8].accuracy = 2 wave_0_enemy[8].name = "wave_0 8" // wave_0_enemy[9].pos = <<1351.1438, 3609.5547, 33.8506>> // wave_0_enemy[9].model = GoonModel1 // wave_0_enemy[9].run_to_pos = <<1367.3512, 3595.8589, 33.8949>> // wave_0_enemy[9].health = 200 // wave_0_enemy[9].weapon = weapontype_pistol // wave_0_enemy[9].accuracy = 2 // wave_0_enemy[9].damaged_by_player = true // wave_0_enemy[9].name = "wave_0 9" wave_0_enemy_vehicle[0].pos = <<1274.0476, 3643.2988, 32.3214>> wave_0_enemy_vehicle[0].heading = 287.7983 wave_0_enemy_vehicle[0].model = dubsta2 wave_0_enemy_vehicle[0].recording_number = 001 wave_0_enemy_vehicle[1].pos = <<1313.1727, 3658.6948, 32.0836>> wave_0_enemy_vehicle[1].heading = 181.0355 wave_0_enemy_vehicle[1].model = dubsta2 wave_0_enemy_vehicle[1].recording_number = 002 wave_0_enemy_vehicle[2].pos = <<930.5292, 3564.9253, 32.8149>> wave_0_enemy_vehicle[2].heading = 189.5711 wave_0_enemy_vehicle[2].model = sadler wave_0_enemy_vehicle[2].recording_number = 003 //WAVE 0 - INSIDE ENEMIES wave_0_inside_enemy[0].model = GoonModel2 wave_0_inside_enemy[0].run_to_pos = <<1385.6793, 3619.9067, 37.9258>> wave_0_inside_enemy[0].health = 200 wave_0_inside_enemy[0].weapon = weapontype_pistol wave_0_inside_enemy[0].accuracy = 2 //wave_0_inside_enemy[0].damaged_by_player = true wave_0_inside_enemy[0].name = "wave_0 I 0" wave_0_inside_enemy[1].model = GoonModel1 wave_0_inside_enemy[1].run_to_pos = <<1392.2399, 3617.5964, 37.9258>> wave_0_inside_enemy[1].health = 200 wave_0_inside_enemy[1].weapon = weapontype_smg wave_0_inside_enemy[1].accuracy = 2 wave_0_inside_enemy[1].name = "wave_0 I 1" wave_0_inside_enemy[2].model = GoonModel2 wave_0_inside_enemy[2].run_to_pos = <<1385.6793, 3619.9067, 37.9258>> wave_0_inside_enemy[2].health = 200 wave_0_inside_enemy[2].weapon = weapontype_pistol wave_0_inside_enemy[2].accuracy = 2 //wave_0_inside_enemy[2].damaged_by_player = true wave_0_inside_enemy[2].name = "wave_0 I 2" wave_0_inside_enemy[3].model = GoonModel1 wave_0_inside_enemy[3].run_to_pos = <<1392.4437, 3617.7678, 37.9258>> wave_0_inside_enemy[3].health = 200 wave_0_inside_enemy[3].weapon = WEAPONTYPE_PUMPSHOTGUN wave_0_enemy[3].accuracy = 2 wave_0_inside_enemy[3].name = "wave_0 I 3" //WAVE 1 - REMOVED @SBA //WAVE 2 //ENEMIES ON FOOT wave_2_enemy[0].pos = <<1478.80, 3653.09, 33.79>>//<<1473.9318, 3632.6509, 33.8312>> wave_2_enemy[0].heading = 109.3158 wave_2_enemy[0].model = GoonModel2 wave_2_enemy[0].run_to_pos = <<1433.0659, 3622.7234, 34.7774>> wave_2_enemy[0].health = 200 wave_2_enemy[0].weapon = weapontype_pistol wave_2_enemy[0].accuracy = 2 wave_2_enemy[0].damaged_by_player = true wave_2_enemy[0].name = "wave_2 0" wave_2_enemy[1].pos = <<1497.8187, 3597.0610, 34.4572>>//<<1472.5101, 3635.0879, 33.7732>> wave_2_enemy[1].heading = 61.9718 //129.7310 wave_2_enemy[1].model = GoonModel1 wave_2_enemy[1].run_to_pos = <<1434.63062, 3610.20190, 33.86340>> wave_2_enemy[1].health = 200 wave_2_enemy[1].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[1].accuracy = 2 wave_2_enemy[1].name = "wave_2 1" wave_2_enemy[2].pos = <<1500.47, 3642.82, 33.87>> wave_2_enemy[2].heading = 110.4908//119.1874 wave_2_enemy[2].model = GoonModel2 wave_2_enemy[2].run_to_pos = <<1424.91467, 3626.70874, 33.84133>> wave_2_enemy[2].health = 200 wave_2_enemy[2].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[2].accuracy = 2 wave_2_enemy[2].damaged_by_player = true wave_2_enemy[2].name = "wave_2 2" wave_2_enemy[3].pos = <<1481.33, 3655.46, 33.87>>//<<1477.9222, 3637.6001, 33.8724>> wave_2_enemy[3].heading = 120.00 wave_2_enemy[3].model = GoonModel1 wave_2_enemy[3].run_to_pos = <<1446.2058, 3614.8169, 33.8532>> wave_2_enemy[3].health = 200 wave_2_enemy[3].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[3].accuracy = 2 wave_2_enemy[3].name = "wave_2 3" wave_2_enemy[4].heading = 127.3335 wave_2_enemy[4].model = GoonModel2 wave_2_enemy[4].run_to_pos = <<1420.5912, 3625.5984, 33.8292>>// @SBA - run to stairs pos = <<1404.1445, 3628.6165, 33.8927>> wave_2_enemy[4].health = 200 wave_2_enemy[4].weapon = weapontype_pistol wave_2_enemy[4].accuracy = 2 wave_2_enemy[4].damaged_by_player = true wave_2_enemy[4].name = "wave_2 4" wave_2_enemy[5].heading = 121.0459 wave_2_enemy[5].model = GoonModel1 wave_2_enemy[5].run_to_pos = <<1433.7379, 3613.1348, 33.9168>>// @SBA - run to stairs pos = <<1404.1445, 3628.6165, 33.8927>> wave_2_enemy[5].health = 200 wave_2_enemy[5].weapon = weapontype_pistol wave_2_enemy[5].accuracy = 2 wave_2_enemy[5].damaged_by_player = true // @SBA - keep Chef from killing this guy before he can rush wave_2_enemy[5].name = "wave_2 5" //ENEMIES IN CARS wave_2_enemy[6].model = GoonModel2 wave_2_enemy[6].run_to_pos = <<1425.9056, 3619.8916, 33.9196>> wave_2_enemy[6].health = 200 wave_2_enemy[6].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[6].accuracy = 2 wave_2_enemy[6].name = "wave_2 6" wave_2_enemy[7].model = GoonModel1 wave_2_enemy[7].run_to_pos = <<1421.1597, 3623.3892, 33.8677>> wave_2_enemy[7].health = 200 wave_2_enemy[7].weapon = weapontype_pistol wave_2_enemy[7].accuracy = 2 wave_2_enemy[7].damaged_by_player = true wave_2_enemy[7].name = "wave_2 7" wave_2_enemy[8].model = GoonModel2 wave_2_enemy[8].run_to_pos = <<1422.8757, 3617.6958, 33.9261>> wave_2_enemy[8].health = 200 wave_2_enemy[8].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[8].accuracy = 2 wave_2_enemy[8].name = "wave_2 8" wave_2_enemy[9].model = GoonModel1 wave_2_enemy[9].run_to_pos = <<1427.4917, 3615.0203, 33.9644>> wave_2_enemy[9].health = 200 wave_2_enemy[9].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[9].accuracy = 2 wave_2_enemy[9].name = "wave_2 9" wave_2_enemy[10].model = GoonModel2 wave_2_enemy[10].run_to_pos = <<1431.5154, 3614.6177, 33.9824>> wave_2_enemy[10].health = 200 wave_2_enemy[10].weapon = weapontype_pistol wave_2_enemy[10].accuracy = 2 wave_2_enemy[10].damaged_by_player = true wave_2_enemy[10].name = "wave_2 10" wave_2_enemy[11].model = GoonModel1 wave_2_enemy[11].run_to_pos = <<1429.3192, 3610.2139, 33.8893>> wave_2_enemy[11].health = 200 wave_2_enemy[11].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[11].accuracy = 2 wave_2_enemy[11].name = "wave_2 11" wave_2_enemy[12].model = GoonModel2 wave_2_enemy[12].run_to_pos = <<1425.9056, 3619.8916, 33.9196>> wave_2_enemy[12].health = 200 wave_2_enemy[12].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[12].accuracy = 2 wave_2_enemy[12].name = "wave_2 12" wave_2_enemy[13].model = GoonModel1 wave_2_enemy[13].run_to_pos = <<1421.1597, 3623.3892, 33.8677>> wave_2_enemy[13].health = 200 wave_2_enemy[13].weapon = weapontype_pistol wave_2_enemy[13].accuracy = 2 wave_2_enemy[13].damaged_by_player = true wave_2_enemy[13].name = "wave_2 13" wave_2_enemy[14].model = GoonModel2 wave_2_enemy[14].run_to_pos = <<1422.8757, 3617.6958, 33.9261>> wave_2_enemy[14].health = 200 wave_2_enemy[14].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[14].accuracy = 2 wave_2_enemy[14].name = "wave_2 14" wave_2_enemy[15].model = GoonModel1 wave_2_enemy[15].run_to_pos = <<1427.4917, 3615.0203, 33.9644>> wave_2_enemy[15].health = 200 wave_2_enemy[15].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[15].accuracy = 2 wave_2_enemy[15].name = "wave_2 15" wave_2_enemy[16].model = GoonModel2 wave_2_enemy[16].run_to_pos = <<1431.5154, 3614.6177, 33.9824>> wave_2_enemy[16].health = 200 wave_2_enemy[16].weapon = weapontype_pistol wave_2_enemy[16].accuracy = 2 wave_2_enemy[16].name = "wave_2 16" wave_2_enemy[17].model = GoonModel1 wave_2_enemy[17].run_to_pos = <<1429.3192, 3610.2139, 33.8893>> wave_2_enemy[17].health = 200 wave_2_enemy[17].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[17].accuracy = 2 wave_2_enemy[17].damaged_by_player = true wave_2_enemy[17].name = "wave_2 17" //more running enemies wave_2_enemy[18].pos = <<1499.98, 3646.73, 33.78>> wave_2_enemy[18].heading = 117.6692 wave_2_enemy[18].model = GoonModel2 wave_2_enemy[18].run_to_pos = <<1420.90442, 3623.09033, 33.86813>> wave_2_enemy[18].health = 200 wave_2_enemy[18].weapon = WEAPONTYPE_PUMPSHOTGUN wave_2_enemy[18].accuracy = 2 wave_2_enemy[18].name = "wave_2 18" wave_2_enemy[19].pos = <<1492.34, 3667.31, 33.71>> wave_2_enemy[19].heading = 117.3643 wave_2_enemy[19].model = GoonModel1 wave_2_enemy[19].run_to_pos = <<1444.5588, 3622.1567, 33.7832>> wave_2_enemy[19].health = 200 wave_2_enemy[19].weapon = WEAPONTYPE_ASSAULTRIFLE wave_2_enemy[19].accuracy = 2 wave_2_enemy[19].damaged_by_player = true wave_2_enemy[19].name = "wave_2 19" wave_2_enemy_vehicle[0].pos = <<1183.3048, 3559.6870, 34.4826>> wave_2_enemy_vehicle[0].heading = 274.0203 wave_2_enemy_vehicle[0].model = phoenix wave_2_enemy_vehicle[0].recording_number = 020 wave_2_enemy_vehicle[1].pos = <<1633.7235, 3618.2314, 35.3348>> wave_2_enemy_vehicle[1].heading = 274.0203 wave_2_enemy_vehicle[1].model = sadler wave_2_enemy_vehicle[1].recording_number = 009 wave_2_enemy_vehicle[2].pos = <<1564.2393, 3729.5574, 34.0375>> wave_2_enemy_vehicle[2].heading = 31.0876 wave_2_enemy_vehicle[2].model = dubsta2 wave_2_enemy_vehicle[2].recording_number = 021 wave_2_enemy_vehicle[3].pos = <<1586.9836, 3695.9495, 33.9163>> wave_2_enemy_vehicle[3].heading = 274.0203 wave_2_enemy_vehicle[3].model = pcj wave_2_enemy_vehicle[3].recording_number = 017 wave_2_enemy_vehicle[4].pos = <<1630.4724, 3622.4307, 34.9559 >> wave_2_enemy_vehicle[4].heading = 274.0203 wave_2_enemy_vehicle[4].model = pcj wave_2_enemy_vehicle[4].recording_number = 018 wave_2_enemy_vehicle[5].pos = <<1570.2612, 3720.8474, 34.3386>> wave_2_enemy_vehicle[5].heading = 274.0203 wave_2_enemy_vehicle[5].model = phoenix wave_2_enemy_vehicle[5].recording_number = 019 wave_2_enemy_vehicle[6].pos = <<1510.2731, 3555.9585, 34.3625>> wave_2_enemy_vehicle[6].heading = 106.7575 wave_2_enemy_vehicle[6].model = phoenix wave_2_enemy_vehicle[6].recording_number = 010 wave_2_enemy_vehicle[7].pos = <<1191.8964, 3532.9456, 34.1179>> wave_2_enemy_vehicle[7].heading = 274.0203 wave_2_enemy_vehicle[7].model = phoenix wave_2_enemy_vehicle[7].recording_number = 008 //WAVE 3 - @SBA - they all can be damaged by Chef wave_3_enemy[0].model = GoonModel2 wave_3_enemy[0].run_to_pos = <<1392.9648, 3598.3315, 34.0295>> wave_3_enemy[0].health = 200 wave_3_enemy[0].weapon = WEAPONTYPE_ASSAULTRIFLE wave_3_enemy[0].accuracy = 2 //wave_3_enemy[0].damaged_by_player = true wave_3_enemy[0].name = "wave3_ortega" wave_3_enemy[1].model = GoonModel1 wave_3_enemy[1].run_to_pos = <<1395.8434, 3599.8474, 34.0031>> wave_3_enemy[1].health = 200 wave_3_enemy[1].weapon = weapontype_smg wave_3_enemy[1].accuracy = 2 wave_3_enemy[1].name = "wave_3 1" wave_3_enemy[2].model = GoonModel2 wave_3_enemy[2].run_to_pos = <<1394.6, 3597.5, 35.0>> // @SBA - setting a position nearer the front door. OLD = <<1395.7645, 3594.6904, 33.9130>> wave_3_enemy[2].health = 200 wave_3_enemy[2].weapon = WEAPONTYPE_ASSAULTRIFLE wave_3_enemy[2].accuracy = 2 //wave_3_enemy[2].damaged_by_player = true wave_3_enemy[2].name = "wave_3 2" wave_3_enemy[3].model = GoonModel1 wave_3_enemy[3].run_to_pos = <<1398.4982, 3593.2292, 33.8867>> wave_3_enemy[3].health = 200 wave_3_enemy[3].weapon = weapontype_pistol wave_3_enemy[3].accuracy = 2 wave_3_enemy[3].name = "wave_3 3" ambient_enemy[0].model = GoonModel1 ambient_enemy[0].run_to_pos = <<1397.9803, 3592.6746, 33.7258>> ambient_enemy[0].health = 200 ambient_enemy[0].weapon = weapontype_pistol ambient_enemy[0].accuracy = 5 ambient_enemy[0].name = "ambient 0" ambient_enemy[1].model = GoonModel1 ambient_enemy[1].run_to_pos = <<1386.96, 3575.22, 33.97>> ambient_enemy[1].health = 200 ambient_enemy[1].weapon = weapontype_pistol ambient_enemy[1].accuracy = 5 ambient_enemy[1].name = "ambient 1" ambient_enemy[2].model = GoonModel1 ambient_enemy[2].run_to_pos = <<1387.1794, 3585.0732, 33.8415>> ambient_enemy[2].health = 200 ambient_enemy[2].weapon = weapontype_pistol ambient_enemy[2].accuracy = 5 ambient_enemy[2].name = "ambient 2" ambient_enemy[3].model = GoonModel1 ambient_enemy[3].run_to_pos = <<1377.14, 3580.02, 34.02>> ambient_enemy[3].health = 200 ambient_enemy[3].weapon = weapontype_pistol ambient_enemy[3].accuracy = 5 ambient_enemy[3].name = "ambient 3" wave_3_enemy_vehicle[0].pos = <<1184.7596, 3558.3193, 34.2744>> wave_3_enemy_vehicle[0].heading = 189.00 wave_3_enemy_vehicle[0].model = dubsta2 wave_3_enemy_vehicle[0].recording_number = 007 ambient_enemy_vehicle[0].pos = <<1169.8923, 3537.2869, 34.0337>> ambient_enemy_vehicle[0].heading = 269.5452 ambient_enemy_vehicle[0].model = phoenix ambient_enemy_vehicle[0].recording_number = 011 ambient_enemy_vehicle[1].pos = <<1128.6812, 3539.9797, 33.7354>> ambient_enemy_vehicle[1].heading = 262.7058 ambient_enemy_vehicle[1].model = phoenix ambient_enemy_vehicle[1].recording_number = 012 c4[0].model = GET_WEAPONTYPE_MODEL(WEAPONTYPE_STICKYBOMB) c4[1].model = GET_WEAPONTYPE_MODEL(WEAPONTYPE_STICKYBOMB) c4[2].model = GET_WEAPONTYPE_MODEL(WEAPONTYPE_STICKYBOMB) // c4_nodes[0].pos = <<1378.857, 3601.824, 34.900>> // c4_nodes[0].heading = 180.00 // c4_nodes[0].planted = false // // c4_nodes[1].pos = <<1362.4718, 3591.5798, 33.9255>> // c4_nodes[1].heading = 180.00 // c4_nodes[1].planted = false // // c4_nodes[2].pos = <<1373.4763, 3602.8335, 33.8946>> // c4_nodes[2].heading = 180.00 // c4_nodes[2].planted = false // // c4_nodes[3].pos = <<1374.6613, 3585.6296, 33.929>> // c4_nodes[3].heading = 180.00 // c4_nodes[3].planted = false // // c4_nodes[4].pos = <<1381.0747, 3597.1887, 33.8747>> // c4_nodes[4].heading = 180.00 // c4_nodes[4].planted = false // // c4_nodes[5].pos = <<1381.2036, 3590.4878, 33.8771>> // c4_nodes[5].heading = 180.00 // c4_nodes[5].planted = false // // c4_nodes[6].pos = <<1375.9454, 3588.1265, 33.8806>> // c4_nodes[6].heading = 180.00 // c4_nodes[6].planted = false // // c4_nodes[7].pos = <<1370.5957, 3590.5942, 33.9001>> // c4_nodes[7].heading = 180.00 // c4_nodes[7].planted = false // // c4_nodes[8].pos = <<1362.4718, 3591.5798, 33.9255>> // c4_nodes[8].heading = 180.00 // c4_nodes[8].planted = false // // c4_nodes[9].pos = <<1359.7563, 3598.7205, 33.8910>> // c4_nodes[9].heading = 180.00 // c4_nodes[9].planted = false bins[0].model = PROP_CS_DUMPSTER_01A bins[0].pos = <<1365.95, 3601.94, 34.43>> bins[0].rot = <<0.0, 0.0, 120.00>> // bins[1].model = PROP_CS_DUMPSTER_01A // bins[1].pos = <<1367.00, 3593.720, 34.430>> // bins[1].rot = <<0.0, 0.0, 80.0>> bins[1].model = PROP_CS_DUMPSTER_01A bins[1].pos = <<1374.370, 3589.740, 34.430>> bins[1].rot = <<0.0, 0.0, 122.000>> bins[2].model = PROP_CS_DUMPSTER_01A bins[2].pos = <<1424.570, 3625.710, 34.370>> bins[2].rot = <<0.0, 0.0, 305.00>> explosive_barrels[0].pos = <<1362.49011, 3603.48438, 34.270>> explosive_barrels[0].rot = <<0.0, 0.0, 0.0>> explosive_barrels[0].model = PROP_GASCYL_01A explosive_barrels[1].pos = <<1368.92529, 3606.08716, 34.3>> explosive_barrels[1].rot = <<0.0, 0.0, 0.0>> explosive_barrels[1].model = PROP_GASCYL_01A explosive_barrels[2].pos = <<1361.08, 3595.01, 34.3>> explosive_barrels[2].rot = <<0.0, 0.0, 0.0>> explosive_barrels[2].model = PROP_GASCYL_01A explosive_barrels[3].pos = <<1419.650, 3627.000, 34.180>> explosive_barrels[3].rot = <<0.0, 0.0, 0.0>> explosive_barrels[3].model = PROP_GASCYL_01A cover_box.model = Prop_boxpile_02b//Prop_cratepile_07a cover_box.pos = <<1409.990, 3623.510, 34.020>> cover_box.rot = <<0.0, 0.0, 70.00>> // explosive_barrels[3].pos = <<1421.310, 3627.840, 34.250>> // explosive_barrels[3].rot = <<0.0, 0.0, 0.0>> // explosive_barrels[3].model = Prop_Gas_Tank_01a for i = 0 to count_of(wave_0_enemy) - 1 wave_0_enemy[i].created = false wave_0_enemy[i].bRushInside = FALSE // @SBA - init this bool wave_0_enemy[i].been_killed = FALSE wave_0_status[i] = initial_attack_phase endfor for i = 0 to count_of(wave_0_inside_enemy_status) - 1 wave_0_inside_enemy[i].created = false wave_0_inside_enemy[i].bRushInside = FALSE // @SBA - init this bool wave_0_inside_enemy[i].been_killed = FALSE wave_0_inside_enemy_status[i] = 0 endfor for i = 0 to count_of(wave_2_enemy) - 1 wave_2_enemy[i].created = false wave_2_enemy[i].bRushInside = FALSE // @SBA - init this bool wave_2_enemy[i].been_killed = FALSE wave_2_status[i] = initial_attack_phase endfor for i = 0 to count_of(wave_3_enemy) - 1 wave_3_enemy[i].created = false wave_3_enemy[i].bRushInside = FALSE // @SBA - init this bool wave_3_enemy[i].been_killed = FALSE wave_3_status[i] = initial_attack_phase endfor // @SBA - Making sure this is initialized for i = 0 to count_of(ambient_enemy) - 1 ambient_enemy[i].created = false ambient_enemy[i].bRushInside = FALSE // @SBA - init this bool ambient_enemy[i].been_killed = FALSE ambient_enemy_status[i] = initial_attack_phase endfor for i = 0 to count_of(remaining_enemy) - 1 remaining_enemy_status[0] = 0 endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 wave_0_enemy_vehicle[i].been_destroyed = false endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 wave_2_enemy_vehicle[i].been_destroyed = false endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 wave_3_enemy_vehicle[i].been_destroyed = false endfor for i = 0 to count_of(ambient_enemy_vehicle) - 1 ambient_enemy_vehicle[i].been_destroyed = false endfor // @SBA - initializing trigger volumes tbArrivalCutResolveVol = CREATE_TRIGGER_BOX(<<1380.224609,3593.346436,33.850239>>, <<1414.539917,3604.536865,35.898521>>, 13.000000) tbFrontDoorVolume = CREATE_TRIGGER_BOX((<<1394.211304,3599.770264,33.519615>>), (<<1395.355469,3596.857910,35.675140>>), 4.0) // This is an area behind the Chef: tbUpstairsRushVolume = CREATE_TRIGGER_BOX((<<1395.018799,3604.429932,37.441910>>), (<<1391.960327,3603.366455,39.691910>> ), 6.0) tbUpstairsRushVolume = CREATE_TRIGGER_BOX((<<1391.724731,3601.888916,37.95>>), (<<1399.914551,3605.850098,39.691910>>), 4.75) tbUpstairsCloserRushVolume = CREATE_TRIGGER_BOX((<<1395.802002,3603.719238,37.941910>>), <<1391.546997,3602.099609,39.691910>>, 3.50) tbTopBackStairsVolume = CREATE_TRIGGER_BOX((<<1387.596436,3621.771484,37.832703>>), (<<1389.516235,3616.653320,39.675831>> ), 8.5) tbBackStairsAlleyVolume = CREATE_TRIGGER_BOX((<<1387.938843,3626.496338,33.891834>>), (<<1379.320801,3623.467285,35.641552>>), 3.50) tbOnBackStairsVolume = CREATE_TRIGGER_BOX((<<1388.321, 3622.040, 36.061>>), (<<1389.153, 3619.789, 41.061>>), 6.0) tbFullBackStairsVolume = CREATE_TRIGGER_BOX(<<1388.212646,3622.047607,34.011982>>, <<1390.500977,3615.757324,39.675831>>, 13.500000) tbOutsideMainGatesVolume = CREATE_TRIGGER_BOX((<<1377.952759,3608.572510,33.864216>>), (<<1384.160156,3591.729004,37.661396>>), 15.0) tbBackYardVolume = CREATE_TRIGGER_BOX((<<1420.578491,3615.409424,33.436520>>), (<<1435.515747,3624.327637,35.786892>>), 29.0) tbBackRoofVolume = CREATE_TRIGGER_BOX((<<1399.85681, 3610.41724,37.905733>>), (<<1409.257202,3613.888916,39.666866>>), 16.0) tbBackFullRoofVolume = CREATE_TRIGGER_BOX((<<1398.830200,3625.614502,38.049397>>), (<<1407.572876,3602.470703,43.135361>>), 14.75) tbBackUpstairsRoomVolume = CREATE_TRIGGER_BOX((<<1394.697021,3616.749023,38.10>>), (<<1399.886963,3602.334229,39.691910>>), 7.0) tbBackGateVolume = CREATE_TRIGGER_BOX((<<1405.966675,3629.890869,33.642715>>), (<<1397.764038,3626.875977,35.645195>>), 4.5) tbLiquorStoreVolume = CREATE_TRIGGER_BOX((<<1398.361328,3607.276123,33.680907>>), (<<1388.642090,3603.685547,35.730907>>), 8.0) tbIceBoxInnerVol = CREATE_TRIGGER_BOX(<<1389.272461,3599.501709,33.895496>>, <<1382.610962,3597.052734,37.864140>>, 7.500000) // @SBA smaller version tbIceBoxInnerVol = CREATE_TRIGGER_BOX(<<1388.118286,3599.011475,33.895119>>, <<1384.076221,3597.669922,37.895111>>, 5.00000) tbIceBoxOuterVol = CREATE_TRIGGER_BOX(<<1392.669678,3600.705566,33.980907>>, <<1378.677124,3595.678711,37.389488>>, 17.000000) tbIceBoxCameraVol = CREATE_TRIGGER_BOX(<<1390.041626,3600.490967,33.980907>>, <<1380.214233,3596.944092,37.389095>>, 14.500000) //@SBA - initializing additional variables bBarPatronsCreated = FALSE bIsBarCleanedUp = FALSE bClearCarGen = FALSE bPlayerInVehicle = FALSE bTrevorsVehicleIsOkay = FALSE bDanceAnimDictUnloaded = FALSE bLoadedLastShootoutStuff = FALSE bPlayerInOpeningCover = FALSE bStartedInitialWave = FALSE bInitialWavePropsMade = FALSE bSetTaxiDropoff = FALSE bChefRunsToBackStairs = FALSE bPlayGunFire = FALSE iWaitTimeBeforeRush = 0 iWaveRushersSoFar = 0 iEnemyGrenLaunchDialogue = 0 bPickupAmmoSet = FALSE bSkipGrenLaunchCutscene = FALSE bOutroShitSkip = FALSE bStartTranslatorEmergeBox = FALSE bChefComeOn = FALSE bTellChefGetInside = FALSE bSetIceBoxBlip = FALSE CANCEL_TIMER(tmrChefRunsDelay) ArivialLeadInState = ALI_HALT_VEHICLE // @SBA - Reset label SET_LABEL_AS_TRIGGERED("attack_int", FALSE) endproc proc load_text_and_dialogue() register_script_with_audio() add_ped_for_dialogue(scripted_speech[0], 2, player_ped_id(), "trevor") request_additional_text("MethAud", mission_dialogue_text_slot) request_additional_text("METH", mission_text_slot) while not has_additional_text_loaded(mission_text_slot) or not has_additional_text_loaded(mission_dialogue_text_slot) wait(0) endwhile endproc proc get_to_meth_lab_dialogue_system() switch get_to_meth_lab_dialogue_system_status case 0 if create_conversation(scripted_speech[0], "methaud", "GETIN", conv_priority_medium) original_time = get_game_timer() get_to_meth_lab_dialogue_system_status++ endif break case 1 if not is_any_text_being_displayed(locates_data, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) // printstring("no text being displayed") // printnl() if dialogue_monitoring_system(locates_data.LocationBlip) if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) // @SBA - swapping in-car conversatiion with phone conversation per feedback if PLAYER_CALL_CHAR_CELLPHONE(scripted_speech[0], char_chef, "MethAud", "CH1CAL", CONV_PRIORITY_high) //Ross W - Recording phone call REPLAY_RECORD_BACK_FOR_TIME(0.5, 5.0) // @SBA - init timer for following conversation iGetToMethLabDialogTimer = 0 get_to_meth_lab_dialogue_system_status++ endif else if PLAYER_CALL_CHAR_CELLPHONE(scripted_speech[0], char_chef, "MethAud", "CH1CAL2", CONV_PRIORITY_high) // @SBA - init timer for following conversation iGetToMethLabDialogTimer = 0 get_to_meth_lab_dialogue_system_status++ endif endif endif else // printstring("text being displayed") // printnl() endif break case 2 if dialogue_monitoring_system(locates_data.LocationBlip) // @SBA - setting a timer for following conversation IF iGetToMethLabDialogTimer = 0 iGetToMethLabDialogTimer = get_game_timer() ENDIF // @SBA - start next conversation once timer is up and if player is close to translator IF lk_timer(iGetToMethLabDialogTimer, 2000) IF distance_from_player_to_ped(translator.ped) < 8.0 // @SBA - swapping in-car conversation with phone conversation per feedback //PRINTLN("CONVERSATION STARTING") if create_conversation(scripted_speech[0], "methaud", "BANT1AV1", conv_priority_medium) //script_assert("dialogue") get_to_meth_lab_dialogue_system_status++ endif ENDIF endif ENDIF break case 3 // We're done if conversation is over IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() get_to_meth_lab_dialogue_system_status++ ENDIF // Pause conversation if player gets too far away IF IS_FACE_TO_FACE_CONVERSATION_PAUSED() IF distance_from_player_to_ped(translator.ped) < 8.0 AND distance_from_player_to_ped(cheng.ped) < 8.0 PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) ENDIF ELIF distance_from_player_to_ped(translator.ped) >= 8.0 OR distance_from_player_to_ped(cheng.ped) >= 8.0 PAUSE_FACE_TO_FACE_CONVERSATION(TRUE) ENDIF break endswitch endproc proc setup_parked_cars() parked_cars[0] = create_vehicle(phoenix, <<1362.9155, 3592.5757, 33.9161>>, 20.8352) parked_cars[1] = create_vehicle(phoenix, <<1368.5109, 3603.1089, 33.9014>>, 22.1103) parked_cars[2] = create_vehicle(phoenix, <<1419.4980, 3623.8757, 33.8507>>, 18.4636) parked_cars[3] = create_vehicle(phoenix, <<1433.0057, 3611.3215, 33.8856>>, 15.7737) //parked_cars[4] = create_vehicle(phoenix, <<1432.0254, 3616.4756, 33.9694>>, 105.1350) for i = 0 to 3 set_vehicle_doors_locked(parked_cars[i], vehiclelock_locked) SET_VEHICLE_DIRT_LEVEL(parked_cars[i], 13) set_vehicle_colours(parked_cars[i], (i*5), (i*5)) endfor CPRINTLN(DEBUG_MISSION, "setup_parked_cars: CREATED") endproc proc setup_wave_3_enemies() //no_vehicle_recording_skip = true for i = 0 to count_of(wave_3_enemy_vehicle) - 1 SETUP_ENEMY_VEHICLE(wave_3_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_3_enemy_vehicle[i].veh, wave_3_enemy_vehicle[i].recording_number, "lkmethlab") //CHI1_CAR_DAMAGE if i = 0 if no_vehicle_recording_skip skip_time_in_playback_recorded_vehicle(wave_3_enemy_vehicle[i].veh, 1000) //1000 else skip_time_in_playback_recorded_vehicle(wave_3_enemy_vehicle[i].veh, 10500) //11000 endif endif endfor if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) create_npc_ped_inside_vehicle(wave_3_enemy[0].ped, char_ortega, wave_3_enemy_vehicle[0].veh) setup_enemy_attributes(wave_3_enemy[0]) setup_relationship_enemy(wave_3_enemy[0].ped, true) add_ped_for_dialogue(scripted_speech[0], 6, wave_3_enemy[0].ped, "ortega") else setup_enemy_in_vehicle(wave_3_enemy[0], wave_3_enemy_vehicle[0].veh) endif SET_PED_BLOCKS_PATHING_WHEN_DEAD(wave_3_enemy[0].ped, FALSE) setup_enemy_in_vehicle(wave_3_enemy[1], wave_3_enemy_vehicle[0].veh, vs_front_right) add_ped_for_dialogue(scripted_speech[0], 7, wave_3_enemy[1].ped, "azteca1") SET_PED_BLOCKS_PATHING_WHEN_DEAD(wave_3_enemy[1].ped, FALSE) setup_enemy_in_vehicle(wave_3_enemy[2], wave_3_enemy_vehicle[0].veh, vs_back_left) add_ped_for_dialogue(scripted_speech[0], 8, wave_3_enemy[2].ped, "azteca2") SET_PED_BLOCKS_PATHING_WHEN_DEAD(wave_3_enemy[2].ped, FALSE) setup_enemy_in_vehicle(wave_3_enemy[3], wave_3_enemy_vehicle[0].veh, vs_back_right) add_ped_for_dialogue(scripted_speech[0], ConvertSingleCharacter("B"), wave_3_enemy[3].ped, "azteca4") SET_PED_BLOCKS_PATHING_WHEN_DEAD(wave_3_enemy[3].ped, FALSE) //*****ambient enemies which the player does not have to kill to pass the mission***** for i = 0 to count_of(ambient_enemy_vehicle) - 1 ambient_enemy_vehicle[i].veh = create_vehicle(ambient_enemy_vehicle[i].model, ambient_enemy_vehicle[i].pos, ambient_enemy_vehicle[i].heading) SET_VEHICLE_DIRT_LEVEL(ambient_enemy_vehicle[i].veh, 13) set_vehicle_doors_locked(ambient_enemy_vehicle[i].veh, vehiclelock_lockout_player_only) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(ambient_enemy_vehicle[i].veh, FALSE) start_playback_recorded_vehicle(ambient_enemy_vehicle[i].veh, ambient_enemy_vehicle[i].recording_number, "lkmethlab") if no_vehicle_recording_skip skip_time_in_playback_recorded_vehicle(ambient_enemy_vehicle[i].veh, 0) else skip_time_in_playback_recorded_vehicle(ambient_enemy_vehicle[i].veh, 5000)//2000 endif endfor setup_enemy_in_vehicle(ambient_enemy[0], ambient_enemy_vehicle[0].veh) set_blocking_of_non_temporary_events(ambient_enemy[0].ped, true) SET_PED_CONFIG_FLAG(ambient_enemy[0].ped, PCF_GetOutBurningVehicle, FALSE) SET_PED_CONFIG_FLAG(ambient_enemy[0].ped, PCF_RunFromFiresAndExplosions, FALSE) remove_blip(ambient_enemy[0].blip) setup_enemy_in_vehicle(ambient_enemy[1], ambient_enemy_vehicle[0].veh, vs_front_right) set_blocking_of_non_temporary_events(ambient_enemy[1].ped, true) //remove_blip(ambient_enemy[1].blip) setup_enemy_in_vehicle(ambient_enemy[2], ambient_enemy_vehicle[1].veh) set_blocking_of_non_temporary_events(ambient_enemy[2].ped, true) SET_PED_CONFIG_FLAG(ambient_enemy[0].ped, PCF_GetOutBurningVehicle, FALSE) SET_PED_CONFIG_FLAG(ambient_enemy[0].ped, PCF_RunFromFiresAndExplosions, FALSE) remove_blip(ambient_enemy[2].blip) setup_enemy_in_vehicle(ambient_enemy[3], ambient_enemy_vehicle[1].veh, vs_front_right) set_blocking_of_non_temporary_events(ambient_enemy[3].ped, true) //remove_blip(ambient_enemy[3].blip) // piggy back in here SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_SHOOTING ) endproc func bool are_all_ambient_entities_dead() if is_ped_injured(ambient_enemy[0].ped) and is_ped_injured(ambient_enemy[1].ped) and is_ped_injured(ambient_enemy[2].ped) and is_ped_injured(ambient_enemy[3].ped) and not is_vehicle_driveable(ambient_enemy_vehicle[0].veh) and not is_vehicle_driveable(ambient_enemy_vehicle[1].veh) return true endif return false endfunc proc skip_system() #IF IS_DEBUG_BUILD dont_do_j_skip(locates_data) if is_keyboard_key_just_pressed(key_j) CPRINTLN(DEBUG_MISSION,"skip_system: *** J KEY PRESSED ***") // @SBA - make sure to reset to game cam if needed and clean cameras IF NOT IS_GAMEPLAY_CAM_RENDERING() RENDER_SCRIPT_CAMS(FALSE, FALSE) ENDIF IF DOES_CAM_EXIST(camera_a) SET_CAM_ACTIVE(camera_a, FALSE) DESTROY_CAM(camera_a) ENDIF IF DOES_CAM_EXIST(camera_b) SET_CAM_ACTIVE(camera_b, FALSE) DESTROY_CAM(camera_b) ENDIF IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF IF DOES_PICKUP_EXIST(puiGrenadeLauncher) REMOVE_PICKUP(puiGrenadeLauncher) ENDIF switch mission_flow case intro_mocap if is_cutscene_active() stop_cutscene() endif break case get_to_meth_lab switch get_to_meth_lab_skip_status case 0 // @SBA - if player is not at meth lab yet IF get_to_meth_lab_status = 0 clear_ped_tasks_immediately(player_ped_id()) clear_ped_tasks_immediately(cheng.ped) clear_ped_tasks_immediately(translator.ped) set_entity_coords(player_ped_id(), <<1403.1777, 3597.2070, 33.9251>>) set_entity_coords(cheng.ped, <<1402.1777, 3597.2070, 33.9251>>) set_entity_coords(translator.ped, <<1401.1777, 3597.2070, 33.9251>>) get_to_meth_lab_skip_status++ // @SBA - if cutscene is active, stop it and goto exit state ELIF get_to_meth_lab_status < 5 // @SBA - stop cutscene if playing IF IS_CUTSCENE_ACTIVE() IF IS_CUTSCENE_PLAYING() CPRINTLN(DEBUG_MISSION,"*** SHOULD BE SKIPPING CUTSCENE ***") STOP_CUTSCENE() ELSE CPRINTLN(DEBUG_MISSION,"*** SHOULD BE RELEASING CUTSCENE ***") REMOVE_CUTSCENE() ENDIF ENDIF // get interior if not gotten yet IF get_to_meth_lab_status < 3 meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) ENDIF if is_audio_scene_active("CHI_1_DRIVE_TO_LAB") stop_audio_scene("CHI_1_DRIVE_TO_LAB") endif set_entity_coords(player_ped_id(), vTrevorWindowStartPos) get_to_meth_lab_status = 5 get_to_meth_lab_skip_status++ ENDIF break case 1 // @SBA - if player J-skips twice in this checkpoint, handle the second one to skip the cutscene IF get_to_meth_lab_status < 5 // @SBA - stop cutscene if playing IF IS_CUTSCENE_ACTIVE() IF IS_CUTSCENE_PLAYING() CPRINTLN(DEBUG_MISSION,"*** SHOULD BE SKIPPING CUTSCENE ***") STOP_CUTSCENE() ELSE CPRINTLN(DEBUG_MISSION,"*** SHOULD BE RELEASING CUTSCENE ***") REMOVE_CUTSCENE() ENDIF ENDIF // get interior if not gotten yet IF get_to_meth_lab_status < 3 meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) ENDIF if is_audio_scene_active("CHI_1_DRIVE_TO_LAB") stop_audio_scene("CHI_1_DRIVE_TO_LAB") endif set_entity_coords(player_ped_id(), vTrevorWindowStartPos) get_to_meth_lab_status = 5 get_to_meth_lab_skip_status++ ENDIF break case 2 break endswitch break case wave_0_system switch wave_0_system_skip_status case 0 for i = 0 to count_of(wave_0_enemy) - 1 if not is_ped_injured(wave_0_enemy[i].ped) SET_ENTITY_HEALTH(wave_0_enemy[i].ped, 2) else wave_0_enemy[i].created = true endif endfor wave_0_system_skip_status++ break case 1 if wave_0_master_flow_system_status > 2 // @SBA - get vehicle to destination, set stuff as if the cutscene finished IF IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[2].veh) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(wave_0_enemy_vehicle[2].veh) SKIP_TO_END_AND_STOP_PLAYBACK_RECORDED_VEHICLE(wave_0_enemy_vehicle[2].veh) SET_ENTITY_PROOFS(wave_0_enemy_vehicle[2].veh, false, false, false, false, false) if is_audio_scene_active("CHI_1_TRUCK_ARRIVES") stop_audio_scene("CHI_1_TRUCK_ARRIVES") endif REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[2].veh) original_time = get_game_timer() REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[2]) ram_cutscene_finished = true ELSE ENDIF ENDIF for i = 0 to count_of(wave_0_inside_enemy) - 1 if not is_ped_injured(wave_0_inside_enemy[i].ped) SET_ENTITY_HEALTH(wave_0_inside_enemy[i].ped, 2) endif endfor CLEAR_TACTICAL_NAV_MESH_POINTS() clear_ped_tasks_immediately(player_ped_id()) SET_ENTITY_COORDS(player_ped_id(), <<1386.0081, 3616.5083, 37.9258>>) SET_ENTITY_HEADING(player_ped_id(), 326.3752) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks_immediately(buddy.ped) SET_ENTITY_COORDS(buddy.ped, <<1385.1, 3615.6, 37.9258>>) // @SBA - updated coord. OLD = <<1386.9521, 3618.3870, 37.9258>> SET_ENTITY_HEADING(buddy.ped, 264.0776) // @SBA updated heading. OLD = 164.0776 wave_0_dialogue_system_status = 2 wave_0_buddy_ai_system_status = 1 wave_0_assisted_nodes_system_status = 1 wave_0_master_flow_system_status = 5 wave_0_system_skip_status++ endif break endswitch break case wave_2_system for i = 0 to count_of(wave_2_enemy) - 1 if not is_ped_injured(wave_2_enemy[i].ped) SET_ENTITY_HEALTH(wave_2_enemy[i].ped, 2) else wave_2_enemy[i].created = true endif endfor ped_structure_are_all_enemies_dead(wave_2_enemy) clear_ped_tasks_immediately(player_ped_id()) SET_ENTITY_COORDS(player_ped_id(), <<1407.5627, 3612.4297, 38.0055>>) SET_ENTITY_HEADING(player_ped_id(), 278.8889) clear_ped_tasks_immediately(buddy.ped) SET_ENTITY_COORDS(buddy.ped, <<1407.3434, 3614.1377, 38.0055>>) SET_ENTITY_HEADING(buddy.ped, 272.0829) wave_2_master_flow_system_status = 8 break case wave_3_system switch wave_3_system_skip_status case 0 INT iPoint clear_ped_tasks_immediately(player_ped_id()) SET_ENTITY_COORDS(player_ped_id(), <<1395.8505, 3610.0105, 33.9808>>) SET_ENTITY_HEADING(player_ped_id(), 79.1915) if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) IF WAYPOINT_RECORDING_GET_NUM_POINTS("methlab3", iPoint) SET_PED_WAYPOINT_PROGRESS(buddy.ped, iPoint - 1 ) ENDIF ENDIF clear_ped_tasks_immediately(buddy.ped) // SET_ENTITY_COORDS(buddy.ped, <<1393.5751, 3609.3645, 33.9808>>) // SET_ENTITY_HEADING(buddy.ped, 140.3637) buddy_time = get_game_timer() wave_3_system_skip_status++ break // get Chef into cover after skip CASE 1 TASK_PUT_PED_DIRECTLY_INTO_COVER(buddy.ped, vChefCoverPointLiquorStore, -1, TRUE, NORMAL_BLEND_DURATION, FALSE, FALSE, buddy_cover_point_data[4].cover_point, TRUE) wave_3_buddy_ai_system_status = 4 wave_3_system_skip_status++ BREAK case 2 for i = 0 to count_of(wave_3_enemy) - 1 if not is_ped_injured(wave_3_enemy[i].ped) set_entity_health(wave_3_enemy[i].ped, 2) else wave_3_enemy[i].created = true endif endfor ped_structure_are_all_enemies_dead(wave_3_enemy) wave_3_system_skip_status++ break case 3 set_entity_coords(player_ped_id(), <<1387.9937, 3598.5166, 33.8954>>) if not does_blip_exist(ice_box_blip) ice_box_blip = create_blip_for_coord(<<1388.0475, 3598.6162, 33.8954>>) endif wave_3_master_flow_system_status = 4 wave_3_system_skip_status++ break case 4 break endswitch break CASE mission_passed_mocap // @SBA - stop final cutscene if playing IF IS_CUTSCENE_ACTIVE() CPRINTLN(DEBUG_MISSION,"*** SHOULD BE SKIPPING CUTSCENE ***") STOP_CUTSCENE() ENDIF BREAK endswitch elif is_keyboard_key_just_pressed(key_p) switch mission_flow case get_to_meth_lab remove_all_mission_assets() mission_flow = load_stage_selector_assets launch_mission_stage_menu_status = 0 break case wave_0_system remove_all_mission_assets() mission_flow = load_stage_selector_assets if (get_game_timer() - p_skip_time) > 3000 launch_mission_stage_menu_status = 2 else launch_mission_stage_menu_status = 1 endif p_skip_time = get_game_timer() break case wave_2_system case wave_3_system remove_all_mission_assets() mission_flow = load_stage_selector_assets if (get_game_timer() - p_skip_time) > 3000 launch_mission_stage_menu_status = 4 else launch_mission_stage_menu_status = 3 endif p_skip_time = get_game_timer() break endswitch endif if LAUNCH_MISSION_STAGE_MENU(menu_stage_selector, menu_return_stage) remove_all_mission_assets() launch_mission_stage_menu_status = menu_return_stage mission_flow = load_stage_selector_assets endif #endif endproc //PURPOSE: makes sure the player's current vehicle is acceptible for the buddy locate. If not, create Trevor's truck. proc setup_vehicle_outside_bar() IF bTrevorsVehicleIsOkay EXIT ENDIF IF not does_entity_exist(trevors_truck.veh) if has_model_loaded(trevors_truck.model) if not is_players_last_vehicle_present_and_acceptable(GET_PLAYERS_LAST_VEHICLE(), <<2000.1245, 3059.5662, 46.0491>>, 2, <<2008.9219, 3054.0513, 46.0528>>, 326.3415) CPRINTLN(DEBUG_MISSION, "Player needs an appropriate vehicle. Making one.") WHILE NOT CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, <<2000.1245, 3059.5662, 46.0491>>, 59.1994, false) WAIT(0) CPRINTLN(DEBUG_MISSION, "Waiting on new vehicle...") ENDWHILE OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(trevors_truck.veh) ELSE //IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(trevors_truck.veh), (<<2000.1245, 3059.5662, 46.0491>>)) > 20.0 trevors_truck.veh = GET_PLAYERS_LAST_VEHICLE() CPRINTLN(DEBUG_MISSION, "Need to relocate player's vehicle") SET_ENTITY_COORDS(trevors_truck.veh, (<<2000.1245, 3059.5662, 46.0491>>)) SET_ENTITY_HEADING(trevors_truck.veh, 59.1994) SET_VEHICLE_ON_GROUND_PROPERLY(trevors_truck.veh) //ENDIF endif CPRINTLN(DEBUG_MISSION, "Player should have vehicle") bTrevorsVehicleIsOkay = TRUE endif ENDIF endproc PROC CLEAR_OLD_CAR_GEN() DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(vTrevorsVehicleMethLabLoc, 10.0) CLEAR_AREA(vTrevorsVehicleMethLabLoc, 10.0, TRUE) ENDPROC func bool is_player_infront_of_door() vector vec_BA vector door_forward_vec vec_BA = (<<1398.80, 3607.94, 39.19>> - GET_ENTITY_COORDS(player_ped_id())) door_forward_vec = <<1402.35, 3609.46, 39.35>> - <<1398.80, 3607.94, 39.19>> if dot_product(vec_BA, door_forward_vec) < 0.0 #IF IS_DEBUG_BUILD printstring("infront") printnl() #endif return true endif return false endfunc proc request_start_of_mission_assets() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(cheng.model) request_model(translator.model) request_model(get_player_veh_model(char_trevor)) request_vehicle_asset(trevors_truck.model, enum_to_int(VRF_REQUEST_ALL_ANIMS)) request_model(bins[0].model) request_anim_dict(sCrazyDanceDict) endproc func bool is_start_of_mission_assets_requested() if has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) and has_model_loaded(translator.model) and has_model_loaded(cheng.model) and has_model_loaded(get_player_veh_model(char_trevor)) and has_vehicle_asset_loaded(trevors_truck.model) and has_model_loaded(bins[0].model) and has_anim_dict_loaded(sCrazyDanceDict) return true endif return false endfunc PROC REQUEST_BAR_PATRON_ASSETS() request_model(IG_JANET) request_model(IG_JOSEF) request_model(IG_OLD_MAN1A) request_model(IG_OLD_MAN2) request_model(IG_RUSSIANDRUNK) ENDPROC FUNC BOOL HAVE_BAR_PATRON_ASSETS_LOADED() IF has_model_loaded(IG_JANET) and has_model_loaded(IG_JOSEF) and has_model_loaded(IG_OLD_MAN1A) and has_model_loaded(IG_OLD_MAN2) and has_model_loaded(IG_RUSSIANDRUNK) return true endif return false ENDFUNC // @SBA - splitting out the loads PROC REQUEST_METH_ARRIVAL_ASSETS() REQUEST_MODEL(buddy.model) REQUEST_MODEL(GET_WEAPONTYPE_MODEL(WEAPONTYPE_CARBINERIFLE)) REQUEST_WEAPON_ASSET(WEAPONTYPE_carbinerifle) ENDPROC FUNC BOOL HAVE_METH_ARRIVAL_ASSETS_LOADED() IF HAS_MODEL_LOADED(buddy.model) AND HAS_MODEL_LOADED(GET_WEAPONTYPE_MODEL(WEAPONTYPE_carbinerifle)) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_carbinerifle) RETURN TRUE ENDIF RETURN FALSE ENDFUNC // @SBA - assets for fight, post arrival cutscene PROC REQUEST_FIGHT_ASSETS() REQUEST_MODEL(buddy.model) request_model(wave_0_enemy[0].model) request_model(wave_0_enemy[1].model) request_model(phoenix) request_model(sadler) request_model(dubsta2) request_model(explosive_barrels[0].model) request_model(bins[0].model) request_model(cover_box.model) request_model(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) request_weapon_asset(WEAPONTYPE_ASSAULTRIFLE) request_vehicle_recording(001, "lkmethlab") request_vehicle_recording(002, "lkmethlab") request_vehicle_recording(003, "lkmethlab") REQUEST_WAYPOINT_RECORDING("methlab1") REQUEST_WAYPOINT_RECORDING("methlab3") REQUEST_WAYPOINT_RECORDING("methlab4") REQUEST_WAYPOINT_RECORDING("methlab5") REQUEST_WAYPOINT_RECORDING("methlab7") request_anim_dict("MissChinese1") ENDPROC FUNC BOOL HAVE_FIGHT_ASSETS_LOADED() IF HAS_MODEL_LOADED(buddy.model) AND HAS_MODEL_LOADED(wave_0_enemy[0].model) AND HAS_MODEL_LOADED(wave_0_enemy[1].model) AND HAS_MODEL_LOADED(sadler) AND HAS_MODEL_LOADED(dubsta2) AND HAS_MODEL_LOADED(phoenix) and has_model_loaded(explosive_barrels[0].model) and has_model_loaded(bins[0].model) and has_model_loaded(cover_box.model) and has_model_loaded(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) and has_weapon_asset_loaded(WEAPONTYPE_ASSAULTRIFLE) and has_vehicle_recording_been_loaded(001, "lkmethlab") and has_vehicle_recording_been_loaded(002, "lkmethlab") and has_vehicle_recording_been_loaded(003, "lkmethlab") and get_is_waypoint_recording_loaded("methlab1") and get_is_waypoint_recording_loaded("methlab3") and get_is_waypoint_recording_loaded("methlab4") and get_is_waypoint_recording_loaded("methlab5") and get_is_waypoint_recording_loaded("methlab7") and has_anim_dict_loaded("MissChinese1") RETURN TRUE ENDIF RETURN FALSE ENDFUNC proc request_shootout_assets(BOOL bRequestChefModel = TRUE) // // @SBA - per B*1121357, requesting chef model later IF bRequestChefModel request_model(buddy.model) ENDIF // request_model(wave_0_enemy[0].model) // request_model(wave_0_enemy[1].model) // // request_model(sadler) // request_model(dubsta2) // request_model(phoenix) request_model(pcj) request_model(explosive_barrels[0].model) request_model(cover_box.model) // request_model(get_weapontype_model(weapontype_carbinerifle)) request_model(get_weapontype_model(weapontype_grenadelauncher)) // request_model(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) // // request_weapon_asset(WEAPONTYPE_carbinerifle) request_weapon_asset(WEAPONTYPE_grenadelauncher) // request_weapon_asset(WEAPONTYPE_ASSAULTRIFLE) // request_vehicle_recording(001, "lkmethlab") // request_vehicle_recording(002, "lkmethlab") // request_vehicle_recording(003, "lkmethlab") // request_vehicle_recording(004, "lkmethlab") // request_vehicle_recording(005, "lkmethlab") // request_vehicle_recording(006, "lkmethlab") request_vehicle_recording(007, "lkmethlab") request_vehicle_recording(008, "lkmethlab") request_vehicle_recording(009, "lkmethlab") request_vehicle_recording(010, "lkmethlab") request_vehicle_recording(011, "lkmethlab") request_vehicle_recording(012, "lkmethlab") // request_vehicle_recording(013, "lkmethlab") // request_vehicle_recording(014, "lkmethlab") // request_vehicle_recording(015, "lkmethlab") // request_vehicle_recording(016, "lkmethlab") request_vehicle_recording(017, "lkmethlab") request_vehicle_recording(018, "lkmethlab") request_vehicle_recording(019, "lkmethlab") request_vehicle_recording(020, "lkmethlab") request_vehicle_recording(021, "lkmethlab") // request_vehicle_recording(030, "lkmethlab") // request_vehicle_recording(031, "lkmethlab") // request_vehicle_recording(032, "lkmethlab") // REQUEST_WAYPOINT_RECORDING("methlab1") //// REQUEST_WAYPOINT_RECORDING("methlab2") // REQUEST_WAYPOINT_RECORDING("methlab3") // REQUEST_WAYPOINT_RECORDING("methlab4") // REQUEST_WAYPOINT_RECORDING("methlab5") //// REQUEST_WAYPOINT_RECORDING("methlab6") // REQUEST_WAYPOINT_RECORDING("methlab7") //// REQUEST_WAYPOINT_RECORDING("methlab8") //// REQUEST_WAYPOINT_RECORDING("methlab9") // // request_anim_dict("MissChinese1") // endproc func bool is_shootout_assets_loaded() if has_model_loaded(buddy.model) // and has_model_loaded(wave_0_enemy[0].model) // and has_model_loaded(wave_0_enemy[1].model) // and has_model_loaded(sadler) // and has_model_loaded(dubsta2) // and has_model_loaded(phoenix) and has_model_loaded(pcj) and has_model_loaded(explosive_barrels[0].model) and has_model_loaded(cover_box.model) // and has_model_loaded(get_weapontype_model(WEAPONTYPE_carbinerifle)) and has_model_loaded(get_weapontype_model(weapontype_grenadelauncher)) // and has_model_loaded(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) // and has_weapon_asset_loaded(WEAPONTYPE_carbinerifle) and has_weapon_asset_loaded(WEAPONTYPE_grenadelauncher) // and has_weapon_asset_loaded(WEAPONTYPE_ASSAULTRIFLE) // and has_vehicle_recording_been_loaded(001, "lkmethlab") // and has_vehicle_recording_been_loaded(002, "lkmethlab") // and has_vehicle_recording_been_loaded(003, "lkmethlab") // and has_vehicle_recording_been_loaded(004, "lkmethlab") // and has_vehicle_recording_been_loaded(005, "lkmethlab") // and has_vehicle_recording_been_loaded(006, "lkmethlab") and has_vehicle_recording_been_loaded(007, "lkmethlab") and has_vehicle_recording_been_loaded(008, "lkmethlab") and has_vehicle_recording_been_loaded(009, "lkmethlab") and has_vehicle_recording_been_loaded(010, "lkmethlab") and has_vehicle_recording_been_loaded(011, "lkmethlab") and has_vehicle_recording_been_loaded(012, "lkmethlab") // and has_vehicle_recording_been_loaded(013, "lkmethlab") // and has_vehicle_recording_been_loaded(014, "lkmethlab") // and has_vehicle_recording_been_loaded(015, "lkmethlab") // and has_vehicle_recording_been_loaded(016, "lkmethlab") and has_vehicle_recording_been_loaded(017, "lkmethlab") and has_vehicle_recording_been_loaded(018, "lkmethlab") and has_vehicle_recording_been_loaded(019, "lkmethlab") and has_vehicle_recording_been_loaded(020, "lkmethlab") and has_vehicle_recording_been_loaded(021, "lkmethlab") // and has_vehicle_recording_been_loaded(030, "lkmethlab") // and has_vehicle_recording_been_loaded(031, "lkmethlab") // and has_vehicle_recording_been_loaded(032, "lkmethlab") // and get_is_waypoint_recording_loaded("methlab1") //// and get_is_waypoint_recording_loaded("methlab2") // and get_is_waypoint_recording_loaded("methlab3") // and get_is_waypoint_recording_loaded("methlab4") // and get_is_waypoint_recording_loaded("methlab5") //// and get_is_waypoint_recording_loaded("methlab6") // and get_is_waypoint_recording_loaded("methlab7") //// and get_is_waypoint_recording_loaded("methlab8") //// and get_is_waypoint_recording_loaded("methlab9") // and has_anim_dict_loaded("MissChinese1") return true endif return false endfunc proc create_start_of_mission_entities(bool playing_mocap = true) if not playing_mocap clear_area(<<1998.2826, 3058.0435, 46.0491>>, 10000.00, true) remove_decals_in_range(<<1998.2826, 3058.0435, 46.0491>>, 10000.00) delete_vehicle_gen_vehicles_in_area(<<1401.5897, -2053.6978, 50.9983>>, 10.0) RECREATE_PLAYERS_VEHICLE(<<2000.1245, 3059.5662, 46.0491>>, 59.1994, FALSE) setup_vehicle_outside_bar() SET_INITIAL_PLAYER_STATION("RADIO_07_DANCE_01") setup_buddy(cheng) setup_buddy(translator) SET_START_VERSIONS_OF_BUDDIES() setup_relationship_contact(cheng.ped, true) set_ped_can_ragdoll(cheng.ped, true) remove_blip(cheng.blip) add_ped_for_dialogue(scripted_speech[0], 4, cheng.ped, "cheng") task_enter_vehicle(cheng.ped, trevors_truck.veh, 30000, vs_front_right, PEDMOVE_walk) force_ped_motion_state(cheng.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(cheng.ped) SET_PED_LOD_MULTIPLIER(cheng.ped, 4.0) setup_relationship_contact(translator.ped, true) set_ped_can_ragdoll(translator.ped, true) remove_blip(translator.blip) add_ped_for_dialogue(scripted_speech[0], 3, translator.ped, "translator") task_enter_vehicle(translator.ped, trevors_truck.veh, 30000, vs_back_left, PEDMOVE_walk) force_ped_motion_state(translator.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(translator.ped) SET_PED_LOD_MULTIPLIER(translator.ped, 4.0) clear_ped_tasks_immediately(player_ped_id()) IF NOT IS_REPLAY_BEING_SET_UP() set_entity_coords(player_ped_id(), <<1998.04980, 3055.90698, 46.05226>>)//<<1998.19702, 3056.11426, 46.05203>>) set_entity_heading(player_ped_id(), 328.0059) force_ped_motion_state(player_ped_id(), ms_on_foot_walk, false) SIMULATE_PLAYER_INPUT_GAIT(player_id(), pedmove_walk, 700) force_ped_ai_and_animation_update(player_ped_id()) //task_enter_vehicle(player_ped_id(), trevors_truck.veh, -1, VS_DRIVER, PEDMOVE_WALK, ECF_RESUME_IF_INTERRUPTED | ECF_WARP_ENTRY_POINT) ENDIF endif SET_VEHICLE_DIRT_LEVEL(trevors_truck.veh, 13) SET_LOCATES_BUDDIES_TO_GET_INTO_NEAREST_CAR(locates_data, trevors_truck.veh) //set_vehicle_as_no_longer_needed(trevors_truck.veh) add_ped_for_dialogue(scripted_speech[0], 0, null, "cook") //added for phone call(@SBA - was 5 but ID num is 0 in D*.) get_to_meth_lab_dialogue_system() endproc PROC HANDLE_CREATE_BAR_PATRONS() IF bBarPatronsCreated EXIT ENDIF REQUEST_BAR_PATRON_ASSETS() IF NOT HAVE_BAR_PATRON_ASSETS_LOADED() CPRINTLN(DEBUG_MISSION, "CREATE_BAR_PATRONS: Loading assets...") EXIT ENDIF CLEAR_AREA_OF_PEDS(<<1984.136353,3051.933838,46.215084>> , 5.5, TRUE) sbiBarBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<1984.9971, 3052.9048, 46.8556>>+<<5,5,2>>,<<1984.9971, 3052.9048, 46.8556>>-<<5,5,2>>) CPRINTLN(DEBUG_MISSION, "CREATE_BAR_PATRONS: Creating patrons") piBarLady = CREATE_PED(PEDTYPE_MISSION, IG_JANET, (<<1983.43469, 3054.87573, 47.00919>>)) TRIGGER_SCENE_SETUP_FRIENDLY_PED(piBarLady, player_group) if DOES_SCENARIO_EXIST_IN_AREA(<<1983.43469, 3054.87573, 47.00919>>, 0.5, false)//true TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(piBarLady, (<<1983.43469, 3054.87573, 47.00919>>), 0.5, -1) endif piJosef = CREATE_PED(PEDTYPE_MISSION, IG_JOSEF, (<<1987.3, 3048.7, 46.2>>)) TRIGGER_SCENE_SETUP_FRIENDLY_PED(piJosef, player_group) TASK_WANDER_STANDARD(piJosef) piOldMan1A = CREATE_PED(PEDTYPE_MISSION, IG_OLD_MAN1A, (<<1985.32666, 3052.07471, 46.2>>)) TRIGGER_SCENE_SETUP_FRIENDLY_PED(piOldMan1A, player_group) SET_PED_PROP_INDEX(piOldMan1A, ANCHOR_HEAD,0) if DOES_SCENARIO_EXIST_IN_AREA(<<1985.32666, 3053.07471, 46.97862>>, 0.75, true) TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(piOldMan1A, (<<1985.32666, 3053.07471, 46.97862>>), 0.75, 15000) endif piOldMan2 = CREATE_PED(PEDTYPE_MISSION, IG_OLD_MAN2, (<<1984.87280, 3052.09902, 46.2>>)) TRIGGER_SCENE_SETUP_FRIENDLY_PED(piOldMan2, player_group) if DOES_SCENARIO_EXIST_IN_AREA(<<1984.87280, 3052.49902, 46.97861>>, 0.75, true) TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(piOldMan2, (<<1984.87280, 3052.49902, 46.97861>>), 0.75, 15000) endif piDrunk = CREATE_PED(PEDTYPE_MISSION, IG_RUSSIANDRUNK, (<<1985.552, 3050.480, 47.215>>), -30.26) TRIGGER_SCENE_SETUP_FRIENDLY_PED(piDrunk, player_group) APPLY_PED_BLOOD_SPECIFIC(piDrunk, ENUM_TO_INT(PDZ_HEAD), 0.502, 0.730, 0.0, 0.7, 0, 0.0, "BasicSlash") TASK_START_SCENARIO_IN_PLACE(piDrunk, "WORLD_HUMAN_STUPOR", -1) //"WORLD_HUMAN_BUM_SLUMPED" bBarPatronsCreated = TRUE ENDPROC //PURPOSE: Stores any near by vehicles and sets them as a mission entity. Means they won't be cleared on clear area //call release_obtained_nearby_vehicles() to release them. proc obtain_nearby_vehicles_and_store_them() vehicle_index stored_last_vehicle get_ped_nearby_vehicles(player_ped_id(), ambient_car) stored_last_vehicle = get_players_last_vehicle() for i = 0 to count_of(ambient_car) - 1 if ambient_car[i] != stored_last_vehicle if does_entity_exist(ambient_car[i]) if is_vehicle_driveable(ambient_car[i]) //player pos and heading data = 1997.9380, 3056.4143, 46.0516>>, 328.5000 if is_entity_in_angled_area(ambient_car[i], <<1993.303, 3065.119, 46.052>>, <<2007.798, 3056.236, 50.052>>, 5.0) //delete_vehicle(ambient_car[i]) clear_area(get_entity_coords(ambient_car[i]), 1.0, true) else //delete cars driving downt he road with drivers. if does_entity_exist(GET_PED_IN_VEHICLE_SEAT(ambient_car[i])) clear_area(get_entity_coords(ambient_car[i]), 1.0, true) //clear area rther than deleting to avoid "vehicle is not a script entity" else set_entity_as_mission_entity(ambient_car[i], true, true) endif endif else clear_area(get_entity_coords(ambient_car[i]), 1.0, false) endif endif endif endfor endproc //PURPOSE: Releases stored near by vehicles. proc release_obtained_nearby_vehicles() for i = 0 to count_of(ambient_car) - 1 if does_entity_exist(ambient_car[i]) set_vehicle_as_no_longer_needed(ambient_car[i]) endif endfor endproc proc set_players_last_vehicle_to_vehicle_gen(vector car_pos, float car_heading) vehicle_index players_last_car players_last_car = GET_PLAYERS_LAST_VEHICLE() //get_players_last_vehicle if does_entity_exist(players_last_car) if is_vehicle_driveable(players_last_car) model_names players_last_vehicle_model players_last_vehicle_model = get_entity_model(players_last_car) if not is_this_model_a_plane(players_last_vehicle_model ) SET_MISSION_VEHICLE_GEN_VEHICLE(players_last_car, car_pos, car_heading) //SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN //GET_MISSION_START_VEHICLE_INDEX() endif endif endif endproc proc meth_lab_intro_mocap() REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2170997 switch intro_mocap_status case 0 interior_instance_index interior_hicksbar REQUEST_CUTSCENE("chinese_1_int") SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("trevor", PLAYER_PED_ID()) SET_CUTSCENE_PED_PROP_VARIATION("Tao", ANCHOR_EYES, 0) SET_CUTSCENE_PED_PROP_VARIATION("Taos_Translator", ANCHOR_EYES, 0) interior_hicksbar = GET_INTERIOR_AT_COORDS_with_type(<<1986.2722, 3051.9758, 47.1256>>, "v_hicksbar") PIN_INTERIOR_IN_MEMORY(interior_hicksbar) IF is_interior_ready(interior_hicksbar) if HAS_CUTSCENE_LOADED_WITH_FAILSAFE() REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Tao", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, cheng.model) REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Taos_Translator", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, translator.model) START_CUTSCENE() unpin_interior(interior_hicksbar) SET_SCRIPTS_SAFE_FOR_CUTSCENE(true) intro_mocap_status++ ENDIF endif break case 1 IF IS_REPEAT_PLAY_ACTIVE() IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT) ENDIF ENDIF ENDIF if is_cutscene_playing() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) request_start_of_mission_assets() delete_vehicle_gen_vehicles_in_area(<<2000.1245, 3059.5662, 46.0491>>, 10.0) set_players_last_vehicle_to_vehicle_gen(<<2000.1245, 3059.5662, 46.0491>>, 59.1994) RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<1980.730, 3073.228, 46.049>>, <<2014.615, 3051.972, 50.049>>, 26.700, <<2000.1245, 3059.5662, 46.0491>>, 59.1994, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())//, false)//, false) //2.5, 5.5, 2.0 // trevors_truck.veh = GET_MISSION_START_VEHICLE_INDEX() // if does_entity_exist(trevors_truck.veh) // if is_vehicle_driveable(trevors_truck.veh) // // SET_ENTITY_AS_MISSION_ENTITY(trevors_truck.veh, true, true) // SET_VEHICLE_DOORS_SHUT(trevors_truck.veh) // SET_VEHICLE_DOORS_LOCKED(trevors_truck.veh, vehiclelock_unlocked) // // // @SBA - make sure we have anims for whatever the vehicle is // request_vehicle_asset(GET_ENTITY_MODEL(trevors_truck.veh)) // // endif // endif SET_INITIAL_PLAYER_STATION("RADIO_07_DANCE_01") MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_CHINESE_1) intro_mocap_status++ endif break case 2 request_start_of_mission_assets() if not WAS_CUTSCENE_SKIPPED() if IS_CUTSCENE_PLAYING() INT iCutTime iCutTime = get_cutscene_time() CPRINTLN(DEBUG_MISSION, "Cutscene Time = ", iCutTime) // @SBA - load in scene out to the mountains IF iCutTime > 85000 AND NOT IS_NEW_LOAD_SCENE_ACTIVE() IF NEW_LOAD_SCENE_START((<<1997.36, 3054.05, 47.81>>), NORMALISE_VECTOR(<<0.53, 0.85, -0.05>>), 3500.0) CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Cutscene ending: Calling NEW_LOAD_SCENE_START().") ENDIF ENDIF IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tao", cheng.model)) cheng.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tao", cheng.model)) SET_PED_PROP_INDEX(cheng.ped, ANCHOR_EYES, 0) ENDIF IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Taos_Translator", translator.model)) translator.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Taos_Translator", translator.model)) SET_PED_PROP_INDEX(translator.ped, ANCHOR_EYES, 0) ENDIF setup_vehicle_outside_bar() if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tao", cheng.model) set_entity_coords(cheng.ped, cheng.pos) set_entity_heading(cheng.ped, cheng.heading) setup_relationship_contact(cheng.ped, true) setup_buddy_attributes(cheng) set_ped_can_ragdoll(cheng.ped, true) add_ped_for_dialogue(scripted_speech[0], 4, cheng.ped, "cheng") task_enter_vehicle(cheng.ped, trevors_truck.veh, 30000, vs_front_right, PEDMOVE_walk) force_ped_motion_state(cheng.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(cheng.ped) endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Taos_Translator", translator.model) set_entity_coords(translator.ped, translator.pos) set_entity_heading(translator.ped, translator.heading) setup_relationship_contact(translator.ped, true) setup_buddy_attributes(translator) set_ped_can_ragdoll(translator.ped, true) add_ped_for_dialogue(scripted_speech[0], 3, translator.ped, "translator") task_enter_vehicle(translator.ped, trevors_truck.veh, 30000, vs_back_left, PEDMOVE_walk) force_ped_motion_state(translator.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(translator.ped) endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("trevor", GET_PLAYER_PED_MODEL(char_trevor)) CPRINTLN(DEBUG_MISSION, "Player exit state.") //clear_ped_tasks_immediately(player_ped_id()) set_entity_coords(player_ped_id(), <<1998.19702, 3056.11426, 46.05203>>) //<<1998.04980, 3055.90698, 46.05226>>) set_entity_heading(player_ped_id(), 328.0059) force_ped_motion_state(player_ped_id(), ms_on_foot_walk, false) SIMULATE_PLAYER_INPUT_GAIT(player_id(), pedmove_walk, 300) force_ped_ai_and_animation_update(player_ped_id()) endif if CAN_SET_EXIT_STATE_FOR_CAMERA() CPRINTLN(DEBUG_MISSION, "Camera exit state.") set_gameplay_cam_relative_heading(0) set_gameplay_cam_relative_pitch(0) endif else if is_start_of_mission_assets_requested() CPRINTLN(DEBUG_MISSION, "starting assets loaded.") IF IS_NEW_LOAD_SCENE_LOADED() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Cutsene ending: calling NEW_LOAD_SCENE_STOP.") SET_SCRIPTS_SAFE_FOR_CUTSCENE(false) initialise_mission_variables() create_start_of_mission_entities() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "Mission start") END_CUTSCENE_BASIC() if is_screen_faded_out() do_screen_fade_in(DEFAULT_FADE_TIME) endif INIT_CHENGS_CRAZY_CAR_DANCING() REPLAY_STOP_EVENT() REPLAY_RECORD_BACK_FOR_TIME(0.0, 12.0) mission_flow = get_to_meth_lab ENDIF endif endif else SET_CUTSCENE_FADE_VALUES(false, false, true, false) IF NOT IS_NEW_LOAD_SCENE_ACTIVE() IF NEW_LOAD_SCENE_START((<<1997.36, 3054.05, 47.81>>), NORMALISE_VECTOR(<<0.53, 0.85, -0.05>>), 3500.0) CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Cutscene skipped: Calling NEW_LOAD_SCENE_START().") ENDIF ENDIF intro_mocap_status++ endif break // SKIPPED case 3 request_start_of_mission_assets() if IS_CUTSCENE_PLAYING() IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tao", cheng.model)) cheng.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tao", cheng.model)) ENDIF IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Taos_Translator", translator.model)) translator.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Taos_Translator", translator.model)) ENDIF //hack fix to stop the translator from playing a secondary reaction anim. This played because the //translator was to close to the player when the mocap ended and the script was waiting on //assets to load so the physics would have activated on the peds, this would then fire off //a reaction which did not occur till after clear_ped_tasks_immediately() if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tao", cheng.model) IF NOT IS_PED_INJURED(cheng.ped) set_entity_coords(cheng.ped, cheng.pos) set_entity_heading(cheng.ped, cheng.heading) ENDIF endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Taos_Translator", translator.model) IF NOT IS_PED_INJURED(translator.ped) set_entity_coords(translator.ped, translator.pos) set_entity_heading(translator.ped, translator.heading) ENDIF endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("trevor", GET_PLAYER_PED_MODEL(char_trevor)) IF NOT IS_PED_INJURED(player_ped_id()) set_entity_coords(player_ped_id(), <<1998.19702, 3056.11426, 46.05203>>)//<<1998.04980, 3055.90698, 46.05226>>) set_entity_heading(player_ped_id(), 328.0059) ENDIF endif else while not is_start_of_mission_assets_requested() OR NOT IS_NEW_LOAD_SCENE_LOADED() CPRINTLN(DEBUG_MISSION, "Waiting on assets and load scene...") REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2170997 WAIT(0) endwhile mission_fail_checks()//added because of above while loop setup_vehicle_outside_bar() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Cutsene skipped: calling NEW_LOAD_SCENE_STOP.") IF NOT IS_PED_INJURED(cheng.ped) clear_ped_tasks_immediately(cheng.ped) set_entity_coords(cheng.ped, cheng.pos) set_entity_heading(cheng.ped, cheng.heading) setup_buddy_attributes(cheng) setup_relationship_contact(cheng.ped, true) set_ped_can_ragdoll(cheng.ped, true) add_ped_for_dialogue(scripted_speech[0], 4, cheng.ped, "cheng") task_enter_vehicle(cheng.ped, trevors_truck.veh, 30000, vs_front_right, PEDMOVE_walk) force_ped_motion_state(cheng.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(cheng.ped) ENDIF IF NOT IS_PED_INJURED(translator.ped) clear_ped_tasks_immediately(translator.ped) set_entity_coords(translator.ped, translator.pos) set_entity_heading(translator.ped, translator.heading) setup_buddy_attributes(translator) setup_relationship_contact(translator.ped, true) set_ped_can_ragdoll(translator.ped, true) add_ped_for_dialogue(scripted_speech[0], 3, translator.ped, "translator") task_enter_vehicle(translator.ped, trevors_truck.veh, 30000, vs_back_left, PEDMOVE_walk) force_ped_motion_state(translator.ped, ms_on_foot_walk, false)//, faus_cutscene_exit) force_ped_ai_and_animation_update(translator.ped) ENDIF IF NOT IS_PED_INJURED(player_ped_id()) clear_ped_tasks_immediately(player_ped_id()) set_entity_coords(player_ped_id(), <<1998.19702, 3056.11426, 46.05203>>) //<<1998.04980, 3055.90698, 46.05226>>) set_entity_heading(player_ped_id(), 328.0059) force_ped_motion_state(player_ped_id(), ms_on_foot_walk, false) SIMULATE_PLAYER_INPUT_GAIT(player_id(), pedmove_walk, 300) force_ped_ai_and_animation_update(player_ped_id()) ENDIF create_start_of_mission_entities() SET_START_VERSIONS_OF_BUDDIES() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "Mission start") if is_screen_faded_out() end_cutscene() else end_cutscene_no_fade() endif REPLAY_STOP_EVENT() INIT_CHENGS_CRAZY_CAR_DANCING() mission_flow = get_to_meth_lab endif break endswitch endproc func bool area_system() //stop_mission_fail_checks = true return false endfunc proc wave_0_inside_enemy_0_attack() open_sequence_task(seq) //task_pause(null, 1000) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, <<1370.4471, 3618.1826, 33.8917>>, 8.0)//2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_0_inside_enemy[0].ped, seq) clear_sequence_task(seq) attack_time = get_game_timer() endproc proc wave_0_inside_enemy_0_system() if not is_ped_injured(wave_0_inside_enemy[0].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_0_inside_enemy[0]) switch wave_0_inside_enemy_status[0] case 0 if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) if ((get_time_position_in_recording(wave_0_enemy_vehicle[2].veh) + 500) > GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_0_enemy_vehicle[2].recording_number, "lkmethlab")) stop_playback_recorded_vehicle(wave_0_enemy_vehicle[2].veh) REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[2]) wave_0_inside_enemy_status[0]++ endif else wave_0_inside_enemy_status[0]++ endif else wave_0_inside_enemy_status[0]++ endif break case 1 REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[2]) vector player_pos player_pos = GET_ENTITY_COORDS(player_ped_id()) if lk_timer(original_time, 25000) or player_pos.z < 37.00 or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) or (is_entity_in_angled_area(player_ped_id(), <<1390.858, 3599.007, 37.980>>, <<1389.319, 3603.235, 40.680>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or (is_entity_in_angled_area(player_ped_id(), <<1388.832, 3604.578, 37.747>>, <<1387.122, 3609.276, 40.847>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) wave_0_inside_enemy_0_attack() wave_0_inside_enemy_status[0]++ endif break case 2 IF wave_0_buddy_ai_system_status >= 3 OR NOT is_ped_inside_interior(player_ped_id(), <<1392.7360, 3602.5989, 38.5>>, "v_methlab") if lk_timer(attack_time, 10000) // @SBA - have this guy head up the stairs quicker (previous time = 15000) // @SBA - set rush flag and defensive area up the stairs //set_ped_sphere_defensive_area(wave_0_inside_enemy[0].ped, wave_0_inside_enemy[0].run_to_pos, 2.0) SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_inside_enemy[0].ped, tbTopBackStairsVolume.vMin, tbTopBackStairsVolume.vMax, tbTopBackStairsVolume.flWidth, TRUE) wave_0_inside_enemy[0].bRushInside = TRUE // @SBA - make more agressive REGISTER_TARGET(wave_0_inside_enemy[0].ped, buddy.ped) SET_ENEMY_RUSHER_ATTRIBUTES(wave_0_inside_enemy[0].ped, 1, 10, 50) attack_time = get_game_timer() wave_0_inside_enemy_status[0]++ endif ELSE // reset timer attack_time = get_game_timer() ENDIF break case 3 break endswitch endif endproc proc wave_0_inside_enemy_1_attack() open_sequence_task(seq) task_pause(null, 250) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, <<1366.0543, 3623.9988, 33.7900>>, 8.0)//2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_0_inside_enemy[1].ped, seq) clear_sequence_task(seq) endproc proc wave_0_inside_enemy_1_system() if not is_ped_injured(wave_0_inside_enemy[1].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_0_inside_enemy[1]) switch wave_0_inside_enemy_status[1] case 0 if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) vector player_pos player_pos = GET_ENTITY_COORDS(player_ped_id()) if lk_timer(original_time, 25000) or player_pos.z < 37.00 or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) or (is_entity_in_angled_area(player_ped_id(), <<1390.858, 3599.007, 37.980>>, <<1389.319, 3603.235, 40.680>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or (is_entity_in_angled_area(player_ped_id(), <<1388.832, 3604.578, 37.747>>, <<1387.122, 3609.276, 40.847>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) wave_0_inside_enemy_1_attack() wave_0_inside_enemy_status[1]++ endif endif else wave_0_inside_enemy_1_attack() wave_0_inside_enemy_status[1]++ endif break case 1 // @SBA - getting this guy to head for the stairs quicker IF lk_timer(attack_time, 15000) OR is_ped_injured(wave_0_inside_enemy[0].ped) // @SBA - set rush flag and defensive area up the stairs //set_ped_sphere_defensive_area(wave_0_inside_enemy[1].ped, wave_0_inside_enemy[1].run_to_pos, 2.0) SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_inside_enemy[1].ped, tbTopBackStairsVolume.vMin, tbTopBackStairsVolume.vMax, tbTopBackStairsVolume.flWidth, TRUE) wave_0_inside_enemy[1].bRushInside = TRUE // @SBA - make more agressive REGISTER_TARGET(wave_0_inside_enemy[1].ped, buddy.ped) attack_time = get_game_timer() SET_ENEMY_RUSHER_ATTRIBUTES(wave_0_inside_enemy[1].ped, 1, 10, 50) wave_0_inside_enemy_status[1]++ endif break case 2 break endswitch endif endproc proc wave_0_inside_enemy_2_attack() open_sequence_task(seq) task_pause(null, 1250) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, <<1372.5642, 3614.3271, 33.8927>>, 8.0)//2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_0_inside_enemy[2].ped, seq) clear_sequence_task(seq) endproc proc wave_0_inside_enemy_2_system() if not is_ped_injured(wave_0_inside_enemy[2].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_0_inside_enemy[2]) switch wave_0_inside_enemy_status[2] case 0 if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) vector player_pos player_pos = GET_ENTITY_COORDS(player_ped_id()) if lk_timer(original_time, 25000) or player_pos.z < 37.00 or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) or (is_entity_in_angled_area(player_ped_id(), <<1390.858, 3599.007, 37.980>>, <<1389.319, 3603.235, 40.680>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or (is_entity_in_angled_area(player_ped_id(), <<1388.832, 3604.578, 37.747>>, <<1387.122, 3609.276, 40.847>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) wave_0_inside_enemy_2_attack() wave_0_inside_enemy_status[2]++ endif endif else wave_0_inside_enemy_2_attack() wave_0_inside_enemy_status[2]++ endif break case 1 if lk_timer(attack_time, 10000) // @SBA - shortened timer. OLD = 15000 and is_ped_injured(wave_0_inside_enemy[1].ped) // @SBA - set rush flag and defensive area up the stairs //set_ped_sphere_defensive_area(wave_0_inside_enemy[2].ped, wave_0_inside_enemy[2].run_to_pos, 2.0) SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_inside_enemy[2].ped, tbTopBackStairsVolume.vMin, tbTopBackStairsVolume.vMax, tbTopBackStairsVolume.flWidth, TRUE) wave_0_inside_enemy[2].bRushInside = TRUE // @SBA - make more agressive REGISTER_TARGET(wave_0_inside_enemy[2].ped, buddy.ped) attack_time = get_game_timer() SET_ENEMY_RUSHER_ATTRIBUTES(wave_0_inside_enemy[2].ped, 1, 0, 50) wave_0_inside_enemy_status[2]++ endif break case 2 break endswitch endif endproc proc wave_0_inside_enemy_3_attack() open_sequence_task(seq) task_pause(null, 1500) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, <<1364.3922, 3616.7683, 33.8913>>, 8.0)//2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_0_inside_enemy[3].ped, seq) clear_sequence_task(seq) endproc proc wave_0_inside_enemy_3_system() if not is_ped_injured(wave_0_inside_enemy[3].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_0_inside_enemy[3]) switch wave_0_inside_enemy_status[3] case 0 if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) vector player_pos player_pos = GET_ENTITY_COORDS(player_ped_id()) if lk_timer(original_time, 25000) or player_pos.z < 37.00 or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) or (is_entity_in_angled_area(player_ped_id(), <<1390.858, 3599.007, 37.980>>, <<1389.319, 3603.235, 40.680>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or (is_entity_in_angled_area(player_ped_id(), <<1388.832, 3604.578, 37.747>>, <<1387.122, 3609.276, 40.847>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) wave_0_inside_enemy_3_attack() wave_0_inside_enemy_status[3]++ endif endif else wave_0_inside_enemy_3_attack() wave_0_inside_enemy_status[3]++ endif break case 1 if lk_timer(attack_time, 15000) or is_ped_injured(wave_0_inside_enemy[2].ped) // @SBA - set rush flag and defensive area up the stairs //set_ped_sphere_defensive_area(wave_0_inside_enemy[3].ped, wave_0_inside_enemy[3].run_to_pos, 2.0) SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_inside_enemy[3].ped, tbTopBackStairsVolume.vMin, tbTopBackStairsVolume.vMax, tbTopBackStairsVolume.flWidth, TRUE) wave_0_inside_enemy[3].bRushInside = TRUE // @SBA - make more agressive REGISTER_TARGET(wave_0_inside_enemy[3].ped, buddy.ped) attack_time = get_game_timer() SET_ENEMY_RUSHER_ATTRIBUTES(wave_0_inside_enemy[3].ped, 1, 0, 50) wave_0_inside_enemy_status[3]++ endif break case 2 break endswitch endif endproc //if is_entity_in_angled_area(wave_2_enemy[i].ped, <<1433.399, 3636.853, 33.922>>, <<1449.164, 3595.132, 37.922>>, 58.00) // // func bool is_grenade_launcher_explosion_in_car_park() if IS_EXPLOSION_IN_ANGLED_AREA(EXP_TAG_GRENADELAUNCHER, <<1424.980, 3633.671, 33.922>>, <<1436.609, 3602.895, 37.922>>, 40.9) //cache original grenade launcher ammo //if original_ammo - current_ammo > clip size (5) return true endif return false endfunc //PURPOSE:Force enemies on foot or in a vehicle to flee if the player fires grenade launcher explosion into the //area of the car park proc make_enemy_flee_when_grenade_launcher_explosion_in_area() // printstring("test 0") // printnl() is_entity_in_angled_area(player_ped_id(), <<1433.399, 3636.853, 33.922>>, <<1449.164, 3595.132, 37.922>>, 58.00) if wave_2_status[i] != grenade_launcher_explosion if is_entity_in_angled_area(wave_2_enemy[i].ped, <<1433.399, 3636.853, 33.922>>, <<1449.164, 3595.132, 37.922>>, 58.00) // printstring("test 1") // printnl() is_entity_in_angled_area(player_ped_id(), <<1424.980, 3633.671, 32.922>>, <<1436.609, 3602.895, 37.922>>, 40.9) if IS_EXPLOSION_IN_ANGLED_AREA(EXP_TAG_GRENADELAUNCHER, <<1424.980, 3633.671, 32.922>>, <<1436.609, 3602.895, 37.922>>, 40.9) //added for bug 986050 //fix for bug 1107853 //if is_explosion_in_sphere(EXP_TAG_GRENADELAUNCHER, get_entity_coords(wave_2_enemy[i].ped), 20.00) if is_ped_sitting_in_any_vehicle(wave_2_enemy[i].ped) vehicle_index mission_car = GET_VEHICLE_PED_IS_IN(wave_2_enemy[i].ped) ped_index driver_ped = GET_PED_IN_VEHICLE_SEAT(mission_car) if wave_2_enemy[i].ped = driver_ped if not is_entity_dead(mission_car) if is_playback_going_on_for_vehicle(mission_car) stop_playback_recorded_vehicle(mission_car) endif set_ped_flee_attributes(wave_2_enemy[i].ped, fa_use_vehicle, true) set_ped_flee_attributes(wave_2_enemy[i].ped, FA_DISABLE_EXIT_VEHICLE, true) set_ped_flee_attributes(wave_2_enemy[i].ped, FA_DISABLE_REVERSE_IN_VEHICLE, true) set_ped_flee_attributes(wave_2_enemy[i].ped, FA_DISABLE_ACCELERATE_IN_VEHICLE, true) endif set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, true) clear_ped_tasks(wave_2_enemy[i].ped) task_smart_flee_ped(wave_2_enemy[i].ped, player_ped_id(), 300, -1) wave_2_status[i] = grenade_launcher_explosion else //make ped flee if the driver is alive. Otherwise have them attack. if not is_ped_injured(driver_ped) set_ped_flee_attributes(wave_2_enemy[i].ped, fa_use_vehicle, true) set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, true) clear_ped_tasks(wave_2_enemy[i].ped) task_smart_flee_ped(wave_2_enemy[i].ped, player_ped_id(), 300, -1) wave_2_status[i] = grenade_launcher_explosion else //fix for bug 1107853 //allow normal ai to progress so that he will get out and shoot when the dirver is dead. //then when he is on foot is there is another explosion he will flee endif endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, true) clear_ped_tasks(wave_2_enemy[i].ped) task_smart_flee_ped(wave_2_enemy[i].ped, player_ped_id(), 300, -1) wave_2_status[i] = grenade_launcher_explosion endif // set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, true) // // clear_ped_tasks(wave_2_enemy[i].ped) // // task_smart_flee_ped(wave_2_enemy[i].ped, player_ped_id(), 300, -1) // // wave_2_status[i] = grenade_launcher_explosion //endif endif endif endif endproc func bool wave_2_ai_system() if not wave_2_complete //if activate_wave_2 if ped_structure_are_all_enemies_dead(wave_2_enemy) wave_2_complete = true return true endif // @SBA - initializing local variable INT iWave_2_Index for i = 0 to count_of(wave_2_enemy) - 1 if not is_ped_injured(wave_2_enemy[i].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_2_enemy[i]) // @SBA - going to try without the fleeing and see how it is //make_enemy_flee_when_grenade_launcher_explosion_in_area() switch wave_2_status[i] case initial_attack_phase switch i case 0 if is_vehicle_driveable(wave_2_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[2].veh) if ((get_time_position_in_recording(wave_2_enemy_vehicle[2].veh) + 250) > GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[2].recording_number, "lkmethlab")) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[2].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[2]) set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 2.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 2.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 2.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif break case 1 case 2 if is_vehicle_driveable(wave_2_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[2].veh) open_sequence_task(seq) task_pause(null, (250 * i)) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else open_sequence_task(seq) task_pause(null, (250 * i)) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif break case 3 if is_vehicle_driveable(wave_2_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[2].veh) open_sequence_task(seq) task_pause(null, (250 * i)) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 4.0) // @SBA - expanding sphere. OLD = 2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = attack_from_pos_2 endif else open_sequence_task(seq) task_pause(null, (250 * i)) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 4.0) // @SBA - expanding sphere. OLD = 2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = attack_from_pos_2 endif break case 4 if is_vehicle_driveable(wave_2_enemy_vehicle[3].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[3].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[3].recording_number, "lkmethlab") - 250) < (get_time_position_in_recording(wave_2_enemy_vehicle[3].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[3].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[3]) // SET_PED_COMBAT_ATTRIBUTES(wave_2_enemy[i].ped, ca_use_vehicle, false) // SET_PED_COMBAT_ATTRIBUTES(wave_2_enemy[i].ped, CA_LEAVE_VEHICLES, true) // set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) // set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) // task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) //wave_2_status[i] = do_nothing // @SBA - have enemy exit vehicle and run to the back stairs open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[3].veh, ECF_USE_RIGHT_ENTRY) TASK_SWAP_WEAPON(NULL, TRUE) //TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, wave_2_enemy[i].run_to_pos, pedmove_run, -1) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) TASK_SET_SPHERE_DEFENSIVE_AREA(null, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) // @SBA - enemies will try to rush inside, so setting this as the next stage // wave_2_status[i] = get_into_pos wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // // @SBA - enemies will try to rush inside periodically, so setting this as the next stage // //wave_2_status[i] = do_nothing // wave_2_status[i] = run_into_shop // @SBA - have enemy exit vehicle and run to the back stairs // open_sequence_task(seq) // // @SBA - replace this with a TASK_FOLLOW_NAV_MESH_TO_COORD once T-posing is fixed // //TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) // TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, wave_2_enemy[i].run_to_pos, pedmove_run, -1) // close_sequence_task(seq) // task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) // @SBA - enemies will try to rush inside, so setting this as the next stage wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // // @SBA - enemies will try to rush inside periodically, so setting this as the next stage // //wave_2_status[i] = do_nothing // wave_2_status[i] = run_into_shop // @SBA - have enemy exit vehicle and run to the back stairs // open_sequence_task(seq) // // @SBA - replace this with a TASK_FOLLOW_NAV_MESH_TO_COORD once T-posing is fixed // //TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) // TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, wave_2_enemy[i].run_to_pos, pedmove_run, -1) // close_sequence_task(seq) // task_perform_sequence(wave_2_enemy[i].ped, seq) // clear_sequence_task(seq) // @SBA - enemies will try to rush inside, so setting this as the next stage wave_2_status[i] = run_into_shop endif break case 5 if is_vehicle_driveable(wave_2_enemy_vehicle[4].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[4].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[4].recording_number, "lkmethlab") - 500) < (get_time_position_in_recording(wave_2_enemy_vehicle[4].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[4].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[4]) // @SBA - have enemy exit vehicle and run to the back stairs open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[4].veh, ECF_USE_RIGHT_ENTRY) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) task_set_blocking_of_non_temporary_events(null, false) TASK_SET_SPHERE_DEFENSIVE_AREA(null, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) // @SBA - enemies will try to rush inside, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - have enemy exit vehicle and run to the back stairs // open_sequence_task(seq) // // @SBA - replace this with a TASK_FOLLOW_NAV_MESH_TO_COORD once T-posing is fixed // TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) // close_sequence_task(seq) // task_perform_sequence(wave_2_enemy[i].ped, seq) // clear_sequence_task(seq) // @SBA - enemies will try to rush inside, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 4.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - have enemy exit vehicle and run to the back stairs // open_sequence_task(seq) // // @SBA - replace this with a TASK_FOLLOW_NAV_MESH_TO_COORD once T-posing is fixed // TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) // close_sequence_task(seq) // task_perform_sequence(wave_2_enemy[i].ped, seq) // clear_sequence_task(seq) // @SBA - enemies will try to rush inside, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif break case 6 if is_vehicle_driveable(wave_2_enemy_vehicle[0].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[0].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[0].recording_number, "lkmethlab") - 650) < (get_time_position_in_recording(wave_2_enemy_vehicle[0].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[0].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[0]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos else // if is_entity_in_angled_area(wave_2_enemy[i].ped, <<1433.399, 3636.853, 33.922>>, <<1449.164, 3595.132, 37.922>>, 58.00) // // if is_grenade_launcher_explosion_in_car_park() // // endif // // endif endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 7 if is_vehicle_driveable(wave_2_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[0].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 8 if is_vehicle_driveable(wave_2_enemy_vehicle[1].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[1].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[1].recording_number, "lkmethlab") - 1000) < (get_time_position_in_recording(wave_2_enemy_vehicle[1].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[1].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[1]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[1].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 9 if is_vehicle_driveable(wave_2_enemy_vehicle[1].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[1].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[1].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 10 if is_vehicle_driveable(wave_2_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[2].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[2].recording_number, "lkmethlab") - 1000) < (get_time_position_in_recording(wave_2_enemy_vehicle[2].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[2].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[2]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[2].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 11 if is_vehicle_driveable(wave_2_enemy_vehicle[2].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[2].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[2].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 12 if is_vehicle_driveable(wave_2_enemy_vehicle[5].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[5].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[5].recording_number, "lkmethlab") - 500) < (get_time_position_in_recording(wave_2_enemy_vehicle[5].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[5].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[5]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[5].veh, ecf_dont_close_door | ECF_DONT_DEFAULT_WARP_IF_DOOR_BLOCKED) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 13 if is_vehicle_driveable(wave_2_enemy_vehicle[5].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[5].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[5].veh, ecf_dont_close_door | ECF_DONT_DEFAULT_WARP_IF_DOOR_BLOCKED) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 14 if is_vehicle_driveable(wave_2_enemy_vehicle[6].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[6].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[6].recording_number, "lkmethlab") - 500) < (get_time_position_in_recording(wave_2_enemy_vehicle[6].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[6].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[6]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[6].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 15 if is_vehicle_driveable(wave_2_enemy_vehicle[6].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[6].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[6].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 16 if is_vehicle_driveable(wave_2_enemy_vehicle[7].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[7].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[7].recording_number, "lkmethlab") - 2000) < (get_time_position_in_recording(wave_2_enemy_vehicle[7].veh)) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[7].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[7]) open_sequence_task(seq) task_leave_vehicle(null, wave_2_enemy_vehicle[7].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 17 if is_vehicle_driveable(wave_2_enemy_vehicle[7].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[7].veh) open_sequence_task(seq) task_pause(null, 250) task_leave_vehicle(null, wave_2_enemy_vehicle[7].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = get_into_pos endif else wave_2_status[i] = get_into_pos endif break case 18 if is_vehicle_driveable(wave_2_enemy_vehicle[6].veh) if is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[6].veh) if ((get_time_position_in_recording(wave_2_enemy_vehicle[6].veh) + 250) > GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_2_enemy_vehicle[6].recording_number, "lkmethlab")) stop_playback_recorded_vehicle(wave_2_enemy_vehicle[6].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[6]) set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif break case 19 if is_vehicle_driveable(wave_2_enemy_vehicle[6].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[6].veh) open_sequence_task(seq) task_pause(null, 250) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 3.0) // @SBA - expanding sphere. OLD = 2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = attack_from_pos_2 endif else open_sequence_task(seq) task_pause(null, 250) task_set_blocking_of_non_temporary_events(null, false) task_set_sphere_defensive_area(null, wave_2_enemy[i].run_to_pos, 3.0) // @SBA - expanding sphere. OLD = 2.0 task_combat_ped(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) wave_2_status[i] = attack_from_pos_2 endif break case 20 SET_PED_COMBAT_ATTRIBUTES(wave_2_enemy[i].ped, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 2.0) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) wave_2_status[i] = attack_from_pos_2 break endswitch // @SBA - set intial wait time before the first enemy rushes (if not set yet) IF iWaitTimeBeforeRush != 50000 iWaitTimeBeforeRush = 50000 // @SBA - start rush timer iWave_Rush_Time = GET_GAME_TIMER() ENDIF break case get_into_pos switch i //wave 2 second wave car enemies case 6 case 7 case 8 case 9 case 10 case 11 case 12 case 13 case 14 case 15 case 16 case 17 if not IS_ENTITY_AT_COORD(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(wave_2_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, true) clear_ped_tasks(wave_2_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_2_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_2_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) // @SBA - give enemy a wider range for the AI to use //set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) SET_PED_ANGLED_DEFENSIVE_AREA(wave_2_enemy[i].ped, tbBackYardVolume.vMin, tbBackYardVolume.vMax, tbBackYardVolume.flWidth) task_combat_ped(wave_2_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop endif break endswitch break case attack_from_pos_2 switch i case 3 if is_ped_injured(wave_2_enemy[1].ped) wave_2_enemy[i].run_to_pos = wave_2_enemy[1].run_to_pos set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 4.0) // @SBA - trying a larger sphere. OLD VALUE = 1.0 // @SBA - enemies will try to rush inside periodically, so setting this as the next stage //wave_2_status[i] = do_nothing wave_2_status[i] = run_into_shop // @SBA - commenting this out one since enemy 5 is an early rusher // elif is_ped_injured(wave_2_enemy[5].ped) // // wave_2_enemy[i].run_to_pos = wave_2_enemy[5].run_to_pos // // set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) // set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) // @SBA - trying a larger sphere. OLD VALUE = 1.0 // // @SBA - enemies will try to rush inside periodically, so setting this as the next stage // //wave_2_status[i] = do_nothing // wave_2_status[i] = run_into_shop endif break case 19 if is_ped_injured(wave_2_enemy[2].ped) wave_2_enemy[i].run_to_pos = wave_2_enemy[2].run_to_pos set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 4.0) // @SBA - trying a larger sphere. OLD VALUE = 1.0 wave_2_status[i] = run_into_shop // @SBA - commenting this out one since enemy 4 is an early rusher // elif is_ped_injured(wave_2_enemy[4].ped) // // wave_2_enemy[i].run_to_pos = wave_2_enemy[4].run_to_pos // // set_blocking_of_non_temporary_events(wave_2_enemy[i].ped, false) // set_ped_sphere_defensive_area(wave_2_enemy[i].ped, wave_2_enemy[i].run_to_pos, 3.0) // @SBA - trying a larger sphere. OLD VALUE = 1.0 // wave_2_status[i] = do_nothing endif break endswitch break // @SBA - adding this case for the rush inside CASE run_into_shop INT iRushersAtOnce iRushersAtOnce = 1 IF iWaveRushersSoFar > 3 iRushersAtOnce = 2 ENDIF // @SBA - allow a new rush only when the greneade launcher cutscene isn't playing IF NOT grenade_launcher_cutscene_playing // @SBA - check the rush timer IF lk_timer(iWave_Rush_Time, iWaitTimeBeforeRush) // @SBA - When the wait timer is ready, check if we want a new rusher IF ARE_WE_READY_FOR_A_NEW_RUSHER(wave_2_enemy, iRushersAtOnce) // @SBA - get the index of the next valid rushers iWave_2_Index = GET_NEXT_WAVE_2_INDEX() IF iWave_2_Index != -1 CPRINTLN(DEBUG_MISSION,"*** Sending in a Wave 2 enemy to rush. Index = ", iWave_2_Index) // @SBA - set defensive area on the roof to move the enemy there SET_PED_ANGLED_DEFENSIVE_AREA(wave_2_enemy[iWave_2_Index].ped, tbBackRoofVolume.vMin, tbBackRoofVolume.vMax, tbBackRoofVolume.flWidth) // @SBA - Reset this so buddy can shoot these guys SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(wave_2_enemy[iWave_2_Index].ped, FALSE) // @SBA - set a new, random wait time then restart rush timer iWaitTimeBeforeRush = GET_RANDOM_INT_IN_RANGE(7999, 9999) iWave_Rush_Time = GET_GAME_TIMER() SET_ENEMY_RUSHER_ATTRIBUTES(wave_2_enemy[iWave_2_Index].ped, 1, 0, 50) iWaveRushersSoFar++ // @SBA - set new state wave_2_status[iWave_2_Index] = combat_player ELSE // @SBA - If we didn't find a valid enemy it could be because no one was in the right state yet, // so reset the clock to try again //CPRINTLN(DEBUG_MISSION,"*** Found no valid Wave 2 enemy to rush. Reset the timer to try again later.") iWaitTimeBeforeRush = 10000 iWave_Rush_Time = GET_GAME_TIMER() ENDIF ELSE // @SBA - Not ready for a new rusher (max number still in play). //CPRINTLN(DEBUG_MISSION,"*** Don't need a new rusher yet. Reset the timer to try again later.") iWaitTimeBeforeRush = GET_RANDOM_INT_IN_RANGE(7000, 9999) iWave_Rush_Time = GET_GAME_TIMER() ENDIF ENDIF ELSE // ** Not sure we'll need this now, commenting out // @SBA - when the greneade launcher cutscene starts reset the wait time // this gives more time for the next enemies to arrive // IF iWaitTimeBeforeRush != 22500 // iWaitTimeBeforeRush = 22500 // ENDIF ENDIF BREAK // @SBA - adding this case for the rush inside CASE combat_player // Rushers will now have pistols - does enemy rusher need one? IF wave_2_enemy[i].weapon != WEAPONTYPE_PISTOL IF IS_PED_INSIDE_INTERIOR(wave_2_enemy[i].ped, <<1392.7360, 3602.5989, 38.5>>, "v_methlab") // checking again for safety IF GET_CURRENT_PED_WEAPON(wave_2_enemy[i].ped, wave_2_enemy[i].weapon) IF wave_2_enemy[i].weapon != WEAPONTYPE_PISTOL GIVE_WEAPON_TO_PED(wave_2_enemy[i].ped, WEAPONTYPE_PISTOL, INFINITE_AMMO) OPEN_SEQUENCE_TASK(seq) TASK_SWAP_WEAPON(NULL, TRUE) TASK_COMBAT_PED(NULL, PLAYER_PED_ID()) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(wave_2_enemy[i].ped, seq) CLEAR_SEQUENCE_TASK(seq) SET_PED_CAN_SWITCH_WEAPON(wave_2_enemy[i].ped, FALSE) wave_2_enemy[i].weapon = WEAPONTYPE_PISTOL ENDIF ENDIF ENDIF ENDIF // @SBA - if enemy has reached position, let him fight there IF IS_ENTITY_IN_TRIGGER_BOX(wave_2_enemy[i].ped, tbBackRoofVolume) REGISTER_TARGET(wave_2_enemy[i].ped, buddy.ped) //TASK_COMBAT_HATED_TARGETS_AROUND_PED(wave_2_enemy[i].ped, 20.0) // @SBA - send this enemy's status to the bone yard wave_2_status[i] = do_nothing ENDIF BREAK case grenade_launcher_explosion switch i case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 case 10 case 11 case 12 case 13 case 14 case 15 case 16 case 17 case 18 case 19 if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(wave_2_enemy[i].ped)) > 70 remove_blip(wave_2_enemy[i].blip) set_ped_as_no_longer_needed(wave_2_enemy[i].ped) endif break endswitch break case do_nothing switch i case 0 case 1 case 2 case 3 case 4 case 5 case 6 case 7 case 8 case 9 case 10 case 11 case 12 case 13 case 14 case 15 case 16 case 17 case 18 case 19 break endswitch break endswitch endif endfor //endif else return true endif return false endfunc func bool remaining_enemy_0_system() if not is_ped_injured(remaining_enemy[0]) switch remaining_enemy_status[0] case 0 set_blocking_of_non_temporary_events(remaining_enemy[0], true) clear_ped_tasks(remaining_enemy[0]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1395.7225, 3600.0715, 33.9803>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[0], seq) clear_sequence_task(seq) remaining_enemy_status[0]++ break case 1 if not IS_ENTITY_AT_COORD(remaining_enemy[0], <<1395.7225, 3600.0715, 33.9803>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(remaining_enemy[0], script_task_perform_sequence) set_blocking_of_non_temporary_events(remaining_enemy[0], true) clear_ped_tasks(remaining_enemy[0]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1395.7225, 3600.0715, 33.9803>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[0], seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(remaining_enemy[0], false) set_ped_sphere_defensive_area(remaining_enemy[0], <<1395.7225, 3600.0715, 33.9803>>, 1.0) task_combat_ped(remaining_enemy[0], player_ped_id()) remaining_enemy_status[0]++ endif break case 2 if is_ped_injured(wave_3_enemy[1].ped) set_blocking_of_non_temporary_events(remaining_enemy[0], true) clear_ped_tasks(remaining_enemy[0]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1394.5330, 3605.6438, 33.9809>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[0], seq) clear_sequence_task(seq) remaining_enemy_status[0]++ endif break case 3 if not IS_ENTITY_AT_COORD(remaining_enemy[0], <<1394.5330, 3605.6438, 33.9809>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(remaining_enemy[0], script_task_perform_sequence) set_blocking_of_non_temporary_events(remaining_enemy[0], true) clear_ped_tasks(remaining_enemy[0]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1394.5330, 3605.6438, 33.9809>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[0], seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(remaining_enemy[0], false) set_ped_sphere_defensive_area(remaining_enemy[0], <<1394.5330, 3605.6438, 33.9809>>, 2.0) task_combat_ped(remaining_enemy[0], player_ped_id()) remaining_enemy_status[0]++ endif break case 4 break endswitch else return true endif return false endfunc func bool remaining_enemy_1_system() if not is_ped_injured(remaining_enemy[1]) switch remaining_enemy_status[1] case 0 set_blocking_of_non_temporary_events(remaining_enemy[1], true) clear_ped_tasks(remaining_enemy[1]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1392.7656, 3598.7432, 33.9803>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[1], seq) clear_sequence_task(seq) remaining_enemy_status[1]++ break case 1 if not IS_ENTITY_AT_COORD(remaining_enemy[1], <<1392.7656, 3598.7432, 33.9803>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(remaining_enemy[1], script_task_perform_sequence) set_blocking_of_non_temporary_events(remaining_enemy[1], true) clear_ped_tasks(remaining_enemy[1]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1392.7656, 3598.7432, 33.9803>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[1], seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(remaining_enemy[1], false) set_ped_sphere_defensive_area(remaining_enemy[1], <<1392.7656, 3598.7432, 33.9803>>, 1.0) task_combat_ped(remaining_enemy[1], player_ped_id()) remaining_enemy_status[1]++ endif break case 2 if is_ped_injured(wave_3_enemy[2].ped) set_blocking_of_non_temporary_events(remaining_enemy[1], true) clear_ped_tasks(remaining_enemy[1]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1396.5658, 3602.8413, 33.9809>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[1], seq) clear_sequence_task(seq) remaining_enemy_status[1]++ endif break case 3 if not IS_ENTITY_AT_COORD(remaining_enemy[1], <<1396.5658, 3602.8413, 33.9809>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(remaining_enemy[1], script_task_perform_sequence) set_blocking_of_non_temporary_events(remaining_enemy[1], true) clear_ped_tasks(remaining_enemy[1]) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1396.5658, 3602.8413, 33.9809>>, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(remaining_enemy[1], seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(remaining_enemy[1], false) set_ped_sphere_defensive_area(remaining_enemy[1], <<1396.5658, 3602.8413, 33.9809>>, 2.0) task_combat_ped(remaining_enemy[1], player_ped_id()) remaining_enemy_status[1]++ endif break case 4 break endswitch else return true endif return false endfunc func bool wave_3_ai_system() if not wave_3_complete //if activate_wave_3 if ped_structure_are_all_enemies_dead(wave_3_enemy) //and remaining_enemy_0_system() and remaining_enemy_1_system() wave_3_complete = true return true endif // @SBA - initializing local variable INT iWave_3_Index for i = 0 to count_of(wave_3_enemy) - 1 if not is_ped_injured(wave_3_enemy[i].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_3_enemy[i]) switch wave_3_status[i] case initial_attack_phase switch i case 0 if is_vehicle_driveable(wave_3_enemy_vehicle[0].veh) if is_playback_going_on_for_vehicle(wave_3_enemy_vehicle[0].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_3_enemy_vehicle[0].recording_number, "lkmethlab") - 1000) < (get_time_position_in_recording(wave_3_enemy_vehicle[0].veh)) stop_playback_recorded_vehicle(wave_3_enemy_vehicle[0].veh) REMOVE_VEHICLE_BLIP(wave_3_enemy_vehicle[0]) open_sequence_task(seq) task_leave_vehicle(null, wave_3_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_3_enemy[i].ped, seq) clear_sequence_task(seq) wave_3_status[i] = get_into_pos endif endif else wave_3_status[i] = get_into_pos endif break case 1 case 2 case 3 if is_vehicle_driveable(wave_3_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(wave_3_enemy_vehicle[0].veh) player_position = GET_ENTITY_COORDS(player_ped_id()) if (player_position.z < 37.00) open_sequence_task(seq) task_pause(null, (250 * i)) task_leave_vehicle(null, wave_3_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_3_enemy[i].ped, seq) clear_sequence_task(seq) wave_3_status[i] = get_into_pos endif endif else wave_3_status[i] = get_into_pos endif break endswitch break case get_into_pos switch i case 0 case 1 case 2 if not IS_ENTITY_AT_COORD(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(wave_3_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, true) clear_ped_tasks(wave_3_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_3_enemy[i].ped, seq) clear_sequence_task(seq) endif else // @SBA - Start rushing timer (make sure it gives enough time to get enemies into position) IF iWaitTimeBeforeRush != 2000 iWaitTimeBeforeRush = 2000 iWave_Rush_Time = GET_GAME_TIMER() ENDIF set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, 1.0) task_combat_ped(wave_3_enemy[i].ped, player_ped_id()) // @SBA - they'll all get a chance to rush, so goto run_into_shop //wave_3_status[i] = do_nothing wave_3_status[i] = run_into_shop endif break case 3 if not IS_ENTITY_AT_COORD(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, <<1.0, 1.05, 1.6>>, false, true) if has_ped_task_finished_2(wave_3_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, true) clear_ped_tasks(wave_3_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_3_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_3_enemy[i].ped, player_ped_id()) wave_3_status[i] = run_into_shop endif break endswitch break case run_into_shop // @SBA - have all 4 enemies eventually run in (not just enemy 3) // switch i // // case 3 // // if is_ped_injured(wave_3_enemy[1].ped) // // set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, true) // clear_ped_tasks(wave_3_enemy[i].ped) // // wave_3_enemy[i].run_to_pos = wave_3_enemy[1].run_to_pos // // open_sequence_task(seq) // TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) // close_sequence_task(seq) // task_perform_sequence(wave_3_enemy[i].ped, seq) // clear_sequence_task(seq) // // wave_3_status[i] = get_into_shop // // endif // // break // // endswitch // @SBA - allow a rush only when the player is inside // IF IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1400.846, 3602.507, 28.946>>, <<1394.636, 3619.827, 48.946>>, 23.1) // player_position = GET_ENTITY_COORDS(player_ped_id()) // // @SBA - make sure player isn't still upstairs // IF (player_position.z < 37.00) // @SBA - When the wait timer is ready, send a chosen enemy inside IF lk_timer(iWave_Rush_Time, iWaitTimeBeforeRush) iWave_3_Index = GET_NEXT_WAVE_3_INDEX() IF iWave_3_Index != -1 IF wave_3_status[iWave_3_Index] = run_into_shop CPRINTLN(DEBUG_MISSION,"*** Wave 3 rushing enemy is: ", iWave_3_Index) // @SBA - set defensive area on the roof to move the enemy there SET_PED_ANGLED_DEFENSIVE_AREA(wave_3_enemy[iWave_3_Index].ped, tbLiquorStoreVolume.vMin, tbLiquorStoreVolume.vMax, tbLiquorStoreVolume.flWidth) // @SBA - set a new, random wait time then restart rush timer iWaitTimeBeforeRush = GET_RANDOM_WAIT_TIME_FOR_WAVE_3() iWave_Rush_Time = GET_GAME_TIMER() // @SBA - have this enemy's status make like the US Congress wave_3_status[iWave_3_Index] = do_nothing ELSE // @SBA - If the enemy isn't in the proper state yet (due to short initial timer), reset the flag and clock to try again IF wave_3_enemy[iWave_3_Index].bRushInside //CPRINTLN(DEBUG_MISSION,"*** Wave 3 rushing enemy isn't in proper state. Reset for enemy: ", iWave_3_Index) iWaitTimeBeforeRush = 1500 wave_3_enemy[iWave_3_Index].bRushInside = FALSE iWave_Rush_Time = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF // ELSE // // @SBA - If the player goes back upstairs, reset the rush timer // IF iWaitTimeBeforeRush != 17500 // iWaitTimeBeforeRush = 17500 // ENDIF // ENDIF // ELSE // // @SBA - If the player leaves the liquor store, reset the rush timer // IF iWaitTimeBeforeRush != 17500 // iWaitTimeBeforeRush = 17500 // ENDIF // ENDIF break case get_into_shop switch i case 3 if not IS_ENTITY_AT_COORD(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(wave_3_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, true) clear_ped_tasks(wave_3_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_3_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_3_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_3_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_3_enemy[i].ped, wave_3_enemy[i].run_to_pos, 1.0) task_combat_ped(wave_3_enemy[i].ped, player_ped_id()) wave_3_status[i] = do_nothing endif break endswitch break case do_nothing break endswitch endif endfor //endif else return true endif return false endfunc func bool ambient_enemy_system() if ped_structure_are_all_enemies_dead(ambient_enemy) return true endif for i = 0 to count_of(ambient_enemy) - 1 if not is_ped_injured(ambient_enemy[i].ped) switch ambient_enemy_status[i] case initial_attack_phase switch i case 0 if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(ambient_enemy_vehicle[0].veh) ambient_enemy_status[i] = run_away endif else ambient_enemy_status[i] = run_away endif break case 1 if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(ambient_enemy_vehicle[0].veh) open_sequence_task(seq) task_leave_vehicle(null, ambient_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, ambient_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) ambient_enemy_status[i] = get_into_pos endif else ambient_enemy_status[i] = get_into_pos endif break case 2 if is_vehicle_driveable(ambient_enemy_vehicle[1].veh) if not is_playback_going_on_for_vehicle(ambient_enemy_vehicle[1].veh) ambient_enemy_status[i] = run_away endif else ambient_enemy_status[i] = run_away endif break case 3 if is_vehicle_driveable(ambient_enemy_vehicle[1].veh) if not is_playback_going_on_for_vehicle(ambient_enemy_vehicle[1].veh) open_sequence_task(seq) task_leave_vehicle(null, ambient_enemy_vehicle[1].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, ambient_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) ambient_enemy_status[i] = get_into_pos endif else ambient_enemy_status[i] = get_into_pos endif break endswitch break case get_into_pos switch i case 1 if not IS_ENTITY_AT_COORD(ambient_enemy[i].ped, ambient_enemy[i].run_to_pos, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, true) clear_ped_tasks(ambient_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, ambient_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) endif else if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_ped_sphere_defensive_area(ambient_enemy[i].ped, ambient_enemy[i].run_to_pos, 1.75) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, false) task_combat_ped(ambient_enemy[i].ped, player_ped_id()) ambient_enemy_status[i] = combat_player endif endif //peds will instead flee if all wave 3 enemies are dead or buddy is outside the lab if ped_structure_are_all_enemies_dead(wave_3_enemy) ambient_enemy_status[i] = run_away endif break case 3 if not IS_ENTITY_AT_COORD(ambient_enemy[i].ped, ambient_enemy[i].run_to_pos, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, true) clear_ped_tasks(ambient_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, ambient_enemy[i].run_to_pos, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) endif else if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_ped_sphere_defensive_area(ambient_enemy[i].ped, ambient_enemy[i].run_to_pos, 1.75) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, false) task_combat_ped(ambient_enemy[i].ped, player_ped_id()) ambient_enemy_status[i] = combat_player endif endif //peds will instead flee if all wave 3 enemies are dead or buddy is outside the lab if ped_structure_are_all_enemies_dead(wave_3_enemy) ambient_enemy_status[i] = run_away endif break endswitch break case combat_player // If last wave is dead, proceed to run away if ped_structure_are_all_enemies_dead(wave_3_enemy) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, true) clear_ped_tasks(ambient_enemy[i].ped) ambient_enemy_status[i] = run_away endif break case run_away switch i case 0 if not is_ped_injured(ambient_enemy[1].ped) if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) if ped_structure_are_all_enemies_dead(wave_3_enemy) if is_ped_sitting_in_vehicle(ambient_enemy[1].ped, ambient_enemy_vehicle[0].veh) //if is_ped_in_vehicle(ambient_enemy[1].ped, ambient_enemy_vehicle[0].veh) open_sequence_task(seq) TASK_VEHICLE_MISSION_COORS_TARGET(null, ambient_enemy_vehicle[0].veh, <<1740.78235, 3746.83301, 33.88214>>, mission_goto, 22.00, drivingmode_avoidcars, -1, -1) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) ambient_enemy_status[i] = do_nothing endif endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif else if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) open_sequence_task(seq) TASK_VEHICLE_MISSION_COORS_TARGET(null, ambient_enemy_vehicle[0].veh, <<1740.78235, 3746.83301, 33.88214>>, mission_goto, 22.00, drivingmode_avoidcars, -1, -1) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) ambient_enemy_status[i] = do_nothing else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif endif break case 1 if not is_ped_injured(ambient_enemy[0].ped) if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) if not is_ped_sitting_in_vehicle(ambient_enemy[1].ped, ambient_enemy_vehicle[0].veh) if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, true) clear_ped_tasks(ambient_enemy[i].ped) open_sequence_task(seq) task_enter_vehicle(null, ambient_enemy_vehicle[0].veh, -1, vs_front_right) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) endif endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif break case 2 if not is_ped_injured(ambient_enemy[3].ped) if is_vehicle_driveable(ambient_enemy_vehicle[1].veh) if ped_structure_are_all_enemies_dead(wave_3_enemy) AND is_ped_sitting_in_vehicle(ambient_enemy[3].ped, ambient_enemy_vehicle[1].veh) open_sequence_task(seq) TASK_VEHICLE_MISSION_COORS_TARGET(null, ambient_enemy_vehicle[1].veh, <<1741.78235, 3745.83301, 33.88214>>, mission_goto, 22.00, drivingmode_avoidcars, -1, -1) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) ambient_enemy_status[i] = do_nothing endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif else if is_vehicle_driveable(ambient_enemy_vehicle[1].veh) open_sequence_task(seq) TASK_VEHICLE_MISSION_COORS_TARGET(null, ambient_enemy_vehicle[1].veh, <<1741.78235, 3745.83301, 33.88214>>, mission_goto, 22.00, drivingmode_avoidcars, -1, -1) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) endif ambient_enemy_status[i] = do_nothing endif break case 3 if not is_ped_injured(ambient_enemy[2].ped) if is_vehicle_driveable(ambient_enemy_vehicle[1].veh) if not is_ped_sitting_in_vehicle(ambient_enemy[3].ped, ambient_enemy_vehicle[1].veh) if has_ped_task_finished_2(ambient_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(ambient_enemy[i].ped, true) clear_ped_tasks(ambient_enemy[i].ped) open_sequence_task(seq) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) TASK_AIM_GUN_AT_ENTITY(NULL, PLAYER_PED_ID(), 1000) ENDIF task_enter_vehicle(null, ambient_enemy_vehicle[1].veh, -1, vs_front_right) close_sequence_task(seq) task_perform_sequence(ambient_enemy[i].ped, seq) clear_sequence_task(seq) endif endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif else task_smart_flee_ped(ambient_enemy[i].ped, player_ped_id(), 200.00, -1) ambient_enemy_status[i] = do_nothing endif break endswitch break case do_nothing break endswitch endif endfor flash_ambient_enemy_blips(flash_blip_time) return false endfunc func bool obtain_2_remaining_enemies() //de_activates all wave enemy AI for i = 0 to count_of(wave_0_enemy) - 1 wave_0_status[i] = do_nothing endfor for i = 0 to count_of(wave_2_enemy) - 1 wave_2_status[i] = do_nothing endfor for i = 0 to count_of(wave_0_enemy) - 1 if not is_ped_injured(wave_0_enemy[i].ped) if remaining_enemies = 0 remaining_enemy[0] = wave_0_enemy[i].ped elif remaining_enemies = 1 remaining_enemy[1] = wave_0_enemy[i].ped endif remaining_enemies++ if remaining_enemies >= 2 return true endif endif endfor for i = 0 to count_of(wave_2_enemy) - 1 if not is_ped_injured(wave_2_enemy[i].ped) if remaining_enemies = 0 remaining_enemy[0] = wave_2_enemy[i].ped elif remaining_enemies = 1 remaining_enemy[1] = wave_2_enemy[i].ped endif remaining_enemies++ if remaining_enemies >= 2 return true endif endif endfor return false endfunc proc load_uber_data() SetPieceCarPos[0] = <<1117.2610, 3546.8918, 34.0889>> SetPieceCarQuatX[0] = -0.0026 SetPieceCarQuatY[0] = 0.0156 SetPieceCarQuatZ[0] = 0.9813 SetPieceCarQuatW[0] = -0.1920 SetPieceCarRecording[0] = 14 SetPieceCarStartime[0] = 0.0000 SetPieceCarRecordingSpeed[0] = 1.0000 SetPieceCarModel[0] = pcj SetPieceCarPos[1] = <<1113.4513, 3550.6558, 34.0715>> SetPieceCarQuatX[1] = -0.0072 SetPieceCarQuatY[1] = 0.0138 SetPieceCarQuatZ[1] = 0.9729 SetPieceCarQuatW[1] = -0.2308 SetPieceCarRecording[1] = 15 SetPieceCarStartime[1] = 0.0000 SetPieceCarRecordingSpeed[1] = 1.0000 SetPieceCarModel[1] = pcj SetPieceCarPos[2] = <<1116.6305, 3553.0454, 34.0862>> SetPieceCarQuatX[2] = -0.0034 SetPieceCarQuatY[2] = 0.0162 SetPieceCarQuatZ[2] = 0.9675 SetPieceCarQuatW[2] = -0.2525 SetPieceCarRecording[2] = 16 SetPieceCarStartime[2] = 0.0000 SetPieceCarRecordingSpeed[2] = 1.0000 SetPieceCarModel[2] = pcj endproc func bool buddy_on_rooftop() if IS_ENTITY_IN_ANGLED_AREA(buddy.ped, <<1403.115, 3619.935, 37.949>>, <<1408.469, 3605.388, 40.945>>, 6.6) return true endif return false endfunc proc player_waypoint_system() //ADD ASSISTED MOVEMENT WHICH JOHN ADDED INTO GAME WHICH IS TRIGGERED IN THE MAIN CONTROLLER HERE switch player_waypoint_status case 0 //USE_WAYPOINT_RECORDING_AS_ASSISTED_MOVEMENT_ROUTE("methlab6", true, 0.9) //ASSISTED_MOVEMENT_remove_ROUTE("meth3") player_waypoint_status++ break case 1 if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1401.366, 3619.451, 37.947>>, <<1406.805, 3604.510, 39.947>>, 10.900) ASSISTED_MOVEMENT_remove_ROUTE("meth1") player_waypoint_status++ endif break case 2 //player runs from rooftop downstairs // if enemy_creation_and_flow_status > 3 // if IS_ENTITY_IN_ANGLED_AREA(<<1401.366, 3619.451, 37.947>>, <<1406.805, 3604.510, 39.947>>, 10.900) // // ASSISTED_MOVEMENT_remove_ROUTE("Meth2") // // player_waypoint_status++ // endif // endif break case 3 break case 22 break endswitch endproc proc create_second_wave_of_wave_2_enemies() if not wave_2_enemy[6].created SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[0]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[0].veh, wave_2_enemy_vehicle[0].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[0].veh, 8000) setup_enemy_in_vehicle(wave_2_enemy[6], wave_2_enemy_vehicle[0].veh) set_ped_flee_attributes(wave_2_enemy[6].ped, fa_use_vehicle, true) setup_enemy_in_vehicle(wave_2_enemy[7], wave_2_enemy_vehicle[0].veh, vs_front_right) wave_2_enemy[10].created = true wave_2_enemy[11].created = true endif endproc proc create_third_wave_of_wave_2_enemies() if not wave_2_enemy[8].created SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[1]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[1].veh, wave_2_enemy_vehicle[1].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[1].veh, 5500) setup_enemy_in_vehicle(wave_2_enemy[8], wave_2_enemy_vehicle[1].veh) set_ped_flee_attributes(wave_2_enemy[8].ped, fa_use_vehicle, true) setup_enemy_in_vehicle(wave_2_enemy[9], wave_2_enemy_vehicle[1].veh, vs_front_right) endif endproc func bool player_grenade_launcher_cutscene_system() if player_grenade_launcher_cutscene_status != 99 if player_grenade_launcher_cutscene_status > 0 if IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() player_grenade_launcher_cutscene_status = 22 endif endif endif switch player_grenade_launcher_cutscene_status case 0 if lk_timer(cutscene_trigger_time, 1500) //if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1403.115, 3619.935, 37.949>>, <<1408.469, 3605.388, 40.945>>, 6.6) if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1401.353, 3619.360, 38.011>>, <<1406.672, 3604.589, 40.511>>, 10.7) and is_entity_in_angled_area(buddy.ped, <<1401.353, 3619.360, 38.011>>, <<1406.672, 3604.589, 40.511>>, 10.7) and get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(buddy.ped)) < 5.0 // @SBA - Don't toss the weapon yet if enemies are there IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackRoofVolume) AND NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackUpstairsRoomVolume) AND NOT IS_ANY_PED_IN_SPECIFIC_ROOM(wave_2_enemy, (<<1392.2, 3614.1, 39.0>>), "v_39_UpperRm1") if start_new_cutscene_no_fade(false) REPLAY_START_EVENT() REPLAY_RECORD_BACK_FOR_TIME(1.0, 12.0, REPLAY_IMPORTANCE_HIGHEST) CREATE_CONVERSATION(scripted_speech[0], "methaud", "g_launcher", CONV_PRIORITY_HIGH) REMOVE_ALL_PROJECTILES_OF_TYPE(WEAPONTYPE_GRENADE) REMOVE_ALL_PROJECTILES_OF_TYPE(WEAPONTYPE_SMOKEGRENADE) REMOVE_ALL_PROJECTILES_OF_TYPE(WEAPONTYPE_MOLOTOV) clear_area(<<1403.115, 3619.935, 37.949>>, 100.00, false) clear_ped_tasks_immediately(player_ped_id()) // @SBA - ensure player gets 3 rounds IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), weapontype_grenadelauncher) SET_GRENADE_LAUNCHER_AMMO() SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), weapontype_grenadelauncher, TRUE) ELSE give_weapon_to_ped(player_ped_id(), weapontype_grenadelauncher, kiGrenadeLauncherAmmo, true) ENDIF REFILL_AMMO_INSTANTLY(PLAYER_PED_ID()) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks_immediately(buddy.ped) hide_ped_weapon_for_scripted_cutscene(buddy.ped, true) //fix for moving the players truck infront of the door @SBA - may need this for skip too? if is_vehicle_driveable(trevors_truck.veh) set_entity_coords(trevors_truck.veh, <<1409.9990, 3600.4973, 33.8676>>, false) set_entity_heading(trevors_truck.veh, 108.7487) set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) ELIF DOES_ENTITY_EXIST(trevors_truck.veh) set_entity_coords(trevors_truck.veh, <<1409.9990, 3600.4973, 33.8676>>, false) set_entity_heading(trevors_truck.veh, 108.7487) //delete_vehicle(trevors_truck.veh) endif // define cameras camera_a = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE) if get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person camera_b = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1407.336914,3612.038818,39.557838>>,<<-17.864130,-1.011106,-82.419159>>, 44.023628) else camera_b = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", (<<1407.0337, 3612.1533, 39.8239>>), (<<-19.0003, -0.0000, -72.7912>>), 50.0) endif /* START SYNCHRONIZED SCENE */ cutscene_pos = <<1408.814, 3611.670, 38.000>> cutscene_rot = <<0.000, 0.000, 29.000>> //22 cutscene_index = CREATE_SYNCHRONIZED_SCENE(cutscene_pos, cutscene_rot) TASK_SYNCHRONIZED_SCENE(buddy.ped, cutscene_index, "misschinese1", "throwgrenl_cook", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) TASK_SYNCHRONIZED_SCENE(player_ped_id(), cutscene_index, "misschinese1", "throwgrenl_player", INSTANT_BLEND_IN, NORMAL_BLEND_OUT) PLAY_SYNCHRONIZED_CAM_ANIM(camera_a, cutscene_index, "throwGrenL_CAM", "misschinese1") RENDER_SCRIPT_CAMS(TRUE, FALSE) set_synchronized_scene_phase(cutscene_index, 0.186) //0.359 // @SBA - remove the pickup on the roof IF DOES_PICKUP_EXIST(puiGrenadeLauncher) REMOVE_PICKUP(puiGrenadeLauncher) ENDIF trigger_music_event("CHN1_G_LAUNCHER") allow_buddy_ai_system = false //turns off buddy ai system grenade_launcher_cutscene_playing = true g_replay.iReplayInt[PLAYER_RECEIVED_GRENADE_LAUNCHER] = HAS_GOT_GLAUNCHER // If coming from replay IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT) ENDIF ENDIF player_grenade_launcher_cutscene_status++ endif ELSE // @SBA - restart short delay so there's a pause after upstairs enemies have been cleared out cutscene_trigger_time = get_game_timer() ENDIF else if not has_label_been_triggered("chin_roof_0") if not is_any_text_being_displayed(locates_data) if create_conversation(scripted_speech[0], "methaud", "chin_roof_0", conv_priority_medium) set_label_as_triggered("chin_roof_0", true) SET_LABEL_AS_TRIGGERED("METH_GOD_18G", FALSE) endif endif else if not has_label_been_triggered("METH_GOD_18G") if not is_any_text_being_displayed(locates_data) print_now("METH_GOD_18G", default_god_text_time, 1) set_label_as_triggered("METH_GOD_18G", true) endif endif endif endif endif break // @SBA - adding this case to pull the chef out early CASE 1 // @SBA - once Chef has tossed the weapon, have him do something other than stand there IF (GET_SYNCHRONIZED_SCENE_PHASE(cutscene_index) >= 0.65) clear_ped_tasks(buddy.ped) for i = 0 to count_of(wave_2_enemy) - 1 if not is_ped_injured(wave_2_enemy[i].ped) task_combat_ped(buddy.ped, wave_2_enemy[i].ped) i = total_number_of_wave_2_enemies endif endfor wave_2_buddy_ai_system_status = 2 allow_buddy_ai_system = true //TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[2].cover_point, (<<1423.0, 3624.8, 35.9>>), -1) player_grenade_launcher_cutscene_status++ ENDIF BREAK case 2 //for first person camera we need to cut out of the animated camera early before it moves backwards as it gives a 3rd person feel if not grenade_launcher_first_person_cam_active if (get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person) IF (GET_SYNCHRONIZED_SCENE_PHASE(cutscene_index) >= 0.68) vector cam_a_pos vector cam_a_rot float cam_a_fov cam_a_pos = get_cam_coord(camera_a) cam_a_rot = get_cam_rot(camera_a) cam_a_fov = get_cam_fov(camera_a) destroy_cam(camera_a) camera_a = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", cam_a_pos, cam_a_rot, cam_a_fov, TRUE) set_cam_active_with_interp(camera_b, camera_a, 1300, graph_type_linear) grenade_launcher_first_person_cam_active = true endif endif endif if (GET_SYNCHRONIZED_SCENE_PHASE(cutscene_index) >= 0.99) REPLAY_STOP_EVENT() if (get_cam_view_mode_for_context(cam_view_mode_context_on_foot) != cam_view_mode_first_person) IF DOES_CAM_EXIST(camera_b) AND DOES_CAM_EXIST(camera_a) CPRINTLN(DEBUG_MISSION, "ACTIVATING camera_b") SET_CAM_ACTIVE_WITH_INTERP(camera_b, camera_a, 100) SET_CAM_ACTIVE(camera_a, FALSE) ENDIF endif create_second_wave_of_wave_2_enemies() //clear_ped_tasks_immediately(player_ped_id()) //SET_ENTITY_COORDS(player_ped_id(), vTrevorBackDeckStartPos) //<<1409.2817, 3611.7595, 38.0056>> //SET_ENTITY_HEADING(player_ped_id(), 325.6850) task_put_ped_directly_into_cover(player_ped_id(), vTrevorBackDeckStartPos, -1, true, 0.5, true, true, players_cover_point_2) force_ped_ai_and_animation_update(player_ped_id()) hide_ped_weapon_for_scripted_cutscene(buddy.ped, false) set_blocking_of_non_temporary_events(buddy.ped, false) // @SBA - recycle this SET_LABEL_AS_TRIGGERED("METH_GOD_18", FALSE) //create_conversation(scripted_speech[0], "methaud", "THANKS", conv_priority_medium) player_grenade_launcher_cutscene_status ++ endif break CASE 3 // handler for next vehicle full o' bad guys create_third_wave_of_wave_2_enemies() proofing_time = get_game_timer() grenade_launcher_cutscene_playing = false player_grenade_launcher_cutscene_status = 99 // stop and destroy cam, reset stuff if (get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person) end_cutscene_no_fade(false, TRUE, -91.8, -19.0, 500, false) else end_cutscene_no_fade(false, TRUE, -91.8, -19.0, 750, false) endif return true BREAK case 22 if not is_screen_faded_out() if ((not is_screen_fading_in()) and (not is_screen_fading_out())) do_screen_fade_out(500) endif else create_second_wave_of_wave_2_enemies() create_third_wave_of_wave_2_enemies() clear_ped_tasks_immediately(player_ped_id()) SET_ENTITY_COORDS(player_ped_id(), <<1408.9497, 3612.3738, 38.0057>>)//<<1408.0160, 3612.2808, 38.0056>>) SET_ENTITY_HEADING(player_ped_id(), 293.1200) //give_weapon_to_ped(player_ped_id(), weapontype_grenadelauncher, 22, true) //set_current_ped_weapon(player_ped_id(), weapontype_grenadelauncher, true) //task_seek_cover_to_coords(player_ped_id(), <<1408.0160, 3612.2808, 38.0056>>, <<1419.32, 3617.24, 39.92>>, 3000) task_put_ped_directly_into_cover(player_ped_id(), <<1408.0160, 3612.2808, 38.0056>>, -1) force_ped_ai_and_animation_update(player_ped_id(), true) clear_ped_tasks(buddy.ped) SET_ENTITY_COORDS(buddy.ped, <<1406.4009, 3615.2783, 38.0056>>) SET_ENTITY_HEADING(buddy.ped, 292.8793) hide_ped_weapon_for_scripted_cutscene(buddy.ped, false) set_blocking_of_non_temporary_events(buddy.ped, false) for i = 0 to count_of(wave_2_enemy) - 1 if not is_ped_injured(wave_2_enemy[i].ped) task_combat_ped(buddy.ped, wave_2_enemy[i].ped) i = total_number_of_wave_2_enemies endif endfor allow_buddy_ai_system = true // @SBA - recycle this SET_LABEL_AS_TRIGGERED("METH_GOD_18", FALSE) // stop cam, reset stuff end_cutscene(false) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(scripted_speech[0], "methaud", "THANKS", CONV_PRIORITY_MEDIUM) grenade_launcher_cutscene_playing = false player_grenade_launcher_cutscene_status = 99 end_cutscene_no_fade(false, false, 0, 0, 3000, false) return true endif break case 99 break endswitch return false endfunc proc uber_vehicle_system() switch uber_vehicle_status case 0 update_uber_playback(wave_1_uber_vehicle, 1.0) break case 1 break case 2 break endswitch endproc proc reset_wave_0_vehicles_for_ram_gates_cutscene(bool allow_vehicle_warp = false) //clears enemy cars off the vehicle recording line float recording_time for i = 0 to 1 if is_vehicle_driveable(wave_0_enemy_vehicle[i].veh) and is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[i].veh) skip_to_end_and_stop_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh) else if not is_entity_dead(wave_0_enemy_vehicle[i].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[i].veh) stop_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh) endif endif //commenting out as this is causing vehicles to visibly warp. This cutscene has been made ingame. if allow_vehicle_warp if does_entity_exist(wave_0_enemy_vehicle[i].veh) wave_0_enemy_vehicle[i].pos = get_entity_coords(wave_0_enemy_vehicle[i].veh, false) if is_point_in_angled_area(wave_0_enemy_vehicle[i].pos, <<1376.030, 3597.157, 33.900>>, <<1383.560, 3599.545, 36.900>>, 27.700) or is_point_in_angled_area(wave_0_enemy_vehicle[i].pos, <<1370.034, 3570.068, 33.969>>, <<1365.436, 3582.441, 34.969>>, 31.5) recording_time = (get_total_duration_of_vehicle_recording(wave_0_enemy_vehicle[i].recording_number, "lkmethlab") - 50) set_entity_coords(wave_0_enemy_vehicle[i].veh, get_position_of_vehicle_recording_at_time(wave_0_enemy_vehicle[i].recording_number, recording_time, "lkmethlab"), false) set_entity_rotation(wave_0_enemy_vehicle[i].veh, get_rotation_of_vehicle_recording_at_time(wave_0_enemy_vehicle[i].recording_number, recording_time, "lkmethlab"), euler_yxz, false) endif endif endif endif endfor for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) if is_entity_in_angled_area(parked_cars[i], <<1376.030, 3597.157, 33.900>>, <<1383.560, 3599.545, 36.900>>, 27.700, false, false) or is_entity_in_angled_area(parked_cars[i], <<1370.034, 3570.068, 33.969>>, <<1365.436, 3582.441, 34.969>>, 31.5, false, false) delete_vehicle(parked_cars[i]) endif endif endfor endproc func bool ramming_gates_cutscene() FLOAT fRecTime if does_entity_exist(wave_0_enemy_vehicle[2].veh) if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) fRecTime = (get_time_position_in_recording(wave_0_enemy_vehicle[2].veh)) CPRINTLN(DEBUG_MISSION, "rec time = ", fRecTime) endif ELSE CPRINTLN(DEBUG_MISSION, "Ramming Truck has been disabled: Bailing and cleaning up.") ramming_gates_cutscene_status = 99 endif endif switch ramming_gates_cutscene_status case 0 //kill_any_conversation()//forces any dialogue to clean up specific or shooting dialogue. // @SBA - have this start quicker if lk_timer(cutscene_trigger_time, 250) and prepare_music_event("CHN1_CAR_ARRIVES") //and not is_any_text_being_displayed(locates_data) // @SBA - trying this without the cutscene clear_area_of_vehicles(<<1402.2213, 3597.3352, 33.8866>>, 1000.00) reset_wave_0_vehicles_for_ram_gates_cutscene() if is_vehicle_driveable(trevors_truck.veh) set_entity_coords(trevors_truck.veh, <<1409.9990, 3600.4973, 33.8676>>) set_entity_heading(trevors_truck.veh, 108.7487) set_vehicle_on_ground_properly(trevors_truck.veh) endif set_state_of_closest_door_of_type(prop_arm_gate_l, <<1372.36, 3609.02, 35.62>>, true, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1377.97, 3611.06, 35.62>>, true, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1372.36, 3609.02, 35.62>>, false, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1377.97, 3611.06, 35.62>>, false, 0.0) SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[2]) set_entity_proofs(wave_0_enemy_vehicle[2].veh, true, true, true, true, true) start_playback_recorded_vehicle(wave_0_enemy_vehicle[2].veh, wave_0_enemy_vehicle[2].recording_number, "lkmethlab") // @SBA - setting the recording skip to be earlier, so it doesn't pop in so close // OLD VALUE = 13500 skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[2].veh, 8000) force_playback_recorded_vehicle_update(wave_0_enemy_vehicle[2].veh) setup_enemy_in_vehicle(wave_0_inside_enemy[0], wave_0_enemy_vehicle[2].veh) setup_enemy_in_vehicle(wave_0_inside_enemy[1], wave_0_enemy_vehicle[2].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_inside_enemy[2], wave_0_enemy_vehicle[2].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_inside_enemy[3], wave_0_enemy_vehicle[2].veh, vs_back_right) set_entity_proofs(wave_0_inside_enemy[0].ped, true, true, true, true, true) set_entity_proofs(wave_0_inside_enemy[1].ped, true, true, true, true, true) set_entity_proofs(wave_0_inside_enemy[2].ped, true, true, true, true, true) set_entity_proofs(wave_0_inside_enemy[3].ped, true, true, true, true, true) // @SBA - add this truck guy for dialogue, ensure lable is cleared ADD_PED_FOR_DIALOGUE(scripted_speech[0], 8, wave_0_inside_enemy[1].ped, "VAGOS") SET_LABEL_AS_TRIGGERED("chin_RAM", FALSE) for i = 0 to count_of(wave_0_inside_enemy) - 1 SET_COMBAT_FLOAT(wave_0_inside_enemy[i].ped, CCF_WEAPON_ACCURACY, 0.10) endfor TASK_DRIVE_BY(wave_0_inside_enemy[1].ped, player_ped_id(), null, <<0.0, 0.0, 2.0>>, 300.00, 100) //setup_players_weapon_for_cutscene(weapontype_carbinerifle, 200, players_ammo) //locate check for forecourt of meth lab // @SBA - removing cameras, trying this without them // set_cam_active(camera_a, true) // render_script_cams(true, false) // set_cam_active_with_interp(camera_b, camera_a, 3000, graph_type_accel) if is_audio_scene_active("CHI_1_SHOOTOUT_01") stop_audio_scene("CHI_1_SHOOTOUT_01") endif trigger_music_event("CHN1_CAR_ARRIVES") start_audio_scene("CHI_1_TRUCK_ARRIVES") ADD_ENTITY_TO_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[2].veh, "CHI_1_TRUCK_01") ramming_gates_cutscene_status++ // endif endif break case 1 // @SBA - making this one variable if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) if fRecTime > 15700 reset_wave_0_vehicles_for_ram_gates_cutscene() original_time = get_game_timer() ramming_gates_cutscene_status++ //@SBA - Have a guy in the truck say a dialogue line before they hit the gates ELIF NOT HAS_LABEL_BEEN_TRIGGERED("chin_RAM") // We don't want this to trigger too late IF fRecTime > 13000 AND fRecTime < 13500 IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_RAM", conv_priority_medium) //PRINTLN("*** Saying truck ramming dialogue now.") SET_LABEL_AS_TRIGGERED("chin_RAM", TRUE) ENDIF ENDIF ENDIF ENDIF endif endif break case 2 if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) if (get_time_position_in_recording(wave_0_enemy_vehicle[2].veh) > 17700) for i = 0 to count_of(wave_0_inside_enemy) - 1 if not is_ped_injured(wave_0_inside_enemy[i].ped) set_entity_proofs(wave_0_inside_enemy[i].ped, false, false, false, false, false) endif endfor if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) set_entity_proofs(wave_0_enemy_vehicle[2].veh, false, false, false, false, false) endif if not is_ped_injured(wave_0_inside_enemy[1].ped) clear_ped_tasks(wave_0_inside_enemy[1].ped) endif if is_audio_scene_active("CHI_1_TRUCK_ARRIVES") stop_audio_scene("CHI_1_TRUCK_ARRIVES") endif REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[2].veh) original_time = get_game_timer() ram_cutscene_finished = true return true endif endif endif break case 22 if not is_screen_faded_out() if ((not is_screen_fading_in()) and (not is_screen_fading_out())) do_screen_fade_out(500) endif else if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[2].veh) skip_to_end_and_stop_playback_recorded_vehicle(wave_0_enemy_vehicle[2].veh) endif set_entity_proofs(wave_0_enemy_vehicle[2].veh, false, false, false, false, false) endif for i = 0 to count_of(wave_0_inside_enemy) - 1 if not is_ped_injured(wave_0_inside_enemy[i].ped) set_entity_proofs(wave_0_inside_enemy[i].ped, false, false, false, false, false) endif endfor if not is_ped_injured(wave_0_inside_enemy[1].ped) clear_ped_tasks(wave_0_inside_enemy[1].ped) endif if is_audio_scene_active("CHI_1_TRUCK_ARRIVES") stop_audio_scene("CHI_1_TRUCK_ARRIVES") endif REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[2].veh) original_time = get_game_timer() if is_ped_in_specific_room(player_ped_id(), <<1391.2273, 3601.6284, 38.5>>, "V_39_UpperRm3") end_cutscene(false, -12.0, 0, false) else end_cutscene(false, -12.0, 0, false) endif return true endif break // @SBA - Clean up if the truck got disbaled somehow CASE 99 for i = 0 to count_of(wave_0_inside_enemy) - 1 if not is_ped_injured(wave_0_inside_enemy[i].ped) set_entity_proofs(wave_0_inside_enemy[i].ped, false, false, false, false, false) endif endfor if is_vehicle_driveable(wave_0_enemy_vehicle[2].veh) set_entity_proofs(wave_0_enemy_vehicle[2].veh, false, false, false, false, false) endif if not is_ped_injured(wave_0_inside_enemy[1].ped) clear_ped_tasks(wave_0_inside_enemy[1].ped) endif if is_audio_scene_active("CHI_1_TRUCK_ARRIVES") stop_audio_scene("CHI_1_TRUCK_ARRIVES") endif REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[2].veh) original_time = get_game_timer() ram_cutscene_finished = true return true BREAK endswitch return false endfunc func bool wave_0_master_flow_system() // @SBA = loading for next waves IF NOT bLoadedLastShootoutStuff request_shootout_assets(FALSE) IF is_shootout_assets_loaded() bLoadedLastShootoutStuff = TRUE ENDIF ENDIF switch wave_0_master_flow_system_status case 0 set_state_of_closest_door_of_type(prop_arm_gate_l, <<1372.36, 3609.02, 35.62>>, true, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1377.97, 3611.06, 35.62>>, true, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1372.36, 3609.02, 35.62>>, false, 0.0) set_state_of_closest_door_of_type(prop_arm_gate_l, <<1377.97, 3611.06, 35.62>>, false, 0.0) // @SBA - opening outer doors to help player follow Chef SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, TRUE, 1.0) SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, TRUE, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, TRUE, 0, 0, -1.0) // @SBA - try to get the rushers into better positions ADD_TACTICAL_NAV_MESH_POINT(<<1398.7, 3603.9, 37.95>>) ADD_TACTICAL_NAV_MESH_POINT(<<1394.5, 3603.5, 37.95>>) RESET_CHEF_WARNINGS_FOR_NEXT_WAVE() // there's gonna be a shootout SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_SHOOTING ) wave_0_master_flow_system_status++ break case 1 // clean up blend cam IF DOES_CAM_EXIST(camera_a) IF IS_GAMEPLAY_CAM_RENDERING() SET_CAM_ACTIVE(camera_a, FALSE) DESTROY_CAM(camera_a) ENDIF ENDIF // fade in if needed (replay) IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF // @SBA - let the ram cutscene happen if there are 2 or fewer guys left from first group IF ped_structure_get_total_number_of_enemies_dead(wave_0_enemy) >= ABSI( 2 - COUNT_OF(wave_0_enemy)) REPLAY_RECORD_BACK_FOR_TIME(3.0) wave_0_master_flow_system_status++ cutscene_trigger_time = get_game_timer() ENDIF // if ped_structure_are_all_enemies_dead(wave_0_enemy) // wave_0_master_flow_system_status++ // cutscene_trigger_time = get_game_timer() // endif break case 2 // @SBA - now that there are two guys left when this wave "ends" and the truck comes, // I'm switching out Trevor's dialogue to the lines written for B*846594, which contextually // now make more sense. OLD Label = "chin_cut_0" if create_conversation(scripted_speech[0], "methaud", "chin_LEFT", conv_priority_medium) wave_0_master_flow_system_status++ endif break case 3 if ramming_gates_cutscene() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2, "Wave 0 outside enemies") CLEAR_TACTICAL_NAV_MESH_POINTS() wave_0_master_flow_system_status++ endif break case 4 if is_ped_in_angled_area_lk(wave_0_inside_enemy[0].ped, <<1383.042, 3613.064, 33.900>>, <<1378.663, 3625.411, 44.900>>, 22.6) or is_ped_in_angled_area_lk(wave_0_inside_enemy[1].ped, <<1383.042, 3613.064, 33.900>>, <<1378.663, 3625.411, 44.900>>, 22.6) or is_vehicle_in_angled_area_lk(wave_0_enemy_vehicle[2].veh, <<1383.042, 3613.064, 33.900>>, <<1378.663, 3625.411, 44.900>>, 22.6) OR NOT IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[2].veh) // @SBA - skip through if vehicle got disabled wave_0_dialogue_system_status = 2 wave_0_buddy_ai_system_status = 1 wave_0_assisted_nodes_system_status = 1 // piggy back in here SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_SHOOTING ) wave_0_master_flow_system_status++ endif break case 5 bool wave_0_enemies_dead bool wave_0_inside_enemies_dead wave_0_enemies_dead = ped_structure_are_all_enemies_dead(wave_0_enemy) wave_0_inside_enemies_dead = ped_structure_are_all_enemies_dead(wave_0_inside_enemy) if wave_0_enemies_dead and wave_0_inside_enemies_dead if is_audio_scene_active("CHI_1_SHOOTOUT_02") stop_audio_scene("CHI_1_SHOOTOUT_02") endif START_AUDIO_SCENE("CHI_1_GET_TO_SHOOTOUT_03") //stops any text or dialogue once all the enemies are dead. //clear_prints() wave_0_dialogue_system_status = 22 original_time = get_game_timer() wave_0_master_flow_system_status++ endif break case 6 //if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(buddy.ped)) < 20 if create_conversation(scripted_speech[0], "methaud", "buddy_wv2_0", conv_priority_medium) original_time = get_game_timer() wave_0_master_flow_system_status++ endif // else // wave_2_dialogue_system_status++ // endif break case 7 if (not is_any_text_being_displayed(locates_data) and get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(buddy.ped)) < 15 and is_ped_facing_ped(player_ped_id(), buddy.ped, 50.00)) or lk_timer(original_time, 5000) or is_player_infront_of_door() //stops player running to the front of lab and seeing enemies spawn return true endif break // For replay CASE 50 // delay fade in until player is actually in action mode IF lk_timer(original_time, 750) DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT) wave_0_master_flow_system_status = 5 wave_0_dialogue_system_status = 2 ENDIF BREAK endswitch return false endfunc func bool are_wave_0_enemies_coming_up_stairs() for i = 0 to count_of(wave_0_inside_enemy) - 1 if not is_ped_injured(wave_0_inside_enemy[i].ped) if IS_ENTITY_IN_ANGLED_AREA(wave_0_inside_enemy[i].ped, <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.20) or IS_ENTITY_IN_ANGLED_AREA(wave_0_inside_enemy[i].ped, <<1388.321, 3622.040, 34.061>>, <<1389.153, 3619.789, 41.061>>, 9.10) return true endif endif endfor return false endfunc // Plays the Chef's outburst line when ready, then resets to do it again PROC PLAY_AND_RESET_OUTBURST() IF TIMER_DO_ONCE_WHEN_READY(tmrChefOutburstTimer, fOutburstTime) IF PLAY_CHEF_CONVERSATION(sChefOutburst) CPRINTLN(DEBUG_MISSION,"PLAY_AND_RESET_OUTBURST: Playing Chef Outburst.") ENDIF fOutburstTime = GET_RANDOM_FLOAT_IN_RANGE(8.000, 12.000) START_TIMER_NOW(tmrChefOutburstTimer) ENDIF ENDPROC // @SBA - handles playing Chef's dialogue about enemies getting inside for wave 0 PROC HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_0() BOOL bPlayDialogue = FALSE // If an enemy is downstairs, play warning IF NOT HAS_LABEL_BEEN_TRIGGERED(sChefWarn1) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(LOCATES_DATA) IF IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1393.0, 3612.2, 35.0>>), "v_39_StairsRm") OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") // play Chef's dialogue, but only once (skip if too player's too far) IF PLAY_CHEF_CONVERSATION(sChefWarn1) CPRINTLN(DEBUG_MISSION,"HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_0: Playing Chef WARNING 1.") ENDIF SET_LABEL_AS_TRIGGERED(sChefWarn1, TRUE) ENDIF ENDIF ENDIF // Check if enemy is upstairs IF wave_0_master_flow_system_status < 5 IF IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1391.1970, 3601.0510, 37.9418>>), "v_39_UpperRm3") OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_0_enemy, (<<1392.2, 3614.1, 39.0>>), "v_39_UpperRm1") bPlayDialogue = TRUE ENDIF ENDIF // If clear to play the next warning, do it IF NOT HAS_LABEL_BEEN_TRIGGERED(sChefWarn2) IF bPlayDialogue // play Chef's dialogue if player is close enough IF PLAY_CHEF_CONVERSATION(sChefWarn2) CPRINTLN(DEBUG_MISSION,"HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_0: Playing Chef WARNING 2.") ENDIF // Start outburst timer START_TIMER_NOW(tmrChefOutburstTimer) fOutburstTime = GET_RANDOM_FLOAT_IN_RANGE(8.000, 12.000) SET_LABEL_AS_TRIGGERED(sChefWarn2, TRUE) ENDIF ENDIF // Enemies at the back stairs IF wave_0_master_flow_system_status = 5 // Warning when enemies head to back stairs IF NOT HAS_LABEL_BEEN_TRIGGERED(sChefBackStairsWarn) // Wait for any other enemies to clear the stairs IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_0_inside_enemy, tbFullBackStairsVolume) AND NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbFullBackStairsVolume) IF IS_ANY_PED_IN_TRIGGER_BOX(wave_0_inside_enemy, tbBackStairsAlleyVolume) // play warning if player is close enough IF PLAY_CHEF_CONVERSATION(sChefBackStairsWarn) CPRINTLN(DEBUG_MISSION,"HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_0: Playing Chef BACK STAIRS WARNING.") ENDIF // Start outburst timer START_TIMER_NOW(tmrChefOutburstTimer) fOutburstTime = GET_RANDOM_FLOAT_IN_RANGE(8.000, 12.000) SET_LABEL_AS_TRIGGERED(sChefBackStairsWarn, TRUE) ENDIF ENDIF ENDIF // for back stairs outbursts IF IS_ANY_PED_IN_TRIGGER_BOX(wave_0_inside_enemy, tbTopBackStairsVolume) OR IS_ANY_PED_IN_TRIGGER_BOX(wave_0_inside_enemy, tbOnBackStairsVolume) OR IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbTopBackStairsVolume) OR IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbOnBackStairsVolume) bPlayDialogue = TRUE ENDIF ENDIF // Handle the Chef's outbursts IF bPlayDialogue PLAY_AND_RESET_OUTBURST() // reset the second warning after a timer and if the coast is currently clear ELIF IS_TIMER_STARTED(tmrChefOutburstTimer) IF TIMER_DO_ONCE_WHEN_READY(tmrChefOutburstTimer, fOutburstTime) SET_LABEL_AS_TRIGGERED(sChefWarn2, FALSE) CANCEL_TIMER(tmrChefOutburstTimer) ENDIF ENDIF ENDPROC // @SBA - handles playing Chef's dialogue about enemies getting inside for wave 2 PROC HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_2() BOOL bPlayDialogue = FALSE // If an enemy is coming upstairs, play warning IF NOT HAS_LABEL_BEEN_TRIGGERED(sChefWarn1) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(LOCATES_DATA) IF IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackGateVolume) OR IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbTopBackStairsVolume) OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_2_enemy, (<<1392.2, 3614.1, 39.0>>), "v_39_UpperRm1") // play Chef's dialogue, but only once (if player's close) IF PLAY_CHEF_CONVERSATION(sChefWarn1) CPRINTLN(DEBUG_MISSION,"HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_2: Playing Chef WARNING 1.") ENDIF SET_LABEL_AS_TRIGGERED(sChefWarn1, TRUE) ENDIF ENDIF ENDIF // Check if enemy is upstairs IF IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackRoofVolume) OR IS_ANY_PED_IN_SPECIFIC_ROOM(wave_2_enemy, (<<1397.1, 3608.4, 38.5>>), "v_39_UpperRm2") bPlayDialogue = TRUE ENDIF // If clear to play the next warning, do it IF NOT HAS_LABEL_BEEN_TRIGGERED(sChefWarn2) //IF NOT IS_ANY_TEXT_BEING_DISPLAYED(LOCATES_DATA) IF bPlayDialogue // play Chef's dialogue if player's close IF PLAY_CHEF_CONVERSATION(sChefWarn2) CPRINTLN(DEBUG_MISSION,"HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_2: Playing Chef WARNING 2.") ENDIF // Start outburst timer START_TIMER_NOW(tmrChefOutburstTimer) fOutburstTime = GET_RANDOM_FLOAT_IN_RANGE(8.000, 12.000) SET_LABEL_AS_TRIGGERED(sChefWarn2, TRUE) ENDIF //ENDIF ENDIF // Handle the Chef's outbursts IF bPlayDialogue PLAY_AND_RESET_OUTBURST() // reset the second warning after a timer and if the coast is currently clear ELIF IS_TIMER_STARTED(tmrChefOutburstTimer) IF TIMER_DO_ONCE_WHEN_READY(tmrChefOutburstTimer, fOutburstTime) SET_LABEL_AS_TRIGGERED(sChefWarn2, FALSE) CANCEL_TIMER(tmrChefOutburstTimer) ENDIF ENDIF ENDPROC proc wave_0_dialogue_system() // @SBA- in case enemies get inside HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_0() switch wave_0_dialogue_system_status case 0 if create_conversation(scripted_speech[0], "methaud", "buddy_info0", conv_priority_medium) wave_0_dialogue_system_status++ endif break case 1 if not is_scripted_conversation_ongoing() print_now("METH_GOD_0", default_god_text_time, 1) wave_0_dialogue_system_status = 22 endif break case 2 if create_conversation(scripted_speech[0], "methaud", "ram_gates", conv_priority_medium) REPLAY_RECORD_BACK_FOR_TIME(4.0, 8.0) buddy_time = get_game_timer() wave_0_dialogue_system_status++ endif break case 3 if not is_scripted_conversation_ongoing() AND wave_0_buddy_ai_system_status >= 2 //@SBA - make sure Chef is ready to be followed first dialogue_time_2 = get_game_timer() dialogue_time = get_game_timer() print_now("METH_GOD_1", default_god_text_time, 1) // Follow Chef outside wave_0_dialogue_system_status++ endif break case 4 if lk_timer(dialogue_time_2, 5000) if not is_any_text_being_displayed(locates_data) if is_entity_in_angled_area(player_ped_id(), <<1388.600, 3602.066, 37.942>>, <<1396.070, 3604.638, 40.942>>, 7.2) if create_conversation(scripted_speech[0], "methaud", "HERE", conv_priority_low) dialogue_time_2 = get_game_timer() endif endif endif endif //ensures the "enemies coming from the left" dialogue only plays when the player is walking through the //correct door to make the dialogue make sense orientation wise. //area on porch and small area running through door if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) if is_entity_in_angled_area(player_ped_id(), <<1386.186, 3614.861, 37.943>>, <<1389.025, 3615.835, 39.942>>, 1.8) if not are_wave_0_enemies_coming_up_stairs() clear_prints() if create_conversation(scripted_speech[0], "methaud", "chin_to_left", conv_priority_medium) trigger_music_event("CHN1_FROM_LEFT") wave_0_dialogue_system_status++ endif else wave_0_dialogue_system_status++ endif else wave_0_dialogue_system_status++ endif else vector player_pos player_pos = get_entity_coords(player_ped_id()) //some of the conditions for making gang enemies attack. if lk_timer(original_time, 25000) or player_pos.z < 37.00 //or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) wave_0_dialogue_system_status++ endif endif break case 5 if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) //if create_conversation(scripted_speech[0], "methaud", "chin_left_0", conv_priority_medium) if create_conversation(scripted_speech[0], "methaud", "ram_gates_2", conv_priority_medium) wave_0_dialogue_system_status++ endif endif break case 6 IF NOT IS_SCRIPTED_CONVERSATION_ONGOING() SPECIAL_ABILITY_CHARGE_SMALL(PLAYER_ID(), TRUE, TRUE) IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) PRINT_HELP("METH_help_T_KM",DEFAULT_HELP_TEXT_TIME) ELSE PRINT_HELP("METH_help_T",DEFAULT_HELP_TEXT_TIME) ENDIF wave_0_dialogue_system_status++ ENDIF break case 22 break endswitch if lk_timer(dialogue_time, 13000) if wave_0_master_flow_system_status != 3 //stops the dialogue during the cutscene. if is_ped_shooting(player_ped_id()) if not is_any_text_being_displayed(locates_data) if is_enemy_near_player(wave_0_enemy, 50.00) or is_enemy_near_player(wave_0_inside_enemy, 50.00) if create_conversation(scripted_speech[0], "methaud", "attack_0", conv_priority_low) dialogue_time = get_game_timer() endif endif endif endif endif endif endproc proc wave_0_buddy_ai_system() if allow_buddy_ai_system IF NOT wave_0_complete // @SBA - this is combined for both parts of wave 0. If we get errant abandon messages, this may be why. // Chef at window position IF IS_ENTITY_AT_COORD(buddy.ped, <<1387.4102, 3607.4644, 37.9418>>, <<3.0, 3.0, 2.0>>, FALSE) HANDLE_WAVE_0_CHEF_DEMISE() HANDLE_ABANDONMENT_MESSAGE(HAS_PLAYER_ABANDONED_CHEF_WAVE_0()) // Chef outside, top of stairs postion ELIF IS_ENTITY_AT_COORD(buddy.ped, vChefCoverPointBackStairs, <<3.0, 3.0, 2.0>>, FALSE) HANDLE_WAVE_0_PART_2_CHEF_DEMISE() HANDLE_ABANDONMENT_MESSAGE(HAS_PLAYER_ABANDONED_CHEF_WAVE_0_PART2()) ENDIF HANDLE_CHEF_DAMAGED_DIALOGUE() ENDIF switch wave_0_buddy_ai_system_status case 0 // @SBA - make sure Chef's health is set to max for this wave SET_HEALTH_FOR_PED(buddy.ped, buddy.health) if not IS_ENTITY_AT_COORD(buddy.ped, <<1387.4102, 3607.4644, 37.9418>>, <<2.0, 2.0, 2.0>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) clear_ped_tasks(buddy.ped) set_blocking_of_non_temporary_events(buddy.ped, true) open_sequence_task(seq) task_seek_cover_to_cover_point(null, buddy_cover_point[0], <<1372.01, 3596.31, 37.97>>, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif else if is_ped_in_cover(buddy.ped) or lk_timer(buddy_time, 4500) if lk_timer(buddy_time, 4500) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) set_blocking_of_non_temporary_events(buddy.ped, false) set_ped_sphere_defensive_area(buddy.ped, <<1387.4447, 3607.4478, 37.9418>>, 2.0) SET_PED_ACCURACY(buddy.ped, 25) TASK_COMBAT_HATED_TARGETS_AROUND_PED(buddy.ped, 75.0) wave_0_buddy_ai_system_status = 22 endif endif endif break case 1 // When Chef is visible, wait a little extra to help player see him run out IF NOT IS_ENTITY_OCCLUDED(buddy.ped) START_TIMER_NOW(tmrChefRunsDelay) ELSE CANCEL_TIMER(tmrChefRunsDelay) ENDIF // @SBA - Don't move yet if enemies are right there, or player isn't looking IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbUpstairsRushVolume) if not is_entity_in_angled_area(player_ped_id(), <<1389.055, 3600.813, 37.947>>, <<1396.021, 3603.307, 40.947>>, 4.500) OR TIMER_DO_WHEN_READY(tmrChefRunsDelay, 1.500) or lk_timer(original_time, 10000) // failsafe to keep things moving bChefRunsToBackStairs = TRUE ENDIF ENDIF IF bChefRunsToBackStairs set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_clear_look_at(null) TASK_FOLLOW_WAYPOINT_RECORDING(null, "methlab4", 0, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) CANCEL_TIMER(tmrChefRunsDelay) wave_0_buddy_ai_system_status++ endif break case 2 // @SBA - make sure Chef's health is set to max for this wave SET_HEALTH_FOR_PED(buddy.ped, buddy.health) if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(buddy.ped, 2.0) //1.9 endif // @SBA - trying an earlier waypoint and different cover, also so he avoids getting stuck on door. OLD = 15 if waypoint_recording_get_coord("methlab4", 10, target_waypoint_pos) if not IS_ENTITY_AT_COORD(buddy.ped, target_waypoint_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if waypoint_recording_get_closest_waypoint("methlab4", GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) waypoint_node_pos += 1 // @SBA - trying an earlier point. OLD = 15 if waypoint_node_pos > 10 waypoint_node_pos = 10 endif set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_waypoint_recording(null, "methlab4", waypoint_node_pos, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif else IF IS_PLAYER_STEALING_PEDS_DESTINATION(buddy.ped, buddy_cover_point_data[0].pos, 5.0, false) TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[1].cover_point, buddy_cover_point_data[1].cover_from_pos, -1) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, FALSE) ELSE TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[0].cover_point, buddy_cover_point_data[0].cover_from_pos, -1) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) ENDIF wave_0_buddy_ai_system_status++ endif endif break case 3 if not is_ped_in_cover(buddy.ped) buddy_time = get_game_timer() IF has_ped_task_finished_2(buddy.ped, SCRIPT_TASK_SEEK_COVER_TO_COVER_POINT) IF IS_PLAYER_STEALING_PEDS_DESTINATION(buddy.ped, buddy_cover_point_data[0].pos, 5.0, false) TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[1].cover_point, buddy_cover_point_data[1].cover_from_pos, -1) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, FALSE) ELSE TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[0].cover_point, buddy_cover_point_data[0].cover_from_pos, -1) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) ENDIF ENDIF else if lk_timer(buddy_time, 1000) SET_PED_PATH_CAN_USE_CLIMBOVERS(buddy.ped, false) set_ped_sphere_defensive_area(buddy.ped, GET_ENTITY_COORDS(buddy.ped), 1.5) // @SBA - OLD = <<1389.67, 3619.39, 38.5>> and 1.0 //<<1390.00, 3618.03, 38.3>> set_blocking_of_non_temporary_events(buddy.ped, false) task_combat_hated_targets_around_ped(buddy.ped, 100) wave_0_buddy_ai_system_status = 22 ENDIF endif break case 4 if ped_structure_are_all_enemies_dead(wave_0_inside_enemy) set_ped_accuracy(buddy.ped, 10) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1390.00, 3618.03, 37.93>>, pedmove_run, -1) TASK_TURN_PED_TO_FACE_ENTITY(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_0_buddy_ai_system_status++ endif break case 5 if not IS_ENTITY_AT_COORD(buddy.ped, <<1390.00, 3618.03, 37.93>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1390.00, 3618.03, 37.93>>, pedmove_run, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif else if not is_ped_facing_ped(buddy.ped, player_ped_id(), 30.00) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) TASK_TURN_PED_TO_FACE_ENTITY(null, player_ped_id()) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif endif break case 22 break endswitch endif endproc func bool wave_0_ai_system() if not wave_0_complete bool wave_0_enemies_dead = ped_structure_are_all_enemies_dead(wave_0_enemy) bool wave_0_inside_enemies_dead = ped_structure_are_all_enemies_dead(wave_0_inside_enemy) // @SBA - declare local variable INT iWave_0_Index if wave_0_enemies_dead and wave_0_inside_enemies_dead wave_0_complete = true return true endif for i = 0 to count_of(wave_0_enemy) - 1 if not is_ped_injured(wave_0_enemy[i].ped) // @SBA - make blip for enemy if needed HANDLE_ENEMY_BLIP_CREATION(wave_0_enemy[i]) switch wave_0_status[i] case initial_attack_phase switch i case 0 case 1 open_sequence_task(seq) task_pause(null, 500) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos break case 2 if is_vehicle_driveable(wave_0_enemy_vehicle[0].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[0].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_0_enemy_vehicle[0].recording_number, "lkmethlab") - 1000) < (get_time_position_in_recording(wave_0_enemy_vehicle[0].veh)) stop_playback_recorded_vehicle(wave_0_enemy_vehicle[0].veh) REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[0]) open_sequence_task(seq) task_leave_vehicle(null, wave_0_enemy_vehicle[0].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos endif endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 3.0) task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = run_to_other_side_of_building endif break case 3 case 4 if is_vehicle_driveable(wave_0_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[0].veh) open_sequence_task(seq) task_pause(null, (150 * i)) //task_leave_vehicle(null, wave_0_enemy_vehicle[0].veh, ecf_dont_close_door) //TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) TASK_SET_SPHERE_DEFENSIVE_AREA(null, wave_0_enemy[i].run_to_pos, 3.0) task_set_blocking_of_non_temporary_events(null, false) TASK_COMBAT_HATED_TARGETS_AROUND_PED(null, 100) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0) //3.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = run_to_other_side_of_building endif break case 5 if is_vehicle_driveable(wave_0_enemy_vehicle[1].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[1].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_0_enemy_vehicle[1].recording_number, "lkmethlab") - 100) < (get_time_position_in_recording(wave_0_enemy_vehicle[1].veh)) stop_playback_recorded_vehicle(wave_0_enemy_vehicle[1].veh) REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[1]) open_sequence_task(seq) task_leave_vehicle(null, wave_0_enemy_vehicle[1].veh, ecf_dont_close_door) // @SBA - tasking this guy to just run (he comes inside first) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 1.0) //TASK_SWAP_WEAPON(NULL, TRUE) //TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, wave_0_enemy[i].run_to_pos, pedmove_run, -1) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos endif endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0) //3.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = run_to_other_side_of_building endif break case 6 if is_vehicle_driveable(wave_0_enemy_vehicle[1].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[1].veh) open_sequence_task(seq) task_pause(null, (i * i * 15)) task_leave_vehicle(null, wave_0_enemy_vehicle[1].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0)//2.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = run_to_other_side_of_building endif break case 7 case 8 if is_vehicle_driveable(wave_0_enemy_vehicle[1].veh) if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[1].veh) open_sequence_task(seq) task_pause(null, (i * i * 15)) task_leave_vehicle(null, wave_0_enemy_vehicle[1].veh, ecf_dont_close_door) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0) //3.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = run_to_other_side_of_building endif break case 9 open_sequence_task(seq) task_pause(null, 500) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_into_pos break endswitch break case get_into_pos switch i case 0 case 1 case 2 case 3 case 4 case 5 // @SBA - no longer special casing this one, see below case 6 case 7 case 8 if not IS_ENTITY_AT_COORD(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(wave_0_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, true) clear_ped_tasks(wave_0_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0)//3.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) // @SBA - enemies will try to rush inside periodically, so setting this as the next stage wave_0_status[i] = run_to_front_of_building endif break // @SBA - special case for this enemy so he runs right inside // Mothballing... // CASE 5 // // if not IS_ENTITY_AT_COORD(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, <<1.5, 1.5, 1.6>>, false, true) // //PRINTLN("*** ENEMY 5 - Not at coord ***") // // if has_ped_task_finished_2(wave_0_enemy[i].ped, script_task_perform_sequence) // //PRINTLN("*** ENEMY 5 - Resetting task ***") // // set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, true) // clear_ped_tasks(wave_0_enemy[i].ped) // // open_sequence_task(seq) // // @SBA - tasking this guy to just run (he comes inside first) // //TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) // TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, wave_0_enemy[i].run_to_pos, pedmove_run, -1) // close_sequence_task(seq) // task_perform_sequence(wave_0_enemy[i].ped, seq) // clear_sequence_task(seq) // endif // // else // //PRINTLN("*** ENEMY 5 - Going to run_into_shop ***") // // set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) // // @SBA - set defensive area just outside the door to move the enemy there // //set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0)//3.0 // SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_enemy[i].ped, tbFrontDoorVolume.vMin, tbFrontDoorVolume.vMax, tbFrontDoorVolume.flWidth, TRUE) // task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) // // set this flag // wave_0_enemy[i].bRushInside = TRUE // // // @SBA - setting this as the next stage so he'll go upstairs // wave_0_status[i] = run_into_shop // // endif BREAK case 9 // @SBA - not used? if not IS_ENTITY_AT_COORD(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(wave_0_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, true) clear_ped_tasks(wave_0_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, wave_0_enemy[i].run_to_pos, player_ped_id(), pedmove_run, true, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 8.0)//3.0 task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = attack_from_pos_2 endif break endswitch // @SBA - set intial wait time before the first enemy rushes (if not set yet) IF iWaitTimeBeforeRush = 0 CANCEL_TIMER(tmrNextRusherDelay) iWaitTimeBeforeRush = 15000 // @SBA - start rush timer iWave_Rush_Time = GET_GAME_TIMER() ENDIF break case attack_from_pos_2 switch i case 9 // if is_ped_injured(wave_0_enemy[1].ped) // // wave_0_enemy[9].run_to_pos = wave_0_enemy[1].run_to_pos // // set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) // set_ped_sphere_defensive_area(wave_0_enemy[i].ped, wave_0_enemy[i].run_to_pos, 3.0) // task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) // wave_0_status[i] = do_nothing // // endif break endswitch break // @SBA - adding this case for the rush inside // adding this intermediate waypoint so the enemies go through the front door // (otherwise they open the gate to go up the back stairs) CASE run_to_front_of_building // @SBA - if the gate has been rammed, switch to the appropriate case IF ram_cutscene_finished wave_0_status[i] = run_to_other_side_of_building CANCEL_TIMER(tmrNextRusherDelay) RETURN FALSE // @SBA - otherwise, when the wait timer is ready, check if it's ok to send a rusher ELIF lk_timer(iWave_Rush_Time, iWaitTimeBeforeRush) IF ARE_WE_READY_FOR_A_NEW_RUSHER(wave_0_enemy, 0) // @SBA - don't want rushers unless Chef is abandoned START_TIMER_NOW(tmrNextRusherDelay) // delay checking for the need for a new rusher until after one has been deployed iWaitTimeBeforeRush = 10500 iWave_Rush_Time = GET_GAME_TIMER() ELSE // @SBA - Not ready for a new rusher (max number still in play). //CPRINTLN(DEBUG_MISSION,"*** Don't need a new rusher yet. Reset the timer to try again later.") iWaitTimeBeforeRush = GET_RANDOM_INT_IN_RANGE(2000, 3999) iWave_Rush_Time = GET_GAME_TIMER() ENDIF ENDIF // Delay the rusher so there's a breather after last one was killed IF TIMER_DO_WHEN_READY(tmrNextRusherDelay, 10.000) OR HAS_PLAYER_ABANDONED_CHEF_WAVE_0() // still need rusher? IF ARE_WE_READY_FOR_A_NEW_RUSHER(wave_0_enemy, 1) // send a chosen enemy to the front doors iWave_0_Index = GET_NEXT_WAVE_0_INDEX() IF iWave_0_Index != -1 CPRINTLN(DEBUG_MISSION,"Sending in a new rusher (wave 0)") // @SBA - set defensive area just outside the door to move the enemy there SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_enemy[iWave_0_Index].ped, tbFrontDoorVolume.vMin, tbFrontDoorVolume.vMax, tbFrontDoorVolume.flWidth, TRUE) // @SBA - set a new, random wait time and restart rush timer // Note: Don't set time to 18000ms as it's checking against that for wave 2 iWaitTimeBeforeRush = GET_RANDOM_INT_IN_RANGE(2000, 3999) iWave_Rush_Time = GET_GAME_TIMER() SET_ENEMY_RUSHER_ATTRIBUTES(wave_0_enemy[iWave_0_Index].ped, 1, 0, 50) CANCEL_TIMER(tmrNextRusherDelay) wave_0_status[iWave_0_Index] = run_into_shop ENDIF ENDIF ENDIF BREAK // @SBA - adding this case for the rush inside // This sends the enemies upstairs to fight CASE run_into_shop // @SBA - if the gate has been rammed, switch to the appropriate case IF ram_cutscene_finished wave_0_status[i] = run_to_other_side_of_building // @SBA - otherwise have them continue upstairs ELIF IS_ENTITY_IN_TRIGGER_BOX(wave_0_enemy[i].ped, tbFrontDoorVolume) // @SBA - set defensive area upstairs to move the enemy there SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_enemy[i].ped, tbUpstairsRushVolume.vMin, tbUpstairsRushVolume.vMax, tbUpstairsRushVolume.flWidth) // @SBA - Reset this so buddy can shoot these guys SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(wave_0_enemy[i].ped, FALSE) wave_0_status[i] = combat_player ENDIF BREAK // @SBA - adding this case for the rush inside CASE combat_player // @SBA - if enemy has already reached position, let him fight there IF IS_ENTITY_IN_TRIGGER_BOX(wave_0_enemy[i].ped, tbUpstairsRushVolume) SET_PED_ENABLE_WEAPON_BLOCKING(wave_0_enemy[i].ped, TRUE) SET_PED_COMBAT_ATTRIBUTES(wave_0_enemy[i].ped, CA_ENABLE_TACTICAL_POINTS_WHEN_DEFENSIVE, TRUE) REGISTER_TARGET(wave_0_enemy[i].ped, buddy.ped) PLAY_PED_AMBIENT_SPEECH_NATIVE(wave_0_enemy[i].ped, "GENERIC_WAR_CRY", "SPEECH_PARAMS_FORCE") // Make them go into the other room if it's free IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_0_enemy, tbUpstairsCloserRushVolume) IF IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1390.91, 3608.21, 38.91>>), "v_39_UpperRm3") SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_enemy[i].ped, tbUpstairsCloserRushVolume.vMin, tbUpstairsCloserRushVolume.vMax, tbUpstairsCloserRushVolume.flWidth) ENDIF ENDIF wave_0_status[i] = do_nothing // otherwise, have him take up a position at the top of the back stairs ELIF ram_cutscene_finished wave_0_status[i] = charge_back_stairs ENDIF BREAK case run_to_other_side_of_building if ram_cutscene_finished set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, true) clear_ped_tasks(wave_0_enemy[i].ped) // @SBA - Reset this flag so buddy can shoot these guys, and kill any previous defensive area SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(wave_0_enemy[i].ped, FALSE) REMOVE_PED_DEFENSIVE_AREA(wave_0_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1395.6790, 3629.6826, 33.9204>>, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) wave_0_status[i] = get_to_other_side_of_building endif break case get_to_other_side_of_building if not IS_ENTITY_AT_COORD(wave_0_enemy[i].ped, <<1395.6790, 3629.6826, 33.9204>>, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(wave_0_enemy[i].ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, true) clear_ped_tasks(wave_0_enemy[i].ped) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1395.6790, 3629.6826, 33.9204>>, player_ped_id(), pedmove_run, false, 0.5, 0.8) close_sequence_task(seq) task_perform_sequence(wave_0_enemy[i].ped, seq) clear_sequence_task(seq) endif else set_blocking_of_non_temporary_events(wave_0_enemy[i].ped, false) set_ped_sphere_defensive_area(wave_0_enemy[i].ped, <<1395.6790, 3629.6826, 33.9204>>, 8.0) //@SBA - setting a bigger area to accomodate more enemies (previous 1.5) task_combat_ped(wave_0_enemy[i].ped, player_ped_id()) wave_0_status[i] = charge_back_stairs endif break // @SBA - Added this case to have any survivors charge the stairs if the truck guys are dead CASE charge_back_stairs IF ped_structure_are_all_enemies_dead(wave_0_inside_enemy, FALSE) OR wave_0_enemy[i].bRushInside // @SBA - Make sure rush flag is set wave_0_enemy[i].bRushInside = TRUE SET_PED_ANGLED_DEFENSIVE_AREA(wave_0_enemy[i].ped, tbTopBackStairsVolume.vMin, tbTopBackStairsVolume.vMax, tbTopBackStairsVolume.flWidth, TRUE) // @SBA - ensure buddy AI can kill them SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(wave_0_enemy[i].ped, FALSE) wave_0_status[i] = do_nothing ENDIF BREAK case do_nothing break endswitch endif endfor wave_0_inside_enemy_0_system() wave_0_inside_enemy_1_system() wave_0_inside_enemy_2_system() wave_0_inside_enemy_3_system() else return true endif return false endfunc proc wave_0_assisted_nodes_system() switch wave_0_assisted_nodes_system_status case 0 break case 1 ASSISTED_MOVEMENT_REQUEST_ROUTE("Wave0") wave_0_assisted_nodes_system_status++ break case 2 //if not is_ped_inside_interior(player_ped_id(), <<1391.6487, 3608.3596, 37.9418>>) if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1383.533, 3615.497, 37.931>>, <<1394.681, 3619.662, 40.931>>, 4.400) ASSISTED_MOVEMENT_remove_ROUTE("Wave0") wave_0_assisted_nodes_system_status++ endif break case 3 break endswitch endproc func bool wave_0_explode_vehicle_system() // if not is_vehicle_exploded // // for i = 0 to count_of(wave_0_enemy_vehicle) - 1 // // if is_vehicle_driveable(wave_0_enemy_vehicle[i].veh) // if not is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[i].veh) // if get_vehicle_petrol_tank_health(wave_0_enemy_vehicle[i].veh) < 300 // or get_vehicle_engine_health(wave_0_enemy_vehicle[i].veh) < 300 // or get_entity_health(wave_0_enemy_vehicle[i].veh) < 300 // // explode_vehicle(wave_0_enemy_vehicle[i].veh) // // is_vehicle_exploded = true // // return true // // endif // endif // endif // endfor // // endif if does_entity_exist(parked_cars[3]) if is_vehicle_driveable(parked_cars[3]) if get_entity_health(parked_cars[3]) < 700 or get_vehicle_engine_health(parked_cars[3]) < 700.00 or get_vehicle_petrol_tank_health(parked_cars[3]) < 700.00 explode_vehicle(parked_cars[3]) set_vehicle_as_no_longer_needed(parked_cars[3]) endif endif endif return false endfunc proc wave_0_vehicle_destruction_system() vector bullet_front_left_offset = <<-0.78, 1.32, -0.4>> vector bullet_front_right_offset = <<0.78, 1.32, -0.4>> vector bullet_back_right_offset = <<0.78, -1.64, -0.4>> vector bullet_back_left_offset = <<-0.78, -1.64, -0.4>> float bullet_radius_check = 1.55 vector deformation_front_left_offset = <<0.900, 1.340, 0.15>> vector deformation_front_right_offset = <<-0.900, 1.30, 0.15>> vector deformation_back_left_offset = <<-0.900, -1.3, 0.15>> vector deformation_back_right_offset = <<0.9, -1.3, 0.15>> float damage = 200.00 //140.00 float deformation = 200.00 //140.00 if is_player_control_on(player_id()) for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if not is_entity_dead(wave_0_enemy_vehicle[i].veh) //POSSIBLY MAKE A FUNCTION OUT OF THIS AND PASS IN 8 PARAMETERS if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_0_enemy_vehicle[i].veh, bullet_front_left_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_0_enemy_vehicle[i].veh, sc_wheel_car_front_left) SET_VEHICLE_TYRE_BURST(wave_0_enemy_vehicle[i].veh, sc_wheel_car_front_left) SET_VEHICLE_DAMAGE(wave_0_enemy_vehicle[i].veh, deformation_front_left_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_0_enemy_vehicle[i].veh, sc_window_front_left) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_0_enemy_vehicle[i].veh, bullet_front_right_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_0_enemy_vehicle[i].veh, sc_wheel_car_front_right) SET_VEHICLE_TYRE_BURST(wave_0_enemy_vehicle[i].veh, sc_wheel_car_front_right) SET_VEHICLE_DAMAGE(wave_0_enemy_vehicle[i].veh, deformation_front_right_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_0_enemy_vehicle[i].veh, sc_window_front_right) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_0_enemy_vehicle[i].veh, bullet_back_left_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_0_enemy_vehicle[i].veh, sc_wheel_car_rear_left) SET_VEHICLE_TYRE_BURST(wave_0_enemy_vehicle[i].veh, sc_wheel_car_rear_left) SET_VEHICLE_DAMAGE(wave_0_enemy_vehicle[i].veh, deformation_back_left_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_0_enemy_vehicle[i].veh, sc_window_rear_left) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_0_enemy_vehicle[i].veh, bullet_back_right_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_0_enemy_vehicle[i].veh, sc_wheel_car_rear_right) SET_VEHICLE_TYRE_BURST(wave_0_enemy_vehicle[i].veh, sc_wheel_car_rear_right) SET_VEHICLE_DAMAGE(wave_0_enemy_vehicle[i].veh, deformation_back_right_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_0_enemy_vehicle[i].veh, sc_window_rear_right) endif endif endif endfor endif endproc proc wave_0_leaking_petrol_system() if does_entity_exist(wave_0_enemy_vehicle[1].veh) if is_vehicle_driveable(wave_0_enemy_vehicle[1].veh) if is_playback_going_on_for_vehicle(wave_0_enemy_vehicle[1].veh) if (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(wave_0_enemy_vehicle[1].recording_number, "lkmethlab") - 3000) < (get_time_position_in_recording(wave_0_enemy_vehicle[1].veh)) if GET_VEHICLE_PETROL_TANK_HEALTH(wave_0_enemy_vehicle[1].veh) > 150//150 SET_VEHICLE_CAN_LEAK_PETROL(wave_0_enemy_vehicle[1].veh, TRUE) SET_VEHICLE_PETROL_TANK_HEALTH(wave_0_enemy_vehicle[1].veh, 150) iSuvDamageCount = 0 CPRINTLN(DEBUG_MISSION,"wave_0_leaking_petrol_system: Setting Blue SUV tank health.") endif endif // @SBA - gas trail not working properly, so hacking in something to get this vehicle ignited ELSE IF NOT IS_ENTITY_ON_FIRE(wave_0_enemy_vehicle[1].veh) FLOAT fEngineHealth = GET_VEHICLE_ENGINE_HEALTH(wave_0_enemy_vehicle[1].veh) // @SBA light it up if it's taken enough damage IF fEngineHealth < 850.0 OR iSuvDamageCount >= 5 // Some hits register no damage to the engine, so this gets around that OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(wave_0_enemy_vehicle[1].veh, buddy.ped) // start fire SET_VEHICLE_PETROL_TANK_HEALTH(wave_0_enemy_vehicle[1].veh, -1.0) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(wave_0_enemy_vehicle[1].veh) iSuvDamageCount = 0 CPRINTLN(DEBUG_MISSION,"wave_0_leaking_petrol_system: Setting Blue SUV on fire.") ENDIF // Check if anyone has damaged SUV, increase count IF HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(wave_0_enemy_vehicle[1].veh) CPRINTLN(DEBUG_MISSION,"wave_0_enemy_vehicle[1] health = ", fEngineHealth) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(wave_0_enemy_vehicle[1].veh) iSuvDamageCount ++ ENDIF ENDIF endif endif endif endproc proc wave_0_fence_destruction() if not fence_shot if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) if is_ped_in_angled_area_lk(wave_0_inside_enemy[0].ped, <<1368.573, 3616.663, 33.898>>, <<1382.762, 3621.828, 36.898>>, 12.700) or is_ped_in_angled_area_lk(wave_0_inside_enemy[1].ped, <<1368.573, 3616.663, 33.898>>, <<1382.762, 3621.828, 36.898>>, 12.700) or is_ped_in_angled_area_lk(wave_0_inside_enemy[2].ped, <<1368.573, 3616.663, 33.898>>, <<1382.762, 3621.828, 36.898>>, 12.700) or is_ped_in_angled_area_lk(wave_0_inside_enemy[3].ped, <<1368.573, 3616.663, 33.898>>, <<1382.762, 3621.828, 36.898>>, 12.700) shoot_single_bullet_between_coords(<<1374.2, 3616.7, 36.2>>, <<1381.3, 3621.5, 38.3>>, 100, true, WEAPONTYPE_ASSAULTRIFLE) shoot_single_bullet_between_coords(<<1374.2, 3616.7, 36.2>>, <<1381.5, 3620.9, 38.2>>, 100, true, WEAPONTYPE_ASSAULTRIFLE) shoot_single_bullet_between_coords(<<1374.2, 3616.7, 36.2>>, <<1381.7, 3620.0, 38.3>>, 100, true, WEAPONTYPE_ASSAULTRIFLE) shoot_single_bullet_between_coords(<<1374.2, 3616.7, 36.2>>, <<1382.1, 3619.3, 38.3>>, 100, true, WEAPONTYPE_ASSAULTRIFLE) shoot_single_bullet_between_coords(<<1374.2, 3616.7, 36.2>>, <<1382.2, 3618.5, 38.3>>, 100, true, WEAPONTYPE_ASSAULTRIFLE) fence_shot = true endif endif endif endproc proc wave_0_audio_scene_system() switch wave_0_audio_scene_system_status case 0 IF wave_0_master_flow_system_status > 0 IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[0].veh) IF IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[0].veh) ADD_ENTITY_TO_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[0].veh, "CHI_1_FIRST_TRUCKS_ARRIVE_GROUP") ENDIF ENDIF IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[1].veh) IF IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[1].veh) ADD_ENTITY_TO_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[1].veh, "CHI_1_FIRST_TRUCKS_ARRIVE_GROUP") ENDIF ENDIF wave_0_audio_scene_system_status++ ENDIF break case 1 if wave_0_master_flow_system_status > 3 vector player_pos player_pos = GET_ENTITY_COORDS(player_ped_id()) if lk_timer(original_time, 25000) or player_pos.z < 37.00 or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1390.113, 3615.582, 37.931>>, <<1386.932, 3624.107, 41.431>>, 12.200) or (is_entity_in_angled_area(player_ped_id(), <<1390.858, 3599.007, 37.980>>, <<1389.319, 3603.235, 40.680>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or (is_entity_in_angled_area(player_ped_id(), <<1388.832, 3604.578, 37.747>>, <<1387.122, 3609.276, 40.847>>, 2.3) and is_sphere_visible(<<1373.8, 3615.3, 35.4>>, 1.0)) or is_entity_in_angled_area(player_ped_id(), <<1400.469, 3607.616, 38.006>>, <<1399.769, 3609.490, 40.506>>, 1.2) start_audio_scene("CHI_1_SHOOTOUT_02") IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[0].veh) IF IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[0].veh) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[0].veh) ELSE REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[0].veh) ENDIF ENDIF IF DOES_ENTITY_EXIST(wave_0_enemy_vehicle[1].veh) IF IS_VEHICLE_DRIVEABLE(wave_0_enemy_vehicle[1].veh) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[1].veh) ELSE REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(wave_0_enemy_vehicle[1].veh) ENDIF ENDIF wave_0_audio_scene_system_status++ endif endif break case 2 break endswitch endproc func bool chinese_wave_0_system() // @SBA - B*1195400 - rarely, a ped falls through the world and cannot be killed in game play // this kills him if he is below ground KILL_ANY_ERRANT_ENEMY(wave_0_enemy) KILL_ANY_ERRANT_ENEMY(wave_0_inside_enemy) // @SBA - handle dead vehicle blips REMOVE_DEAD_VEHICLE_BLIPS(wave_0_enemy_vehicle) if wave_0_master_flow_system() mission_flow = wave_2_system return true endif wave_0_dialogue_system() wave_0_buddy_ai_system() wave_0_explode_vehicle_system() wave_0_leaking_petrol_system() // wave_0_vehicle_destruction_system() //wave_0_assisted_nodes_system() wave_0_ai_system() wave_0_fence_destruction() wave_0_audio_scene_system() if is_ped_inside_interior(player_ped_id(), <<1392.7360, 3602.5989, 38.5>>, "v_methlab") SET_RADAR_AS_EXTERIOR_THIS_FRAME() endif //set_radar_zoom() //DEBUG - comment back in when doing uber recording //uber_vehicle_system() return false endfunc proc setup_final_wave_of_wave_2() for i = 5 to 5 //6 7 SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, wave_2_enemy_vehicle[i].recording_number, "lkmethlab") if i = 5 skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, 3000) endif //DISPLAY_PLAYBACK_RECORDED_VEHICLE(wave_2_enemy_vehicle[i].veh, rdm_wholeline) endfor setup_enemy_in_vehicle(wave_2_enemy[12], wave_2_enemy_vehicle[5].veh) set_ped_flee_attributes(wave_2_enemy[12].ped, fa_use_vehicle, true) setup_enemy_in_vehicle(wave_2_enemy[13], wave_2_enemy_vehicle[5].veh, vs_front_right) wave_2_enemy[14].created = true wave_2_enemy[15].created = true wave_2_enemy[16].created = true wave_2_enemy[17].created = true //create_conversation(scripted_speech[0], "methaud", "CHIN1_CAR", conv_priority_medium) //KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() KILL_FACE_TO_FACE_CONVERSATION() ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(scripted_speech[0], "methaud", "CHIN1_CAR", CONV_PRIORITY_MEDIUM) set_entity_proofs(player_ped_id(), false, false, false, false, false) //reset's the god text SET_LABEL_AS_TRIGGERED("METH_GOD_18", false) // piggy back in here SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_SHOOTING ) endproc ///PURPOSE: Proofs the player for 1.5 seconds after the grenade launcher cutscene incase they get shot whilst going into cover proc proofing_system_after_grenade_launcher_cutscene() if not stop_player_proofing if player_grenade_launcher_cutscene_status = 99 if lk_timer(proofing_time, 1500) set_entity_proofs(player_ped_id(), false, false, false, false, false) stop_player_proofing = true else set_entity_proofs(player_ped_id(), true, true, true, true, true) endif endif endif endproc func bool wave_2_master_flow_system() // printint(wave_2_master_flow_system_status) // printnl() // @SBA - if player picks up grenade launcher himself, set correct ammo ammount SET_AMMO_FOR_PICKED_UP_GRENADE_LAUNCHER() switch wave_2_master_flow_system_status case 0 CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) //truck arriving at the back SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[2]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[2].veh, wave_2_enemy_vehicle[2].recording_number, "lkmethlab") setup_enemy_in_vehicle(wave_2_enemy[0], wave_2_enemy_vehicle[2].veh) setup_enemy_in_vehicle(wave_2_enemy[1], wave_2_enemy_vehicle[2].veh, vs_front_right) setup_enemy_in_vehicle(wave_2_enemy[2], wave_2_enemy_vehicle[2].veh, vs_back_left) setup_enemy_in_vehicle(wave_2_enemy[3], wave_2_enemy_vehicle[2].veh, vs_back_right) // @SBA - make grenade launcher pickup SETUP_GRENADE_LAUNCHER_PICKUP() RESET_CHEF_WARNINGS_FOR_NEXT_WAVE() // piggy back in here SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_SHOOTING ) wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) break // Splitting up the enemy creation somewhat CASE 1 SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[3]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[3].veh, wave_2_enemy_vehicle[3].recording_number, "lkmethlab") setup_enemy_in_vehicle(wave_2_enemy[4], wave_2_enemy_vehicle[3].veh) wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) BREAK CASE 2 SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[4]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[4].veh, wave_2_enemy_vehicle[4].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[4].veh, 4500) setup_enemy_in_vehicle(wave_2_enemy[5], wave_2_enemy_vehicle[4].veh) wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) BREAK case 3 if is_player_infront_of_door() //or lk_timer(original_time, 15000) // @SBA - canceling this here - it was causing the script to hang on a z-menu restart from earlier checkpoints // if the event had never triggered CANCEL_MUSIC_EVENT("CHN1_G_LAUNCHER") trigger_music_event("CHN1_BACK_ROOF") SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[6]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[6].veh, wave_2_enemy_vehicle[6].recording_number, "lkmethlab") setup_enemy_in_vehicle(wave_2_enemy[18], wave_2_enemy_vehicle[6].veh) setup_enemy_in_vehicle(wave_2_enemy[19], wave_2_enemy_vehicle[6].veh, vs_front_right) kill_face_to_face_conversation() wave_2_dialogue_system_status = 3 bBackStairsDoorClosed = FALSE wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) ELIF NOT bChefComeOn IF buddy_on_rooftop() wave_2_dialogue_system_status = 2 ENDIF endif break case 4 // Shutting door to improve frame rate IF NOT bBackStairsDoorClosed BOOL bShutDoor IF buddy_on_rooftop() IF IS_PLAYER_IN_TRIGGER_BOX(tbBackRoofVolume) bShutDoor = TRUE ELIF NOT IS_SPHERE_VISIBLE(vDoorToBackStairs, 1.0) bShutDoor = TRUE ENDIF IF bShutDoor SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) bBackStairsDoorClosed = TRUE ENDIF ENDIF ENDIF if (ped_structure_get_total_number_of_enemies_dead(wave_2_enemy) >= 4) //5 //CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: Enough enemies are dead!") IF prepare_music_event("CHN1_G_LAUNCHER") //CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: music prepared!") // @SBA - if the player has already gotten the grenade launcher, don't bother with the cutscene IF NOT bSkipGrenLaunchCutscene // @SBA - also ensure no living enemey is on the roof or back room (may need a wider check than this?) IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackRoofVolume) IF NOT IS_ANY_PED_IN_TRIGGER_BOX(wave_2_enemy, tbBackUpstairsRoomVolume) AND NOT IS_ANY_PED_IN_SPECIFIC_ROOM(wave_2_enemy, (<<1392.2, 3614.1, 39.0>>), "v_39_UpperRm1") CPRINTLN(DEBUG_MISSION,"*** GOING TO GRENADE LAUNCHER CUTSCENE ***") // @SBA - we don't want the player to pick up the launcher while waiting for the cutscene to play //SET_PLAYER_PERMITTED_TO_COLLECT_PICKUPS_OF_TYPE(PLAYER_ID(), PICKUP_WEAPON_GRENADELAUNCHER, FALSE) cutscene_trigger_time = get_game_timer() set_label_as_triggered("chin_roof_0", FALSE) wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) ENDIF ENDIF // @SBA - skipping cutscene ELSE CPRINTLN(DEBUG_MISSION,"*** SKIPPING THE GRENADE LAUNCHER CUTSCENE ***") wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) ENDIF endif ENDIF break case 5 // @SBA - are we to play the cutscene? IF NOT bSkipGrenLaunchCutscene if player_grenade_launcher_cutscene_system() //ram cutscene is done ingame. We can not see the vehicles warping if they need to be reset. Adding this here as it is a safe place after the camera cut. reset_wave_0_vehicles_for_ram_gates_cutscene(true) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "Wave 2 after grenade launcher cutscene") wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: FROM CUTSCENE, GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) else //create peds when player is not near the cook to get the grenade launcher if not grenade_launcher_cutscene_playing if lk_timer(cutscene_trigger_time, 2000) create_second_wave_of_wave_2_enemies() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "Wave 2 after grenade launcher cutscene") wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: FROM WAITING FOR CUTSCENE, GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) endif endif endif // @SBA - if cutscene skipped, just do this stuff and advance ELSE // if lk_timer(cutscene_trigger_time, 2000) create_second_wave_of_wave_2_enemies() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "Wave 2 after grenade launcher cutscene") wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: FROM SKIPPED CUTSCENE, GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) // endif ENDIF break case 6 // fade in if needed (replay) IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF // @SBA - are we playing the cutscene? IF NOT bSkipGrenLaunchCutscene player_grenade_launcher_cutscene_system() proofing_system_after_grenade_launcher_cutscene() ENDIF // handler for next vehicle full o' bad guys create_third_wave_of_wave_2_enemies() //if enemy 6, 7, 8, 9 are dead elif not vehicle driveable 0 1 or car recording not going on if is_vehicle_driveable(wave_2_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(wave_2_enemy_vehicle[0].veh) setup_final_wave_of_wave_2() wave_2_master_flow_system_status++ endif else setup_final_wave_of_wave_2() wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) endif break case 7 // @SBA - are we playing the cutscene? IF NOT bSkipGrenLaunchCutscene player_grenade_launcher_cutscene_system() proofing_system_after_grenade_launcher_cutscene() ENDIF if not grenade_launcher_cutscene_playing if ped_structure_are_all_enemies_dead(wave_2_enemy) //@SBA should we set to TRUE to keep dead bodies? //if get_distance_between_coords(get_entity_coords(player_ped_id()), get_entity_coords(buddy.ped)) < 30.00 //request ortega model if ortega has not been killed in trevor 1 if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) request_model(get_npc_ped_model(char_ortega)) endif clear_prints() // Clean up last arriving vehicle blip, if needed REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[5]) //create_conversation(scripted_speech[0], "methaud", "CHIN1_GO", conv_priority_medium) KILL_FACE_TO_FACE_CONVERSATION() ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(scripted_speech[0], "methaud", "CHIN1_GO", CONV_PRIORITY_MEDIUM) original_time = get_game_timer() wave_2_master_flow_system_status++ CPRINTLN(DEBUG_MISSION,"wave_2_master_flow_system: GOING TO wave_2_master_flow_system_status = ", wave_2_master_flow_system_status) // else // // if not has_label_been_triggered("METH_GOD_18") // print_now("METH_GOD_18", default_god_text_time, 1) // SET_LABEL_AS_TRIGGERED("METH_GOD_18", true) // endif //endif endif endif break case 8 if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) request_model(get_npc_ped_model(char_ortega)) endif if lk_timer(original_time, 500) // if (not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) and has_model_loaded(get_npc_ped_model(char_ortega))) // or GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) // script_assert("test") // return true // endif if (not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) and has_model_loaded(get_npc_ped_model(char_ortega))) or GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) if is_audio_scene_active("CHI_1_SHOOTOUT_03") stop_audio_scene("CHI_1_SHOOTOUT_03") endif if is_audio_scene_active("CHI_1_SHOOTOUT_GRENADE_LAUNCHER") stop_audio_scene("CHI_1_SHOOTOUT_GRENADE_LAUNCHER") endif start_audio_scene("CHI_1_GET_TO_SHOOTOUT_04") trigger_music_event("CHN1_FIRST_FLOOR") return true endif endif //EQUIP_BEST_PLAYER_WEAPON() break case 22 break endswitch return false endfunc //@SBA - plays a line from an enemy (if one's alive) when a grenade goes off PROC HANDLE_ENEMY_GREN_LAUNCH_DIALOGUE() SWITCH iEnemyGrenLaunchDialogue CASE 0 // check for grenade explosion IF is_grenade_launcher_explosion_in_car_park() // start a timer so dialogue doesn't happen during the explosion START_TIMER_NOW(tmrGrenLaunchTimer) iEnemyGrenLaunchDialogue ++ CPRINTLN(DEBUG_MISSION,"HANDLE_ENEMY_GREN_LAUNCH_DIALOGUE: Boom! Going to: ", iEnemyGrenLaunchDialogue) ENDIF BREAK CASE 1 // When timer is up, try to find a living ped to say the dialogue IF TIMER_DO_ONCE_WHEN_READY(tmrGrenLaunchTimer, kfGrenLaunchWaitTime) // Check backyard for a living enemy piEnemyToSpeak = GET_FIRST_LIVING_PED_IN_TRIGGER_BOX(wave_2_enemy,tbBackYardVolume) // another bite at the apple to find a living enenmy IF piEnemyToSpeak = NULL piEnemyToSpeak = GET_FIRST_LIVING_PED_IN_TRIGGER_BOX(wave_2_enemy,tbBackGateVolume) ENDIF // Remove old data and assign a speaker, if there is one available IF piEnemyToSpeak != NULL ADD_PED_FOR_DIALOGUE(scripted_speech[0], 8, piEnemyToSpeak, "VAGOS") ENDIF // Canceling timer for some additional safety CANCEL_TIMER(tmrGrenLaunchTimer) iEnemyGrenLaunchDialogue ++ CPRINTLN(DEBUG_MISSION,"HANDLE_ENEMY_GREN_LAUNCH_DIALOGUE: Going to: ", iEnemyGrenLaunchDialogue) ENDIF BREAK CASE 2 // Play conversation if we have a valid ped and if nothing else is displayed IF piEnemyToSpeak != NULL IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_GREN", CONV_PRIORITY_HIGH) iEnemyGrenLaunchDialogue ++ CPRINTLN(DEBUG_MISSION,"HANDLE_ENEMY_GREN_LAUNCH_DIALOGUE: Going to: ", iEnemyGrenLaunchDialogue) ENDIF ENDIF ENDIF BREAK CASE 3 // nothing BREAK ENDSWITCH ENDPROC proc wave_2_dialogue_system() // @SBA - in case enemies get inside HANDLE_CHEF_INFILTRATION_WARNINGS_WAVE_2() // @SBA - enemy line after first explosion HANDLE_ENEMY_GREN_LAUNCH_DIALOGUE() switch wave_2_dialogue_system_status case 0 prepare_music_event("CHN1_HEAD_TO_BACK") IF NOT bPlayGunFire PLAY_SOUND_FROM_COORD(-1, "CR_WEAPONS_BURST_SHORT", (<<1586.9836, 3695.9495, 33.9163>>)) CPRINTLN(DEBUG_MISSION, "Should be playing gunfire sound") bPlayGunFire = TRUE elif create_conversation(scripted_speech[0], "methaud", "chang_info0", conv_priority_medium) REPLAY_RECORD_BACK_FOR_TIME(5.0, 6.0) trigger_music_event("CHN1_HEAD_TO_BACK") wave_2_dialogue_system_status++ endif break case 1 if not is_scripted_conversation_ongoing() // @SBA - give player instruction instead // if create_conversation(scripted_speech[0], "methaud", "chin_follow0", conv_priority_medium) PRINT_NOW("METH_GOD_3", DEFAULT_GOD_TEXT_TIME, 1) // Follow Chef wave_2_dialogue_system_status = 22 // endif endif break CASE 2 IF IS_PLAYER_IN_TRIGGER_BOX(tbBackFullRoofVolume) wave_2_dialogue_system_status = 22 bChefComeOn = TRUE EXIT ENDIF if not is_any_text_being_displayed(locates_data) IF create_conversation(scripted_speech[0], "methaud", "chin_comeon", conv_priority_medium) wave_2_dialogue_system_status = 22 bChefComeOn = TRUE ENDIF ENDIF BREAK case 3 if create_conversation(scripted_speech[0], "methaud", "buddy_cover", conv_priority_medium) wave_2_dialogue_system_status++ endif break case 4 if not is_scripted_conversation_ongoing() wave_2_dialogue_system_status++ endif break case 5 break endswitch if lk_timer(dialogue_time, 13000) if is_ped_shooting(player_ped_id()) if not is_any_text_being_displayed(locates_data) if is_enemy_near_player(wave_2_enemy, 50.00) if create_conversation(scripted_speech[0], "methaud", "attack_0", conv_priority_low) dialogue_time = get_game_timer() endif endif endif endif endif endproc proc wave_2_buddy_ai_system() if allow_buddy_ai_system // @SBA - handle Chef adandonment during wave 2 fight IF NOT wave_2_complete IF buddy_on_rooftop() HANDLE_WAVE_2_CHEF_DEMISE() HANDLE_ABANDONMENT_MESSAGE(HAS_PLAYER_ABANDONED_CHEF_WAVE_2()) ENDIF HANDLE_CHEF_DAMAGED_DIALOGUE() ENDIF switch wave_2_buddy_ai_system_status case 0 // @SBA - make sure Chef's health is set to max for this wave SET_HEALTH_FOR_PED(buddy.ped, buddy.health) SET_PED_PATH_CAN_USE_CLIMBOVERS(buddy.ped, true) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) set_ped_accuracy(buddy.ped, 40) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) if is_ped_in_specific_room(buddy.ped, <<1390.91, 3608.21, 38.91>>, "V_39_UpperRm3") buddy_waypoint_target_node = 16 buddy_waypoint_string = "methlab1" open_sequence_task(seq) TASK_FOLLOW_WAYPOINT_RECORDING(null, buddy_waypoint_string, 2, EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) // EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) else buddy_waypoint_target_node = 19//23 buddy_waypoint_string = "methlab5" open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1387.2665, 3615.9451, 37.9259>>, PEDMOVE_WALK, -1, default_navmesh_radius, enav_no_stopping) TASK_FOLLOW_WAYPOINT_RECORDING(null, buddy_waypoint_string, 2, EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) // EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif buddy_time = get_game_timer() wave_2_buddy_ai_system_status++ break case 1 SET_PED_RESET_FLAG(buddy.ped, PRF_UseKinematicPhysics, TRUE) if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(buddy.ped, 2.0) endif if waypoint_recording_get_coord(buddy_waypoint_string, buddy_waypoint_target_node, target_waypoint_pos) if not IS_ENTITY_AT_COORD(buddy.ped, target_waypoint_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if waypoint_recording_get_closest_waypoint(buddy_waypoint_string, GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) waypoint_node_pos += 1 if waypoint_node_pos > buddy_waypoint_target_node waypoint_node_pos = buddy_waypoint_target_node endif set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_waypoint_recording(null, buddy_waypoint_string, waypoint_node_pos, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif // failsafe in case Chef get stuck somewhere ELIF lk_timer(buddy_time, 15000) OR IS_PLAYER_IN_TRIGGER_BOX(tbBackRoofVolume) IF NOT buddy_on_rooftop() wave_2_buddy_ai_system_status = 3 ENDIF endif else use_main_cover_point = true refresh_the_task = false // if not IS_PLAYER_STEALING_PEDS_DESTINATION(buddy.ped, buddy_cover_point_data[2].pos, 2.0) // // open_sequence_task(seq) // task_put_ped_directly_into_cover(null, buddy_cover_point_data[2].pos, -1) // close_sequence_task(seq) // task_perform_sequence(buddy.ped, seq) // clear_sequence_task(seq) // // else // // open_sequence_task(seq) // task_follow_nav_mesh_to_coord(null, buddy_cover_point_data[3].pos, pedmove_run, -1, 0.5) // //task_put_ped_directly_into_cover(null, <<1408.0914, 3614.9163, 37.9421>>, -1) // close_sequence_task(seq) // task_perform_sequence(buddy.ped, seq) // clear_sequence_task(seq) // // endif wave_2_buddy_ai_system_status++ endif endif break case 2 if buddy_on_rooftop() if not is_ped_in_cover(buddy.ped) buddy_time = get_game_timer() //could make function return true once in cover for 1000ms get_buddy_into_cover(buddy.ped, buddy_cover_point_data[2], buddy_cover_point_data[3], use_main_cover_point, refresh_the_task) else if lk_timer(buddy_time, 1000) set_blocking_of_non_temporary_events(buddy.ped, false) set_ped_sphere_defensive_area(buddy.ped, <<1406.70, 3615.67, 38.01>>, 2.0) //use is check for buddy_cover_point_data[2] and buddy_cover_point_data[3] //for setting sphere if not is_ped_injured(wave_2_enemy[6].ped) task_combat_ped(buddy.ped, wave_2_enemy[6].ped) elif not is_ped_injured(wave_2_enemy[7].ped) task_combat_ped(buddy.ped, wave_2_enemy[7].ped) endif wave_2_buddy_ai_system_status++ endif endif else set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1406.70, 3615.67, 38.01>>, pedmove_run, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_2_buddy_ai_system_status = 4 endif break case 3 if not buddy_on_rooftop() set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1406.70, 3615.67, 38.01>>, pedmove_run, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_2_buddy_ai_system_status = 4 endif break case 4 if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if buddy_on_rooftop() wave_2_buddy_ai_system_status = 2 else wave_2_buddy_ai_system_status = 3 endif endif break endswitch endif endproc proc wave_2_assisted_nodes_system() switch wave_2_assisted_nodes_system_status case 0 ASSISTED_MOVEMENT_REQUEST_ROUTE("Wave01457s") wave_2_assisted_nodes_system_status++ break case 1 if wave_2_master_flow_system_status > 7 ASSISTED_MOVEMENT_remove_ROUTE("Wave01457s") wave_2_assisted_nodes_system_status++ endif break case 2 break case 3 break case 22 break endswitch endproc proc wave_2_vehicle_destruction_system() // vector front_left_offset = <<-0.78, 1.4, -0.42>> // vector front_right_offset = <<0.78, 1.4, -0.42>> // vector rear_right_offset = <<0.78, -1.47, -0.42>> // vector rear_left_offset = <<-0.78, -1.47, -0.42>> // float radius_check = 1.22 vector bullet_front_left_offset = <<-0.78, 1.32, -0.4>> vector bullet_front_right_offset = <<0.78, 1.32, -0.4>> vector bullet_back_right_offset = <<0.78, -1.64, -0.4>> vector bullet_back_left_offset = <<-0.78, -1.64, -0.4>> float bullet_radius_check = 1.55 vector deformation_front_left_offset = <<0.900, 1.340, 0.15>> vector deformation_front_right_offset = <<-0.900, 1.30, 0.15>> vector deformation_back_left_offset = <<-0.900, -1.3, 0.15>> vector deformation_back_right_offset = <<0.9, -1.3, 0.15>> float damage = 140.00 float deformation = 140.00 if is_player_control_on(player_id()) for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if i <> 3 and i <> 4 if is_vehicle_driveable(wave_2_enemy_vehicle[i].veh) //POSSIBLY MAKE A FUNCTION OUT OF THIS AND PASS IN 8 PARAMETERS if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_2_enemy_vehicle[i].veh, bullet_front_left_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_2_enemy_vehicle[i].veh, sc_wheel_car_front_left) SET_VEHICLE_TYRE_BURST(wave_2_enemy_vehicle[i].veh, sc_wheel_car_front_left) SET_VEHICLE_DAMAGE(wave_2_enemy_vehicle[i].veh, deformation_front_left_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_2_enemy_vehicle[i].veh, sc_window_front_left) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_2_enemy_vehicle[i].veh, bullet_front_right_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_2_enemy_vehicle[i].veh, sc_wheel_car_front_right) SET_VEHICLE_TYRE_BURST(wave_2_enemy_vehicle[i].veh, sc_wheel_car_front_right) SET_VEHICLE_DAMAGE(wave_2_enemy_vehicle[i].veh, deformation_front_right_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_2_enemy_vehicle[i].veh, sc_window_front_right) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_2_enemy_vehicle[i].veh, bullet_back_left_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_2_enemy_vehicle[i].veh, sc_wheel_car_rear_left) SET_VEHICLE_TYRE_BURST(wave_2_enemy_vehicle[i].veh, sc_wheel_car_rear_left) SET_VEHICLE_DAMAGE(wave_2_enemy_vehicle[i].veh, deformation_back_left_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_2_enemy_vehicle[i].veh, sc_window_rear_left) endif endif if HAS_BULLET_IMPACTED_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(wave_2_enemy_vehicle[i].veh, bullet_back_right_offset), bullet_radius_check) if not is_vehicle_tyre_burst(wave_2_enemy_vehicle[i].veh, sc_wheel_car_rear_right) SET_VEHICLE_TYRE_BURST(wave_2_enemy_vehicle[i].veh, sc_wheel_car_rear_right) SET_VEHICLE_DAMAGE(wave_2_enemy_vehicle[i].veh, deformation_back_right_offset, damage, deformation, true) SMASH_VEHICLE_WINDOW(wave_2_enemy_vehicle[i].veh, sc_window_rear_right) endif endif endif endif endfor endif endproc proc wave_2_audio_scene_system() switch wave_2_audio_scene_system_status case 0 if is_player_infront_of_door() if is_audio_scene_active("CHI_1_GET_TO_SHOOTOUT_03") stop_AUDIO_SCENE("CHI_1_GET_TO_SHOOTOUT_03") endif start_audio_scene("CHI_1_SHOOTOUT_03") wave_2_audio_scene_system_status++ endif break case 1 if grenade_launcher_cutscene_playing if is_audio_scene_active("CHI_1_SHOOTOUT_03") stop_AUDIO_SCENE("CHI_1_SHOOTOUT_03") endif start_audio_scene("CHI_1_CATCH_GRENADE_LAUNCHER") wave_2_audio_scene_system_status++ endif break case 2 if not grenade_launcher_cutscene_playing if is_audio_scene_active("CHI_1_CATCH_GRENADE_LAUNCHER") stop_AUDIO_SCENE("CHI_1_CATCH_GRENADE_LAUNCHER") endif start_audio_scene("CHI_1_SHOOTOUT_GRENADE_LAUNCHER") wave_2_audio_scene_system_status++ endif break case 3 break endswitch endproc func bool chinese_wave_2_system() // @SBA - B*1195400 - rarely, a ped falls through the world and cannot be killed in game play // this kills him if he is below ground KILL_ANY_ERRANT_ENEMY(wave_2_enemy) // @SBA - handle dead vehicle blips REMOVE_DEAD_VEHICLE_BLIPS(wave_2_enemy_vehicle) if wave_2_master_flow_system() mission_flow = wave_3_system return true endif wave_2_dialogue_system() wave_2_buddy_ai_system() //wave_2_vehicle_destruction_system() wave_2_assisted_nodes_system() wave_2_ai_system() wave_2_audio_scene_system() if is_ped_inside_interior(player_ped_id(), <<1392.7360, 3602.5989, 38.5>>, "v_methlab") SET_RADAR_AS_EXTERIOR_THIS_FRAME() endif return false endfunc PROC DO_ICE_BOX_OBJECTIVE_STUFF() // Print objective IF NOT HAS_LABEL_BEEN_TRIGGERED("METH_GOD_20") PRINT_NOW("METH_GOD_20", default_god_text_time, 1) // Go To Icebox SET_LABEL_AS_TRIGGERED("METH_GOD_20", TRUE) ENDIF // remove buddy blip IF DOES_BLIP_EXIST(buddy.blip) REMOVE_BLIP(buddy.blip) ENDIF // display ice box blip IF NOT does_blip_exist(ice_box_blip) ice_box_blip = create_blip_for_coord(<<1388.0475, 3598.6162, 33.8954>>) ENDIF // Start timer for next dialogue CANCEL_TIMER(tmrIceBoxReminder) START_TIMER_NOW(tmrIceBoxReminder) ENDPROC PROC SET_ICY_VERSIONS_OF_PEDS() IF NOT IS_PED_INJURED(cheng.ped) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HEAD, 0, 1) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_BERD, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HAIR, 0, 1) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_TORSO, 2, 1) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_LEG, 0, 1) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_HAND, 0, 1) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_FEET, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_TEETH, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_SPECIAL, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_SPECIAL2, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_DECL, 0, 0) SET_PED_COMPONENT_VARIATION(cheng.ped, PED_COMP_JBIB, 1, 1) SET_PED_PROP_INDEX(cheng.ped, ANCHOR_EYES,0) ENDIF IF NOT IS_PED_INJURED(translator.ped) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HEAD, 0, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_BERD, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HAIR, 0, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_TORSO, 1, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_LEG, 1, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_HAND, 0, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_FEET, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_TEETH, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_SPECIAL, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_SPECIAL2, 1, 1) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_DECL, 0, 0) SET_PED_COMPONENT_VARIATION(translator.ped, PED_COMP_JBIB, 1, 0) SET_PED_PROP_INDEX(translator.ped, ANCHOR_EYES,0) ENDIF ENDPROC func bool wave_3_master_flow_system() HANDLE_VEHICLE_TOO_NEAR_ICE_BOX() switch wave_3_master_flow_system_status case 0 if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1400.846, 3602.507, 28.946>>, <<1394.636, 3619.827, 48.946>>, 23.1) // @SBA - expanded this box to get Chef engaged sooner (else he stands around until player gets in) //if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1395.901, 3609.122, 33.986>>, <<1395.250, 3610.800, 36.986>>, 1.5) IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<1396.791016,3609.446289,33.980907>>, <<1395.188354,3613.933838,35.480907>>, 2.250000) //create_vehicle and skip setup_wave_3_enemies() // @SBA - Shutting outer doors to help with frame rate SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, FALSE, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "Wave 3", true) wave_3_master_flow_system_status++ // @SBA - grrrr REQUEST_MODEL(cheng.model) REQUEST_MODEL(translator.model) REQUEST_MODEL(mnIceBox) REQUEST_MODEL(mnIceBoxProxy) REQUEST_ANIM_DICT("MissChinese1LeadInOutCHI_1_MCS_4") endif else player_position = GET_ENTITY_COORDS(player_ped_id()) if (player_position.z < 37.00) //create vehicle and let it run normally - add extra flag to function no_vehicle_recording_skip = false set as true no_vehicle_recording_skip = true setup_wave_3_enemies() // @SBA - Shutting outer doors to help with frame rate SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, FALSE, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "Wave 3", true) wave_3_master_flow_system_status++ // @SBA - grrrr REQUEST_MODEL(cheng.model) REQUEST_MODEL(translator.model) REQUEST_MODEL(mnIceBox) REQUEST_MODEL(mnIceBoxProxy) REQUEST_ANIM_DICT("MissChinese1LeadInOutCHI_1_MCS_4") endif endif break case 1 // @SBA - make sure assests have loaded IF NOT HAS_MODEL_LOADED(cheng.model) OR NOT HAS_MODEL_LOADED(translator.model) OR NOT HAS_MODEL_LOADED(mnIceBox) OR NOT HAS_MODEL_LOADED(mnIceBoxProxy) OR NOT HAS_ANIM_DICT_LOADED("MissChinese1LeadInOutCHI_1_MCS_4") CPRINTLN(DEBUG_MISSION, "Final assets not loaded") RETURN FALSE ENDIF IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF ENDIF if ped_structure_are_all_enemies_dead(wave_3_enemy) REPLAY_RECORD_BACK_FOR_TIME(3.0) IF IS_THIS_PRINT_BEING_DISPLAYED("METH_GOD_18") CLEAR_THIS_PRINT("METH_GOD_18") ENDIF // @SBA - cleanup navmesh blocking as we no longer need it CLEAN_UP_NAVMESH_BLOCKERS() for i = 0 to count_of(ambient_enemy) - 1 if not is_ped_injured(ambient_enemy[i].ped) if not does_blip_exist(ambient_enemy[i].blip) ambient_enemy[i].blip = create_blip_for_ped(ambient_enemy[i].ped, true) endif endif endfor allow_ambient_enemy_blips_to_flash = true wave_3_buddy_ai_system_status = 5 //make sure no vehicles are blocking the front door of the lab for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) if is_entity_in_angled_area(parked_cars[i], <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) delete_vehicle(parked_cars[i]) endif endif endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if does_entity_exist(wave_0_enemy_vehicle[i].veh) if is_entity_in_angled_area(wave_0_enemy_vehicle[i].veh, <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) delete_vehicle(wave_0_enemy_vehicle[i].veh) ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(wave_0_enemy_vehicle[i].veh) endif endif endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if does_entity_exist(wave_2_enemy_vehicle[i].veh) if is_entity_in_angled_area(wave_2_enemy_vehicle[i].veh, <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) delete_vehicle(wave_2_enemy_vehicle[i].veh) ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(wave_2_enemy_vehicle[i].veh) endif endif endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 if does_entity_exist(wave_3_enemy_vehicle[i].veh) if is_entity_in_angled_area(wave_3_enemy_vehicle[i].veh, <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) delete_vehicle(wave_3_enemy_vehicle[i].veh) endif endif endfor if does_entity_exist(trevors_truck.veh) if is_entity_in_angled_area(trevors_truck.veh, <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) if is_vehicle_driveable(trevors_truck.veh) set_entity_coords(trevors_truck.veh, <<1409.9990, 3600.4973, 33.8676>>, false) set_entity_heading(trevors_truck.veh, 108.7487) else delete_vehicle(trevors_truck.veh) endif endif endif // @SBA additional clean up to save some memory // Ambient enemies now use only GoonModel1, and the peds using GoonModel2 are set to clean up as they die SET_MODEL_AS_NO_LONGER_NEEDED(GoonModel2) SET_MODEL_AS_NO_LONGER_NEEDED(pcj) SET_MODEL_AS_NO_LONGER_NEEDED(Sadler) IF IS_INTERIOR_READY(meth_interior) UNPIN_INTERIOR(meth_interior) ENDIF // @SBA - allow player access to vehicles again UNLOCK_ALL_MISSION_VEHICLES() // @SBA - re-create Cheng and Translator, create box for blend-in // Then do synchronized scene setup_buddy(cheng, FALSE) setup_buddy(translator, FALSE) // icy version SET_ICY_VERSIONS_OF_PEDS() // @SBA - hide old ice box, create new one that can be animated CREATE_MODEL_HIDE(vIceBoxPos, 2.0, prop_ice_box_01, FALSE) oiIceBox = CREATE_OBJECT_NO_OFFSET(mnIceBox, vIceBoxPos) oiIceBoxProxy = CREATE_OBJECT_NO_OFFSET(mnIceBoxProxy, vIceBoxPos) SET_LABEL_AS_TRIGGERED("METH_GOD_20", FALSE) cutscene_pos = <<1388.108, 3599.101, 33.89>> cutscene_rot = <<0.0, 0.0, 110.480>> CHENG_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) TRANSLATOR_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) SET_SYNCHRONIZED_SCENE_LOOPED(CHENG_CUTSCENE_INDEX, TRUE) SET_SYNCHRONIZED_SCENE_LOOPED(TRANSLATOR_CUTSCENE_INDEX, TRUE) IF NOT IS_PED_INJURED(cheng.ped) CPRINTLN(DEBUG_MISSION, "Starting Cheng's synched scene: initial loop") TASK_SYNCHRONIZED_SCENE(cheng.ped, CHENG_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TAO_IDLE_1", INSTANT_BLEND_IN, NORMAL_BLEND_OUT) ENDIF IF NOT IS_PED_INJURED(translator.ped) CPRINTLN(DEBUG_MISSION, "Starting translator's synched scene: initial loop") TASK_SYNCHRONIZED_SCENE(translator.ped, TRANSLATOR_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TRANSLATOR_IDLE_1", INSTANT_BLEND_IN, NORMAL_BLEND_OUT) ENDIF IF DOES_ENTITY_EXIST(oiIceBox) CPRINTLN(DEBUG_MISSION, "THE ICE BOX EXISTS!") SET_ENTITY_ROTATION(oiIceBox, vIceBoxRot) CPRINTLN(DEBUG_MISSION, "Starting ice box anims: initial loop") PLAY_SYNCHRONIZED_ENTITY_ANIM(oiIceBox, CHENG_CUTSCENE_INDEX, "CHI_1_MCS_4_TAO_IDLE_1_FREEZER", "MissChinese1LeadInOutCHI_1_MCS_4", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) SET_ENTITY_COLLISION(oiIceBox, TRUE) ENDIF IF DOES_ENTITY_EXIST(oiIceBoxProxy) CPRINTLN(DEBUG_MISSION, "THE ICE BOX PROXY EXISTS!") SET_ENTITY_ROTATION(oiIceBoxProxy, vIceBoxRot) SET_ENTITY_COLLISION(oiIceBoxProxy, FALSE) ENDIF // Enemies are dead - turn off now SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_NONE ) //request_cutscene("chi_1_mcs_4_concat") prepare_music_event("CHN1_FINAL_CS") START_TIMER_NOW(tmrWave3ChefFailsafe) REQUEST_SCRIPT_AUDIO_BANK("CHINESE1_ICEBOX") wave_3_master_flow_system_status++ endif break case 2 if wave_3_buddy_ai_system_status >= 8 bTellChefGetInside = TRUE CANCEL_TIMER(tmrWave3ChefFailsafe) wave_3_master_flow_system_status++ ELSE // failsafe in case Chef gets stuck IF are_all_ambient_entities_dead() OR TIMER_DO_WHEN_READY(tmrWave3ChefFailsafe, 25.000) CLEAR_PED_TASKS(buddy.ped) CANCEL_TIMER(tmrWave3ChefFailsafe) wave_3_buddy_ai_system_status = 9 wave_3_master_flow_system_status++ ENDIF endif break case 3 IF IS_PED_USING_ACTION_MODE(PLAYER_PED_ID()) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE) ENDIF // Don't bother with blip and objective if player is already in position IF IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxOuterVol) // make sure player is not in the store IF NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") // @SBA - starting reminder timer (ensure timer isn't still running first) // in case player leaves box before we've moved on in next state CANCEL_TIMER(tmrIceBoxReminder) START_TIMER_NOW(tmrIceBoxReminder) wave_3_master_flow_system_status++ // If in the trigger box but also inside, print objective and blip ELSE bSetIceBoxBlip = TRUE wave_3_master_flow_system_status++ ENDIF ELSE bSetIceBoxBlip = TRUE wave_3_master_flow_system_status++ endif break case 4 // check larger outer volume around box IF IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxOuterVol) // remove buddy blip IF DOES_BLIP_EXIST(buddy.blip) REMOVE_BLIP(buddy.blip) ENDIF // make sure player is not in the store IF NOT IS_PED_IN_SPECIFIC_ROOM(PLAYER_PED_ID(), (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") IF not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // @SBA - play Trevor line, need to correct speaker number ADD_PED_FOR_DIALOGUE(scripted_speech[0], 0, player_ped_id(), "trevor") IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_M4_LI2", CONV_PRIORITY_HIGH) RETURN TRUE ENDIF ENDIF ENDIF // @SBA = for B*926673. Adding a reminder. // removing due to some dialogue rearranging. Might return? // ELSE // // timer is done // IF TIMER_DO_ONCE_WHEN_READY(tmrIceBoxReminder, 25.000) // // Play dialogue, if you can // IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_cookice") // IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) // IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_cookice", conv_priority_medium) // // Don't replay the line after this. // SET_LABEL_AS_TRIGGERED("chin_cookice", TRUE) // //wave_3_master_flow_system_status = 3 // ENDIF // ENDIF // // Otherwise just repeat objective @SBA - removed per B*1357967, but keeping in case // //ELSE // // Go back up to redisplay objective // //wave_3_master_flow_system_status = 3 // ENDIF // ENDIF endif break endswitch return false endfunc proc wave_3_dialogue_system() switch wave_3_dialogue_system_status case 0 if create_conversation(scripted_speech[0], "methaud", "meth_run1", conv_priority_medium) wave_3_dialogue_system_status++ endif break case 1 if create_conversation(scripted_speech[0], "methaud", "TRESP", conv_priority_medium) wave_3_dialogue_system_status++ endif break case 2 if not is_scripted_conversation_ongoing() print_now("METH_GOD_3", default_god_text_time, 1) wave_3_dialogue_system_status++ endif break case 3 prepare_music_event("CHN1_LAST_GUYS") if wave_3_enemy[0].created if not is_any_text_being_displayed(locates_data) if create_conversation(scripted_speech[0], "methaud", "chin_doorcov", conv_priority_medium) trigger_music_event("CHN1_LAST_GUYS") wave_3_dialogue_system_status++ endif endif endif break CASE 4 IF NOT bPlayerUsedAbility SPECIAL_ABILITY_CHARGE_SMALL(PLAYER_ID(), TRUE, TRUE) IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) PRINT_HELP("METH_help_T_KM",DEFAULT_HELP_TEXT_TIME) ELSE PRINT_HELP("METH_help_T",DEFAULT_HELP_TEXT_TIME) ENDIF wave_3_dialogue_system_status++ ELSE wave_3_dialogue_system_status++ ENDIF dialogue_time_2 = GET_GAME_TIMER() BREAK case 5 // slight wait after help IF NOT lk_timer(dialogue_time_2, 1000) EXIT ENDIF if not is_any_text_being_displayed(locates_data) if not has_label_been_triggered("chin_seeort") if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) if not is_ped_injured(wave_3_enemy[0].ped) if is_ped_on_foot(wave_3_enemy[0].ped) if create_conversation(scripted_speech[0], "methaud", "chin_seeort", conv_priority_medium) set_label_as_triggered("chin_seeort", true) endif ENDIF ENDIF endif endif if not has_label_been_triggered("chin_ortega") if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) if not is_ped_injured(wave_3_enemy[0].ped) if is_ped_on_foot(wave_3_enemy[0].ped) if create_conversation(scripted_speech[0], "methaud", "chin_ortega", conv_priority_medium) set_label_as_triggered("chin_ortega", true) endif endif endif endif endif if (not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) and not is_ped_injured(wave_3_enemy[0].ped)) if not has_label_been_triggered("chin_alive") if not is_ped_injured(wave_3_enemy[1].ped) if is_ped_on_foot(wave_3_enemy[1].ped) if create_conversation(scripted_speech[0], "methaud", "chin_alive", conv_priority_medium) set_label_as_triggered("chin_alive", true) endif endif endif endif else if not has_label_been_triggered("chin_dead") if not is_ped_injured(wave_3_enemy[1].ped) if is_ped_on_foot(wave_3_enemy[1].ped) if create_conversation(scripted_speech[0], "methaud", "chin_dead", conv_priority_medium) set_label_as_triggered("chin_dead", true) endif endif ELSE // have Chef say Ortega killed if enemy doesn't IF NOT GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) IF IS_PED_INJURED(wave_3_enemy[0].ped) IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_killort") IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_killort", CONV_PRIORITY_HIGH) SET_LABEL_AS_TRIGGERED("chin_killort", TRUE) SET_LABEL_AS_TRIGGERED("chin_dead", TRUE) ENDIF ENDIF ENDIF ENDIF endif endif endif if (not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) and not is_ped_injured(wave_3_enemy[0].ped)) if not has_label_been_triggered("chin_alive2") if not is_ped_injured(wave_3_enemy[2].ped) if is_ped_on_foot(wave_3_enemy[2].ped) if create_conversation(scripted_speech[0], "methaud", "chin_alive2", conv_priority_medium) set_label_as_triggered("chin_alive2", true) endif endif endif endif else if not has_label_been_triggered("chin_dead2") if not is_ped_injured(wave_3_enemy[1].ped) if is_ped_on_foot(wave_3_enemy[1].ped) if create_conversation(scripted_speech[0], "methaud", "chin_dead2", conv_priority_medium) set_label_as_triggered("chin_dead2", true) endif endif endif endif endif if not has_label_been_triggered("chin_attack2") if not is_any_text_being_displayed(locates_data) if not is_ped_injured(wave_3_enemy[3].ped) if wave_3_status[3] = do_nothing //if enemy is standing right of shop door if create_conversation(scripted_speech[0], "methaud", "chin_attack2", conv_priority_medium) set_label_as_triggered("chin_attack2", true) endif endif endif endif endif endif if wave_3_master_flow_system_status > 1 set_label_as_triggered("chin_end", FALSE) set_label_as_triggered("chin_cookice", FALSE) set_label_as_triggered("chin_shout", FALSE) wave_3_dialogue_system_status++ endif break case 6 // Trevor orders Chef back inside IF bTellChefGetInside if not is_any_text_being_displayed(locates_data) if create_conversation(scripted_speech[0], "methaud", "chin_end", conv_priority_medium) bTellChefGetInside = FALSE REPLAY_RECORD_BACK_FOR_TIME(3.0, 6.0, REPLAY_IMPORTANCE_HIGHEST) set_label_as_triggered("chin_end", true) ENDIF ENDIF ELSE // Chef yells at retreating enemies (if any) IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_shout") IF NOT are_all_ambient_entities_dead() IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_end") if NOT is_ped_in_specific_room(buddy.ped, (<<1392.3, 3602.9, 35.0>>), "v_39_ShopRm") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_shout", conv_priority_medium) set_label_as_triggered("chin_shout", true) ENDIF ENDIF ENDIF ENDIF ELSE set_label_as_triggered("chin_shout", true) ENDIF ENDIF ENDIF // Trevor says he'll let Cheng and translator out IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_cookice") IF HAS_LABEL_BEEN_TRIGGERED("chin_end") OR wave_3_master_flow_system_status > 2 IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_cookice", conv_priority_medium) set_label_as_triggered("chin_cookice", true) ENDIF ENDIF ENDIF ENDIF // handle ice box blip, objecitve text, and stuff when told to IF bSetIceBoxBlip IF HAS_LABEL_BEEN_TRIGGERED("chin_cookice") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) DO_ICE_BOX_OBJECTIVE_STUFF() bSetIceBoxBlip = FALSE wave_3_dialogue_system_status++ ENDIF ENDIF ENDIF break case 7 break endswitch // printint(wave_3_buddy_ai_system_status) // printnl() if lk_timer(dialogue_time, 13000) if is_ped_shooting(player_ped_id()) if not is_any_text_being_displayed(locates_data) if is_enemy_near_player(wave_3_enemy, 50.00) if create_conversation(scripted_speech[0], "methaud", "attack_0", conv_priority_low) dialogue_time = get_game_timer() endif endif endif endif endif endproc proc wave_3_buddy_ai_system() if allow_buddy_ai_system // @SBA - handle if player leaves Chef during fight IF NOT wave_3_complete IF IS_ENTITY_AT_COORD(buddy.ped, (<<1393.76355, 3608.57373, 34.00>>), (<<1.5, 1.5, 2.0>>)) AND wave_3_buddy_ai_system_status > 4 HANDLE_WAVE_3_CHEF_DEMISE() HANDLE_ABANDONMENT_MESSAGE(HAS_PLAYER_ABANDONED_CHEF_WAVE_3()) ENDIF HANDLE_CHEF_DAMAGED_DIALOGUE() ENDIF switch wave_3_buddy_ai_system_status case 0 // @SBA - we want to help ensure the player sees the chef run off START_TIMER_NOW(tmrStartChefMove) IF IS_ENTITY_ON_SCREEN(buddy.ped) OR TIMER_DO_WHEN_READY(tmrStartChefMove, 4.000) CANCEL_TIMER(tmrStartChefMove) // @SBA - make sure Chef's health is set to max for this wave SET_HEALTH_FOR_PED(buddy.ped, buddy.health) SET_PED_CAN_PEEK_IN_COVER(buddy.ped, TRUE) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) // @SBA - run to first waypoint, don't worry about navmesh or closest point (cleans up the transition) TASK_FOLLOW_WAYPOINT_RECORDING(null, "methlab3", 0, EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) // EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_3_buddy_ai_system_status++ ENDIF break case 1 if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(buddy.ped, 1.60) // @SBA OLD = 2.0 endif if not IS_ENTITY_IN_ANGLED_AREA(buddy.ped, <<1387.209, 3612.450, 37.946>>, <<1384.973, 3611.582, 40.948>>, 2.5, false) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if waypoint_recording_get_closest_waypoint("methlab3", GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) waypoint_node_pos += 1 if (waypoint_node_pos > 18) waypoint_node_pos = 18 endif set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_waypoint_recording(null, "methlab3", waypoint_node_pos, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif else if get_distance_between_coords(GET_ENTITY_COORDS(buddy.ped), GET_ENTITY_COORDS(player_ped_id())) > 8.0 //6.0 if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_PAUSE(buddy.ped, true) endif wave_3_buddy_ai_system_status++ else wave_3_buddy_ai_system_status = 3 endif endif break case 2 if not has_label_been_triggered("chin_cook") if create_conversation(scripted_speech[0], "methaud", "chin_cook", conv_priority_medium) set_label_as_triggered("chin_cook", true) endif endif IF IS_PLAYER_NEAR_CHEF_ON_STAIRS() if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_RESUME(buddy.ped) endif REPLAY_RECORD_BACK_FOR_TIME(5.0, 13.0) wave_3_buddy_ai_system_status++ endif break case 3 waypoint_recording_get_num_points("methlab3", total_number_of_points) total_number_of_points -= 3 if waypoint_recording_get_coord("methlab3", total_number_of_points, target_waypoint_pos) //CPRINTLN(DEBUG_MISSION, "Chef waypoint number is ", total_number_of_points) //CPRINTLN(DEBUG_MISSION, "Chef waypoint vector is ", target_waypoint_pos) if not IS_ENTITY_AT_COORD(buddy.ped, target_waypoint_pos, <<1.0, 1.0, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if waypoint_recording_get_closest_waypoint("methlab3", GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) waypoint_node_pos += 1 if (waypoint_node_pos > total_number_of_points) waypoint_node_pos = total_number_of_points endif set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_waypoint_recording(null, "methlab3", waypoint_node_pos, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif else IF IS_PLAYER_STEALING_PEDS_DESTINATION(buddy.ped, buddy_cover_point_data[4].pos, 5.0, false) CPRINTLN(DEBUG_MISSION, "Chef to right cover") TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[5].cover_point, buddy_cover_point_data[5].cover_from_pos, -1, TRUE) ELSE CPRINTLN(DEBUG_MISSION, "Chef to left cover") TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[4].cover_point, buddy_cover_point_data[4].cover_from_pos, -1, TRUE) ENDIF buddy_time = get_game_timer() wave_3_buddy_ai_system_status++ endif endif break case 4 IF NOT IS_PED_IN_COVER(buddy.ped) IF has_ped_task_finished_2(buddy.ped, SCRIPT_TASK_SEEK_COVER_TO_COVER_POINT) IF IS_PLAYER_STEALING_PEDS_DESTINATION(buddy.ped, buddy_cover_point_data[4].pos, 5.0, false) CPRINTLN(DEBUG_MISSION, "Chef to right cover") TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[5].cover_point, buddy_cover_point_data[5].cover_from_pos, -1, TRUE) ELSE CPRINTLN(DEBUG_MISSION, "Chef to left cover") TASK_SEEK_COVER_TO_COVER_POINT(buddy.ped, buddy_cover_point_data[4].cover_point, buddy_cover_point_data[4].cover_from_pos, -1, TRUE) ENDIF ENDIF ELIF lk_timer(buddy_time, 2000) //@SBA OLD = 4000 // Wait for final vehicle to be in position IF IS_VEHICLE_DRIVEABLE(wave_3_enemy_vehicle[0].veh) IF NOT is_playback_going_on_for_vehicle(wave_3_enemy_vehicle[0].veh) CPRINTLN(DEBUG_MISSION, "Chef should be in cover and in combat") SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(buddy.ped, false) SET_PED_SPHERE_DEFENSIVE_AREA(buddy.ped, GET_ENTITY_COORDS(buddy.ped), 1.25) SET_PED_ACCURACY(buddy.ped, 5) TASK_COMBAT_HATED_TARGETS_AROUND_PED(buddy.ped, 50.0) wave_3_buddy_ai_system_status = 22 ENDIF ENDIF ENDIF break case 5 //if waypoint_recording_get_closest_waypoint("methlab7", GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) set_entity_proofs(buddy.ped, false, true, false, false, false) open_sequence_task(seq) TASK_FOLLOW_WAYPOINT_RECORDING(null, "methlab7", waypoint_node_pos, EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_3_buddy_ai_system_status++ //endif break case 6 if not has_label_been_triggered("buddy_runout") if not is_any_text_being_displayed(locates_data) if create_conversation(scripted_speech[0], "methaud", "buddy_runout", conv_priority_medium) set_label_as_triggered("buddy_runout", true) endif endif endif if IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(buddy.ped) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(buddy.ped, 2.0) endif if waypoint_recording_get_coord("methlab7", 11, target_waypoint_pos) if not IS_ENTITY_AT_COORD(buddy.ped, target_waypoint_pos, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) if waypoint_recording_get_closest_waypoint("methlab7", GET_ENTITY_COORDS(buddy.ped), waypoint_node_pos) waypoint_node_pos += 1 if (waypoint_node_pos > 11) waypoint_node_pos = 11 endif set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) task_follow_waypoint_recording(null, "methlab7", waypoint_node_pos, EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT | EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif else if not is_ped_injured(ambient_enemy[0].ped) or not is_ped_injured(ambient_enemy[1].ped) or not is_ped_injured(ambient_enemy[2].ped) or not is_ped_injured(ambient_enemy[3].ped) if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1406.8160, 3595.9963, 33.6496>>, ambient_enemy_vehicle[0].veh, pedmove_run, true, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) elif is_vehicle_driveable(ambient_enemy_vehicle[1].veh) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1406.8160, 3595.9963, 33.6496>>, ambient_enemy_vehicle[1].veh, pedmove_run, true, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) else open_sequence_task(seq) task_go_to_coord_while_aiming_at_coord(null, <<1406.8160, 3595.9963, 33.6496>>, <<1426.58, 3592.1, 35.42>>, pedmove_run, false, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif else open_sequence_task(seq) task_go_to_coord_while_aiming_at_coord(null, <<1406.8160, 3595.9963, 33.6496>>, <<1426.58, 3592.1, 35.42>>, pedmove_run, false, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif wave_3_buddy_ai_system_status++ endif endif break case 7 if not IS_ENTITY_AT_COORD(buddy.ped, <<1406.8160, 3595.9963, 33.6496>>, <<1.5, 1.5, 1.6>>, false, true) if has_ped_task_finished_2(buddy.ped, script_task_perform_sequence) set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) if is_vehicle_driveable(ambient_enemy_vehicle[0].veh) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1406.8160, 3595.9963, 33.6496>>, ambient_enemy_vehicle[0].veh, pedmove_run, true, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) elif is_vehicle_driveable(ambient_enemy_vehicle[1].veh) open_sequence_task(seq) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null, <<1406.8160, 3595.9963, 33.6496>>, ambient_enemy_vehicle[1].veh, pedmove_run, true, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) else open_sequence_task(seq) task_go_to_coord_while_aiming_at_coord(null, <<1406.8160, 3595.9963, 33.6496>>, <<1426.58, 3592.1, 35.42>>, pedmove_run, false, 0.2, 0.8) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif endif else set_blocking_of_non_temporary_events(buddy.ped, false) set_ped_sphere_defensive_area(buddy.ped, <<1406.8160, 3595.9963, 33.6496>>, 4.0) task_combat_hated_targets_around_ped(buddy.ped, 200) wave_3_buddy_ai_system_status++ original_time = get_game_timer() endif break case 8 if lk_timer(original_time, 1500) or are_all_ambient_entities_dead() set_blocking_of_non_temporary_events(buddy.ped, true) clear_ped_tasks(buddy.ped) open_sequence_task(seq) TASK_AIM_GUN_AT_COORD(NULL, (<<1426.58, 3592.1, 35.42>>), 750) task_follow_nav_mesh_to_coord(null, <<1395.9012, 3611.6748, 33.9809>>, PEDMOVE_WALK, -1, default_navmesh_radius, enav_no_stopping) task_follow_nav_mesh_to_coord(null, <<1391.8004, 3612.1050, 33.9809>>, PEDMOVE_WALK, -1, default_navmesh_radius, enav_no_stopping) task_follow_nav_mesh_to_coord(null, <<1391.1970, 3601.0510, 37.9419>>, pedmove_run, -1, default_navmesh_radius) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) wave_3_buddy_ai_system_status++ endif break case 9 if not is_entity_at_coord(buddy.ped, <<1391.1970, 3601.0510, 37.9419>>, <<1.5, 1.5, 2.0>>) if has_ped_task_finished_2(buddy.ped) open_sequence_task(seq) task_follow_nav_mesh_to_coord(null, <<1391.1970, 3601.0510, 37.9419>>, pedmove_run, -1, default_navmesh_radius) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) endif else // Have Chef do something until the cutscene starts TASK_LOOK_AT_ENTITY(buddy.ped, PLAYER_PED_ID(), -1, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) OPEN_SEQUENCE_TASK(seq) TASK_SWAP_WEAPON(NULL, FALSE) TASK_USE_NEAREST_SCENARIO_TO_COORD(NULL, (<<1390.0, 3600.510, 37.9419>>), 2.5, -1) //TASK_WANDER_IN_AREA(NULL, (<<1393.49988, 3603.23877, 37.94191>>), 2.0, 2, 4) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(buddy.ped, seq) CLEAR_SEQUENCE_TASK(seq) wave_3_buddy_ai_system_status++ endif break CASE 10 // zilch BREAK endswitch endif endproc proc wave_3_assisted_nodes_system() switch wave_3_assisted_nodes_system_status case 0 ASSISTED_MOVEMENT_remove_ROUTE("Wave2") ASSISTED_MOVEMENT_REQUEST_ROUTE("Wave3") wave_3_assisted_nodes_system_status++ break case 1 // if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1401.366, 3619.451, 37.947>>, <<1406.805, 3604.510, 39.947>>, 10.900) // // ASSISTED_MOVEMENT_remove_ROUTE("Meth2") // // wave_3_assisted_nodes_system_status++ // endif break case 2 break case 3 break case 22 break endswitch endproc proc wave_3_audio_scene_system() switch wave_3_audio_scene_system_status case 0 if wave_3_enemy[1].created if does_entity_exist(wave_3_enemy_vehicle[0].veh) if is_vehicle_driveable(wave_3_enemy_vehicle[0].veh) add_entity_to_audio_mix_group(wave_3_enemy_vehicle[0].veh, "CHI_1_TRUCK_02") endif endif if is_audio_scene_active("CHI_1_GET_TO_SHOOTOUT_04") stop_audio_scene("CHI_1_GET_TO_SHOOTOUT_04") endif wave_3_audio_scene_system_status++ endif break case 1 if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1400.846, 3602.507, 28.946>>, <<1394.636, 3619.827, 48.946>>, 23.1) if IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<1395.035, 3608.389, 33.981>>, <<1394.215, 3610.644, 36.5>>, 1.5) start_audio_scene("CHI_1_SHOOTOUT_04") endif else player_position = GET_ENTITY_COORDS(player_ped_id()) if (player_position.z < 37.00) start_audio_scene("CHI_1_SHOOTOUT_04") wave_3_audio_scene_system_status++ endif endif break case 2 if does_entity_exist(wave_3_enemy_vehicle[0].veh) if is_vehicle_driveable(wave_3_enemy_vehicle[0].veh) if not is_playback_going_on_for_vehicle(wave_3_enemy_vehicle[0].veh) remove_entity_from_audio_mix_group(wave_3_enemy_vehicle[0].veh) wave_3_audio_scene_system_status++ endif else remove_entity_from_audio_mix_group(wave_3_enemy_vehicle[0].veh) wave_3_audio_scene_system_status++ endif endif break case 3 if ped_structure_are_all_enemies_dead(wave_3_enemy) trigger_music_event("CHN1_ENEMIES_FLEE") if is_audio_scene_active("CHI_1_SHOOTOUT_04") stop_audio_scene("CHI_1_SHOOTOUT_04") endif start_audio_scene("CHI_1_ENEMIES_ESCAPE") wave_3_audio_scene_system_status++ endif break case 4 if does_blip_exist(ice_box_blip) if is_audio_scene_active("CHI_1_ENEMIES_ESCAPE") stop_audio_scene("CHI_1_ENEMIES_ESCAPE") endif start_audio_scene("CHI_1_GO_TO_ICEBOX") wave_3_audio_scene_system_status++ endif break endswitch endproc func bool chinese_wave_3_system() // @SBA - B*1195400 - rarely, a ped falls through the world and cannot be killed in game play // this kills him if he is below ground KILL_ANY_ERRANT_ENEMY(wave_3_enemy) KILL_ANY_ERRANT_ENEMY(ambient_enemy) // @SBA - handle dead vehicle blips REMOVE_DEAD_VEHICLE_BLIPS(wave_3_enemy_vehicle) if wave_3_master_flow_system() mission_flow = mission_passed_mocap return true endif wave_3_dialogue_system() wave_3_buddy_ai_system() wave_3_ai_system() //wave_3_assisted_nodes_system() ambient_enemy_system() wave_3_audio_scene_system() if is_ped_inside_interior(player_ped_id(), <<1392.7360, 3602.5989, 38.5>>, "v_methlab") SET_RADAR_AS_EXTERIOR_THIS_FRAME() endif return false endfunc PROC HAVE_PED_EXIT_VEHICLE_THEN_WALK(PED_INDEX piPed, VECTOR vLoc, INT iPause = 0) SEQUENCE_INDEX siSeq IF IS_VEHICLE_DRIVEABLE(trevors_truck.veh) AND NOT IS_PED_INJURED(PLAYER_PED_ID()) OPEN_SEQUENCE_TASK(siSeq) TASK_PAUSE(NULL, iPause) TASK_LEAVE_VEHICLE(NULL, trevors_truck.veh) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vLoc, PEDMOVE_WALK) CLOSE_SEQUENCE_TASK(siSeq) TASK_PERFORM_SEQUENCE(piPed, siSeq) CLEAR_SEQUENCE_TASK(siSeq) ENDIF ENDPROC FLOAT fSRLTime // @SBA - handle the lead in for the arrival cutscene, return when finished FUNC BOOL HANDLE_LEAD_IN_SHOT_OF_ARRIVAL() IF DOES_ENTITY_EXIST(trevors_truck.veh) IF NOT IS_ENTITY_DEAD(trevors_truck.veh) REQUEST_VEHICLE_HIGH_DETAIL_MODEL(trevors_truck.veh) ENDIF ENDIF IF ArivialLeadInState > ALI_HALT_VEHICLE fSRLTime += GET_FRAME_TIME() IF fSRLTime < 0.0 fSRLTime = 0.0 ENDIF SET_SRL_TIME(fSRLTime) ENDIF SWITCH ArivialLeadInState CASE ALI_HALT_VEHICLE SET_SRL_READAHEAD_TIMES(5, 5, 5, 5) BEGIN_SRL() IF NOT IS_CAM_RENDERING(camera_a) RENDER_SCRIPT_CAMS(TRUE, FALSE) display_hud(false) display_radar(false) ENDIF IF IS_PED_INJURED(PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: Player is injured?!") ENDIF IF IS_TIMER_STARTED(tmrArrival) CANCEL_TIMER(tmrArrival) ENDIF IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_CAM_INTERP (helicopter)") SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ArivialLeadInState = ALI_CAM_INTERP ELIF get_current_player_vehicle(trevors_truck.veh) //IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(trevors_truck.veh, 6, 1, 12.0) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) SET_ENTITY_AS_MISSION_ENTITY(trevors_truck.veh) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_CAM_INTERP") ArivialLeadInState = ALI_CAM_INTERP //ENDIF ELSE SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_CAM_INTERP (no vehicle)") ArivialLeadInState = ALI_CAM_INTERP ENDIF BREAK CASE ALI_CAM_INTERP // start interp IF DOES_CAM_EXIST(camera_a) AND DOES_CAM_EXIST(camera_b) SET_CAM_ACTIVE_WITH_INTERP(camera_b, camera_a, 5000) SHAKE_CAM(camera_b, "HAND_SHAKE") CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_FINISH_DRIVE") ArivialLeadInState = ALI_FINISH_DRIVE ENDIF BREAK CASE ALI_FINISH_DRIVE IF NOT IS_PED_INJURED(PLAYER_PED_ID()) // helicopter? IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_FINISH_INTERP (helicopter)") ArivialLeadInState = ALI_FINISH_INTERP // If we're in a vehicle go to final spot // Hopefully this alleviates badly-parked vehicles ELIF get_current_player_vehicle(trevors_truck.veh) VECTOR vVehCoord FLOAT fVehHead vVehCoord = GET_ENTITY_COORDS(trevors_truck.veh) IF vVehCoord.x > 1402.7 CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: Trevor's vehicle coming from the RIGHT") vVehCoord = vVehicleLeadinLocR fVehHead = fTrevorsVehicleMethLabHead ELSE CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: Trevor's vehicle coming from the LEFT") vVehCoord = vVehicleLeadinLocL fVehHead = fTrevorsVehicleMethLabHead - 180 ENDIF CLEAR_AREA(vVehCoord, 3.0, TRUE) SET_ENTITY_COORDS(trevors_truck.veh, vVehCoord) SET_ENTITY_HEADING(trevors_truck.veh, fVehHead) SET_VEHICLE_ON_GROUND_PROPERLY(trevors_truck.veh) TASK_VEHICLE_DRIVE_TO_COORD(PLAYER_PED_ID(), trevors_truck.veh, vArrivalMethLab, 15, DRIVINGSTYLE_NORMAL, DUMMY_MODEL_FOR_SCRIPT, DRIVINGMODE_PLOUGHTHROUGH, 2.0, 20) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_VEHICLE_STOP") START_TIMER_NOW(tmrArrival) ArivialLeadInState = ALI_VEHICLE_STOP // if we're on foot, just wait for the interp to end ELSE CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_FINISH_INTERP (on foot)") ArivialLeadInState = ALI_FINISH_INTERP ENDIF ENDIF BREAK CASE ALI_VEHICLE_STOP IF IS_VEHICLE_DRIVEABLE(trevors_truck.veh) AND NOT IS_PED_INJURED(PLAYER_PED_ID()) IF IS_VEHICLE_STOPPED(trevors_truck.veh) AND (GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD) != PERFORMING_TASK) HAVE_PED_EXIT_VEHICLE_THEN_WALK(PLAYER_PED_ID(), (<<1402.6, 3598.8, 34.0>>)) HAVE_PED_EXIT_VEHICLE_THEN_WALK(translator.ped, (<<1402.3, 3598.6, 34.0>>), 300) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_EXIT_VEHICLE") ArivialLeadInState = ALI_EXIT_VEHICLE ELIF TIMER_DO_WHEN_READY(tmrArrival, 16.000) IF IS_ENTITY_OCCLUDED(trevors_truck.veh) CANCEL_TIMER(tmrArrival) CLEAR_AREA(vVehicleLeadinLocR, 3.0, TRUE) SET_ENTITY_COORDS(trevors_truck.veh, vVehicleLeadinLocR) SET_ENTITY_HEADING(trevors_truck.veh, fTrevorsVehicleMethLabHead) ArivialLeadInState = ALI_FINISH_DRIVE ENDIF ENDIF ENDIF BREAK CASE ALI_EXIT_VEHICLE CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: Leaving vehicle") RETURN TRUE BREAK CASE ALI_FINISH_INTERP // letting the interp finish if we're on foot IF DOES_CAM_EXIST(camera_b) IF IS_CAM_ACTIVE(camera_b) IF NOT IS_CAM_INTERPOLATING(camera_b) START_TIMER_NOW(tmrArrival) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: TO ALI_WAIT_FOR_TIMER (no vehicle)") ArivialLeadInState = ALI_WAIT_FOR_TIMER ENDIF ENDIF ENDIF BREAK CASE ALI_WAIT_FOR_TIMER IF TIMER_DO_ONCE_WHEN_READY(tmrArrival, 0.200) CPRINTLN(DEBUG_MISSION, "HANDLE_LEAD_IN_SHOT_OF_ARRIVAL: Returning TRUE") RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC SETUP_PLAYER_POST_ARRIVAL_CUTSCENE() // clear_ped_tasks_immediately(player_ped_id()) // SET_ENTITY_COORDS(player_ped_id(), vTrevorWindowStartPos)//@SBA - adjusting starting cover position slightly - OLD VALUE <<1389.5963, 3600.4568, 37.9419>>) // SET_ENTITY_HEADING(player_ped_id(), 21.5294)//72.3301) // @SBA - adjusting starting cover position slightly - OLD VALUE <<1389.63, 3600.41, 37.94>> task_put_ped_directly_into_cover(player_ped_id(), vTrevorWindowStartPos, -1, false, 0.5, true, false, players_cover_point)//, false, instant_blend_in) force_ped_ai_and_animation_update(player_ped_id(), FALSE) if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_to_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, true, true) else if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif set_current_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE, true) endif //SET_GAMEPLAY_CAM_RELATIVE_HEADING(90.00)//************* SET_PED_USING_ACTION_MODE(player_ped_id(), true) ENDPROC // @SBA HACK split up the creation of the wave a bit for normal game flow FUNC BOOL SETUP_INITIAL_ENEMY_WAVE_IN_STAGES() SWITCH iWave0SetupStage // Enemies on foot CASE 0 setup_enemy(wave_0_enemy[0]) setup_enemy(wave_0_enemy[1]) iWave0SetupStage ++ BREAK // first SUV CASE 1 SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[0]) set_vehicle_colours(wave_0_enemy_vehicle[0].veh, 0, 0) setup_enemy_in_vehicle(wave_0_enemy[2], wave_0_enemy_vehicle[0].veh) setup_enemy_in_vehicle(wave_0_enemy[3], wave_0_enemy_vehicle[0].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[4], wave_0_enemy_vehicle[0].veh, vs_back_left) start_playback_recorded_vehicle(wave_0_enemy_vehicle[0].veh, wave_0_enemy_vehicle[0].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[0].veh, 3000) iWave0SetupStage ++ BREAK // second SUV CASE 2 SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[1]) set_vehicle_colours(wave_0_enemy_vehicle[1].veh, 10, 10) setup_enemy_in_vehicle(wave_0_enemy[5], wave_0_enemy_vehicle[1].veh) setup_enemy_in_vehicle(wave_0_enemy[6], wave_0_enemy_vehicle[1].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[7], wave_0_enemy_vehicle[1].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_enemy[8], wave_0_enemy_vehicle[1].veh, vs_back_right) start_playback_recorded_vehicle(wave_0_enemy_vehicle[1].veh, wave_0_enemy_vehicle[1].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[1].veh, 4500) iWave0SetupStage ++ BREAK CASE 3 iWave0SetupStage ++ RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC // creating wave 0 all at once for restarts, etc. PROC SETUP_INITIAL_ENEMY_WAVE() IF bStartedInitialWave CPRINTLN(DEBUG_MISSION, "SETUP_INITIAL_ENEMY_WAVE: Already started - exiting.") EXIT ENDIF INT idx for idx = 0 to 1 SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[idx]) //set_entity_only_damaged_by_player(wave_0_enemy_vehicle[idx].veh, true) start_playback_recorded_vehicle(wave_0_enemy_vehicle[idx].veh, wave_0_enemy_vehicle[idx].recording_number, "lkmethlab") if idx = 0 skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[idx].veh, 3000) //4000 set_vehicle_colours(wave_0_enemy_vehicle[idx].veh, 0, 0) elif idx = 1 skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[idx].veh, 4500) //5500 set_vehicle_colours(wave_0_enemy_vehicle[idx].veh, 10, 10) endif endfor setup_enemy(wave_0_enemy[0]) setup_enemy(wave_0_enemy[1]) setup_enemy_in_vehicle(wave_0_enemy[2], wave_0_enemy_vehicle[0].veh) setup_enemy_in_vehicle(wave_0_enemy[3], wave_0_enemy_vehicle[0].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[4], wave_0_enemy_vehicle[0].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_enemy[5], wave_0_enemy_vehicle[1].veh) setup_enemy_in_vehicle(wave_0_enemy[6], wave_0_enemy_vehicle[1].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[7], wave_0_enemy_vehicle[1].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_enemy[8], wave_0_enemy_vehicle[1].veh, vs_back_right) ENDPROC PROC SETUP_INITIAL_ENEMY_WAVE_PROPS() IF bInitialWavePropsMade CPRINTLN(DEBUG_MISSION, "SETUP_INITIAL_ENEMY_WAVE_PROPS: Already started - exiting.") EXIT ENDIF for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor for i = 0 to count_of(explosive_barrels) - 1 explosive_barrels[i].obj = create_object_no_offset(explosive_barrels[i].model, explosive_barrels[i].pos) SET_ENTITY_ROTATION(explosive_barrels[i].obj, explosive_barrels[i].rot) endfor cover_box.obj = create_object_no_offset(cover_box.model, cover_box.pos) freeze_entity_position(cover_box.obj, true) SET_ENTITY_ROTATION(cover_box.obj, cover_box.rot) ENDPROC proc setup_start_of_shootout() if does_entity_exist(trevors_truck.veh) if is_vehicle_driveable(trevors_truck.veh) set_entity_coords(trevors_truck.veh, <<1409.9990, 3600.4973, 33.8676>>) set_entity_heading(trevors_truck.veh, 108.7487) set_vehicle_engine_on(trevors_truck.veh, false, true) endif endif IF NOT DOES_ENTITY_EXIST(buddy.ped) setup_buddy(buddy) ENDIF IF NOT IS_PED_INJURED(buddy.ped) SET_PED_HIGHLY_PERCEPTIVE(buddy.ped, true) set_current_ped_weapon(buddy.ped, buddy.weapon, true) ENDIF add_ped_for_dialogue(scripted_speech[0], 5, buddy.ped, "cook") IF NOT DOES_BLIP_EXIST(buddy.blip) buddy.blip = CREATE_BLIP_FOR_PED(buddy.ped) set_blip_display(buddy.blip, DISPLAY_BLIP) SET_BLIP_PRIORITY(buddy.blip, BLIPPRIORITY_HIGHEST) ENDIF // *****TEMP REMOVE //SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(buddy.ped, true) // ***** // @SBA - this is where cheng and translator get deleted if does_entity_exist(translator.ped) DELETE_PED(translator.ped) endif set_model_as_no_longer_needed(translator.model) if does_entity_exist(cheng.ped) DELETE_PED(cheng.ped) endif set_model_as_no_longer_needed(cheng.model) open_sequence_task(seq) task_seek_cover_to_cover_point(null, buddy_cover_point[0], <<1372.01, 3596.31, 37.97>>, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) SETUP_INITIAL_ENEMY_WAVE() // @SBA - create parked cars if not already created IF NOT DOES_ENTITY_EXIST(parked_cars[3]) IF HAS_MODEL_LOADED(phoenix) setup_parked_cars() ENDIF ENDIF SETUP_INITIAL_ENEMY_WAVE_PROPS() SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, true, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, -1.0) original_time = get_game_timer() if is_screen_faded_in() //end_cutscene_no_fade(false, false, 0, 0, 3000, false) //end_cutscene_no_fade(false, true, 90.0, 0, 3000, false) //end_cutscene_no_fade(false, false, (127.0963 - GET_ENTITY_HEADING(PLAYER_PED_ID())), -4.7568, 2000, false) else end_cutscene(false, 90.00, -12.0, false) endif trigger_music_event("CHN1_GAMEPLAY_STARTS") start_audio_scene("CHI_1_SHOOTOUT_01") SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "Start of Wave 0 shootout") mission_flow = wave_0_system endproc proc request_mocap_data_for_CHI_1_MCS_1() // @SBA - trying a larger distance to improve streaming at the destination //DEFAULT_CUTSCENE_LOAD_DIST, DEFAULT_CUTSCENE_UNLOAD_DIST, //mocap_streaming_system(<<1403.1777, 3597.2070, 34.00>>, 100, 120, "CHI_1_MCS_1") // force the load here // IF (GET_DISTANCE_BETWEEN_COORDS(<<1403.1777, 3597.2070, 34.00>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 60) // //IF NOT IS_CUTSCENE_ACTIVE() OR NOT HAS_CUTSCENE_LOADED() // //CPRINTLN(DEBUG_MISSION, "PLAYER < 60m: REQUESTING ARRIVAL CUTSCENE.") // REQUEST_CUTSCENE("CHI_1_MCS_1") // //ENDIF // ELSE // // longe range load if in a vehicle // IF (GET_DISTANCE_BETWEEN_COORDS(<<1403.1777, 3597.2070, 34.00>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 300) // AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // //CPRINTLN(DEBUG_MISSION, "PLAYER < 300m: REQUESTING ARRIVAL CUTSCENE.") // REQUEST_CUTSCENE("CHI_1_MCS_1") // ELSE // // unload if farther away or not in a vehicle // IF IS_CUTSCENE_ACTIVE() OR HAS_CUTSCENE_LOADED() // IF (GET_DISTANCE_BETWEEN_COORDS(<<1403.1777, 3597.2070, 34.00>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) > 320) // OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // //CPRINTLN(DEBUG_MISSION, "REMOVING ARRIVAL CUTSCENE.") // REMOVE_CUTSCENE() // ENDIF // ENDIF // ENDIF // ENDIF REQUEST_CUTSCENE("CHI_1_MCS_1") IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() CPRINTLN(DEBUG_MISSION, "Requesting arrival component variations") IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("trevor", PLAYER_PED_ID()) ENDIF IF NOT IS_PED_INJURED(cheng.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Tao", cheng.ped) ENDIF IF NOT IS_PED_INJURED(translator.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Taos_Translator", translator.ped) ENDIF IF NOT IS_PED_INJURED(buddy.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("cook", buddy.ped) ENDIF SET_CUTSCENE_PED_PROP_VARIATION("Cook", ANCHOR_EYES, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Tao", ANCHOR_EYES, 0) SET_CUTSCENE_PED_PROP_VARIATION("Taos_Translator", ANCHOR_EYES, 0) ENDIF endproc PROC HANDLE_STUFF_AS_PLAYER_APPROACHES_METH_LAB() FLOAT fDistance = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), (<<1403.1777, 3597.2070, 34.5>>)) // IF fDistance < 60.0 // IF NOT IS_NEW_LOAD_SCENE_ACTIVE() // IF NEW_LOAD_SCENE_START((<<1410.99, 3587.20, 34.0>>), NORMALISE_VECTOR(<<-0.58, 0.69, 0.45>>), 2750.0) // CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Meth Lab Arrival: Calling NEW_LOAD_SCENE_START.") // ENDIF // ENDIF // ELIF fDistance < 200.0 // AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // IF NOT IS_NEW_LOAD_SCENE_ACTIVE() // //IF NEW_LOAD_SCENE_START((<<1418.64, 3581.70, 35.85>>), NORMALISE_VECTOR(<<-0.69, 0.72, 0.03>>), 2750.0) // IF NEW_LOAD_SCENE_START((<<1410.99, 3587.20, 34.0>>), NORMALISE_VECTOR(<<-0.58, 0.69, 0.45>>), 2750.0) // CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Meth Lab Arrival: Calling NEW_LOAD_SCENE_START.") // ENDIF // ENDIF // ELSE // IF fDistance > 225.0 // OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // // stop load scene if needed so it doesn't stay loaded if player is joy riding, or out of vehicle // IF IS_NEW_LOAD_SCENE_ACTIVE() // NEW_LOAD_SCENE_STOP() // CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Meth Lab Arrival (too far): calling NEW_LOAD_SCENE_STOP.") // ENDIF // ENDIF // ENDIF IF NOT bClearCarGen IF fDistance < 225 CPRINTLN(DEBUG_MISSION, "DELETING OLD CAR GEN. Fetching SRL.") CLEAR_OLD_CAR_GEN() PREFETCH_SRL("chi_1_mcs_1") bClearCarGen = TRUE ENDIF ENDIF IF fDistance < 250 IF NOT IS_INTERIOR_READY(meth_interior) pin_interior_in_memory(meth_interior) ENDIF ELIF fDistance > 270 IF IS_INTERIOR_READY(meth_interior) UNPIN_INTERIOR(meth_interior) ENDIF ENDIF ENDPROC proc get_to_meth_lab_audio_scene_system() switch get_to_meth_lab_audio_scene_system_status case 0 if is_ped_sitting_in_any_vehicle(player_ped_id()) start_audio_scene("CHI_1_DRIVE_TO_LAB") get_to_meth_lab_audio_scene_system_status++ endif break case 1 break endswitch endproc /// PURPOSE: returns TRUE if the player is using third person view whilst in cover. func bool is_player_third_person_in_cover() if get_cam_view_mode_for_context(cam_view_mode_context_on_foot) != cam_view_mode_first_person return true else if get_is_using_fps_third_person_cover() return true endif endif return false endfunc proc chinese_get_to_meth_lab() KILL_PED_HIT_BY_PLAYERS_VEHICLE(cheng.ped) KILL_PED_HIT_BY_PLAYERS_VEHICLE(translator.ped) HANDLE_CHENGS_CRAZY_CAR_DANCING() HANDLE_CREATE_BAR_PATRONS() switch get_to_meth_lab_status case 0 FLOAT fDistance // clean up any loaded bar assets IF NOT bIsBarCleanedUp fDistance = GET_DISTANCE_BETWEEN_COORDS((<<2000.1245, 3059.5662, 46.0491>>), GET_ENTITY_COORDS(PLAYER_PED_ID())) IF fDistance > 50 CLEANUP_BAR() bIsBarCleanedUp = TRUE ELSE REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2170997 / 2195354 ENDIF ENDIF // @SBA - Need to request early so Chef can be properly registered with cutscene with his props in tact //REQUEST_METH_ARRIVAL_ASSETS() REQUEST_MODEL(buddy.model) HANDLE_SETUP_INITIAL_CHEF() //request_mocap_data_for_CHI_1_MCS_1() SET_DOOR_STATE(DOORNAME_METHLAB_F_L, DOORSTATE_FORCE_LOCKED_THIS_FRAME) SET_DOOR_STATE(DOORNAME_METHLAB_F_R, DOORSTATE_FORCE_LOCKED_THIS_FRAME) SET_DOOR_STATE(DOORNAME_METHLAB_R, DOORSTATE_FORCE_LOCKED_THIS_FRAME) meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") IF NOT IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) if is_player_at_location_with_buddies_any_means(locates_data, vArrivalMethLab, <<35.0, 35.0, 3.0>>, true, cheng.ped, translator.ped, null, "METH_GOD_8", "METH_GOD_12", "METH_GOD_13", "", "METH_GOD_14", false, true) // safety CLEANUP_BAR() get_to_meth_lab_status = 50 // not arrived yet ELSE HANDLE_STUFF_AS_PLAYER_APPROACHES_METH_LAB() ENDIF // in helicopter ELSE HANDLE_STUFF_AS_PLAYER_APPROACHES_METH_LAB() ENDIF //--DEBUG // if IS_INTERIOR_READY(meth_interior) // printstring("meth_interior READY") // printnl() // else // printstring("meth_interior NOT READY") // printnl() // endif //--END DEBUG get_to_meth_lab_dialogue_system() get_to_meth_lab_audio_scene_system() IF NOT bSetTaxiDropoff IF DOES_BLIP_EXIST(locates_data.LocationBlip) CPRINTLN(DEBUG_MISSION, "Meth Lab Arrival: Taxi dropoff set") // trying to reduce memory on drive to meth lab SET_REDUCE_PED_MODEL_BUDGET(TRUE) SET_REDUCE_VEHICLE_MODEL_BUDGET(TRUE) SET_TAXI_DROPOFF_LOCATION_FOR_BLIP(locates_data.LocationBlip, <<1447.9056, 3611.7273, 33.8160>>, 104.8207) bSetTaxiDropoff = TRUE ENDIF ENDIF break CASE 50 // separated this out from previous case so locate won't spam IF IS_SRL_LOADED() kill_any_conversation() clear_mission_locate_stuff(locates_data) // start lead-in cam camera_a = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1413.1581, 3586.2705, 35.3191>>, <<14.4926, -0.0000, 51.7688>>, 40.0, TRUE) camera_b = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1415.4323, 3585.3635, 35.4866>>, <<5.5924, -0.0000, 49.1407>>, 40.0) SET_FRONTEND_RADIO_ACTIVE(FALSE) request_mocap_data_for_CHI_1_MCS_1() get_to_meth_lab_status = 1 ENDIF BREAK case 1 // stop load scene if needed IF IS_NEW_LOAD_SCENE_ACTIVE() IF IS_NEW_LOAD_SCENE_LOADED() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Meth Lab Arrival: calling NEW_LOAD_SCENE_STOP.") ENDIF ENDIF // @SBA - unload dance dict IF NOT bDanceAnimDictUnloaded IF NOT IS_ENTITY_DEAD(cheng.ped) IF GET_SCRIPT_TASK_STATUS(cheng.ped, SCRIPT_TASK_PLAY_ANIM) != PERFORMING_TASK CPRINTLN(DEBUG_MISSION, "Removing ", sCrazyDanceDict, " for lead in.") REMOVE_ANIM_DICT(sCrazyDanceDict) bDanceAnimDictUnloaded = TRUE ENDIF ENDIF ENDIF // @SBA - load just what we need REQUEST_METH_ARRIVAL_ASSETS() HANDLE_SETUP_INITIAL_CHEF() request_mocap_data_for_CHI_1_MCS_1() IF HANDLE_LEAD_IN_SHOT_OF_ARRIVAL() END_SRL() REDUCE_AMBIENT_MODELS(TRUE) get_to_meth_lab_status++ ENDIF break case 2 IF DOES_ENTITY_EXIST(trevors_truck.veh) IF NOT IS_ENTITY_DEAD(trevors_truck.veh) IF IS_ENTITY_ON_SCREEN(trevors_truck.veh) REQUEST_VEHICLE_HIGH_DETAIL_MODEL(trevors_truck.veh) ENDIF ENDIF ENDIF // @SBA - load just what we need //request_shootout_assets() REQUEST_METH_ARRIVAL_ASSETS() HANDLE_SETUP_INITIAL_CHEF() request_mocap_data_for_CHI_1_MCS_1() // if is_shootout_assets_loaded() // @SBA - keep an eye on this in case it causes the lead in to take too long IF HAVE_METH_ARRIVAL_ASSETS_LOADED() and not is_any_text_being_displayed(locates_data) if HAS_CUTSCENE_LOADED_WITH_FAILSAFE() if start_new_cutscene_no_fade(false, true, false) CPRINTLN(DEBUG_MISSION, "*** ARRIVAL CUTSCENE STARTING ***") clear_prints() players_weapon_obj = CREATE_WEAPON_OBJECT(WEAPONTYPE_CARBINERIFLE, 500, <<1389.4, 3613.0, 39.7>>, true) GIVE_WEAPON_COMPONENT_TO_WEAPON_OBJECT(players_weapon_obj, WEAPONCOMPONENT_CARBINERIFLE_CLIP_01) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) register_entity_for_cutscene(PLAYER_PED_ID(), "trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_TWO) ENDIF IF NOT IS_PED_INJURED(cheng.ped) register_entity_for_cutscene(cheng.ped, "Tao", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF IF NOT IS_PED_INJURED(translator.ped) register_entity_for_cutscene(translator.ped, "Taos_Translator", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF IF NOT IS_PED_INJURED(buddy.ped) register_entity_for_cutscene(buddy.ped, "cook", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF IF DOES_ENTITY_EXIST(players_weapon_obj) register_entity_for_cutscene(players_weapon_obj, "Trevors_Weapon", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF //Ross W REPLAY_RECORD_BACK_FOR_TIME(10.0, 0.0) REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) start_cutscene() SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>) add_scenario_blocking_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>) set_ped_paths_in_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>, false) set_roads_in_area(<<434.6, 3477.0, 36.3>>, <<1605.5, 4247.2, -100.00>>, FALSE) set_roads_in_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>, false) meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) clear_player_wanted_level(player_id()) //g_allowmaxwantedlevelcheck = false set_max_wanted_level(0) set_create_random_cops(false) disable_dispatch_services() //SET_ALL_RANDOM_PEDS_FLEE(player_id(), true) //forces random hell billies not to attack the palyer as they can become violent. remove_blip(meth_lab_blip) SET_FRONTEND_RADIO_ACTIVE(TRUE) trigger_music_event("CHN1_START") original_time = get_game_timer() buddy_time = get_game_timer() get_to_meth_lab_status++ endif ELSE CPRINTLN(DEBUG_MISSION, "*** WAITING ON CUTSCENE TO LOAD ***") endif ELSE CPRINTLN(DEBUG_MISSION, "*** WAITING ON ASSEST/DIALOGUE ***") endif break case 3 if is_cutscene_playing() // @SBA - this is where cheng and translator get deleted if does_entity_exist(translator.ped) CPRINTLN(DEBUG_MISSION, "Unloading Translator") DELETE_PED(translator.ped) set_model_as_no_longer_needed(translator.model) endif if does_entity_exist(cheng.ped) CPRINTLN(DEBUG_MISSION, "Unloading Cheng") DELETE_PED(cheng.ped) set_model_as_no_longer_needed(cheng.model) endif clear_area(<<1403.1777, 3597.2070, 33.7417>>, 400.00, true) //repostion_players_last_vehicle(players_last_vehicle, <<1402.2213, 3597.3352, 33.8866>>, <<50.00, 50.00, 50.00>>, <<1402.2213, 3597.3352, 33.8866>>, 108.7487) RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(tbArrivalCutResolveVol.vMin, tbArrivalCutResolveVol.vMax, tbArrivalCutResolveVol.flWidth, vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) SET_MISSION_VEHICLE_GEN_VEHICLE(trevors_truck.veh, vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) if is_audio_scene_active("CHI_1_DRIVE_TO_LAB") stop_audio_scene("CHI_1_DRIVE_TO_LAB") endif // clean up cameras RENDER_SCRIPT_CAMS(FALSE, FALSE) IF DOES_CAM_EXIST(camera_a) SET_CAM_ACTIVE(camera_a, FALSE) DESTROY_CAM(camera_a) ENDIF IF DOES_CAM_EXIST(camera_b) SET_CAM_ACTIVE(camera_b, FALSE) DESTROY_CAM(camera_b) ENDIF // stop load scene if needed IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() CPRINTLN(DEBUG_MISSION, GET_THIS_SCRIPT_NAME(), ": Meth Lab Arrival (cutscene has started): calling NEW_LOAD_SCENE_STOP.") ENDIF // new cam camera_a = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1391.3059, 3601.0103, 39.5685>>, <<-12.6533, 0.0000, 111.6413>>, 50.0) get_to_meth_lab_status++ endif break case 4 INT iCutTime iCutTime = get_cutscene_time() CPRINTLN(DEBUG_MISSION, "Cutscene Time = ", iCutTime) // @SBA - trying to free up some more memory for the cutscene SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0) IF IS_CUTSCENE_PLAYING() if not WAS_CUTSCENE_SKIPPED() if not has_label_been_triggered("CHN1_ICE_BIN") if prepare_music_event("CHN1_ICE_BIN") if iCutTime >= 23498 trigger_music_event("CHN1_ICE_BIN") set_label_as_triggered("CHN1_ICE_BIN", true) //script_assert("test") endif endif else if not IS_MUSIC_ONESHOT_PLAYING() prepare_music_event("CHN1_GAMEPLAY_STARTS") endif endif // request assets IF iCutTime >= 40000 REQUEST_FIGHT_ASSETS() IN_CASE_OF_ATTACK_BREAK_GLASS() ENDIF if iCutTime >= 41680 if not has_label_been_triggered("CHN1_NOW") trigger_music_event("CHN1_NOW") set_label_as_triggered("CHN1_NOW", true) endif endif // @SBA set these up here, as they are now visible out the upstairs window IF iCutTime > 45000 IF NOT DOES_ENTITY_EXIST(parked_cars[3]) IF HAS_MODEL_LOADED(phoenix) setup_parked_cars() ENDIF ENDIF ENDIF IF iCutTime > 45100 AND NOT bInitialWavePropsMade IF HAVE_FIGHT_ASSETS_LOADED() CPRINTLN(DEBUG_MISSION, "Starting Wave Props Made") SETUP_INITIAL_ENEMY_WAVE_PROPS() SET_CUTSCENE_CAN_BE_SKIPPED(FALSE) bInitialWavePropsMade = TRUE ELSE CPRINTLN(DEBUG_MISSION, "PROPS: WAITING FOR STARTING WAVE ASSESTS TO FINISH LOADING...") ENDIF ENDIF IF iCutTime > 45250 AND NOT bStartedInitialWave IF HAVE_FIGHT_ASSETS_LOADED() IF SETUP_INITIAL_ENEMY_WAVE_IN_STAGES() CPRINTLN(DEBUG_MISSION, "Starting Wave Made") bStartedInitialWave = TRUE ENDIF ELSE CPRINTLN(DEBUG_MISSION, "ENEMIES: WAITING FOR STARTING WAVE ASSESTS TO FINISH LOADING...") ENDIF ENDIF if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevors_Weapon") if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_object_to_ped(players_weapon_obj, player_ped_id()) else if does_entity_exist(players_weapon_obj) delete_object(players_weapon_obj) endif if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("trevor", GET_PLAYER_PED_MODEL(char_trevor)) CPRINTLN(DEBUG_MISSION, "Arrival cutscene: exit for Trevor") // SET_GAMEPLAY_CAM_RELATIVE_HEADING(127.0963 - GET_ENTITY_HEADING(PLAYER_PED_ID())) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(-4.7568) SETUP_PLAYER_POST_ARRIVAL_CUTSCENE() endif // Final cutscene cam seems to be too far from where the game cam can be // so doing a blend to smooth the pop if CAN_SET_EXIT_STATE_FOR_CAMERA() CPRINTLN(DEBUG_MISSION, "Arrival cutscene: exit for camera") if is_player_third_person_in_cover() IF DOES_CAM_EXIST(camera_a) CPRINTLN(DEBUG_MISSION, "Starting blend cam") set_cam_active(camera_a, true) render_script_cams(true, false) ENDIF ENDIF if is_player_third_person_in_cover() SET_GAMEPLAY_CAM_RELATIVE_HEADING(113.3477 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-12.500) ELSE SET_GAMEPLAY_CAM_RELATIVE_HEADING(102.8477 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.600) ENDIF //IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON //first person camera with third person in cover //the gameplay camera will not update when player control is off. //fps_with_thrid_person_in_cover the camera exit state is early and trevors exit state //triggers 0.5 seconds later with his cover task. //if player control is on. Trevors cover task updates the gameplay camera thus //the relative gameplay camera heading returns to 0. As a result we can only unlock the //player control if in full first person mode. if not is_player_third_person_in_cover() SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF endif else if does_entity_exist(translator.ped) CPRINTLN(DEBUG_MISSION, "SKIPPED: Unloading Translator") DELETE_PED(translator.ped) endif set_model_as_no_longer_needed(translator.model) if does_entity_exist(cheng.ped) CPRINTLN(DEBUG_MISSION, "SKIPPED: Unloading Cheng") DELETE_PED(cheng.ped) endif set_model_as_no_longer_needed(cheng.model) set_cutscene_fade_values(false, false, true, false) REQUEST_FIGHT_ASSETS() get_to_meth_lab_status++ endif ELSE SET_CUTSCENE_CAN_BE_SKIPPED(TRUE) get_to_meth_lab_status = 22 endif if not is_player_third_person_in_cover() SET_GAMEPLAY_CAM_RELATIVE_HEADING(102.8477 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.600) endif break // IF SKIPPED case 5 REQUEST_FIGHT_ASSETS() if IS_CUTSCENE_PLAYING() if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevors_Weapon") if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_object_to_ped(players_weapon_obj, player_ped_id()) else if does_entity_exist(players_weapon_obj) delete_object(players_weapon_obj) endif if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif endif else SETUP_PLAYER_POST_ARRIVAL_CUTSCENE() IN_CASE_OF_ATTACK_BREAK_GLASS() while not is_interior_ready(meth_interior) or not prepare_music_event("CHN1_GAMEPLAY_STARTS") CPRINTLN(DEBUG_MISSION, "*** WAITING FOR INTERIOR AND MUSIC TO FINISH LOADING ***") wait(0) endwhile // shouldn't need to do this, but just in case IF DOES_CAM_EXIST(camera_a) SET_CAM_ACTIVE(camera_a, FALSE) DESTROY_CAM(camera_a) ENDIF trigger_music_event("CHN1_CS_SKIP") mission_fail_checks()//checks all mission entities alive. get_to_meth_lab_status = 23 endif break // NO SKIP CASE 22 // SETUP_PLAYER_POST_ARRIVAL_CUTSCENE() END_CUTSCENE_BASIC() IF DOES_CAM_EXIST(camera_a) DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE() //-- first person camera with third person in cover //blends out earlier from the mocap cutscene. Therefore the camera exit will trigger before the //player exit so the relative game play camera will change when the palyer is given the cover task. //The relative gameplay cam will now be 0. As a result we need to set it again before the interp //back to gameplay. SET_GAMEPLAY_CAM_RELATIVE_HEADING(102.8477 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.600) //-- render_script_cams(FALSE, TRUE, 750) ENDIF REPLAY_STOP_EVENT() get_to_meth_lab_status++ BREAk // @SBA - ensure assets have loaded before continuing CASE 23 REQUEST_FIGHT_ASSETS() CPRINTLN(DEBUG_MISSION, "*** WAITING FOR FIGHT ASSETS TO FINISH LOADING ***") IF HAVE_FIGHT_ASSETS_LOADED() // @SBA - return to normal REDUCE_AMBIENT_MODELS(FALSE) setup_start_of_shootout() ENDIF BREAK endswitch endproc proc meth_lab_vehicle_recording() switch vehicle_recording_system_status case 0 // for i = 0 to 1 // wave_0_enemy_vehicle[i].veh = create_vehicle(wave_0_enemy_vehicle[i].model, wave_0_enemy_vehicle[i].pos, wave_0_enemy_vehicle[i].heading) // set_vehicle_doors_locked(wave_0_enemy_vehicle[i].veh, vehiclelock_locked) // start_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh, wave_0_enemy_vehicle[i].recording_number, "lkmethlab") // skip_to_end_and_stop_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh) // endfor // // for i = 5 to 6 // wave_2_enemy_vehicle[i].veh = create_vehicle(wave_2_enemy_vehicle[i].model, wave_2_enemy_vehicle[i].pos, wave_2_enemy_vehicle[i].heading) // set_vehicle_doors_locked(wave_2_enemy_vehicle[i].veh, vehiclelock_locked) // start_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, wave_2_enemy_vehicle[i].recording_number, "lkmethlab") // skip_to_end_and_stop_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh) // endfor for i = 5 to 5 wave_2_enemy_vehicle[i].veh = create_vehicle(wave_2_enemy_vehicle[i].model, wave_2_enemy_vehicle[i].pos, wave_2_enemy_vehicle[i].heading) SET_VEHICLE_DIRT_LEVEL(wave_2_enemy_vehicle[i].veh, 13) set_vehicle_doors_locked(wave_2_enemy_vehicle[i].veh, vehiclelock_locked) start_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, wave_2_enemy_vehicle[i].recording_number, "lkmethlab") skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, (GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(19, "lkmethlab") - 100)) set_entity_collision(wave_2_enemy_vehicle[i].veh, false) endfor wait(0) pause_playback_recorded_vehicle(wave_2_enemy_vehicle[5].veh) // comment back in for recording uber vehicles for wave 1 // wave_1_uber_vehicle = create_vehicle(pcj, <<1118.8160, 3541.5474, 34.1372>>, 272.0098) // SET_ENTITY_VISIBLE(wave_1_uber_vehicle, false) // SET_ENTITY_COLLISION(wave_1_uber_vehicle, false) // SET_ENTITY_PROOFS(wave_1_uber_vehicle, true, true, true, true, true) // // INITIALISE_UBER_PLAYBACK("lkmethlab", true) // load_uber_data() // bCreateAllWaitingCars = TRUE // start_playback_recorded_vehicle(wave_1_uber_vehicle, 013, "lkmethlab") // setup_parked_cars() for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor vehicle_recording_system_status++ break case 1 #if is_debug_build DISPLAY_PLAYBACK_RECORDED_VEHICLE(wave_2_enemy_vehicle[2].veh, rdm_wholeline) #endif break case 2 break endswitch endproc //outside hicks bar proc load_trip_skip_data_0() request_start_of_mission_assets() //REQUEST_BAR_PATRON_ASSETS() IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1999.1615, 3057.8936, 46.049>>) ENDIF while not is_start_of_mission_assets_requested() //AND NOT HAVE_BAR_PATRON_ASSETS_LOADED() CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_0 not loaded") wait(0) endwhile create_start_of_mission_entities(false) END_REPLAY_SETUP() IF NOT IS_PED_INJURED(player_ped_id()) clear_ped_tasks_immediately(player_ped_id()) force_ped_motion_state(player_ped_id(), ms_on_foot_walk, false) SIMULATE_PLAYER_INPUT_GAIT(player_id(), pedmove_walk, 300) ENDIF SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "Mission start") if is_screen_faded_out() end_cutscene() else end_cutscene_no_fade() endif INIT_CHENGS_CRAZY_CAR_DANCING() // @SBA - not creating these guys on restart - was causing asserts I couldn't seem to fix bBarPatronsCreated = TRUE mission_flow = get_to_meth_lab endproc //wave 0 proc load_trip_skip_data_1() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(buddy.model) request_model(wave_0_enemy[0].model) request_model(wave_0_enemy[1].model) request_model(get_player_veh_model(char_trevor)) request_model(sadler) request_model(dubsta2) request_model(phoenix) request_model(explosive_barrels[0].model) request_model(bins[0].model) request_model(cover_box.model) request_model(pcj) request_model(get_weapontype_model(weapontype_carbinerifle)) request_model(get_weapontype_model(weapontype_grenadelauncher)) request_model(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) request_weapon_asset(WEAPONTYPE_carbinerifle) request_weapon_asset(WEAPONTYPE_grenadelauncher) request_weapon_asset(WEAPONTYPE_ASSAULTRIFLE) request_vehicle_recording(001, "lkmethlab") request_vehicle_recording(002, "lkmethlab") request_vehicle_recording(003, "lkmethlab") // request_vehicle_recording(004, "lkmethlab") // request_vehicle_recording(005, "lkmethlab") // request_vehicle_recording(006, "lkmethlab") request_vehicle_recording(007, "lkmethlab") request_vehicle_recording(008, "lkmethlab") request_vehicle_recording(009, "lkmethlab") request_vehicle_recording(010, "lkmethlab") request_vehicle_recording(011, "lkmethlab") request_vehicle_recording(012, "lkmethlab") // request_vehicle_recording(013, "lkmethlab") // request_vehicle_recording(014, "lkmethlab") // request_vehicle_recording(015, "lkmethlab") // request_vehicle_recording(016, "lkmethlab") request_vehicle_recording(017, "lkmethlab") request_vehicle_recording(018, "lkmethlab") request_vehicle_recording(019, "lkmethlab") request_vehicle_recording(020, "lkmethlab") request_vehicle_recording(021, "lkmethlab") // request_vehicle_recording(030, "lkmethlab") // request_vehicle_recording(031, "lkmethlab") // request_vehicle_recording(032, "lkmethlab") REQUEST_WAYPOINT_RECORDING("methlab1") // REQUEST_WAYPOINT_RECORDING("methlab2") REQUEST_WAYPOINT_RECORDING("methlab3") REQUEST_WAYPOINT_RECORDING("methlab4") REQUEST_WAYPOINT_RECORDING("methlab5") // REQUEST_WAYPOINT_RECORDING("methlab6") REQUEST_WAYPOINT_RECORDING("methlab7") // REQUEST_WAYPOINT_RECORDING("methlab8") // REQUEST_WAYPOINT_RECORDING("methlab9") request_anim_dict("MissChinese1") meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(buddy.model) or not has_model_loaded(wave_0_enemy[0].model) or not has_model_loaded(wave_0_enemy[1].model) or not has_model_loaded(get_player_veh_model(char_trevor)) or not has_model_loaded(sadler) or not has_model_loaded(dubsta2) or not has_model_loaded(phoenix) or not has_model_loaded(explosive_barrels[0].model) or not has_model_loaded(bins[0].model) or not has_model_loaded(cover_box.model) or not has_model_loaded(pcj) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_carbinerifle)) or not has_model_loaded(get_weapontype_model(weapontype_grenadelauncher)) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) or not has_weapon_asset_loaded(WEAPONTYPE_carbinerifle) or not has_weapon_asset_loaded(WEAPONTYPE_grenadelauncher) or not has_weapon_asset_loaded(WEAPONTYPE_ASSAULTRIFLE) or not has_vehicle_recording_been_loaded(001, "lkmethlab") or not has_vehicle_recording_been_loaded(002, "lkmethlab") or not has_vehicle_recording_been_loaded(003, "lkmethlab") // or not has_vehicle_recording_been_loaded(004, "lkmethlab") // or not has_vehicle_recording_been_loaded(005, "lkmethlab") // or not has_vehicle_recording_been_loaded(006, "lkmethlab") or not has_vehicle_recording_been_loaded(007, "lkmethlab") or not has_vehicle_recording_been_loaded(008, "lkmethlab") or not has_vehicle_recording_been_loaded(009, "lkmethlab") or not has_vehicle_recording_been_loaded(010, "lkmethlab") or not has_vehicle_recording_been_loaded(011, "lkmethlab") or not has_vehicle_recording_been_loaded(012, "lkmethlab") // or not has_vehicle_recording_been_loaded(013, "lkmethlab") // or not has_vehicle_recording_been_loaded(014, "lkmethlab") // or not has_vehicle_recording_been_loaded(015, "lkmethlab") // or not has_vehicle_recording_been_loaded(016, "lkmethlab") or not has_vehicle_recording_been_loaded(017, "lkmethlab") or not has_vehicle_recording_been_loaded(018, "lkmethlab") or not has_vehicle_recording_been_loaded(019, "lkmethlab") or not has_vehicle_recording_been_loaded(020, "lkmethlab") or not has_vehicle_recording_been_loaded(021, "lkmethlab") // or not has_vehicle_recording_been_loaded(030, "lkmethlab") // or not has_vehicle_recording_been_loaded(031, "lkmethlab") // or not has_vehicle_recording_been_loaded(032, "lkmethlab") or not get_is_waypoint_recording_loaded("methlab1") // or not get_is_waypoint_recording_loaded("methlab2") or not get_is_waypoint_recording_loaded("methlab3") or not get_is_waypoint_recording_loaded("methlab4") or not get_is_waypoint_recording_loaded("methlab5") // or not get_is_waypoint_recording_loaded("methlab6") or not get_is_waypoint_recording_loaded("methlab7") // or not get_is_waypoint_recording_loaded("methlab8") // or not get_is_waypoint_recording_loaded("methlab9") or not has_anim_dict_loaded("MissChinese1") or not is_interior_ready(meth_interior) CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_1 not loaded") wait(0) endwhile clear_player_wanted_level(player_id()) set_max_wanted_level(0) set_create_random_cops(false) disable_dispatch_services() SET_ALL_RANDOM_PEDS_FLEE(player_id(), true) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>) add_scenario_blocking_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>) set_ped_paths_in_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>, false) set_roads_in_area(<<434.6, 3477.0, 36.3>>, <<1605.5, 4247.2, -100.00>>, FALSE) set_roads_in_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>, false) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, true, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, -1.0) // @SBA - opening outer doors to help player follow Chef SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, TRUE, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, TRUE, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, TRUE, 0.0, 0.0, -1.0) clear_area(<<1998.2826, 3058.0435, 46.0491>>, 10000.00, true) remove_decals_in_range(<<1998.2826, 3058.0435, 46.0491>>, 10000.00) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(player_ped_id(), vTrevorWindowStartPos) // @SBA - adjusting start position slightly. OLD VALUE = <<1389.5963, 3600.4568, 37.9418>>) SET_ENTITY_HEADING(player_ped_id(), 21.5294) ENDIF //player should alway have the carbine rifle here if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_to_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, false) else if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif set_current_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE, true) // @SBA - player vehicle RECREATE_PLAYERS_VEHICLE(vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) setup_buddy(buddy) add_ped_for_dialogue(scripted_speech[0], 5, buddy.ped, "cook") set_current_ped_weapon(buddy.ped, buddy.weapon, true) // *****TEMP REMOVE //SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(buddy.ped, true) // ***** open_sequence_task(seq) task_seek_cover_to_cover_point(null, buddy_cover_point[0], <<1372.01, 3596.31, 37.97>>, -1) close_sequence_task(seq) task_perform_sequence(buddy.ped, seq) clear_sequence_task(seq) for i = 0 to 1 SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh, wave_0_enemy_vehicle[i].recording_number, "lkmethlab") if i = 0 skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh, 3000) //4000 set_vehicle_colours(wave_0_enemy_vehicle[i].veh, 0, 0) elif i = 1 skip_time_in_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh, 4500) //5500 set_vehicle_colours(wave_0_enemy_vehicle[i].veh, 10, 10) endif endfor setup_enemy(wave_0_enemy[0]) setup_enemy(wave_0_enemy[1]) setup_enemy_in_vehicle(wave_0_enemy[2], wave_0_enemy_vehicle[0].veh) setup_enemy_in_vehicle(wave_0_enemy[3], wave_0_enemy_vehicle[0].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[4], wave_0_enemy_vehicle[0].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_enemy[5], wave_0_enemy_vehicle[1].veh) setup_enemy_in_vehicle(wave_0_enemy[6], wave_0_enemy_vehicle[1].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_enemy[7], wave_0_enemy_vehicle[1].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_enemy[8], wave_0_enemy_vehicle[1].veh, vs_back_right) setup_parked_cars() for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor for i = 0 to count_of(explosive_barrels) - 1 explosive_barrels[i].obj = create_object_no_offset(explosive_barrels[i].model, explosive_barrels[i].pos) SET_ENTITY_ROTATION(explosive_barrels[i].obj, explosive_barrels[i].rot) endfor cover_box.obj = create_object_no_offset(cover_box.model, cover_box.pos) freeze_entity_position(cover_box.obj, true) SET_ENTITY_ROTATION(cover_box.obj, cover_box.rot) IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1389.5963, 3600.4568, 37.9419>>) ENDIF END_REPLAY_SETUP() task_put_ped_directly_into_cover(player_ped_id(), vTrevorWindowStartPos, -1, false, 0.0, true, false, players_cover_point) // @SBA - adjusting start position slightly. OLD VALUE = <<1389.63, 3600.41, 37.94>> force_ped_ai_and_animation_update(player_ped_id(), true) SET_PED_USING_ACTION_MODE(player_ped_id(), true) IN_CASE_OF_ATTACK_BREAK_GLASS() original_time = get_game_timer() buddy_time = get_game_timer() trigger_music_event("CHN1_WAVE_ZERO_RT") start_audio_scene("CHI_1_SHOOTOUT_01") end_cutscene_no_fade(false, TRUE, 90, -12, 500, false) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "Start of Wave 0 shootout") mission_flow = wave_0_system endproc //wave 0 outside enemies proc load_trip_skip_data_2() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(buddy.model) request_model(wave_0_enemy[0].model) request_model(wave_0_enemy[1].model) request_model(get_player_veh_model(char_trevor)) request_model(sadler) request_model(dubsta2) request_model(phoenix) request_model(explosive_barrels[0].model) request_model(bins[0].model) request_model(cover_box.model) request_model(pcj) request_model(get_weapontype_model(weapontype_carbinerifle)) request_model(get_weapontype_model(weapontype_grenadelauncher)) request_model(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) request_weapon_asset(WEAPONTYPE_carbinerifle) request_weapon_asset(WEAPONTYPE_grenadelauncher) request_weapon_asset(WEAPONTYPE_ASSAULTRIFLE) request_vehicle_recording(001, "lkmethlab") request_vehicle_recording(002, "lkmethlab") request_vehicle_recording(003, "lkmethlab") // request_vehicle_recording(004, "lkmethlab") // request_vehicle_recording(005, "lkmethlab") // request_vehicle_recording(006, "lkmethlab") request_vehicle_recording(007, "lkmethlab") request_vehicle_recording(008, "lkmethlab") request_vehicle_recording(009, "lkmethlab") request_vehicle_recording(010, "lkmethlab") request_vehicle_recording(011, "lkmethlab") request_vehicle_recording(012, "lkmethlab") // request_vehicle_recording(013, "lkmethlab") // request_vehicle_recording(014, "lkmethlab") // request_vehicle_recording(015, "lkmethlab") // request_vehicle_recording(016, "lkmethlab") request_vehicle_recording(017, "lkmethlab") request_vehicle_recording(018, "lkmethlab") request_vehicle_recording(019, "lkmethlab") request_vehicle_recording(020, "lkmethlab") request_vehicle_recording(021, "lkmethlab") // request_vehicle_recording(030, "lkmethlab") // request_vehicle_recording(031, "lkmethlab") // request_vehicle_recording(032, "lkmethlab") REQUEST_WAYPOINT_RECORDING("methlab1") // REQUEST_WAYPOINT_RECORDING("methlab2") REQUEST_WAYPOINT_RECORDING("methlab3") REQUEST_WAYPOINT_RECORDING("methlab4") REQUEST_WAYPOINT_RECORDING("methlab5") // REQUEST_WAYPOINT_RECORDING("methlab6") REQUEST_WAYPOINT_RECORDING("methlab7") // REQUEST_WAYPOINT_RECORDING("methlab8") // REQUEST_WAYPOINT_RECORDING("methlab9") request_anim_dict("MissChinese1") meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(buddy.model) or not has_model_loaded(wave_0_enemy[0].model) or not has_model_loaded(wave_0_enemy[1].model) or not has_model_loaded(get_player_veh_model(char_trevor)) or not has_model_loaded(sadler) or not has_model_loaded(dubsta2) or not has_model_loaded(phoenix) or not has_model_loaded(explosive_barrels[0].model) or not has_model_loaded(bins[0].model) or not has_model_loaded(cover_box.model) or not has_model_loaded(pcj) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_carbinerifle)) or not has_model_loaded(get_weapontype_model(weapontype_grenadelauncher)) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_ASSAULTRIFLE)) or not has_weapon_asset_loaded(WEAPONTYPE_carbinerifle) or not has_weapon_asset_loaded(WEAPONTYPE_grenadelauncher) or not has_weapon_asset_loaded(WEAPONTYPE_ASSAULTRIFLE) or not has_vehicle_recording_been_loaded(001, "lkmethlab") or not has_vehicle_recording_been_loaded(002, "lkmethlab") or not has_vehicle_recording_been_loaded(003, "lkmethlab") // or not has_vehicle_recording_been_loaded(004, "lkmethlab") // or not has_vehicle_recording_been_loaded(005, "lkmethlab") // or not has_vehicle_recording_been_loaded(006, "lkmethlab") or not has_vehicle_recording_been_loaded(007, "lkmethlab") or not has_vehicle_recording_been_loaded(008, "lkmethlab") or not has_vehicle_recording_been_loaded(009, "lkmethlab") or not has_vehicle_recording_been_loaded(010, "lkmethlab") or not has_vehicle_recording_been_loaded(011, "lkmethlab") or not has_vehicle_recording_been_loaded(012, "lkmethlab") // or not has_vehicle_recording_been_loaded(013, "lkmethlab") // or not has_vehicle_recording_been_loaded(014, "lkmethlab") // or not has_vehicle_recording_been_loaded(015, "lkmethlab") // or not has_vehicle_recording_been_loaded(016, "lkmethlab") or not has_vehicle_recording_been_loaded(017, "lkmethlab") or not has_vehicle_recording_been_loaded(018, "lkmethlab") or not has_vehicle_recording_been_loaded(019, "lkmethlab") or not has_vehicle_recording_been_loaded(020, "lkmethlab") or not has_vehicle_recording_been_loaded(021, "lkmethlab") // or not has_vehicle_recording_been_loaded(030, "lkmethlab") // or not has_vehicle_recording_been_loaded(031, "lkmethlab") // or not has_vehicle_recording_been_loaded(032, "lkmethlab") or not get_is_waypoint_recording_loaded("methlab1") // or not get_is_waypoint_recording_loaded("methlab2") or not get_is_waypoint_recording_loaded("methlab3") or not get_is_waypoint_recording_loaded("methlab4") or not get_is_waypoint_recording_loaded("methlab5") // or not get_is_waypoint_recording_loaded("methlab6") or not get_is_waypoint_recording_loaded("methlab7") // or not get_is_waypoint_recording_loaded("methlab8") // or not get_is_waypoint_recording_loaded("methlab9") or not has_anim_dict_loaded("MissChinese1") or not is_interior_ready(meth_interior) CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_2 not loaded") wait(0) endwhile clear_player_wanted_level(player_id()) //g_allowmaxwantedlevelcheck = false set_max_wanted_level(0) set_create_random_cops(false) disable_dispatch_services() SET_ALL_RANDOM_PEDS_FLEE(player_id(), true) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>) add_scenario_blocking_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>) set_roads_in_area(<<434.6, 3477.0, 36.3>>, <<1605.5, 4247.2, -100.00>>, FALSE) set_roads_in_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>, false) clear_area(<<1390.8401, 3601.1016, 37.9419>>, 1000, true) //front of shop doors SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, true, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, -1.0) //gates outside methlab SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_arm_gate_l, <<1372.27, 3608.99, 35.51>>, true, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_arm_gate_l, <<1378.05, 3611.09, 35.51>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_arm_gate_l, <<1372.27, 3608.99, 35.51>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_arm_gate_l, <<1378.05, 3611.09, 35.51>>, false, 0.0, 0.0, -1.0) // @SBA - opening outer doors to help player follow Chef SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, TRUE, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, TRUE, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, TRUE, 0.0, 0.0, -1.0) setup_parked_cars() for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor for i = 0 to count_of(explosive_barrels) - 1 explosive_barrels[i].obj = create_object_no_offset(explosive_barrels[i].model, explosive_barrels[i].pos) SET_ENTITY_ROTATION(explosive_barrels[i].obj, explosive_barrels[i].rot) endfor cover_box.obj = create_object_no_offset(cover_box.model, cover_box.pos) freeze_entity_position(cover_box.obj, true) SET_ENTITY_ROTATION(cover_box.obj, cover_box.rot) IF g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_BOTH_CARS_DEAD OR g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_ONLY_CAR1_ALIVE wave_0_enemy_vehicle[0].been_destroyed = TRUE ENDIF IF g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_BOTH_CARS_DEAD OR g_replay.iReplayInt[PLAYER_DESTROYED_VEHICLES] = WAVE0_ONLY_CAR0_ALIVE wave_0_enemy_vehicle[1].been_destroyed = TRUE ENDIF for i = 0 to 2 IF NOT wave_0_enemy_vehicle[i].been_destroyed SETUP_ENEMY_VEHICLE(wave_0_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh, wave_0_enemy_vehicle[i].recording_number, "lkmethlab") skip_to_end_and_stop_playback_recorded_vehicle(wave_0_enemy_vehicle[i].veh) // @SBA - set colors if i = 0 set_vehicle_colours(wave_0_enemy_vehicle[i].veh, 0, 0) REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[i]) elif i = 1 set_vehicle_colours(wave_0_enemy_vehicle[i].veh, 10, 10) REMOVE_VEHICLE_BLIP(wave_0_enemy_vehicle[i]) endif ENDIF endfor setup_enemy_in_vehicle(wave_0_inside_enemy[0], wave_0_enemy_vehicle[2].veh) setup_enemy_in_vehicle(wave_0_inside_enemy[1], wave_0_enemy_vehicle[2].veh, vs_front_right) setup_enemy_in_vehicle(wave_0_inside_enemy[2], wave_0_enemy_vehicle[2].veh, vs_back_left) setup_enemy_in_vehicle(wave_0_inside_enemy[3], wave_0_enemy_vehicle[2].veh, vs_back_right) for i = 0 to count_of(wave_0_inside_enemy) - 1 SET_COMBAT_FLOAT(wave_0_inside_enemy[i].ped, CCF_WEAPON_ACCURACY, 0.10) endfor clear_ped_tasks_immediately(player_ped_id()) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(player_ped_id(), <<1390.8401, 3601.1016, 37.9419>>) SET_ENTITY_HEADING(player_ped_id(), 323.8041) ENDIF if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_to_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, false) else if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif setup_weapon_for_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, true, true, false) // @SBA - trying this // CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, <<1409.9990, 3600.4973, 33.8676>>, 108.7487, false) // set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) // SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) // set_vehicle_engine_on(trevors_truck.veh, false, true) RECREATE_PLAYERS_VEHICLE(vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) buddy.pos = <<1387.5570, 3607.2000, 37.9419>> buddy.heading = 244.5938 setup_buddy(buddy) set_current_ped_weapon(buddy.ped, weapontype_carbinerifle, true) add_ped_for_dialogue(scripted_speech[0], 5, buddy.ped, "cook") task_look_at_entity(buddy.ped, player_ped_id(), -1) IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1389.5963, 3600.4568, 37.9419>>) ENDIF END_REPLAY_SETUP() SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) // re-break glass object_index glass_window IF NOT DOES_ENTITY_EXIST(glass_window) glass_window = get_closest_object_of_type(<<1389.11, 3600.43, 39.51>>, 2.0, v_ret_ml_win5) ENDIF //crack type //2 = shoutgun //3 = explosion break_entity_glass(glass_window, <<1389.16, 3600.3, 39.5>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 3, TRUE) break_entity_glass(glass_window, <<1388.8, 3600.9, 39.0>>, 2.0, <<0.0, 1.0, 0.0>>, 1100, 2, TRUE) break_entity_glass(glass_window, <<1389.3, 3600.1, 39.7>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 2, TRUE) SET_OBJECT_AS_NO_LONGER_NEEDED(glass_window) //fakes all the wave_0_enemy as dead. for i = 0 to count_of(wave_0_enemy) - 1 wave_0_enemy[i].created = true endfor wave_0_dialogue_system_status = 22 wave_0_buddy_ai_system_status = 1 wave_0_assisted_nodes_system_status = 1 wave_0_master_flow_system_status = 50 // dialogue set properly here bChefRunsToBackStairs = TRUE mission_flow = wave_0_system original_time = get_game_timer() trigger_music_event("CHN1_OUTSIDE_RT") SET_GAMEPLAY_CAM_RELATIVE_HEADING(30) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2, "Wave 0 outside enemies") endproc //wave 2 after grenade launcher cutscene proc load_trip_skip_data_3() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(buddy.model) request_model(wave_0_enemy[0].model) request_model(wave_0_enemy[1].model) request_model(get_player_veh_model(char_trevor)) request_model(sadler) request_model(dubsta2) request_model(phoenix) request_model(explosive_barrels[0].model) request_model(bins[0].model) request_model(cover_box.model) request_model(pcj) request_model(c4[0].model) request_model(get_weapontype_model(weapontype_carbinerifle)) request_weapon_asset(weapontype_carbinerifle) request_model(get_weapontype_model(weapontype_grenadelauncher)) request_weapon_asset(WEAPONTYPE_grenadelauncher) request_vehicle_recording(001, "lkmethlab") request_vehicle_recording(002, "lkmethlab") request_vehicle_recording(003, "lkmethlab") // request_vehicle_recording(004, "lkmethlab") // request_vehicle_recording(005, "lkmethlab") // request_vehicle_recording(006, "lkmethlab") request_vehicle_recording(007, "lkmethlab") request_vehicle_recording(008, "lkmethlab") request_vehicle_recording(009, "lkmethlab") request_vehicle_recording(010, "lkmethlab") request_vehicle_recording(011, "lkmethlab") request_vehicle_recording(012, "lkmethlab") // request_vehicle_recording(013, "lkmethlab") // request_vehicle_recording(014, "lkmethlab") // request_vehicle_recording(015, "lkmethlab") // request_vehicle_recording(016, "lkmethlab") request_vehicle_recording(017, "lkmethlab") request_vehicle_recording(018, "lkmethlab") request_vehicle_recording(019, "lkmethlab") request_vehicle_recording(020, "lkmethlab") request_vehicle_recording(021, "lkmethlab") // request_vehicle_recording(030, "lkmethlab") // request_vehicle_recording(031, "lkmethlab") // request_vehicle_recording(032, "lkmethlab") REQUEST_WAYPOINT_RECORDING("methlab1") // REQUEST_WAYPOINT_RECORDING("methlab2") REQUEST_WAYPOINT_RECORDING("methlab3") REQUEST_WAYPOINT_RECORDING("methlab4") REQUEST_WAYPOINT_RECORDING("methlab5") // REQUEST_WAYPOINT_RECORDING("methlab6") REQUEST_WAYPOINT_RECORDING("methlab7") // REQUEST_WAYPOINT_RECORDING("methlab8") // REQUEST_WAYPOINT_RECORDING("methlab9") request_anim_dict("MissChinese1") meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(buddy.model) or not has_model_loaded(wave_0_enemy[0].model) or not has_model_loaded(wave_0_enemy[1].model) or not has_model_loaded(get_player_veh_model(char_trevor)) or not has_model_loaded(sadler) or not has_model_loaded(dubsta2) or not has_model_loaded(phoenix) or not has_model_loaded(explosive_barrels[0].model) or not has_model_loaded(bins[0].model) or not has_model_loaded(cover_box.model) or not has_model_loaded(pcj) or not has_model_loaded(c4[0].model) or not has_model_loaded(get_weapontype_model(weapontype_carbinerifle)) or not has_weapon_asset_loaded(weapontype_carbinerifle) or not has_model_loaded(get_weapontype_model(weapontype_grenadelauncher)) or not has_weapon_asset_loaded(weapontype_grenadelauncher) or not has_vehicle_recording_been_loaded(001, "lkmethlab") or not has_vehicle_recording_been_loaded(002, "lkmethlab") or not has_vehicle_recording_been_loaded(003, "lkmethlab") // or not has_vehicle_recording_been_loaded(004, "lkmethlab") // or not has_vehicle_recording_been_loaded(005, "lkmethlab") // or not has_vehicle_recording_been_loaded(006, "lkmethlab") or not has_vehicle_recording_been_loaded(007, "lkmethlab") or not has_vehicle_recording_been_loaded(008, "lkmethlab") or not has_vehicle_recording_been_loaded(009, "lkmethlab") or not has_vehicle_recording_been_loaded(010, "lkmethlab") or not has_vehicle_recording_been_loaded(011, "lkmethlab") or not has_vehicle_recording_been_loaded(012, "lkmethlab") // or not has_vehicle_recording_been_loaded(013, "lkmethlab") // or not has_vehicle_recording_been_loaded(014, "lkmethlab") // or not has_vehicle_recording_been_loaded(015, "lkmethlab") // or not has_vehicle_recording_been_loaded(016, "lkmethlab") or not has_vehicle_recording_been_loaded(017, "lkmethlab") or not has_vehicle_recording_been_loaded(018, "lkmethlab") or not has_vehicle_recording_been_loaded(019, "lkmethlab") or not has_vehicle_recording_been_loaded(020, "lkmethlab") or not has_vehicle_recording_been_loaded(021, "lkmethlab") // or not has_vehicle_recording_been_loaded(030, "lkmethlab") // or not has_vehicle_recording_been_loaded(031, "lkmethlab") // or not has_vehicle_recording_been_loaded(032, "lkmethlab") or not get_is_waypoint_recording_loaded("methlab1") // or not get_is_waypoint_recording_loaded("methlab2") or not get_is_waypoint_recording_loaded("methlab3") or not get_is_waypoint_recording_loaded("methlab4") or not get_is_waypoint_recording_loaded("methlab5") // or not get_is_waypoint_recording_loaded("methlab6") or not get_is_waypoint_recording_loaded("methlab7") // or not get_is_waypoint_recording_loaded("methlab8") // or not get_is_waypoint_recording_loaded("methlab9") or not has_anim_dict_loaded("MissChinese1") or not is_interior_ready(meth_interior) CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_3 not loaded") wait(0) endwhile //setup dead ped flags from before grenade launcher cutscene //kids dead system on peds have been created for i = 2 to 5 wave_2_enemy[i].created = true endfor wave_2_enemy[10].created = true wave_2_enemy[11].created = true wave_2_enemy[19].created = true clear_player_wanted_level(player_id()) //g_allowmaxwantedlevelcheck = false set_max_wanted_level(0) set_create_random_cops(false) disable_dispatch_services() SET_ALL_RANDOM_PEDS_FLEE(player_id(), true) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>) add_scenario_blocking_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>) set_ped_paths_in_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>, false) set_roads_in_area(<<434.6, 3477.0, 36.3>>, <<1605.5, 4247.2, -100.00>>, FALSE) set_roads_in_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>, false) // SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, true, 0.0, 0.0, 1.0) // SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, -1.0) // @SBA - opening outer doors to help player follow Chef SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, TRUE, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, TRUE, 0.0, 0.0, -1.0) // shutting this door for frame rate SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) clear_area(<<1998.2826, 3058.0435, 46.0491>>, 10000.00, true) remove_decals_in_range(<<1998.2826, 3058.0435, 46.0491>>, 10000.00) setup_parked_cars() for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor for i = 0 to count_of(explosive_barrels) - 1 explosive_barrels[i].obj = create_object_no_offset(explosive_barrels[i].model, explosive_barrels[i].pos) SET_ENTITY_ROTATION(explosive_barrels[i].obj, explosive_barrels[i].rot) endfor cover_box.obj = create_object_no_offset(cover_box.model, cover_box.pos) freeze_entity_position(cover_box.obj, true) SET_ENTITY_ROTATION(cover_box.obj, cover_box.rot) // @SBA - trying this // CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, <<1409.9990, 3600.4973, 33.8676>>, 108.7487, false) // set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) // SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) // set_vehicle_engine_on(trevors_truck.veh, false, true) RECREATE_PLAYERS_VEHICLE(vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) for i = 2 to 6 if i != 5 SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, wave_2_enemy_vehicle[i].recording_number, "lkmethlab") skip_to_end_and_stop_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh) REMOVE_VEHICLE_BLIP(wave_2_enemy_vehicle[i]) endif endfor for i = 0 to 1 wave_2_enemy[i].pos = wave_2_enemy[i].run_to_pos setup_enemy(wave_2_enemy[i]) TASK_AIM_GUN_AT_ENTITY(wave_2_enemy[i].ped, PLAYER_PED_ID(), -1, TRUE) SET_PED_RESET_FLAG(wave_2_enemy[i].ped, PRF_InstantBlendToAim, TRUE) endfor for i = 18 to 18//19 wave_2_enemy[i].pos = wave_2_enemy[i].run_to_pos setup_enemy(wave_2_enemy[i]) TASK_AIM_GUN_AT_ENTITY(wave_2_enemy[i].ped, PLAYER_PED_ID(), -1, TRUE) SET_PED_RESET_FLAG(wave_2_enemy[i].ped, PRF_InstantBlendToAim, TRUE) endfor //***************** AFTER CUTSCENE for i = 0 to 1 SETUP_ENEMY_VEHICLE(wave_2_enemy_vehicle[i]) start_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, wave_2_enemy_vehicle[i].recording_number, "lkmethlab") if i = 0 skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, 8000) elif i = 1 skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, 5500) elif i = 2 skip_time_in_playback_recorded_vehicle(wave_2_enemy_vehicle[i].veh, 500) endif endfor setup_enemy_in_vehicle(wave_2_enemy[6], wave_2_enemy_vehicle[0].veh) setup_enemy_in_vehicle(wave_2_enemy[7], wave_2_enemy_vehicle[0].veh, vs_front_right) setup_enemy_in_vehicle(wave_2_enemy[8], wave_2_enemy_vehicle[1].veh) setup_enemy_in_vehicle(wave_2_enemy[9], wave_2_enemy_vehicle[1].veh, vs_front_right) if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_to_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, false, false) else if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif // standard resets player_grenade_launcher_cutscene_status = 99 //DEACTIVATES grenade launcher cutscene. wave_2_buddy_ai_system_status = 3 wave_2_dialogue_system_status = 22 wave_2_assisted_nodes_system_status = 0 wave_2_master_flow_system_status = 6 wave_2_audio_scene_system_status = 3 // @SBA - play grenade launcher cutscene if needed IF g_replay.iReplayInt[PLAYER_RECEIVED_GRENADE_LAUNCHER] = NOT_GOT_GLAUNCHER CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_3: ARE playing gren launch cutscene") set_current_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE, true) // update resets player_grenade_launcher_cutscene_status = 0 wave_2_master_flow_system_status = 5 wave_2_audio_scene_system_status = 1 // Don't need to see it ELSE CPRINTLN(DEBUG_MISSION, "load_trip_skip_data_3: NOT playing gren launch cutscene") if not has_ped_got_weapon(player_ped_id(), weapontype_grenadelauncher) give_weapon_to_ped(player_ped_id(), weapontype_grenadelauncher, kiGrenadeLauncherAmmo, false) else // @SBA - ensure player gets just 3 rounds SET_GRENADE_LAUNCHER_AMMO() endif set_current_ped_weapon(player_ped_id(), weapontype_grenadelauncher, true) REFILL_AMMO_INSTANTLY(PLAYER_PED_ID()) start_audio_scene("CHI_1_SHOOTOUT_GRENADE_LAUNCHER") ENDIF clear_ped_tasks_immediately(player_ped_id()) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(player_ped_id(), vTrevorBackDeckStartPos)//<<1408.0160, 3612.2808, 38.0056>>) SET_ENTITY_HEADING(player_ped_id(), 19.5667) ENDIF SET_PED_USING_ACTION_MODE(player_ped_id(), true) buddy.pos = <<1406.4009, 3615.2783, 38.0056>> buddy.heading = 292.8793 setup_buddy(buddy) add_ped_for_dialogue(scripted_speech[0], 5, buddy.ped, "cook") set_blocking_of_non_temporary_events(buddy.ped, false) set_ped_sphere_defensive_area(buddy.ped, <<1406.70, 3615.67, 38.01>>, 2.0) task_combat_hated_targets_around_ped(buddy.ped, 100.00) IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1408.9497, 3612.3738, 38.0057>>) ENDIF END_REPLAY_SETUP() task_put_ped_directly_into_cover(player_ped_id(), vTrevorBackDeckStartPos, -1, true, 0, true, true, players_cover_point_2) force_ped_ai_and_animation_update(player_ped_id(), true) original_time = get_game_timer() // bypasses a timer in the gren launcher cutscene cutscene_trigger_time = get_game_timer() - 5000 mission_flow = wave_2_system SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "Wave 2 after grenade launcher cutscene") trigger_music_event("CHN1_AFTER_GRENADE_RT") IF g_replay.iReplayInt[PLAYER_RECEIVED_GRENADE_LAUNCHER] = HAS_GOT_GLAUNCHER end_cutscene_no_fade(false, TRUE, -77.0, -19.0, 500, false) ENDIF print_now("METH_GOD_0", default_god_text_time, 1) endproc //wave 3 proc load_trip_skip_data_4() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(buddy.model) request_model(wave_0_enemy[0].model) request_model(wave_0_enemy[1].model) if not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) request_model(get_npc_ped_model(char_ortega)) endif request_model(cheng.model) request_model(translator.model) REQUEST_MODEL(mnIceBox) REQUEST_MODEL(mnIceBoxProxy) request_model(get_player_veh_model(char_trevor)) request_model(sadler) request_model(dubsta2) request_model(phoenix) request_model(explosive_barrels[0].model) request_model(bins[0].model) request_model(cover_box.model) request_model(get_weapontype_model(weapontype_carbinerifle)) request_weapon_asset(weapontype_carbinerifle) request_vehicle_recording(001, "lkmethlab") request_vehicle_recording(002, "lkmethlab") request_vehicle_recording(003, "lkmethlab") // request_vehicle_recording(004, "lkmethlab") // request_vehicle_recording(005, "lkmethlab") // request_vehicle_recording(006, "lkmethlab") request_vehicle_recording(007, "lkmethlab") request_vehicle_recording(008, "lkmethlab") request_vehicle_recording(009, "lkmethlab") request_vehicle_recording(010, "lkmethlab") request_vehicle_recording(011, "lkmethlab") request_vehicle_recording(012, "lkmethlab") // request_vehicle_recording(013, "lkmethlab") // request_vehicle_recording(014, "lkmethlab") // request_vehicle_recording(015, "lkmethlab") // request_vehicle_recording(016, "lkmethlab") request_vehicle_recording(017, "lkmethlab") request_vehicle_recording(018, "lkmethlab") request_vehicle_recording(019, "lkmethlab") request_vehicle_recording(020, "lkmethlab") request_vehicle_recording(021, "lkmethlab") // request_vehicle_recording(030, "lkmethlab") // request_vehicle_recording(031, "lkmethlab") // request_vehicle_recording(032, "lkmethlab") REQUEST_WAYPOINT_RECORDING("methlab1") // REQUEST_WAYPOINT_RECORDING("methlab2") REQUEST_WAYPOINT_RECORDING("methlab3") REQUEST_WAYPOINT_RECORDING("methlab4") REQUEST_WAYPOINT_RECORDING("methlab5") // REQUEST_WAYPOINT_RECORDING("methlab6") REQUEST_WAYPOINT_RECORDING("methlab7") // REQUEST_WAYPOINT_RECORDING("methlab8") // REQUEST_WAYPOINT_RECORDING("methlab9") request_anim_dict("MissChinese1") request_anim_dict("MissChinese1LeadInOutCHI_1_MCS_4") meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(buddy.model) or not has_model_loaded(wave_0_enemy[0].model) or not has_model_loaded(wave_0_enemy[1].model) or (not GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ORTEGA_KILLED) and not has_model_loaded(get_npc_ped_model(char_ortega))) or not has_model_loaded(cheng.model) or not has_model_loaded(translator.model) or not has_model_loaded(mnIceBox) or not has_model_loaded(mnIceBoxProxy) or not has_model_loaded(get_player_veh_model(char_trevor)) or not has_model_loaded(sadler) or not has_model_loaded(dubsta2) or not has_model_loaded(phoenix) or not has_model_loaded(explosive_barrels[0].model) or not has_model_loaded(bins[0].model) or not has_model_loaded(cover_box.model) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_carbinerifle)) or not has_weapon_asset_loaded(weapontype_carbinerifle) or not has_vehicle_recording_been_loaded(001, "lkmethlab") or not has_vehicle_recording_been_loaded(002, "lkmethlab") or not has_vehicle_recording_been_loaded(003, "lkmethlab") // or not has_vehicle_recording_been_loaded(004, "lkmethlab") // or not has_vehicle_recording_been_loaded(005, "lkmethlab") // or not has_vehicle_recording_been_loaded(006, "lkmethlab") or not has_vehicle_recording_been_loaded(007, "lkmethlab") or not has_vehicle_recording_been_loaded(008, "lkmethlab") or not has_vehicle_recording_been_loaded(009, "lkmethlab") or not has_vehicle_recording_been_loaded(010, "lkmethlab") or not has_vehicle_recording_been_loaded(011, "lkmethlab") or not has_vehicle_recording_been_loaded(012, "lkmethlab") // or not has_vehicle_recording_been_loaded(013, "lkmethlab") // or not has_vehicle_recording_been_loaded(014, "lkmethlab") // or not has_vehicle_recording_been_loaded(015, "lkmethlab") // or not has_vehicle_recording_been_loaded(016, "lkmethlab") or not has_vehicle_recording_been_loaded(017, "lkmethlab") or not has_vehicle_recording_been_loaded(018, "lkmethlab") or not has_vehicle_recording_been_loaded(019, "lkmethlab") or not has_vehicle_recording_been_loaded(020, "lkmethlab") or not has_vehicle_recording_been_loaded(021, "lkmethlab") // or not has_vehicle_recording_been_loaded(030, "lkmethlab") // or not has_vehicle_recording_been_loaded(031, "lkmethlab") // or not has_vehicle_recording_been_loaded(032, "lkmethlab") or not get_is_waypoint_recording_loaded("methlab1") // or not get_is_waypoint_recording_loaded("methlab2") or not get_is_waypoint_recording_loaded("methlab3") or not get_is_waypoint_recording_loaded("methlab4") or not get_is_waypoint_recording_loaded("methlab5") // or not get_is_waypoint_recording_loaded("methlab6") or not get_is_waypoint_recording_loaded("methlab7") // or not get_is_waypoint_recording_loaded("methlab8") // or not get_is_waypoint_recording_loaded("methlab9") or not has_anim_dict_loaded("MissChinese1") or not has_anim_dict_loaded("MissChinese1LeadInOutCHI_1_MCS_4") or not is_interior_ready(meth_interior) wait(0) endwhile clear_player_wanted_level(player_id()) //g_allowmaxwantedlevelcheck = false set_max_wanted_level(0) set_create_random_cops(false) disable_dispatch_services() SET_ALL_RANDOM_PEDS_FLEE(player_id(), true) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>) add_scenario_blocking_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>) set_ped_paths_in_area(<<1587.6, 4259.42, -100.00>>, <<646.61, 3118.71, 100.00>>, false) set_roads_in_area(<<434.6, 3477.0, 36.3>>, <<1605.5, 4247.2, -100.00>>, FALSE) set_roads_in_area(<<1829.64, 3625.69, -100.00>>, <<1538.96, 3710.29, 100.00>>, false) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, true, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, true, 0.0, 0.0, -1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1392.93, 3599.47, 35.13>>, false, 0.0, 0.0, 1.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ml_door1, <<1395.37, 3600.36, 35.13>>, false, 0.0, 0.0, -1.0) // @SBA - Shutting outer doors to help with frame rate SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vBackDoorToRoof, FALSE, 0.0, 0.0, 0.0) SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_doorext, vDoorToBackStairs, FALSE, 0.0, 0.0, 0.0) // @SBA - opening outer doors to help player follow Chef SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(v_ilev_ss_door04, vInteriorDoorStore, TRUE, 0.0, 0.0, -1.0) clear_area(<<1998.2826, 3058.0435, 46.0491>>, 10000.00, true) remove_decals_in_range(<<1998.2826, 3058.0435, 46.0491>>, 10000.00) setup_parked_cars() for i = 0 to count_of(bins) - 1 bins[i].obj = create_object_no_offset(bins[i].model, bins[i].pos) SET_ENTITY_ROTATION(bins[i].obj, bins[i].rot) FREEZE_ENTITY_POSITION(bins[i].obj, true) endfor for i = 0 to count_of(explosive_barrels) - 1 explosive_barrels[i].obj = create_object_no_offset(explosive_barrels[i].model, explosive_barrels[i].pos) SET_ENTITY_ROTATION(explosive_barrels[i].obj, explosive_barrels[i].rot) endfor cover_box.obj = create_object_no_offset(cover_box.model, cover_box.pos) freeze_entity_position(cover_box.obj, true) SET_ENTITY_ROTATION(cover_box.obj, cover_box.rot) setup_wave_3_enemies() // @SBA - trying this // CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, <<1409.9990, 3600.4973, 33.8676>>, 108.7487, false) // set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) // SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) // set_vehicle_engine_on(trevors_truck.veh, false, true) RECREATE_PLAYERS_VEHICLE(vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) clear_ped_tasks_immediately(player_ped_id()) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(player_ped_id(), <<1391.2151, 3607.2073, 33.9809>>) SET_ENTITY_HEADING(player_ped_id(), 109.0587) ENDIF SET_PED_USING_ACTION_MODE(player_ped_id(), true) if not has_ped_got_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) give_weapon_to_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, false, false) else if get_ammo_in_ped_weapon(player_ped_id(), WEAPONTYPE_CARBINERIFLE) < 500 set_ped_ammo(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500) endif endif if not has_ped_got_weapon(player_ped_id(), weapontype_grenadelauncher) give_weapon_to_ped(player_ped_id(), weapontype_grenadelauncher, kiGrenadeLauncherAmmo, false, FALSE) else // @SBA - ensure player gets just 3 rounds SET_GRENADE_LAUNCHER_AMMO() endif // Since player is in cover inside, let's make sure he has the default rifle //setup_weapon_for_ped(player_ped_id(), WEAPONTYPE_CARBINERIFLE, 500, true, true, false) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_CARBINERIFLE, TRUE) buddy.pos = vChefCoverPointLiquorStore buddy.heading = 197.22 setup_buddy(buddy) add_ped_for_dialogue(scripted_speech[0], 5, buddy.ped, "cook") task_put_ped_directly_into_cover(buddy.ped, vChefCoverPointLiquorStore, 8000) force_ped_ai_and_animation_update(buddy.ped) IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1391.4332, 3607.9443, 33.9809>>) ENDIF END_REPLAY_SETUP() task_put_ped_directly_into_cover(player_ped_id(), vTrevorLiquorStartPos, -1, true, 0, true, false) force_ped_ai_and_animation_update(player_ped_id(), true) wave_3_master_flow_system_status = 1 wave_3_dialogue_system_status = 5 wave_3_buddy_ai_system_status = 4 end_cutscene_no_fade(false, TRUE, 90, -12, 500, false) //-45 print_now("METH_GOD_0", default_god_text_time, 1) dialogue_time_2 = get_game_timer() buddy_time = get_game_timer() trigger_music_event("CHN1_WAVE_3_RT") start_audio_scene("CHI_1_SHOOTOUT_04") SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "Wave 3", true) REMOVE_MODEL_HIDE(vIceBoxPos, 2.0, prop_ice_box_01) mission_flow = wave_3_system endproc // Outro cutscene proc load_trip_skip_data_5() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(get_player_veh_model(char_trevor)) request_model(cheng.model) request_model(translator.model) request_model(buddy.model) meth_interior = get_interior_at_coords_with_type(<<1392.5117, 3603.1851, 38.5>>, "v_methlab") pin_interior_in_memory(meth_interior) END_REPLAY_SETUP() while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(get_player_veh_model(char_trevor)) or not has_model_loaded(cheng.model) or not has_model_loaded(translator.model) or not has_model_loaded(buddy.model) or not is_interior_ready(meth_interior) wait(0) endwhile clear_ped_tasks_immediately(player_ped_id()) IF NOT IS_REPLAY_BEING_SET_UP() SET_ENTITY_COORDS(player_ped_id(), <<1384.9, 3598.2172, 33.8896>>) set_entity_heading(player_ped_id(), 282.5231) ENDIF buddy.pos = <<1378.2903, 3591.9409, 33.8590>> setup_buddy(buddy, false) cheng.pos = <<1380.3240, 3595.5015, 33.8913>> setup_buddy(cheng, FALSE) translator.pos = <<1380.7184, 3599.5544, 33.8578>> setup_buddy(translator, FALSE) SET_ICY_VERSIONS_OF_PEDS() wait(0) //must wait a frame to ensure the outfit variaitons have been applied before checking the streaming requests for the player while not HAVE_ALL_STREAMING_REQUESTS_COMPLETED(player_ped_id()) or not HAVE_ALL_STREAMING_REQUESTS_COMPLETED_for_ped(cheng.ped) or not HAVE_ALL_STREAMING_REQUESTS_COMPLETED_for_ped(translator.ped) wait(0) endwhile // @SBA - trying this // CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, <<1409.9990, 3600.4973, 33.8676>>, 108.7487, false) // set_vehicle_doors_locked(trevors_truck.veh, vehiclelock_locked) // SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(trevors_truck.veh, false) // set_vehicle_engine_on(trevors_truck.veh, false, true) RECREATE_PLAYERS_VEHICLE(vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1386.4717, 3594.1172, 33.8896>>) ENDIF request_cutscene("chi_1_mcs_4_concat") while not has_cutscene_loaded() CPRINTLN(DEBUG_MISSION, "Waiting for outro assets") IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() CPRINTLN(DEBUG_MISSION, "Requesting outro component variations") SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("trevor", PLAYER_PED_ID()) if not is_ped_injured(buddy.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Cook", buddy.ped) endif if not is_ped_injured(cheng.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Tao", cheng.ped) endif if not is_ped_injured(translator.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Taos_Translator", translator.ped) endif SET_CUTSCENE_PED_PROP_VARIATION("Cook", ANCHOR_EYES, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Tao", ANCHOR_EYES, 0) SET_CUTSCENE_PED_PROP_VARIATION("Taos_Translator", ANCHOR_EYES, 0) ENDIF wait(0) endwhile start_new_cutscene_no_fade(false, FALSE, TRUE, TRUE) CLEAR_PRINTS() SET_LABEL_AS_TRIGGERED("METH_GOD_14", FALSE) RELEASE_SCRIPT_AUDIO_BANK() // don't update Chef any more allow_buddy_ai_system = FALSE if not is_ped_injured(cheng.ped) register_entity_for_cutscene(cheng.ped, "Tao", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"cheng registered for outro") endif IF not is_ped_injured(translator.ped) register_entity_for_cutscene(translator.ped, "Taos_Translator", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"translator registered for outro") ENDIF IF not is_ped_injured(buddy.ped) register_entity_for_cutscene(buddy.ped, "Cook", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"Chef registered for outro") ENDIF register_entity_for_cutscene(PLAYER_PED_ID(), "trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_TWO) REGISTER_ENTITY_FOR_CUTSCENE(NULL, "getaway_car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PREMIER) start_cutscene() trigger_music_event("CHN1_FINAL_CS") REDUCE_AMBIENT_MODELS(TRUE) mission_passed_mocap_status = 5 //@SBA OLD = 2 bOutroShitSkip = TRUE mission_flow = mission_passed_mocap endproc proc load_outside_methlab_skip() request_model(GET_PLAYER_PED_MODEL(char_trevor)) request_model(cheng.model) request_model(translator.model) request_model(buddy.model) request_model(trevors_truck.model) set_vehicle_model_is_suppressed(trevors_truck.model, true) request_model(get_weapontype_model(WEAPONTYPE_carbineRIFLE)) PREFETCH_SRL("CHI1_Methlab_Arrival") while not has_model_loaded(GET_PLAYER_PED_MODEL(char_trevor)) or not has_model_loaded(cheng.model) or not has_model_loaded(translator.model) or not has_model_loaded(buddy.model) or not has_model_loaded(trevors_truck.model) or not has_model_loaded(get_weapontype_model(WEAPONTYPE_carbinerifle)) or not IS_SRL_LOADED() wait(0) CPRINTLN(DEBUG_MISSION,"Loading for load_outside_methlab_skip") endwhile // // @SBA - trying this to remake vehicle // RECREATE_PLAYERS_VEHICLE( vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) // // if not is_players_last_vehicle_present_and_acceptable(trevors_truck.veh, vTrevorsVehicleMethLabLoc, 2, <<2008.9219, 3054.0513, 46.0528>>, 326.3415) // CPRINTLN(DEBUG_MISSION, "Player needs an appropriate vehicle. Making one.") // WHILE NOT CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead, false) // WAIT(0) // CPRINTLN(DEBUG_MISSION, "Waiting on new vehicle...") // ENDWHILE // ENDIF CREATE_PLAYER_VEHICLE(trevors_truck.veh, CHAR_TREVOR, vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead, false) SET_INITIAL_PLAYER_STATION("OFF") IF NOT IS_REPLAY_BEING_SET_UP() set_ped_into_vehicle(player_ped_id(), trevors_truck.veh) ENDIF IF NOT DOES_ENTITY_EXIST(cheng.ped) cheng.ped = create_ped_inside_vehicle(trevors_truck.veh, pedtype_mission, cheng.model, vs_front_right) ELSE SET_PED_INTO_VEHICLE(cheng.ped, TREVORS_TRUCK.VEH, vs_front_right) ENDIF add_ped_for_dialogue(scripted_speech[0], 4, cheng.ped, "cheng") //RETAIN_ENTITY_IN_INTERIOR(buddy.ped, get_interior_at_coords(buddy.pos)) setup_buddy_attributes(cheng) setup_relationship_contact(cheng.ped, true) //*****TEMP REMOVE //SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(cheng.ped, true) //***** IF NOT DOES_ENTITY_EXIST(translator.ped) translator.ped = create_ped_inside_vehicle(trevors_truck.veh, pedtype_mission, translator.model, vs_back_right) ELSE SET_PED_INTO_VEHICLE(translator.ped, TREVORS_TRUCK.VEH, vs_back_right) ENDIF //RETAIN_ENTITY_IN_INTERIOR(translator.ped, get_interior_at_coords(translator.pos)) add_ped_for_dialogue(scripted_speech[0], 3, translator.ped, "translator") setup_buddy_attributes(translator) setup_relationship_contact(translator.ped, true) SET_START_VERSIONS_OF_BUDDIES() HANDLE_SETUP_INITIAL_CHEF() IF NOT IS_REPLAY_BEING_SET_UP() load_scene(<<1403.1777, 3597.2070, 33.7417>>) ENDIF END_REPLAY_SETUP(TREVORS_TRUCK.VEH, VS_DRIVER, FALSE) if is_vehicle_driveable(trevors_truck.veh) SET_VEH_RADIO_STATION(trevors_truck.veh,"OFF") endif bPlayerInVehicle = TRUE end_cutscene() request_mocap_data_for_CHI_1_MCS_1() kill_any_conversation() clear_mission_locate_stuff(locates_data) SET_DOOR_STATE(DOORNAME_METHLAB_F_L, DOORSTATE_FORCE_LOCKED_THIS_FRAME) SET_DOOR_STATE(DOORNAME_METHLAB_F_R, DOORSTATE_FORCE_LOCKED_THIS_FRAME) SET_DOOR_STATE(DOORNAME_METHLAB_R, DOORSTATE_FORCE_LOCKED_THIS_FRAME) bBarPatronsCreated = TRUE cleanup_bar() // start lead-in cam camera_a = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1413.1581, 3586.2705, 35.3191>>, <<14.4926, -0.0000, 51.7688>>, 40.0, TRUE) camera_b = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<1415.4323, 3585.3635, 35.4866>>, <<5.5924, -0.0000, 49.1407>>, 40.0) HANDLE_LEAD_IN_SHOT_OF_ARRIVAL() mission_flow = get_to_meth_lab get_to_meth_lab_status = 1 endproc proc mission_setup() #IF IS_DEBUG_BUILD load_lk_widgets() SET_LOCATES_HEADER_WIDGET_GROUP(chinese_1_widget_group) #endif if is_player_playing(player_id()) clear_player_wanted_level(player_id()) endif SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) set_wanted_level_multiplier(0.8) SUPPRESS_EMERGENCY_CALLS() //INFORM_MISSION_STATS_OF_MISSION_START_chinese_one() INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(player_ped_id(),CHI1_UNMARKED) INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(player_ped_id()) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(CHI1_SPECIAL_ABILITY_TIME) //INFORM_MISSION_STATS_OF_INCREMENT(CHI1_GRENADE_LAUNCHER_KILLS) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1357.68, 3556.56, -100.00>>, <<1436.65, 3672.06, 100.00>>, false) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1335.97, 3598.28, -100.00>>, <<1368.15, 3575.16, 100.00>>, false) add_scenario_blocking_area(<<1349.96, 3547.31, 100.00>>, <<1423.99, 3658.75, -100.00>>) SET_PED_PATHS_IN_AREA(<<1349.96, 3547.31, 100.00>>, <<1423.99, 3658.75, -100.00>>, false) load_text_and_dialogue() add_relationship_groups() // set weather SET_WEATHER_TYPE_PERSIST("extrasunny") // @SBA - adjusting start position slightly. OLD VALUE = <<1389.63, 3600.41, 37.94>> players_cover_point = add_cover_point(vTrevorWindowStartPos, 112.4765, COVUSE_WALLTOBOTH, COVHEIGHT_low, COVARC_180) //COVUSE_WALLTOBOTH covuse_walltoleft players_cover_point_2 = add_cover_point(vTrevorBackDeckStartPos, 290.00, COVUSE_WALLTOBOTH, COVHEIGHT_low, COVARC_180) // covuse_walltoright buddy_cover_point[0] = add_cover_point(<<1387.12, 3607.50, 37.94>>, 118.00, COVUSE_WALLTOBOTH, COVHEIGHT_low, COVARC_120) // @SBA - trying Chef in a different postion at the top of the stairs //buddy_cover_point[1] = add_cover_point(<<1388.84, 3619.31, 37.93>>, 37.00, covuse_walltoright, COVHEIGHT_low, COVARC_180) buddy_cover_point[1] = add_cover_point(vChefCoverPointBackStairs, 105.00, covuse_walltoleft, COVHEIGHT_low, COVARC_180) wave_3_0_cover_point = wave_3_0_cover_point wave_3_1_cover_point = wave_3_1_cover_point //wave_3_0_cover_point = add_cover_point(<<1392.83228, 3598.94385, 34.02530>>, 19.00, covuse_walltoleft, COVHEIGHT_TOOHIGH, COVARC_180) wave_3_0_cover_point = add_cover_point(<<1392.67334, 3598.85669, 34.02655>>, 19.00, covuse_walltoleft, COVHEIGHT_TOOHIGH, COVARC_180) //wave_3_1_cover_point = add_cover_point(<<1395.67151, 3599.85791, 34.00392>>, 19.9438, covuse_walltoright, COVHEIGHT_TOOHIGH, COVARC_180) wave_3_1_cover_point = add_cover_point(<<1395.83069, 3599.75, 34.00454>>, 19.9438, covuse_walltoright, COVHEIGHT_TOOHIGH, COVARC_180) cpWaterHeaterCover = ADD_COVER_POINT((<<1397.4, 3602.6, 37.94>>), 108.0, COVUSE_WALLTOLEFT, COVHEIGHT_low, COVARC_180) cover_point_back_roof_AC = ADD_COVER_POINT((<<1404.8580, 3611.8057, 38.0058>>), 108.0, COVUSE_WALLTORIGHT, COVHEIGHT_low, COVARC_120, TRUE) add_ped_for_dialogue(scripted_speech[0], 2, player_ped_id(), "trevor") initialise_mission_variables() // Back stairs buddy_cover_point_data[0].cover_point = buddy_cover_point[1] buddy_cover_point_data[1].cover_point = add_cover_point(buddy_cover_point_data[1].pos, buddy_cover_point_data[1].heading, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_180) // Back roof buddy_cover_point_data[2].cover_point = add_cover_point(buddy_cover_point_data[2].pos, buddy_cover_point_data[2].heading, covuse_walltoleft, COVHEIGHT_LOW, COVARC_180) //covheight_toohigh buddy_cover_point_data[3].cover_point = add_cover_point(buddy_cover_point_data[3].pos, buddy_cover_point_data[3].heading, covuse_walltoleft, covheight_low, COVARC_180) // liquor store buddy_cover_point_data[4].cover_point = add_cover_point(buddy_cover_point_data[4].pos, buddy_cover_point_data[4].heading, COVUSE_WALLTOBOTH, COVHEIGHT_low, COVARC_180) buddy_cover_point_data[5].cover_point = add_cover_point(buddy_cover_point_data[5].pos, buddy_cover_point_data[5].heading, COVUSE_WALLTOBOTH, COVHEIGHT_low, COVARC_180) // @SBA - Navmesh blocking for upstairs doors, so rushers use the large doorway behind the player iNavBlockingUpstairsDoorway = ADD_NAVMESH_BLOCKING_OBJECT((<<1394.03613, 3608.93579, 37.94191>>), (<<0.75, 0.5, 0.5>>), -1.2) iNavBlockingUpstairsDoor = ADD_NAVMESH_BLOCKING_OBJECT((<<1392.08325, 3611.16699, 37.94191>>), (<<0.6, 0.4, 0.5>>), 0.36) iNavBlockingBackYardTrailer = ADD_NAVMESH_BLOCKING_OBJECT((<<1432.98425, 3626.76880, 33.93124>>), (<<2.5, 3.75, 1.0>>), 1.95) IF (Is_Replay_In_Progress()) INT iReplayStage = Get_Replay_Mid_Mission_Stage() IF g_bShitskipAccepted iReplayStage++ // player is skipping this stage ENDIF SWITCH iReplayStage case 0 //outside hicks bar CPRINTLN(DEBUG_MISSION, "Replay checkpoint 1") START_REPLAY_SETUP((<<1998.04980, 3055.90698, 46.05226>>),328.0059) load_trip_skip_data_0() CPRINTLN(DEBUG_MISSION, "Replay checkpoint 1 loaded") break case 1 IF g_bShitskipAccepted // arrival at meth lab, prior to wave 0 CPRINTLN(DEBUG_MISSION, "Replay checkpoint 2 (shit skip)") START_REPLAY_SETUP(<<1423.0, 3603.0, 33.8866>>, 108.7487, FALSE) load_outside_methlab_skip() ELSE //wave 0 CPRINTLN(DEBUG_MISSION, "Replay checkpoint 2") START_REPLAY_SETUP(vTrevorWindowStartPos, 21.5294, FALSE) load_trip_skip_data_1() ENDIF CPRINTLN(DEBUG_MISSION, "Replay checkpoint 2 loaded") break case 2 //wave 0 outside enemies CPRINTLN(DEBUG_MISSION, "Replay checkpoint 3") START_REPLAY_SETUP((<<1390.8401, 3601.1016, 37.9419>>), 323.8041, FALSE) load_trip_skip_data_2() CPRINTLN(DEBUG_MISSION, "Replay checkpoint 3 loaded") break case 3 //wave 2 after grenade launcher cutscene CPRINTLN(DEBUG_MISSION, "Replay checkpoint 4") START_REPLAY_SETUP(vTrevorBackDeckStartPos, 19.5667, FALSE) load_trip_skip_data_3() CPRINTLN(DEBUG_MISSION, "Replay checkpoint 4 loaded") break case 4 //wave 3 CPRINTLN(DEBUG_MISSION, "Replay checkpoint 5") START_REPLAY_SETUP(vTrevorLiquorStartPos, 113.4341, FALSE) load_trip_skip_data_4() CPRINTLN(DEBUG_MISSION, "Replay checkpoint 5 loaded") break case 5 // outro CPRINTLN(DEBUG_MISSION, "Replay (skip to) outro") START_REPLAY_SETUP((<<1384.9, 3598.2172, 33.8896>>), 282.5231, FALSE) // Don't change vector! Pputs player in place to start cutscene. load_trip_skip_data_5() CPRINTLN(DEBUG_MISSION, "Replay outro loaded") break DEFAULT SCRIPT_ASSERT("Replay in progress: Unknown checkpoint selected!") BREAK endswitch // not a replay else SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "Mission start") endif endproc proc fbi4_load_stage_selector_assets() initialise_mission_variables() switch launch_mission_stage_menu_status case 0 load_trip_skip_data_0() break case 1 load_outside_methlab_skip() break case 2 load_trip_skip_data_1() break case 3 load_trip_skip_data_2() break case 4 load_trip_skip_data_3() break case 5 load_trip_skip_data_4() break endswitch endproc proc check_mission_vehicles_for_chi_1_mcs_4_mocap() // @SBA - using a trigger box for all TRIGGER_BOX tbOutroCutscene TRIGGER_BOX tbOutroCutsceneRoad tbOutroCutscene = CREATE_TRIGGER_BOX(<<1396.244995,3594.819824,33.912655>>, <<1380.003784,3590.047852,37.925877>>, 22.000000) tbOutroCutsceneRoad = CREATE_TRIGGER_BOX(<<1345.245605,3568.100342,33.996071>>, <<1402.66, 3590.93,35.993843>>, 11.000000) for i = 0 to count_of(parked_cars) - 1 if does_entity_exist(parked_cars[i]) if is_entity_in_angled_area(parked_cars[i], <<1393.118, 3598.737, 33.986>>, <<1395.846, 3599.719, 36.986>>, 2.500, false, false) OR IS_ENTITY_IN_TRIGGER_BOX(parked_cars[i], tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(parked_cars[i], tbOutroCutsceneRoad, FALSE) delete_vehicle(parked_cars[i]) endif endif endfor for i = 0 to count_of(wave_0_enemy_vehicle) - 1 if does_entity_exist(wave_0_enemy_vehicle[i].veh) IF IS_ENTITY_IN_TRIGGER_BOX(wave_0_enemy_vehicle[i].veh, tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(wave_0_enemy_vehicle[i].veh, tbOutroCutsceneRoad, FALSE) delete_vehicle(wave_0_enemy_vehicle[i].veh) endif endif endfor for i = 0 to count_of(wave_2_enemy_vehicle) - 1 if does_entity_exist(wave_2_enemy_vehicle[i].veh) IF IS_ENTITY_IN_TRIGGER_BOX(wave_2_enemy_vehicle[i].veh, tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(wave_2_enemy_vehicle[i].veh, tbOutroCutsceneRoad, FALSE) delete_vehicle(wave_2_enemy_vehicle[i].veh) endif endif endfor for i = 0 to count_of(wave_3_enemy_vehicle) - 1 if does_entity_exist(wave_3_enemy_vehicle[i].veh) IF IS_ENTITY_IN_TRIGGER_BOX(wave_3_enemy_vehicle[i].veh, tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(wave_3_enemy_vehicle[i].veh, tbOutroCutsceneRoad, FALSE) // @SBA - just move car 0, don't delete (currently that's the only wave 3 veh) IF i = 0 // to thwart asserts (don't actually care if it's dead) IS_ENTITY_DEAD(wave_3_enemy_vehicle[i].veh) SET_ENTITY_COORDS(wave_3_enemy_vehicle[i].veh, <<1397.67297, 3594.00537, 33.93133>>, false) SET_ENTITY_HEADING(wave_3_enemy_vehicle[i].veh, -1.7487) ELSE delete_vehicle(wave_3_enemy_vehicle[i].veh) ENDIF endif endif endfor for i = 0 to count_of(ambient_enemy_vehicle) - 1 IF does_entity_exist(ambient_enemy_vehicle[i].veh) IF IS_ENTITY_IN_TRIGGER_BOX(ambient_enemy_vehicle[i].veh, tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(ambient_enemy_vehicle[i].veh, tbOutroCutsceneRoad, FALSE) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(ambient_enemy_vehicle[i].veh, FALSE), vIceBoxPos) > 75 DELETE_VEHICLE(ambient_enemy_vehicle[i].veh) endif ENDIF endfor IF NOT DOES_ENTITY_EXIST(trevors_truck.veh) CPRINTLN(DEBUG_MISSION, "TREVOR'S VEHICLE DOES NOT EXIST") ELSE CPRINTLN(DEBUG_MISSION, "TREVOR'S VEHICLE DOES EXIST") IF IS_ENTITY_IN_TRIGGER_BOX(trevors_truck.veh, tbOutroCutscene, FALSE) OR IS_ENTITY_IN_TRIGGER_BOX(trevors_truck.veh, tbOutroCutsceneRoad, FALSE) // to thwart asserts (don't actually care if it's dead) IS_ENTITY_DEAD(trevors_truck.veh) SET_ENTITY_COORDS(trevors_truck.veh, vTrevorsVehicleMethLabLoc, false) SET_ENTITY_HEADING(trevors_truck.veh, fTrevorsVehicleMethLabHead) ENDIF ENDIF SET_MISSION_VEHICLE_GEN_VEHICLE(trevors_truck.veh, vTrevorsVehicleMethLabLoc, fTrevorsVehicleMethLabHead) endproc proc chinese_mission_passed_mocap() // @SBA - kill those asserts IF IS_PED_INJURED(cheng.ped) OR IS_PED_INJURED(translator.ped) //CPRINTLN(DEBUG_MISSION, "chinese_mission_passed_mocap: Cheng or the Translator is NOT ok!") ENDIF // @SBA - Disable some player controls during lead in // But let him die in explosion IF mission_passed_mocap_status > 0 AND mission_passed_mocap_status < 5 UPDATE_BLOCKED_PLAYER_FOR_LEAD_IN(TRUE) KILL_INVINCIBLE_PLAYER_IF_IN_EXPLOSION() HANDLE_HINT_CAM_FOR_LEAD_IN() HANDLE_VEHICLE_TOO_NEAR_ICE_BOX() // just in case wave_3_buddy_ai_system() ENDIF // continue to update fleeing enemies (also updates their blips) ambient_enemy_system() IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() CPRINTLN(DEBUG_MISSION, "Requesting outro component variations") SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Tao", cheng.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Taos_Translator", translator.ped) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("trevor", PLAYER_PED_ID()) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Cook", buddy.ped) SET_CUTSCENE_PED_PROP_VARIATION("Cook", ANCHOR_EYES, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Tao", ANCHOR_EYES, 0) SET_CUTSCENE_PED_PROP_VARIATION("Taos_Translator", ANCHOR_EYES, 0) ENDIF if mission_passed_mocap_status < 6 disable_on_foot_first_person_view_this_update() //don't process for mocap playing and exit endif switch mission_passed_mocap_status case 0 // @SBA - start the timer, reset label CANCEL_TIMER(tmrIceBoxBlendin) START_TIMER_NOW(tmrIceBoxBlendin) SET_LABEL_AS_TRIGGERED("chin_M4_LI1", FALSE) // get rid of blip if does_blip_exist(ice_box_blip) remove_blip(ice_box_blip) endif request_cutscene("chi_1_mcs_4_concat") BLOCK_PLAYER_FOR_LEAD_IN(FALSE) // collision proxy on IF DOES_ENTITY_EXIST(oiIceBoxProxy) SET_ENTITY_COLLISION(oiIceBoxProxy, TRUE) ENDIF STOP_FIRE_IN_RANGE(vIceBoxPos, 5.0) mission_passed_mocap_status++ break // @SBA - adding this case CASE 1 IF TIMER_DO_ONCE_WHEN_READY(tmrIceBoxBlendin, 1.200) remove_decals_in_range(<<1388.4, 3598.8, 35.1>>, 0.5) //right door /* @SBA - START SYNCHRONIZED SCENE */ cutscene_pos = <<1388.108, 3599.101, 33.89>> cutscene_rot = <<0.0, 0.0, 110.480>> // @SBA - get Cheng out of the ice box CHENG_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) // CLEAR_PED_TASKS(cheng.ped) CPRINTLN(DEBUG_MISSION, "Playing Cheng anim: CHI_1_MCS_4_TAO_ACTION") TASK_SYNCHRONIZED_SCENE(cheng.ped, CHENG_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TAO_ACTION", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) // @SBA - animate the door IF DOES_ENTITY_EXIST(oiIceBox) CPRINTLN(DEBUG_MISSION, "Playing Icebox anim: CHI_1_MCS_4_TAO_ACTION_FREEZER") PLAY_SYNCHRONIZED_ENTITY_ANIM(oiIceBox, CHENG_CUTSCENE_INDEX, "CHI_1_MCS_4_TAO_ACTION_FREEZER", "MissChinese1LeadInOutCHI_1_MCS_4", INSTANT_BLEND_IN, NORMAL_BLEND_OUT) SET_ENTITY_COLLISION(oiIceBox, TRUE) ENDIF // pesky Molotovs STOP_FIRE_IN_RANGE(vIceBoxPos, 5.0) prepare_music_event("CHN1_FINAL_CS") mission_passed_mocap_status++ ENDIF BREAK // @SBA - adding this case CASE 2 // @SBA - play Cheng's first line as he exits the box IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_M4_LI1_1") IF GET_SYNCHRONIZED_SCENE_PHASE(CHENG_CUTSCENE_INDEX) >= 0.12 ADD_PED_FOR_DIALOGUE(scripted_speech[0], 5, cheng.ped, "cheng") //IF CREATE_CONVERSATION(scripted_speech[0], "methaud", "chin_M4_LI1", CONV_PRIORITY_MEDIUM) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(scripted_speech[0], "methaud", "chin_M4_LI1", "chin_M4_LI1_1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("chin_M4_LI1_1", TRUE) ENDIF ENDIF ELSE // play second line from conv if player is not in trigger IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_M4_LI1_2") IF NOT IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxInnerVol) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(scripted_speech[0], "methaud", "chin_M4_LI1", "chin_M4_LI1_2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("chin_M4_LI1_2", TRUE) ENDIF ENDIF ELSE // set as triggered if the player is right there SET_LABEL_AS_TRIGGERED("chin_M4_LI1_2", TRUE) ENDIF ENDIF ENDIF // @SBA - while Cheng is getting out of the box, get the translator out IF NOT bStartTranslatorEmergeBox IF GET_SYNCHRONIZED_SCENE_PHASE(CHENG_CUTSCENE_INDEX) >= 0.687 remove_decals_in_range(<<1388.1, 3599.6, 35.1>>, 0.5) //left door //CLEAR_PED_TASKS(translator.ped) CPRINTLN(DEBUG_MISSION, "Playing translator anim: CHI_1_MCS_4_TRANSLATOR_ACTION") TRANSLATOR_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) TASK_SYNCHRONIZED_SCENE(translator.ped, TRANSLATOR_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TRANSLATOR_ACTION", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) // @SBA - door IF DOES_ENTITY_EXIST(oiIceBox) CPRINTLN(DEBUG_MISSION, "Playing Icebox anim: CHI_1_MCS_4_TRANSLATOR_ACTION_FREEZER") PLAY_SYNCHRONIZED_ENTITY_ANIM(oiIceBox, TRANSLATOR_CUTSCENE_INDEX, "CHI_1_MCS_4_TRANSLATOR_ACTION_FREEZER", "MissChinese1LeadInOutCHI_1_MCS_4", NORMAL_BLEND_IN, NORMAL_BLEND_OUT) SET_ENTITY_COLLISION(oiIceBox, TRUE) ENDIF bStartTranslatorEmergeBox = TRUE ENDIF ENDIF // @SBA - when Cheng is out of the box, start idle loop IF GET_SYNCHRONIZED_SCENE_PHASE(CHENG_CUTSCENE_INDEX) >= 0.99 //CLEAR_PED_TASKS(cheng.ped) CPRINTLN(DEBUG_MISSION, "Playing Cheng's anim: CHI_1_MCS_4_TAO_IDLE_2") CHENG_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) SET_SYNCHRONIZED_SCENE_LOOPED(CHENG_CUTSCENE_INDEX, TRUE) TASK_SYNCHRONIZED_SCENE(cheng.ped, CHENG_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TAO_IDLE_2", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) // @SBA - don't need to do door here, previous anim still applies mission_passed_mocap_status++ ENDIF BREAK // @SBA - adding this case CASE 3 IF HAS_LABEL_BEEN_TRIGGERED("chin_M4_LI1_1") // play second line from conv if player is not in trigger IF NOT HAS_LABEL_BEEN_TRIGGERED("chin_M4_LI1_2") IF NOT IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxInnerVol) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(scripted_speech[0], "methaud", "chin_M4_LI1", "chin_M4_LI1_2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("chin_M4_LI1_2", TRUE) ENDIF ENDIF ELSE // set as triggered if the player is right there SET_LABEL_AS_TRIGGERED("chin_M4_LI1_2", TRUE) ENDIF ENDIF ENDIF // @SBA - Translator out of box? put into idle loop. IF GET_SYNCHRONIZED_SCENE_PHASE(TRANSLATOR_CUTSCENE_INDEX) >= 0.99 CPRINTLN(DEBUG_MISSION, "Playing trnaslator's anim: CHI_1_MCS_4_TRANSLATOR_IDLE_2") TRANSLATOR_CUTSCENE_INDEX = CREATE_SYNCHRONIZED_SCENE ( cutscene_pos, cutscene_rot) SET_SYNCHRONIZED_SCENE_LOOPED(TRANSLATOR_CUTSCENE_INDEX, TRUE) TASK_SYNCHRONIZED_SCENE(translator.ped, TRANSLATOR_CUTSCENE_INDEX, "MissChinese1LeadInOutCHI_1_MCS_4", "CHI_1_MCS_4_TRANSLATOR_IDLE_2", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) // @SBA - door IF DOES_ENTITY_EXIST(oiIceBox) CPRINTLN(DEBUG_MISSION, "Playing Icebox anim: CHI_1_MCS_4_TRANSLATOR_IDLE_2_FREEZER") PLAY_SYNCHRONIZED_ENTITY_ANIM(oiIceBox, TRANSLATOR_CUTSCENE_INDEX, "CHI_1_MCS_4_TRANSLATOR_IDLE_2_FREEZER", "MissChinese1LeadInOutCHI_1_MCS_4", NORMAL_BLEND_IN, NORMAL_BLEND_OUT) SET_ENTITY_COLLISION(oiIceBox, TRUE) ENDIF CANCEL_TIMER(tmrIceBoxBlendin) mission_passed_mocap_status++ // Go to cutscene earlier if player is already in position ELIF IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxInnerVol) //IF GET_SYNCHRONIZED_SCENE_PHASE(TRANSLATOR_CUTSCENE_INDEX) >= 0.8 IF HAS_ANIM_EVENT_FIRED(translator.ped, get_hash_key("START_CUTSCENE")) //AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CPRINTLN(DEBUG_MISSION, "STARTING OUTRO CUTSENE EARLY") CANCEL_TIMER(tmrIceBoxBlendin) mission_passed_mocap_status++ ENDIF ENDIF BREAK case 4 // @SBA - Is player not around? exit, otherwise start cutscene // Also check player still has control (if not, start cutscene) IF NOT IS_PLAYER_IN_TRIGGER_BOX(tbIceBoxInnerVol) AND IS_PLAYER_CONTROL_ON(PLAYER_ID()) // show objective, if you can IF NOT HAS_LABEL_BEEN_TRIGGERED("METH_GOD_14") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(locates_data) PRINT_NOW("METH_GOD_14", default_god_text_time, 1) SET_LABEL_AS_TRIGGERED("METH_GOD_14", TRUE) CANCEL_TIMER(tmrIceBoxReminder) ENDIF ENDIF // blip them (or just one since they're next to each other) IF NOT DOES_BLIP_EXIST(cheng.blip) cheng.blip = CREATE_BLIP_FOR_PED(cheng.ped) ENDIF EXIT ENDIF // Check conversations are done if not IS_SPECIAL_ABILITY_ACTIVE(player_id()) //fix for bug 1854979 IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() EXIT enDIF endif IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE() if start_new_cutscene_no_fade(false, FALSE, TRUE, TRUE, true) CLEAR_PRINTS() SET_LABEL_AS_TRIGGERED("METH_GOD_14", FALSE) RELEASE_SCRIPT_AUDIO_BANK() // don't update Chef any more allow_buddy_ai_system = FALSE IF DOES_BLIP_EXIST(cheng.blip) REMOVE_BLIP(cheng.blip) ENDIF IF DOES_ENTITY_EXIST(cheng.ped) register_entity_for_cutscene(cheng.ped, "Tao", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"cheng registered for outro") ENDIF IF DOES_ENTITY_EXIST(translator.ped) register_entity_for_cutscene(translator.ped, "Taos_Translator", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"translator registered for outro") ENDIF IF DOES_ENTITY_EXIST(buddy.ped) register_entity_for_cutscene(buddy.ped, "Cook", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) CPRINTLN(DEBUG_MISSION,"Chef registered for outro") ENDIF register_entity_for_cutscene(PLAYER_PED_ID(), "trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_TWO) REGISTER_ENTITY_FOR_CUTSCENE(NULL, "getaway_car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PREMIER) if get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person start_cutscene(CUTSCENE_SUPPRESS_FP_TRANSITION_FLASH) //supress flash. we are bledning out of the cutscene. Code will perform flash during blend out. else start_cutscene() endif REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) trigger_music_event("CHN1_FINAL_CS") if is_audio_scene_active("CHI_1_GO_TO_ICEBOX") stop_audio_scene("CHI_1_GO_TO_ICEBOX") endif REDUCE_AMBIENT_MODELS(TRUE) mission_passed_mocap_status++ ENDIF endif break case 5 if is_cutscene_playing() // fade in if coming from skip IF NOT IS_SCREEN_FADED_IN() IF NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT) ENDIF ENDIF IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT() ENDIF // do this here so it's not a frame early DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), TRUE) ENDIF //might cycle through and switch all enemy vehicles off. if is_vehicle_driveable(trevors_truck.veh) set_vehicle_engine_on(trevors_truck.veh, false, true) endif check_mission_vehicles_for_chi_1_mcs_4_mocap() clear_area(<<1403.1777, 3597.2070, 33.7417>>, 1000.00, true, TRUE) SET_MODEL_AS_NO_LONGER_NEEDED(GoonModel1) // @SBA - Don't need the ice box anymore IF DOES_ENTITY_EXIST(oiIceBox) DELETE_OBJECT(oiIceBox) ENDIF IF DOES_ENTITY_EXIST(oiIceBoxProxy) DELETE_OBJECT(oiIceBoxProxy) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(mnIceBox) SET_MODEL_AS_NO_LONGER_NEEDED(mnIceBoxProxy) object_index glass_window IF NOT DOES_ENTITY_EXIST(glass_window) glass_window = get_closest_object_of_type(<<1389.11, 3600.43, 39.51>>, 2.0, v_ret_ml_win5) ENDIF //crack type //2 = shoutgun //3 = explosion // break_entity_glass(glass_window, <<1388.9, 3601.0, 40.2>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 3) // break_entity_glass(glass_window, <<1389.6, 3599.1, 40.2>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 3) break_entity_glass(glass_window, <<1389.16, 3600.3, 39.5>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 3, TRUE) break_entity_glass(glass_window, <<1388.8, 3600.9, 39.0>>, 2.0, <<0.0, 1.0, 0.0>>, 1100, 2, TRUE) break_entity_glass(glass_window, <<1389.3, 3600.1, 39.7>>, 2.0, <<0.0, 1.0, 0.0>>, 1100.00, 2, TRUE) SET_OBJECT_AS_NO_LONGER_NEEDED(glass_window) // turn cutscene vehicle's lights on if it's night IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("getaway_car")) viGetAwayCar = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("getaway_car")) CPRINTLN(DEBUG_MISSION, "Getaway car grabbed") IF NOT IS_DAYLIGHT_HOURS() AND DOES_ENTITY_EXIST(viGetAwayCar) CPRINTLN(DEBUG_MISSION, "Getaway car lights should be on") SET_VEHICLE_LIGHTS(viGetAwayCar, SET_VEHICLE_LIGHTS_ON) ENDIF ENDIF // Some clean up IF DOES_ENTITY_EXIST(cheng.ped) IF NOT IS_ENTITY_ON_SCREEN(cheng.ped) SET_PED_AS_NO_LONGER_NEEDED(cheng.ped) SET_MODEL_AS_NO_LONGER_NEEDED(cheng.model) CPRINTLN(DEBUG_MISSION,"Cheng no longer needed") ENDIF ENDIF IF DOES_ENTITY_EXIST(translator.ped) IF NOT IS_ENTITY_ON_SCREEN(translator.ped) SET_PED_AS_NO_LONGER_NEEDED(translator.ped) SET_MODEL_AS_NO_LONGER_NEEDED(translator.model) CPRINTLN(DEBUG_MISSION,"Translator no longer needed") ENDIF ENDIF IF DOES_ENTITY_EXIST(buddy.ped) SET_PED_AS_NO_LONGER_NEEDED(buddy.ped) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(buddy.model) SET_SRL_POST_CUTSCENE_CAMERA(<<1386.7813, 3597.9500, 35.6490>>, NORMALISE_VECTOR(<<-3.0000, 0.0000, -169.0608>>)) mission_passed_mocap_status++ endif break case 6 if is_cutscene_playing() if not was_cutscene_skipped() printstring("test") printnl() if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("trevor", GET_PLAYER_PED_MODEL(char_trevor)) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 1500) endif if CAN_SET_EXIT_STATE_FOR_CAMERA() set_gameplay_cam_relative_heading(0) set_gameplay_cam_relative_pitch(0) if get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person camera_a = create_cam_with_params("default_scripted_camera", <<1387.450195,3596.558350,35.691887>>, <<-8.343739,0.054248,-171.329453>>, 50.000000) set_cam_active(camera_a, true) render_script_cams(true, false) endif endif else trigger_music_event("CHN1_FINAL_CS_SKIP") SET_CUTSCENE_FADE_VALUES(false, false, true, false) mission_passed_mocap_status++ endif else if does_entity_exist(buddy.ped) delete_ped(buddy.ped) endif IF DOES_ENTITY_EXIST(viGetAwayCar) DELETE_VEHICLE(viGetAwayCar) ENDIF REPLAY_STOP_EVENT() if get_cam_view_mode_for_context(cam_view_mode_context_on_foot) = cam_view_mode_first_person end_cutscene_no_fade(true, true, 0, 0, 1000) else end_cutscene_no_fade() endif mission_passed() endif break case 7 if is_screen_faded_out() if not is_cutscene_active() if does_entity_exist(buddy.ped) delete_ped(buddy.ped) endif IF DOES_ENTITY_EXIST(viGetAwayCar) DELETE_VEHICLE(viGetAwayCar) ENDIF REPLAY_STOP_EVENT() end_cutscene() mission_passed() endif endif break endswitch endproc proc chinese_mission_failed_system() KILL_INVINCIBLE_PLAYER_IF_IN_EXPLOSION() if GET_MISSION_FLOW_SAFE_TO_CLEANUP() mission_failed() endif endproc SCRIPT set_mission_flag(true) if has_force_cleanup_occurred() Store_Fail_Weapon(player_ped_id(), enum_to_int(get_current_player_ped_enum())) STORE_ENEMY_VEHICLES_STILL_ALIVE() Mission_Flow_Mission_Force_Cleanup() mission_cleanup() endif mission_setup() while true wait(0) if not stop_mission_fail_checks if mission_fail_checks() setup_mission_fail() endif endif skip_system() HANDLE_CHINESE1_STATS() REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_TPIndustries") IF NOT bPlayerUsedAbility IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID()) bPlayerUsedAbility = TRUE ENDIF ENDIF // help frames when there are exploding vehicles IF mission_flow >= wave_0_system AND mission_flow < wave_3_system DISABLE_VEHICLE_EXPLOSION_BREAK_OFF_PARTS() ENDIF switch mission_flow case intro_mocap meth_lab_intro_mocap() //mission_flow = bikers_cutscene break case get_to_meth_lab chinese_get_to_meth_lab() break case wave_0_system chinese_wave_0_system() break // WAVE 1 - REMOVED @SBA case wave_2_system chinese_wave_2_system() break case wave_3_system chinese_wave_3_system() break case mission_passed_mocap chinese_mission_passed_mocap() break case vehicle_recording meth_lab_vehicle_recording() break case load_stage_selector_assets fbi4_load_stage_selector_assets() break case mission_fail_stage chinese_mission_failed_system() break endswitch #IF IS_DEBUG_BUILD is_entity_in_angled_area(player_ped_id(), <<1980.730, 3073.228, 46.049>>, <<2014.615, 3051.972, 50.049>>, 26.700) angled_area_locate_widget() // request_ptfx_asset() // // if has_ptfx_asset_loaded() // if is_keyboard_key_just_pressed(key_t) // printstring("ptfx loaded") // printnl() // endif // else // if is_keyboard_key_just_pressed(key_t) // printstring("ptfx NOT loaded") // printnl() // endif // endif // // pfx_widget() if is_keyboard_key_just_pressed(key_s) mission_passed() endif if is_keyboard_key_just_pressed(key_f) mission_failed_text = "" setup_mission_fail() endif if is_keyboard_key_just_pressed(key_k) for i = 0 to count_of(wave_0_inside_enemy) - 1 if does_entity_exist(wave_0_inside_enemy[i].ped) set_entity_health(wave_0_inside_enemy[i].ped, 2) endif endfor endif #endif endwhile endscript //lkmethlab waypoints //waypoint 4 = buddy running from inside lab to outside to shoot inside enemy guys //waypoint 5 = buddy running from outside lab to other side of rooftop //waypoint 3 = buddy running from rooftop down stairs //player_running_from //waypoint 6 = player running from inside lab to outside. //waypoint 7 = player running from outside lab to other side of rooftop