//|=======================================================================================| //| Author: Lukasz Bogaj / David Gentles Date: 15/11/2011 | //|=======================================================================================| //| FRANKLIN1.sc | //| GHETTO SAFARI | //| | //|=======================================================================================| //Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. //|==================================== INCLUDE FILES ====================================| USING "rage_builtins.sch" USING "globals.sch" //Commands headers 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_entity.sch" USING "commands_cutscene.sch" USING "commands_event.sch" USING "commands_itemsets.sch" USING "commands_audio.sch" USING "commands_recording.sch" //Script headers USING "script_player.sch" USING "script_blips.sch" USING "script_ped.sch" USING "script_buttons.sch" USING "script_misc.sch" //Public headers USING "selector_public.sch" USING "dialogue_public.sch" USING "player_ped_public.sch" USING "locates_public.sch" USING "replay_public.sch" USING "cutscene_public.sch" USING "mission_stat_public.sch" USING "CompletionPercentage_public.sch" USING "chop_cam_public.sch" USING "chop_van_public.sch" USING "streamed_scripts.sch" USING "model_enums.sch" USING "flow_public_core_override.sch" USING "social_public.sch" USING "taxi_functions.sch" USING "finance_control_public.sch" USING "carsteal_public.sch" USING "building_control_public.sch" USING "clearMissionArea.sch" USING "emergency_call.sch" USING "cheat_controller_public.sch" USING "stripclub_public.sch" //================================ UBER PLAYBACK CONSTANTS ===============================| //Replace the default uber playback values stored in "traffic_default_values.sch" //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 5 //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 5 //this should be fine CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 1 //============================== END UBER PLAYBACK CONSTANTS =============================| USING "traffic.sch" //Debug headers #IF IS_DEBUG_BUILD USING "script_debug.sch" USING "select_mission_stage.sch" #ENDIF //===================================== ENUMS & STRUCTS ==================================| /// PURPOSE: Specifies stages of the mission. ENUM MISSION_STAGES MISSION_STAGE_CUTSCENE_INTRO = 0, //Intro cutscene MISSION_STAGE_DRIVE_TO_DEAL = 1, //Franklin, Trevor, Lamar and Chop drive to Grove Street for the drug deal MISSION_STAGE_CUTSCENE_DEAL = 2, //Cutscene of the drug deal in Grove Street MISSION_STAGE_GROVE_STREET_SHOOTOUT = 3, //Franklin, Trevor, Lamar and Chop fight through a shootout in Grove Street MISSION_STAGE_RUN_TO_SPEEDOPHILES = 4, //Franklin, Trevor, Lamar run from Grove Street to the storm drain and steal seasharks MISSION_STAGE_SPEEDOPHILE_RIDE = 5, //Franklin, Trevor and Lamar drive seasharks MISSION_STAGE_LOSE_COPS = 6, //Franklin, Trevor and Lamar have to lose the cops MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR = 7, MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR = 8, MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN = 9, MISSION_STAGE_END = 10, //End #IF IS_DEBUG_BUILD MISSION_STAGE_DEBUG_PLAYBACK_CHASE = 11, MISSION_STAGE_DEBUG_RECORD_CHASE = 12, #ENDIF MISSION_STAGE_PASSED, //Mission passed MISSION_STAGE_FAILED //Mission failed ENDENUM /// PURPOSE: Specifies mission fail reasons. ENUM MISSION_FAILS MISSION_FAIL_EMPTY = 0, //Generic fail MISSION_FAIL_DEAL_BLOWN, //Deal is blown MISSION_FAIL_CAR_DEAD, //Mission car destroyed MISSION_FAIL_CAR_UNDRIVABLE, //Mission car undrivable MISSION_FAIL_BUDDIES_LEFT_BEHIND, //Player abandoned buddies MISSION_FAIL_BUDDIES_LOST, //Player lost buddies MISSION_FAIL_LAMAR_DEAD, //Lamar killed MISSION_FAIL_LAMAR_LEFT_BEHIND, //Lamar left behind when player loses cops with Lamar MISSION_FAIL_TREVOR_DEAD, //Trevor killed MISSION_FAIL_TREVOR_LEFT_BEHIND, //Trevor left behind in lose cops stage when player loses cops with Trevor MISSION_FAIL_FRANKLIN_DEAD, //Franklin killed MISSION_FAIL_FRANKLIN_LEFT_BEHIND, //Franklin left behind in lose cops stage when plaeyr MISSION_FAIL_CHOP_DEAD, //Chop the dog killed MISSION_FAIL_CHOP_DROWNED, //Chop the dog drowned in the van MISSION_FAIL_SPEEDOPHILE_DEAD, //Speedophile destroyed MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE, //Speedophile undrivable MISSION_FAIL_FORCE_FAIL, //Debug forced fail MAX_MISSION_FAILS ENDENUM /// PURPOSE: Specifies mid-mission checkpoints for mission retry. ENUM MID_MISSION_STAGES MID_MISSION_STAGE_DRIVE_TO_DEAL = 0, //Checkpoint at MISSION_STAGE_DRIVE_TO_DEAL MID_MISSION_STAGE_GROVE_STREET_SHOOTOUT = 1, //Checkpoint at MISSION_STAGE_GROVE_STREET_SHOOTOUT MID_MISSION_STAGE_RUN_TO_SPEEDOPHILES = 2, //Checkpoint at MISSION_STAGE_RUN_TO_SPEEDOPHILES MID_MISSION_STAGE_SPEEDOPHILE_RIDE = 3, //Checkpoint at MISSION_STAGE_SPEEDOPHILE_RIDE MID_MISSION_STAGE_LOSE_COPS = 4 //Checkpoint at MISSION_STAGE_LOSE_COPS ENDENUM /// PURPOSE: Specifies film crew peds indexes ENUM FILM_CREW_PEDS FCP_JACKEDGIRL = 0, FCP_GIRL = 1, FCP_CLAY = 2, FCP_CAMERAMAN = 3, FCP_BOOMMAN = 4, MAX_FILM_CREW_PEDS ENDENUM /// PURPOSE: Specifies events that happen in the shootout ENUM SHOOTOUT_EVENTS EVENT_SHOOTOUT_STARTED = 0, EVENT_SHOOTOUT_ENDED, EVENT_ENEMY_WAVE_1_SPAWNED, EVENT_ENEMY_WAVE_2_SPAWNED, EVENT_ENEMY_WAVE_CARINTERSECTION_SPAWNED, EVENT_ENEMY_WAVE_3_SPAWNED, EVENT_ENEMY_WAVE_4_SPAWNED, EVENT_ENEMY_WAVE_5_SPAWNED, EVENT_ENEMY_WAVE_6_SPAWNED, EVENT_ENEMY_WAVE_7_SPAWNED, EVENT_COPS_SPAWNED, EVENT_COPS_ARRIVE, EVENT_COPS_REINFORCEMENTS_SPAWNED, EVENT_ENEMIES_GROUP1_KILLED, EVENT_ENEMIES_GROUP2_KILLED, EVENT_ENEMIES_GROUP3_KILLED, EVENT_ENEMIES_GROUP4_KILLED, EVENT_ENEMIES_GROUP5_KILLED, EVENT_ENEMIES_GROUP6_KILLED, EVENT_ENEMIES_GROUP7_KILLED, EVENT_ENEMIES_GROUP8_KILLED, EVENT_ENEMIES_GROUP9_KILLED, EVENT_ENEMIES_DOG1_KILLED, EVENT_ENEMIES_DOG2_KILLED, EVENT_ENEMIES_CARCULDESACLEFT_KILLED, EVENT_ENEMIES_CARCULDESACRIGHT_KILLED, EVENT_ENEMIES_CARINTERSECTION1LEFT_KILLED, EVENT_ENEMIES_CARINTERSECTION1RIGHT_KILLED, EVENT_ENEMIES_CARINTERSECTION2LEFT_KILLED, EVENT_ENEMIES_CARINTERSECTION2RIGHT_KILLED, EVENT_ENEMIES_CARSTREETLEFT_KILLED, EVENT_ENEMIES_CARSTREETRIGHT_KILLED, EVENT_ENEMIES_CARPARKED_KILLED, EVENT_ENEMIES_HOUSE_KILLED, EVENT_BUDDIES_WAITING_FOR_PLAYER, EVENT_PLAYER_ENTERED_RIVER_ENTRANCE_LOCATE, //total number of events EVENT_MAX_EVENTS ENDENUM ENUM PED_STATES PED_STATE_IDLE = 0, PED_STATE_PLAYING_BEGIN_ANIM, PED_STATE_PLAYING_REACTION_ANIM, PED_STATE_PLAYING_END_ANIM, PED_STATE_FLEEING, PED_STATE_COMBAT_ON_FOOT, PED_STATE_COMBAT_FROM_VEHICLE, PED_STATE_RUNNING_TO_ALLEY, PED_STATE_WAITING_IN_ALLEY, PED_STATE_RUNNING_TO_RIVER, PED_STATE_WAITING_FOR_PLAYER, PED_STATE_RUNNING_TO_VEHICLE, PED_STATE_WAITING_AT_VEHICLE, PED_STATE_ENTERING_VEHICLE, PED_STATE_SITTING_IN_VEHICLE, PED_STATE_EXITING_VEHICLE, PED_STATE_STARTING_RECORDING_PLAYBACK, PED_STATE_RECORDING_PLAYBACK, PED_STATE_ENDING_RECORDING_PLAYBACK, PED_STATE_CATCHING_UP_WITH_RECORDING, PED_STATE_FLEE_COPS_ON_FOOT, PED_STATE_FOLLOWING_PLAYER, PED_STATE_PLAYER_CONTROL_ENABLED, PED_STATE_PLAYER_CONTROL_DISABLED, PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH ENDENUM ENUM PED_CLEANUP_REASONS PED_CLEANUP_NO_CLEANUP = 0, PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN = 1, PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR = 2, PED_CLEANUP_KILLED_BY_FRANKLIN = 3, PED_CLEANUP_KILLED_BY_TREVOR = 4, PED_CLEANUP_KILLED_BY_LAMAR = 5, PED_CLEANUP_KILLED_BY_CHOP = 6, PED_CLEANUP_NONE = 7 ENDENUM ENUM PLAYER_BUDDIES PLAYER_BUDDY_NONE = 0, PLAYER_BUDDY_FRANKLIN = 1, PLAYER_BUDDY_TREVOR = 2, PLAYER_BUDDY_LAMAR = 3 ENDENUM ENUM PED_SPEEDOPHILE SPEEDOPHILE_1 = 0, SPEEDOPHILE_2 = 1, SPEEDOPHILE_3 = 2, MAX_SPEEDOPHILES = 3 ENDENUM /// PURPOSE: Specifies details of mission peds. STRUCT PED_STRUCT PED_INDEX PedIndex //Ped Index BLIP_INDEX BlipIndex //Ped's Blip Index ITEMSET_INDEX ItemsetIndex //Ped's Itemset Index VECTOR vPosition //Ped's start location FLOAT fHeading //Ped's start heading MODEL_NAMES ModelName //Ped's model INT iTimer //Ped's timer INT iPedConversationTimer INT iHealthConversationTimer INT iHealthConversationCounter INT iProgress //Ped's progress used for controlling scripted behaviour FLOAT fDistanceToTargetPed FLOAT fDistanceToCoord BOOL bHasTask BOOL bWaitingForPlayer BOOL bWaitingToAdvance // BOOL bFleeing BOOL bBehindPlayer BOOL bDefensiveAreaTaken BOOL bInPosition BOOL bCleanupConversationTriggered BOOL bIgnoreProgress BOOL bHasSwitchTask BOOL bVehicleReached PED_STATES eState PED_CLEANUP_REASONS eCleanupReason PED_SPEEDOPHILE ePedVehicle #IF IS_DEBUG_BUILD TEXT_LABEL_31 sDebugName #ENDIF ENDSTRUCT /// PURPOSE: Specifies details of mission enemies. STRUCT ENEMY_STRUCT PED_INDEX PedIndex //Enemy Ped Index BLIP_INDEX BlipIndex //Enemy Blip Index AI_BLIP_STRUCT EnemyBlipData //Enemy Blip Data ITEMSET_INDEX ItemsetIndex //Enemy Itemset Index, used for preferred cover points //IS THIS STILL NEEDED? BOOL bCreated //Indicates if this enemy has been created INT iProgress //Specifies enemy ped behaviour progress, used for set pieces, dead ped swapping etc. INT iTimer //Enemy Ped timer FLOAT fDistanceToTarget BOOL bHasTask INT iCleanupAttempts PED_CLEANUP_REASONS eCleanupReason #IF IS_DEBUG_BUILD TEXT_LABEL_31 sDebugName #ENDIF ENDSTRUCT /// PURPOSE: Specifies details of mission vehicles. STRUCT VEH_STRUCT VEHICLE_INDEX VehicleIndex //Vehicle index BLIP_INDEX BlipIndex //Vehicle blip VECTOR vPosition //Vehicle postion FLOAT fHeading //Vehicle heading MODEL_NAMES ModelName //Vehicle model INT iRecordingNumber //Vehicle recording number FLOAT fPlaybackSpeed //Vehicle recording playback speed FLOAT fPlaybackTime BOOL bDriverDead //Vehicle's driver is dead INT iProgress //Progress counter used for set pieces and flow control BOOL bAutoDrive ENDSTRUCT /// PURPOSE: Specifies details of mission trains. STRUCT TRAIN_STRUCT VEHICLE_INDEX VehicleIndex INT iConfiguration VECTOR vPosition MODEL_NAMES ModelName1 MODEL_NAMES ModelName2 MODEL_NAMES ModelName3 INT iProgress ENDSTRUCT /// PURPOSE: Specifies details of mission objects. STRUCT OBJECT_STRUCT OBJECT_INDEX ObjectIndex //Object index MODEL_NAMES ModelName //Object model VECTOR vPosition //Object position VECTOR vRotation //Object rotation ENDSTRUCT /// PURPOSE: Specifies details of script created coverpoints to use for scripted buddy peds in combat. STRUCT COVERPOINT_STRUCT COVERPOINT_INDEX CoverpointIndex //CoverpointIndex VECTOR vPosition //Coverpoint position FLOAT fHeading //Coverpoint heading COVERPOINT_USAGE CoverpointUsage //Coverpoint usage COVERPOINT_HEIGHT CoverpointHeight //Coverpoint height COVERPOINT_ARC CoverpointArc //Coverpoint arc FLOAT fDistance //Coverpoint distance from the start of the street BOOL bActive //Indicates if this coverpoint should be considered when searching for nearest coverpoint BOOL bStationary //Indicates if this coverpoint is meant for stationary combat or cover combat BOOL bPlayerPriority ENDSTRUCT STRUCT DEFENSIVEAREA_STRUCT VECTOR vPosition VECTOR vPosition2 FLOAT fWidth BOOL bSphere ENDSTRUCT STRUCT SPAWNPOINT_STRUCT VECTOR vPosition FLOAT fHeading ENEMY_STRUCT sEnemy DEFENSIVEAREA_STRUCT sDefensiveArea BOOL bActive BOOL bTaken BOOL bHasTask INT iTimer INT iIntervalTime INT iKillCount ENDSTRUCT // use this as trigger box variables STRUCT ANGLED_AREA_STRUCT VECTOR vStart VECTOR vEnd FLOAT fWidth #IF IS_DEBUG_BUILD TEXT_LABEL_15 sDebugName #ENDIF ENDSTRUCT //|======================================= CONSTANTS =====================================| CONST_INT FADE_TIME 800 // time in seconds for the fades in & out of cutscenes CONST_INT FADE_TIME_SHORT 250 // short time in seconds for the fades in & out of cutscenes CONST_INT FADE_TIME_LONG 2500 // long time in seconds for the fades in & out of cutscenes CONST_INT MAX_MODELS 12 CONST_INT MAX_CAR_RECORDINGS 13 CONST_INT MAX_ANIMATIONS 2 CONST_INT MAX_BUDDY_PED_HEALTH 600 CONST_INT SPEEDOPHILE_RECORDING_FRONT 72 CONST_INT SPEEDOPHILE_RECORDING_LEFT 82 CONST_INT SPEEDOPHILE_RECORDING_RIGHT 63 CONST_INT BALLA1SPEAKERID 4 CONST_INT BALLA2SPEAKERID 5 CONST_INT BALLA3SPEAKERID 6 CONST_INT BALLA4SPEAKERID 4 CONST_INT BALLA5SPEAKERID 5 CONST_INT BALLA6SPEAKERID 6 CONST_INT BALLA7SPEAKERID 7 CONST_INT CAR_CULDESAC 0 CONST_INT CAR_INTERSECTION1 1 CONST_INT CAR_INTERSECTION2 2 CONST_INT CAR_STREET 3 CONST_INT CAR_DRIVEWAY 4 CONST_INT COPCAR_STREET_1 0 CONST_INT COPCAR_STREET_2 1 CONST_INT COPCAR_STREET_3 2 CONST_INT COPCAR_STREET_4 3 CONST_INT COPCAR_STREET_5 4 STRING BALLA1VOICENAME = "BALLA1" STRING BALLA2VOICENAME = "BALLA2" STRING BALLA3VOICENAME = "BALLA3" STRING BALLA4VOICENAME = "BALLA4" STRING BALLA5VOICENAME = "BALLA5" STRING BALLA6VOICENAME = "BALLA6" STRING BALLA7VOICENAME = "BALLA7" STRING sVehicleRecordingsFile = "fraone" TEXT_LABEL sLabelFLAMAR = "FRA1_FLAMAR" TEXT_LABEL sLabelGTLAMH = "FRA1_GTLAMH" TEXT_LABEL sLabelGTTREH = "FRA1_GTTREH" TEXT_LABEL sLabelGTFRAH = "FRA1_GTFRAH" MODEL_NAMES mnBalla = G_M_Y_BALLAORIG_01 MODEL_NAMES mnCop = S_M_Y_COP_01 VECTOR vGroveStreet = << 96.973, -1946.51, 19.75 >> VECTOR vGroveStreetStart = << 102.61, -1956.37, 19.73 >> VECTOR vGroveStreetEnd = << -34.22, -1822.98, 25.23 >> VECTOR vAlleyEntrance = << -25.93, -1848.77, 24.59 >> VECTOR vLamarsLeadInPosition = << 86.163, -1958.071, 19.96 >> VECTOR vLamarsLeadInRotation = << 0.0, 0.0, -8.28 >> VECTOR vTrevorsLeadInPosition = << 85.213, -1958.021, 19.96 >> VECTOR vTrevorsLeadInRotation = << 0.0, 0.0, 39.240 >> VECTOR vLamarsDropOffPosition = << -56.96, -1463.14, 31.10 >> VECTOR vFranklinsDropOffPosition = <<-12.5528, -1460.2130, 29.5590>> VECTOR vTrevorsDropOffPosition = <<135.3672, -1308.8488, 27.9842>> VECTOR vGroup1EnemyAimCoords = <<84.1950, -1946.6494, 20.1688>> VECTOR vGroup1Enemy0Position = << 78.1228, -1942.1620, 19.8513 >> FLOAT fGroup1Enemy0Heading = 299.8389 FLOAT fChaseHeliSpawnTime = 22000.0 FLOAT fChaseAlliesCanFire = 15500.0 VECTOR vFilmCrewBeginAnimPosition = << -125.891, -1857.574, 0.455 >> VECTOR vFilmCrewBeginAnimRotation = << -0.000, 0.000, 60.0 >> //used for debug car tyre popping #IF IS_DEBUG_BUILD VECTOR vFrontLeftOffset = << -0.9, 1.5, -0.4 >> #ENDIF VECTOR vFrontRightOffset = << 0.9, 1.5, -0.4 >> #IF IS_DEBUG_BUILD VECTOR vRearLeftOffset = << -0.9, -1.5, -0.4 >> #ENDIF VECTOR vRearRightOffset = << 0.9, -1.5, -0.4 >> #IF IS_DEBUG_BUILD VECTOR vFrontLeftDamageOffset = << -0.9, 1.05, 0.2 >> #ENDIF VECTOR vFrontRightDamageOffset = << 0.9, 1.1, 0.2 >> #IF IS_DEBUG_BUILD VECTOR vRearLeftDamageOffset = << -0.9, -1.6, 0.2 >> #ENDIF VECTOR vRearRightDamageOffset = << 0.9, -1.5, 0.2 >> ///used for reading bits from INT g_iFranklin1VehicleChoice from gta5/script/dev/singleplayer/include/globals/mission_globals.sch ///used for storing and reading vehicle choices when using speedophiles for mission retry CONST_INT LAMAR_USED_SPEEDOPHILE_1 0 CONST_INT LAMAR_USED_SPEEDOPHILE_2 1 CONST_INT LAMAR_USED_SPEEDOPHILE_3 2 CONST_INT FRANKLIN_USED_SPEEDOPHILE_1 3 CONST_INT FRANKLIN_USED_SPEEDOPHILE_2 4 CONST_INT FRANKLIN_USED_SPEEDOPHILE_3 5 CONST_INT TREVOR_USED_SPEEDOPHILE_1 6 CONST_INT TREVOR_USED_SPEEDOPHILE_2 7 CONST_INT TREVOR_USED_SPEEDOPHILE_3 8 //water overrides TWEAK_FLOAT fOceanWaveAmplitude 0.300 TWEAK_FLOAT fOceanWaveMinAmplitude 0.250 TWEAK_FLOAT fOceanWaveMaxAmplitude 0.350 TWEAK_FLOAT fOceanNoiseMinAmplitude 0.350 TWEAK_FLOAT fShoreWaveamplitude 0.400 TWEAK_FLOAT fShoreWaveMinamplitude 0.250 TWEAK_FLOAT fShoreWaveMaxamplitude 0.550 TWEAK_FLOAT fRippleDisturb 0.050 TWEAK_FLOAT fRippleBumpiness 0.420 TWEAK_FLOAT fRippleMinBumpiness 0.250 TWEAK_FLOAT fRippleMaxBumpiness 0.500 TWEAK_FLOAT fOverrideStrength 0.650 TWEAK_FLOAT fFranklinEntryFlashPhase 0.925 TWEAK_FLOAT fTrevorEntryFlashPhase 0.910 TWEAK_INT iLamarEntryFlashTime 6700 //|======================================= VARIABLES =====================================| MISSION_STAGES eMissionStage = MISSION_STAGE_CUTSCENE_INTRO MISSION_FAILS eMissionFail = MISSION_FAIL_EMPTY PLAYER_BUDDIES ePlayerBuddy = PLAYER_BUDDY_NONE CHOP_BEHAVIOUR_ENUM eChopBehaviour = CHOP_BEHAVIOUR_MEDIUM CHOP_LEAN_IN_VAN_STATE_ENUM eChopInVanState WEAPON_TYPE eFranklinsFailWeapon = WEAPONTYPE_INVALID WEAPON_TYPE eTrevorsFailWeapon = WEAPONTYPE_INVALID //relationship groups REL_GROUP_HASH rgDog REL_GROUP_HASH rgBmxCrew REL_GROUP_HASH rgEnemies REL_GROUP_HASH rgFilmCrew //mission peds PED_STRUCT psLamar PED_STRUCT psTrevor PED_STRUCT psFranklin PED_STRUCT psChop //mission vehicles VEH_STRUCT vsVan VEH_STRUCT vsEnemyLeftChaseCar TRAIN_STRUCT sMissionTrain OBJECT_STRUCT osBag OBJECT_STRUCT osLight OBJECT_STRUCT osTrowel OBJECT_STRUCT osCamera OBJECT_STRUCT osBoombox OBJECT_STRUCT osCokeBlock OBJECT_STRUCT osMicrophone OBJECT_STRUCT osFranklinsDoorDummy OBJECT_STRUCT osStripClubDoorDummy //structs and variables for hot swap and Chop swap SELECTOR_PED_STRUCT sSelectorPeds SELECTOR_CAM_STRUCT sCamDetails BOOL bAllowHotSwap BOOL bSplitUpConversationFinished //locates header data LOCATES_HEADER_DATA sLocatesData //conversation struct structPedsForConversation sFranklin1Conversation INT iConversationProgress INT iConversationTimer TEXT_LABEL_23 lConversationLabel = "" BOOL bConversationPaused BOOL bRandomConversationAllowed INT iLoseCopsReminderTime INT iLoseCopsReminderCount INT iLamarEnterSeasharkDelayTimer INT iEnemyConversationTimer INT iEnemyRandomConversationDelay INT iDumpstersProgress INT iParkedVehiclesProgress INT iShootoutCleanupProgress //progress counters and flags for loading, skipping and replays INT iStageSetupProgress INT iMissionStageProgress BOOL bSkipFlag BOOL bReplayFlag BOOL bLoadingFlag //various mission flags BOOL bPlayerArrivedAtGroveStreet BOOL bCutsceneSkipped BOOL bEnterVehicleTaskInterrupted BOOL bLamarsOutfitSet BOOL bLamarsBagEquipped BOOL bOtherPedAtStationaryCoverpoint BOOL bPlayerInCombatWhenChopCamActive BOOL bGameplayCameraSet INT iSniperRifleConversationsCounter BOOL bLastEnemyKilledWithSniperRifle // once the cop reinforcements spawn eventually the allies will stop waiting at the alley // and just run down the hill. which CAN trigger fail // per Sergei and Ian @BSW (personally I'm not sure if this is the best idea or not..?) BOOL bShouldAlliesWaitForPlayer = TRUE // cop reinforcements spawn after X cops are dead OR iCopReinforcementTimer expires @BSW INT iCopReinforcementTimer BOOL bBMXHornUsed INT iPhotoShootSoundID BOOL bFirstEnemyGroupInCombat BOOL bFirstEnemyGroupInitialised BOOL bRenderEnemyBlips = TRUE ANGLED_AREA_STRUCT tbWave2 ANGLED_AREA_STRUCT tbIntersection ANGLED_AREA_STRUCT tbWave3 ANGLED_AREA_STRUCT tbWave4 ANGLED_AREA_STRUCT tbWave5 ANGLED_AREA_STRUCT tbParkedCar ANGLED_AREA_STRUCT tbAlliesToRiver //asset request counters INT iModelsRequested INT iRecordingsRequested INT iAnimationsRequested //bmx crew playback speeds FLOAT fBMX0PlabackSpeed FLOAT fBMX1PlabackSpeed FLOAT fBMX2PlabackSpeed //bmx crew playback start times FLOAT fBMX0StartTime FLOAT fBMX1StartTime FLOAT fBMX2StartTime DEFENSIVEAREA_STRUCT sLamarsDefensiveArea DEFENSIVEAREA_STRUCT sTrevorsDefensiveArea INT iPlayerFranklinKills INT iPlayerTrevorKills INT iBuddyFranklinKills INT iBuddyTrevorKills INT iBuddyLamarKills INT iBuddyChopKills //music BOOL bMusicScorePlaying BOOL bMusicEventHustlerTriggered BOOL bMusicEventWaterArriveTriggered BOOL bCopConversationsAllowed INT iCopConversationCounter INT iCopConversationTimer CAMERA_INDEX ScriptedCamera SCENARIO_BLOCKING_INDEX ScenarioBlockingArea1 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea2 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea3 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea4 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea5 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea6 SCENARIO_BLOCKING_INDEX ScenarioBlockingArea7 //lose the cops stage INT iGetawayCarsProgress INT iNeedCarBuddyReminders BOOL bBuddyDroppedOff BOOL bCopsChaseFinished INT iJackedGirlAmbientSpeechDelay BOOL bJackedGirlConversationFinished INT iNextChopAnimTime INT iNextBarkTime FLOAT fCachedVanSpeed INT iArea1, iArea2 VEHICLE_COMBAT_AVOIDANCE_AREA_INDEX iVehCombatArea1 VEHICLE_COMBAT_AVOIDANCE_AREA_INDEX iVehCombatArea2 INT iChopInVanProgress INT iVanEnterSceneID = -1 INT iVanExitSceneID = -1 INT iTrevorEntrySceneID = -1 INT iFranklinEntrySceneID = -1 INT iEnemiesInCutsceneProgress OBJECT_INDEX FranklinsWeapon, TrevorsWeapon BOOL bDisplayBuddyBlips = TRUE BOOL bCopWaveSpawned BOOL bLeadInTriggered BOOL bLeadInLocateReached BOOL bCustomRouteActive BOOL bShouldUseDefaultRoute BOOL bDropOffConversationFinished BOOL bCoverpointsCreated BOOL bEndCoverPointCreated COVERPOINT_INDEX EndCoverPointIndex BOOL bBuddyPinnedDown BOOL bBuddyPinnedDownSwitched INT iSearchLightChangeTimer INT iEnterVehicleTimer BOOL bFirstPersonFlashPlayed BOOL bWarpTrevorToResetCapsule INT iReplayCameraWarpTimer //Fix for bug 2229916 //|========================================= ARRAYS ======================================| BOOL FailFlags[MAX_MISSION_FAILS] //asset arrays MODEL_NAMES MissionModels[MAX_MODELS] INT MissionRecordings[MAX_CAR_RECORDINGS] STRING MissionAnimations[MAX_ANIMATIONS] VEH_STRUCT vsSpeedophiles[MAX_SPEEDOPHILES] VEH_STRUCT vsGhosts[MAX_SPEEDOPHILES] VEH_STRUCT vsGetawayCars[6] //enemies ENEMY_STRUCT esGroup1[3] ENEMY_STRUCT esGroup2[1] ENEMY_STRUCT esGroup3[3] ENEMY_STRUCT esGroup4[2] ENEMY_STRUCT esGroup5[1] ENEMY_STRUCT esGroup6[2] ENEMY_STRUCT esGroup7[4] ENEMY_STRUCT esGroup8[2] ENEMY_STRUCT esGroup9[6] ENEMY_STRUCT esCarCuldeSacLeft[1] ENEMY_STRUCT esCarCuldeSacRight[1] ENEMY_STRUCT esCarIntersection1Left[1] ENEMY_STRUCT esCarIntersection1Right[1] ENEMY_STRUCT esCarIntersection2Left[2] ENEMY_STRUCT esCarStreetLeft[1]//2 ENEMY_STRUCT esCarStreetRight[1] ENEMY_STRUCT esCarDriveway[2] ENEMY_STRUCT esHouseEnemies[1] ENEMY_STRUCT esPorchEnemies[1] ENEMY_STRUCT esLeftChaseEnemies[2] ENEMY_STRUCT esSidelineEnemies[6] //enemy cars and parked cars VEH_STRUCT vsEnemyCars[5] VEH_STRUCT vsParkedVehicles[4] //police ENEMY_STRUCT esPoliceCarEndReinforcements[4] PED_STRUCT psBoatCops[2] PED_STRUCT psRiverCopCar0Cops[2] PED_STRUCT psRiverCopCar1Cops[2] PED_STRUCT psRiverCopCar2Cops[2] PED_STRUCT psRiverCopCar3Cops[2] PED_STRUCT psRiverCopCar4Cops[2] PED_STRUCT psStreetCopCar1Cops[2] PED_STRUCT psStreetCopCar2Cops[2] PED_STRUCT psStreetCopCar3Cops[2] PED_STRUCT psHillCopCar0Cops[2] VEH_STRUCT vsCopBoat VEH_STRUCT vsStreetCopCars[5] VEH_STRUCT vsRiverCopCars[5] VEH_STRUCT vsHillCopCars[1] SPAWNPOINT_STRUCT EnemySpawnpoints[2] SPAWNPOINT_STRUCT EnemySidekickSpawnpoints[2] // hacky way to double up the spawnpoint system and spawn 2 guys per spawn attempt @BSW //mission objects OBJECT_STRUCT osDumpsters[9] //coverpoints for buddies to use in shootout COVERPOINT_STRUCT csCoverpoints[63] VECTOR LamarShootoutPositions[13] BOOL Events[EVENT_MAX_EVENTS] //bmx crew PED_STRUCT psBmxCrew[3] VEH_STRUCT vsBmxBikes[3] //film crew PED_STRUCT psFilmCrew[MAX_FILM_CREW_PEDS] //swat peds PED_STRUCT psSwat[3] VEH_STRUCT vsPoliceHeli //text printing INT iTriggeredTextHashes[30] INT iNumTextHashesStored BOOL bFilmCrewAttacked INT iGroveStreetSetup //Recording stuff BOOL bCutsceneRecordingStarted = FALSE //|========================= MISCELLANEOUS PROCEDURES & FUNCTIONS ========================| /// PURPOSE: /// Resets all mission flags and progress counters to their default values. PROC RESET_MISSION_FLAGS() //reset setup progress to 1, so that iSetupProgress = 0 only runs once, on initial mission load. iStageSetupProgress = 1 iMissionStageProgress = 0 iConversationProgress = 0 psLamar.iProgress = 0 psLamar.iTimer = 0 psLamar.bWaitingForPlayer = FALSE psLamar.bWaitingToAdvance = FALSE psLamar.bFleeing = FALSE psLamar.bHasTask = FALSE psLamar.bDefensiveAreaTaken = FALSE psLamar.bInPosition = FALSE psTrevor.iHealthConversationTimer = 0 psTrevor.iHealthConversationCounter = 0 psTrevor.iProgress = 0 psTrevor.iTimer = 0 psTrevor.bWaitingForPlayer = FALSE psTrevor.bWaitingToAdvance = FALSE psTrevor.bDefensiveAreaTaken = FALSE psTrevor.bFleeing = FALSE psTrevor.bHasTask = FALSE psTrevor.iHealthConversationTimer = 0 psTrevor.iHealthConversationCounter = 0 psFranklin.iProgress = 0 psFranklin.iTimer = 0 psFranklin.bWaitingForPlayer = FALSE psFranklin.bWaitingToAdvance = FALSE psFranklin.bFleeing = FALSE psFranklin.bHasTask = FALSE psFranklin.iHealthConversationTimer = 0 psFranklin.iHealthConversationCounter = 0 iDumpstersProgress = 0 iParkedVehiclesProgress = 0 iShootoutCleanupProgress = 0 psChop.iTimer = 0 psChop.iProgress = 0 iConversationTimer = 0 // iChopShouts = 0 iLoseCopsReminderTime = 0 iLoseCopsReminderCount = 0 bConversationPaused = FALSE bRandomConversationAllowed = FALSE iEnemyConversationTimer = 0 iEnemyRandomConversationDelay = 0 vsParkedVehicles[0].iProgress = 0 vsEnemyCars[CAR_DRIVEWAY].iProgress = 0 psFilmCrew[FCP_CLAY].iProgress = 0 psFilmCrew[FCP_JACKEDGIRL].iProgress= 0 bEnterVehicleTaskInterrupted = FALSE bOtherPedAtStationaryCoverpoint = FALSE bPlayerInCombatWhenChopCamActive = FALSE bShouldAlliesWaitForPlayer = TRUE bPlayerArrivedAtGroveStreet = FALSE bCutsceneSkipped = FALSE //bmx crew progress psBmxCrew[0].iProgress = 0 bBMXHornUsed = FALSE bRenderEnemyBlips = TRUE sMissionTrain.iProgress = 0 bSplitUpConversationFinished = FALSE bFilmCrewAttacked = FALSE bMusicScorePlaying = FALSE bMusicEventHustlerTriggered = FALSE bMusicEventWaterArriveTriggered = FALSE bCopConversationsAllowed = FALSE iCopConversationTimer = 0 iCopConversationCounter = 0 iGetawayCarsProgress = 0 iNeedCarBuddyReminders = 0 bBuddyDroppedOff = FALSE bCopsChaseFinished = FALSE iJackedGirlAmbientSpeechDelay = 0 bJackedGirlConversationFinished = FALSE iGroveStreetSetup = 0 iChopInVanProgress = 0 iEnemiesInCutsceneProgress = 0 sLabelGTLAMH = "FRA1_GTLAMH" sLabelGTTREH = "FRA1_GTTREH" sLabelGTFRAH = "FRA1_GTFRAH" bDisplayBuddyBlips = TRUE bCopWaveSpawned = FALSE bLeadInTriggered = FALSE bLeadInLocateReached = FALSE bCustomRouteActive = FALSE bShouldUseDefaultRoute = FALSE bDropOffConversationFinished = FALSE bBuddyPinnedDown = FALSE bBuddyPinnedDownSwitched = FALSE iSniperRifleConversationsCounter = 0 bLastEnemyKilledWithSniperRifle = FALSE iLamarEnterSeasharkDelayTimer = 0 iSearchLightChangeTimer = 0 iEnterVehicleTimer = 0 bFirstPersonFlashPlayed = FALSE bWarpTrevorToResetCapsule = FALSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission flags and progress counters are reset.") #ENDIF ENDPROC PROC INITIALISE_UBER_ARRAY() SetPieceCarPos[0] = <<-64.0012, -1884.2284, 9.2153>> SetPieceCarQuatX[0] = -0.0079 SetPieceCarQuatY[0] = 0.0266 SetPieceCarQuatZ[0] = 0.8865 SetPieceCarQuatW[0] = -0.4619 SetPieceCarRecording[0] = 58 SetPieceCarStartime[0] = 7000.0000 SetPieceCarRecordingSpeed[0] = 1.0000 SetPieceCarModel[0] = oracle // SetPieceCarPos[0] = <<-35.8119, -1900.4089, 10.7125>> // SetPieceCarQuatX[0] = 0.0000 // SetPieceCarQuatY[0] = 0.0000 // SetPieceCarQuatZ[0] = 0.4815 // SetPieceCarQuatW[0] = 0.8765 // SetPieceCarRecording[0] = 58 // SetPieceCarStartime[0] = 0.0000 // SetPieceCarRecordingSpeed[0] = 1.0000 // SetPieceCarModel[0] = oracle SetPieceCarPos[1] = <<-48.2820, -2279.3416, 30.8690>> SetPieceCarQuatX[1] = -0.0207 SetPieceCarQuatY[1] = 0.0265 SetPieceCarQuatZ[1] = -0.6639 SetPieceCarQuatW[1] = 0.7470 SetPieceCarRecording[1] = 91 SetPieceCarStartime[1] = 22000.0//24000.0000 SetPieceCarRecordingSpeed[1] = 1.0000 SetPieceCarModel[1] = polmav SetPieceCarPos[2] = <<-158.5204, -1847.9163, -0.0089>> SetPieceCarQuatX[2] = -0.0108 SetPieceCarQuatY[2] = 0.0256 SetPieceCarQuatZ[2] = 0.9214 SetPieceCarQuatW[2] = -0.3877 SetPieceCarRecording[2] = 63 SetPieceCarStartime[2] = 0.0000 SetPieceCarRecordingSpeed[2] = 1.0000 SetPieceCarModel[2] = seashark SetPieceCarPos[3] = <<-164.9134, -1842.2776, -0.0113>> SetPieceCarQuatX[3] = -0.0116 SetPieceCarQuatY[3] = 0.0251 SetPieceCarQuatZ[3] = 0.9078 SetPieceCarQuatW[3] = -0.4185 SetPieceCarRecording[3] = 82 SetPieceCarStartime[3] = 0.0000 SetPieceCarRecordingSpeed[3] = 1.0000 SetPieceCarModel[3] = seashark ENDPROC PROC SET_SPEEDOPHILE_POSITIONS_IN_INT(INT &iGlobalValue, PED_SPEEDOPHILE eLamar, PED_SPEEDOPHILE eFranklin, PED_SPEEDOPHILE eTrevor) iGlobalValue = 0 //reset all flags SWITCH eLamar //store flag for Lamar's speedophile CASE SPEEDOPHILE_1 SET_BIT(iGlobalValue, LAMAR_USED_SPEEDOPHILE_1) BREAK CASE SPEEDOPHILE_2 SET_BIT(iGlobalValue, LAMAR_USED_SPEEDOPHILE_2) BREAK CASE SPEEDOPHILE_3 SET_BIT(iGlobalValue, LAMAR_USED_SPEEDOPHILE_3) BREAK ENDSWITCH SWITCH eFranklin //store flag for Franklin's speedophile CASE SPEEDOPHILE_1 SET_BIT(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_1) BREAK CASE SPEEDOPHILE_2 SET_BIT(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_2) BREAK CASE SPEEDOPHILE_3 SET_BIT(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_3) BREAK ENDSWITCH SWITCH eTrevor //store flag for Trevor's speedophile CASE SPEEDOPHILE_1 SET_BIT(iGlobalValue, TREVOR_USED_SPEEDOPHILE_1) BREAK CASE SPEEDOPHILE_2 SET_BIT(iGlobalValue, TREVOR_USED_SPEEDOPHILE_2) BREAK CASE SPEEDOPHILE_3 SET_BIT(iGlobalValue, TREVOR_USED_SPEEDOPHILE_3) BREAK ENDSWITCH #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": *********************** SET_SPEEDOPHILE_POSITIONS_IN_INT *************************") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Storing Lamar's speedophile as: ", ENUM_TO_INT(eLamar), " in global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Storing Franklin's speedophile as: ", ENUM_TO_INT(eFranklin), " in global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Storing Trevor's speedophile as: ", ENUM_TO_INT(eTrevor), " in global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": **********************************************************************************") //SCRIPT_ASSERT("SET_SPEEDOPHILE_POSITIONS_IN_INT triggered.") #ENDIF ENDPROC PROC GET_SPEEDOPHILE_POSITIONS_FROM_INT(INT iGlobalValue, PED_SPEEDOPHILE &eLamar, PED_SPEEDOPHILE &eFranklin, PED_SPEEDOPHILE &eTrevor) IF IS_BIT_SET(iGlobalValue, LAMAR_USED_SPEEDOPHILE_1) eLamar = SPEEDOPHILE_1 ELIF IS_BIT_SET(iGlobalValue, LAMAR_USED_SPEEDOPHILE_2) eLamar = SPEEDOPHILE_2 ELIF IS_BIT_SET(iGlobalValue, LAMAR_USED_SPEEDOPHILE_3) eLamar = SPEEDOPHILE_3 ENDIF IF IS_BIT_SET(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_1) eFranklin = SPEEDOPHILE_1 ELIF IS_BIT_SET(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_2) eFranklin = SPEEDOPHILE_2 ELIF IS_BIT_SET(iGlobalValue, FRANKLIN_USED_SPEEDOPHILE_3) eFranklin = SPEEDOPHILE_3 ENDIF IF IS_BIT_SET(iGlobalValue, TREVOR_USED_SPEEDOPHILE_1) eTrevor = SPEEDOPHILE_1 ELIF IS_BIT_SET(iGlobalValue, TREVOR_USED_SPEEDOPHILE_2) eTrevor = SPEEDOPHILE_2 ELIF IS_BIT_SET(iGlobalValue, TREVOR_USED_SPEEDOPHILE_3) eTrevor = SPEEDOPHILE_3 ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": *********************** GET_SPEEDOPHILE_POSITIONS_FROM_INT ***********************") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Getting Lamar's speedophile as: ", ENUM_TO_INT(eLamar), " from global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Getting Franklin's speedophile as: ", ENUM_TO_INT(eFranklin), " from global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Getting Trevor's speedophile as: ", ENUM_TO_INT(eTrevor), " from global variable.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": **********************************************************************************") //SCRIPT_ASSERT("GET_SPEEDOPHILE_POSITIONS_FROM_INT triggered.") #ENDIF ENDPROC FUNC SCENARIO_BLOCKING_INDEX CREATE_SCENARIO_BLOCKING_AREA(VECTOR vPosition, VECTOR vSize) RETURN ADD_SCENARIO_BLOCKING_AREA(<< vPosition.x - vSize.x, vPosition.y - vSize.y, vPosition.z - vSize.z >>, << vPosition.x + vSize.x, vPosition.y + vSize.y, vPosition.z + vSize.z >>) ENDFUNC PROC SETUP_ROADS_IN_GROVE_STREET(BOOL bInstant, INT &iCounter) IF ( bInstant = TRUE ) //Grove Street main road SET_ROADS_IN_ANGLED_AREA(<<104.158325,-1939.768677,19.301186>>, <<-117.924530,-1754.341431,36.951656>>, 16.0, FALSE, FALSE) //Grove Street area roads SET_ROADS_IN_ANGLED_AREA(<<53.754932,-1911.988159,20.231783>>, <<93.245361,-1864.880615,31.306746>>, 16.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-39.534374,-1825.756104,24.614100>>, <<2.099868,-1775.209961,36.116295>>, 16.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<111.198059,-1814.178833,23.501926>>, <<79.269058,-1854.317749,33.797722>>, 16.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-49.493370,-1730.557861,22.286551>>, <<94.720413,-1853.355347,33.617447>>, 20.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-92.358604,-1788.428223,25.833918>>, <<-56.557934,-1744.573242,38.326439>>, 28.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-104.422813,-1758.286255,26.666639>>, <<-88.434166,-1738.211182,38.377785>>, 8.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-109.608795,-1737.845825,28.215425>>, <<-84.359512,-1727.573364,36.346596>>, 6.0, FALSE, FALSE) SET_ROADS_IN_ANGLED_AREA(<<-152.738892,-1781.890747,27.658955>>, <<-103.498375,-1751.495117,36.638084>>, 16.0, FALSE, FALSE) SET_PED_PATHS_IN_AREA(<<-131.0, -1958.0, -8.0>>, << 204.0, -1734.0, 55.0>>, FALSE) IF ( ScenarioBlockingArea1 = NULL ) ScenarioBlockingArea1 = CREATE_SCENARIO_BLOCKING_AREA(<< 54.70, -1914.70, 21.18 >>, << 1.0, 1.0, 1.0 >>) ENDIF IF ( ScenarioBlockingArea2 = NULL ) ScenarioBlockingArea2 = CREATE_SCENARIO_BLOCKING_AREA(<< 91.42, -1951.30, 21.74 >>, << 7.0, 7.0, 3.0>>) //cutscene porch ENDIF IF ( ScenarioBlockingArea3 = NULL ) ScenarioBlockingArea3 = CREATE_SCENARIO_BLOCKING_AREA(<< 123.1, -1932.93, 20.27 >>, << 1.0, 1.0, 1.0 >>) ENDIF IF ( ScenarioBlockingArea4 = NULL ) ScenarioBlockingArea4 = CREATE_SCENARIO_BLOCKING_AREA(<< 89.37, -2255.94, 3.08 >>, << 20.0, 4.0, 6.0>>) //pier ENDIF IF ( ScenarioBlockingArea7 = NULL ) ScenarioBlockingArea7 = CREATE_SCENARIO_BLOCKING_AREA(<<100.239532,-1945.018921,21.303852>>, << 8.0, 6.0, 2.0 >>) //driveway in front of deal ENDIF CLEAR_AREA(vGroveStreet, 450.0, TRUE) CLEAR_AREA_OF_VEHICLES(vGroveStreet, 450.0) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-109.0, -1973.0, 7.0>>, << 114.0, -1749.0, 39.0>>, FALSE) REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<<-109.0, -1973.0, 7.0>>, << 114.0, -1749.0, 39.0>>) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<122.0, -1943.8, 18.7>>, << 130.0, -1935.9, 26.8>>, FALSE) REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<<122.0, -1943.8, 18.7>>, << 130.0, -1935.9, 26.8>>) ELSE SWITCH iCounter CASE 0 SET_ROADS_IN_ANGLED_AREA(<<104.158325,-1939.768677,19.301186>>, <<-117.924530,-1754.341431,36.951656>>, 16.0, FALSE, FALSE) iCounter++ BREAK CASE 1 SET_ROADS_IN_ANGLED_AREA(<<53.754932,-1911.988159,20.231783>>, <<93.245361,-1864.880615,31.306746>>, 16.0, FALSE, FALSE) iCounter++ BREAK CASE 2 SET_ROADS_IN_ANGLED_AREA(<<-39.534374,-1825.756104,24.614100>>, <<2.099868,-1775.209961,36.116295>>, 16.0, FALSE, FALSE) iCounter++ BREAK CASE 3 SET_ROADS_IN_ANGLED_AREA(<<111.198059,-1814.178833,23.501926>>, <<79.269058,-1854.317749,33.797722>>, 16.0, FALSE, FALSE) iCounter++ BREAK CASE 4 SET_ROADS_IN_ANGLED_AREA(<<-49.493370,-1730.557861,22.286551>>, <<94.720413,-1853.355347,33.617447>>, 20.0, FALSE, FALSE) iCounter++ BREAK CASE 5 SET_ROADS_IN_ANGLED_AREA(<<-92.358604,-1788.428223,25.833918>>, <<-56.557934,-1744.573242,38.326439>>, 28.0, FALSE, FALSE) iCounter++ BREAK CASE 6 SET_ROADS_IN_ANGLED_AREA(<<-104.422813,-1758.286255,26.666639>>, <<-88.434166,-1738.211182,38.377785>>, 8.0, FALSE, FALSE) iCounter++ BREAK CASE 7 SET_ROADS_IN_ANGLED_AREA(<<-109.608795,-1737.845825,28.215425>>, <<-84.359512,-1727.573364,36.346596>>, 6.0, FALSE, FALSE) iCounter++ BREAK CASE 8 SET_ROADS_IN_ANGLED_AREA(<<-152.738892,-1781.890747,27.658955>>, <<-103.498375,-1751.495117,36.638084>>, 16.0, FALSE, FALSE) iCounter++ BREAK CASE 9 SET_PED_PATHS_IN_AREA(<<-131.0, -1958.0, -8.0>>, << 204.0, -1734.0, 55.0>>, FALSE) iCounter++ BREAK CASE 10 IF ( ScenarioBlockingArea1 = NULL ) ScenarioBlockingArea1 = CREATE_SCENARIO_BLOCKING_AREA(<< 54.88, -1914.98, 21.18 >>, << 1.0, 1.0, 1.0 >>) ENDIF iCounter++ BREAK CASE 11 IF ( ScenarioBlockingArea2 = NULL ) ScenarioBlockingArea2 = CREATE_SCENARIO_BLOCKING_AREA(<< 86.39, -1955.41, 20.24 >>, << 1.5, 1.5, 1.0 >>) ENDIF iCounter++ BREAK CASE 12 IF ( ScenarioBlockingArea3 = NULL ) ScenarioBlockingArea3 = CREATE_SCENARIO_BLOCKING_AREA(<< 122.1, -1932.93, 20.27 >>, << 1.0, 1.0, 1.0 >>) ENDIF iCounter++ BREAK CASE 13 IF ( ScenarioBlockingArea4 = NULL ) ScenarioBlockingArea4 = CREATE_SCENARIO_BLOCKING_AREA(<< 89.37, -2255.94, 3.08 >>, << 20.0, 4.0, 6.0>>) ENDIF iCounter++ BREAK CASE 14 IF ( ScenarioBlockingArea7 = NULL ) ScenarioBlockingArea7 = CREATE_SCENARIO_BLOCKING_AREA(<<100.239532,-1945.018921,21.303852>>, << 8.0, 6.0, 2.0 >>) //driveway in front of deal ENDIF iCounter++ BREAK CASE 15 SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-109.0, -1973.0, 7.0>>, << 114.0, -1749.0, 39.0>>, FALSE) iCounter++ BREAK CASE 16 REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<<-109.0, -1973.0, 7.0>>, << 114.0, -1749.0, 39.0>>) iCounter++ BREAK CASE 17 SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<122.0, -1943.8, 18.7>>, << 130.0, -1935.9, 26.8>>, FALSE) iCounter++ BREAK CASE 18 REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<<122.0, -1943.8, 18.7>>, << 130.0, -1935.9, 26.8>>) iCounter++ BREAK CASE 19 CLEAR_AREA(vGroveStreet, 450.0, TRUE) iCounter++ BREAK CASE 20 CLEAR_AREA_OF_VEHICLES(vGroveStreet, 450.0) iCounter++ BREAK CASE 21 //check if peds are removed??? BREAK ENDSWITCH ENDIF ENDPROC /// PURPOSE: /// Sets all fail flags to specified boolean value. /// PARAMS: /// bNewBool - Boolean value to set all flags to TRUE or FALSE. PROC SET_FAIL_FLAGS(BOOL bNewBool) INT i = 0 FOR i = 0 TO ( COUNT_OF(FailFlags) - 1 ) FailFlags[i] = bNewBool ENDFOR ENDPROC /// PURPOSE: /// Sets all event flags to specified boolean value. /// PARAMS: /// bTurnOn - Boolean value to set all flags to TRUE or FALSE. PROC SET_ALL_EVENT_FLAGS(BOOL &sArray[], BOOL bTurnOn) INT i = 0 FOR i = 0 TO ( COUNT_OF(sArray) - 1 ) sArray[i] = bTurnOn ENDFOR #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": All event flags set to ", bTurnOn, ".") #ENDIF ENDPROC FUNC BOOL IS_THIS_CONVERSATION_PLAYING(STRING sRoot) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TEXT_LABEL txtRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() IF ARE_STRINGS_EQUAL(sRoot, txtRoot) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC REMOVE_LABEL_ARRAY_SPACES() INT iArrayLength = COUNT_OF(iTriggeredTextHashes) INT i = 0 REPEAT (iArrayLength - 1) i IF iTriggeredTextHashes[i] = 0 IF iTriggeredTextHashes[i+1] != 0 iTriggeredTextHashes[i] = iTriggeredTextHashes[i+1] iTriggeredTextHashes[i+1] = 0 ENDIF ENDIF ENDREPEAT ENDPROC FUNC INT GET_LABEL_INDEX(INT iLabelHash) INT i = 0 REPEAT iNumTextHashesStored i IF iTriggeredTextHashes[i] = iLabelHash RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC FUNC BOOL HAS_LABEL_BEEN_TRIGGERED(STRING strLabel) INT iHash = GET_HASH_KEY(strLabel) IF GET_LABEL_INDEX(iHash) != -1 RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC SET_LABEL_AS_TRIGGERED(STRING strLabel, BOOL bTrigger) INT iHash = GET_HASH_KEY(strLabel) IF bTrigger IF NOT HAS_LABEL_BEEN_TRIGGERED(strLabel) INT iArraySize = COUNT_OF(iTriggeredTextHashes) IF iNumTextHashesStored < iArraySize iTriggeredTextHashes[iNumTextHashesStored] = iHash iNumTextHashesStored++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", strLabel, " TRUE.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", iNumTextHashesStored, "/", COUNT_OF(iTriggeredTextHashes), ".") #ENDIF ELSE #IF IS_DEBUG_BUILD SCRIPT_ASSERT("SET_LABEL_AS_TRIGGERED: Label array is full.") #ENDIF ENDIF ENDIF ELSE INT iIndex = GET_LABEL_INDEX(iHash) IF iIndex != -1 iTriggeredTextHashes[iIndex] = 0 REMOVE_LABEL_ARRAY_SPACES() iNumTextHashesStored-- #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", strLabel, " TRUE.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", iNumTextHashesStored, "/", COUNT_OF(iTriggeredTextHashes), ".") #ENDIF ENDIF ENDIF ENDPROC PROC CLEAR_TRIGGERED_LABELS() INT iArraySize = COUNT_OF(iTriggeredTextHashes) INT i = 0 REPEAT iArraySize i iTriggeredTextHashes[i] = 0 ENDREPEAT iNumTextHashesStored = 0 ENDPROC PROC UPDATE_TRIGGERED_LABEL(TEXT_LABEL &sLabel) IF NOT IS_STRING_NULL_OR_EMPTY(sLabel) //if the label is not empty, which means not yet printed by locates header IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabel) //if it was not set as triggered by script IF IS_THIS_PRINT_BEING_DISPLAYED(sLabel) //if the label was displayed on screen SET_LABEL_AS_TRIGGERED(sLabel, TRUE) //mark it as triggered ENDIF ELSE //if the label was set as triggered by script, //which means it was printed by locates header IF NOT IS_THIS_PRINT_BEING_DISPLAYED(sLabel) //but is not currently being printed, cleared off screen or timed out sLabel = "" //mark is as empty ENDIF ENDIF ENDIF ENDPROC PROC PRINT_GOD_TEXT_ADVANCED(STRING sLabel, INT iDuration = DEFAULT_GOD_TEXT_TIME, BOOL bOnce = TRUE) IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabel) PRINT(sLabel, iDuration, 1) SET_LABEL_AS_TRIGGERED(sLabel, bOnce) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Printing god text ", sLabel, ".") #ENDIF ENDIF ENDPROC /// PURPOSE: /// Warps specified ped to new coordinates and sets specified ped's new heading. /// PARAMS: /// ped - PED_INDEX to warp. /// vNewPosition - VECTOR coordinates specifying new ped's position. /// fNewHeading - FLOAT specifying new ped's heading. /// bKeepVehicle - Specifies if ped should keep vehicle they are currently in. /// bResetGameplayCamera - Specifies if gameplay camera should be positioned behind player's back. Works only for PLAYER_PED_ID(). /// bLoadScene - Specifies if scene at new provided coordinates should be loaded. Works only for PLAYER_PED_ID(). PROC WARP_PED(PED_INDEX ped, VECTOR vNewPosition, FLOAT fNewHeading, BOOL bKeepVehicle, BOOL bResetGameplayCamera, BOOL bLoadScene) IF NOT IS_PED_INJURED(ped) IF ( bKeepVehicle = TRUE ) SET_PED_COORDS_KEEP_VEHICLE(ped, vNewPosition) ELIF ( bKeepVehicle = FALSE ) SET_ENTITY_COORDS(ped, vNewPosition) ENDIF SET_ENTITY_HEADING(ped, fNewHeading) IF ( ped = PLAYER_PED_ID()) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Warping player ped to coordinates ", vNewPosition, " and heading ", fNewHeading, ".") #ENDIF IF ( bResetGameplayCamera = TRUE) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) ENDIF IF ( bLoadScene = TRUE ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling LOAD_SCENE() at coordinates ", vNewPosition, ". This might take a while to load.") #ENDIF LOAD_SCENE(vNewPosition) ENDIF ENDIF ENDIF ENDPROC PROC OVERRIDE_WATER_SETTINGS(BOOL bUseOverride, FLOAT fFadeTime = 1.0, FLOAT fStrength = 0.75) IF bUseOverride WATER_OVERRIDE_FADE_IN(fFadeTime) WATER_OVERRIDE_SET_OCEANWAVEAMPLITUDE(fOceanWaveAmplitude) WATER_OVERRIDE_SET_OCEANWAVEMINAMPLITUDE(fOceanWaveMinAmplitude) WATER_OVERRIDE_SET_OCEANWAVEMAXAMPLITUDE(fOceanWaveMaxAmplitude) WATER_OVERRIDE_SET_OCEANNOISEMINAMPLITUDE(fOceanNoiseMinAmplitude) WATER_OVERRIDE_SET_SHOREWAVEAMPLITUDE(fShoreWaveAmplitude) WATER_OVERRIDE_SET_SHOREWAVEMINAMPLITUDE(fShoreWaveMinAmplitude) WATER_OVERRIDE_SET_SHOREWAVEMAXAMPLITUDE(fShoreWaveMaxAmplitude) WATER_OVERRIDE_SET_RIPPLEDISTURB(fRippleDisturb) WATER_OVERRIDE_SET_RIPPLEBUMPINESS(fRippleBumpiness) WATER_OVERRIDE_SET_RIPPLEMINBUMPINESS(fRippleMinBumpiness) WATER_OVERRIDE_SET_RIPPLEMAXBUMPINESS(fRippleMaxBumpiness) WATER_OVERRIDE_SET_STRENGTH(fStrength) ELSE WATER_OVERRIDE_FADE_OUT(fFadeTime) ENDIF ENDPROC FUNC FLOAT GET_PED_HEALTH_RATIO(PED_INDEX PedIndex) IF DOES_ENTITY_EXIST(PedIndex) IF NOT IS_ENTITY_DEAD(PedIndex) RETURN ( TO_FLOAT(GET_ENTITY_HEALTH(PedIndex)) - 100.0 ) / ( TO_FLOAT(GET_ENTITY_MAX_HEALTH(PedIndex)) - 100.0 ) ENDIF ENDIF RETURN 1.0 ENDFUNC /// PURPOSE: /// Returns PED_INDEX for specified player ped character from enumCharacterList. /// PARAMS: /// CHAR_TYPE - Character to get ped index for. For example CHAR_FRANKLIN, CHAR_TREVOR or CHAR_MICHAEL. /// RETURNS: /// PED_INDEX for the specified player ped character. FUNC PED_INDEX GET_PED_INDEX(enumCharacterList CHAR_TYPE) IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TYPE ) RETURN PLAYER_PED_ID() ELSE RETURN sSelectorPeds.pedID[GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(CHAR_TYPE)] ENDIF ENDFUNC FUNC BOOL IS_ENTITY_IN_LOCATE(ENTITY_INDEX EntityIndex, VECTOR vPosition, VECTOR vSize #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition) ENDIF #ENDIF IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) IF IS_ENTITY_AT_COORD(EntityIndex, vPosition, vSize) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_ENTITY_IN_ANGLED_AREA_LOCATE(ENTITY_INDEX EntityIndex, VECTOR vPosition1, VECTOR vPosition2, FLOAT fWidth #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition1) ENDIF #ENDIF IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) IF IS_ENTITY_IN_ANGLED_AREA(EntityIndex, vPosition1, vPosition2, fWidth) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC // !! be careful using this !! @BSW // in case an AI manages to get through an angled area and then the player switches to him FUNC BOOL IS_PLAYER_IN_ANGLED_AREA_LOCATE(ANGLED_AREA_STRUCT thisArea) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(thisArea.sDebugName) DRAW_DEBUG_TEXT(thisArea.sDebugName, thisArea.vStart, 0, 255) DRAW_DEBUG_TEXT(thisArea.sDebugName, thisArea.vEnd, 0, 255) DRAW_DEBUG_LINE(thisArea.vStart, thisArea.vEnd, 0, 255) ENDIF #ENDIF IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), thisArea.vStart, thisArea.vEnd, thisArea.fWidth) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_ANY_PED_IN_LOCATE(PED_INDEX PedIndex1, PED_INDEX PedIndex2, PED_INDEX PedIndex3, VECTOR vPosition, VECTOR vSize #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition) ENDIF #ENDIF IF DOES_ENTITY_EXIST(PedIndex1) IF NOT IS_ENTITY_DEAD(PedIndex1) IF IS_ENTITY_AT_COORD(PedIndex1, vPosition, vSize) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(PedIndex2) IF NOT IS_ENTITY_DEAD(PedIndex2) IF IS_ENTITY_AT_COORD(PedIndex2, vPosition, vSize) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(PedIndex3) IF NOT IS_ENTITY_DEAD(PedIndex3) IF IS_ENTITY_AT_COORD(PedIndex3, vPosition, vSize) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_ALL_PEDS_IN_LOCATE(PED_INDEX PedIndex1, PED_INDEX PedIndex2, PED_INDEX PedIndex3, VECTOR vPosition, VECTOR vSize #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition) ENDIF #ENDIF IF DOES_ENTITY_EXIST(PedIndex1) AND DOES_ENTITY_EXIST(PedIndex2) AND DOES_ENTITY_EXIST(PedIndex3) IF NOT IS_ENTITY_DEAD(PedIndex1) AND NOT IS_ENTITY_DEAD(PedIndex2) AND NOT IS_ENTITY_DEAD(PedIndex3) IF IS_ENTITY_AT_COORD(PedIndex1, vPosition, vSize) AND IS_ENTITY_AT_COORD(PedIndex2, vPosition, vSize) AND IS_ENTITY_AT_COORD(PedIndex3, vPosition, vSize) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(ANGLED_AREA_STRUCT aArea) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(aArea.sDebugName) DRAW_DEBUG_TEXT(aArea.sDebugName, aArea.vStart, 0, 255) DRAW_DEBUG_TEXT(aArea.sDebugName, aArea.vEnd, 0, 255) DRAW_DEBUG_LINE(aArea.vStart, aArea.vEnd, 0, 255) ENDIF #ENDIF IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_FRANKLIN)) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_FRANKLIN), aArea.vStart, aArea.vEnd, aArea.fWidth) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_TREVOR)) IF IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_TREVOR), aArea.vStart, aArea.vEnd, aArea.fWidth) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, aArea.vStart, aArea.vEnd, aArea.fWidth) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_ANY_PED_IN_ANGLED_AREA_LOCATE(PED_INDEX PedIndex1, PED_INDEX PedIndex2, PED_INDEX PedIndex3, VECTOR vPosition1, VECTOR vPosition2, FLOAT fWidth #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition1) ENDIF #ENDIF IF DOES_ENTITY_EXIST(PedIndex1) IF NOT IS_ENTITY_DEAD(PedIndex1) IF IS_ENTITY_IN_ANGLED_AREA(PedIndex1, vPosition1, vPosition2, fWidth) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(PedIndex2) IF NOT IS_ENTITY_DEAD(PedIndex2) IF IS_ENTITY_IN_ANGLED_AREA(PedIndex2, vPosition1, vPosition2, fWidth) RETURN TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(PedIndex3) IF NOT IS_ENTITY_DEAD(PedIndex3) IF IS_ENTITY_IN_ANGLED_AREA(PedIndex3, vPosition1, vPosition2, fWidth) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_ALL_PEDS_IN_ANGLED_AREA_LOCATE(PED_INDEX PedIndex1, PED_INDEX PedIndex2, PED_INDEX PedIndex3, VECTOR vPosition1, VECTOR vPosition2, FLOAT fWidth #IF IS_DEBUG_BUILD, STRING sDisplayName = NULL #ENDIF) //display debug locate name first #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDisplayName) DRAW_DEBUG_TEXT(sDisplayName, vPosition1) ENDIF #ENDIF IF DOES_ENTITY_EXIST(PedIndex1) AND DOES_ENTITY_EXIST(PedIndex2) AND DOES_ENTITY_EXIST(PedIndex3) IF NOT IS_ENTITY_DEAD(PedIndex1) AND NOT IS_ENTITY_DEAD(PedIndex2) AND NOT IS_ENTITY_DEAD(PedIndex3) IF IS_ENTITY_IN_ANGLED_AREA(PedIndex1, vPosition1, vPosition2, fWidth) AND IS_ENTITY_IN_ANGLED_AREA(PedIndex2, vPosition1, vPosition2, fWidth) AND IS_ENTITY_IN_ANGLED_AREA(PedIndex3, vPosition1, vPosition2, fWidth) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAS_ENTITY_DAMAGED_VEHICLES(ENTITY_INDEX EntityIndex, VEH_STRUCT &vsArray[]) BOOL bReturn IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) INT i = 0 FOR i = 0 TO ( COUNT_OF(vsArray) - 1 ) IF DOES_ENTITY_EXIST(vsArray[i].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsArray[i].VehicleIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vsArray[i].VehicleIndex, EntityIndex, TRUE) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(vsArray[i].VehicleIndex) bReturn = TRUE ENDIF ENDIF ENDIF ENDFOR ENDIF ENDIF RETURN bReturn ENDFUNC FUNC BOOL HAS_ENTITY_DAMAGED_PEDS(ENTITY_INDEX EntityIndex, PED_STRUCT &psArray[]) BOOL bReturn IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) INT i = 0 FOR i = 0 TO ( COUNT_OF(psArray) - 1 ) IF DOES_ENTITY_EXIST(psArray[i].PedIndex) IF NOT IS_ENTITY_DEAD(psArray[i].PedIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(psArray[i].PedIndex, EntityIndex, TRUE) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(psArray[i].PedIndex) bReturn = TRUE ENDIF ENDIF ENDIF ENDFOR ENDIF ENDIF RETURN bReturn ENDFUNC FUNC BOOL HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(PED_INDEX PedIndex, FLOAT fBulletCheckRadius = 5.0) IF DOES_ENTITY_EXIST(PedIndex) IF NOT IS_ENTITY_DEAD(PedIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(PedIndex) OR HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE(PedIndex) OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(PedIndex, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(PedIndex) CLEAR_ENTITY_LAST_WEAPON_DAMAGE(PedIndex) RETURN TRUE ENDIF IF HAS_PED_RECEIVED_EVENT(PedIndex, EVENT_EXPLOSION) OR HAS_PED_RECEIVED_EVENT(PedIndex, EVENT_SHOCKING_EXPLOSION) OR HAS_PED_RECEIVED_EVENT(PedIndex, EVENT_SHOT_FIRED) OR HAS_PED_RECEIVED_EVENT(PedIndex, EVENT_SHOT_FIRED_WHIZZED_BY) OR HAS_PED_RECEIVED_EVENT(PedIndex, EVENT_SHOT_FIRED_BULLET_IMPACT) RETURN TRUE ENDIF IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(PedIndex), fBulletCheckRadius, TRUE) OR IS_BULLET_IN_AREA(GET_ENTITY_COORDS(PedIndex), fBulletCheckRadius, FALSE) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PED_SHOOTING_AT_AREA(PED_INDEX PedIndex, BOOL bIsPlayer, VECTOR vPosition, FLOAT fRadius #IF IS_DEBUG_BUILD, BOOL bDrawDebugSphere = TRUE, INT iRed = 255, INT iGreen = 0, INT iBlue = 0, INT iAlpha = 128 #ENDIF) IF NOT IS_PED_INJURED(PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugSphere = TRUE ) DRAW_DEBUG_SPHERE(vPosition, fRadius, iRed, iGreen, iBlue, iAlpha) ENDIF #ENDIF IF IS_PED_SHOOTING(PedIndex) RETURN IS_BULLET_IN_AREA(vPosition, fRadius, bIsPlayer) ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PED_SHOOTING_AT_ENTITY(PED_INDEX PedIndex, ENTITY_INDEX EntityIndex) IF NOT IS_PED_INJURED(PedIndex) IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(EntityIndex, PedIndex, FALSE) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(EntityIndex, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PED_SHOOTING_AT_VEHICLES(PED_INDEX PedIndex, VEH_STRUCT &vsArray[]) INT i = 0 BOOL bReturn = FALSE FOR i = 0 TO ( COUNT_OF(vsArray) - 1 ) IF IS_PED_SHOOTING_AT_ENTITY(PedIndex, vsArray[i].VehicleIndex) bReturn = TRUE ENDIF ENDFOR RETURN bReturn ENDFUNC FUNC BOOL IS_PED_SHOOTING_AT_ENEMIES(PED_INDEX PedIndex, ENEMY_STRUCT &esArray[]) INT i = 0 BOOL bReturn = FALSE FOR i = 0 TO ( COUNT_OF(esArray) - 1 ) IF IS_PED_SHOOTING_AT_ENTITY(PedIndex, esArray[i].PedIndex) bReturn = TRUE ENDIF ENDFOR RETURN bReturn ENDFUNC FUNC BOOL IS_PED_SHOOTING_AT_PEDS(PED_INDEX PedIndex, PED_STRUCT &psArray[]) INT i = 0 BOOL bReturn = FALSE FOR i = 0 TO ( COUNT_OF(psArray) - 1 ) IF IS_PED_SHOOTING_AT_ENTITY(PedIndex, psArray[i].PedIndex) bReturn = TRUE ENDIF ENDFOR RETURN bReturn ENDFUNC FUNC BOOL IS_PED_IN_COMBAT_WITH_ANY_PED_FROM_RELATIONSHIP_GROUP_IN_AREA(PED_INDEX PedIndex, REL_GROUP_HASH RelGroup, VECTOR vPosition, FLOAT fRadius) INT i PED_INDEX pedArray[16] IF NOT IS_PED_INJURED(PedIndex) GET_PED_NEARBY_PEDS(PedIndex, pedArray, PEDTYPE_ANIMAL) FOR i = 0 TO ( COUNT_OF(pedArray) - 1 ) IF DOES_ENTITY_EXIST(pedArray[i]) IF NOT IS_PED_INJURED(pedArray[i]) IF ( GET_PED_RELATIONSHIP_GROUP_HASH(pedArray[i]) = RelGroup ) IF IS_PED_IN_COMBAT(pedArray[i], PedIndex) IF ( GET_DISTANCE_BETWEEN_COORDS(vPosition, GET_ENTITY_COORDS(pedArray[i])) <= fRadius ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": IS_PED_IN_COMBAT_WITH_ANY_PED_FROM_RELATIONSHIP_GROUP_IN_AREA() returned true.") #ENDIF RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDFOR ENDIF RETURN FALSE ENDFUNC PROC SET_MISSION_PED_PROPERTIES(PED_INDEX PedIndex, REL_GROUP_HASH relGroupHash, BOOL bCanFlyThroughWindscreen, BOOL bKeepRelGroupOnCleanup, BOOL bCanBeTargetted, BOOL bIsEnemy) IF DOES_ENTITY_EXIST(PedIndex) IF NOT IS_PED_INJURED(PedIndex) SET_PED_AS_ENEMY(PedIndex, bIsEnemy) SET_PED_CAN_BE_TARGETTED(PedIndex, bCanBeTargetted) SET_PED_RELATIONSHIP_GROUP_HASH(PedIndex, relGroupHash) IF ( bCanBeTargetted = FALSE ) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_BULLET_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT) ENDIF SET_PED_CONFIG_FLAG(PedIndex, PCF_WillFlyThroughWindscreen, bCanFlyThroughWindscreen) SET_PED_CONFIG_FLAG(PedIndex, PCF_KeepRelationshipGroupAfterCleanUp, bKeepRelGroupOnCleanup) SET_PED_CONFIG_FLAG(PedIndex, PCF_LawWillOnlyAttackIfPlayerIsWanted, NOT bCanBeTargetted) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(PedIndex, TRUE) ENDIF ENDIF ENDPROC PROC SET_PED_SHOOTING_PROPERTIES(PED_INDEX PedIndex, INT iAccuracy, INT iShootRate, FIRING_PATTERN_HASH eFiringPattern = FIRING_PATTERN_BURST_FIRE) IF NOT IS_PED_INJURED(PedIndex) SET_PED_ACCURACY(PedIndex, iAccuracy) SET_PED_SHOOT_RATE(PedIndex, iShootRate) SET_PED_FIRING_PATTERN(PedIndex, eFiringPattern) ENDIF ENDPROC PROC SET_ENEMY_GROUP_SHOOTING_PROPERTIES(ENEMY_STRUCT &esGroup[], INT iAccuracy, INT iShootRate) INT iter REPEAT COUNT_OF(esGroup) iter IF DOES_ENTITY_EXIST(esGroup[iter].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup[iter].PedIndex) SET_PED_SHOOTING_PROPERTIES(esGroup[iter].PedIndex, iAccuracy, iShootRate) ENDIF ENDIF ENDREPEAT ENDPROC /// PURPOSE: /// Creates a ped or player ped to be used by player and returns TRUE if such pad was created successfully. /// PARAMS: /// psPed - PED_STRUCT containg ped details, like PED_INDEX, blip, coordinates, heading, model etc. /// bPlayerPed - Boolean indicating if a player ped or NPC ped should be created. /// relGroupHash - Relationship group hash for the created ped. /// bCreateBlip - Boolean indicating if a blip for this ped should be created. /// eCharacter - Enum specifying character from story characters list. Use NO_CHARACTER for characters not stored in that list and provide a MODEL_NAMES in PED_STRUCT. /// bCanFlyThroughWindscreen - Sets if ped can fly through windscreen when car crashes. /// bCanBeTargetted - Sets if ped can be targetted by player. /// bIsEnemy - Sets if ped is considered an enemy. /// VehicleIndex - Specify a vehicle index if ped should be created inside a vehicle. IF not use NULL. /// eVehicleSeat - Vehicle seat enum for peds created in vehicles. /// RETURNS: /// TRUE if ped was created successfully, FALSE if otherwise. FUNC BOOL HAS_MISSION_PED_BEEN_CREATED(PED_STRUCT &psPed, BOOL bPlayerPed, REL_GROUP_HASH relGroupHash, BOOL bCreateBlip, enumCharacterList eCharacter, BOOL bCanFlyThroughWindscreen = FALSE, BOOL bCanBeTargetted = FALSE, BOOL bIsEnemy = FALSE, VEHICLE_INDEX VehicleIndex = NULL, VEHICLE_SEAT eVehicleSeat = VS_DRIVER, BOOL bKeepRelGroupOnCleanup = TRUE #IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF) IF ( bPlayerPed = FALSE ) //create non player ped IF NOT DOES_ENTITY_EXIST(psPed.PedIndex) REQUEST_MODEL(psPed.ModelName) IF HAS_MODEL_LOADED(psPed.ModelName) IF ( VehicleIndex = NULL ) //create ped outside of vehicle IF ( eCharacter = NO_CHARACTER ) //use MODEL_NAMES stored in the PED_STRUCT if no character was specified psPed.PedIndex = CREATE_PED(PEDTYPE_MISSION, psPed.ModelName, psPed.vPosition, psPed.fHeading) SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName) ELSE //use character name to define the ped MODEL_NAMES IF CREATE_NPC_PED_ON_FOOT(psPed.PedIndex, eCharacter, psPed.vPosition, psPed.fHeading) SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName) ENDIF ENDIF IF NOT IS_PED_INJURED(psPed.PedIndex) SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup, bCanBeTargetted, bIsEnemy) IF ( bCreateBlip = TRUE ) psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE) ENDIF ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ENDIF #ENDIF RETURN TRUE ELIF ( VehicleIndex != NULL ) //create ped in a vehicle IF IS_VEHICLE_DRIVEABLE(VehicleIndex) IF ( eCharacter = NO_CHARACTER ) //use MODEL_NAMES stored in the PED_STRUCT psPed.PedIndex = CREATE_PED_INSIDE_VEHICLE(VehicleIndex, PEDTYPE_MISSION, psPed.ModelName, eVehicleSeat) SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName) ELSE //use character name to define the ped MODEL_NAMES IF CREATE_NPC_PED_INSIDE_VEHICLE(psPed.PedIndex, eCharacter, VehicleIndex, eVehicleSeat) SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName) ENDIF ENDIF IF NOT IS_PED_INJURED(psPed.PedIndex) SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup, bCanBeTargetted, bIsEnemy) IF ( bCreateBlip = TRUE ) psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE) ENDIF ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " in vehicle.") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " in vehicle.") ENDIF #ENDIF RETURN TRUE ENDIF ENDIF ENDIF ELSE //if the ped already exists return true RETURN TRUE ENDIF ELIF ( bPlayerPed = TRUE ) //create player ped, for example a ped that player can hotswap to and take control of IF NOT DOES_ENTITY_EXIST(psPed.PedIndex) IF ( VehicleIndex = NULL ) //create player ped outside of vehicle IF CREATE_PLAYER_PED_ON_FOOT(psPed.PedIndex, eCharacter, psPed.vPosition, psPed.fHeading, TRUE) SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup, bCanBeTargetted, bIsEnemy) IF ( bCreateBlip = TRUE ) psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE) ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ENDIF #ENDIF RETURN TRUE ENDIF ELIF ( VehicleIndex != NULL ) //create player ped in a vehicle IF IS_VEHICLE_DRIVEABLE(VehicleIndex) IF CREATE_PLAYER_PED_INSIDE_VEHICLE(psPed.PedIndex, eCharacter, VehicleIndex, eVehicleSeat, TRUE) SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup, bCanBeTargetted, bIsEnemy) IF ( bCreateBlip = TRUE ) psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE) ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped ", sDebugName, " in vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped in vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), ".") ENDIF #ENDIF RETURN TRUE ENDIF ENDIF ENDIF ELSE //if the ped already exists, return true RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAS_CHOP_BEEN_CREATED(PED_STRUCT &psPed, REL_GROUP_HASH relGroupHash, BOOL bCreateBlip, BOOL bCanFlyThroughWindscreen = FALSE, BOOL bCanBeTargetted = FALSE, BOOL bIsEnemy = FALSE, BOOL bKeepRelGroupOnCleanup = TRUE #IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF) IF NOT DOES_ENTITY_EXIST(psPed.PedIndex) REQUEST_MODEL(psPed.ModelName) IF HAS_MODEL_LOADED(psPed.ModelName) IF CREATE_CHOP(psPed.PedIndex, psPed.vPosition, psPed.fHeading) IF NOT IS_PED_INJURED(psPed.PedIndex) SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup, bCanBeTargetted, bIsEnemy) SET_PED_CAN_RAGDOLL(psPed.PedIndex, TRUE) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(psPed.PedIndex, TRUE) IF ( bCreateBlip = TRUE ) psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE) ENDIF ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created Chop ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created Chop ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".") ENDIF #ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName) RETURN TRUE ENDIF ENDIF ELSE RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Creates vehicle to be used on a mission by player and returns TRUE if such vehicle was created successfully. /// PARAMS: /// vsVehicle - VEH_STRUCT containing model, position and heading of the vehicle. /// bPlayerVehicle - If set to TRUE will create player specific vehicles using CREATE_PLAYER_VEHICLE() /// bCarStealVehicle - If set to TRUE will create car steal strand vehicle with a specific command. Works when bPlayerVehicle is FALSE. /// eCharacter - Character enum indicating which character specific vehicle to create. /// bMissionCritical - Sets the vehicle to be unable to leak oil/petrol and break off doors. Set to TRUE to stop these damage types to vehicle. /// iColourCombination - Colour combination of the vehicle. /// iColour1 - Colour 1 of the vehicle. /// iColour2 - Colour 2 of the vehicle. /// RETURNS: /// TRUE if vehicle was created, FALSE if otherwise. FUNC BOOL HAS_MISSION_VEHICLE_BEEN_CREATED(VEH_STRUCT &vsVehicle, BOOL bPlayerVehicle = FALSE, BOOL bCarStealVehicle = FALSE, enumCharacterList eCharacter = CHAR_MICHAEL, BOOL bMissionCritical = TRUE, INT iColourCombination = -1, INT iColour1 = -1, INT iColour2 = -1, INT iColour3 = 0, INT iColour4 = 0 #IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF) //create any vehicle that can be used on a mission by player IF ( bPlayerVehicle = FALSE ) IF NOT DOES_ENTITY_EXIST(vsVehicle.VehicleIndex) REQUEST_MODEL(vsVehicle.ModelName) IF HAS_MODEL_LOADED(vsVehicle.ModelName) IF( bCarStealVehicle = TRUE ) vsVehicle.VehicleIndex = CREATE_CAR_STEAL_STRAND_CAR(vsVehicle.ModelName, vsVehicle.vPosition, vsVehicle.fHeading) SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName) ELSE IF ( eCharacter = NO_CHARACTER ) vsVehicle.VehicleIndex = CREATE_VEHICLE(vsVehicle.ModelName, vsVehicle.vPosition, vsVehicle.fHeading) SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName) ELSE //create npc vehicle based on the character enum specified IF CREATE_NPC_VEHICLE(vsVehicle.VehicleIndex, eCharacter, vsVehicle.vPosition, vsVehicle.fHeading) SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName) ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsVehicle.VehicleIndex) //set vehicle colours, if they are provided IF ( iColour1 != -1) AND ( iColour2 != -1 ) SET_VEHICLE_COLOURS(vsVehicle.VehicleIndex, iColour1, iColour2) ENDIF //set vehicle colour combination, if it is provided IF ( iColourCombination != -1 ) SET_VEHICLE_COLOUR_COMBINATION(vsVehicle.VehicleIndex, iColourCombination) ENDIF SET_VEHICLE_EXTRA_COLOURS(vsVehicle.VehicleIndex, iColour3, iColour4) SET_VEHICLE_HAS_STRONG_AXLES(vsVehicle.VehicleIndex, bMissionCritical) //limit damage that can be done to the vehicle SET_VEHICLE_CAN_LEAK_OIL(vsVehicle.VehicleIndex, NOT bMissionCritical) SET_VEHICLE_CAN_LEAK_PETROL(vsVehicle.VehicleIndex, NOT bMissionCritical) //make the vehicle not attach to tow truck if mission critical SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVehicle.VehicleIndex, NOT bMissionCritical) IF IS_THIS_MODEL_A_CAR(vsVehicle.ModelName) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_LEFT, NOT bMissionCritical) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_RIGHT, NOT bMissionCritical) ENDIF SET_VEHICLE_ON_GROUND_PROPERLY(vsVehicle.VehicleIndex) ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_VEHICLE_NAME_DEBUG(vsVehicle.VehicleIndex, sDebugName) IF ( bCarStealVehicle = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created car steal strand vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ENDIF ELSE IF ( bCarStealVehicle = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created car steal strand vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ENDIF ENDIF #ENDIF RETURN TRUE ENDIF ELSE //if the vehicle exists, return true RETURN TRUE ENDIF //create player specific vehicle ELIF ( bPlayerVehicle = TRUE ) IF NOT DOES_ENTITY_EXIST(vsVehicle.VehicleIndex) //call the player vehicle creation until it returns true IF CREATE_PLAYER_VEHICLE(vsVehicle.VehicleIndex, eCharacter, vsVehicle.vPosition, vsVehicle.fHeading, TRUE) SET_VEHICLE_HAS_STRONG_AXLES(vsVehicle.VehicleIndex, bMissionCritical) //limit damage that can be done to the vehicle SET_VEHICLE_CAN_LEAK_OIL(vsVehicle.VehicleIndex, NOT bMissionCritical) SET_VEHICLE_CAN_LEAK_PETROL(vsVehicle.VehicleIndex, NOT bMissionCritical) //make the vehicle not attach to tow truck if mission critical SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVehicle.VehicleIndex, NOT bMissionCritical) IF IS_THIS_MODEL_A_CAR(vsVehicle.ModelName) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_LEFT, NOT bMissionCritical) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_RIGHT, NOT bMissionCritical) ENDIF #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_VEHICLE_NAME_DEBUG(vsVehicle.VehicleIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".") ENDIF #ENDIF RETURN TRUE ENDIF ELSE //if the vehicle exists, return true RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAS_MISSION_TRAIN_BEEN_CREATED(TRAIN_STRUCT &train, FLOAT fSpeed, BOOL bDirectionFlag = FALSE) IF NOT DOES_ENTITY_EXIST(train.VehicleIndex) REQUEST_MODEL(train.ModelName1) REQUEST_MODEL(train.ModelName2) REQUEST_MODEL(train.ModelName3) IF HAS_MODEL_LOADED(train.ModelName1) AND HAS_MODEL_LOADED(train.ModelName2) AND HAS_MODEL_LOADED(train.ModelName3) train.VehicleIndex = CREATE_MISSION_TRAIN(train.iConfiguration, train.vPosition, bDirectionFlag) SET_TRAIN_SPEED(train.VehicleIndex, fSpeed) SET_TRAIN_CRUISE_SPEED(train.VehicleIndex, fSpeed) SET_CAN_AUTO_VAULT_ON_ENTITY(train.VehicleIndex, FALSE) SET_CAN_CLIMB_ON_ENTITY(train.VehicleIndex, FALSE) INT i FOR i = 0 TO 12 VEHICLE_INDEX CarriageVehicleIndex CarriageVehicleIndex = GET_TRAIN_CARRIAGE(train.VehicleIndex, i) IF DOES_ENTITY_EXIST(CarriageVehicleIndex) IF NOT IS_ENTITY_DEAD(CarriageVehicleIndex) SET_CAN_AUTO_VAULT_ON_ENTITY(CarriageVehicleIndex, FALSE) SET_CAN_CLIMB_ON_ENTITY(CarriageVehicleIndex, FALSE) ENDIF ENDIF ENDFOR SET_MODEL_AS_NO_LONGER_NEEDED(train.ModelName1) SET_MODEL_AS_NO_LONGER_NEEDED(train.ModelName2) SET_MODEL_AS_NO_LONGER_NEEDED(train.ModelName3) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission train with configuration ", train.iConfiguration, " at coordinates ", train.vPosition, ".") #ENDIF RETURN TRUE ENDIF ELSE IF IS_VEHICLE_DRIVEABLE(train.VehicleIndex) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC CREATE_PARKED_VEHICLES(INT &iProgress) SWITCH iProgress CASE 0 IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vGroveStreet) < 400.0 iProgress++ ENDIF BREAK CASE 1 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[0], FALSE, FALSE, NO_CHARACTER, FALSE) SET_ENTITY_HEALTH(vsParkedVehicles[0].VehicleIndex, 2000) SET_VEHICLE_ENGINE_HEALTH(vsParkedVehicles[0].VehicleIndex, 2000) SET_VEHICLE_PETROL_TANK_HEALTH(vsParkedVehicles[0].VehicleIndex, 2000) ACTIVATE_PHYSICS(vsParkedVehicles[0].VehicleIndex) SET_VEHICLE_DOORS_LOCKED(vsParkedVehicles[0].VehicleIndex, VEHICLELOCK_LOCKED) iProgress++ ENDIF BREAK CASE 2 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[1], FALSE, FALSE, NO_CHARACTER, FALSE) SET_ENTITY_HEALTH(vsParkedVehicles[1].VehicleIndex, 2000) SET_VEHICLE_ENGINE_HEALTH(vsParkedVehicles[1].VehicleIndex, 2000) SET_VEHICLE_PETROL_TANK_HEALTH(vsParkedVehicles[1].VehicleIndex, 2000) ACTIVATE_PHYSICS(vsParkedVehicles[1].VehicleIndex) SET_VEHICLE_DOORS_LOCKED(vsParkedVehicles[1].VehicleIndex, VEHICLELOCK_LOCKED) iProgress++ ENDIF BREAK CASE 3 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[2], FALSE, FALSE, NO_CHARACTER, FALSE) SET_ENTITY_HEALTH(vsParkedVehicles[2].VehicleIndex, 2000) SET_VEHICLE_ENGINE_HEALTH(vsParkedVehicles[2].VehicleIndex, 2000) SET_VEHICLE_PETROL_TANK_HEALTH(vsParkedVehicles[2].VehicleIndex, 2000) ACTIVATE_PHYSICS(vsParkedVehicles[2].VehicleIndex) SET_VEHICLE_DOORS_LOCKED(vsParkedVehicles[2].VehicleIndex, VEHICLELOCK_LOCKED) iProgress++ ENDIF BREAK CASE 4 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[3], FALSE, FALSE, NO_CHARACTER, FALSE) SET_ENTITY_HEALTH(vsParkedVehicles[3].VehicleIndex, 2000) SET_VEHICLE_ENGINE_HEALTH(vsParkedVehicles[3].VehicleIndex, 2000) SET_VEHICLE_PETROL_TANK_HEALTH(vsParkedVehicles[3].VehicleIndex, 2000) ACTIVATE_PHYSICS(vsParkedVehicles[3].VehicleIndex) SET_VEHICLE_DOORS_LOCKED(vsParkedVehicles[3].VehicleIndex, VEHICLELOCK_LOCKED) iProgress++ ENDIF BREAK ENDSWITCH ENDPROC FUNC PED_INDEX CREATE_ENEMY_PED(MODEL_NAMES modelName, VECTOR vPosition, FLOAT fHeading, REL_GROUP_HASH group, WEAPON_TYPE eWeaponType = WEAPONTYPE_UNARMED, INT iHealth = 200, BOOL bTrackHeadShot = TRUE) PED_INDEX PedIndex = CREATE_PED(PEDTYPE_MISSION, modelName, vPosition, fHeading) //create ped SET_PED_MAX_HEALTH(PedIndex, iHealth) //ped health SET_ENTITY_HEALTH(PedIndex, iHealth) SET_PED_DIES_WHEN_INJURED(PedIndex, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(PedIndex, group) //ped relationship group hash GIVE_WEAPON_TO_PED(PedIndex, eWeaponType, INFINITE_AMMO, TRUE) //ped weapon SET_CURRENT_PED_WEAPON(PedIndex, eWeaponType, TRUE) SET_PED_INFINITE_AMMO(PedIndex, TRUE, eWeaponType) SET_PED_AS_ENEMY(PedIndex, TRUE) //make ped an enemy SET_PED_TARGET_LOSS_RESPONSE(PedIndex, TLR_NEVER_LOSE_TARGET) //make ped never lose target SET_PED_PATH_CAN_USE_CLIMBOVERS(PedIndex, FALSE) //make ped not use climbovers SET_PED_CONFIG_FLAG(PedIndex, PCF_DisableHurt, TRUE) //ped config flags SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_KeepRelationshipGroupAfterCleanUp, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_USE_VEHICLE, FALSE) //ped combat attributes SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DISABLE_PINNED_DOWN, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DISABLE_PIN_DOWN_OTHERS, TRUE) SET_COMBAT_FLOAT(PedIndex, CCF_TIME_TO_INVALIDATE_INJURED_TARGET, 30.0) //ped combat float IF ( bTrackHeadShot = TRUE ) INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(PedIndex) //make ped tracked by headshot stat ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created enemy ped with model ", GET_MODEL_NAME_FOR_DEBUG(modelName), " at coordinates ", vPosition, ".") #ENDIF iReplayCameraWarpTimer = GET_GAME_TIMER() + 1000 //Fix for bug 2229916 RETURN PedIndex ENDFUNC FUNC PED_INDEX CREATE_ENEMY_PED_IN_VEHICLE(MODEL_NAMES modelName, VEHICLE_INDEX vehicleIndex, VEHICLE_SEAT eSeat, REL_GROUP_HASH group, WEAPON_TYPE eWeaponType = WEAPONTYPE_UNARMED, INT iHealth = 200) PED_INDEX ped IF IS_VEHICLE_DRIVEABLE(vehicleIndex) ped = CREATE_ENEMY_PED(modelName, GET_ENTITY_COORDS(vehicleIndex) + <<0.0, 0.0, 3.0>>, 0.0, group, eWeaponType, iHealth) SET_PED_INTO_VEHICLE(ped, vehicleIndex, eSeat) ENDIF RETURN ped ENDFUNC FUNC VEHICLE_INDEX CREATE_ENEMY_VEHICLE(VEH_STRUCT &sVehicle, INT iHealth = 1000, BOOL bConsideredByPlayer = FALSE, LOCK_STATE eLockState = VEHICLELOCK_UNLOCKED, INT iColour1 = -1, INT iColour2 = -1 #IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF) VEHICLE_INDEX vehicleIndex = CREATE_VEHICLE(sVehicle.ModelName, sVehicle.vPosition, sVehicle.fHeading) SET_ENTITY_HEALTH(vehicleIndex, iHealth) SET_VEHICLE_ENGINE_HEALTH(vehicleIndex, TO_FLOAT(iHealth)) SET_VEHICLE_PETROL_TANK_HEALTH(vehicleIndex, TO_FLOAT(iHealth)) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehicleIndex, bConsideredByPlayer) SET_VEHICLE_DOORS_LOCKED(vehicleIndex, eLockState) IF ( iColour1 != -1) AND ( iColour2 != -1 ) SET_VEHICLE_COLOURS(vehicleIndex, iColour1, iColour2) SET_VEHICLE_EXTRA_COLOURS(vehicleIndex, 0, 0) //make sure only normal colours are set, no extras ENDIF SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(vehicleIndex, TRUE) #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugName) SET_VEHICLE_NAME_DEBUG(vehicleIndex, sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created enemy vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(sVehicle.ModelName), " and debug name ", sDebugName, " and health ", GET_ENTITY_HEALTH(vehicleIndex), ".") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created enemy vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(sVehicle.ModelName), ".") ENDIF #ENDIF RETURN vehicleIndex ENDFUNC FUNC BOOL HAS_MISSION_OBJECT_BEEN_CREATED(OBJECT_STRUCT &osObject, BOOL bFreezeObject = FALSE) IF NOT DOES_ENTITY_EXIST(osObject.ObjectIndex) REQUEST_MODEL(osObject.ModelName) IF HAS_MODEL_LOADED(osObject.ModelName) osObject.ObjectIndex = CREATE_OBJECT(osObject.ModelName, osObject.vPosition) SET_ENTITY_COORDS_NO_OFFSET(osObject.ObjectIndex, osObject.vPosition) SET_ENTITY_ROTATION(osObject.ObjectIndex, osObject.vRotation) FREEZE_ENTITY_POSITION(osObject.ObjectIndex, bFreezeObject) SET_CAN_CLIMB_ON_ENTITY(osObject.ObjectIndex, FALSE) SET_CAN_AUTO_VAULT_ON_ENTITY(osObject.ObjectIndex, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(osObject.ModelName) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object with model ", GET_MODEL_NAME_FOR_DEBUG(osObject.ModelName), " at coordinates ", osObject.vPosition, ".") #ENDIF RETURN TRUE ENDIF ELSE RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAVE_MISSION_OBJECTS_BEEN_CREATED(OBJECT_STRUCT &osArray[]) INT i = 0 BOOL bReturn FOR i = 0 TO ( COUNT_OF(osArray) - 1 ) IF HAS_MISSION_OBJECT_BEEN_CREATED(osArray[i]) bReturn = TRUE ENDIF ENDFOR RETURN bReturn ENDFUNC PROC CREATE_DUMPSTERS(INT &iProgress) SWITCH iProgress CASE 0 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[0]) iProgress++ ENDIF BREAK CASE 1 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[1]) iProgress++ ENDIF BREAK CASE 2 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[2]) iProgress++ ENDIF BREAK CASE 3 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[3]) iProgress++ ENDIF BREAK CASE 4 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[4]) iProgress++ ENDIF BREAK CASE 5 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[5]) iProgress++ ENDIF BREAK CASE 6 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[6]) iProgress++ ENDIF BREAK CASE 7 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[7]) iProgress++ ENDIF BREAK CASE 8 IF HAS_MISSION_OBJECT_BEEN_CREATED(osDumpsters[8]) iProgress++ ENDIF BREAK ENDSWITCH ENDPROC FUNC BOOL IS_VEHICLE_AT_COORD(VEHICLE_INDEX vehIndex, VECTOR coords, VECTOR coordDimensions) IF IS_VEHICLE_DRIVEABLE(vehIndex) IF IS_ENTITY_AT_COORD(vehIndex, coords, coordDimensions) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_SPEEDOPHILE_STUCK(VEHICLE_INDEX VehicleIndex) IF DOES_ENTITY_EXIST(VehicleIndex) IF NOT IS_ENTITY_DEAD(VehicleIndex) IF NOT IS_ENTITY_IN_WATER(VehicleIndex) IF ( GET_ENTITY_SPEED(VehicleIndex) = 0 ) IF IS_VEHICLE_PERMANENTLY_STUCK(VehicleIndex) RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Checks if the specified mocap cutscene has loaded. /// Removes any other loaded mocap cutscene and requests the specified cutscene until it is loaded. /// PARAMS: /// sSceneName - Mocap cutscene name to check for being loaded. /// CutsceneSection - Cutscene section specifying at what section to start the cutscene. Use CS_SECTION_1 to play from start. /// RETURNS: /// TRUE if the specified cutscene has loaded, FALSE if otherwise. FUNC BOOL HAS_REQUESTED_CUTSCENE_LOADED(STRING sSceneName, CUTSCENE_SECTION CutsceneSection = CS_SECTION_1) //check if the specified cutscene has loaded first IF HAS_THIS_CUTSCENE_LOADED_WITH_FAILSAFE(sSceneName) RETURN TRUE ELSE //if the expected reuqested cutscene has not loaded, but there already is a loaded cutscene //then remove it and keep requesting specified mocap cutscene IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE() REMOVE_CUTSCENE() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": HAS_REQUESTED_CUTSCENE_LOADED() Removing cutscene from memory, because cutscene ", sSceneName, " was expected to be loaded.") #ENDIF ENDIF IF ( CutsceneSection = CS_SECTION_1) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Cutscene ", sSceneName, " is loading.") #ENDIF //if the cutscene is not loaded, keep requesting it REQUEST_CUTSCENE(sSceneName) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting ", sSceneName, ".") #ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Cutscene ", sSceneName, " is loading with playback list.") #ENDIF //if the cutscene is not loaded, keep requesting it REQUEST_CUTSCENE_WITH_PLAYBACK_LIST(sSceneName, CutsceneSection) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting ", sSceneName, " cutscene with playback list.") #ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns the next mission stage after the specified mission stage. /// PARAMS: /// eStage - Mission stage to get the next mission stage. /// RETURNS: /// Mission stage that is next after the specified mission stage. FUNC MISSION_STAGES GET_NEXT_MISSION_STAGE_FOR_SHITSKIP(MISSION_STAGES eStage) SWITCH eStage CASE MISSION_STAGE_LOSE_COPS CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN CASE MISSION_STAGE_END RETURN MISSION_STAGE_END BREAK ENDSWITCH MISSION_STAGES eNextStage INT iNextStage = ENUM_TO_INT(eStage) + 1 eNextStage = INT_TO_ENUM(MISSION_STAGES, iNextStage) RETURN eNextStage ENDFUNC /// PURPOSE: /// Check is the specified time has passed using specified timer. /// PARAMS: /// iTimeAmount - Time to check. /// iTimer - Timer to use. /// RETURNS: /// True is the specified amount of time has passed for the specified timer. FUNC BOOL HAS_TIME_PASSED(INT iTimeAmount, INT iTimer) INT iCurrentTime INT iTimeDifference iCurrentTime = GET_GAME_TIMER() iTimeDifference = iCurrentTime - iTimeAmount IF iTimeDifference > iTimer RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns PED_INDEX of player ped currently not controlled by the player. /// RETURNS: /// Trevor's PED_INDEX if player is controlling Franklin. Franklin's PED_INDEX if player is controlling Trevor. FUNC PED_INDEX GET_OTHER_PLAYER_PED_INDEX() SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN RETURN sSelectorPeds.pedID[SELECTOR_PED_TREVOR] BREAK CASE CHAR_TREVOR RETURN sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] BREAK ENDSWITCH RETURN NULL ENDFUNC FUNC PED_CLEANUP_REASONS GET_PED_CLEANUP_REASON(PED_INDEX PedIndex #IF IS_DEBUG_BUILD, STRING sDebugName #ENDIF) IF DOES_ENTITY_EXIST(PedIndex) IF IS_ENTITY_DEAD(PedIndex) ENTITY_INDEX SourceOfDeathEntity SourceOfDeathEntity = GET_PED_SOURCE_OF_DEATH(PedIndex) IF IS_ENTITY_A_PED(SourceOfDeathEntity) PED_INDEX SourceOfDeathPed SourceOfDeathPed = GET_PED_INDEX_FROM_ENTITY_INDEX(SourceOfDeathEntity) IF ( SourceOfDeathPed = GET_PED_INDEX(CHAR_FRANKLIN) ) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF GET_PED_CAUSE_OF_DEATH(PedIndex) = WEAPONTYPE_SNIPERRIFLE OR GET_PED_CAUSE_OF_DEATH(PedIndex) = WEAPONTYPE_ADVANCEDRIFLE bLastEnemyKilledWithSniperRifle = TRUE ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN BREAK CASE CHAR_TREVOR #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_FRANKLIN.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_FRANKLIN BREAK ENDSWITCH ELIF ( SourceOfDeathPed = GET_PED_INDEX(CHAR_TREVOR) ) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_TREVOR.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_TREVOR BREAK CASE CHAR_TREVOR IF GET_PED_CAUSE_OF_DEATH(PedIndex) = WEAPONTYPE_SNIPERRIFLE OR GET_PED_CAUSE_OF_DEATH(PedIndex) = WEAPONTYPE_ADVANCEDRIFLE bLastEnemyKilledWithSniperRifle = TRUE ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR BREAK ENDSWITCH ELIF ( SourceOfDeathPed = psLamar.PedIndex ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_LAMAR.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_LAMAR ELIF ( SourceOfDeathPed = psChop.PedIndex ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", sDebugName, " cleaned up with reason PED_CLEANUP_KILLED_BY_CHOP.") #ENDIF RETURN PED_CLEANUP_KILLED_BY_CHOP ENDIF ENDIF ENDIF ENDIF RETURN PED_CLEANUP_NO_CLEANUP ENDFUNC PROC CLEANUP_MISSION_OBJECT(OBJECT_STRUCT &osObject, BOOL bDelete = FALSE) IF DOES_ENTITY_EXIST(osObject.ObjectIndex) IF IS_ENTITY_ATTACHED(osObject.ObjectIndex) DETACH_ENTITY(osObject.ObjectIndex) ENDIF IF ( bDelete = TRUE ) DELETE_OBJECT(osObject.ObjectIndex) ELSE SET_OBJECT_AS_NO_LONGER_NEEDED(osObject.ObjectIndex) ENDIF ENDIF ENDPROC PROC CLEANUP_MISSION_OBJECT_GROUP(OBJECT_STRUCT &osArray[], BOOL bDelete = FALSE) INT i = 0 FOR i = 0 TO ( COUNT_OF(osArray) - 1 ) CLEANUP_MISSION_OBJECT(osArray[i], bDelete) ENDFOR ENDPROC PROC UPDATE_PLAYER_AND_BUDDY_KILL_COUNTERS(PED_CLEANUP_REASONS eCleanupReason, INT &iPlayerKillsFranklin, INT &iPlayerKillsTrevor, INT &iBuddyKillsFranklin, INT &iBuddyKillsTrevor, INT &iBuddyKillsLamar, INT &iBuddyKillsChop) SWITCH eCleanupReason CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN iPlayerKillsFranklin++ INFORM_MISSION_STATS_OF_INCREMENT(FRA1_FRANKLIN_KILLS) INFORM_MISSION_STATS_OF_INCREMENT(FRA1_KILLS) BREAK CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR iPlayerKillsTrevor++ INFORM_MISSION_STATS_OF_INCREMENT(FRA1_TREVOR_KILLS) INFORM_MISSION_STATS_OF_INCREMENT(FRA1_KILLS) BREAK CASE PED_CLEANUP_KILLED_BY_FRANKLIN iBuddyKillsFranklin++ BREAK CASE PED_CLEANUP_KILLED_BY_TREVOR iBuddyKillsTrevor++ BREAK CASE PED_CLEANUP_KILLED_BY_LAMAR iBuddyKillsLamar++ BREAK CASE PED_CLEANUP_KILLED_BY_CHOP iBuddyKillsChop++ BREAK ENDSWITCH #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": *********************** UPDATE_PLAYER_AND_BUDDY_KILL_COUNTERS *************************") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player kills as Franklin: ", iPlayerKillsFranklin, ". Player kills as Trevor: ", iPlayerKillsTrevor, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Buddy kills Franklin: ", iBuddyKillsFranklin, ". Buddy kills Trevor: ", iBuddyKillsTrevor, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Buddy kills Lamar: ", iBuddyKillsLamar, ". Buddy kills Chop: ", iBuddyKillsChop, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": ***************************************************************************************") #ENDIF ENDPROC PROC CLEANUP_ENEMY_PED(ENEMY_STRUCT &enemy, BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE, BOOL bRenderBlip = TRUE, BOOL bKeepTask = TRUE, BOOL bRunKillCounter = FALSE) IF ( bDelete = FALSE ) IF DOES_ENTITY_EXIST(enemy.PedIndex) IF ( bDeathOnly = TRUE ) IF IS_PED_INJURED(enemy.PedIndex) IF ( enemy.eCleanupReason = PED_CLEANUP_NO_CLEANUP ) IF IS_ENTITY_DEAD(enemy.PedIndex) REMOVE_PED_DEFENSIVE_AREA(enemy.PedIndex) ENDIF IF DOES_BLIP_EXIST(enemy.BlipIndex) REMOVE_BLIP(enemy.BlipIndex) ENDIF IF IS_ITEMSET_VALID(enemy.ItemsetIndex) DESTROY_ITEMSET(enemy.ItemsetIndex) ENDIF enemy.eCleanupReason = GET_PED_CLEANUP_REASON(enemy.PedIndex #IF IS_DEBUG_BUILD, enemy.sDebugName #ENDIF) enemy.iCleanupAttempts++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", enemy.sDebugName, " had ", enemy.iCleanupAttempts, " cleanup attempts .") #ENDIF IF ( enemy.iCleanupAttempts = 10 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", enemy.sDebugName, " cleaned up with reason PED_CLEANUP_NONE due to cleanup attempts running out.") #ENDIF enemy.eCleanupReason = PED_CLEANUP_NONE ENDIF ELSE IF ( bRunKillCounter = TRUE ) UPDATE_PLAYER_AND_BUDDY_KILL_COUNTERS(enemy.eCleanupReason, iPlayerFranklinKills, iPlayerTrevorKills, iBuddyFranklinKills, iBuddyTrevorKills, iBuddyLamarKills, iBuddyChopKills) ENDIF SET_PED_AS_NO_LONGER_NEEDED(enemy.PedIndex) ENDIF ELSE IF ( bRenderBlip = FALSE ) IF DOES_BLIP_EXIST(enemy.BlipIndex) REMOVE_BLIP(enemy.BlipIndex) ENDIF ELSE IF NOT DOES_BLIP_EXIST(enemy.BlipIndex) enemy.BlipIndex = CREATE_BLIP_FOR_ENTITY(enemy.PedIndex, TRUE) ENDIF ENDIF ENDIF ELIF ( bDeathOnly = FALSE ) IF NOT IS_PED_INJURED(enemy.PedIndex) SET_PED_KEEP_TASK(enemy.PedIndex, bKeepTask) SET_PED_AS_NO_LONGER_NEEDED(enemy.PedIndex) IF DOES_BLIP_EXIST(enemy.BlipIndex) REMOVE_BLIP(enemy.BlipIndex) ENDIF ENDIF IF IS_ITEMSET_VALID(enemy.ItemsetIndex) DESTROY_ITEMSET(enemy.ItemsetIndex) ENDIF ENDIF ENDIF ELIF ( bDelete = TRUE ) IF DOES_ENTITY_EXIST(enemy.PedIndex) IF IS_PED_INJURED(enemy.PedIndex) OR NOT IS_PED_INJURED(enemy.PedIndex) IF IS_ENTITY_DEAD(enemy.PedIndex) OR NOT IS_ENTITY_DEAD(enemy.PedIndex) REMOVE_PED_DEFENSIVE_AREA(enemy.PedIndex) ENDIF DELETE_PED(enemy.PedIndex) IF DOES_BLIP_EXIST(enemy.BlipIndex) REMOVE_BLIP(enemy.BlipIndex) ENDIF ENDIF ENDIF IF IS_ITEMSET_VALID(enemy.ItemsetIndex) DESTROY_ITEMSET(enemy.ItemsetIndex) ENDIF enemy.bCreated = FALSE enemy.bHasTask = FALSE enemy.fDistanceToTarget = 0.0 enemy.iTimer = 0 enemy.iProgress = 0 enemy.iCleanupAttempts = 0 enemy.eCleanupReason = PED_CLEANUP_NO_CLEANUP ENDIF ENDPROC PROC CLEANUP_ENEMY_GROUP(ENEMY_STRUCT &array[], BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE, BOOL bRenderBlip = TRUE, BOOL bKeepTask = TRUE, BOOL bRunKillCounter = TRUE) INT i = 0 FOR i = 0 TO ( COUNT_OF(array) - 1 ) CLEANUP_ENEMY_PED(array[i], bDelete, bDeathOnly, bRenderBlip, bKeepTask, bRunKillCounter) IF ( bDelete = FALSE AND bDeathOnly = FALSE ) OR ( bDelete = TRUE ) CLEANUP_AI_PED_BLIP(array[i].EnemyBlipData) ENDIF ENDFOR ENDPROC PROC CLEANUP_VEHICLE(VEH_STRUCT &vehicle, BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE) IF ( bDelete = FALSE ) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( bDeathOnly = TRUE ) IF NOT IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) OR IS_ENTITY_DEAD(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ELIF ( bDeathOnly = FALSE ) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) //cleanup here SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF ENDIF ELIF ( bDelete = TRUE ) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) //IF IS_ENTITY_A_MISSION_ENTITY(vehicle.VehicleIndex) DELETE_VEHICLE(vehicle.VehicleIndex) //ENDIF ENDIF vehicle.iProgress = 0 vehicle.bAutoDrive = FALSE vehicle.bDriverDead = FALSE vehicle.fPlaybackSpeed = 0.0 vehicle.fPlaybackTime = 0.0 ENDIF ENDPROC /// PURPOSE: /// Handles removing dead enemy vehicles from a specified vehicle struct array by setting them as no longer needed. /// Deletes the vehicles no matter of their health state if bDelete is set to TRUE. /// PARAMS: /// vsArray - Array of instances of vehicle_struct. /// bDelete - If set to TRUE this will delete the vehicles no matter if they are dead or alive. /// bDeathOnly - IF set to TRUE this will set vehicles as no longer needed, when bDelete is FALSE. Use for mission cleanup. PROC CLEANUP_VEHICLE_GROUP(VEH_STRUCT &vsArray[], BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE) INT i = 0 FOR i = 0 TO ( COUNT_OF(vsArray) - 1 ) CLEANUP_VEHICLE(vsArray[i], bDelete, bDeathOnly) ENDFOR ENDPROC PROC CLEANUP_PED(PED_STRUCT &ped, BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE, BOOL bKeepTask = TRUE) IF ( bDelete = FALSE ) IF DOES_ENTITY_EXIST(ped.PedIndex) IF ( bDeathOnly = TRUE ) IF IS_PED_INJURED(ped.PedIndex) ped.eCleanupReason = GET_PED_CLEANUP_REASON(ped.PedIndex #IF IS_DEBUG_BUILD, ped.sDebugName #ENDIF) IF IS_ENTITY_DEAD(ped.PedIndex) REMOVE_PED_DEFENSIVE_AREA(ped.PedIndex) ENDIF SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex) IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF IF IS_ITEMSET_VALID(ped.ItemsetIndex) DESTROY_ITEMSET(ped.ItemsetIndex) ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting ped ", ped.sDebugName, " as no longer due to ped death.") #ENDIF ENDIF ELIF ( bDeathOnly = FALSE ) IF NOT IS_PED_INJURED(ped.PedIndex) IF IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID()) REMOVE_PED_FROM_GROUP(ped.PedIndex) ENDIF SET_PED_KEEP_TASK(ped.PedIndex, bKeepTask) SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex) IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF IF IS_ITEMSET_VALID(ped.ItemsetIndex) DESTROY_ITEMSET(ped.ItemsetIndex) ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting ped ", ped.sDebugName, " as no longer needed.") #ENDIF ENDIF ENDIF ENDIF ELIF ( bDelete = TRUE ) IF DOES_ENTITY_EXIST(ped.PedIndex) IF NOT IS_PED_INJURED(ped.PedIndex) IF IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID()) REMOVE_PED_FROM_GROUP(ped.PedIndex) ENDIF ENDIF IF IS_ENTITY_DEAD(ped.PedIndex) OR NOT IS_ENTITY_DEAD(ped.PedIndex) REMOVE_PED_DEFENSIVE_AREA(ped.PedIndex) ENDIF DELETE_PED(ped.PedIndex) IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF IF IS_ITEMSET_VALID(ped.ItemsetIndex) DESTROY_ITEMSET(ped.ItemsetIndex) ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Deleting ped ", ped.sDebugName, ".") #ENDIF ENDIF ped.iTimer = 0 ped.iProgress = 0 ped.fDistanceToTargetPed = 0 ped.bHasTask = FALSE ped.bCleanupConversationTriggered = FALSE ped.bVehicleReached = FALSE ped.eCleanupReason = PED_CLEANUP_NO_CLEANUP ped.ePedVehicle = MAX_SPEEDOPHILES ped.eState = PED_STATE_IDLE ENDIF ENDPROC PROC CLEANUP_PED_GROUP(PED_STRUCT &array[], BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE, BOOL bKeepTask = TRUE) INT i = 0 FOR i = 0 TO ( COUNT_OF(array) - 1 ) CLEANUP_PED(array[i], bDelete, bDeathOnly, bKeepTask) ENDFOR ENDPROC PROC INITIALISE_SPAWNPOINTS(SPAWNPOINT_STRUCT &array[], INT iCurrentWave) IF iCurrentWave = 4 array[0].vPosition = <<12.8661, -1836.1624, 23.6954>> array[0].fHeading = 64.4611 array[0].sDefensiveArea.vPosition = <<21.6126, -1844.2938, 23.6066>> array[0].sDefensiveArea.fWidth = 15.0 array[0].sDefensiveArea.bSphere = TRUE array[0].iIntervalTime = 8000 array[1].vPosition = <<-16.6636, -1859.8578, 23.7950>> array[1].fHeading = 47.6587 array[1].sDefensiveArea.vPosition = <<-16.6636, -1859.8578, 23.7950>> array[1].sDefensiveArea.fWidth = 15.0 array[1].sDefensiveArea.bSphere = TRUE array[1].iIntervalTime = 12000 ELSE array[0].vPosition = << 27.3783, -1816.6031, 24.1608 >> array[0].fHeading = 64.4611 array[0].sDefensiveArea.vPosition = <<1.3957, -1837.1431, 23.7967>> array[0].sDefensiveArea.fWidth = 4.0 array[0].sDefensiveArea.bSphere = TRUE array[0].iIntervalTime = 8000 array[1].vPosition = << 2.2555, -1808.7224, 24.3374 >> array[1].fHeading = 47.6587 array[1].sDefensiveArea.vPosition = << -17.9626, -1821.1476, 24.8344 >> array[1].sDefensiveArea.fWidth = 1.0 array[1].sDefensiveArea.bSphere = TRUE array[1].iIntervalTime = 12000 ENDIF //create coverpoints INT i = 0 FOR i = 0 TO ( COUNT_OF(array) - 1 ) array[i].bActive = TRUE array[i].bTaken = FALSE array[i].bHasTask = FALSE array[i].iKillCount = 0 ENDFOR #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Initialised enemy spawnpoints.") #ENDIF ENDPROC PROC CLEANUP_SPAWNPOINTS(SPAWNPOINT_STRUCT &array[], BOOL bDelete = FALSE) INT i FOR i = 0 TO ( COUNT_OF(array) - 1 ) CLEANUP_ENEMY_PED(array[i].sEnemy, bDelete, FALSE, FALSE) array[i].bActive = FALSE ENDFOR ENDPROC /// PURPOSE: /// Creates scripted coverpoints for peds to use in the shootout /// PARAMS: /// sArray - Array of coverpoint_struct instances, where all coverpoint details are stored. PROC CREATE_COVERPOINTS(COVERPOINT_STRUCT &sArray[]) //Lamar's shootout path positions LamarShootoutPositions[0] = << 86.69, -1945.90, 19.75 >> LamarShootoutPositions[1] = << 92.33, -1931.13, 19.80 >> //<< 91.12, -1933.29, 19.76 >> LamarShootoutPositions[2] = << 91.67, -1926.59, 19.77 >> LamarShootoutPositions[3] = << 85.91, -1913.31, 19.89 >> LamarShootoutPositions[4] = << 68.19, -1894.92, 20.66 >> LamarShootoutPositions[5] = << 46.99, -1878.41, 21.23 >> LamarShootoutPositions[6] = << 37.10, -1873.07, 21.66 >> LamarShootoutPositions[7] = << 39.30, -1870.39, 21.71 >> LamarShootoutPositions[8] = << 30.68, -1864.43, 22.12 >> LamarShootoutPositions[9] = << 21.19, -1856.01, 22.65 >> LamarShootoutPositions[10] = << 9.48, -1846.80, 23.27 >> LamarShootoutPositions[11] = << -22.67, -1846.52, 24.27 >> LamarShootoutPositions[12] = << -31.95, -1857.39, 24.72 >> //cover points //Franklin's shootout start coverpoint sArray[0].vPosition = <<82.7797, -1949.6857, 19.79 >>//<< 82.898, -1949.781, 19.79 >> sArray[0].fHeading = 49.6199//62.5883 sArray[0].CoverpointUsage = COVUSE_WALLTOBOTH sArray[0].CoverpointHeight = COVHEIGHT_LOW sArray[0].CoverpointArc = COVARC_180 sArray[0].bActive = TRUE sArray[0].bStationary = FALSE //Lamar's shootout start coverpoint sArray[1].vPosition = << 83.7215, -1948.4117, 19.6708 >> sArray[1].fHeading = 49.6199 sArray[1].CoverpointUsage = COVUSE_WALLTOBOTH sArray[1].CoverpointHeight = COVHEIGHT_LOW sArray[1].CoverpointArc = COVARC_180 sArray[1].bActive = TRUE sArray[1].bStationary = FALSE //Trevor's shootout start coverpoint sArray[2].vPosition = << 85.02, -1946.93, 19.78 >> sArray[2].fHeading = 49.6199//53.5876 sArray[2].CoverpointUsage = COVUSE_WALLTOBOTH sArray[2].CoverpointHeight = COVHEIGHT_LOW sArray[2].CoverpointArc = COVARC_180 sArray[2].bActive = TRUE sArray[2].bStationary = FALSE sArray[3].vPosition = << 72.4060, -1927.5352, 19.9848 >> sArray[3].fHeading = 45.0 sArray[3].CoverpointUsage = COVUSE_WALLTOLEFT sArray[3].CoverpointHeight = COVHEIGHT_LOW sArray[3].CoverpointArc = COVARC_120 sArray[3].bActive = TRUE sArray[3].bStationary = FALSE sArray[4].vPosition = << 53.0566, -1912.4000, 20.6508 >> sArray[4].fHeading = 55.6465 sArray[4].CoverpointUsage = COVUSE_WALLTOLEFT sArray[4].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[4].CoverpointArc = COVARC_120 sArray[4].bActive = TRUE sArray[4].bStationary = FALSE sArray[5].vPosition = << 31.2626, -1894.4664, 21.2817 >> sArray[5].fHeading = 57.1599 sArray[5].CoverpointUsage = COVUSE_WALLTOLEFT sArray[5].CoverpointHeight = COVHEIGHT_HIGH sArray[5].CoverpointArc = COVARC_120 sArray[5].bActive = TRUE sArray[5].bStationary = FALSE sArray[6].vPosition = << 7.9293, -1875.0332, 22.6954 >> sArray[6].fHeading = 55.7332 sArray[6].CoverpointUsage = COVUSE_WALLTOLEFT sArray[6].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[6].CoverpointArc = COVARC_120 sArray[6].bActive = TRUE sArray[6].bStationary = FALSE sArray[7].vPosition = << -22.6238, -1849.2922, 24.1939 >> sArray[7].fHeading = 51.7058 sArray[7].CoverpointUsage = COVUSE_WALLTOLEFT sArray[7].CoverpointHeight = COVHEIGHT_LOW sArray[7].CoverpointArc = COVARC_180 sArray[7].bActive = TRUE sArray[7].bStationary = FALSE sArray[8].vPosition = << 4.0673, -1872.0771, 22.7360 >> sArray[8].fHeading = 53.2814 sArray[8].CoverpointUsage = COVUSE_WALLTONEITHER sArray[8].CoverpointHeight = COVHEIGHT_LOW sArray[8].CoverpointArc = COVARC_180 sArray[8].bActive = TRUE sArray[8].bStationary = FALSE sArray[9].vPosition = << -5.9057, -1858.8632, 23.4581 >> sArray[9].fHeading = 48.0057 sArray[9].CoverpointUsage = COVUSE_WALLTONEITHER sArray[9].CoverpointHeight = COVHEIGHT_HIGH sArray[9].CoverpointArc = COVARC_180 sArray[9].bActive = TRUE sArray[9].bStationary = TRUE sArray[10].vPosition = << 36.8745, -1900.4598, 21.0387 >> sArray[10].fHeading = 53.6668 sArray[10].CoverpointUsage = COVUSE_WALLTOLEFT sArray[10].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[10].CoverpointArc = COVARC_120 sArray[10].bActive = TRUE sArray[10].bStationary = FALSE sArray[11].vPosition = << 63.0260, -1919.9938, 20.5881 >> sArray[11].fHeading = 49.4401 sArray[11].CoverpointUsage = COVUSE_WALLTOLEFT sArray[11].CoverpointHeight = COVHEIGHT_LOW sArray[11].CoverpointArc = COVARC_120 sArray[11].bActive = TRUE sArray[11].bStationary = FALSE sArray[12].vPosition = << 57.8073, -1909.1831, 20.4670 >> sArray[12].fHeading = 88.5275 sArray[12].CoverpointUsage = COVUSE_WALLTORIGHT sArray[12].CoverpointHeight = COVHEIGHT_LOW sArray[12].CoverpointArc = COVARC_120 sArray[12].bActive = TRUE sArray[12].bStationary = TRUE //stationary positions sArray[13].vPosition = << 58.0236, -1901.5468, 20.6670 >> sArray[13].fHeading = 64.9632 sArray[13].CoverpointUsage = COVUSE_WALLTORIGHT sArray[13].CoverpointHeight = COVHEIGHT_LOW sArray[13].CoverpointArc = COVARC_120 sArray[13].bActive = TRUE sArray[13].bStationary = TRUE sArray[14].vPosition = << 60.5177, -1913.5453, 20.6350 >> sArray[14].fHeading = 44.8179 sArray[14].CoverpointUsage = COVUSE_WALLTORIGHT sArray[14].CoverpointHeight = COVHEIGHT_LOW sArray[14].CoverpointArc = COVARC_120 sArray[14].bActive = TRUE sArray[14].bStationary = TRUE sArray[15].vPosition = << 85.9292, -1932.2690, 19.5994 >> sArray[15].fHeading = 3.0663 sArray[15].CoverpointUsage = COVUSE_WALLTORIGHT sArray[15].CoverpointHeight = COVHEIGHT_LOW sArray[15].CoverpointArc = COVARC_120 sArray[15].bActive = TRUE sArray[15].bStationary = TRUE sArray[16].vPosition = << 67.4052, -1922.5353, 20.3300 >> sArray[16].fHeading = 41.2396 sArray[16].CoverpointUsage = COVUSE_WALLTORIGHT sArray[16].CoverpointHeight = COVHEIGHT_LOW sArray[16].CoverpointArc = COVARC_120 sArray[16].bActive = TRUE sArray[16].bStationary = TRUE sArray[17].vPosition = << 66.5032, -1908.5879, 20.6566 >> sArray[17].fHeading = 24.7455 sArray[17].CoverpointUsage = COVUSE_WALLTORIGHT sArray[17].CoverpointHeight = COVHEIGHT_LOW sArray[17].CoverpointArc = COVARC_120 sArray[17].bActive = TRUE sArray[17].bStationary = TRUE sArray[18].vPosition = << 43.5720, -1904.9318, 20.7482 >>//<< 43.4798, -1904.7393, 20.7661 >> //causes assert because coverpoint is blocked by geometry sArray[18].fHeading = 21.7481 sArray[18].CoverpointUsage = COVUSE_WALLTONEITHER sArray[18].CoverpointHeight = COVHEIGHT_LOW sArray[18].CoverpointArc = COVARC_120 sArray[18].bActive = TRUE sArray[18].bStationary = FALSE sArray[19].vPosition = <<44.3755, -1898.6537, 20.7424>> sArray[19].fHeading = 78.5593 sArray[19].CoverpointUsage = COVUSE_WALLTONEITHER sArray[19].CoverpointHeight = COVHEIGHT_LOW sArray[19].CoverpointArc = COVARC_90 sArray[19].bActive = TRUE sArray[19].bStationary = FALSE sArray[20].vPosition = <<29.9750, -1887.2792, 21.5489>> sArray[20].fHeading = 44.9622 sArray[20].CoverpointUsage = COVUSE_WALLTORIGHT sArray[20].CoverpointHeight = COVHEIGHT_LOW sArray[20].CoverpointArc = COVARC_120 sArray[20].bActive = TRUE sArray[20].bStationary = TRUE sArray[21].vPosition = << 28.7632, -1881.1276, 21.6479 >> sArray[21].fHeading = 44.4764 sArray[21].CoverpointUsage = COVUSE_WALLTORIGHT sArray[21].CoverpointHeight = COVHEIGHT_LOW sArray[21].CoverpointArc = COVARC_120 sArray[21].bActive = TRUE sArray[21].bStationary = TRUE sArray[22].vPosition = << 15.4082, -1878.6786, 22.1955 >> sArray[22].fHeading = 26.2613 sArray[22].CoverpointUsage = COVUSE_WALLTORIGHT sArray[22].CoverpointHeight = COVHEIGHT_LOW sArray[22].CoverpointArc = COVARC_120 sArray[22].bActive = TRUE sArray[22].bStationary = TRUE sArray[23].vPosition = << 18.7292, -1869.3192, 22.3698 >> sArray[23].fHeading = 30.3013 sArray[23].CoverpointUsage = COVUSE_WALLTORIGHT sArray[23].CoverpointHeight = COVHEIGHT_LOW sArray[23].CoverpointArc = COVARC_120 sArray[23].bActive = TRUE sArray[23].bStationary = TRUE sArray[24].vPosition = << 5.0254, -1867.1619, 22.7755 >> sArray[24].fHeading = 47.2275 sArray[24].CoverpointUsage = COVUSE_WALLTORIGHT sArray[24].CoverpointHeight = COVHEIGHT_LOW sArray[24].CoverpointArc = COVARC_120 sArray[24].bActive = TRUE sArray[24].bStationary = TRUE sArray[25].vPosition = << 4.9790, -1853.9192, 23.2154 >> sArray[25].fHeading = 40.7702 sArray[25].CoverpointUsage = COVUSE_WALLTORIGHT sArray[25].CoverpointHeight = COVHEIGHT_LOW sArray[25].CoverpointArc = COVARC_120 sArray[25].bActive = TRUE sArray[25].bStationary = TRUE //at the very end of shootout near the escape house sArray[26].vPosition = << -26.0429, -1846.3679, 24.4320 >> sArray[26].fHeading = 53.8431 sArray[26].CoverpointUsage = COVUSE_WALLTOLEFT sArray[26].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[26].CoverpointArc = COVARC_120 sArray[26].bActive = TRUE sArray[26].bStationary = FALSE //coverpoints for enemies or Lamar, bActive = FALSE for player peds sArray[27].vPosition = << 84.0040, -1906.8210, 20.2583 >> sArray[27].fHeading = 226.8502 sArray[27].CoverpointUsage = COVUSE_WALLTOLEFT sArray[27].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[27].CoverpointArc = COVARC_180 sArray[27].bActive = FALSE sArray[27].bStationary = FALSE sArray[28].vPosition = << 46.0988, -1875.1759, 21.4052 >> sArray[28].fHeading = 48.7171 sArray[28].CoverpointUsage = COVUSE_WALLTORIGHT sArray[28].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[28].CoverpointArc = COVARC_180 sArray[28].bActive = FALSE sArray[28].bStationary = FALSE sArray[29].vPosition = << 41.3668, -1867.1228, 21.8246 >> //<< 41.1951, -1866.8962, 21.9586 >> sArray[29].fHeading = 76.3672 sArray[29].CoverpointUsage = COVUSE_WALLTORIGHT sArray[29].CoverpointHeight = COVHEIGHT_LOW sArray[29].CoverpointArc = COVARC_180 sArray[29].bActive = FALSE sArray[29].bStationary = FALSE sArray[30].vPosition = <<30.4106, -1861.7249, 22.2593>> //<< 30.1875, -1861.4191, 22.2291 >> //<< 30.0710, -1861.5137, 22.2467 >> sArray[30].fHeading = 42.8982 sArray[30].CoverpointUsage = COVUSE_WALLTORIGHT sArray[30].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[30].CoverpointArc = COVARC_180 sArray[30].bActive = FALSE sArray[30].bStationary = FALSE sArray[31].vPosition = << -4.2944, -1839.1528, 23.8936 >> sArray[31].fHeading = 46.5391 sArray[31].CoverpointUsage = COVUSE_WALLTONEITHER sArray[31].CoverpointHeight = COVHEIGHT_HIGH sArray[31].CoverpointArc = COVARC_180 sArray[31].bActive = FALSE sArray[31].bStationary = FALSE sArray[32].vPosition = << 60.0972, -1886.5510, 20.6859 >> sArray[32].fHeading = 54.8452 sArray[32].CoverpointUsage = COVUSE_WALLTORIGHT sArray[32].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[32].CoverpointArc = COVARC_180 sArray[32].bActive = FALSE sArray[32].bStationary = FALSE sArray[33].vPosition = << 83.9598, -1907.9832, 20.1624 >> sArray[33].fHeading = 222.3723 sArray[33].CoverpointUsage = COVUSE_WALLTOLEFT sArray[33].CoverpointHeight = COVHEIGHT_LOW sArray[33].CoverpointArc = COVARC_180 sArray[33].bActive = FALSE sArray[33].bStationary = FALSE sArray[34].vPosition = << 20.4283, -1853.3781, 22.7687 >> sArray[34].fHeading = 23.7767 sArray[34].CoverpointUsage = COVUSE_WALLTORIGHT sArray[34].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[34].CoverpointArc = COVARC_180 sArray[34].bActive = FALSE sArray[34].bStationary = FALSE sArray[35].vPosition = << 85.7919, -1909.5291, 20.0351 >> sArray[35].fHeading = 23.7767 sArray[35].CoverpointUsage = COVUSE_WALLTORIGHT sArray[35].CoverpointHeight = COVHEIGHT_LOW sArray[35].CoverpointArc = COVARC_180 sArray[35].bActive = FALSE sArray[35].bStationary = FALSE sArray[36].vPosition = <<55.8396, -1889.8090, 20.6355>> sArray[36].fHeading = 231.9477 sArray[36].CoverpointUsage = COVUSE_WALLTOLEFT sArray[36].CoverpointHeight = COVHEIGHT_LOW sArray[36].CoverpointArc = COVARC_180 sArray[36].bActive = FALSE sArray[36].bStationary = FALSE sArray[37].vPosition = << 53.5040, -1881.0540, 21.0802 >> sArray[37].fHeading = 230.8292 sArray[37].CoverpointUsage = COVUSE_WALLTOLEFT sArray[37].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[37].CoverpointArc = COVARC_180 sArray[37].bActive = FALSE sArray[37].bStationary = FALSE sArray[38].vPosition = << 30.4574, -1894.1149, 21.3552 >> sArray[38].fHeading = 227.7727 sArray[38].CoverpointUsage = COVUSE_WALLTOBOTH sArray[38].CoverpointHeight = COVHEIGHT_LOW sArray[38].CoverpointArc = COVARC_180 sArray[38].bActive = FALSE sArray[38].bStationary = FALSE sArray[39].vPosition = << 0.1045, -1825.9236, 24.3300 >> sArray[39].fHeading = 129.9000 sArray[39].CoverpointUsage = COVUSE_WALLTORIGHT sArray[39].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[39].CoverpointArc = COVARC_300TO0 sArray[39].bActive = FALSE sArray[39].bStationary = FALSE sArray[40].vPosition = << -19.5798, -1851.4104, 24.0494 >> sArray[40].fHeading = 237.4822 sArray[40].CoverpointUsage = COVUSE_WALLTORIGHT sArray[40].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[40].CoverpointArc = COVARC_180 sArray[40].bActive = FALSE sArray[40].bStationary = FALSE sArray[41].vPosition = <<95.2370, -1950.6820, 19.7926>> sArray[41].fHeading = 148.0664 sArray[41].CoverpointUsage = COVUSE_WALLTORIGHT sArray[41].CoverpointHeight = COVHEIGHT_LOW sArray[41].CoverpointArc = COVARC_180 sArray[41].bActive = FALSE sArray[41].bStationary = FALSE sArray[42].vPosition = << 61.1097, -1918.4448, 20.6104 >> sArray[42].fHeading = 245.9129 sArray[42].CoverpointUsage = COVUSE_WALLTORIGHT sArray[42].CoverpointHeight = COVHEIGHT_LOW sArray[42].CoverpointArc = COVARC_180 sArray[42].bActive = FALSE sArray[42].bStationary = FALSE sArray[43].vPosition = << 79.0345, -1900.6619, 20.7645 >> sArray[43].fHeading = 234.2608 sArray[43].CoverpointUsage = COVUSE_WALLTOLEFT sArray[43].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[43].CoverpointArc = COVARC_180 sArray[43].bActive = FALSE sArray[43].bStationary = FALSE sArray[44].vPosition = << 52.2746, -1911.7401, 20.6309 >> sArray[44].fHeading = 238.6767 sArray[44].CoverpointUsage = COVUSE_WALLTORIGHT sArray[44].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[44].CoverpointArc = COVARC_180 sArray[44].bActive = FALSE sArray[44].bStationary = FALSE sArray[45].vPosition = << 74.7971, -1896.5819, 20.7474 >> sArray[45].fHeading = 221.3824 sArray[45].CoverpointUsage = COVUSE_WALLTOLEFT sArray[45].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[45].CoverpointArc = COVARC_180 sArray[45].bActive = FALSE sArray[45].bStationary = FALSE sArray[46].vPosition = << 77.6239, -1945.4353, 19.8055 >> sArray[46].fHeading = 236.8190 sArray[46].CoverpointUsage = COVUSE_WALLTORIGHT sArray[46].CoverpointHeight = COVHEIGHT_LOW sArray[46].CoverpointArc = COVARC_180 sArray[46].bActive = FALSE sArray[46].bStationary = FALSE sArray[47].vPosition = << 87.0147, -1919.0001, 19.6727 >> sArray[47].fHeading = 241.6554 sArray[47].CoverpointUsage = COVUSE_WALLTOLEFT sArray[47].CoverpointHeight = COVHEIGHT_LOW sArray[47].CoverpointArc = COVARC_180 sArray[47].bActive = FALSE sArray[47].bStationary = FALSE sArray[48].vPosition = << 45.4957, -1874.5175, 21.4749 >> sArray[48].fHeading = 226.5895 sArray[48].CoverpointUsage = COVUSE_WALLTOLEFT sArray[48].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[48].CoverpointArc = COVARC_180 sArray[48].bActive = FALSE sArray[48].bStationary = FALSE sArray[49].vPosition = << 41.1759, -1878.1239, 21.4395 >> //GROUP7 guy uses this sArray[49].fHeading = 240.7377 sArray[49].CoverpointUsage = COVUSE_WALLTONEITHER sArray[49].CoverpointHeight = COVHEIGHT_LOW sArray[49].CoverpointArc = COVARC_180 sArray[49].bActive = FALSE sArray[49].bStationary = FALSE sArray[50].vPosition = << 38.9290, -1891.4150, 20.9758 >> //group8 guy uses this sArray[50].fHeading = 241.1702 sArray[50].CoverpointUsage = COVUSE_WALLTONEITHER sArray[50].CoverpointHeight = COVHEIGHT_LOW sArray[50].CoverpointArc = COVARC_180 sArray[50].bActive = FALSE sArray[50].bStationary = FALSE sArray[51].vPosition = << 20.6281, -1885.5229, 21.9471 >> sArray[51].fHeading = 236.1646 sArray[51].CoverpointUsage = COVUSE_WALLTORIGHT sArray[51].CoverpointHeight = COVHEIGHT_LOW sArray[51].CoverpointArc = COVARC_180 sArray[51].bActive = FALSE sArray[51].bStationary = FALSE sArray[52].vPosition = << 7.1729, -1874.4525, 22.5758 >> sArray[52].fHeading = 225.0603 sArray[52].CoverpointUsage = COVUSE_WALLTORIGHT sArray[52].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[52].CoverpointArc = COVARC_180 sArray[52].bActive = FALSE sArray[52].bStationary = FALSE sArray[53].vPosition = << 37.7745, -1866.7610, 21.9016 >> sArray[53].fHeading = 242.3961 sArray[53].CoverpointUsage = COVUSE_WALLTOLEFT sArray[53].CoverpointHeight = COVHEIGHT_LOW sArray[53].CoverpointArc = COVARC_180 sArray[53].bActive = FALSE sArray[53].bStationary = FALSE sArray[54].vPosition = << 21.4830, -1859.0441, 22.5513 >> sArray[54].fHeading = 202.8038 sArray[54].CoverpointUsage = COVUSE_WALLTORIGHT sArray[54].CoverpointHeight = COVHEIGHT_LOW sArray[54].CoverpointArc = COVARC_180 sArray[54].bActive = FALSE sArray[54].bStationary = FALSE sArray[55].vPosition = << 12.1190, -1846.3782, 23.2628 >> sArray[55].fHeading = 235.3726 sArray[55].CoverpointUsage = COVUSE_WALLTOLEFT sArray[55].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[55].CoverpointArc = COVARC_180 sArray[55].bActive = FALSE sArray[55].bStationary = FALSE sArray[56].vPosition = << -6.8817, -1837.0306, 24.0336 >> sArray[56].fHeading = 227.5375 sArray[56].CoverpointUsage = COVUSE_WALLTONEITHER sArray[56].CoverpointHeight = COVHEIGHT_LOW sArray[56].CoverpointArc = COVARC_180 sArray[56].bActive = FALSE sArray[56].bStationary = FALSE sArray[57].vPosition = << 1.4230, -1837.1008, 23.8195 >> sArray[57].fHeading = 141.9094 sArray[57].CoverpointUsage = COVUSE_WALLTOLEFT sArray[57].CoverpointHeight = COVHEIGHT_LOW sArray[57].CoverpointArc = COVARC_180 sArray[57].bActive = FALSE sArray[57].bStationary = FALSE sArray[58].vPosition = <<75.6596, -1897.3557, 20.7856>> //<< 76.1384, -1896.6304, 20.8449 >> sArray[58].fHeading = 43.5654 sArray[58].CoverpointUsage = COVUSE_WALLTORIGHT sArray[58].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[58].CoverpointArc = COVARC_90//COVARC_180 sArray[58].bActive = FALSE sArray[58].bStationary = FALSE sArray[58].bPlayerPriority = TRUE sArray[59].vPosition = << 8.4098, -1843.5679, 23.3954 >> sArray[59].fHeading = 45.1052 sArray[59].CoverpointUsage = COVUSE_WALLTORIGHT sArray[59].CoverpointHeight = COVHEIGHT_LOW sArray[59].CoverpointArc = COVARC_180 sArray[59].bActive = FALSE sArray[59].bStationary = FALSE sArray[60].vPosition = << 77.1253, -1931.6445, 19.8003 >> sArray[60].fHeading = 52.0250 sArray[60].CoverpointUsage = COVUSE_WALLTOLEFT sArray[60].CoverpointHeight = COVHEIGHT_LOW sArray[60].CoverpointArc = COVARC_180 sArray[60].bActive = TRUE sArray[60].bStationary = FALSE sArray[61].vPosition = << 14.8813, -1880.9801, 22.2229 >> sArray[61].fHeading = 48.6704 sArray[61].CoverpointUsage = COVUSE_WALLTOLEFT sArray[61].CoverpointHeight = COVHEIGHT_LOW sArray[61].CoverpointArc = COVARC_180 sArray[61].bActive = TRUE sArray[61].bStationary = FALSE sArray[62].vPosition = << 52.07, -1919.99, 20.57 >> sArray[62].fHeading = 231.1549 sArray[62].CoverpointUsage = COVUSE_WALLTORIGHT sArray[62].CoverpointHeight = COVHEIGHT_TOOHIGH sArray[62].CoverpointArc = COVARC_90 sArray[62].bActive = TRUE sArray[62].bStationary = FALSE //create coverpoints INT i = 0 FOR i = 0 TO ( COUNT_OF(sArray) - 1 ) IF ( sArray[i].bStationary = FALSE ) sArray[i].CoverpointIndex = ADD_COVER_POINT(sArray[i].vPosition, sArray[i].fHeading, sArray[i].CoverpointUsage, sArray[i].CoverpointHeight, sArray[i].CoverpointArc, sArray[i].bPlayerPriority) ENDIF //save the distance from start of the street corrdinates sArray[i].fDistance = VDIST2(vGroveStreetStart, sArray[i].vPosition) ENDFOR #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created scripted coverpoints.") #ENDIF ENDPROC PROC REMOVE_COVERPOINTS(COVERPOINT_STRUCT &sArray[], BOOL &bCoverpointsCreatedFlag) INT i = 0 FOR i = 0 TO ( COUNT_OF(sArray) - 1 ) REMOVE_COVER_POINT(sArray[i].CoverpointIndex) ENDFOR bCoverpointsCreatedFlag = FALSE REMOVE_COVER_POINT(EndCoverPointIndex) bEndCoverPointCreated = FALSE ENDPROC PROC UPDATE_COVERPOINTS_ACTIVE_STATE_FOR_PEDS(FLOAT fPed1Distance, FLOAT fPed2Distance, COVERPOINT_STRUCT &csArray[], FLOAT fRadius = 50.0) INT i = 0 FOR i = 0 TO ( COUNT_OF(csArray) - 1 ) IF ( csArray[i].bActive = TRUE ) IF ( csArray[i].fDistance - fPed1Distance - fRadius < 0 ) OR ( csArray[i].fDistance - fPed2Distance - fRadius < 0 ) csArray[i].bActive = FALSE ENDIF ENDIF ENDFOR ENDPROC FUNC BOOL IS_PLAYER_IN_SHOOTOUT_AREA() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<49.515247,-1892.616577,14.793283>>, <<115.109360,-1961.272461,28.311836>>, 84.0) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<53.815639,-1893.396484,14.593086>>, <<-42.446770,-1812.097900,33.587776>>, 82.0) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(PED_INDEX friendlyPed) IF NOT DOES_ENTITY_EXIST(friendlyPed) RETURN FALSE ENDIF INT iter REPEAT COUNT_OF(vsSpeedophiles) iter IF IS_PED_SITTING_IN_THIS_VEHICLE(friendlyPed, vsSpeedophiles[iter].VehicleIndex) RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC /// PURPOSE: /// Checks for various mission fail conditions. Redirects mission flow to MISSION_STAGE_FAILED when one of fail conditions is true. /// PARAMS: /// eStage - Mission stage variable. /// eFail - Mission fail reason. PROC RUN_FAIL_CHECKS(MISSION_STAGES &eStage, MISSION_FAILS &eFail) IF eStage <> MISSION_STAGE_PASSED AND eStage <> MISSION_STAGE_FAILED IF NOT IS_CUTSCENE_PLAYING() IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF ( FailFlags[MISSION_FAIL_CAR_UNDRIVABLE] = TRUE ) IF IS_VEHICLE_PERMANENTLY_STUCK(vsVan.VehicleIndex) eFail = MISSION_FAIL_CAR_UNDRIVABLE eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_CAR_DEAD] = TRUE ) IF NOT IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex, TRUE) OR IS_ENTITY_ON_FIRE(vsVan.VehicleIndex) OR ( HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vsVan.VehicleIndex, PLAYER_PED_ID()) AND HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(vsVan.VehicleIndex, WEAPONTYPE_MOLOTOV) ) eFail = MISSION_FAIL_CAR_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) AND DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) AND DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) IF ( FailFlags[MISSION_FAIL_SPEEDOPHILE_DEAD] = TRUE ) IF NOT IS_VEHICLE_DRIVEABLE(vsSpeedophiles[0].VehicleIndex) OR NOT IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) OR NOT IS_VEHICLE_DRIVEABLE(vsSpeedophiles[2].VehicleIndex) eFail = MISSION_FAIL_SPEEDOPHILE_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE] = TRUE ) IF IS_SPEEDOPHILE_STUCK(vsSpeedophiles[0].VehicleIndex) OR IS_SPEEDOPHILE_STUCK(vsSpeedophiles[1].VehicleIndex) OR IS_SPEEDOPHILE_STUCK(vsSpeedophiles[2].VehicleIndex) eFail = MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE eStage = MISSION_STAGE_FAILED ENDIF IF eStage = MISSION_STAGE_GROVE_STREET_SHOOTOUT OR eStage = MISSION_STAGE_RUN_TO_SPEEDOPHILES IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[0].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[2].VehicleIndex) IF IS_ENTITY_UPSIDEDOWN(vsSpeedophiles[0].VehicleIndex) OR IS_ENTITY_UPSIDEDOWN(vsSpeedophiles[1].VehicleIndex) OR IS_ENTITY_UPSIDEDOWN(vsSpeedophiles[2].VehicleIndex) eFail = MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF ( FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE ) IF IS_PED_INJURED(psLamar.PedIndex) OR IS_ENTITY_DEAD(psLamar.PedIndex) eFail = MISSION_FAIL_LAMAR_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_BUDDIES_LOST] = TRUE) OR ( FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE ) IF NOT IS_PED_INJURED(psLamar.PedIndex) SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES IF ( psLamar.bFleeing = FALSE) OR ( psLamar.eState = PED_STATE_RUNNING_TO_ALLEY ) OR ( psLamar.eState = PED_STATE_WAITING_IN_ALLEY) IF NOT IS_PLAYER_IN_SHOOTOUT_AREA() eFail = MISSION_FAIL_BUDDIES_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > ABANDON_BUDDY_FAIL_RANGE ) eFail = MISSION_FAIL_BUDDIES_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF ELSE IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > ABANDON_BUDDY_FAIL_RANGE ) AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << 5.18,-1855.46, 22.19 >>, << -32.06, -1825.13, 33.10 >>, 40.0) eFail = MISSION_FAIL_BUDDIES_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > 150 ) eFail = MISSION_FAIL_BUDDIES_LOST eStage = MISSION_STAGE_FAILED ENDIF BREAK DEFAULT IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > ABANDON_BUDDY_FAIL_RANGE ) eFail = MISSION_FAIL_BUDDIES_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF BREAK ENDSWITCH ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_LAMAR_LEFT_BEHIND] = TRUE ) IF NOT IS_PED_INJURED(psLamar.PedIndex) IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > ABANDON_BUDDY_FAIL_RANGE eFail = MISSION_FAIL_LAMAR_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF ( FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE ) IF IS_PED_INJURED(psTrevor.PedIndex) CPRINTLN(DEBUG_MISSION, "bsw trevor died, trevor's state: ", psTrevor.iProgress) eFail = MISSION_FAIL_TREVOR_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_TREVOR_LEFT_BEHIND] = TRUE ) IF NOT IS_PED_INJURED(psTrevor.PedIndex) IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psTrevor.PedIndex) > ABANDON_BUDDY_FAIL_RANGE eFail = MISSION_FAIL_TREVOR_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psFranklin.PedIndex) IF ( FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE ) IF IS_PED_INJURED(psFranklin.PedIndex) eFail = MISSION_FAIL_FRANKLIN_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_FRANKLIN_LEFT_BEHIND] = TRUE ) IF NOT IS_PED_INJURED(psFranklin.PedIndex) IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psFranklin.PedIndex) > ABANDON_BUDDY_FAIL_RANGE eFail = MISSION_FAIL_FRANKLIN_LEFT_BEHIND eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psChop.PedIndex) IF ( FailFlags[MISSION_FAIL_CHOP_DEAD] = TRUE ) IF IS_PED_INJURED(psChop.PedIndex) eFail = MISSION_FAIL_CHOP_DEAD eStage = MISSION_STAGE_FAILED ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_CHOP_DROWNED] = TRUE ) IF IS_ENTITY_ATTACHED_TO_ENTITY(psChop.PedIndex, vsVan.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) IF IS_ENTITY_IN_WATER(vsVan.VehicleIndex) IF IS_PED_INJURED(psChop.PedIndex) eFail = MISSION_FAIL_CHOP_DROWNED eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( FailFlags[MISSION_FAIL_DEAL_BLOWN] = TRUE ) IF IS_PED_SHOOTING_AT_AREA(PLAYER_PED_ID(), TRUE, << 89.17, -1952.71, 19.74 >>, 10.0) OR IS_PED_SHOOTING_AT_AREA(PLAYER_PED_ID(), FALSE, << 89.17, -1952.71, 19.74 >>, 10.0) OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, << 89.17, -1952.71, 19.74 >>, 10.0) OR IS_PED_IN_COMBAT_WITH_ANY_PED_FROM_RELATIONSHIP_GROUP_IN_AREA(PLAYER_PED_ID(), RELGROUPHASH_AMBIENT_GANG_BALLAS, << 104.54, -1939.98, 19.80 >>, 50.0) eFail = MISSION_FAIL_DEAL_BLOWN eStage = MISSION_STAGE_FAILED ENDIF IF IS_ANY_VEHICLE_NEAR_POINT(<< 85.03947, -1958.29053, 20.12669 >>, 5.0) eFail = MISSION_FAIL_DEAL_BLOWN eStage = MISSION_STAGE_FAILED ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Sets mission as failed and provides mission flow with reason to print on screen. /// PARAMS: /// eFailReason - One of MISSION_FAILS values. PROC SET_MISSION_FAILED_WITH_REASON(MISSION_FAILS &eFailReason) SWITCH eFailReason CASE MISSION_FAIL_DEAL_BLOWN MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_DBLOW") //Deal blown BREAK CASE MISSION_FAIL_CAR_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_VDEST") //Van is destroyed BREAK CASE MISSION_FAIL_CAR_UNDRIVABLE MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_VUND") //Van is undrivable BREAK CASE MISSION_FAIL_LAMAR_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_LDIED") //Lamar died BREAK CASE MISSION_FAIL_LAMAR_LEFT_BEHIND MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_LLEFT") //Lamar left behind BREAK CASE MISSION_FAIL_TREVOR_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_TDIED") //Trevor died BREAK CASE MISSION_FAIL_TREVOR_LEFT_BEHIND MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_TLEFT") //Trevor left behind BREAK CASE MISSION_FAIL_FRANKLIN_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_FDIED") //Franklin died BREAK CASE MISSION_FAIL_FRANKLIN_LEFT_BEHIND MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_FLEFT") //Franklin left behind BREAK CASE MISSION_FAIL_CHOP_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_CDIED") //Chop died BREAK CASE MISSION_FAIL_CHOP_DROWNED MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_CDROW") //Chop drowned BREAK CASE MISSION_FAIL_BUDDIES_LOST SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_FLB") //Buddies lost BREAK CASE CHAR_TREVOR MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_TLB") BREAK ENDSWITCH BREAK CASE MISSION_FAIL_BUDDIES_LEFT_BEHIND SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_FAB") //Buddies left behind BREAK CASE CHAR_TREVOR MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_TAB") BREAK ENDSWITCH BREAK CASE MISSION_FAIL_SPEEDOPHILE_DEAD MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_SDEST") //Speedophile destroyed BREAK CASE MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_SUND") //Speedophile undrivable BREAK CASE MISSION_FAIL_FORCE_FAIL MISSION_FLOW_MISSION_FAILED_WITH_REASON("FRA1_FAIL") //Debug forced fail BREAK ENDSWITCH ENDPROC PROC RESET_PED_PROPERTIES_AFTER_HOTSWAP(PED_INDEX PedIndex) IF NOT IS_PED_INJURED(PedIndex) CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_MELEE) CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_BULLET_IMPACT) CLEAR_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT) SET_PED_CONFIG_FLAG(PedIndex, PCF_ForcePedToFaceLeftInCover, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_ForcePedToFaceRightInCover, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_BlockPedFromTurningInCover, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, FALSE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_BLIND_FIRE_IN_COVER, TRUE) SET_PED_DIES_IN_WATER(PedIndex, TRUE) SET_PED_INFINITE_AMMO(PedIndex, FALSE) SWITCH GET_ENTITY_MODEL(PedIndex) CASE PLAYER_ONE SET_PED_INFINITE_AMMO(PedIndex, FALSE, WEAPONTYPE_SMG) BREAK CASE PLAYER_TWO SET_PED_INFINITE_AMMO(PedIndex, FALSE, WEAPONTYPE_PUMPSHOTGUN) BREAK ENDSWITCH ENDIF ENDPROC PROC SET_PED_PROPERTIES_AFTER_HOTSWAP(PED_STRUCT &ped, PED_INDEX PedIndex, BOOL bCreateBlip, REL_GROUP_HASH relGroupHash) IF NOT IS_PED_INJURED(PedIndex) ped.PedIndex = PedIndex SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) SET_PED_CAN_BE_TARGETTED(PedIndex, FALSE) SET_PED_AS_ENEMY(PedIndex, FALSE) SET_PED_RELATIONSHIP_GROUP_HASH(PedIndex, relGroupHash) SET_PED_DIES_IN_WATER(PedIndex, FALSE) SET_PED_SUFFERS_CRITICAL_HITS(PedIndex, FALSE) SET_PED_MAX_HEALTH_WITH_SCALE(PedIndex, MAX_BUDDY_PED_HEALTH) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_BULLET_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT) SET_PED_HIGHLY_PERCEPTIVE(PedIndex, TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_DisableHurt, TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_DisablePanicInVehicle, TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_WillFlyThroughWindscreen, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, FALSE) SET_COMBAT_FLOAT(PedIndex, CCF_TIME_TO_INVALIDATE_INJURED_TARGET, 1.0) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_CAN_FIGHT_ARMED_PEDS_WHEN_NOT_ARMED, TRUE) IF ( bCreateBlip = TRUE ) IF NOT DOES_BLIP_EXIST(ped.BlipIndex) ped.BlipIndex = CREATE_BLIP_FOR_ENTITY(ped.PedIndex, FALSE) ENDIF ENDIF //set the ped timer to current game timer when the hotswap happens ped.iTimer = GET_GAME_TIMER() ENDIF ENDPROC PROC SET_PED_WEAPON_AND_AMMO_AFTER_HOTSWAP(PED_INDEX PedIndex, WEAPON_TYPE eWeaponType, BOOL bForceInHand = TRUE, INT iClips = 1) IF NOT IS_PED_INJURED(PedIndex) IF NOT HAS_PED_GOT_WEAPON(PedIndex, eWeaponType) GIVE_WEAPON_TO_PED(PedIndex, eWeaponType, 0) ENDIF SET_CURRENT_PED_WEAPON(PedIndex, eWeaponType, bForceInHand) //IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eWeaponType) < GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) ) IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eWeaponType) < 2 ) ADD_AMMO_TO_PED(PedIndex, eWeaponType, GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) * iClips) ENDIF ENDIF ENDPROC PROC RUN_PED_WEAPON_AMMO_RESTORE_CHECK(PED_INDEX PedIndex, WEAPON_TYPE eWeaponType, INT iClips = 1) IF NOT IS_PED_INJURED(PedIndex) //IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eWeaponType) < GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) ) IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eWeaponType) < 2 ) ADD_AMMO_TO_PED(PedIndex, eWeaponType, GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) * iClips) ENDIF ENDIF ENDPROC PROC SET_PED_CURRENT_WEAPON(PED_INDEX PedIndex, WEAPON_SLOT eWeaponSlot, WEAPON_TYPE eWeaponType, BOOL bForceInHand, INT iClips = 6) IF NOT IS_PED_INJURED(PedIndex) WEAPON_TYPE eCurrentWeaponType eCurrentWeaponType = GET_PED_WEAPONTYPE_IN_SLOT(PedIndex, eWeaponSlot) IF ( eCurrentWeaponType = WEAPONTYPE_INVALID ) OR ( eCurrentWeaponType <> eWeaponType ) GIVE_WEAPON_TO_PED(PedIndex, eWeaponType, GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) * iClips, bForceInHand) ELSE SET_CURRENT_PED_WEAPON(PedIndex, eCurrentWeaponType, bForceInHand) ENDIF IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eWeaponType) < GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) ) ADD_AMMO_TO_PED(PedIndex, eWeaponType, GET_MAX_AMMO_IN_CLIP(PedIndex, eWeaponType) * iClips) ENDIF ENDIF ENDPROC PROC EQUIP_PED_BEST_WEAPON(PED_INDEX PedIndex, BOOL bForceIntoHand) IF NOT IS_PED_INJURED(PedIndex) WEAPON_TYPE eBestWeaponType = GET_BEST_PED_WEAPON(PedIndex, TRUE) IF ( eBestWeaponType <> WEAPONTYPE_UNARMED ) SET_CURRENT_PED_WEAPON(PedIndex, eBestWeaponType, bForceIntoHand) IF ( GET_AMMO_IN_PED_WEAPON(PedIndex, eBestWeaponType) < GET_MAX_AMMO_IN_CLIP(PedIndex, eBestWeaponType) ) ADD_AMMO_TO_PED(PedIndex, eBestWeaponType, GET_MAX_AMMO_IN_CLIP(PedIndex, eBestWeaponType) * 2) ENDIF ENDIF ENDIF ENDPROC PROC SET_PED_COVER_PROPERTIES(PED_INDEX PedIndex, BOOL bCanUseCover, BOOL bForceFaceLeft = FALSE, BOOL bForceFaceRight = FALSE, BOOL bBlockTurnInCover = FALSE, FLOAT fTimeBetweenPeeks = 10.0, BOOL bCanBlindFire = TRUE, FLOAT fBlindFireChance = 0.05, FLOAT fTimeBetweenBursts = 1.25, FLOAT fBurstDuration = 4.0) IF NOT IS_PED_INJURED(PedIndex) SET_PED_COMBAT_ATTRIBUTES(pedIndex, CA_USE_COVER, bCanUseCover) SET_PED_CONFIG_FLAG(PedIndex, PCF_ForcePedToFaceLeftInCover, bForceFaceLeft) SET_PED_CONFIG_FLAG(PedIndex, PCF_ForcePedToFaceRightInCover, bForceFaceRight) SET_PED_CONFIG_FLAG(PedIndex, PCF_BlockPedFromTurningInCover, bBlockTurnInCover) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_BLIND_FIRE_IN_COVER, bCanBlindFire) IF ( fTimeBetweenPeeks >= 0.0 ) SET_COMBAT_FLOAT(PedIndex, CCF_TIME_BETWEEN_PEEKS, fTimeBetweenPeeks) ENDIF IF ( fTimeBetweenBursts >= 0.0 ) SET_COMBAT_FLOAT(PedIndex, CCF_TIME_BETWEEN_BURSTS_IN_COVER, fTimeBetweenBursts) ENDIF IF ( fBurstDuration >= 0.0 ) SET_COMBAT_FLOAT(PedIndex, CCF_BURST_DURATION_IN_COVER, fBurstDuration) ENDIF IF ( fBlindFireChance >= 0.0 ) SET_COMBAT_FLOAT(PedIndex, CCF_BLIND_FIRE_CHANCE, fBlindFireChance) ENDIF ENDIF ENDPROC PROC SET_PED_PREFERRED_COVERPOINT(PED_INDEX PedIndex, ITEMSET_INDEX &ItemsetIndex, COVERPOINT_INDEX &CoverpointIndex) IF NOT IS_PED_INJURED(PedIndex) IF IS_ITEMSET_VALID(ItemsetIndex) DESTROY_ITEMSET(ItemsetIndex) ENDIF IF NOT IS_ITEMSET_VALID(ItemsetIndex) ItemsetIndex = CREATE_ITEMSET(TRUE) ENDIF ADD_TO_ITEMSET(CoverpointIndex, ItemsetIndex) SET_PED_PREFERRED_COVER_SET(PedIndex, ItemsetIndex) ENDIF ENDPROC PROC REMOVE_PED_PREFERRED_COVERPOINT(PED_INDEX PedIndex, ITEMSET_INDEX &ItemsetIndex) IF NOT IS_PED_INJURED(PedIndex) REMOVE_PED_PREFERRED_COVER_SET(PedIndex) IF IS_ITEMSET_VALID(ItemsetIndex) DESTROY_ITEMSET(ItemsetIndex) ENDIF ENDIF ENDPROC PROC SET_PED_MOVEMENT_PROPERTIES(PED_INDEX PedIndex, FLOAT fStrafeMovingChance, FLOAT fWalkStrafingChance) IF NOT IS_PED_INJURED(PedIndex) SET_COMBAT_FLOAT(PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, fStrafeMovingChance) SET_COMBAT_FLOAT(PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, fWalkStrafingChance) ENDIF ENDPROC //|======================= END MISCELLANEOUS PROCEDURES & FUNCTIONS ======================| //|======================= DEBUG VARIABLES, PROCEDURES & FUNCTIONS =======================| #IF IS_DEBUG_BUILD //mission skip menu and widget variables MissionStageMenuTextStruct SkipMenu[13] INT iReturnStage = 0 BOOL bStageResetFlag BOOL bDrawLamarsPath BOOL bDrawObjectNames BOOL bPrintDebugOutput BOOL bPrintGameplayCameraInfo BOOL bPositionGameplayCamera FLOAT fGameplayCameraDesiredHeading FLOAT fGameplayCameraDesiredPitch BOOL bStartChasePlayback BOOL bStopChasePlayback BOOL bStartOnAccelerateToggle BOOL bDrawDebugLinesAndSpheres BOOL bDrawDebugStates BOOL bDrawDebugCoverpoints BOOL bDrawDebugVehicleDamageInfo VECTOR vPropCameraPosition = << -104.15, -1887.18, 0.70 >> VECTOR vPropCameraRotation = << 0.0, 0.0, 140.0 >> //debug widgets variables WIDGET_GROUP_ID Franklin1Widgets FUNC STRING GET_MISSION_STAGE_NAME_FOR_DEBUG(MISSION_STAGES eStage) SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO RETURN "MISSION_STAGE_CUTSCENE_INTRO" BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL RETURN "MISSION_STAGE_DRIVE_TO_DEAL" BREAK CASE MISSION_STAGE_CUTSCENE_DEAL RETURN "MISSION_STAGE_CUTSCENE_DEAL" BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT RETURN "MISSION_STAGE_GROVE_STREET_SHOOTOUT" BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES RETURN "MISSION_STAGE_RUN_TO_SPEEDOPHILES" BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE RETURN "MISSION_STAGE_SPEEDOPHILE_RIDE" BREAK CASE MISSION_STAGE_LOSE_COPS RETURN "MISSION_STAGE_LOSE_COPS" BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR RETURN "MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR" BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR RETURN "MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR" BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN RETURN "MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN" BREAK CASE MISSION_STAGE_END RETURN "MISSION_STAGE_END" BREAK CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE RETURN "MISSION_STAGE_DEBUG_PLAYBACK_CHASE" BREAK CASE MISSION_STAGE_DEBUG_RECORD_CHASE RETURN "MISSION_STAGE_DEBUG_RECORD_CHASE" BREAK ENDSWITCH RETURN "INCORRECT_MISSION_STAGE" ENDFUNC FUNC STRING GET_PED_STATE_NAME_FOR_DEBUG(PED_STATES eState) SWITCH eState CASE PED_STATE_IDLE RETURN "PED_STATE_IDLE" BREAK CASE PED_STATE_PLAYING_BEGIN_ANIM RETURN "PED_STATE_PLAYING_BEGIN_ANIM" BREAK CASE PED_STATE_PLAYING_REACTION_ANIM RETURN "PED_STATE_PLAYING_REACTION_ANIM" BREAK CASE PED_STATE_PLAYING_END_ANIM RETURN "PED_STATE_PLAYING_END_ANIM" BREAK CASE PED_STATE_FLEEING RETURN "PED_STATE_FLEEING" BREAK CASE PED_STATE_COMBAT_ON_FOOT RETURN "PED_STATE_COMBAT_ON_FOOT" BREAK CASE PED_STATE_COMBAT_FROM_VEHICLE RETURN "PED_STATE_COMBAT_FROM_VEHICLE" BREAK CASE PED_STATE_RUNNING_TO_ALLEY RETURN "PED_STATE_RUNNING_TO_ALLEY" BREAK CASE PED_STATE_WAITING_IN_ALLEY RETURN "PED_STATE_WAITING_IN_ALLEY" BREAK CASE PED_STATE_RUNNING_TO_RIVER RETURN "PED_STATE_RUNNING_TO_RIVER" BREAK CASE PED_STATE_WAITING_FOR_PLAYER RETURN "PED_STATE_WAITING_FOR_PLAYER" BREAK CASE PED_STATE_RUNNING_TO_VEHICLE RETURN "PED_STATE_RUNNING_TO_VEHICLE" BREAK CASE PED_STATE_WAITING_AT_VEHICLE RETURN "PED_STATE_WAITING_AT_VEHICLE" BREAK CASE PED_STATE_ENTERING_VEHICLE RETURN "PED_STATE_ENTERING_VEHICLE" BREAK CASE PED_STATE_SITTING_IN_VEHICLE RETURN "PED_STATE_SITTING_IN_VEHICLE" BREAK CASE PED_STATE_EXITING_VEHICLE RETURN "PED_STATE_EXITING_VEHICLE" BREAK CASE PED_STATE_STARTING_RECORDING_PLAYBACK RETURN "PED_STATE_STARTING_RECORDING_PLAYBACK" BREAK CASE PED_STATE_RECORDING_PLAYBACK RETURN "PED_STATE_RECORDING_PLAYBACK" BREAK CASE PED_STATE_ENDING_RECORDING_PLAYBACK RETURN "PED_STATE_ENDING_RECORDING_PLAYBACK" BREAK CASE PED_STATE_CATCHING_UP_WITH_RECORDING RETURN "PED_STATE_CATCHING_UP_WITH_RECORDING" BREAK CASE PED_STATE_FLEE_COPS_ON_FOOT RETURN "PED_STATE_FLEE_COPS_ON_FOOT" BREAK CASE PED_STATE_FOLLOWING_PLAYER RETURN "PED_STATE_FOLLOWING_PLAYER" BREAK CASE PED_STATE_PLAYER_CONTROL_ENABLED RETURN "PED_STATE_PLAYER_CONTROL_ENABLED" BREAK CASE PED_STATE_PLAYER_CONTROL_DISABLED RETURN "PED_STATE_PLAYER_CONTROL_DISABLED" BREAK CASE PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH RETURN "PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH" BREAK ENDSWITCH RETURN "INVALID_PED_STATE" ENDFUNC PROC DO_SCREEN_FADE_IN_FOR_DEBUG(INT iTime) IF NOT IS_SCREEN_FADED_IN() DO_SCREEN_FADE_IN(iTime) WHILE NOT IS_SCREEN_FADED_IN() WAIT(0) ENDWHILE ENDIF ENDPROC PROC DO_SCREEN_FADE_OUT_FOR_DEBUG(INT iTime) IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(iTime) WHILE NOT IS_SCREEN_FADED_OUT() WAIT(0) ENDWHILE ENDIF ENDPROC /// PURPOSE: /// Creates debug widgets for the mission. PROC CREATE_DEBUG_WIDGETS() Franklin1Widgets = START_WIDGET_GROUP("Mission: Franklin1") ADD_WIDGET_BOOL("Print debug output", bPrintDebugOutput) ADD_WIDGET_BOOL("Allow HotSwap", bAllowHotSwap) START_WIDGET_GROUP("BMX Crew") ADD_WIDGET_FLOAT_SLIDER("fBMX0PlaybackSpeed", fBMX0PlabackSpeed, 0.0, 2.0, 0.05) ADD_WIDGET_FLOAT_SLIDER("fBMX1PlaybackSpeed", fBMX1PlabackSpeed, 0.0, 2.0, 0.05) ADD_WIDGET_FLOAT_SLIDER("fBMX2PlaybackSpeed", fBMX2PlabackSpeed, 0.0, 2.0, 0.05) ADD_WIDGET_FLOAT_SLIDER("fBMX0StartTime", fBMX0StartTime, 0.0, 30000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("fBMX1StartTime", fBMX1StartTime, 0.0, 30000.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("fBMX2StartTime", fBMX2StartTime, 0.0, 30000.0, 1.0) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Grove Street Shootout") ADD_WIDGET_BOOL("Render enemy blips", bRenderEnemyBlips) ADD_WIDGET_BOOL("Draw Lamar's path", bDrawLamarsPath) ADD_WIDGET_BOOL("Draw object names", bDrawObjectNames) START_WIDGET_GROUP("Front Left offset") ADD_WIDGET_VECTOR_SLIDER("Front Left offset", vFrontLeftOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Front Right offset") ADD_WIDGET_VECTOR_SLIDER("Front Right offset", vFrontRightOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Rear Left offset") ADD_WIDGET_VECTOR_SLIDER("Rear Left offset", vRearLeftOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Rear Right offset") ADD_WIDGET_VECTOR_SLIDER("Rear Right offset", vRearRightOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Front Left damage offset") ADD_WIDGET_VECTOR_SLIDER("Front Left damage offset", vFrontLeftDamageOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Front Right damage offset") ADD_WIDGET_VECTOR_SLIDER("Front Right damage offset", vFrontRightDamageOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Rear Left damage offset") ADD_WIDGET_VECTOR_SLIDER("Rear Left damage offset", vRearLeftDamageOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Rear Right damage offset") ADD_WIDGET_VECTOR_SLIDER("Rear Right damage offset", vRearRightDamageOffset, -5.0, 5.0, 0.05) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() START_WIDGET_GROUP("Gameplay camera positioning") ADD_WIDGET_BOOL("Print gameplay camera info", bPrintGameplayCameraInfo) ADD_WIDGET_BOOL("Position gameplay camera", bPositionGameplayCamera) ADD_WIDGET_FLOAT_SLIDER("Gameplay camera desired heading", fGameplayCameraDesiredHeading, -360.0, 360.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Gameplay camera desired pitch", fGameplayCameraDesiredPitch, -360.0, 360.0, 0.1) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Playback chase") ADD_WIDGET_BOOL("Start chase playback", bStartChasePlayback) ADD_WIDGET_BOOL("Stop chase playback", bStopChasePlayback) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Record chase") ADD_WIDGET_BOOL("Start when accelerate is pressed", bStartOnAccelerateToggle) ADD_WIDGET_VECTOR_SLIDER("Camera position", vPropCameraPosition, -2000, 2000, 1.0) ADD_WIDGET_VECTOR_SLIDER("Camera rotation", vPropCameraRotation, -180, 180, 1.0) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Water waves") ADD_WIDGET_FLOAT_SLIDER("Ocean wave amplitude", fOceanWaveAmplitude, 0.0, 10.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Min ocean wave amplitude", fOceanWaveMinAmplitude, 0.0, 20.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Max ocean wave amplitude", fOceanWaveMaxAmplitude, 0.0, 20.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Ocean noise min amplitude",fOceanNoiseMinAmplitude,0.0, 50.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Shore wave amplitude", fShoreWaveamplitude, 0.0, 20.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Min shore wave amplitude", fShoreWaveMinamplitude, 0.0, 20.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Max shore wave amplitude", fShoreWaveMaxamplitude, 0.0, 20.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Ripple disturb", fRippleDisturb, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Ripple bumpiness", fRippleBumpiness, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Min ripple bumpiness", fRippleMinBumpiness, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Max ripple bumpiness", fRippleMaxBumpiness, 0.0, 2.0, 0.01) ADD_WIDGET_FLOAT_SLIDER("Override strength", fOverrideStrength, 0.0, 1.0, 0.01) STOP_WIDGET_GROUP() START_WIDGET_GROUP("First Person Flashes") ADD_WIDGET_FLOAT_SLIDER("fTrevorEntryFlashPhase", fTrevorEntryFlashPhase, 0.0, 1.0, 0.01) ADD_WIDGET_INT_SLIDER("iLamarEntryFlashTime", iLamarEntryFlashTime, 0, 10000, 100) ADD_WIDGET_FLOAT_SLIDER("fFranklinEntryFlashPhase", fFranklinEntryFlashPhase, 0.0, 1.0, 0.01) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() SET_UBER_PARENT_WIDGET_GROUP(Franklin1Widgets) SET_LOCATES_HEADER_WIDGET_GROUP(Franklin1Widgets) ENDPROC /// PURPOSE: /// Deletes debug widgets for the mission. PROC DELETE_DEBUG_WIDGETS() IF DOES_WIDGET_GROUP_EXIST(Franklin1Widgets) DELETE_WIDGET_GROUP(Franklin1Widgets) ENDIF ENDPROC /// PURPOSE: /// Creates debug mission stage menu. PROC CREATE_DEBUG_MISSION_STAGE_MENU() SkipMenu[0].sTxtLabel = "CUT - INTRO - FRANKLIN_1_INT" SkipMenu[1].sTxtLabel = "DRIVE TO DEAL" SkipMenu[2].sTxtLabel = "CUT - DEAL - FRA_1_MCS_1" SkipMenu[3].sTxtLabel = "GROVE STREET SHOOTOUT" SkipMenu[4].sTxtLabel = "RUN TO SPEEDOPHILES" SkipMenu[5].sTxtLabel = "SPEEDOPHILE RIDE" SkipMenu[6].sTxtLabel = "LOSE COPS" SkipMenu[7].sTxtLabel = "CUT - DROPOFF LAMAR" SkipMenu[8].sTxtLabel = "CUT - DROPOFF TREVOR" SkipMenu[9].sTxtLabel = "CUT - DROPOFF FRANKLIN" SkipMenu[10].sTxtLabel = "END" SkipMenu[11].sTxtLabel = "DEBUG - PLAYBACK CHASE" SkipMenu[12].sTxtLabel = "DEBUG - RECORD CHASE" ENDPROC /// PURPOSE: /// Stops an active mocap cutscene and waits until it has finished. PROC STOP_CUTSCENE_FOR_DEBUG() IF IS_CUTSCENE_PLAYING() SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) STOP_CUTSCENE(TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //needs to be called to make sure all scripted systems work correctly when cutscene is skipped ENDIF WHILE NOT HAS_CUTSCENE_FINISHED() WAIT(0) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for the cutscene to finish.") #ENDIF ENDWHILE ENDPROC /// PURPOSE: /// Checks if any of the debug pass or fail keys has been pressed to force mission end. /// PARAMS: /// eStage - Mission stage variable /// eFailReason - Mission fail variable. PROC RUN_DEBUG_PASS_AND_FAIL_CHECK(MISSION_STAGES &eStage, MISSION_FAILS &eFailReason) IF IS_KEYBOARD_KEY_PRESSED (KEY_S) IF IS_CUTSCENE_PLAYING() STOP_CUTSCENE_FOR_DEBUG() ENDIF eStage = MISSION_STAGE_PASSED IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN_FOR_DEBUG(DEFAULT_FADE_TIME) ENDIF ENDIF IF IS_KEYBOARD_KEY_PRESSED (KEY_F) IF IS_CUTSCENE_PLAYING() STOP_CUTSCENE_FOR_DEBUG() ENDIF eStage = MISSION_STAGE_FAILED eFailReason = MISSION_FAIL_FORCE_FAIL IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN_FOR_DEBUG(DEFAULT_FADE_TIME) ENDIF ENDIF ENDPROC /// PURPOSE: /// Performs mission stage cleanup for specified stage. /// PARAMS: /// eStage - Mission stage to perform cleanup for. PROC RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG(MISSION_STAGES eStage) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting mission stage cleanup.") #ENDIF REMOVE_CUTSCENE() KILL_ANY_CONVERSATION() KILL_PHONE_CONVERSATION() HANG_UP_AND_PUT_AWAY_PHONE(TRUE) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() //Chop cam specific cleanup //enable player ped ragdoll when player's ragdoll was disabled during combat IF ( bPlayerInCombatWhenChopCamActive = TRUE ) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) SET_PED_CAN_RAGDOLL(PLAYER_PED_ID(), TRUE) ENDIF IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF bPlayerInCombatWhenChopCamActive = FALSE ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE) ENDIF //remove mission peds IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN CLEANUP_PED(psTrevor, TRUE) ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR CLEANUP_PED(psFranklin, TRUE) ENDIF CLEANUP_PED(psLamar, TRUE) CLEANUP_PED(psChop, TRUE) CLEANUP_PED_GROUP(psFilmCrew, TRUE) bLamarsOutfitSet = FALSE //reset Lamar's outfit flag bLamarsBagEquipped = FALSE REMOVE_ANIM_DICT("missfra1") REMOVE_ANIM_DICT("missfra1leadinoutmcs_1") REMOVE_ANIM_DICT(GET_CHOP_IN_VAN_ANIM_DICT()) REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@base") REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@enter") REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@idle_a") SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) //remove vehciles CLEANUP_VEHICLE(vsVan, TRUE) CLEANUP_VEHICLE(vsSpeedophiles[0], TRUE) CLEANUP_VEHICLE(vsSpeedophiles[1], TRUE) CLEANUP_VEHICLE(vsSpeedophiles[2], TRUE) CLEANUP_VEHICLE(vsGhosts[0], TRUE) CLEANUP_VEHICLE(vsGhosts[1], TRUE) CLEANUP_VEHICLE(vsGhosts[2], TRUE) IF DOES_ENTITY_EXIST(sMissionTrain.VehicleIndex) IF NOT IS_ENTITY_DEAD(sMissionTrain.VehicleIndex) DELETE_MISSION_TRAIN(sMissionTrain.VehicleIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Deleted mission train.") #ENDIF ENDIF ENDIF //remove blips IF DOES_BLIP_EXIST(psTrevor.BlipIndex) REMOVE_BLIP(psTrevor.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psFranklin.BlipIndex) REMOVE_BLIP(psFranklin.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psLamar.BlipIndex) REMOVE_BLIP(psLamar.BlipIndex) ENDIF //reset this flag for skips bGameplayCameraSet = FALSE //clear locates header data CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) //remove waypoint recordings REMOVE_WAYPOINT_RECORDING("fra1_cflee") bFirstEnemyGroupInCombat = FALSE bFirstEnemyGroupInitialised = FALSE CLEANUP_MISSION_OBJECT(osBag, TRUE) CLEANUP_MISSION_OBJECT(osLight, TRUE) CLEANUP_MISSION_OBJECT(osCamera, TRUE) CLEANUP_MISSION_OBJECT(osTrowel, TRUE) CLEANUP_MISSION_OBJECT(osBoombox, TRUE) CLEANUP_MISSION_OBJECT(osCokeBlock, TRUE) CLEANUP_MISSION_OBJECT(osMicrophone, TRUE) CLEANUP_PED_GROUP(psBmxCrew) CLEANUP_VEHICLE_GROUP(vsBmxBikes, TRUE) SET_MODEL_AS_NO_LONGER_NEEDED(BMX) SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_FAMFOR_01) SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_FAMCA_01) SET_MODEL_AS_NO_LONGER_NEEDED(mnBalla) CLEANUP_VEHICLE(vsEnemyLeftChaseCar, TRUE) CLEANUP_VEHICLE_GROUP(vsGetawayCars, TRUE) //cleanup enemy peds CLEANUP_ENEMY_GROUP(esCarCuldeSacLeft, TRUE) CLEANUP_ENEMY_GROUP(esCarCuldeSacRight, TRUE) CLEANUP_ENEMY_GROUP(esCarStreetLeft, TRUE) CLEANUP_ENEMY_GROUP(esCarIntersection1Left, TRUE) CLEANUP_ENEMY_GROUP(esCarIntersection2Left, TRUE) CLEANUP_ENEMY_GROUP(esCarIntersection1Right, TRUE) CLEANUP_ENEMY_GROUP(esCarStreetRight, TRUE) CLEANUP_ENEMY_GROUP(esCarDriveway, TRUE) CLEANUP_ENEMY_GROUP(esGroup1, TRUE) CLEANUP_ENEMY_GROUP(esGroup2, TRUE) CLEANUP_ENEMY_GROUP(esGroup3, TRUE) CLEANUP_ENEMY_GROUP(esGroup4, TRUE) CLEANUP_ENEMY_GROUP(esGroup5, TRUE) CLEANUP_ENEMY_GROUP(esGroup6, TRUE) CLEANUP_ENEMY_GROUP(esGroup7, TRUE) CLEANUP_ENEMY_GROUP(esGroup8, TRUE) CLEANUP_ENEMY_GROUP(esGroup9, TRUE) CLEANUP_ENEMY_GROUP(esHouseEnemies, TRUE) CLEANUP_ENEMY_GROUP(esPorchEnemies, TRUE) CLEANUP_ENEMY_GROUP(esLeftChaseEnemies, TRUE) CLEANUP_ENEMY_GROUP(esPoliceCarEndReinforcements, TRUE) CLEANUP_PED_GROUP(psBoatCops, TRUE) CLEANUP_PED_GROUP(psRiverCopCar0Cops, TRUE) CLEANUP_PED_GROUP(psRiverCopCar1Cops, TRUE) CLEANUP_PED_GROUP(psRiverCopCar2Cops, TRUE) CLEANUP_PED_GROUP(psRiverCopCar3Cops, TRUE) CLEANUP_PED_GROUP(psRiverCopCar4Cops, TRUE) CLEANUP_PED_GROUP(psStreetCopCar1Cops, TRUE) CLEANUP_PED_GROUP(psStreetCopCar2Cops, TRUE) CLEANUP_PED_GROUP(psStreetCopCar3Cops, TRUE) CLEANUP_PED_GROUP(psHillCopCar0Cops, TRUE) SET_ALL_EVENT_FLAGS(Events, FALSE) CLEANUP_SPAWNPOINTS(EnemySpawnpoints, TRUE) CLEANUP_SPAWNPOINTS(EnemySidekickSpawnpoints, TRUE) //cleanup enemy vehicles CLEANUP_VEHICLE_GROUP(vsEnemyCars, TRUE) CLEANUP_VEHICLE_GROUP(vsParkedVehicles, TRUE) CLEANUP_VEHICLE_GROUP(vsStreetCopCars, TRUE) CLEANUP_VEHICLE_GROUP(vsRiverCopCars, TRUE) CLEANUP_VEHICLE_GROUP(vsHillCopCars, TRUE) CLEANUP_PED_GROUP(psSwat, TRUE) CLEANUP_VEHICLE(vsPoliceHeli, TRUE) CLEANUP_VEHICLE(vsCopBoat, TRUE) CLEANUP_ENEMY_GROUP(esSidelineEnemies, TRUE) STOP_AUDIO_SCENES() IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyLeftChaseCar.VehicleIndex) ENDIF ENDIF CLEANUP_VEHICLE(vsEnemyLeftChaseCar, TRUE) //reset stats for headshots RESET_MISSION_STATS_ENTITY_WATCH() REMOVE_COVERPOINTS(csCoverpoints, bCoverpointsCreated) CLEANUP_MISSION_OBJECT_GROUP(osDumpsters, TRUE) //cleanup sound effects STOP_SOUND(iPhotoShootSoundID) RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_CAMERAS") RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_GIRLS") IF DOES_CAM_EXIST(ScriptedCamera) DESTROY_CAM(ScriptedCamera) ENDIF RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) REMOVE_IPL("SC1_27_Cut") SWITCH eStage CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE CLEANUP_UBER_PLAYBACK(TRUE) BREAK ENDSWITCH TRIGGER_MUSIC_EVENT("FRA1_MISSION_FAIL") CANCEL_MUSIC_EVENT("FRA1_SPEED") REMOVE_DISPATCH_SPAWN_BLOCKING_AREA(iArea1) REMOVE_DISPATCH_SPAWN_BLOCKING_AREA(iArea2) REMOVE_VEHICLE_COMBAT_AVOIDANCE_AREA(iVehCombatArea1) REMOVE_VEHICLE_COMBAT_AVOIDANCE_AREA(iVehCombatArea2) REMOVE_VEHICLE_ASSET(GET_NPC_VEH_MODEL(CHAR_LAMAR)) OVERRIDE_WATER_SETTINGS(FALSE, 0.1) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission stage cleanup.") #ENDIF ENDPROC /// PURPOSE: /// Controls running the debug mission stage menu. /// PARAMS: /// iSelectedStage - Variable that stores int value returned from the debug mission stage menu. /// eStage - Mission stage variable. /// bSkipActive - Skip flag. PROC RUN_DEBUG_MISSION_STAGE_MENU(INT &iSelectedStage, MISSION_STAGES &eStage, BOOL &bSkipActive, BOOL &bResetStage) IF LAUNCH_MISSION_STAGE_MENU(SkipMenu, iSelectedStage, ENUM_TO_INT(eStage), FALSE, "FRANKLIN 1") DO_SCREEN_FADE_OUT_FOR_DEBUG(FADE_TIME) STOP_CUTSCENE_FOR_DEBUG() CLEAR_HELP() CLEAR_PRINTS() CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG(eStage) eStage = INT_TO_ENUM(MISSION_STAGES, iSelectedStage) bResetStage = FALSE bSkipActive = TRUE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage changed to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " via mission stage menu.") RESET_MISSION_FLAGS() ENDIF ENDPROC PROC RUN_DEBUG_SKIPS(MISSION_STAGES &eStage, BOOL &bSkipActive, BOOL &bResetStage) INT iCurrentStage = ENUM_TO_INT(eStage) IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J) IF eStage <> MISSION_STAGE_END DO_SCREEN_FADE_OUT_FOR_DEBUG(FADE_TIME) STOP_CUTSCENE_FOR_DEBUG() CLEAR_HELP() CLEAR_PRINTS() CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG(eStage) iCurrentStage++ eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage) bResetStage = FALSE bSkipActive = TRUE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage changed to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " via J skip.") RESET_MISSION_FLAGS() ENDIF ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P) IF eStage <> MISSION_STAGE_CUTSCENE_INTRO DO_SCREEN_FADE_OUT_FOR_DEBUG(FADE_TIME) STOP_CUTSCENE_FOR_DEBUG() CLEAR_HELP() CLEAR_PRINTS() CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG(eStage) IF ( eStage <> MISSION_STAGE_CUTSCENE_INTRO ) IF ( bResetStage = FALSE ) iCurrentStage-- eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage) ELIF ( bResetStage = TRUE ) eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage) ENDIF ELIF ( eStage = MISSION_STAGE_CUTSCENE_INTRO ) eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage) ENDIF bResetStage = FALSE bSkipActive = TRUE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " reset via P skip.") RESET_MISSION_FLAGS() ENDIF ENDIF ENDPROC PROC RUN_DEBUG_WIDGETS(MISSION_STAGES eStage) INT i = 0 IF ( bPrintGameplayCameraInfo = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Gameplay camera heading ", GET_GAMEPLAY_CAM_RELATIVE_HEADING(), ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Gameplay camera pitch ", GET_GAMEPLAY_CAM_RELATIVE_PITCH(), ".") bPrintGameplayCameraInfo = FALSE ENDIF IF ( bPositionGameplayCamera = TRUE ) SET_GAMEPLAY_CAM_RELATIVE_HEADING(fGameplayCameraDesiredHeading - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(fGameplayCameraDesiredPitch) //bPositionGameplayCamera = FALSE ENDIF SWITCH eStage CASE MISSION_STAGE_DRIVE_TO_DEAL IF IS_VEHICLE_DRIVEABLE(vsBmxBikes[0].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsBmxBikes[0].VehicleIndex) #IF IS_DEBUG_BUILD SET_VEHICLE_NAME_DEBUG(vsBmxBikes[0].VehicleIndex, GET_STRING_FROM_FLOAT(GET_TIME_POSITION_IN_RECORDING(vsBmxBikes[0].VehicleIndex))) #ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsBmxBikes[1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsBmxBikes[1].VehicleIndex) #IF IS_DEBUG_BUILD SET_VEHICLE_NAME_DEBUG(vsBmxBikes[1].VehicleIndex, GET_STRING_FROM_FLOAT(GET_TIME_POSITION_IN_RECORDING(vsBmxBikes[1].VehicleIndex))) #ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsBmxBikes[2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsBmxBikes[2].VehicleIndex) #IF IS_DEBUG_BUILD SET_VEHICLE_NAME_DEBUG(vsBmxBikes[2].VehicleIndex, GET_STRING_FROM_FLOAT(GET_TIME_POSITION_IN_RECORDING(vsBmxBikes[2].VehicleIndex))) #ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DEAL CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT IF ( bDrawDebugCoverpoints = TRUE ) AND ( bDrawDebugLinesAndSpheres = TRUE) FOR i = 0 TO ( COUNT_OF(csCoverpoints) - 1 ) IF ( csCoverpoints[i].bActive = TRUE ) //draw non stationary coverpoints IF ( csCoverpoints[i].bStationary = FALSE ) DRAW_DEBUG_SPHERE(csCoverpoints[i].vPosition, 0.25, 0, 255, 0) //draw stationary coverpoints ELIF ( csCoverpoints[i].bStationary = TRUE ) DRAW_DEBUG_SPHERE(csCoverpoints[i].vPosition, 0.25, 0, 255, 255) ENDIF DRAW_DEBUG_TEXT(GET_STRING_FROM_INT(i), << csCoverpoints[i].vPosition.x, csCoverpoints[i].vPosition.y, csCoverpoints[i].vPosition.z + 0.25>>) ELSE DRAW_DEBUG_SPHERE(csCoverpoints[i].vPosition, 0.25, 255, 0, 0) DRAW_DEBUG_TEXT(GET_STRING_FROM_INT(i), << csCoverpoints[i].vPosition.x, csCoverpoints[i].vPosition.y, csCoverpoints[i].vPosition.z + 0.25>>) ENDIF ENDFOR ENDIF IF ( bDrawLamarsPath = TRUE ) FOR i = 0 TO ( COUNT_OF(LamarShootoutPositions) - 1 ) DRAW_DEBUG_SPHERE(LamarShootoutPositions[i], 0.175, 0, 0, 255) DRAW_DEBUG_TEXT(GET_STRING_FROM_INT(i), <>) IF ( i >= 1 ) DRAW_DEBUG_LINE(<< LamarShootoutPositions[i].X, LamarShootoutPositions[i].Y, LamarShootoutPositions[i].Z + 0.15 >>, << LamarShootoutPositions[i - 1].X, LamarShootoutPositions[i - 1].Y, LamarShootoutPositions[i - 1].Z + 0.15 >>, 0, 0, 255) ENDIF ENDFOR ENDIF IF ( bDrawObjectNames = TRUE ) FOR i = 0 TO ( COUNT_OF(osDumpsters) - 1 ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(osDumpsters[i].ObjectIndex, GET_STRING_FROM_INT(i), 1.25) ENDFOR ENDIF BREAK CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE IF ( bStartChasePlayback = TRUE ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[0].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[0].VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[0].iRecordingNumber, sVehicleRecordingsFile) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[0].VehicleIndex, vsSpeedophiles[0].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[1].VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[1].iRecordingNumber, sVehicleRecordingsFile) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[1].VehicleIndex, vsSpeedophiles[1].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF bStartChasePlayback = FALSE ENDIF IF ( bStopChasePlayback = TRUE ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[0].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[0].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[0].VehicleIndex) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[1].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[1].VehicleIndex) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[2].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[2].VehicleIndex) ENDIF ENDIF bStopChasePlayback = FALSE ENDIF BREAK ENDSWITCH ENDPROC PROC RUN_DEBUG_INFORMATION_DISPLAY() IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_NUMPAD4) IF ( bDrawDebugLinesAndSpheres = FALSE) SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) bDrawDebugLinesAndSpheres = TRUE ELSE SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE) bDrawDebugLinesAndSpheres = FALSE ENDIF ENDIF IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_NUMPAD5) IF ( bDrawDebugStates = FALSE) bDrawDebugStates = TRUE ELSE bDrawDebugStates = FALSE ENDIF ENDIF IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_NUMPAD6) IF ( bDrawDebugCoverpoints = FALSE) bDrawDebugCoverpoints = TRUE ELSE bDrawDebugCoverpoints = FALSE ENDIF ENDIF IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_NUMPAD7) IF ( bDrawDebugVehicleDamageInfo = FALSE) bDrawDebugVehicleDamageInfo = TRUE ELSE bDrawDebugVehicleDamageInfo = FALSE ENDIF ENDIF ENDPROC #ENDIF //|===================== END DEBUG VARIABLES, PROCEDURES & FUNCTIONS =====================| PROC GO_TO_PED_STATE(PED_STRUCT &ped, PED_STATES eState) ped.bHasTask = FALSE ped.eState = eState #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(ped.sDebugName) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Sending ped with debug name ", ped.sDebugName, " to state ", GET_PED_STATE_NAME_FOR_DEBUG(eState), ".") ENDIF #ENDIF ENDPROC FUNC BOOL IS_PED_IN_PED_STATE(PED_STRUCT &ped, PED_STATES ePedState) IF DOES_ENTITY_EXIST(ped.PedIndex) IF NOT IS_ENTITY_DEAD(ped.PedIndex) IF ( ped.eState = ePedState ) RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC PROC RUN_HOTSWAP(SELECTOR_PED_STRUCT &SelectorPed, SELECTOR_CAM_STRUCT &SelectorCamera) IF NOT SelectorCamera.bRun IF UPDATE_SELECTOR_HUD(SelectorPed) //if any selector ped, other than multiplayer selector ped was selected IF NOT HAS_SELECTOR_PED_BEEN_SELECTED(SelectorPed, SELECTOR_PED_MULTIPLAYER) //continue with hot swap if the new selector ped is different than Michael (in this case Chop) //and if the new selector ped is different than current selector ped //and if the chop view cam is in the disabled state (gameplay camera is on the player) IF SelectorPed.eNewSelectorPed <> SELECTOR_PED_MICHAEL IF SelectorPed.eNewSelectorPed <> GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(GET_CURRENT_PLAYER_PED_ENUM()) SelectorCamera.pedTo = SelectorPed.pedID[SelectorPed.eNewSelectorPed] SelectorCamera.bRun = TRUE CLEAR_HELP() CLEAR_PRINTS() ENDIF ENDIF ENDIF ENDIF ELSE IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_SHORT_RANGE(SelectorCamera) IF SelectorCamera.bOKToSwitchPed = TRUE IF NOT SelectorCamera.bPedSwitched IF TAKE_CONTROL_OF_SELECTOR_PED(SelectorPed, TRUE, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": HOTSWAP - Performing hotswap to ", GET_MODEL_NAME_FOR_DEBUG(GET_PLAYER_PED_MODEL(GET_CURRENT_PLAYER_PED_ENUM())), ".") #ENDIF SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN //player hot swapped to Franklin //remove blip for Franklin (current player ped) IF DOES_BLIP_EXIST(psFranklin.BlipIndex) REMOVE_BLIP(psFranklin.BlipIndex) ENDIF #IF IS_DEBUG_BUILD psTrevor.sDebugName = "Trevor" #ENDIF //remove blip for speedophile Franklin is using IF ( psFranklin.ePedVehicle <> MAX_SPEEDOPHILES ) IF DOES_BLIP_EXIST(vsSpeedophiles[psFranklin.ePedVehicle].BlipIndex) REMOVE_BLIP(vsSpeedophiles[psFranklin.ePedVehicle].BlipIndex) ENDIF ENDIF //set Trevor's proprties after hot swap SET_PED_PROPERTIES_AFTER_HOTSWAP(psTrevor, SelectorPed.pedID[SelectorPed.ePreviousSelectorPed], TRUE, RELGROUPHASH_PLAYER) SET_PED_WEAPON_AND_AMMO_AFTER_HOTSWAP(psTrevor.PedIndex, WEAPONTYPE_PUMPSHOTGUN) RESET_PED_PROPERTIES_AFTER_HOTSWAP(GET_PED_INDEX(CHAR_FRANKLIN)) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(GET_PED_INDEX(CHAR_TREVOR), TRUE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(GET_PED_INDEX(CHAR_FRANKLIN), FALSE) FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = FALSE //send other player ped to waiting for task state, use Trevor's struct GO_TO_PED_STATE(psTrevor, PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH) SWITCH eMissionStage //mission stage specific settings CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT //weapon and cover reset SET_PED_COVER_PROPERTIES(GET_PED_INDEX(CHAR_TREVOR), TRUE, FALSE, FALSE, FALSE) SET_PED_COVER_PROPERTIES(GET_PED_INDEX(CHAR_FRANKLIN), TRUE, FALSE, FALSE, FALSE) BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE //modify speedophiles top speed values IF ( psFranklin.ePedVehicle <> MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 0.0) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, -15.0) ENDIF ENDIF IF ( psTrevor.ePedVehicle <> MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 0.0) ENDIF ENDIF BREAK ENDSWITCH BREAK CASE CHAR_TREVOR //player hot swapped to Trevor //remove blip for Trevor (current player ped) IF DOES_BLIP_EXIST(psTrevor.BlipIndex) REMOVE_BLIP(psTrevor.BlipIndex) ENDIF #IF IS_DEBUG_BUILD psTrevor.sDebugName = "Franklin" #ENDIF //remove blip for speedophile Trevor is using IF ( psTrevor.ePedVehicle <> MAX_SPEEDOPHILES ) IF DOES_BLIP_EXIST(vsSpeedophiles[psTrevor.ePedVehicle].BlipIndex) REMOVE_BLIP(vsSpeedophiles[psTrevor.ePedVehicle].BlipIndex) ENDIF ENDIF SET_PED_PROPERTIES_AFTER_HOTSWAP(psFranklin, SelectorPed.pedID[SelectorPed.ePreviousSelectorPed], TRUE, RELGROUPHASH_PLAYER) SET_PED_WEAPON_AND_AMMO_AFTER_HOTSWAP(psFranklin.PedIndex, WEAPONTYPE_SMG) RESET_PED_PROPERTIES_AFTER_HOTSWAP(GET_PED_INDEX(CHAR_TREVOR)) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(GET_PED_INDEX(CHAR_TREVOR), FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) FailFlags[MISSION_FAIL_TREVOR_DEAD] = FALSE FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE //send other player ped to waiting for task state, use Trevor's struct GO_TO_PED_STATE(psTrevor, PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH) SWITCH eMissionStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT //weapon and cover reset SET_PED_COVER_PROPERTIES(GET_PED_INDEX(CHAR_TREVOR), TRUE, FALSE, FALSE, FALSE) SET_PED_COVER_PROPERTIES(GET_PED_INDEX(CHAR_FRANKLIN), TRUE, FALSE, FALSE, FALSE) BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE //modify speedophiles top speed values IF ( psTrevor.ePedVehicle <> MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 0.0) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, -15.0) ENDIF ENDIF IF ( psFranklin.ePedVehicle <> MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 0.0) ENDIF ENDIF BREAK ENDSWITCH BREAK ENDSWITCH IF ( eMissionStage = MISSION_STAGE_GROVE_STREET_SHOOTOUT ) OR ( eMissionStage = MISSION_STAGE_RUN_TO_SPEEDOPHILES ) //reset this flag so that on hotswap if player runs out of the locate when buddies are waiting //the buddy that will run into the locate can go into combat and wait for the player ped again psTrevor.bWaitingForPlayer = FALSE IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_ENTER_VEHICLE) = PERFORMING_TASK IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID()) AND NOT IS_ENTITY_ATTACHED_TO_ANY_VEHICLE(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("CMN_TABIL_RET") //handle displaying Trevor's special IF ( eMissionStage = MISSION_STAGE_GROVE_STREET_SHOOTOUT ) //ability help text during shootout IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR //for the first time player switches IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) PRINT_HELP("CMN_TABIL_RET_KM", DEFAULT_HELP_TEXT_TIME) //to Trevor, also give 10% charge ELSE PRINT_HELP("CMN_TABIL_RET", DEFAULT_HELP_TEXT_TIME) //to Trevor, also give 10% charge ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) //to special ability SPECIAL_ABILITY_CHARGE_LARGE(PLAYER_ID(), TRUE, TRUE) ENDIF SET_LABEL_AS_TRIGGERED("CMN_TABIL_RET", TRUE) ENDIF ENDIF ENDIF IF ( bBuddyPinnedDown = TRUE ) SET_SELECTOR_PED_DAMAGED(SelectorPed, SELECTOR_PED_TREVOR, FALSE) SET_SELECTOR_PED_DAMAGED(SelectorPed, SELECTOR_PED_FRANKLIN, FALSE) bBuddyPinnedDownSwitched = TRUE ENDIF INFORM_MISSION_STATS_OF_INCREMENT(FRA1_SWITCHES) SelectorCamera.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC //|======================= ASSET REQUESTING PROCEDURES & FUNCTIONS =======================| /// PURPOSE: /// Adds a model to model request array. /// PARAMS: /// ModelName - Model name being requested. /// array - MODEL_NAMES array to add the requested model name to. /// iArrayLength - Maximum length of the array. /// iModelsAlreadyRequested - Number of models already requested in this array. PROC ADD_MODEL_REQUEST_TO_ARRAY(MODEL_NAMES ModelName, MODEL_NAMES &array[], INT iArrayLength, INT &iModelsAlreadyRequested) INT i = 0 BOOL bModelAlreadyRequested = FALSE IF ( iModelsAlreadyRequested >= 0 ) IF ( iModelsAlreadyRequested <= ( iArrayLength - 1 ) ) //loop through the array (from 0 to number of models already requested) //to see if the array already contains the model name being requested //modify the boolean flag if the model was found in array, otherwise leave the flag unchanged FOR i = 0 TO ( iModelsAlreadyRequested ) IF ( array[i] = ModelName ) bModelAlreadyRequested = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested model at index ", i, " ", GET_MODEL_NAME_FOR_DEBUG(ModelName), " is already in model array.") #ENDIF ENDIF ENDFOR IF ( bModelAlreadyRequested = FALSE ) REQUEST_MODEL(ModelName) //iModelsAlreadyRequested will be the model array index of the model being requested array[iModelsAlreadyRequested] = ModelName iModelsAlreadyRequested++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested model ", GET_MODEL_NAME_FOR_DEBUG(ModelName), " and added to model array.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Number of models requested: ", iModelsAlreadyRequested, ".") #ENDIF ENDIF ELSE SCRIPT_ASSERT("Number of requested models is greater than the length of the model array.") ENDIF ELSE SCRIPT_ASSERT("Number of requested models is less than 0.") ENDIF ENDPROC /// PURPOSE: /// Checks if all requested models from model array are loaded into memory. /// PARAMS: /// array - MODEL_NAMES array holding the models. /// iModelsAlreadyRequested - Number of already requested models. Should be greated than 0, since 0 means no models have been requested. /// RETURNS: /// TRUE if all models from model array are loaded into memory. FALSE if otherwise. FUNC BOOL ARE_REQUESTED_MODELS_LOADED(MODEL_NAMES &array[], INT &iModelsAlreadyRequested) INT i = 0 IF ( iModelsAlreadyRequested > 0 ) FOR i = 0 TO ( iModelsAlreadyRequested - 1 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model in array[", i, "]: ", GET_MODEL_NAME_FOR_DEBUG(array[i]), ".") #ENDIF IF NOT HAS_MODEL_LOADED(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), " is loading.") #ENDIF //if the model is not loaded keep requesting it REQUEST_MODEL(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), ".") #ENDIF RETURN FALSE ENDIF ENDFOR ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Models from model array loaded. Number of models loaded: ", iModelsAlreadyRequested, ".") #ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Cleans model array from requested models. /// PARAMS: /// array - MODEL_NAMES array. /// iModelsAlreadyRequested - Number of already requested models. Should be greated than 0, since 0 means no models have been requested. PROC CLEANUP_MODEL_ARRAY(MODEL_NAMES &array[], INT &iModelsAlreadyRequested) INT i = 0 IF ( iModelsAlreadyRequested > 0 ) FOR i = 0 TO ( iModelsAlreadyRequested - 1 ) IF array[i] <> DUMMY_MODEL_FOR_SCRIPT SET_MODEL_AS_NO_LONGER_NEEDED(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), " cleaned up from model array by setting it as no longer needed.") #ENDIF array[i] = DUMMY_MODEL_FOR_SCRIPT ENDIF ENDFOR ENDIF iModelsAlreadyRequested = 0 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model array cleaned up. Number of requested models set to 0.") #ENDIF ENDPROC /// PURPOSE: /// Checks if two strings are equal. /// PARAMS: /// sString1 - First string. /// sString2 - Second string. /// RETURNS: /// TRUE if strings are equal, FALSE if otherwise or if any of the strings is empty or NULL. FUNC BOOL IS_STRING_EQUAL_TO_STRING(STRING sString1, STRING sString2) IF NOT Is_String_Null_Or_Empty(sString1) AND NOT Is_String_Null_Or_Empty(sString2) RETURN ARE_STRINGS_EQUAL(sString1, sString2) ELSE RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// Adds animation dictionary to animation request array. /// PARAMS: /// sAnimName - Name of the animation dictionary to request. /// array - STRING array containing requested animations. /// iArrayLength - Maximum length of the array /// iAnimationsAlreadyRequested - Number of animations already requested in this array. PROC ADD_ANIMATION_REQUEST_TO_ARRAY(STRING sAnimName, STRING &array[], INT iArrayLength, INT &iAnimationsAlreadyRequested) INT i = 0 BOOL bAnimationRequested IF ( iAnimationsAlreadyRequested >= 0 ) IF ( iAnimationsAlreadyRequested <= (iArrayLength - 1 ) ) FOR i = 0 TO ( iAnimationsAlreadyRequested ) IF IS_STRING_EQUAL_TO_STRING(sAnimName, array[i]) bAnimationRequested = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested animation ", sAnimName, " is already in animation array.") #ENDIF ENDIF ENDFOR IF ( bAnimationRequested = FALSE ) REQUEST_ANIM_DICT(sAnimName) array[iAnimationsAlreadyRequested] = sAnimName iAnimationsAlreadyRequested++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested animation ", sAnimName, " and added to animation array.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Number of animations requested: ", iAnimationsAlreadyRequested, ".") #ENDIF ENDIF ELSE SCRIPT_ASSERT("Number of requested animations is greater than the length of the animation array.") ENDIF ELSE SCRIPT_ASSERT("Number of requested animations is less than 0.") ENDIF ENDPROC /// PURPOSE: /// Checks if all requested animations are loaded into memory. /// PARAMS: /// array - STRING array containing requested animations. /// iAnimationsAlreadyRequested - Number of animations already requested in this array. /// RETURNS: /// TRUE if all requested animations from animation array are loaded into memory. FALSE if otherwise. FUNC BOOL ARE_REQUESTED_ANIMATIONS_LOADED(STRING &array[], INT &iAnimationsAlreadyRequested) INT i = 0 IF ( iAnimationsAlreadyRequested > 0 ) FOR i = 0 TO ( iAnimationsAlreadyRequested - 1 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary in array[", i, "]: ", array[i], ".") #ENDIF IF NOT HAS_ANIM_DICT_LOADED(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary ", array[i], " is loading.") #ENDIF //if the animation dictionary is not loaded keep requesting it REQUEST_ANIM_DICT(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting animation dictionary ", array[i], ".") #ENDIF RETURN FALSE ENDIF ENDFOR ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animations from animation array loaded. Number of animations loaded: ", iAnimationsAlreadyRequested, ".") #ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Cleans animation array from requested animations. /// PARAMS: /// array - STRING array of animations to clean. /// iAnimationsAlreadyRequested - Number of animations already requested in this array. PROC CLEANUP_ANIMATION_ARRAY(STRING &array[], INT &iAnimationsAlreadyRequested) INT i = 0 STRING sNull = NULL IF ( iAnimationsAlreadyRequested > 0 ) FOR i = 0 TO ( iAnimationsAlreadyRequested - 1 ) //brute force remove animation dictionary from memory REMOVE_ANIM_DICT(array[i]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary ", array[i], " removed from memory and cleaned up from animation array.") #ENDIF array[i] = sNull ENDFOR ENDIF iAnimationsAlreadyRequested = 0 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation array cleaned up. Number of requested animations set to 0.") #ENDIF ENDPROC /// PURPOSE: /// Adds a car recording number to recording request array. /// PARAMS: /// iRecording - Recording number being requested. /// sFile - Name of the file containing the car recording. /// array - INT arry to add the requested recording number to. /// iArrayLength - Maximum length of the array /// iRecordingsAlreadyRequested - Number of recordings already requested in this array. PROC ADD_CARREC_REQUEST_TO_ARRAY(INT iRecording, STRING sFile, INT &array[], INT iArrayLength, INT &iRecordingsAlreadyRequested) INT i = 0 BOOL bRecordingRequested = FALSE IF ( iRecordingsAlreadyRequested >= 0 ) IF ( iRecordingsAlreadyRequested <= ( iArrayLength - 1 ) ) FOR i = 0 TO ( iRecordingsAlreadyRequested ) IF array[i] = iRecording bRecordingRequested = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested car recording ", iRecording, " is already in recording array.") #ENDIF ENDIF ENDFOR IF ( bRecordingRequested = FALSE ) REQUEST_VEHICLE_RECORDING(iRecording, sFile) array[iRecordingsAlreadyRequested] = iRecording iRecordingsAlreadyRequested++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested car recording ", iRecording, " and added to recording array.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Number of car recordings requested: ", iRecordingsAlreadyRequested, ".") #ENDIF ENDIF ELSE SCRIPT_ASSERT("Number of requested recordings is greater than the length of the recording array.") ENDIF ELSE SCRIPT_ASSERT("Number of requested recordings is less than 0.") ENDIF ENDPROC /// PURPOSE: /// Checks if all requested car recordings are loaded into memory. /// PARAMS: /// sFile - File name of the car recording file. /// array - INT array holding the recording numbers. /// iRecordingsAlreadyRequested - Number of already requested recordings. Should be greated than 0, since 0 means no recordings have been requested. /// RETURNS: /// TRUE if all recordings from recording array are loaded into memory. FALSE if otherwise. FUNC BOOL ARE_REQUESTED_CARRECS_LOADED(STRING sFile, INT &array[], INT &iRecordingsAlreadyRequested) INT i = 0 IF ( iRecordingsAlreadyRequested > 0 ) FOR i = 0 TO ( iRecordingsAlreadyRequested - 1 ) IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(array[i], sFile) #IF IS_DEBUG_BUILD IF DOES_VEHICLE_RECORDING_FILE_EXIST(array[i], sFile) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Car recording ", array[i], " exists.") ELSE PRINTLN(GET_THIS_SCRIPT_NAME(), ": Car recording ", array[i], " does not exist.") ENDIF #ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Car recording ", array[i], " is loading.") #ENDIF //if the vehicle recording is not loaded keep requesting it REQUEST_VEHICLE_RECORDING(array[i], sFile) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting vehicle recording ", array[i], ".") #ENDIF RETURN FALSE ENDIF ENDFOR ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Car recordings from recording array loaded. Number of car recordings loaded: ", iRecordingsAlreadyRequested, ".") #ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Cleans recording array from requested recordings. /// PARAMS: /// sFile - File name of the car recording file. /// array - INT array holding the recording numbers. /// iRecordingsAlreadyRequested - Number of already requested recordings. Should be greated than 0, since 0 means no recordings have been requested. PROC CLEANUP_CARREC_ARRAY(STRING sFile, INT &array[], INT &iRecordingsAlreadyRequested) INT i = 0 IF ( iRecordingsAlreadyRequested > 0 ) FOR i = 0 TO ( iRecordingsAlreadyRequested - 1 ) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(array[i], sFile) REMOVE_VEHICLE_RECORDING(array[i], sFile) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Car recording ", array[i], " cleaned up from recording array.") #ENDIF array[i] = 0 ENDIF ENDFOR ENDIF iRecordingsAlreadyRequested = 0 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Recording array cleaned up. Number of requested car recordings set to 0.") #ENDIF ENDPROC //|===================== END ASSET REQUESTING PROCEDURES & FUNCTIONS =====================| //|========================== MISSION STAGE LOADINGS PROCEDURES ==========================| /// PURPOSE: /// Sets mission stage enum for replay. /// PARAMS: /// eStage - Mission stage enum variable. /// iValue - Mid-mission replay value returned by the script when replaying the mission. PROC SET_MISSION_STAGE_FOR_REPLAY(MISSION_STAGES &eStage, INT iValue) IF iValue = ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_DEAL) eStage = MISSION_STAGE_DRIVE_TO_DEAL ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_GROVE_STREET_SHOOTOUT) eStage = MISSION_STAGE_GROVE_STREET_SHOOTOUT ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_RUN_TO_SPEEDOPHILES) eStage = MISSION_STAGE_RUN_TO_SPEEDOPHILES ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_SPEEDOPHILE_RIDE) eStage = MISSION_STAGE_SPEEDOPHILE_RIDE ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_LOSE_COPS) eStage = MISSION_STAGE_LOSE_COPS ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission is being replayed at stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF ENDPROC /// PURPOSE: /// Handles cleaning up when mission ends. PROC MISSION_CLEANUP() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting mission cleanup.") DELETE_DEBUG_WIDGETS() #ENDIF CLEAR_PRINTS() CLEAR_HELP() KILL_ANY_CONVERSATION() KILL_FACE_TO_FACE_CONVERSATION() //DISTANT_COP_CAR_SIRENS(FALSE) SET_FAKE_WANTED_LEVEL(0) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(psLamar.PedIndex, KNOCKOFFVEHICLE_DEFAULT) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), KNOCKOFFVEHICLE_DEFAULT) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), KNOCKOFFVEHICLE_DEFAULT) ENDIF //Chop cam specific cleanup //enable player ped ragdoll when player's ragdoll was disabled during combat IF ( bPlayerInCombatWhenChopCamActive = TRUE ) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) SET_PED_CAN_RAGDOLL(PLAYER_PED_ID(), TRUE) ENDIF IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF bPlayerInCombatWhenChopCamActive = FALSE ENDIF CLEANUP_MODEL_ARRAY(MissionModels, iModelsRequested) CLEANUP_CARREC_ARRAY(sVehicleRecordingsFile, MissionRecordings, iRecordingsRequested) CLEANUP_ANIMATION_ARRAY(MissionAnimations, iAnimationsRequested) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE) ENDIF CLEANUP_PED(psChop, IS_SCREEN_FADED_OUT(), FALSE, TRUE) CLEANUP_PED(psLamar, IS_SCREEN_FADED_OUT(), FALSE, TRUE) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_PED_INJURED(psTrevor.PedIndex) SET_PED_KEEP_TASK(psTrevor.PedIndex, TRUE) IF IS_PED_GROUP_MEMBER(psTrevor.PedIndex, PLAYER_GROUP_ID()) REMOVE_PED_FROM_GROUP(psTrevor.PedIndex) ENDIF ENDIF IF NOT IS_SCREEN_FADED_OUT() IF ( ePlayerBuddy != PLAYER_BUDDY_TREVOR) SET_PED_AS_NO_LONGER_NEEDED(psTrevor.PedIndex) ENDIF ELSE DELETE_PED(psTrevor.PedIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) SET_PED_AS_NO_LONGER_NEEDED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) ENDIF ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR IF DOES_ENTITY_EXIST(psFranklin.PedIndex) IF NOT IS_PED_INJURED(psFranklin.PedIndex) SET_PED_KEEP_TASK(psFranklin.PedIndex, TRUE) IF IS_PED_GROUP_MEMBER(psFranklin.PedIndex, PLAYER_GROUP_ID()) REMOVE_PED_FROM_GROUP(psFranklin.PedIndex) ENDIF ENDIF IF NOT IS_SCREEN_FADED_OUT() IF ( ePlayerBuddy != PLAYER_BUDDY_FRANKLIN) SET_PED_AS_NO_LONGER_NEEDED(psFranklin.PedIndex) ENDIf ELSE DELETE_PED(psFranklin.PedIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SET_PED_AS_NO_LONGER_NEEDED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) ENDIF ENDIF //remove mission vehicles IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVan.VehicleIndex, TRUE) ENDIF IF NOT IS_SCREEN_FADED_OUT() SET_VEHICLE_AS_NO_LONGER_NEEDED(vsVan.VehicleIndex) ELSE DELETE_VEHICLE(vsVan.VehicleIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[0].VehicleIndex) IF IS_ENTITY_A_MISSION_ENTITY(vsSpeedophiles[0].VehicleIndex) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vsSpeedophiles[0].VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[0].VehicleIndex) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[0].VehicleIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[1].VehicleIndex) IF IS_ENTITY_A_MISSION_ENTITY(vsSpeedophiles[1].VehicleIndex) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vsSpeedophiles[1].VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[1].VehicleIndex) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[1].VehicleIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[2].VehicleIndex) IF IS_ENTITY_A_MISSION_ENTITY(vsSpeedophiles[2].VehicleIndex) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vsSpeedophiles[2].VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[2].VehicleIndex) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vsSpeedophiles[2].VehicleIndex) ENDIF ENDIF CLEANUP_VEHICLE(vsGhosts[0], TRUE) CLEANUP_VEHICLE(vsGhosts[1], TRUE) CLEANUP_VEHICLE(vsGhosts[2], TRUE) IF DOES_ENTITY_EXIST(sMissionTrain.VehicleIndex) IF NOT IS_ENTITY_DEAD(sMissionTrain.VehicleIndex) DELETE_MISSION_TRAIN(sMissionTrain.VehicleIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Deleted mission train.") #ENDIF ENDIF ENDIF SET_RANDOM_TRAINS(TRUE) SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) CLEANUP_PED_GROUP(psBmxCrew, FALSE) CLEANUP_VEHICLE_GROUP(vsBmxBikes, FALSE, FALSE) CLEANUP_PED_GROUP(psFilmCrew, IS_SCREEN_FADED_OUT()) CLEANUP_ENEMY_GROUP(esCarCuldeSacLeft, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarCuldeSacRight, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection1Left, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection1Right, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection2Left, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarStreetLeft, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarStreetRight, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarDriveway, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup1, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup2, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup3, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup4, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup5, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup6, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup7, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup8, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esGroup9, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esHouseEnemies, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esPorchEnemies, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esLeftChaseEnemies, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esPoliceCarEndReinforcements, FALSE, FALSE) CLEANUP_PED_GROUP(psBoatCops, FALSE, FALSE) CLEANUP_PED_GROUP(psRiverCopCar0Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psRiverCopCar1Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psRiverCopCar2Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psRiverCopCar3Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psRiverCopCar4Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar1Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar2Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar3Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psHillCopCar0Cops, FALSE, FALSE) CLEANUP_VEHICLE_GROUP(vsEnemyCars, FALSE) CLEANUP_VEHICLE_GROUP(vsParkedVehicles, FALSE) CLEANUP_VEHICLE_GROUP(vsStreetCopCars, FALSE) CLEANUP_VEHICLE_GROUP(vsRiverCopCars, FALSE) CLEANUP_VEHICLE_GROUP(vsHillCopCars, FALSE) CLEANUP_VEHICLE_GROUP(vsGetawayCars, FALSE) CLEANUP_ENEMY_GROUP(esSidelineEnemies, TRUE) CLEANUP_PED_GROUP(psSwat, FALSE, FALSE) CLEANUP_VEHICLE(vsPoliceHeli, FALSE, FALSE) CLEANUP_VEHICLE(vsCopBoat, FALSE, FALSE) STOP_AUDIO_SCENES() IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyLeftChaseCar.VehicleIndex) ENDIF ENDIF CLEANUP_VEHICLE(vsEnemyLeftChaseCar, FALSE) CLEANUP_SPAWNPOINTS(EnemySpawnpoints, FALSE) CLEANUP_SPAWNPOINTS(EnemySidekickSpawnpoints, FALSE) CLEANUP_MISSION_OBJECT(osBag, FALSE) CLEANUP_MISSION_OBJECT(osLight, FALSE) CLEANUP_MISSION_OBJECT(osTrowel, FALSE) CLEANUP_MISSION_OBJECT(osCamera, FALSE) CLEANUP_MISSION_OBJECT(osCokeBlock, FALSE) CLEANUP_MISSION_OBJECT(osMicrophone, FALSE) CLEANUP_MISSION_OBJECT_GROUP(osDumpsters, FALSE) //remove blips IF DOES_BLIP_EXIST(psLamar.BlipIndex) REMOVE_BLIP(psLamar.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psFranklin.BlipIndex) REMOVE_BLIP(psFranklin.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psTrevor.BlipIndex) REMOVE_BLIP(psTrevor.BlipIndex) ENDIF REMOVE_COVERPOINTS(csCoverpoints, bCoverpointsCreated) //remove waypoint recordings REMOVE_WAYPOINT_RECORDING("fra1_cflee") //disable mission vehicle and ped models suppressing SET_VEHICLE_MODEL_IS_SUPPRESSED(SEASHARK, FALSE) SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_NPC_VEH_MODEL(CHAR_LAMAR), FALSE) REMOVE_VEHICLE_ASSET(GET_NPC_VEH_MODEL(CHAR_LAMAR)) //enable dispatch services ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) //turn wanted level back to 1.0 SET_WANTED_LEVEL_MULTIPLIER(1.0) SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) REMOVE_SCENARIO_BLOCKING_AREAS() SET_ALL_VEHICLE_GENERATORS_ACTIVE() //cleanup audio and sound effects STOP_SOUND(iPhotoShootSoundID) RELEASE_SOUND_ID(iPhotoShootSoundID) RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_CAMERAS") RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_GIRLS") RELEASE_SCRIPT_AUDIO_BANK() UNREGISTER_SCRIPT_WITH_AUDIO() DISABLE_CELLPHONE(FALSE) DISABLE_TAXI_HAILING(FALSE) RELEASE_SUPPRESSED_EMERGENCY_CALLS() ALLOW_DIALOGUE_IN_WATER(FALSE) REMOVE_IPL("SC1_27_Cut") TRIGGER_MUSIC_EVENT("FRA1_MISSION_FAIL") CANCEL_MUSIC_EVENT("FRA1_SPEED") CLEAR_WEATHER_TYPE_PERSIST() OVERRIDE_WATER_SETTINGS(FALSE, 5.0) SET_PLAYER_PED_DATA_IN_CUTSCENES(TRUE, TRUE) REMOVE_DISPATCH_SPAWN_BLOCKING_AREA(iArea1) REMOVE_DISPATCH_SPAWN_BLOCKING_AREA(iArea2) REMOVE_VEHICLE_COMBAT_AVOIDANCE_AREA(iVehCombatArea1) REMOVE_VEHICLE_COMBAT_AVOIDANCE_AREA(iVehCombatArea2) SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_UP, FALSE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_DOWN, FALSE) SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", FALSE) SET_AUDIO_FLAG("DisableAbortConversationForDeathAndInjury", FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission cleanup.") #ENDIF ENDPROC PROC INITIALISE_ARRAYS_FOR_COPS() //grove street cop cars vsStreetCopCars[COPCAR_STREET_1].vPosition = << -138.6286, -1765.9523, 28.8108 >> vsStreetCopCars[COPCAR_STREET_1].fHeading = 301.7188 vsStreetCopCars[COPCAR_STREET_1].ModelName = POLICE3 vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber = 015 //end postion after the car recording stops <<-26.7525, -1827.2965, 24.8785>> //end heading after the car recording stop 284.6982 vsStreetCopCars[COPCAR_STREET_2].vPosition = << -17.0346, -1765.3695, 27.9308 >> vsStreetCopCars[COPCAR_STREET_2].fHeading = 231.2858 vsStreetCopCars[COPCAR_STREET_2].ModelName = POLICE3 vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber = 016 //end postion after the car recording stops <<-36.1803, -1829.1926, 24.9183>> //end heading after the car recording stop 161.8743 vsStreetCopCars[COPCAR_STREET_3].vPosition = <<-52.3304, -1720.1871, 28.3354>> vsStreetCopCars[COPCAR_STREET_3].fHeading = 231.2858 vsStreetCopCars[COPCAR_STREET_3].ModelName = POLICE3 vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber = 603 //018 //end postion after the car recording stops <<-19.9758, -1802.6586, 26.1321>> //end heading after the car recording stop 200.3464 vsStreetCopCars[COPCAR_STREET_4].vPosition = <<3.8300, -1783.0084, 27.7980>> vsStreetCopCars[COPCAR_STREET_4].fHeading = 131.2858 vsStreetCopCars[COPCAR_STREET_4].ModelName = POLICE3 vsStreetCopCars[COPCAR_STREET_4].iRecordingNumber = 017 //end postion after the car recording stops <<-54.6234, -1806.0216, 26.1688>> //end heading after the car recording stop 266.7573 vsStreetCopCars[COPCAR_STREET_5].vPosition = <<3.8300, -1783.0084, 27.7980>> vsStreetCopCars[COPCAR_STREET_5].fHeading = 131.2858 vsStreetCopCars[COPCAR_STREET_5].ModelName = POLICE3 vsStreetCopCars[COPCAR_STREET_5].iRecordingNumber = 014 //end postion after the car recording stops <<-47.0634, -1810.0951, 25.7914>> //end heading after the car recording stop 163.2093 //river chase cop cars vsRiverCopCars[0].vPosition = <<197.1758, -2186.0186, 6.0975>> vsRiverCopCars[0].fHeading = 93.7542 vsRiverCopCars[0].iRecordingNumber = 701 vsRiverCopCars[0].ModelName = POLICE3 vsRiverCopCars[1].vPosition = <<259.2205, -2114.4358, 15.3720>> vsRiverCopCars[1].fHeading = 230.7495 vsRiverCopCars[1].iRecordingNumber = 702 vsRiverCopCars[1].ModelName = POLICE3 vsRiverCopCars[2].vPosition = <<510.3493, -2239.6572, 4.9860>> vsRiverCopCars[2].fHeading = 187.3048 vsRiverCopCars[2].iRecordingNumber = 703 vsRiverCopCars[2].ModelName = POLICE3 vsRiverCopCars[3].vPosition = <<659.7458, -2691.0503, 5.0820>> vsRiverCopCars[3].fHeading = 36.9602 vsRiverCopCars[3].iRecordingNumber = 704 vsRiverCopCars[2].ModelName = POLICE3 vsRiverCopCars[4].vPosition = <<676.6281, -2509.5039, 18.8334>> vsRiverCopCars[4].fHeading = 250.7224 vsRiverCopCars[4].ModelName = POLICE3 vsCopBoat.vPosition = <<586.5859, -2493.7842, -10.6828>> vsCopBoat.fHeading = 204.3793 vsCopBoat.iRecordingNumber = 706 vsCopBoat.ModelName = PREDATOR vsHillCopCars[0].vPosition = <<1179.0925, -2576.9578, 34.7871>> vsHillCopCars[0].fHeading = 198.0128 vsHillCopCars[0].ModelName = POLICE3 ENDPROC PROC INITIALISE_ARRAYS_FOR_FILM_CREW() vsSpeedophiles[0].vPosition = << -120.1, -1868.2, -0.4 >> //<<-119.5767, -1867.7559, -0.4374>> vsSpeedophiles[0].fHeading = 230.5773 vsSpeedophiles[0].ModelName = SEASHARK vsSpeedophiles[1].vPosition = << -124.100, -1864.900, -0.4 >>//<<-123.3175, -1864.3885, -0.4478>> vsSpeedophiles[1].fHeading = 230.7892 vsSpeedophiles[1].ModelName = SEASHARK vsSpeedophiles[2].vPosition = << -127.600, -1861.950, -0.4 >>//<<-126.6995, -1861.5201, -0.4478>> vsSpeedophiles[2].fHeading = 230.0387 vsSpeedophiles[2].ModelName = SEASHARK psFilmCrew[FCP_JACKEDGIRL].vPosition = << -129.2383, -1864.0924, 0.1382 >> psFilmCrew[FCP_JACKEDGIRL].fHeading = 30.5089 psFilmCrew[FCP_JACKEDGIRL].ModelName = A_F_Y_BEACH_01 psFilmCrew[FCP_GIRL].vPosition = << -120.6672, -1864.6771, 0.4591 >> psFilmCrew[FCP_GIRL].fHeading = 101.7921 psFilmCrew[FCP_GIRL].ModelName = A_F_Y_BEACH_01 psFilmCrew[FCP_CLAY].vPosition = << -168.1493, -1844.2439, 0.4590 >> psFilmCrew[FCP_CLAY].fHeading = 233.1860 psFilmCrew[FCP_CLAY].ModelName = IG_CLAYPAIN psFilmCrew[FCP_CAMERAMAN].vPosition = << -160.52, -1850.36, 0.46 >> psFilmCrew[FCP_CAMERAMAN].fHeading = 202.5305 psFilmCrew[FCP_CAMERAMAN].ModelName = S_M_Y_GRIP_01 psFilmCrew[FCP_BOOMMAN].vPosition = << -159.32, -1852.03, 0.46 >> psFilmCrew[FCP_BOOMMAN].fHeading = 193.2793 psFilmCrew[FCP_BOOMMAN].ModelName = S_M_Y_GRIP_01 osLight.vPosition = <<-128.0000, -1856.1000, 0.4600>> osLight.vRotation = <<-0.0000, 0.0000, 35.0000>> osLight.ModelName = PROP_WORKLIGHT_03B osCamera.vPosition = << -159.36, -1850.97, 1.0 >> osCamera.vRotation = << 0.0, 0.0, 0.0 >> osCamera.ModelName = PROP_V_CAM_01 osMicrophone.vPosition = << -158.72, -1852.29, 1.0 >> osMicrophone.vRotation = << 0.0, 0.0, 0.0 >> osMicrophone.ModelName = PROP_V_BMIKE_01 osBoombox.vPosition = <<-128.8600, -1857.2000, 0.6950>> osBoombox.vRotation = << 0.0, 0.0, 69.84 >> osBoombox.ModelName = PROP_BOOMBOX_01 ENDPROC PROC INITIALISE_ARRAYS_FOR_PARKED_VEHCILES() vsParkedVehicles[0].vPosition = << 89.3010, -1920.6060, 19.5927 >> vsParkedVehicles[0].fHeading = 52.1336 vsParkedVehicles[0].ModelName = EMPEROR2 vsParkedVehicles[1].vPosition = << 41.3838, -1893.4818, 20.8455 >> vsParkedVehicles[1].fHeading = 231.0601 vsParkedVehicles[1].ModelName = EMPEROR2 vsParkedVehicles[2].vPosition = << 68.0439, -1915.7057, 20.4028 >> vsParkedVehicles[2].fHeading = 230.4548 vsParkedVehicles[2].ModelName = EMPEROR2 vsParkedVehicles[3].vPosition = << 7.9280, -1865.5116, 22.6563 >> vsParkedVehicles[3].fHeading = 230.2654 vsParkedVehicles[3].ModelName = EMPEROR2 osDumpsters[0].vPosition = <<71.3600, -1926.9301, 20.0600>> osDumpsters[0].vRotation = <<0.3000, -2.2000, 140.3800>> osDumpsters[0].ModelName = P_DUMPSTER_T osDumpsters[1].vPosition = <<84.9905, -1908.6350, 20.1000>> osDumpsters[1].vRotation = <<0.0000, 3.2000, -40.6000>> osDumpsters[1].ModelName = P_DUMPSTER_T osDumpsters[2].vPosition = <<61.9100, -1919.3700, 20.6300>> osDumpsters[2].vRotation = <<5.9000, -1.2000, 139.6800>> osDumpsters[2].ModelName = P_DUMPSTER_T osDumpsters[3].vPosition = <<56.7225, -1890.2581, 20.5779>> osDumpsters[3].vRotation = <<2.0000, 0.0000, 25.5600>> osDumpsters[3].ModelName = P_DUMPSTER_T osDumpsters[4].vPosition = <<43.1631, -1898.2450, 20.7900>> osDumpsters[4].vRotation = <<2.0000, 1.5000, -9.0000>> osDumpsters[4].ModelName = P_DUMPSTER_T osDumpsters[5].vPosition = <<24.1317, -1883.1240, 21.8523>> osDumpsters[5].vRotation = <<2.0200, 0.0000, 37.4400>> osDumpsters[5].ModelName = P_DUMPSTER_T osDumpsters[6].vPosition = <<13.7830, -1880.9850, 22.2731>> osDumpsters[6].vRotation = <<-1.5000, -2.2000, -132.1200>> osDumpsters[6].ModelName = P_DUMPSTER_T osDumpsters[7].vPosition = <<21.1804, -1860.0050, 22.5200>> osDumpsters[7].vRotation = <<2.8000, 1.3000, 21.9600>> osDumpsters[7].ModelName = P_DUMPSTER_T osDumpsters[8].vPosition = <<3.0904, -1872.0450, 22.7600>> osDumpsters[8].vRotation = <<1.9000, 0.0000, 49.9400>> osDumpsters[8].ModelName = P_DUMPSTER_T ENDPROC /// PURPOSE: /// Populates structs and arrays with data such as vectors, model names etc for a specified mission stage. /// PARAMS: /// eStage - Mission stage to initialise arrays for. PROC INITIALISE_ARRAYS_FOR_MISSION_STAGE(MISSION_STAGES eStage) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Initialising arrays for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF INITIALISE_ARRAYS_FOR_COPS() INITIALISE_ARRAYS_FOR_PARKED_VEHCILES() osFranklinsDoorDummy.ModelName = V_ILEV_FA_FRONTDOOR osFranklinsDoorDummy.vPosition = <<-14.8689, -1441.1821, 31.1932>> osFranklinsDoorDummy.vRotation = << 0.0, 0.0, 0.0 >> osStripClubDoorDummy.ModelName = PROP_STRIP_DOOR_01 osStripClubDoorDummy.vPosition = << 128.010, -1298.565, 29.425 >>// << 127.960, -1298.515, 29.425 >>//<<127.9413, -1298.4857, 29.4196>> osStripClubDoorDummy.vRotation = << 0.0, 0.0, 0.0 >> SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO vsVan.vPosition = << -19.1293, -1455.2057, 29.5073 >> vsVan.fHeading = 94.6991 vsVan.ModelName = GET_NPC_VEH_MODEL(CHAR_LAMAR) psFranklin.vPosition = <<-14.1001, -1448.9307, 29.6472>> psFranklin.fHeading = 190.0336 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -18.6223, -1428.4569, 29.6632 >> psTrevor.fHeading = 177.6198 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = <<-18.0384, -1452.6208, 29.5806>> psLamar.fHeading = 122.8744 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) psChop.vPosition = << -23.2493, -1458.2067, 29.6356 >> psChop.fHeading = 95.2972 psChop.ModelName = GET_CHOP_MODEL() osTrowel.vPosition = <<-12.8990, -1446.5100, 29.6976>> osTrowel.vRotation = <<-93.2400, -0.0000, 40.7000>> osTrowel.ModelName = PROP_CS_TROWEL BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL vsVan.vPosition = << -19.1293, -1455.2057, 29.5073 >> vsVan.fHeading = 94.6991 vsVan.ModelName = GET_NPC_VEH_MODEL(CHAR_LAMAR) psFranklin.vPosition = <<-14.1001, -1448.9307, 29.6472>> psFranklin.fHeading = 190.0336 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -14.8952, -1455.4774, 29.4390 >> psTrevor.fHeading = 95.3372 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = <<-18.0384, -1452.6208, 29.5806>> psLamar.fHeading = 122.8744 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) psChop.vPosition = << -23.2493, -1458.2067, 29.6356 >> psChop.fHeading = 95.2972 psChop.ModelName = GET_CHOP_MODEL() osBag.ModelName = P_LD_HEIST_BAG_S_1 //bmx crew vsBmxBikes[0].vPosition = << 83.8966, -1920.0219, 19.8475 >> vsBmxBikes[0].fHeading = 48.1261 vsBmxBikes[0].ModelName = BMX vsBmxBikes[0].iRecordingNumber = 25 vsBmxBikes[1].vPosition = << 84.1394, -1921.7198, 19.8443 >> vsBmxBikes[1].fHeading = 54.4925 vsBmxBikes[1].ModelName = BMX vsBmxBikes[1].iRecordingNumber = 26 vsBmxBikes[2].vPosition = << 84.9489, -1919.3877, 19.7905 >> vsBmxBikes[2].fHeading = 51.5015 vsBmxBikes[2].ModelName = BMX vsBmxBikes[2].iRecordingNumber = 27 psBmxCrew[0].ModelName = G_M_Y_FAMFOR_01 psBmxCrew[1].ModelName = G_M_Y_FAMCA_01 psBmxCrew[2].ModelName = G_M_Y_FAMCA_01 osTrowel.vPosition = <<-12.8990, -1446.5100, 29.6976>> osTrowel.vRotation = <<-93.2400, -0.0000, 40.7000>> osTrowel.ModelName = PROP_CS_TROWEL BREAK CASE MISSION_STAGE_CUTSCENE_DEAL vsVan.vPosition = << 95.2699, -1942.2426, 19.7230 >> vsVan.fHeading = 207.4629 vsVan.ModelName = GET_NPC_VEH_MODEL(CHAR_LAMAR) psFranklin.vPosition = << 82.7797, -1949.6857, 19.79 >> //<< 82.898, -1949.781, 19.79 >> psFranklin.fHeading = 319.4117 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << 85.02, -1946.93, 19.78 >> psTrevor.fHeading = 319.4117 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = << 83.7215, -1948.4117, 19.6708 >> psLamar.fHeading = 319.4117 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) psChop.vPosition = <<89.0399, -1957.4697, 19.7474>> psChop.fHeading = 48.5293 psChop.ModelName = GET_CHOP_MODEL() osCokeBlock.vPosition = <<85.6152, -1958.0890, 20.1654>> osCokeBlock.vRotation = << 0.0, 0.0, 153.36 >> osCokeBlock.ModelName = PROP_COKE_BLOCK_HALF_B BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT vsVan.vPosition = << 95.2699, -1942.2426, 19.7230 >> vsVan.fHeading = 207.4629 vsVan.ModelName = GET_NPC_VEH_MODEL(CHAR_LAMAR) psLamar.vPosition = << 83.7215, -1948.4117, 19.6708 >> psLamar.fHeading = 319.4117 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) psTrevor.vPosition = << 85.02, -1946.93, 19.78 >> psTrevor.fHeading = 319.4117 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psFranklin.vPosition = << 82.7797, -1949.6857, 19.79 >> //<< 82.898, -1949.781, 19.79 >> psFranklin.fHeading = 319.4117 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psChop.vPosition = << 88.84, -1949.01, 19.74 >> psChop.fHeading = 29.5409 psChop.ModelName = GET_CHOP_MODEL() osCokeBlock.vPosition = <<85.6152, -1958.0890, 20.1654>> osCokeBlock.vRotation = << 0.0, 0.0, 153.36 >> osCokeBlock.ModelName = PROP_COKE_BLOCK_HALF_B vsEnemyCars[CAR_CULDESAC].vPosition = << 94.6551, -1857.8273, 23.5068 >> vsEnemyCars[CAR_CULDESAC].fHeading = 149.4152 vsEnemyCars[CAR_CULDESAC].ModelName = FELON//ORACLE vsEnemyCars[CAR_CULDESAC].iRecordingNumber = 001 // intersection cars vsEnemyCars[CAR_INTERSECTION1].vPosition = <<75.8712, -1849.0306, 23.6678>> vsEnemyCars[CAR_INTERSECTION1].fHeading = 235.5536 vsEnemyCars[CAR_INTERSECTION1].ModelName = FELON vsEnemyCars[CAR_INTERSECTION1].iRecordingNumber = 600 vsEnemyCars[CAR_INTERSECTION2].vPosition = <<123.8393, -1869.3236, 23.2737>> vsEnemyCars[CAR_INTERSECTION2].fHeading = 66.8293 vsEnemyCars[CAR_INTERSECTION2].ModelName = FELON vsEnemyCars[CAR_INTERSECTION2].iRecordingNumber = 601 // another street car vsEnemyCars[CAR_STREET].vPosition = << -14.3781, -1767.9717, 27.9510 >> vsEnemyCars[CAR_STREET].fHeading = 233.6783 vsEnemyCars[CAR_STREET].ModelName = ORACLE//FELON vsEnemyCars[CAR_STREET].iRecordingNumber = 007 //parked car that rolls into the street vsEnemyCars[CAR_DRIVEWAY].vPosition = << 43.1274, -1850.7629, 21.8317 >> vsEnemyCars[CAR_DRIVEWAY].fHeading = 139.4681 vsEnemyCars[CAR_DRIVEWAY].ModelName = EMPEROR2 vsEnemyCars[CAR_DRIVEWAY].iRecordingNumber = 009 tbWave2.vStart = <<71.126610,-1938.604248,19.373554>> tbWave2.vEnd = <<121.538376,-1907.023315,23.434996>> tbWave2.fWidth = 14.0 #IF IS_DEBUG_BUILD tbWave2.sDebugName = "trigWave2" #ENDIF tbIntersection.vStart = <<87.8450, -1911.4603, 17.9964>> // lamar will trigger this. if we dont want that, use <<85.0053, -1908.3538, 17.1758>> instead tbIntersection.vEnd = <<64.6608, -1933.1770, 23.9972>> tbIntersection.fWidth = 5.0 #IF IS_DEBUG_BUILD tbIntersection.sDebugName = "trigIntersect" #ENDIF tbWave3.vStart = <<31.576103,-1913.141846,12.644478>> tbWave3.vEnd = <<72.211205,-1864.884033,27.256504>> tbWave3.fWidth = 8.0 #IF IS_DEBUG_BUILD tbWave3.sDebugName = "trigWave3" #ENDIF // copy of parked car (mostly) tbWave4.vStart = <<50.922531,-1870.579346,20.418753>>//<<19.062645,-1888.295166,20.780989>> tbWave4.vEnd = <<30.111002,-1895.438965,25.338440>>//<<42.118252,-1860.359741,24.844620>> tbWave4.fWidth = 8.0 #IF IS_DEBUG_BUILD tbWave4.sDebugName = "trigWave4" #ENDIF tbWave5.vStart = <<12.8855, -1885.8887, 24.2318>> tbWave5.vEnd = <<42.7759, -1849.4467, 20.8340>> tbWave5.fWidth = 8.0 #IF IS_DEBUG_BUILD tbWave5.sDebugName = "trigWave5" #ENDIF tbParkedCar.vStart = <<50.922531,-1870.579346,20.418753>> tbParkedCar.vEnd = <<30.111002,-1895.438965,25.338440>> tbParkedCar.fWidth = 16.0 #IF IS_DEBUG_BUILD tbParkedCar.sDebugName = "trigParkedCar" #ENDIF tbAlliesToRiver.vStart = <<-44.493145,-1867.814697,23.294022>> tbAlliesToRiver.vEnd = <<-17.559521,-1835.444336,29.422800>> tbAlliesToRiver.fWidth = 22.0 #IF IS_DEBUG_BUILD tbAlliesToRiver.sDebugName = "tbAlliesToRiver" #ENDIF vsEnemyLeftChaseCar.vPosition = <<-63.9716, -1884.2588, 8.4079>>//<< -35.8882, -1900.3604, 9.9100 >> vsEnemyLeftChaseCar.fHeading = 235.0957//57.5635 vsEnemyLeftChaseCar.ModelName = ORACLE//POLICE3 vsEnemyLeftChaseCar.iRecordingNumber = 58 INITIALISE_ARRAYS_FOR_FILM_CREW() BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES psLamar.vPosition = <<-26.6284, -1851.1584, 24.6834>> psLamar.fHeading = 125.7717 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN psTrevor.vPosition = <<-26.9378, -1849.2456, 24.7405>> psTrevor.fHeading = 129.2849 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psFranklin.vPosition = << -23.5686, -1845.6843, 24.3252 >> psFranklin.fHeading = 139.5157 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) BREAK CASE CHAR_TREVOR //switch Trevor and Franklin positions for this checkpoint psFranklin.vPosition = <<-26.9378, -1849.2456, 24.7405>> psFranklin.fHeading = 129.2849 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psTrevor.vPosition = << -23.5686, -1845.6843, 24.3252 >> psTrevor.fHeading = 139.5157 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) BREAK ENDSWITCH vsEnemyLeftChaseCar.vPosition = <<-63.9716, -1884.2588, 8.4079>>//<< -35.8882, -1900.3604, 9.9100 >> vsEnemyLeftChaseCar.fHeading = 235.0957//57.5635 vsEnemyLeftChaseCar.ModelName = ORACLE//POLICE3 vsEnemyLeftChaseCar.iRecordingNumber = 58 INITIALISE_ARRAYS_FOR_FILM_CREW() BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE psFranklin.vPosition = << -113.7057, -1871.0229, 0.5306 >> psFranklin.fHeading = 142.4835 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -123.1736, -1863.0868, 0.4591 >> psTrevor.fHeading = 142.4846 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = << -118.2788, -1866.7175, 0.4708 >> psLamar.fHeading = 142.4846 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) vsEnemyLeftChaseCar.vPosition = <<-63.9716, -1884.2588, 8.4079>>//<< -35.8882, -1900.3604, 9.9100 >> vsEnemyLeftChaseCar.fHeading = 235.0957//57.5635 vsEnemyLeftChaseCar.ModelName = ORACLE//POLICE3 vsEnemyLeftChaseCar.iRecordingNumber = 58 vsPoliceHeli.vPosition = << -48.0368, -2279.3125, -12.2942 >> vsPoliceHeli.fHeading = 276.3763 vsPoliceHeli.ModelName = POLMAV vsPoliceHeli.iRecordingNumber = 091 sMissionTrain.iConfiguration = 23 sMissionTrain.vPosition = << 217.36, -2223.17, 11.34 >> sMissionTrain.ModelName1 = FREIGHT sMissionTrain.ModelName2 = FREIGHTCAR sMissionTrain.ModelName3 = FREIGHTCONT1 INITIALISE_ARRAYS_FOR_FILM_CREW() BREAK CASE MISSION_STAGE_LOSE_COPS psFranklin.vPosition = << 696.08569, -2584.13452, 0.15417 >> psFranklin.fHeading = 236.2914 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << 697.13495, -2593.27393, 0.24273 >> psTrevor.fHeading = 236.2914 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = << 708.53217, -2593.76733, 0.31231 >> psLamar.fHeading = 236.2914 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) vsSpeedophiles[0].vPosition = << 697.13495, -2593.27393, 0.24273 >> vsSpeedophiles[0].fHeading = 236.2914 vsSpeedophiles[0].ModelName = SEASHARK vsSpeedophiles[0].iRecordingNumber = 63 vsSpeedophiles[1].vPosition = << 708.53217, -2593.76733, 0.31231 >> vsSpeedophiles[1].fHeading = 236.2914 vsSpeedophiles[1].ModelName = SEASHARK vsSpeedophiles[1].iRecordingNumber = 72 vsSpeedophiles[2].vPosition = << 696.08569, -2584.13452, 0.15417 >> vsSpeedophiles[2].fHeading = 236.2914 vsSpeedophiles[2].ModelName = SEASHARK vsSpeedophiles[2].iRecordingNumber = 82 vsPoliceHeli.vPosition = << -48.0368, -2279.3125, -12.2942 >> vsPoliceHeli.fHeading = 276.3763 vsPoliceHeli.ModelName = POLMAV vsPoliceHeli.iRecordingNumber = 091 BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR psFranklin.vPosition = <<-14.1001, -1448.9307, 29.6472>> psFranklin.fHeading = 190.0336 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -14.8952, -1455.4774, 29.4390 >> psTrevor.fHeading = 95.3372 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) psLamar.vPosition = <<-18.0384, -1452.6208, 29.5806>> psLamar.fHeading = 122.8744 psLamar.ModelName = GET_NPC_PED_MODEL(CHAR_LAMAR) BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR psFranklin.vPosition = <<133.7964, -1312.0645, 28.1227>> psFranklin.fHeading = 350.3661 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = <<140.4018, -1312.3334, 28.0595>> psTrevor.fHeading = 310.2663 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN psFranklin.vPosition = <<-14.1001, -1448.9307, 29.6472>> psFranklin.fHeading = 190.0336 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -14.8952, -1455.4774, 29.4390 >> psTrevor.fHeading = 95.3372 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) BREAK CASE MISSION_STAGE_END psFranklin.vPosition = <<1176.6774, -3048.6213, 4.9016>> psFranklin.fHeading = 174.4718 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = <<1176.6774, -3048.6213, 4.9016>> psTrevor.fHeading = 174.4718 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) BREAK #IF IS_DEBUG_BUILD CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE psFranklin.vPosition = << -113.7057, -1871.0229, 0.5306 >> psFranklin.fHeading = 142.4835 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -123.1736, -1863.0868, 0.4591 >> psTrevor.fHeading = 142.4846 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) vsEnemyLeftChaseCar.vPosition = << 87.0173, -2018.3556, 17.1012 >> vsEnemyLeftChaseCar.fHeading = 9.9813 vsEnemyLeftChaseCar.ModelName = ORACLE vsSpeedophiles[0].vPosition = << -158.527, -1847.91, 0.051 >> vsSpeedophiles[0].fHeading = 225.769485 vsSpeedophiles[0].ModelName = SEASHARK vsSpeedophiles[0].iRecordingNumber = 63 vsSpeedophiles[1].vPosition = << -161.725, -1845.14, 0.051 >> vsSpeedophiles[1].fHeading = 230.190735 vsSpeedophiles[1].ModelName = SEASHARK vsSpeedophiles[1].iRecordingNumber = 72 vsSpeedophiles[2].vPosition = << -164.91, -1842.28, 0.051 >> vsSpeedophiles[2].fHeading = 229.192627 vsSpeedophiles[2].ModelName = SEASHARK vsSpeedophiles[2].iRecordingNumber = 82 BREAK CASE MISSION_STAGE_DEBUG_RECORD_CHASE psFranklin.vPosition = << -113.7057, -1871.0229, 0.5306 >> psFranklin.fHeading = 142.4835 psFranklin.ModelName = GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) psTrevor.vPosition = << -123.1736, -1863.0868, 0.4591 >> psTrevor.fHeading = 142.4846 psTrevor.ModelName = GET_PLAYER_PED_MODEL(CHAR_TREVOR) vsGhosts[0].vPosition = << -158.527, -1847.91, 0.051 >> vsGhosts[0].fHeading = 225.769485 vsGhosts[0].ModelName = SEASHARK vsGhosts[0].iRecordingNumber = 63 vsGhosts[1].vPosition = << -161.725, -1845.14, 0.051 >> vsGhosts[1].fHeading = 230.190735 vsGhosts[1].ModelName = SEASHARK vsGhosts[1].iRecordingNumber = 72 vsGhosts[2].vPosition = << -164.91, -1842.28, 0.051 >> vsGhosts[2].fHeading = 229.192627 vsGhosts[2].ModelName = SEASHARK vsGhosts[2].iRecordingNumber = 82 INITIALISE_ARRAYS_FOR_FILM_CREW() vsSpeedophiles[0].iRecordingNumber = 101//931 vsSpeedophiles[1].iRecordingNumber = 102//922 vsSpeedophiles[2].iRecordingNumber = 103//933 osCamera.vPosition = << -104.15, -1887.18, -0.32 >> osCamera.vRotation = << 0.0, 0.0, 0.0 >> osCamera.ModelName = PROP_V_CAM_01 BREAK #ENDIF ENDSWITCH #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished initialising arrays for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF ENDPROC PROC BUILD_REQUEST_BANK_FOR_MISSION_STAGE(MISSION_STAGES eStage) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Building request bank for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO //don't request anything here BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL IF NOT DOES_ENTITY_EXIST(vsVan.VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsVan.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psChop.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psChop.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF ADD_ANIMATION_REQUEST_TO_ARRAY(GET_CHOP_IN_VAN_ANIM_DICT(), MissionAnimations, MAX_ANIMATIONS, iAnimationsRequested) ADD_ANIMATION_REQUEST_TO_ARRAY("missfra1_tovan", MissionAnimations, MAX_ANIMATIONS, iAnimationsRequested) BREAK CASE MISSION_STAGE_CUTSCENE_DEAL IF NOT DOES_ENTITY_EXIST(vsVan.VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsVan.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psChop.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psChop.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT IF NOT DOES_ENTITY_EXIST(vsVan.VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsVan.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psChop.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psChop.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(osDumpsters[0].ObjectIndex) ADD_MODEL_REQUEST_TO_ARRAY(osDumpsters[0].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF REQUEST_WAYPOINT_RECORDING("fra1_cflee") ADD_MODEL_REQUEST_TO_ARRAY(mnBalla, MissionModels, MAX_MODELS, iModelsRequested) BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[0].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[1].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[2].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF ADD_MODEL_REQUEST_TO_ARRAY(mnBalla, MissionModels, MAX_MODELS, iModelsRequested) ADD_MODEL_REQUEST_TO_ARRAY(vsEnemyLeftChaseCar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) BREAK CASE MISSION_STAGE_LOSE_COPS IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psLamar.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) ADD_MODEL_REQUEST_TO_ARRAY(psTrevor.ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[0].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[1].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[2].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF BREAK CASE MISSION_STAGE_END //don't request anything here BREAK #IF IS_DEBUG_BUILD CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[0].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[1].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[2].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF ADD_CARREC_REQUEST_TO_ARRAY(vsSpeedophiles[1].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) BREAK CASE MISSION_STAGE_DEBUG_RECORD_CHASE IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[0].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[1].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF IF NOT DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) ADD_MODEL_REQUEST_TO_ARRAY(vsSpeedophiles[2].ModelName, MissionModels, MAX_MODELS, iModelsRequested) ENDIF ADD_CARREC_REQUEST_TO_ARRAY(vsSpeedophiles[0].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsSpeedophiles[1].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsSpeedophiles[2].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsGhosts[0].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsGhosts[1].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) ADD_CARREC_REQUEST_TO_ARRAY(vsGhosts[2].iRecordingNumber, sVehicleRecordingsFile, MissionRecordings, MAX_CAR_RECORDINGS, iRecordingsRequested) BREAK #ENDIF ENDSWITCH #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished building request bank for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF ENDPROC FUNC BOOL IS_MISSION_STAGE_LOADED(MISSION_STAGES eStage, INT &iSetupProgress, BOOL &bStageLoaded, BOOL &bStageSkippedTo, BOOL &bStageReplayed) //handle initial mission setup //only run this IF block once, when the mission first loads IF ( iSetupProgress = 0 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting initial mission loading.") SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE) #ENDIF CLEAR_HELP() CLEAR_PRINTS() REQUEST_ADDITIONAL_TEXT("FRAN1", MISSION_TEXT_SLOT) REQUEST_ADDITIONAL_TEXT("FKN1AUD", MISSION_DIALOGUE_TEXT_SLOT) WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) WAIT(0) ENDWHILE WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_DIALOGUE_TEXT_SLOT) WAIT(0) ENDWHILE SET_WIND(0.1) SET_WIND_SPEED(0.1) REGISTER_SCRIPT_WITH_AUDIO(TRUE) //suppress mission vehicles SET_VEHICLE_MODEL_IS_SUPPRESSED(SEASHARK, TRUE) SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_NPC_VEH_MODEL(CHAR_LAMAR), TRUE) //setup relationship groups ADD_RELATIONSHIP_GROUP("DOG", rgDog) ADD_RELATIONSHIP_GROUP("BMX", rgBmxCrew) ADD_RELATIONSHIP_GROUP("ENEMIES", rgEnemies) ADD_RELATIONSHIP_GROUP("FILMCREW", rgFilmCrew) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, rgEnemies) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, rgEnemies, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, rgDog, rgEnemies) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rgEnemies, rgEnemies) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, RELGROUPHASH_PLAYER, rgFilmCrew) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, rgDog) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rgFilmCrew, rgFilmCrew) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, rgFilmCrew, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rgFilmCrew, rgDog) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rgDog, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rgDog, rgFilmCrew) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, RELGROUPHASH_COP) //when mission starts get chop behaviour enum from external app eChopBehaviour = GET_CHOP_BEHAVIOUR_FROM_APP() iPhotoShootSoundID = GET_SOUND_ID() INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(PLAYER_PED_ID(), FRA1_DAMAGE) SET_PLAYER_PED_DATA_IN_CUTSCENES(FALSE, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_PLAYER_PED_DATA_IN_CUTSCENES(FALSE, TRUE).") #ENDIF g_ePostFranklin1Switch = POST_FRANKLIN1_NULL IF ( ScenarioBlockingArea6 = NULL ) //setup Lamar's porch ScenarioBlockingArea6 = CREATE_SCENARIO_BLOCKING_AREA(<< -62.46, -1451.80, 33.12 >>, << 4.0, 4.0, 3.0 >>) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -62.46, -1451.80, 33.12 >>, << 4.0, 4.0, 3.0 >>, FALSE) REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<< -62.46, -1451.80, 33.12 >>, << 4.0, 4.0, 3.0 >>) ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished initial mission loading.") #ENDIF iSetupProgress++ ENDIF IF ( iSetupProgress = 1 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Started mission stage loading for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF INITIALISE_ARRAYS_FOR_MISSION_STAGE(eStage) //initialise arrays for stage entities CLEANUP_MODEL_ARRAY(MissionModels, iModelsRequested) //cleanup the asset arrays so that they are CLEANUP_ANIMATION_ARRAY(MissionAnimations, iAnimationsRequested) //ready to be populated with assets needed CLEANUP_CARREC_ARRAY(sVehicleRecordingsFile, MissionRecordings, iRecordingsRequested) //for the stage being loaded CLEAR_TRIGGERED_LABELS() //clear triggered text labels IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) //reset triggered text labels sLabelFLAMAR = "FRA1_FLAMAR" ENDIF bStageLoaded = FALSE //set stage loaded flag to FALSE iSetupProgress++ ENDIF IF ( iSetupProgress = 2 ) //handle player ped position for mission stage skips or retry IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Warping player ped to new position for mission stage being loaded due to skipping or replay.") #ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) WARP_PED(PLAYER_PED_ID(), psFranklin.vPosition, psFranklin.fHeading, FALSE, TRUE, FALSE) ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) WARP_PED(PLAYER_PED_ID(), psTrevor.vPosition, psTrevor.fHeading, FALSE, TRUE, FALSE) ENDIF IF eStage = MISSION_STAGE_SPEEDOPHILE_RIDE OR eStage = MISSION_STAGE_LOSE_COPS OVERRIDE_WATER_SETTINGS(TRUE, 1.0, fOverrideStrength) ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_WETNESS(PLAYER_PED_ID()) CLEAR_PED_DECORATIONS(PLAYER_PED_ID()) CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED_ID()) RESET_PED_VISIBLE_DAMAGE(PLAYER_PED_ID()) RESTORE_PLAYER_PED_TATTOOS(PLAYER_PED_ID()) SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE) REMOVE_ALL_PICKUPS_OF_TYPE(PICKUP_MONEY_VARIABLE) CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0, TRUE) STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0) REMOVE_DECALS_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0) REMOVE_PARTICLE_FX_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) SET_ENTITY_HEALTH(PLAYER_PED_ID(), GET_PED_MAX_HEALTH(PLAYER_PED_ID())) ENDIF SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY") IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) ENDIF ENDIF IF ( bStageReplayed = TRUE ) //start replay setup if stage is being retried SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN START_REPLAY_SETUP(psFranklin.vPosition, psFranklin.fHeading) BREAK CASE CHAR_TREVOR START_REPLAY_SETUP(psTrevor.vPosition, psTrevor.fHeading) BREAK ENDSWITCH ENDIF BUILD_REQUEST_BANK_FOR_MISSION_STAGE(eStage) //request assets needed for current stage iSetupProgress++ ENDIF IF ( iSetupProgress = 3 ) //handle loading of mission assets requested in BUILD_REQUEST_BANK_FOR_MISSION_STAGE() IF ARE_REQUESTED_MODELS_LOADED(MissionModels, iModelsRequested) IF ARE_REQUESTED_ANIMATIONS_LOADED(MissionAnimations, iAnimationsRequested) IF ARE_REQUESTED_CARRECS_LOADED(sVehicleRecordingsFile, MissionRecordings, iRecordingsRequested) iSetupProgress++ ENDIF ENDIF ENDIF ENDIF //THIS SETUP SECTION ASSUMES THAT ALL REQUIRED ASSETS HAVE BEEN ALREADY LOADED TO MEMORY IN PREVIOUS SETUP SECTIONS IF ( iSetupProgress = 4 ) //handle creating entities and setting up fail flags SET_FAIL_FLAGS(FALSE) SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO IF IS_REPEAT_PLAY_ACTIVE() //create mission vehicle on mission repeat play only IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "M_Van" #ENDIF) SET_VEHICLE_AS_RESTRICTED(vsVan.VehicleIndex, 0) iSetupProgress++ ENDIF ELSE //move on if repeat play is not active iSetupProgress++ ENDIF BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL FailFlags[MISSION_FAIL_DEAL_BLOWN] = TRUE //create van IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE) AND HAS_MISSION_OBJECT_BEEN_CREATED(osTrowel, TRUE) FailFlags[MISSION_FAIL_CAR_DEAD] = TRUE FailFlags[MISSION_FAIL_CAR_UNDRIVABLE] = TRUE INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vsVan.VehicleIndex, FRA1_MAX_SPEED) INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vsVan.VehicleIndex, FRA1_CAR_DAMAGE) SET_VEHICLE_AS_RESTRICTED(vsVan.VehicleIndex, 0) //create Lamar IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_LAMAR, FALSE, FALSE, FALSE) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE //create Chop IF HAS_CHOP_BEEN_CREATED(psChop, rgDog, FALSE) FailFlags[MISSION_FAIL_CHOP_DEAD] = TRUE FailFlags[MISSION_FAIL_CHOP_DROWNED] = TRUE //create player peds IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_TREVOR) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_FRANKLIN) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DEAL IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsVan.VehicleIndex, FALSE) ENDIF SET_VEHICLE_AS_RESTRICTED(vsVan.VehicleIndex, 0) //create Lamar IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_LAMAR) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE //create Chop IF HAS_CHOP_BEEN_CREATED(psChop, rgDog, FALSE) FailFlags[MISSION_FAIL_CHOP_DEAD] = TRUE //create player peds IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_TREVOR) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_FRANKLIN) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT psLamar.ePedVehicle = MAX_SPEEDOPHILES psFranklin.ePedVehicle = MAX_SPEEDOPHILES psTrevor.ePedVehicle = MAX_SPEEDOPHILES psLamar.bVehicleReached = FALSE psFranklin.bVehicleReached = FALSE psTrevor.bVehicleReached = FALSE IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE) AND HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[0], FALSE, FALSE, NO_CHARACTER, FALSE) AND HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[1], FALSE, FALSE, NO_CHARACTER, FALSE) AND HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[2], FALSE, FALSE, NO_CHARACTER, FALSE) AND HAS_MISSION_VEHICLE_BEEN_CREATED(vsParkedVehicles[3], FALSE, FALSE, NO_CHARACTER, FALSE) AND HAS_MISSION_OBJECT_BEEN_CREATED(osCokeBlock, TRUE) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsVan.VehicleIndex, FALSE) ENDIF SET_VEHICLE_AS_RESTRICTED(vsVan.VehicleIndex, 0) //create Lamar IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, TRUE, CHAR_LAMAR) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE //create Chop IF HAS_CHOP_BEEN_CREATED(psChop, rgDog, FALSE) FailFlags[MISSION_FAIL_CHOP_DEAD] = TRUE //create player peds IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_TREVOR) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_FRANKLIN) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES psLamar.ePedVehicle = MAX_SPEEDOPHILES psFranklin.ePedVehicle = MAX_SPEEDOPHILES psTrevor.ePedVehicle = MAX_SPEEDOPHILES psLamar.bVehicleReached = FALSE psFranklin.bVehicleReached = FALSE psTrevor.bVehicleReached = FALSE //create Lamar IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, TRUE, CHAR_LAMAR) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE //create player peds IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_TREVOR) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_FRANKLIN) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 46, 46, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_2" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_3], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 82, 82, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_3" #ENDIF) FailFlags[MISSION_FAIL_SPEEDOPHILE_DEAD] = TRUE FailFlags[MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE] = TRUE IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, FALSE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, FALSE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, FALSE) ENDIF IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, TRUE, CHAR_LAMAR, FALSE, FALSE, FALSE)//, vsSpeedophiles[1].VehicleIndex) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LOST] = TRUE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_TREVOR, FALSE, FALSE, FALSE)//, vsSpeedophiles[0].VehicleIndex) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_FRANKLIN, FALSE, FALSE, FALSE)//, vsSpeedophiles[2].VehicleIndex) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_LOSE_COPS IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 46, 46, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_2" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_3], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 82, 82, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_3" #ENDIF) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, FALSE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, FALSE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, FALSE) ENDIF //FailFlags[MISSION_FAIL_SPEEDOPHILE_DEAD] = TRUE //FailFlags[MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE] = TRUE //what if the player shoots up buddy's speedophile? IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, TRUE, CHAR_LAMAR, FALSE, FALSE, FALSE)//, vsSpeedophiles[1].VehicleIndex) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE //FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = TRUE IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_TREVOR, FALSE, FALSE, FALSE)//, vsSpeedophiles[0].VehicleIndex) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, TRUE, CHAR_FRANKLIN, FALSE, FALSE, FALSE)//, vsSpeedophiles[2].VehicleIndex) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR IF HAS_MISSION_PED_BEEN_CREATED(psLamar, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_LAMAR, FALSE, FALSE, FALSE) FailFlags[MISSION_FAIL_LAMAR_DEAD] = TRUE iSetupProgress++ ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_MISSION_PED_BEEN_CREATED(psTrevor, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_TREVOR) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex FailFlags[MISSION_FAIL_TREVOR_DEAD] = TRUE iSetupProgress++ ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_MISSION_PED_BEEN_CREATED(psFranklin, TRUE, RELGROUPHASH_PLAYER, FALSE, CHAR_FRANKLIN) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex FailFlags[MISSION_FAIL_FRANKLIN_DEAD] = TRUE iSetupProgress++ ENDIF ENDIF BREAK CASE MISSION_STAGE_END iSetupProgress++ BREAK #IF IS_DEBUG_BUILD CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsEnemyLeftChaseCar, FALSE, FALSe, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0) IF DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[1].VehicleIndex) SET_ENTITY_INVINCIBLE(vsSpeedophiles[1].VehicleIndex, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[0].VehicleIndex) SET_ENTITY_INVINCIBLE(vsSpeedophiles[0].VehicleIndex, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[2].VehicleIndex) SET_ENTITY_COLLISION(vsSpeedophiles[2].VehicleIndex, FALSE) SET_ENTITY_INVINCIBLE(vsSpeedophiles[2].VehicleIndex, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) SET_ENTITY_INVINCIBLE(vsEnemyLeftChaseCar.VehicleIndex, TRUE) ENDIF ENDIF iSetupProgress++ ENDIF ENDIF BREAK CASE MISSION_STAGE_DEBUG_RECORD_CHASE IF HAS_MISSION_OBJECT_BEEN_CREATED(osCamera, TRUE) IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) SET_ENTITY_COLLISION(osCamera.ObjectIndex, FALSE) ENDIF ENDIF IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 82, 82, 0, 0 #IF IS_DEBUG_BUILD, "2" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[0], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 46, 46, 0, 0 #IF IS_DEBUG_BUILD, "0" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGhosts[1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGhosts[2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 82, 82, 0, 0 #IF IS_DEBUG_BUILD, "2" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGhosts[0], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 46, 46, 0, 0 #IF IS_DEBUG_BUILD, "0" #ENDIF) IF DOES_ENTITY_EXIST(vsSpeedophiles[0].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[0].VehicleIndex) SET_ENTITY_INVINCIBLE(vsSpeedophiles[0].VehicleIndex, TRUE) //SET_ENTITY_COLLISION(vsSpeedophiles[0].VehicleIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[1].VehicleIndex) SET_ENTITY_INVINCIBLE(vsSpeedophiles[1].VehicleIndex, TRUE) //SET_ENTITY_COLLISION(vsSpeedophiles[1].VehicleIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsSpeedophiles[2].VehicleIndex) SET_ENTITY_INVINCIBLE(vsSpeedophiles[2].VehicleIndex, TRUE) //SET_ENTITY_COLLISION(vsSpeedophiles[2].VehicleIndex, FALSE) ENDIF ENDIF //ghosts IF DOES_ENTITY_EXIST(vsGhosts[0].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsGhosts[0].VehicleIndex) SET_ENTITY_INVINCIBLE(vsGhosts[0].VehicleIndex, TRUE) SET_ENTITY_COLLISION(vsGhosts[0].VehicleIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsGhosts[1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsGhosts[1].VehicleIndex) SET_ENTITY_INVINCIBLE(vsGhosts[1].VehicleIndex, TRUE) SET_ENTITY_COLLISION(vsGhosts[1].VehicleIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(vsGhosts[2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsGhosts[2].VehicleIndex) SET_ENTITY_INVINCIBLE(vsGhosts[2].VehicleIndex, TRUE) SET_ENTITY_COLLISION(vsGhosts[2].VehicleIndex, FALSE) ENDIF ENDIF iSetupProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK #ENDIF ENDSWITCH IF ( bLamarsOutfitSet = FALSE ) IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_HEAD, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_BERD, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_HAIR, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_TORSO, 2, 1) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_LEG, 5, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_HAND, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_FEET, 1, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_TEETH, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_SPECIAL, 0, 0) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_DECL, 1, 2) SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES CASE MISSION_STAGE_SPEEDOPHILE_RIDE CASE MISSION_STAGE_LOSE_COPS IF ( bLamarsBagEquipped = FALSE ) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_SPECIAL2, 1, 0) //adds bag bLamarsBagEquipped = TRUE ENDIF BREAK DEFAULT SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_SPECIAL2, 0, 0) //removes bag BREAK ENDSWITCH bLamarsOutfitSet = TRUE ENDIF ENDIF ENDIF ENDIF //set the bAllowHotSwap flag depending on mission stage //set the current player ped enum depending on mission stage //delete the other player ped if mission stage requires only one player ped IF ( iSetupProgress = 5 ) SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO iSetupProgress++ BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL CASE MISSION_STAGE_CUTSCENE_DEAL IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Franklin for mission stage being loaded.") #ENDIF psTrevor.PedIndex = sSelectorPeds.pedID[SELECTOR_PED_TREVOR] ENDIF iSetupProgress++ BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Franklin for mission stage being loaded.") #ENDIF psTrevor.PedIndex = sSelectorPeds.pedID[SELECTOR_PED_TREVOR] ENDIF IF HAVE_MISSION_OBJECTS_BEEN_CREATED(osDumpsters) IF ( bCoverpointsCreated = FALSE ) CREATE_COVERPOINTS(csCoverpoints) bCoverpointsCreated = TRUE ENDIF iSetupProgress++ ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Franklin for mission stage being loaded due to skip or replay.") #ENDIF ENDIF ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Trevor for mission stage being loaded due to skip or replay.") #ENDIF ENDIF ENDIF ENDIF iSetupProgress++ BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Franklin for mission stage being loaded.") #ENDIF psTrevor.PedIndex = sSelectorPeds.pedID[SELECTOR_PED_TREVOR] ENDIF ENDIF iSetupProgress++ BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Performing script controlled hotswap to Trevor for mission stage being loaded.") #ENDIF psFranklin.PedIndex = sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] ENDIF ENDIF iSetupProgress++ BREAK CASE MISSION_STAGE_END IF ( bEndCoverPointCreated = FALSE ) EndCoverPointIndex = ADD_COVER_POINT(<<1176.6774, -3048.6213, 4.9016>>, 83.0167, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_90, TRUE) bEndCoverPointCreated = TRUE ENDIF iSetupProgress++ BREAK DEFAULT iSetupProgress++ BREAK ENDSWITCH ENDIF IF ( iSetupProgress = 6 ) //handle dialogue setup, cellphone and taxi hailing REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 1) //Franklin REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 2) //Trevor REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 3) //Lamar REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 4) //Balla 1/Balla 4/Girl REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 5) //Balla 2/Balla 5 REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 6) //Balla 3/Balla 6 REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 7) //Balla 7/Mc Clip REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 8) //Police/Film Crew SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO CASE MISSION_STAGE_CUTSCENE_DEAL //do nothing for mocap cutscenes BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES CASE MISSION_STAGE_SPEEDOPHILE_RIDE CASE MISSION_STAGE_LOSE_COPS CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN CASE MISSION_STAGE_END IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 1, GET_PED_INDEX(CHAR_FRANKLIN), "FRANKLIN") ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 2, GET_PED_INDEX(CHAR_TREVOR), "TREVOR") ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 3, psLamar.PedIndex, "LAMAR") ENDIF DISABLE_CELLPHONE(FALSE) DISABLE_TAXI_HAILING(TRUE) SUPPRESS_EMERGENCY_CALLS() BREAK ENDSWITCH SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES CASE MISSION_STAGE_SPEEDOPHILE_RIDE CASE MISSION_STAGE_LOSE_COPS ALLOW_DIALOGUE_IN_WATER(TRUE) BREAK DEFAULT ALLOW_DIALOGUE_IN_WATER(FALSE) BREAK ENDSWITCH iSetupProgress++ ENDIF //handle dispatch services and ped population and wanted depending on current mission stage //run this each time new mission stage needs to be loaded IF ( iSetupProgress = 7 ) SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_UP, FALSE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_DOWN, FALSE) SWITCH eStage CASE MISSION_STAGE_CUTSCENE_INTRO CLEAR_AREA(vGroveStreet, 250.0, TRUE) CLEAR_AREA_OF_VEHICLES(vGroveStreet, 250.0) //enable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) SET_WANTED_LEVEL_MULTIPLIER(1.0) SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) IF ( bStageReplayed = TRUE OR bStageSkippedTo = TRUE ) SETUP_ROADS_IN_GROVE_STREET(TRUE, iGroveStreetSetup) ENDIF BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL CLEAR_AREA(vGroveStreet, 300.0, TRUE) CLEAR_AREA_OF_VEHICLES(vGroveStreet, 300.0) //enable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) SET_WANTED_LEVEL_MULTIPLIER(1.0) SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_RANDOM_TRAINS(TRUE) IF ( bStageReplayed = TRUE OR bStageSkippedTo = TRUE ) SETUP_ROADS_IN_GROVE_STREET(TRUE, iGroveStreetSetup) ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DEAL CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES #IF IS_DEBUG_BUILD CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE CASE MISSION_STAGE_DEBUG_RECORD_CHASE #ENDIF SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_SHOOTING) BREAK ENDSWITCH //disable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) SET_WANTED_LEVEL_MULTIPLIER(0.0) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) IF ( eStage = MISSION_STAGE_RUN_TO_SPEEDOPHILES ) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) ENDIF SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) ENDIF SET_PED_POPULATION_BUDGET(0) SET_VEHICLE_POPULATION_BUDGET(0) SET_RANDOM_TRAINS(FALSE) IF ( bStageReplayed = TRUE OR bStageSkippedTo = TRUE ) SETUP_ROADS_IN_GROVE_STREET(TRUE, iGroveStreetSetup) ENDIF IF ( ScenarioBlockingArea5 = NULL ) ScenarioBlockingArea5 = CREATE_SCENARIO_BLOCKING_AREA(<< 82.898, -1949.781, 19.79 >>, << 5000.0, 5000.0, 96.0 >>) ENDIF DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_UP, TRUE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_DOWN, TRUE) BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE //disable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) SET_WANTED_LEVEL_MULTIPLIER(0.0) IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) ENDIF SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_RANDOM_TRAINS(FALSE) IF ( bStageReplayed = TRUE OR bStageSkippedTo = TRUE ) SETUP_ROADS_IN_GROVE_STREET(TRUE, iGroveStreetSetup) ENDIF IF ( ScenarioBlockingArea5 = NULL ) ScenarioBlockingArea5 = CREATE_SCENARIO_BLOCKING_AREA(<< 82.898, -1949.781, 19.79 >>, << 5000.0, 5000.0, 64.0 >>) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(psLamar.PedIndex, KNOCKOFFVEHICLE_HARD) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), KNOCKOFFVEHICLE_HARD) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), KNOCKOFFVEHICLE_HARD) ENDIF DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_UP, TRUE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_DOWN, TRUE) BREAK CASE MISSION_STAGE_LOSE_COPS //disable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) //enable helicopters only ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) SET_WANTED_LEVEL_MULTIPLIER(0.25) SET_VEHICLE_GENERATOR_AREA_OF_INTEREST(<< 1133.4, -2512.1, 33.2>>, 100.0) //Lamar's side SET_VEHICLE_GENERATOR_AREA_OF_INTEREST(<< 769.37, -2954.11, 4.84 >>, 100.0) //Franklin's/Trevor's side iVehCombatArea1 = ADD_VEHICLE_COMBAT_ANGLED_AVOIDANCE_AREA(<<1034.899414,-2649.698242,-2.152824>>, <<1206.040039,-2625.697510,46.102722>>, 96.0) iVehCombatArea2 = ADD_VEHICLE_COMBAT_ANGLED_AVOIDANCE_AREA(<<1170.989380,-2583.810791,-1.248177>>, <<1184.574097,-2652.445068,42.043415>>, 32.0) iArea1 = ADD_DISPATCH_SPAWN_ANGLED_BLOCKING_AREA(<<886.251648,-2602.161377,-2.892773>>, <<1278.528931,-2703.511963,17.073622>>, 72.0) iArea2 = ADD_DISPATCH_SPAWN_ANGLED_BLOCKING_AREA(<<1175.262939,-2587.421387,-0.919907>>, <<1188.792358,-2672.672852,39.559231>>, 24.0) IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) INSTANTLY_FILL_VEHICLE_POPULATION() ENDIF SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_RANDOM_TRAINS(TRUE) ePlayerBuddy = PLAYER_BUDDY_NONE REMOVE_SCENARIO_BLOCKING_AREAS() IF NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(psLamar.PedIndex, KNOCKOFFVEHICLE_HARD) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), KNOCKOFFVEHICLE_HARD) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) SET_PED_CAN_BE_KNOCKED_OFF_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), KNOCKOFFVEHICLE_HARD) ENDIF DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_UP, TRUE) DISABLE_CHEAT(CHEAT_TYPE_WANTED_LEVEL_DOWN, TRUE) BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN CASE MISSION_STAGE_END //enable dispatch services ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) SET_WANTED_LEVEL_MULTIPLIER(1.0) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_RANDOM_TRAINS(TRUE) REMOVE_SCENARIO_BLOCKING_AREAS() SET_VEHICLE_GENERATOR_AREA_OF_INTEREST(<<1145.4602, -3116.7410, 4.8235>>, 100.0) BREAK ENDSWITCH iSetupProgress++ ENDIF IF ( iSetupProgress = 8 ) //handle load scenes IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) IF ( bStageReplayed = TRUE ) //end setup replay when mission stage is being retried END_REPLAY_SETUP(NULL, DEFAULT, FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling END_REPLAY_SETUP().") #ENDIF ELSE //run a new load scene when mission stage is debug skipped to NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 20.0) #IF IS_DEBUG_BUILD VECTOR vNewLoadScenePosition = GET_ENTITY_COORDS(PLAYER_PED_ID()) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling NEW_LOAD_SCENE_START_SPHERE() at coordinates ", vNewLoadScenePosition, " for mission replay or stage skip. This might take a while to load.") #ENDIF INT iLoadSceneTimer = GET_GAME_TIMER() + 15000 WHILE IS_NEW_LOAD_SCENE_ACTIVE() AND NOT IS_NEW_LOAD_SCENE_LOADED() AND GET_GAME_TIMER() < iLoadSceneTimer #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Load scene timer: ", iLoadSceneTimer - GET_GAME_TIMER(), ".") #ENDIF WAIT(0) ENDWHILE NEW_LOAD_SCENE_STOP() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling NEW_LOAD_SCENE_STOP().") #ENDIF ENDIF ENDIF iSetupProgress++ ENDIF IF ( iSetupProgress = 9 ) IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) //stage was skipped to or is being replayed SWITCH eStage CASE MISSION_STAGE_SPEEDOPHILE_RIDE CASE MISSION_STAGE_LOSE_COPS IF ( g_iFranklin1VehicleChoice = 0 ) psTrevor.ePedVehicle = SPEEDOPHILE_1 psLamar.ePedVehicle = SPEEDOPHILE_2 psFranklin.ePedVehicle = SPEEDOPHILE_3 vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_FRONT vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_RIGHT vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_LEFT ELSE GET_SPEEDOPHILE_POSITIONS_FROM_INT(g_iFranklin1VehicleChoice, psLamar.ePedVehicle, psFranklin.ePedVehicle, psTrevor.ePedVehicle) vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_FRONT vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_RIGHT vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_LEFT ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) AND NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_INTO_VEHICLE(psLamar.PedIndex, vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, VS_DRIVER) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) SET_PED_INTO_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, VS_DRIVER) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) SET_PED_INTO_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, VS_DRIVER) ENDIF BREAK ENDSWITCH ENDIF iSetupProgress++ ENDIF IF ( iSetupProgress = 10 ) //handle setting up tasks after scene loads IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) SWITCH eStage CASE MISSION_STAGE_DRIVE_TO_DEAL IF HAS_ANIM_DICT_LOADED("missfra1_tovan") IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) iVanEnterSceneID = CREATE_SYNCHRONIZED_SCENE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iVanEnterSceneID, vsVan.VehicleIndex, -1) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iVanEnterSceneID, FALSE) PLAY_SYNCHRONIZED_ENTITY_ANIM(vsVan.VehicleIndex, iVanEnterSceneID, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_BLOCK_MOVER_UPDATE | SYNCED_SCENE_VEHICLE_ALLOW_PLAYER_ENTRY)) //PLAY_ENTITY_ANIM(vsVan.VehicleIndex, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, // FALSE, FALSE, FALSE, 0, ENUM_TO_INT(AF_USE_KINEMATIC_PHYSICS)) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(vsVan.VehicleIndex) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_PLAYER_IMPACT) TASK_SYNCHRONIZED_SCENE(psChop.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_chop", 1, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_MELEE | RBF_PLAYER_IMPACT | RBF_BULLET_IMPACT) FORCE_PED_AI_AND_ANIMATION_UPDATE(psChop.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_PLAYER_IMPACT) TASK_SYNCHRONIZED_SCENE(psTrevor.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_lam", 1, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_MELEE | RBF_PLAYER_IMPACT | RBF_BULLET_IMPACT) FORCE_PED_AI_AND_ANIMATION_UPDATE(psTrevor.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) ENDIF ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) TASK_ENTER_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVE_WALK, ECF_USE_RIGHT_ENTRY | ECF_RESUME_IF_INTERRUPTED) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_WALK) ENDIF ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SEQUENCE_INDEX PlayerPedSequence OPEN_SEQUENCE_TASK(PlayerPedSequence) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.25, -1454.61, 29.48 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.99, -1456.87, 29.41 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -18.12, -1456.95, 29.46 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT) CLOSE_SEQUENCE_TASK(PlayerPedSequence) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerPedSequence) CLEAR_SEQUENCE_TASK(PlayerPedSequence) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK) ENDIF WAIT(500) iSetupProgress++ ENDIF ENDIF ENDIF ELSE REQUEST_ANIM_DICT("missfra1_tovan") ENDIF BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT REQUEST_MODEL(mnBalla) REQUEST_WEAPON_ASSET(WEAPONTYPE_SMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_MICROSMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_PUMPSHOTGUN) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for weapon assets to load for MISSION_STAGE_GROVE_STREET_SHOOTOUT.") #ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) IF HAS_MODEL_LOADED(mnBalla) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_SMG) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_MICROSMG) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_PUMPSHOTGUN) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_ASSAULTRIFLE) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(psLamar.PedIndex) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(GET_PED_INDEX(CHAR_TREVOR)) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(GET_PED_INDEX(CHAR_FRANKLIN)) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Weapon assets loaded for MISSION_STAGE_GROVE_STREET_SHOOTOUT.") #ENDIF IF NOT DOES_ENTITY_EXIST(esGroup1[0].PedIndex) esGroup1[0].PedIndex = CREATE_ENEMY_PED(mnBalla, vGroup1Enemy0Position, fGroup1Enemy0Heading, rgEnemies, WEAPONTYPE_MICROSMG, 125) TASK_AIM_GUN_AT_COORD(esGroup1[0].PedIndex, vGroup1EnemyAimCoords, -1, TRUE) ENDIF IF NOT DOES_ENTITY_EXIST(esGroup1[1].PedIndex) esGroup1[1].PedIndex = CREATE_ENEMY_PED(mnBalla, <<81.7639, -1904.2952, 20.5794>>, 142.1008, rgEnemies, WEAPONTYPE_MICROSMG, 125) ENDIF IF NOT DOES_ENTITY_EXIST(esGroup1[2].PedIndex) esGroup1[2].PedIndex = CREATE_ENEMY_PED(mnBalla, <<79.4749, -1908.1135, 20.3492>>, 169.8566, rgEnemies, WEAPONTYPE_MICROSMG, 125) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) WARP_PED(GET_PED_INDEX(CHAR_FRANKLIN), psFranklin.vPosition, psFranklin.fHeading, FALSE, FALSE, FALSE) GIVE_WEAPON_TO_PED(GET_PED_INDEX(CHAR_FRANKLIN), WEAPONTYPE_SMG, GET_AMMO_IN_PED_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), WEAPONTYPE_SMG) * 2, TRUE) TASK_PUT_PED_DIRECTLY_INTO_COVER(GET_PED_INDEX(CHAR_FRANKLIN), csCoverpoints[0].vPosition, -1, FALSE, 0, TRUE, FALSE, csCoverpoints[0].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) WARP_PED(GET_PED_INDEX(CHAR_TREVOR), psTrevor.vPosition, psTrevor.fHeading, FALSE, FALSE, FALSE) GIVE_WEAPON_TO_PED(GET_PED_INDEX(CHAR_TREVOR), WEAPONTYPE_PUMPSHOTGUN, GET_AMMO_IN_PED_WEAPON(GET_PED_INDEX(CHAR_TREVOR), WEAPONTYPE_PUMPSHOTGUN) * 2, TRUE) TASK_PUT_PED_DIRECTLY_INTO_COVER(GET_PED_INDEX(CHAR_TREVOR), csCoverpoints[2].vPosition, -1, FALSE, 0, TRUE, FALSE, csCoverpoints[2].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_PED_INDEX(CHAR_TREVOR)) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) WARP_PED(psLamar.PedIndex, psLamar.vPosition, psLamar.fHeading, FALSE, FALSE, FALSE) GIVE_WEAPON_TO_PED(psLamar.PedIndex, WEAPONTYPE_ASSAULTRIFLE, INFINITE_AMMO, TRUE) TASK_PUT_PED_DIRECTLY_INTO_COVER(psLamar.PedIndex, csCoverpoints[1].vPosition, -1, FALSE, 0, TRUE, FALSE, csCoverpoints[1].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(psLamar.PedIndex) ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psTrevor, PED_STATE_COMBAT_ON_FOOT) WAIT(500) iSetupProgress++ ENDIF ENDIF BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_WEAPON_ASSET(WEAPONTYPE_SMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_PUMPSHOTGUN) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) IF ( eFranklinsFailWeapon <> WEAPONTYPE_INVALID ) AND ( eFranklinsFailWeapon <> WEAPONTYPE_UNARMED ) REQUEST_WEAPON_ASSET(eFranklinsFailWeapon) ENDIF IF ( eTrevorsFailWeapon <> WEAPONTYPE_INVALID ) AND ( eTrevorsFailWeapon <> WEAPONTYPE_UNARMED ) REQUEST_WEAPON_ASSET(eTrevorsFailWeapon) ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for weapon assets to load for MISSION_STAGE_RUN_TO_SPEEDOPHILES.") #ENDIF IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_SMG) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_PUMPSHOTGUN) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_ASSAULTRIFLE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Weapon assets loaded for MISSION_STAGE_RUN_TO_SPEEDOPHILES.") #ENDIF INT i vsStreetCopCars[COPCAR_STREET_1].VehicleIndex = CREATE_VEHICLE(POLICE3, <<-26.7525, -1827.2965, 24.8785>>, 284.6982) vsStreetCopCars[COPCAR_STREET_2].VehicleIndex = CREATE_VEHICLE(POLICE3, <<-36.1803, -1829.1926, 24.9183>>, 161.8743) vsStreetCopCars[COPCAR_STREET_3].VehicleIndex = CREATE_VEHICLE(POLICE3, <<-19.9758, -1802.6586, 26.1321>>, 200.3464) REPEAT 3 i SET_VEHICLE_SIREN(vsStreetCopCars[i].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsStreetCopCars[i].VehicleIndex, FALSE) ENDREPEAT psStreetCopCar1Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar1Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) psStreetCopCar2Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar2Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) psStreetCopCar3Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar3Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) bCopWaveSpawned = TRUE GO_TO_PED_STATE(psStreetCopCar1Cops[0], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psStreetCopCar1Cops[1], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psStreetCopCar2Cops[0], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psStreetCopCar2Cops[1], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psStreetCopCar3Cops[0], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psStreetCopCar3Cops[1], PED_STATE_COMBAT_ON_FOOT) SET_MODEL_AS_NO_LONGER_NEEDED(POLICE) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) //check for Trevor's fail weapon IF ( eTrevorsFailWeapon = WEAPONTYPE_INVALID ) OR ( eTrevorsFailWeapon = WEAPONTYPE_UNARMED ) eTrevorsFailWeapon = GET_BEST_PED_WEAPON(GET_PED_INDEX(CHAR_TREVOR), TRUE) IF ( eTrevorsFailWeapon = WEAPONTYPE_INVALID ) OR ( eTrevorsFailWeapon = WEAPONTYPE_UNARMED ) eTrevorsFailWeapon = WEAPONTYPE_PUMPSHOTGUN //if fail weapon is invalid or unarmed, give scripted weapon ENDIF ENDIF INT iAmmo //check for ammo in currently given weapon, add 2 clips if player has no ammo (replay_controller stores ammo on checkpoints) IF ( GET_AMMO_IN_PED_WEAPON(GET_PED_INDEX(CHAR_TREVOR), eTrevorsFailWeapon) < GET_MAX_AMMO_IN_CLIP(GET_PED_INDEX(CHAR_TREVOR), eTrevorsFailWeapon) ) iAmmo = GET_MAX_AMMO_IN_CLIP(GET_PED_INDEX(CHAR_TREVOR), eTrevorsFailWeapon) * 2 ENDIF //give fail weapon (or specific script weapon) to Trevor, adds 0 if Trevor had more than 1 clip of bullets GIVE_WEAPON_TO_PED(GET_PED_INDEX(CHAR_TREVOR), eTrevorsFailWeapon, iAmmo, TRUE) ENDIF IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) //check for Franklin's fail weapon IF ( eFranklinsFailWeapon = WEAPONTYPE_INVALID ) OR ( eFranklinsFailWeapon = WEAPONTYPE_UNARMED ) eFranklinsFailWeapon = GET_BEST_PED_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) IF ( eFranklinsFailWeapon = WEAPONTYPE_INVALID ) OR ( eFranklinsFailWeapon = WEAPONTYPE_UNARMED ) eFranklinsFailWeapon = WEAPONTYPE_SMG //if fail weapon is invalid or unarmed, give scripted weapon ENDIF ENDIF INT iAmmo //check for ammo in currently given weapon, add 2 clips if player has no ammo (replay_controller stores ammo on checkpoints) IF ( GET_AMMO_IN_PED_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), eFranklinsFailWeapon) < GET_MAX_AMMO_IN_CLIP(GET_PED_INDEX(CHAR_FRANKLIN), eFranklinsFailWeapon) ) iAmmo = GET_MAX_AMMO_IN_CLIP(GET_PED_INDEX(CHAR_FRANKLIN), eFranklinsFailWeapon) * 2 ENDIF //give fail weapon (or specific script weapon) to Franklin, adds 0 if Franklin had more than 1 clip of bullets GIVE_WEAPON_TO_PED(GET_PED_INDEX(CHAR_FRANKLIN), eFranklinsFailWeapon, iAmmo, TRUE) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) GIVE_WEAPON_TO_PED(psLamar.PedIndex, WEAPONTYPE_ASSAULTRIFLE, INFINITE_AMMO, TRUE) TASK_FOLLOW_NAV_MESH_TO_COORD(psLamar.PedIndex, <<-115.4358, -1861.7389, 1.2639>>, PEDMOVE_RUN) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_RUN) SET_PED_USING_ACTION_MODE(psLamar.PedIndex, TRUE) ENDIF IF NOT IS_PED_INJURED(GET_OTHER_PLAYER_PED_INDEX()) TASK_FOLLOW_NAV_MESH_TO_COORD(GET_OTHER_PLAYER_PED_INDEX(), <<-114.8476, -1864.9554, 0.4774>>, PEDMOVE_RUN) FORCE_PED_MOTION_STATE(GET_OTHER_PLAYER_PED_INDEX(), MS_ON_FOOT_RUN) SET_PED_USING_ACTION_MODE(GET_OTHER_PLAYER_PED_INDEX(), TRUE) ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_RUN) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_RUN, 3000) ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_RUNNING_TO_RIVER) GO_TO_PED_STATE(psTrevor, PED_STATE_RUNNING_TO_RIVER) WAIT(500) iSetupProgress++ ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE REQUEST_MODEL(mnBalla) REQUEST_MODEL(vsEnemyLeftChaseCar.ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber, sVehicleRecordingsFile) IF ( g_bFranklin1GirlFled = FALSE AND DOES_ENTITY_EXIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex)) OR ( g_bFranklin1GirlFled = TRUE ) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_STARTING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psTrevor, PED_STATE_STARTING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psFranklin, PED_STATE_STARTING_RECORDING_PLAYBACK) WAIT(500) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) iSetupProgress++ ENDIF ELSE IF ( g_bFranklin1GirlFled = FALSE ) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_JACKEDGIRL], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsSpeedophiles[0].VehicleIndex, VS_FRONT_RIGHT) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_HEAD, 1, 0, 0) //(head) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_HAIR, 1, 1, 0) //(hair) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_TORSO, 0, 5, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_LEG, 0, 5, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_SPECIAL, 1, 0, 0) //(accs) #IF IS_DEBUG_BUILD psFilmCrew[FCP_JACKEDGIRL].sDebugName = "FCP_JACKEDGIRL" #ENDIF GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_SITTING_IN_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE MISSION_STAGE_LOSE_COPS REQUEST_MODEL(POLMAV) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_MODEL(S_M_Y_SWAT_01) REQUEST_VEHICLE_RECORDING(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLMAV) AND HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_MODEL_LOADED(S_M_Y_SWAT_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber, sVehicleRecordingsFile) //setup police helicopter INT i vsPoliceHeli.VehicleIndex = CREATE_VEHICLE(POLMAV, vsPoliceHeli.vPosition, vsPoliceHeli.fHeading) psSwat[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_DRIVER) psSwat[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_BACK_LEFT) psSwat[2].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_BACK_RIGHT) FOR i = 0 TO 2 GIVE_WEAPON_TO_PED(psSwat[i].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO, FALSE) GIVE_WEAPON_TO_PED(psSwat[i].PedIndex, WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, FALSE) SET_PED_HEARING_RANGE(psSwat[i].PedIndex, 150) SET_PED_SEEING_RANGE(psSwat[i].PedIndex, 150) SET_PED_ID_RANGE(psSwat[i].PedIndex, 150) SET_PED_HIGHLY_PERCEPTIVE(psSwat[i].PedIndex, TRUE) SET_PED_SHOOT_RATE(psSwat[i].PedIndex, 50) SET_PED_ACCURACY(psSwat[i].PedIndex, 5) ENDFOR SET_VEHICLE_LIVERY(vsPoliceHeli.VehicleIndex, 0) START_PLAYBACK_RECORDED_VEHICLE(vsPoliceHeli.VehicleIndex, vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsPoliceHeli.VehicleIndex, 51025.0) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsPoliceHeli.VehicleIndex, TRUE) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsPoliceHeli.VehicleIndex) SET_HELI_BLADES_FULL_SPEED(vsPoliceHeli.VehicleIndex) //setup police squads by the river vsRiverCopCars[3].VehicleIndex = CREATE_VEHICLE(POLICE3, << 625.9272, -2607.0547, 5.0864 >>, 286.7750) psRiverCopCar3Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsRiverCopCars[3].VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) psRiverCopCar3Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsRiverCopCars[3].VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) SET_VEHICLE_SIREN(vsRiverCopCars[3].VehicleIndex, TRUE) //give weapons to cop peds SET_PED_AS_COP(psRiverCopCar3Cops[0].PedIndex) SET_PED_AS_COP(psRiverCopCar3Cops[1].PedIndex) GIVE_WEAPON_TO_PED(psRiverCopCar3Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(psRiverCopCar3Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) vsRiverCopCars[4].VehicleIndex = CREATE_VEHICLE(POLICE3, vsRiverCopCars[4].vPosition, vsRiverCopCars[4].fHeading) psRiverCopCar4Cops[0].PedIndex = CREATE_PED(PEDTYPE_COP, S_M_Y_COP_01, <<693.4204, -2529.8364, 11.4264>>, 115.3417) psRiverCopCar4Cops[1].PedIndex = CREATE_PED(PEDTYPE_COP, S_M_Y_COP_01, <<691.3856, -2529.0046, 11.4266>>, 103.4375) //give weapons to cop peds GIVE_WEAPON_TO_PED(psRiverCopCar4Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(psRiverCopCar4Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_VEHICLE_SIREN(vsRiverCopCars[4].VehicleIndex, TRUE) SET_MODEL_AS_NO_LONGER_NEEDED(POLMAV) SET_MODEL_AS_NO_LONGER_NEEDED(POLICE3) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_SWAT_01) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, 0.8) vsSpeedophiles[psLamar.ePedVehicle].fPlaybackSpeed = 0.8 FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 0.8) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 0.8) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) ENDIF GO_TO_PED_STATE(psSwat[0], PED_STATE_RECORDING_PLAYBACK) GO_TO_PED_STATE(psRiverCopCar0Cops[0], PED_STATE_FLEEING) GO_TO_PED_STATE(psRiverCopCar1Cops[0], PED_STATE_FLEEING) GO_TO_PED_STATE(psRiverCopCar2Cops[0], PED_STATE_FLEEING) GO_TO_PED_STATE(psRiverCopCar3Cops[0], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psRiverCopCar4Cops[0], PED_STATE_COMBAT_ON_FOOT) GO_TO_PED_STATE(psLamar, PED_STATE_ENDING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psFranklin, PED_STATE_ENDING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psTrevor, PED_STATE_ENDING_RECORDING_PLAYBACK) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) UPDATE_WANTED_POSITION_THIS_FRAME(PLAYER_ID()) ENDIF SET_DISPATCH_COPS_FOR_PLAYER(PLAYER_ID(), TRUE) SET_CREATE_RANDOM_COPS(TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) WAIT(500) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) iSetupProgress++ ENDIF BREAK DEFAULT iSetupProgress++ BREAK ENDSWITCH ELSE iSetupProgress++ ENDIF ENDIF IF ( iSetupProgress = 11 ) //handle music events for mission stage retry and handle fade in when screen was faded out IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE ) IF ( bGameplayCameraSet = FALSE ) SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT SET_GAMEPLAY_CAM_RELATIVE_PITCH(-9.077) SET_GAMEPLAY_CAM_RELATIVE_HEADING(17.0 - GET_ENTITY_HEADING(PLAYER_PED_ID())) BREAK DEFAULT SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) BREAK ENDSWITCH bGameplayCameraSet = TRUE ENDIF SWITCH eStage //handle music events CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT TRIGGER_MUSIC_EVENT("FRA1_FIGHT_RESTART") BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES TRIGGER_MUSIC_EVENT("FRA1_FIGHT_LEAVE_RESTART") BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE CASE MISSION_STAGE_LOSE_COPS TRIGGER_MUSIC_EVENT("FRA1_SPEED_RESTART") BREAK ENDSWITCH SWITCH eStage //handle screen fade in CASE MISSION_STAGE_CUTSCENE_INTRO CASE MISSION_STAGE_CUTSCENE_DEAL CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN CASE MISSION_STAGE_END #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Halting loading screen fade in for skip to a mission stage that will fade the screen in.") #ENDIF BREAK DEFAULT #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling a loading screen fade in.") #ENDIF IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF BREAK ENDSWITCH ENDIF SWITCH eStage //handle audio scenes CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_SHOOTOUT_MAIN") START_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_MAIN") ENDIF BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_APPROACH_RIVER") START_AUDIO_SCENE("FRANKLIN_1_APPROACH_RIVER") ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_START") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_START") ENDIF BREAK CASE MISSION_STAGE_LOSE_COPS IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_HELI_ESCAPE") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_HELI_ESCAPE") ENDIF BREAK ENDSWITCH iSetupProgress++ ENDIF IF ( iSetupProgress = 12 ) //handle setting of mid-mission replay checkpoints SWITCH eStage CASE MISSION_STAGE_DRIVE_TO_DEAL SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_DEAL), "DRIVE TO DEAL", FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_DEAL), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_GROVE_STREET_SHOOTOUT), "GROVE STREET SHOOTOUT", FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_GROVE_STREET_SHOOTOUT), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_RUN_TO_SPEEDOPHILES), "RUN TO SPEEDOPHILES", FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_RUN_TO_SPEEDOPHILES), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_SPEEDOPHILE_RIDE), "SPEEDOPHILE RIDE", FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_SPEEDOPHILE_RIDE), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF BREAK CASE MISSION_STAGE_LOSE_COPS SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_LOSE_COPS), "LOSE COPS", TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_LOSE_COPS), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF BREAK ENDSWITCH iSetupProgress++ ENDIF IF ( iSetupProgress = 13 ) SWITCH eStage CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES CASE MISSION_STAGE_SPEEDOPHILE_RIDE bAllowHotSwap = TRUE BREAK DEFAULT bAllowHotSwap = FALSE BREAK ENDSWITCH iSetupProgress++ ENDIF IF ( iSetupProgress = 14 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission stage loading for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".") #ENDIF //reset the stage reset flag #IF IS_DEBUG_BUILD bStageResetFlag = FALSE #ENDIF bStageLoaded = TRUE bStageReplayed = FALSE bStageSkippedTo = FALSE SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) iSetupProgress++ ENDIF IF ( iSetupProgress = 15 ) RETURN TRUE ENDIF RETURN FALSE ENDFUNC //|======================== END MISSION STAGE LOADINGS PROCEDURES ========================| //|====================== VEHICLE RECORDING PROCEDURES & FUNCTIONS =======================| /// PURPOSE: /// Returns the percentage progress of a vehicle recording. /// PARAMS: /// VehicleIndex - Vehicle index to get the vehicle recording percentage. /// RETURNS: /// Float number from 0.0 to 100.0 representing percentage of vehicle recording in progress. /// AUTHOR: /// Ross Wallace FUNC FLOAT GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(VEHICLE_INDEX VehicleIndex #IF IS_DEBUG_BUILD, BOOL bPrintRecordingTime = FALSE #ENDIF) IF DOES_ENTITY_EXIST(VehicleIndex) AND IS_VEHICLE_DRIVEABLE(VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(VehicleIndex) RECORDING_ID RecordingID = GET_CURRENT_PLAYBACK_FOR_VEHICLE(VehicleIndex) #IF IS_DEBUG_BUILD INT iPercentage = ROUND( 100.0 * ( GET_TIME_POSITION_IN_RECORDING(VehicleIndex) / GET_TOTAL_DURATION_OF_VEHICLE_RECORDING_ID(RecordingID) ) ) TEXT_LABEL_63 debugName = GET_VEHICLE_RECORDING_NAME(RecordingID) debugName += ":" debugName += iPercentage SET_VEHICLE_NAME_DEBUG(VehicleIndex, debugName) //PRINTLN(GET_THIS_SCRIPT_NAME(), ": Recording ", GET_VEHICLE_RECORDING_NAME(RecordingID), " playback percentage ", 100.0 * ( GET_TIME_POSITION_IN_RECORDING(VehicleIndex) / GET_TOTAL_DURATION_OF_VEHICLE_RECORDING_ID(RecordingID) ) ) #ENDIF #IF IS_DEBUG_BUILD IF ( bPrintRecordingTime = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Recording ", GET_VEHICLE_RECORDING_NAME(RecordingID), " time is ", GET_TIME_POSITION_IN_RECORDING(VehicleIndex), ".") ENDIF #ENDIF RETURN ( 100.0 * ( GET_TIME_POSITION_IN_RECORDING(VehicleIndex) / GET_TOTAL_DURATION_OF_VEHICLE_RECORDING_ID(RecordingID) ) ) ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE_PROGRESS: Playback not going on for vehicle.") #ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE_PROGRESS: Vehicle does not exist or is not driveable.") #ENDIF ENDIF RETURN -1.0 ENDFUNC PROC START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(VEH_STRUCT vsCar, STRING sFileName, FLOAT fPlaybackSpeed, BOOL bPaused = FALSE, FLOAT fTime = 0.0, BOOL bSkipToVehiclePosition = FALSE, BOOL bUseFlags = FALSE, INT iFlags = SWITCH_ON_PLAYER_VEHICLE_IMPACT) IF IS_VEHICLE_DRIVEABLE(vsCar.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsCar.VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsCar.iRecordingNumber, sFileName) SET_VEHICLE_ENGINE_ON(vsCar.VehicleIndex, TRUE, TRUE) IF ( bUseFlags = FALSE ) START_PLAYBACK_RECORDED_VEHICLE(vsCar.VehicleIndex, vsCar.iRecordingNumber, sFileName) ELIF ( bUseFlags = TRUE ) START_PLAYBACK_RECORDED_VEHICLE_WITH_FLAGS(vsCar.VehicleIndex, vsCar.iRecordingNumber, sFileName, iFlags) ENDIF IF ( fTime > 0.0 ) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsCar.VehicleIndex, fTime) ELIF ( bSkipToVehiclePosition = TRUE ) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsCar.VehicleIndex, GET_CLOSEST_TIME_POSITION_IN_RECORDING_TO_POINT(GET_ENTITY_COORDS(vsCar.VehicleIndex), vsCar.iRecordingNumber, sFileName, 16)) ENDIF SET_PLAYBACK_SPEED(vsCar.VehicleIndex, fPlaybackSpeed) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle recording ", sFileName, " number ", vsCar.iRecordingNumber, " for vehicle ", GET_MODEL_NAME_FOR_DEBUG(vsCar.ModelName), " started with playback speed ", fPlaybackSpeed, ".") #ENDIF IF ( bPaused = TRUE ) PAUSE_PLAYBACK_RECORDED_VEHICLE(vsCar.VehicleIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle recording ", sFileName, " number ", vsCar.iRecordingNumber, " for vehicle ", GET_MODEL_NAME_FOR_DEBUG(vsCar.ModelName), " paused.") #ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle recording number ", vsCar.iRecordingNumber, " for vehicle ", GET_MODEL_NAME_FOR_DEBUG(vsCar.ModelName), " is not loaded.") #ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Starts a vehicle recording using AI if it is not in progress already. /// PARAMS: /// vsVehicle - VEH_STRUCT containing details of the vehicle to play recording for (stores recording number as well). /// sFileName - Vehicle recording file name. /// fCruiseSpeed - Speed of the recording playback. PROC START_VEHICLE_RECORDING_PLAYBACK_USING_AI_FOR_VEHICLE(VEH_STRUCT vsVehicle, STRING sFileName, FLOAT fCruiseSpeed = 10.0, DRIVINGMODE eDrivingMode = DRIVINGMODE_AVOIDCARS) IF IS_VEHICLE_DRIVEABLE(vsVehicle.VehicleIndex) IF NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsVehicle.VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsVehicle.iRecordingNumber, sFileName) START_PLAYBACK_RECORDED_VEHICLE_USING_AI(vsVehicle.VehicleIndex, vsVehicle.iRecordingNumber, sFileName, fCruiseSpeed, eDrivingMode) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle recording ", sFileName, " number ", vsVehicle.iRecordingNumber, " for vehicle ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " started using AI with cruise speed ", fCruiseSpeed, ".") #ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle recording number ", vsVehicle.iRecordingNumber, " for vehicle ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " is not loaded.") #ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks if a recording playback is going on for a vehicle or vehicle driver was killed when recording playback was going on for vehicle. /// PARAMS: /// VehicleIndex - Vehicle to check for playback or dead driver during playback. /// fPlaybackPercentage - Outputs the playback percentage going on for the specified vehicle. /// bDriverDead - Outputs if the driver of the specified vehicle was killed when playback was going of the vehicle. /// RETURNS: /// TRUE if recording playback is going on for vehicle or the driver was killed during an ongoing playback, FALSE if otherwise. FUNC BOOL IS_VEHICLE_RECORDING_PLAYBACK_RUNNING_OR_DRIVER_DEAD(VEHICLE_INDEX VehicleIndex, FLOAT &fPlaybackPercentage, BOOL &bDriverDead, BOOL bStopPlaybackOnDriversDeath = TRUE) IF DOES_ENTITY_EXIST(VehicleIndex) IF IS_VEHICLE_DRIVEABLE(VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(VehicleIndex) fPlaybackPercentage = GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(VehicleIndex) PED_INDEX DriverPedIndex DriverPedIndex = GET_PED_IN_VEHICLE_SEAT(VehicleIndex, VS_DRIVER) IF DOES_ENTITY_EXIST(DriverPedIndex) IF IS_PED_INJURED(DriverPedIndex) bDriverDead = TRUE IF ( bStopPlaybackOnDriversDeath = TRUE ) STOP_PLAYBACK_RECORDED_VEHICLE(VehicleIndex) ENDIF ENDIF ENDIF RETURN TRUE ELSE IF ( bDriverDead = TRUE ) RETURN TRUE ELSE RETURN FALSE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC PROC CONVERGE_VALUE(FLOAT &val, FLOAT fDesiredVal, FLOAT fAmountToConverge, BOOL bAdjustForFramerate = FALSE) IF val != fDesiredVal FLOAT fConvergeAmountThisFrame = fAmountToConverge IF bAdjustForFramerate fConvergeAmountThisFrame = 0.0 +@ (fAmountToConverge * 30.0) ENDIF IF val - fDesiredVal > fConvergeAmountThisFrame val -= fConvergeAmountThisFrame ELIF val - fDesiredVal < -fConvergeAmountThisFrame val += fConvergeAmountThisFrame ELSE val = fDesiredVal ENDIF ENDIF ENDPROC PROC RUBBER_BAND_PLAYBACK_SPEED_FOR_TRIGGER_VEHICLE(VEHICLE_INDEX TriggerVehicleIndex, VEHICLE_INDEX VehicleIndex, FLOAT &fCurrentPlaybackSpeed, FLOAT fCurrentPlaybackTime #IF IS_DEBUG_BUILD, BOOL bPrintOutput = FALSE, STRING sTriggerVehicleDebugName = NULL, STRING sVehicleDebugName = NULL #ENDIF) IF IS_VEHICLE_DRIVEABLE(TriggerVehicleIndex) AND IS_VEHICLE_DRIVEABLE(VehicleIndex) VECTOR vTriggerVehiclePosition = GET_ENTITY_COORDS(TriggerVehicleIndex) VECTOR vVehiclePosition = GET_ENTITY_COORDS(VehicleIndex) FLOAT fDistance = GET_DISTANCE_BETWEEN_COORDS(vTriggerVehiclePosition, vVehiclePosition) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(TriggerVehicleIndex, GET_STRING_FROM_FLOAT(fDistance), 2.5) #ENDIF FLOAT fCloseDistance = 5.0 FLOAT fIdealDistance = 10.0 FLOAT fMaxDistance = 17.5 //20.0 FLOAT fSuperMaxDistance = 50.0 FLOAT fDesiredPlaybackSpeed = 1.0 VECTOR vOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(TriggerVehicleIndex, vVehiclePosition) IF ( vOffset.y > 1.0 ) //trigger vehicle is behind the vehicle, need to increase recording playback speed #IF IS_DEBUG_BUILD IF ( bPrintOutput = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": ", sTriggerVehicleDebugName, " vehicle is behind ", sVehicleDebugName, " vehicle.") ENDIF #ENDIF IF ( fDistance > fSuperMaxDistance ) fDesiredPlaybackSpeed = 5.0 ELIF ( fDistance > fMaxDistance ) fDesiredPlaybackSpeed = 4.0 ELIF ( fDistance > fIdealDistance ) fDesiredPlaybackSpeed = 3.0 ELSE fDesiredPlaybackSpeed = 2.5 ENDIF ELSE //trigger vehicle is front of the vehicle, lower recording playback speed when needed #IF IS_DEBUG_BUILD IF ( bPrintOutput = TRUE ) PRINTLN(GET_THIS_SCRIPT_NAME(), ": ", sTriggerVehicleDebugName, " vehicle is in front of ", sVehicleDebugName, " vehicle.") ENDIF #ENDIF IF ( fDistance > fSuperMaxDistance ) IF fCurrentPlaybackTime < 30000.0 fDesiredPlaybackSpeed = 0.5 //0.55 ELSE fDesiredPlaybackSpeed = 0.4 //0.55 ENDIF ELIF ( fDistance > fMaxDistance ) fDesiredPlaybackSpeed = 0.75 //0.8 //1.0 ELIF ( fDistance > fIdealDistance ) fDesiredPlaybackSpeed = 1.0 //1.85 ELIF ( fDistance > fCloseDistance ) fDesiredPlaybackSpeed = 1.25 //1.65 ELSE fDesiredPlaybackSpeed = 1.35 ENDIF ENDIF //if player is trying to cut off buddies by going under the bridge, fix for B*1917187 IF IS_ENTITY_AT_COORD(VehicleIndex, <<347.608215,-2354.942627,9.179920>>,<<36.000000,64.000000,10.000000>>) fDesiredPlaybackSpeed += 0.25 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player vehicle going under the bridge.") ENDIF CONVERGE_VALUE(fCurrentPlaybackSpeed, fDesiredPlaybackSpeed, 0.01, TRUE) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(TriggerVehicleIndex, GET_STRING_FROM_FLOAT(fCurrentPlaybackSpeed), 3.0) #ENDIF ENDIF ENDPROC //|==================== END VEHICLE RECORDING PROCEDURES & FUNCTIONS =====================| //|============================ COMBAT PROCEDURES & FUNCTIONS ============================| FUNC BOOL CAN_GET_CLOSEST_COVERPOINT_FOR_PED(PED_INDEX PedIndex, COVERPOINT_STRUCT &sArray[], COVERPOINT_STRUCT &sResult, BOOL bCheckForPlayerPed = FALSE, FLOAT fPlayerDistance = 3.0, BOOL bPreferCoverPoints = FALSE) INT i = 0 FLOAT fShortestDistance = 1000.0 FLOAT fCurrentDistance = 0.0 INT iClosestCoverpoint = -1 PED_INDEX ClosestPed IF NOT IS_PED_INJURED(PedIndex) FOR i = 0 TO ( COUNT_OF(sArray) - 1 ) IF ( sArray[i].bActive = TRUE ) //check if there is no other ped there IF NOT GET_CLOSEST_PED(sArray[i].vPosition, fPlayerDistance, FALSE, TRUE, ClosestPed) IF ( bPreferCoverPoints = FALSE ) fCurrentDistance = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PedIndex), sArray[i].vPosition) IF ( fCurrentDistance < fShortestDistance) IF ( bCheckForPlayerPed = TRUE) IF ( GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), sArray[i].vPosition) > fPlayerDistance) fShortestDistance = fCurrentDistance iClosestCoverpoint = i ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_GET_CLOSEST_COVERPOINT_FOR_PED() Player ped is within the distance of the selected active coverpoint with index ", i, ".") #ENDIF ENDIF ELIF ( bCheckForPlayerPed = FALSE ) fShortestDistance = fCurrentDistance iClosestCoverpoint = i ENDIF ENDIF ELIF ( bPreferCoverPoints = TRUE ) IF ( sArray[i].bStationary = FALSE ) fCurrentDistance = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PedIndex), sArray[i].vPosition) IF ( fCurrentDistance < fShortestDistance) IF ( bCheckForPlayerPed = TRUE) IF ( GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), sArray[i].vPosition) > fPlayerDistance) fShortestDistance = fCurrentDistance iClosestCoverpoint = i ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_GET_CLOSEST_COVERPOINT_FOR_PED() Player ped is within the distance of the selected active coverpoint with index ", i, ".") #ENDIF ENDIF ELIF ( bCheckForPlayerPed = FALSE ) fShortestDistance = fCurrentDistance iClosestCoverpoint = i ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDFOR ENDIF IF ( iClosestCoverpoint = -1 ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_GET_CLOSEST_COVERPOINT_FOR_PED() No active coverpoints found. Check your scripted coverpoints, fShortestDistance or ped's state.") #ENDIF RETURN FALSE ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_GET_CLOSEST_COVERPOINT_FOR_PED() Found closest active coverpoint from coverpoint array at index ", iClosestCoverpoint, ".") #ENDIF sResult = sArray[iClosestCoverpoint] #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex), sArray[iClosestCoverpoint].vPosition, 0, 255, 0) #ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Finds the closest ped from a specified relationship group for specified ped. /// PARAMS: /// PedIndex - Ped to scan for nearby peds. /// rgHash - Relationship group to search for. /// RETURNS: /// PED_INDEX of the closest ped from the specified relationship group. FUNC PED_INDEX GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(PED_INDEX PedIndex, REL_GROUP_HASH rgHash, INT iProximity = 0, BOOL bOnScreen = FALSE #IF IS_DEBUG_BUILD, INT iRed = 0, INT iGreen = 255, INT iBlue = 0 #ENDIF) PED_INDEX pedArray[16] INT i = 0 IF NOT IS_PED_INJURED(PedIndex) GET_PED_NEARBY_PEDS(PedIndex, pedArray, PEDTYPE_ANIMAL) FOR i = 0 TO ( COUNT_OF(pedArray) - 1 ) IF DOES_ENTITY_EXIST(pedArray[i]) IF NOT IS_PED_INJURED(pedArray[i]) IF ( GET_PED_RELATIONSHIP_GROUP_HASH(pedArray[i]) = rgHash ) IF ( iProximity <= 0) IF ( bOnScreen = TRUE ) IF IS_ENTITY_ON_SCREEN(pedArray[i]) #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex), GET_ENTITY_COORDS(pedArray[i]), iRed, iGreen, iBlue) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Closest nearby ped on screen has index ", i, ".") #ENDIF RETURN pedArray[i] ENDIF ELSE #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex), GET_ENTITY_COORDS(pedArray[i]), iRed, iGreen, iBlue) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Closest nearby ped has index ", i, ".") #ENDIF RETURN pedArray[i] ENDIF ELSE IF ( i + iProximity <= COUNT_OF(pedArray) - 1 ) IF DOES_ENTITY_EXIST(pedArray[i + iProximity]) IF NOT IS_PED_INJURED(pedArray[i + iProximity]) IF ( GET_PED_RELATIONSHIP_GROUP_HASH(pedArray[i + iProximity]) = rgHash ) IF ( bOnScreen = TRUE ) IF IS_ENTITY_ON_SCREEN(pedArray[i + iProximity]) #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex), GET_ENTITY_COORDS(pedArray[i + iProximity]), iRed, iGreen, iBlue) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Nearby ped on screen offset by ", iProximity, " from closest nearby ped has index ", i + iProximity, ".") #ENDIF RETURN pedArray[i + iProximity] ENDIF ELSE #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex), GET_ENTITY_COORDS(pedArray[i + iProximity]), iRed, iGreen, iBlue) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Nearby ped offset by ", iProximity, " from closest nearby ped has index ", i + iProximity, ".") #ENDIF RETURN pedArray[i + iProximity] ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDFOR ENDIF RETURN NULL ENDFUNC PROC INITIALISE_ENEMY_GROUP(ENEMY_STRUCT &esEnemies[], BOOL bAddBlips = TRUE #IF IS_DEBUG_BUILD, STRING sDebugGroupName = NULL #ENDIF) INT i = 0 FOR i = 0 TO ( COUNT_OF(esEnemies) - 1 ) IF NOT IS_PED_INJURED(esEnemies[i].PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esEnemies[i].PedIndex, TRUE) IF ( bAddBlips = TRUE ) IF NOT DOES_BLIP_EXIST(esEnemies[i].BlipIndex) esEnemies[i].BlipIndex = CREATE_BLIP_FOR_ENTITY(esEnemies[i].PedIndex, TRUE) ENDIF ENDIF esEnemies[i].bCreated = TRUE #IF IS_DEBUG_BUILD IF NOT Is_String_Null_Or_Empty(sDebugGroupName) TEXT_LABEL_31 tlDebugName = sDebugGroupName tlDebugName += i SET_PED_NAME_DEBUG(esEnemies[i].PedIndex, tlDebugName) esEnemies[i].sDebugName = tlDebugName PRINTLN(GET_THIS_SCRIPT_NAME(), ": Initialised enemy ped with debug name ", tlDebugName, ".") ENDIF #ENDIF ENDIF ENDFOR ENDPROC PROC TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(ENEMY_STRUCT &esEnemies[]) INT i = 0 FOR i = 0 TO ( COUNT_OF(esEnemies) - 1 ) IF NOT IS_PED_INJURED(esEnemies[i].PedIndex) //can charge changes SET_PED_COMBAT_ATTRIBUTES(esEnemies[i].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(esEnemies[i].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(esEnemies[i].PedIndex, CA_CAN_USE_FRUSTRATED_ADVANCE, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esEnemies[i].PedIndex, 3000) ENDIF ENDFOR ENDPROC PROC UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(ENEMY_STRUCT &array[], BOOL bRenderBlip = TRUE) INT i FOR i = 0 TO ( COUNT_OF(array) - 1 ) IF ( bRenderBlip = TRUE ) UPDATE_AI_PED_BLIP(array[i].PedIndex, array[i].EnemyBlipData, -1, NULL, FALSE, FALSE, 500) ELSE CLEANUP_AI_PED_BLIP(array[i].EnemyBlipData) ENDIF ENDFOR ENDPROC PROC SET_PED_COMBAT_PROPERTIES(PED_INDEX pedIndex, COMBAT_MOVEMENT eCombatMovement, COMBAT_ABILITY_LEVEL eCombatAbilityLevel, COMBAT_RANGE eCombatRange, COMBAT_ATTRIBUTE eCombatAttributes, BOOL bCanRagdoll = TRUE) IF NOT IS_PED_INJURED(pedIndex) SET_PED_TARGET_LOSS_RESPONSE(pedIndex, TLR_NEVER_LOSE_TARGET) SET_PED_COMBAT_MOVEMENT(pedIndex, eCombatMovement) SET_PED_COMBAT_ABILITY(pedIndex, eCombatAbilityLevel) SET_PED_COMBAT_RANGE(pedIndex, eCombatRange) SET_PED_COMBAT_ATTRIBUTES(pedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(pedIndex, CA_DO_DRIVEBYS, FALSE) SET_PED_COMBAT_ATTRIBUTES(pedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_COMBAT_ATTRIBUTES(pedIndex, CA_CAN_INVESTIGATE, FALSE) IF ( eCombatAttributes <> CA_INVALID) SET_PED_COMBAT_ATTRIBUTES(pedIndex, eCombatAttributes, TRUE) ENDIF SET_PED_CAN_RAGDOLL(pedIndex, bCanRagdoll) IF ( bCanRagdoll = FALSE ) SET_PED_CAN_RAGDOLL(pedIndex, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(pedIndex, RBF_PLAYER_BUMP) SET_RAGDOLL_BLOCKING_FLAGS(pedIndex, RBF_PLAYER_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(pedIndex, RBF_BULLET_IMPACT) ENDIF ENDIF ENDPROC PROC SET_PED_DEFENSIVE_AREA_ANGLED(PED_INDEX PedIndex, VECTOR vPosition1, VECTOR vPosition2, FLOAT fWidth, BOOL bGoToCenter = FALSE) IF NOT IS_PED_INJURED(PedIndex) SET_PED_ANGLED_DEFENSIVE_AREA(PedIndex, vPosition1, vPosition2, fWidth, bGoToCenter) ENDIF ENDPROC PROC SET_PED_DEFENSIVE_AREA_SPHERE(PED_INDEX PedIndex, VECTOR vPosition, FLOAT fRadius, BOOL bGoToCenter = FALSE) IF NOT IS_PED_INJURED(PedIndex) SET_PED_SPHERE_DEFENSIVE_AREA(PedIndex, vPosition, fRadius, bGoToCenter) ENDIF ENDPROC PROC STORE_DEFENSIVE_AREA_ANGLED(DEFENSIVEAREA_STRUCT &sArea, VECTOR vPosition1, VECTOR vPosition2, FLOAT fWidth) sArea.vPosition = vPosition1 sArea.vPosition2 = vPosition2 sArea.fWidth = fWidth sArea.bSphere = FALSE ENDPROC PROC STORE_DEFENSIVE_AREA_SPHERE(DEFENSIVEAREA_STRUCT &sArea, VECTOR vPosition, FLOAT fRadius) sArea.vPosition = vPosition sArea.vPosition2 = << 0.0, 0.0, 0.0 >> sArea.fWidth = fRadius sArea.bSphere = TRUE ENDPROC FUNC BOOL IS_PED_IN_DEFENSIVE_AREA(PED_INDEX PedIndex, DEFENSIVEAREA_STRUCT sArea) IF DOES_ENTITY_EXIST(PedIndex) IF NOT IS_PED_INJURED(PedIndex) IF ( sArea.bSphere = TRUE ) IF ( GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PedIndex), sArea.vPosition) < sArea.fWidth ) RETURN TRUE ENDIF ELSE IF IS_ENTITY_IN_ANGLED_AREA(PedIndex, sArea.vPosition, sArea.vPosition2, sArea.fWidth, FALSE, TRUE, TM_ON_FOOT) RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC PROC SET_PED_PROOFS(PED_INDEX PedIndex, BOOL bBulletProof, BOOL bFlameProof, BOOL bExplosionProof, BOOL bCollisonProof, BOOL bMeleeProof, BOOL bRunFromFiresAndExplosions = FALSE) IF NOT IS_PED_INJURED(PedIndex) SET_ENTITY_PROOFS(PedIndex, bBulletProof, bFlameProof, bExplosionProof, bCollisonProof, bMeleeProof) SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, bRunFromFiresAndExplosions) ENDIF ENDPROC FUNC BOOL IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ENTITY_INDEX EntityIndex, ENTITY_INDEX TargetEntityIndex, FLOAT fDistanceBetweenEntities, FLOAT fCloseEnoughDistance, VECTOR vStartPosition) IF DOES_ENTITY_EXIST(EntityIndex) AND DOES_ENTITY_EXIST(TargetEntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) AND NOT IS_ENTITY_DEAD(TargetEntityIndex) IF ( fDistanceBetweenEntities < fCloseEnoughDistance ) RETURN TRUE ELSE IF ( GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetEntityIndex), vStartPosition) >= GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(EntityIndex), vStartPosition) ) RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns the number of alive enemies from a specified enemy group /// PARAMS: /// esArray - Enemy group to check. /// RETURNS: /// Number of created enemies who are alive and not injured from a specified enemy group. FUNC INT GET_NUMBER_OF_ENEMIES_ALIVE(ENEMY_STRUCT &esArray[]) INT i = 0 INT iEnemiesAlive = 0 FOR i = 0 TO ( COUNT_OF(esArray) - 1 ) //check only created enemies IF esArray[i].bCreated = TRUE IF DOES_ENTITY_EXIST(esArray[i].PedIndex) IF NOT IS_PED_INJURED(esArray[i].PedIndex) iEnemiesAlive++ ENDIF ENDIF ENDIF ENDFOR RETURN iEnemiesAlive ENDFUNC /// PURPOSE: /// Returns the number of dead enemies from a specified enemy group /// PARAMS: /// esArray - Enemy group to check. /// RETURNS: /// Number of created enemies who were killed and are dead from a specified enemy group. FUNC INT GET_NUMBER_OF_ENEMIES_DEAD(ENEMY_STRUCT &esArray[]) INT i = 0 INT iEnemiesDead = 0 FOR i = 0 TO (COUNT_OF(esArray) - 1) //check only created enemies IF esArray[i].bCreated = TRUE //if created enemy exists and is injured IF DOES_ENTITY_EXIST(esArray[i].PedIndex) IF IS_PED_INJURED(esArray[i].PedIndex) iEnemiesDead++ ENDIF //if created enemy does not exist anymore //due to deleting or setting as no longer needed //then count this enemy as dead ELSE iEnemiesDead++ ENDIF ENDIF ENDFOR RETURN iEnemiesDead ENDFUNC FUNC BOOL IS_ENEMY_PED_DEAD(ENEMY_STRUCT &enemy) IF ( enemy.bCreated = TRUE ) IF DOES_ENTITY_EXIST(enemy.PedIndex) IF IS_PED_INJURED(enemy.PedIndex) OR IS_ENTITY_DEAD(enemy.PedIndex) RETURN TRUE ELSE RETURN FALSE ENDIF ELSE RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_ENEMY_GROUP_DEAD(ENEMY_STRUCT &esArray[]) INT i = 0 FOR i = 0 TO (COUNT_OF(esArray) - 1) IF ( esArray[i].bCreated = TRUE ) IF NOT IS_PED_INJURED(esArray[i].PedIndex) RETURN FALSE ENDIF ELSE RETURN FALSE ENDIF ENDFOR RETURN TRUE ENDFUNC PROC SET_PED_COMBAT_DRIVE_BY(PED_INDEX PedIndex, FLOAT fRange = 100.0) IF NOT IS_PED_INJURED(PedIndex) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_SEEING_RANGE(PedIndex, fRange) SET_PED_HEARING_RANGE(PedIndex, fRange) TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, fRange) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) ENDIF ENDPROC PROC COMBAT_SEQUENCE_EXIT_CAR_RUN_TO_SPOT_AND_ATTACK(PED_INDEX ped, VECTOR vCoord) IF NOT DOES_ENTITY_EXIST(ped) EXIT ENDIF IF IS_ENTITY_DEAD(ped) EXIT ENDIF CPRINTLN(DEBUG_MISSION, "COMBAT_SEQUENCE_EXIT_CAR_RUN_TO_SPOT_AND_ATTACK tasking ped") SEQUENCE_INDEX iSeq OPEN_SEQUENCE_TASK(iSeq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vCoord, PLAYER_PED_ID(), PEDMOVE_SPRINT, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(iSeq) TASK_PERFORM_SEQUENCE(ped, iSeq) CLEAR_SEQUENCE_TASK(iSeq) ENDPROC PROC COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(PED_INDEX ped, VEHICLE_INDEX defendVehicle, VECTOR vCoord) IF NOT DOES_ENTITY_EXIST(ped) EXIT ENDIF IF IS_ENTITY_DEAD(ped) EXIT ENDIF IF NOT DOES_ENTITY_EXIST(defendVehicle) EXIT ENDIF SEQUENCE_INDEX iSeq OPEN_SEQUENCE_TASK(iSeq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR) IF NOT ARE_VECTORS_EQUAL(vCoord, <<0.0, 0.0, 0.0>>) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vCoord, PLAYER_PED_ID(), PEDMOVE_SPRINT, TRUE) ENDIF TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 50.0) CLOSE_SEQUENCE_TASK(iSeq) TASK_PERFORM_SEQUENCE(ped, iSeq) CLEAR_SEQUENCE_TASK(iSeq) IF NOT IS_PED_INJURED(ped) AND IS_VEHICLE_DRIVEABLE(defendVehicle) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(ped, defendVehicle, <<0, 0, 0>>, 10.0) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_THEN_COMBAT(PED_INDEX ped, VECTOR vDestination, FLOAT fMoveSpeed, INT iTime = DEFAULT_TIME_BEFORE_WARP, BOOL bUnblockEvents = FALSE, BOOL bUseNavmesh = TRUE, FLOAT fRange = 100.0, FLOAT fRadius = DEFAULT_NAVMESH_RADIUS, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT) IF NOT IS_PED_INJURED(ped) SEQUENCE_INDEX seq OPEN_SEQUENCE_TASK(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bUseNavmesh = TRUE ) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vDestination, fMoveSpeed, iTime, fRadius, eNavigationFlags) ELSE TASK_GO_STRAIGHT_TO_COORD(NULL, vDestination, fMoveSpeed, iTime) ENDIF // TASK_TOGGLE_DUCK( IF ( bUnblockEvents = TRUE ) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fRange) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(ped, seq) CLEAR_SEQUENCE_TASK(seq) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COVER_THEN_COMBAT(PED_INDEX PedIndex, VECTOR vDestination, FLOAT fMoveSpeed, INT iTimeInCover, BOOL bCanPeekAndAim, BOOL bForceFaceDirection = FALSE, BOOL bForceFaceLeft = FALSE, FLOAT fCombatRange = 100.0, BOOL bUseNavmesh = TRUE, INT iTimeBeforeWarp = DEFAULT_TIME_BEFORE_WARP, FLOAT fRadius = DEFAULT_NAVMESH_RADIUS, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT) IF NOT IS_PED_INJURED(PedIndex) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bUseNavmesh = TRUE ) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vDestination, fMoveSpeed, iTimeBeforeWarp, fRadius, eNavigationFlags) ELSE TASK_GO_STRAIGHT_TO_COORD(NULL, vDestination, fMoveSpeed, iTimeBeforeWarp) ENDIF TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, vDestination, iTimeInCover, bCanPeekAndAim, 1.5, bForceFaceDirection, bForceFaceLeft, NULL, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fCombatRange) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_AIM(PED_INDEX PedIndex, VECTOR vDestination, FLOAT fMoveSpeed, BOOL bAimAtHatedPeds, VECTOR vAimPosition, ENTITY_INDEX EntityIndex = NULL, BOOL bShoot = FALSE, BOOL bShootAfterStopped = TRUE, INT iTime = -1, BOOL bUnblockEvents = FALSE, FLOAT fTargetDistance = 0.5, FLOAT fSlowDistance = 0.5, BOOL bUseNavmesh = TRUE, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT, FIRING_TYPE eFiringType = FIRING_TYPE_RANDOM_BURSTS) IF NOT IS_PED_INJURED(PedIndex) SEQUENCE_INDEX seq OPEN_SEQUENCE_TASK(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bAimAtHatedPeds = TRUE ) //aim at hated entities makes the ped automatically change aiming to nearest hated ped, once the initial one is dead IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ELSE TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, GET_ENTITY_COORDS(EntityIndex), fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ENDIF ELIF ( bAimAtHatedPeds = FALSE ) // aim at entity does not update aiming when that entity is dead, ped will keep aiming at dead body IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowdistance, bUseNavmesh) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vDestination, EntityIndex, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh) ENDIF ENDIF IF IS_ENTITY_DEAD(EntityIndex) IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_COORD(NULL, vAimPosition, iTime, eFiringType) ELSE TASK_AIM_GUN_AT_COORD(NULL, vAimPosition, iTime) ENDIF ELSE IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_ENTITY(NULL, EntityIndex, iTime, eFiringType) ELSE TASK_AIM_GUN_AT_ENTITY(NULL, EntityIndex, iTime) ENDIF ENDIF IF ( bUnblockEvents = TRUE ) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) ENDIF CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(PedIndex, seq) CLEAR_SEQUENCE_TASK(seq) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_AIM_THEN_COMBAT(PED_INDEX ped, VECTOR vDestination, FLOAT fMoveSpeed, BOOL bAimAtHatedPeds, VECTOR vAimPosition, ENTITY_INDEX EntityIndex = NULL, BOOL bShoot = FALSE, BOOL bShootAfterStopped = TRUE, INT iShootingTime = -1, FLOAT fRange = 100.0, FLOAT fTargetDistance = 0.5, FLOAT fSlowDistance = 0.5, BOOL bUseNavmesh = TRUE, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT, FIRING_TYPE eFiringType = FIRING_TYPE_RANDOM_BURSTS) IF NOT IS_PED_INJURED(ped) SEQUENCE_INDEX seq OPEN_SEQUENCE_TASK(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bAimAtHatedPeds = TRUE ) //aim at hated entities makes the ped automatically change aiming to nearest hated ped, once the initial one is dead IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ELSE TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, GET_ENTITY_COORDS(EntityIndex), fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ENDIF ELIF ( bAimAtHatedPeds = FALSE ) // aim at entity does not update aiming when that entity is dead, ped will keep aiming at dead body IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowdistance, bUseNavmesh) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vDestination, EntityIndex, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh) ENDIF ENDIF IF IS_ENTITY_DEAD(EntityIndex) IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_COORD(NULL, vAimPosition, iShootingTime, eFiringType) ELSE TASK_AIM_GUN_AT_COORD(NULL, vAimPosition, iShootingTime) ENDIF ELSE IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_ENTITY(NULL, EntityIndex, iShootingTime, eFiringType) ELSE TASK_AIM_GUN_AT_ENTITY(NULL, EntityIndex, iShootingTime) ENDIF ENDIF TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fRange) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(ped, seq) CLEAR_SEQUENCE_TASK(seq) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PED_INDEX PedIndex, VECTOR vDestination, FLOAT fMoveSpeed, BOOL bAimAtHatedPeds, VECTOR vAimPosition, ENTITY_INDEX EntityIndex = NULL, BOOL bShootWhileMoving = FALSE, BOOL bCombatAfterStopped = TRUE, BOOL bShootAfterStopped = FALSE, INT iAimShootTime = 1000, FIRING_TYPE eFiringType = FIRING_TYPE_RANDOM_BURSTS, BOOL bUnblockEvents = TRUE, FLOAT fTargetDistance = 0.5, FLOAT fSlowDistance = 0.5, BOOL bUseNavmesh = TRUE, FLOAT fCombatRange = 100.0, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT) IF NOT IS_PED_INJURED(PedIndex) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bAimAtHatedPeds = TRUE ) //aim at hated entities makes the ped automatically change aiming to nearest hated ped, once the initial ped is dead IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShootWhileMoving, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags, GO_TO_AIM_NONE, eFiringType) ELSE //if the entity does not exist, what then? might end up aiming at <<0,0,0>> TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, GET_ENTITY_COORDS(EntityIndex), fMoveSpeed, bShootWhileMoving, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags, GO_TO_AIM_NONE, eFiringType) ENDIF ELIF ( bAimAtHatedPeds = FALSE ) // aim at entity does not update aiming when that entity is dead, ped will keep aiming at dead ped IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShootWhileMoving, fTargetDistance, fSlowdistance, bUseNavmesh, eNavigationFlags, FALSE, eFiringType) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vDestination, EntityIndex, fMoveSpeed, bShootWhileMoving, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags, FALSE, eFiringType) ENDIF ENDIF IF ( bCombatAfterStopped = FALSE ) IF IS_ENTITY_DEAD(EntityIndex) IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_COORD(NULL, vAimPosition, iAimShootTime, eFiringType) ELSE TASK_AIM_GUN_AT_COORD(NULL, vAimPosition, iAimShootTime) ENDIF ELSE IF ( bShootAfterStopped = TRUE ) TASK_SHOOT_AT_ENTITY(NULL, EntityIndex, iAimShootTime, eFiringType) ELSE TASK_AIM_GUN_AT_ENTITY(NULL, EntityIndex, iAimShootTime) ENDIF ENDIF ENDIF IF ( bUnblockEvents = TRUE ) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fCombatRange) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT(PED_INDEX ped, VECTOR vDestination, FLOAT fMoveSpeed, BOOL bAimAtHatedPeds, VECTOR vAimPosition, ENTITY_INDEX EntityIndex = NULL, BOOL bShoot = TRUE, BOOL bUnblockEvents = TRUE, FLOAT fTargetDistance = 0.5, FLOAT fSlowDistance = 0.5, BOOL bUseNavmesh = TRUE, FLOAT fCombatRange = 100.0, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT) IF NOT IS_PED_INJURED(ped) SEQUENCE_INDEX seq OPEN_SEQUENCE_TASK(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bAimAtHatedPeds = TRUE ) //aim at hated entities makes the ped automatically change aiming to nearest hated ped, once the initial one is dead IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ELSE TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, GET_ENTITY_COORDS(EntityIndex), fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ENDIF ELIF ( bAimAtHatedPeds = FALSE ) // aim at entity does not update aiming when that entity is dead, ped will keep aiming at dead body IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowdistance, bUseNavmesh) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vDestination, EntityIndex, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh) ENDIF ENDIF IF ( bUnblockEvents = TRUE ) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fCombatRange) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(ped, seq) CLEAR_SEQUENCE_TASK(seq) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COMBAT(PED_INDEX PedIndex, FLOAT fRange = 100.0, PED_INDEX TargetPedIndex = NULL) IF NOT IS_PED_INJURED(PedIndex) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) IF ( TargetPedIndex = NULL ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fRange) ELSE IF NOT IS_PED_INJURED(TargetPedIndex) TASK_COMBAT_PED(NULL, TargetPedIndex) ENDIF ENDIF CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ENDIF ENDPROC PROC COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_TO_COVER_THEN_COMBAT(PED_INDEX PedIndex, VECTOR vDestination, FLOAT fMoveSpeed, BOOL bAimAtHatedPeds, VECTOR vAimPosition, ENTITY_INDEX EntityIndex, BOOL bShoot, VECTOR vCoverCoordinates, VECTOR vFromCoordinates, INT iTimeInCover, FLOAT fCombatRange = 100.0, BOOL bCanPeekAndAim = FALSE, BOOL bUseNavmesh = TRUE, FLOAT fTargetDistance = 0.5, FLOAT fSlowDistance = 0.5, ENAV_SCRIPT_FLAGS eNavigationFlags = ENAV_DEFAULT) IF NOT IS_PED_INJURED(PedIndex) SEQUENCE_INDEX seq OPEN_SEQUENCE_TASK(seq) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF ( bAimAtHatedPeds = TRUE ) //aim at hated entities makes the ped automatically change aiming to nearest hated ped, once the initial one is dead IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ELSE TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, vDestination, GET_ENTITY_COORDS(EntityIndex), fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh, eNavigationFlags) ENDIF ELIF ( bAimAtHatedPeds = FALSE ) // aim at entity does not update aiming when that entity is dead, ped will keep aiming at dead body IF IS_ENTITY_DEAD(EntityIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vDestination, vAimPosition, fMoveSpeed, bShoot, fTargetDistance, fSlowdistance, bUseNavmesh) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, vDestination, EntityIndex, fMoveSpeed, bShoot, fTargetDistance, fSlowDistance, bUseNavmesh) ENDIF ENDIF TASK_SEEK_COVER_TO_COORDS(NULL, vCoverCoordinates, vFromCoordinates, iTimeInCover, bCanPeekAndAim) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, fCombatRange) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(PedIndex, seq) CLEAR_SEQUENCE_TASK(seq) ENDIF ENDPROC FUNC INT GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esGroup1) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarCuldeSacLeft) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarCuldeSacRight) + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup2) ENDFUNC FUNC INT GET_NUM_REMAINING_OF_WAVE_2_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esGroup3) + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup4) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection1Left) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection1Right) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection2Left) ENDFUNC FUNC INT GET_NUM_REMAINING_OF_WAVE_3_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esGroup5) + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup6) ENDFUNC FUNC INT GET_NUM_REMAINING_OF_WAVE_4_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esGroup7) + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup8) ENDFUNC FUNC INT GET_NUM_ACTIVE_SPAWNER_PEDS() INT iCount = 0 INT i FOR i = 0 TO ( COUNT_OF(EnemySpawnpoints) - 1 ) IF DOES_ENTITY_EXIST(EnemySpawnpoints[i].sEnemy.PedIndex) IF NOT IS_ENTITY_DEAD(EnemySpawnpoints[i].sEnemy.PedIndex) iCount++ ENDIF ENDIF ENDFOR FOR i = 0 TO ( COUNT_OF(EnemySidekickSpawnpoints) - 1 ) IF DOES_ENTITY_EXIST(EnemySidekickSpawnpoints[i].sEnemy.PedIndex) IF NOT IS_ENTITY_DEAD(EnemySidekickSpawnpoints[i].sEnemy.PedIndex) iCount++ ENDIF ENDIF ENDFOR RETURN iCount ENDFUNC FUNC INT GET_NUM_REMAINING_PARKED_CAR_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esCarDriveway) ENDFUNC FUNC INT GET_NUM_REMAINING_OF_INTERSECTION_CAR_ENEMIES() RETURN GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection1Left) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection1Right) + GET_NUMBER_OF_ENEMIES_ALIVE(esCarIntersection2Left) ENDFUNC FUNC BOOL SHOULD_ALLIES_LEAVE_STARTING_COVER() IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) > 70.0 OR GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() < 2 RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_STREET() IF IS_PLAYER_IN_ANGLED_AREA_LOCATE(tbWave2) OR GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() < 3 RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_UP_STREET_1() IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbIntersection) OR (GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() < 1 AND GET_NUM_REMAINING_OF_WAVE_2_ENEMIES() < 2) CPRINTLN(DEBUG_MISSION, "SHOULD_ALLIES_ADVANCE_TO_UP_STREET_1 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_UP_STREET_2() IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbWave3) OR (GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() + GET_NUM_REMAINING_OF_WAVE_2_ENEMIES() + GET_NUM_REMAINING_OF_WAVE_3_ENEMIES() <= 2 ) CPRINTLN(DEBUG_MISSION, "SHOULD_ALLIES_ADVANCE_TO_UP_STREET_2 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_OTHER_PLAYER_PED_ADVANCE_UP_TO_BIN_3() IF ( Events[EVENT_ENEMY_WAVE_CARINTERSECTION_SPAWNED] = TRUE ) AND ( GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup3) + GET_NUMBER_OF_ENEMIES_ALIVE(esGroup4) < 2) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_UP_STREET_3() IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbParkedCar) OR GET_NUM_REMAINING_OF_WAVE_4_ENEMIES() < 2 CPRINTLN(DEBUG_MISSION, "SHOULD_ALLIES_ADVANCE_TO_UP_STREET_3 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC // we need to include the tbParkedCar check here so that we dont miss the trigger in // street5 if the player doesnt kill everyone before hitting the trigger FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_UP_STREET_4() IF (Events[EVENT_ENEMIES_GROUP5_KILLED] = TRUE AND Events[EVENT_ENEMIES_GROUP6_KILLED] = TRUE) OR IS_PLAYER_IN_ANGLED_AREA_LOCATE(tbParkedCar) CPRINTLN(DEBUG_MISSION, "SHOULD_ALLIES_ADVANCE_TO_UP_STREET_4 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_ADVANCE_TO_UP_STREET_5() IF IS_PLAYER_IN_ANGLED_AREA_LOCATE(tbWave5) OR (GET_NUM_REMAINING_OF_WAVE_3_ENEMIES() + GET_NUM_REMAINING_OF_WAVE_4_ENEMIES() + GET_NUM_REMAINING_PARKED_CAR_ENEMIES() + GET_NUM_ACTIVE_SPAWNER_PEDS() <= 2) CPRINTLN(DEBUG_MISSION, "SHOULD_ALLIES_ADVANCE_TO_UP_STREET_5 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_ALLIES_RUN_TO_RIVER() IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), tbAlliesToRiver.vStart, tbAlliesToRiver.vEnd, tbAlliesToRiver.fWidth) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_WAVE_2() IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbWave2) OR GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() < 3 CPRINTLN(DEBUG_MISSION, "SHOULD_SPAWN_WAVE_2 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_INTERSECTION_CARS() // there is a case where these won't spawn (which is OK) // its to prevent too many enemies at once, for performance IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbIntersection) AND GET_NUM_REMAINING_OF_WAVE_1_ENEMIES() + GET_NUM_REMAINING_OF_WAVE_2_ENEMIES() < 8 CPRINTLN(DEBUG_MISSION, "SHOULD_SPAWN_INTERSECTION_CARS true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_WAVE_3() IF GET_NUM_REMAINING_OF_WAVE_2_ENEMIES() < 3 OR IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbWave3) CPRINTLN(DEBUG_MISSION, "SHOULD_SPAWN_WAVE_3 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_WAVE_4() IF GET_NUM_REMAINING_OF_WAVE_3_ENEMIES() + GET_NUM_REMAINING_OF_INTERSECTION_CAR_ENEMIES() < 2 OR IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbWave4) CPRINTLN(DEBUG_MISSION, "SHOULD_SPAWN_WAVE_4 true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_WAVE_5() IF NOT Events[EVENT_ENEMY_WAVE_5_SPAWNED] AND Events[EVENT_ENEMY_WAVE_4_SPAWNED] IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbWave5) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_SPAWN_COP_WAVE() IF (IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<13.0041, -1844.2789, 20.5150>>, <<-5.4139, -1872.2899, 25.2182>>, 8.0) AND Events[EVENT_ENEMY_WAVE_6_SPAWNED]) CPRINTLN(DEBUG_MISSION, "SHOULD_SPAWN_COP_WAVE true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL SHOULD_COP_REINFORCEMENTS_SPAWN() IF Events[EVENT_COPS_ARRIVE] //AND (GET_NUMBER_OF_ENEMIES_ALIVE(esPoliceCarEnd1Cops) + GET_NUMBER_OF_ENEMIES_ALIVE(esPoliceCarEnd2Cops) + GET_NUMBER_OF_ENEMIES_ALIVE(esPoliceCarEnd2Cops) <= 4) AND HAS_TIME_PASSED(12000, iCopReinforcementTimer) CPRINTLN(DEBUG_MISSION, "SHOULD_COP_REINFORCEMENTS_SPAWN true") RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC UPDATE_SPAWNPOINT(SPAWNPOINT_STRUCT &sSpawnpoint, BOOL bResetTimer = FALSE ) IF ( sSpawnpoint.bActive = TRUE ) IF ( sSpawnpoint.bTaken = FALSE ) IF NOT DOES_ENTITY_EXIST(sSpawnpoint.sEnemy.PedIndex) IF HAS_TIME_PASSED(sSpawnpoint.iIntervalTime, sSpawnpoint.iTimer) IF NOT IS_SPHERE_VISIBLE(sSpawnpoint.vPosition, 2.0) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), sSpawnpoint.vPosition) > 10.0 // if the cops have arrived, spawn more cops instead of gangsters // (because we now use this in MANAGE_COP..) // @BSW BOOL bTrackHeadShot MODEL_NAMES spawnerModel IF Events[EVENT_COPS_ARRIVE] bTrackHeadShot = FALSE spawnerModel = mnCop ELSE bTrackHeadShot = TRUE spawnerModel = mnBalla ENDIF sSpawnpoint.sEnemy.PedIndex = CREATE_ENEMY_PED(spawnerModel, sSpawnpoint.vPosition, sSpawnpoint.fHeading, rgEnemies, WEAPONTYPE_PISTOL, DEFAULT, bTrackHeadShot) IF (spawnerModel = mnCop) SET_PED_ACCURACY(sSpawnpoint.sEnemy.PedIndex, 3) ENDIF CPRINTLN(DEBUG_MISSION, "Spawner created a ped" ) #IF IS_DEBUG_BUILD TEXT_LABEL sDebugPedName = "Spawner " SET_PED_NAME_DEBUG(sSpawnpoint.sEnemy.PedIndex, sDebugPedName) #ENDIF sSpawnpoint.sEnemy.iCleanupAttempts = 0 IF bTrackHeadShot = TRUE sSpawnpoint.sEnemy.eCleanupReason = PED_CLEANUP_NO_CLEANUP ELSE sSpawnpoint.sEnemy.eCleanupReason = PED_CLEANUP_NONE ENDIF sSpawnpoint.bTaken = TRUE sSpawnpoint.bHasTask = FALSE ENDIF ELSE IF ( bResetTimer = TRUE ) sSpawnpoint.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC //|========================== END COMBAT PROCEDURES & FUNCTIONS ==========================| //|=========================== BMX CREW PROCEDURES & FUNCTIONS ===========================| PROC UPDATE_AND_CLEANUP_BMX_BIKER(PED_INDEX PedIndex, VEH_STRUCT &vehicle, BOOL &bHornUsed, FLOAT fWanderSpeed, STRING sFileName, DRIVINGMODE eDrivingMode = DRIVINGMODE_AVOIDCARS_OBEYLIGHTS) IF DOES_ENTITY_EXIST(PedIndex) IF NOT IS_PED_INJURED(PedIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF NOT IS_PED_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex) ENDIF IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) TASK_VEHICLE_DRIVE_WANDER(PedIndex, vehicle.VehicleIndex, fWanderSpeed, eDrivingMode) SET_PED_KEEP_TASK(PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sFileName) ELSE IF NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF IS_ENTITY_AT_ENTITY(vehicle.VehicleIndex, PLAYER_PED_ID(), << 30.0, 30.0, 30.0>>) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE_USING_AI(vehicle.VehicleIndex, vehicle.iRecordingNumber, sFileName, fWanderSpeed, DRIVINGMODE_AVOIDCARS) ENDIF ENDIF ENDIF ENDIF IF ( bHornUsed = FALSE ) IF NOT IS_PED_INJURED(PedIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PED_SITTING_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) IF IS_ENTITY_AT_ENTITY(vehicle.VehicleIndex, PLAYER_PED_ID(), <<10.0, 10.0, 10.0>>) START_VEHICLE_HORN(vehicle.VehicleIndex, 1000) bHornUsed = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ELSE SET_PED_AS_NO_LONGER_NEEDED(PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sFileName) ENDIF ELSE SET_PED_AS_NO_LONGER_NEEDED(PedIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sFileName) ENDIF ENDIF ENDIF ENDPROC PROC MANAGE_BMX_CREW(INT &iProgress) INT i = 0 SWITCH iProgress CASE 0 IF ( g_bFranklin1BikersSpawned = TRUE ) g_bFranklin1BikersSpawned = FALSE iProgress = -1 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": BMX bikers will not be spawned this time due to being spawned last time. Setting g_bFranklin1BikersSpawned to FALSE to have BMX bikers spawn next time.") #ENDIF ELSE SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) //randomly decide to spawn or not to spawn the bikers CASE 0 //don't spawn the bikers g_bFranklin1BikersSpawned = FALSE iProgress = -1 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": BMX bikers will not be spawned this time due to random flag set to 0. Setting g_bFranklin1BikersSpawned to FALSE to have BMX bikers spawn next time.") #ENDIF BREAK CASE 1 //spawn the bikers g_bFranklin1BikersSpawned = TRUE iProgress++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": BMX bikers will be spawned this time. Setting g_bFranklin1BikersSpawned to TRUE to have BMX bikers not spawn next time.") #ENDIF BREAK ENDSWITCH ENDIF BREAK CASE 1 //set the bmx crew playback speed and playnack start time depending on which locate player triggers first REQUEST_VEHICLE_RECORDING(vsBmxBikes[0].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsBmxBikes[1].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsBmxBikes[2].iRecordingNumber, sVehicleRecordingsFile) REQUEST_MODEL(BMX) REQUEST_MODEL(G_M_Y_FAMFOR_01) REQUEST_MODEL(G_M_Y_FAMCA_01) //player van goes through the alley as shown in the GPS IF IS_ENTITY_IN_ANGLED_AREA(vsVan.VehicleIndex, <<18.164326,-1794.524048,25.571041>>, <<-34.210644,-1751.416626,34.148041>>, 36.000000) fBMX0PlabackSpeed = 0.715 fBMX0StartTime = 13500.0 fBMX1PlabackSpeed = 0.875 fBMX1StartTime = 16300.0 fBMX2PlabackSpeed = 0.795 fBMX2StartTime = 15800.0 iProgress++ //if player tries to cut through the parking lot ELIF IS_ENTITY_IN_ANGLED_AREA(vsVan.VehicleIndex, <<58.184845,-1718.744995,27.291744>>, <<-16.241100,-1752.140503,34.291744>>, 32.000000) fBMX0PlabackSpeed = 0.715 fBMX0StartTime = 13525.0 fBMX1PlabackSpeed = 0.875 fBMX1StartTime = 16375.0 fBMX2PlabackSpeed = 0.795 fBMX2StartTime = 15850.0 iProgress++ //if player van goes through the street closest to the deal location ELIF IS_ENTITY_IN_ANGLED_AREA(vsVan.VehicleIndex, <<56.542507,-1908.319702,19.473255>>, <<132.084869,-1819.205200,32.228783>>, 96.000000) fBMX0PlabackSpeed = 0.735 fBMX0StartTime = 2400.0 fBMX1PlabackSpeed = 0.850 fBMX1StartTime = 2700.0 fBMX2PlabackSpeed = 0.775 fBMX2StartTime = 2475.0 iProgress++ //if player van goes through the entire grove street ELIF IS_ENTITY_AT_COORD(vsVan.VehicleIndex, <<-96.577042,-1786.544067,32.035469>>,<<46.000000,46.000000,8.000000>>) fBMX0PlabackSpeed = 0.735 fBMX0StartTime = 6400.0 fBMX1PlabackSpeed = 0.850 fBMX1StartTime = 6700.0 fBMX2PlabackSpeed = 0.775 fBMX2StartTime = 6500.0 iProgress++ ENDIF BREAK CASE 2 //create the bmx crew IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsBmxBikes[0], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 58, 0, 0, 0 #IF IS_DEBUG_BUILD, "0" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsBmxBikes[1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 4, 0, 0, 0 #IF IS_DEBUG_BUILD, "1" #ENDIF) IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsBmxBikes[2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 37, 0, 0, 0 #IF IS_DEBUG_BUILD, "2" #ENDIF) IF HAS_MISSION_PED_BEEN_CREATED(psBmxCrew[2], FALSE, rgBmxCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsBmxBikes[2].VehicleIndex, VS_DRIVER, TRUE #IF IS_DEBUG_BUILD, "BMX 2" #ENDIF) IF HAS_MISSION_PED_BEEN_CREATED(psBmxCrew[1], FALSE, rgBmxCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsBmxBikes[1].VehicleIndex, VS_DRIVER, TRUE #IF IS_DEBUG_BUILD, "BMX 1" #ENDIF) IF HAS_MISSION_PED_BEEN_CREATED(psBmxCrew[0], FALSE, rgBmxCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsBmxBikes[0].VehicleIndex, VS_DRIVER, TRUE #IF IS_DEBUG_BUILD, "BMX 0" #ENDIF) IF NOT IS_PED_INJURED(psBmxCrew[0].PedIndex) SET_PED_COMPONENT_VARIATION(psBmxCrew[0].PedIndex, PED_COMP_HEAD, 1, 1, 0) //(head) SET_PED_COMPONENT_VARIATION(psBmxCrew[0].PedIndex, PED_COMP_TORSO, 1, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psBmxCrew[0].PedIndex, PED_COMP_LEG, 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psBmxCrew[0].PedIndex, PED_COMP_SPECIAL, 0, 1, 0) //(accs) SET_PED_PROP_INDEX(psBmxCrew[0].PedIndex, ANCHOR_HEAD, 1, 0) ENDIF IF NOT IS_PED_INJURED(psBmxCrew[1].PedIndex) SET_PED_COMPONENT_VARIATION(psBmxCrew[1].PedIndex, PED_COMP_HEAD, 1, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(psBmxCrew[1].PedIndex, PED_COMP_TORSO, 1, 1, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psBmxCrew[1].PedIndex, PED_COMP_LEG, 0, 0, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psBmxCrew[1].PedIndex, PED_COMP_SPECIAL, 0, 1, 0) //(accs) SET_PED_PROP_INDEX(psBmxCrew[1].PedIndex, ANCHOR_HEAD, 1, 0) ENDIF IF NOT IS_PED_INJURED(psBmxCrew[2].PedIndex) SET_PED_COMPONENT_VARIATION(psBmxCrew[2].PedIndex, PED_COMP_HEAD, 1, 0, 0) //(head) SET_PED_COMPONENT_VARIATION(psBmxCrew[2].PedIndex, PED_COMP_TORSO, 0, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psBmxCrew[2].PedIndex, PED_COMP_LEG, 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psBmxCrew[2].PedIndex, PED_COMP_SPECIAL, 0, 1, 0) //(accs) SET_PED_PROP_INDEX(psBmxCrew[2].PedIndex, ANCHOR_HEAD, 0, 0) ENDIF iProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 3 //start vehicle recording on the bmx crew with playback speed and start time depending on which locate was hit first START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsBmxBikes[0], sVehicleRecordingsFile, fBMX0PlabackSpeed, FALSE, fBMX0StartTime, FALSE, TRUE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsBmxBikes[1], sVehicleRecordingsFile, fBMX1PlabackSpeed, FALSE, fBMX1StartTime, FALSE, TRUE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsBmxBikes[2], sVehicleRecordingsFile, fBMX2PlabackSpeed, FALSE, fBMX2StartTime, FALSE, TRUE) iProgress++ BREAK CASE 4 //if any biker is damaged by player flee and cleanup IF HAS_ENTITY_DAMAGED_VEHICLES(PLAYER_PED_ID(), vsBmxBikes) OR HAS_ENTITY_DAMAGED_PEDS(PLAYER_PED_ID(), psBmxCrew) OR HAS_ENTITY_DAMAGED_VEHICLES(vsVan.VehicleIndex, vsBmxBikes) OR HAS_ENTITY_DAMAGED_PEDS(vsVan.VehicleIndex, psBmxCrew) OR IS_PED_SHOOTING_AT_VEHICLES(PLAYER_PED_ID(), vsBmxBikes) OR IS_PED_SHOOTING_AT_PEDS(PLAYER_PED_ID(), psBmxCrew) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player attacked bmx crew.") #ENDIF FOR i = 0 TO ( COUNT_OF(vsBmxBikes) - 1) IF IS_VEHICLE_DRIVEABLE(vsBmxBikes[i].VehicleIndex) AND NOT IS_PED_INJURED(psBmxCrew[i].PedIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsBmxBikes[i].VehicleIndex) SET_PED_FLEE_ATTRIBUTES(psBmxCrew[i].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psBmxCrew[i].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psBmxCrew[i].PedIndex, FA_USE_VEHICLE, TRUE) SET_PED_FLEE_ATTRIBUTES(psBmxCrew[i].PedIndex, FA_PREFER_PAVEMENTS, FALSE) SET_PED_COMBAT_ATTRIBUTES(psBmxCrew[i].PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(psBmxCrew[i].PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psBmxCrew[i].PedIndex, CA_ALWAYS_FLEE, TRUE) TASK_SMART_FLEE_PED(psBmxCrew[i].PedIndex, PLAYER_PED_ID(),300, -1) //TASK_VEHICLE_MISSION(psBmxCrew[i].PedIndex, vsBmxBikes[i].VehicleIndex, vsVan.VehicleIndex, MISSION_FLEE, 12.0,DRIVINGMODE_AVOIDCARS, 300.0, 20.0) SET_PED_KEEP_TASK(psBmxCrew[i].PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(psBmxCrew[i].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vsBmxBikes[i].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsBmxBikes[i].iRecordingNumber, sVehicleRecordingsFile) iProgress++ ENDIF ENDFOR ELSE //update and cleanup the bikers once the recording is over and they wander UPDATE_AND_CLEANUP_BMX_BIKER(psBmxCrew[0].PedIndex, vsBmxBikes[0], bBMXHornUsed, 8.0, sVehicleRecordingsFile) UPDATE_AND_CLEANUP_BMX_BIKER(psBmxCrew[1].PedIndex, vsBmxBikes[1], bBMXHornUsed, 8.0, sVehicleRecordingsFile) UPDATE_AND_CLEANUP_BMX_BIKER(psBmxCrew[2].PedIndex, vsBmxBikes[2], bBMXHornUsed, 8.0, sVehicleRecordingsFile) ENDIF BREAK ENDSWITCH ENDPROC //|========================= END BMX CREW PROCEDURES & FUNCTIONS =========================| //|=============================== MISSION STAGES FUNCTIONS ==============================| PROC SEQUENCE_FACE_AND_LOOK_AT_PED(PED_INDEX PedIndex, PED_INDEX TargetPedIndex, INT iLookTime, SCRIPT_LOOK_FLAG eScriptLookFlag = SLF_DEFAULT) IF NOT IS_PED_INJURED(PedIndex) AND NOT IS_PED_INJURED(TargetPedIndex) SEQUENCE_INDEX PedSequence OPEN_SEQUENCE_TASK(PedSequence) TASK_TURN_PED_TO_FACE_ENTITY(NULL, TargetPedIndex) TASK_LOOK_AT_ENTITY(NULL, TargetPedIndex, iLookTime, eScriptLookFlag) CLOSE_SEQUENCE_TASK(PedSequence) TASK_PERFORM_SEQUENCE(PedIndex, PedSequence) CLEAR_SEQUENCE_TASK(PedSequence) ENDIF ENDPROC FUNC BOOL IS_MISSION_STAGE_CUTSCENE_INTRO_COMPLETED(INT &iStageProgress) SWITCH iStageProgress CASE 0 IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF HAS_REQUESTED_CUTSCENE_LOADED("franklin_1_int") REGISTER_ENTITY_FOR_CUTSCENE(psTrevor.PedIndex, "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, psTrevor.ModelName) REGISTER_ENTITY_FOR_CUTSCENE(psChop.PedIndex, "Chop", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, psChop.ModelName) REGISTER_ENTITY_FOR_CUTSCENE(psLamar.PedIndex, "Lamar", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, psLamar.ModelName) IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.ped[0]) REGISTER_ENTITY_FOR_CUTSCENE(g_sTriggerSceneAssets.ped[0], "Denise", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, IG_DENISE) ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.object[0]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[0], TRUE, TRUE) osTrowel.ObjectIndex = g_sTriggerSceneAssets.object[0] FREEZE_ENTITY_POSITION(osTrowel.ObjectIndex, FALSE) IF IS_ENTITY_ATTACHED(osTrowel.ObjectIndex) DETACH_ENTITY(osTrowel.ObjectIndex, FALSE, TRUE) ENDIF REGISTER_ENTITY_FOR_CUTSCENE(osTrowel.ObjectIndex, "Denises_Trowel", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, osTrowel.ModelName) ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(osTrowel.ObjectIndex, "Denises_Trowel", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, osTrowel.ModelName) ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) bCutsceneRecordingStarted = FALSE START_CUTSCENE() iStageProgress++ ELSE IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Franklin", PLAYER_PED_ID()) /* //commenting this out for TODO B*1579081 IF IS_SPECIAL_EDITION_GAME() SET_CUTSCENE_PED_OUTFIT("Trevor", PLAYER_TWO, OUTFIT_P2_DENIM) ELSE SET_CUTSCENE_PED_OUTFIT("Trevor", PLAYER_TWO, OUTFIT_P2_TSHIRT_CARGOPANTS_3) ENDIF */ SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor") SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_HEAD, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_BERD, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_HAIR, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_TORSO, 2, 1) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_LEG, 5, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_HAND, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_FEET, 1, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_TEETH, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_SPECIAL, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_SPECIAL2, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Lamar", PED_COMP_DECL, 1, 2) SET_CUTSCENE_PED_COMPONENT_VARIATION("Chop", PED_COMP_TORSO, 0, GET_CHOP_COLLAR_FROM_APP()) ENDIF ENDIF ELIF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF HAS_REQUESTED_CUTSCENE_LOADED("franklin_1_int", CS_SECTION_2 | CS_SECTION_3 | CS_SECTION_4) IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.ped[0]) REGISTER_ENTITY_FOR_CUTSCENE(g_sTriggerSceneAssets.ped[0], "Denise", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, IG_DENISE) ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.object[0]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[0], TRUE, TRUE) osTrowel.ObjectIndex = g_sTriggerSceneAssets.object[0] FREEZE_ENTITY_POSITION(osTrowel.ObjectIndex, FALSE) IF IS_ENTITY_ATTACHED(osTrowel.ObjectIndex) DETACH_ENTITY(osTrowel.ObjectIndex, FALSE, TRUE) ENDIF REGISTER_ENTITY_FOR_CUTSCENE(osTrowel.ObjectIndex, "Denises_Trowel", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, osTrowel.ModelName) ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(osTrowel.ObjectIndex, "Denises_Trowel", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, osTrowel.ModelName) ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[1]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.ped[1]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[1], TRUE, TRUE) psLamar.PedIndex = g_sTriggerSceneAssets.ped[1] SET_MISSION_PED_PROPERTIES(psLamar.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) #IF IS_DEBUG_BUILD SET_PED_NAME_DEBUG(psLamar.PedIndex, "TS_Lamar") #ENDIF REGISTER_ENTITY_FOR_CUTSCENE(psLamar.PedIndex, "Lamar", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, IG_LAMARDAVIS) ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(psLamar.PedIndex, "Lamar", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, IG_LAMARDAVIS) ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[2]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.ped[2]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[2], TRUE, TRUE) psChop.PedIndex = g_sTriggerSceneAssets.ped[2] SET_MISSION_PED_PROPERTIES(psChop.PedIndex, rgDog, FALSE, TRUE, FALSE, FALSE) #IF IS_DEBUG_BUILD SET_PED_NAME_DEBUG(psChop.PedIndex, "TS_Chop") #ENDIF REGISTER_ENTITY_FOR_CUTSCENE(psChop.PedIndex, "Chop", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_CHOP_MODEL()) ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(psChop.PedIndex, "Chop", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_CHOP_MODEL()) ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[3]) IF NOT IS_ENTITY_DEAD(g_sTriggerSceneAssets.ped[3]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[3], TRUE, TRUE) psFranklin.PedIndex = g_sTriggerSceneAssets.ped[3] SET_MISSION_PED_PROPERTIES(psFranklin.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex #IF IS_DEBUG_BUILD SET_PED_NAME_DEBUG(psFranklin.PedIndex, "TS_Franklin") #ENDIF REGISTER_ENTITY_FOR_CUTSCENE(psFranklin.PedIndex, "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_ONE) ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(psFranklin.PedIndex, "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_ONE) ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) bCutsceneRecordingStarted = FALSE START_CUTSCENE(CUTSCENE_PLAYER_FP_FLASH_FRANKLIN) iStageProgress++ ELSE IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Trevor", PLAYER_PED_ID()) /* //commenting this out for TODO B*1579081 SET_CUTSCENE_PED_OUTFIT("Franklin", PLAYER_ONE, OUTFIT_P1_HOODIE_AND_JEANS_1) */ SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_FRANKLIN, "Franklin") SET_CUTSCENE_PED_COMPONENT_VARIATION("Chop", PED_COMP_TORSO, 0, GET_CHOP_COLLAR_FROM_APP()) ENDIF ENDIF ENDIF BREAK CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip IF IS_CUTSCENE_PLAYING() IF GET_CUTSCENE_SECTION_PLAYING() >= 3 AND bCutsceneRecordingStarted = FALSE REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) bCutsceneRecordingStarted = TRUE ENDIF IF IS_REPLAY_START_VEHICLE_AVAILABLE() AND DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) IF ( GET_MISSION_START_VEHICLE_INDEX() = GET_PLAYERS_LAST_VEHICLE() ) IF NOT IS_ENTITY_DEAD(GET_PLAYERS_LAST_VEHICLE()) AND NOT IS_ENTITY_ON_FIRE(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), <<-25.0246, -1467.7142, 29.7815>>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 275.6534) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<-25.0246, -1467.7142, 29.7815>>, 275.6534) CLEAR_MUST_LEAVE_AREA_VEHICLE_GEN_FLAG(VEHGEN_MISSION_VEH) ENDIF ENDIF ENDIF STOP_GAMEPLAY_HINT(TRUE) CLEAR_AREA_OF_PEDS(<< -14.12, -1448.62, 29.65 >>, 250.0) CLEAR_AREA_OF_VEHICLES(<< -14.12, -1448.62, 29.65 >>, 250.0) CLEAR_AREA_OF_PROJECTILES(<< -14.12, -1448.62, 29.65 >>, 250.0) SET_WEATHER_TYPE_OVERTIME_PERSIST("EXTRASUNNY", 30.0) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF iGroveStreetSetup = 0 iStageProgress++ ENDIF BREAK CASE 2 REQUEST_ANIM_DICT("missfra1_tovan") REQUEST_ANIM_DICT(GET_CHOP_IN_VAN_ANIM_DICT()) REQUEST_VEHICLE_ASSET(vsVan.ModelName, ENUM_TO_INT(VRF_REQUEST_ENTRY_ANIMS)) SETUP_ROADS_IN_GROVE_STREET(FALSE, iGroveStreetSetup) IF NOT DOES_ENTITY_EXIST(osTrowel.ObjectIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Denises_Trowel") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Denises_Trowel")) osTrowel.ObjectIndex = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Denises_Trowel")) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object Denises_Trowel in the cutscene.") #ENDIF ENDIF ENDIF ENDIF //create mission vehicle during mocap cutscene IF IS_CUTSCENE_PLAYING() IF NOT DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[0]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[0], TRUE, TRUE) vsVan.VehicleIndex = g_sTriggerSceneAssets.veh[0] IF IS_ENTITY_ON_FIRE(vsVan.VehicleIndex) SET_ENTITY_HEALTH(vsVan.VehicleIndex, 1000) SET_VEHICLE_ENGINE_HEALTH(vsVan.VehicleIndex, 1000.0) SET_VEHICLE_PETROL_TANK_HEALTH(vsVan.VehicleIndex, 1000.0) STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(vsVan.VehicleIndex), 2.5) CLEAR_AREA(GET_ENTITY_COORDS(vsVan.VehicleIndex), 2.5, TRUE) ENDIF SET_ENTITY_COORDS(vsVan.VehicleIndex, vsVan.vPosition) SET_ENTITY_HEADING(vsVan.VehicleIndex, vsVan.fHeading) SET_VEHICLE_ON_GROUND_PROPERLY(vsVan.VehicleIndex) SET_VEHICLE_DOORS_LOCKED(vsVan.VehicleIndex, VEHICLELOCK_UNLOCKED) SET_VEHICLE_CAN_LEAK_OIL(vsVan.VehicleIndex, FALSE) SET_VEHICLE_CAN_LEAK_PETROL(vsVan.VehicleIndex, FALSE) SET_VEHICLE_HAS_STRONG_AXLES(vsVan.VehicleIndex, TRUE) SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVan.VehicleIndex, FALSE) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVan.VehicleIndex, SC_DOOR_FRONT_LEFT, FALSE) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVan.VehicleIndex, SC_DOOR_FRONT_RIGHT, FALSE) #IF IS_DEBUG_BUILD SET_VEHICLE_NAME_DEBUG(vsVan.VehicleIndex, "TS_Van") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set mission vehicle properties for vehicle ", "TS_Van", " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVan.ModelName), ".") #ENDIF ELSE IF ( GET_CUTSCENE_TIME() > 36000 ) HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "M_Van" #ENDIF) ENDIF ENDIF ELSE IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) SET_FORCE_HD_VEHICLE(vsVan.VehicleIndex, TRUE) REQUEST_VEHICLE_HIGH_DETAIL_MODEL(vsVan.VehicleIndex) ENDIF ENDIF ENDIF //create Lamar ped during the intro mocap cutscene IF NOT DOES_ENTITY_EXIST(psLamar.PedIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Lamar", IG_LAMARDAVIS) IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lamar", IG_LAMARDAVIS)) psLamar.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lamar", IG_LAMARDAVIS)) SET_MISSION_PED_PROPERTIES(psLamar.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission ped Lamar created in the intro cutscene.") #ENDIF bLamarsOutfitSet = TRUE ENDIF ENDIF ENDIF //create player ped Trevor when playing as Franklin by extracting him from mocap cutscene IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN ) IF NOT DOES_ENTITY_EXIST(psTrevor.PedIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Trevor") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor")) psTrevor.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor")) SET_MISSION_PED_PROPERTIES(psTrevor.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex STORE_PLAYER_PED_VARIATIONS(psTrevor.PedIndex, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Trevor created in the intro cutscene.") #ENDIF ENDIF ENDIF ENDIF ENDIF //create player ped Franklin when playing as Trevor by extracting him from mocap cutscene IF ( GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR ) IF NOT DOES_ENTITY_EXIST(psFranklin.PedIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Franklin") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin")) psFranklin.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin")) SET_MISSION_PED_PROPERTIES(psFranklin.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = psFranklin.PedIndex STORE_PLAYER_PED_VARIATIONS(psFranklin.PedIndex, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Franklin created in the intro cutscene.") #ENDIF ENDIF ENDIF ENDIF ENDIF //create Chop's ped during the intro mocap cutscene IF NOT DOES_ENTITY_EXIST(psChop.PedIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Chop") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Chop")) psChop.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Chop")) SET_MISSION_PED_PROPERTIES(psChop.PedIndex, rgDog, FALSE, TRUE, FALSE, FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission ped Chop created in the intro cutscene.") #ENDIF ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_CAMERA() SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) REPLAY_STOP_EVENT() ENDIF IF CAN_SET_ENTER_STATE_FOR_REGISTERED_ENTITY("Denises_Trowel") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Denises_Trowel.") #ENDIF IF DOES_ENTITY_EXIST(osTrowel.ObjectIndex) IF NOT IS_ENTITY_DEAD(osTrowel.ObjectIndex) SET_ENTITY_COORDS_NO_OFFSET(osTrowel.ObjectIndex, osTrowel.vPosition) SET_ENTITY_ROTATION(osTrowel.ObjectIndex, osTrowel.vRotation) FREEZE_ENTITY_POSITION(osTrowel.ObjectIndex, TRUE) ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Franklin.") #ENDIF //if on Franklin's exit state we are still not in control of Franklin then switch to Franklin //(the switch can also happen on Trevor's exit state, but then don't let code clear tasks after switch) IF ( GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_FRANKLIN ) //if player is not Franklin IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) //then switch player to Franklin TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Taking control of player ped Franklin when CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Franklin.") #ENDIF IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) psTrevor.PedIndex = GET_PED_INDEX(CHAR_TREVOR) SET_MISSION_PED_PROPERTIES(psTrevor.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Trevor for hot swap during intro cutscene when CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Franklin.") #ENDIF ENDIF ENDIF ENDIF IF GET_PLAYER_CHARACTER_AT_MISSION_START() <> CHAR_FRANKLIN IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) != CAM_VIEW_MODE_FIRST_PERSON ANIMPOSTFX_PLAY("SwitchSceneFranklin", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS") ENDIF ENDIF IF ( bCutsceneSkipped = FALSE ) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SEQUENCE_INDEX PlayerPedSequence OPEN_SEQUENCE_TASK(PlayerPedSequence) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -13.81, -1454.59, 29.49 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.39, -1456.48, 29.41 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -18.12, -1456.95, 29.46 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT) CLOSE_SEQUENCE_TASK(PlayerPedSequence) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerPedSequence) CLEAR_SEQUENCE_TASK(PlayerPedSequence) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lamar", CS_LAMARDAVIS) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lamar.") #ENDIF IF ( bCutsceneSkipped = FALSE ) IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.57, -1449.72, 29.63 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_TIME_BEFORE_WARP, ENAV_NO_STOPPING) TASK_ENTER_VEHICLE(NULL, vsVan.VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVE_WALK, ECF_USE_RIGHT_ENTRY | ECF_RESUME_IF_INTERRUPTED) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psLamar.PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Trevor.") #ENDIF IF ( bCutsceneSkipped = FALSE ) //switch player peds on Trevor's exit state, this happens earlier than Franklin's exit state //do it only when not skipping the cutscene IF ( GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_FRANKLIN ) //if player is not Franklin IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) //then switch player to Franklin TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS)//don't clear tasks after switch #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Taking control of player ped Franklin when CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Trevor.") #ENDIF IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) psTrevor.PedIndex = GET_PED_INDEX(CHAR_TREVOR) SET_MISSION_PED_PROPERTIES(psTrevor.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = psTrevor.PedIndex #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Trevor for hot swap during intro cutscene when CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Trevor.") #ENDIF ENDIF ENDIF ENDIF //give task to Trevor ped when not skipping cutscene IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) VECTOR vAnimPosition, vAnimRotation vAnimPosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfra1_tovan", "put_chop_in_van_lam", GET_ENTITY_COORDS(vsVan.VehicleIndex), GET_ENTITY_ROTATION(vsVan.VehicleIndex)) vAnimRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfra1_tovan", "put_chop_in_van_lam", GET_ENTITY_COORDS(vsVan.VehicleIndex), GET_ENTITY_ROTATION(vsVan.VehicleIndex)) FORCE_PED_MOTION_STATE(psTrevor.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) TASK_FOLLOW_NAV_MESH_TO_COORD(psTrevor.PedIndex, vAnimPosition, 0.5, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, vAnimRotation.Z) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_PLAYER_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Chop") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Chop.") #ENDIF IF ( bCutsceneSkipped = FALSE ) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) VECTOR vAnimPosition, vAnimRotation vAnimPosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfra1_tovan", "put_chop_in_van_chop", GET_ENTITY_COORDS(vsVan.VehicleIndex), GET_ENTITY_ROTATION(vsVan.VehicleIndex)) vAnimRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfra1_tovan", "put_chop_in_van_chop", GET_ENTITY_COORDS(vsVan.VehicleIndex), GET_ENTITY_ROTATION(vsVan.VehicleIndex)) WARP_PED(psChop.PedIndex, << -14.66, -1450.87, 29.55 >>, 183.5236, FALSE, FALSE, FALSE) FORCE_PED_MOTION_STATE(psChop.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) TASK_FOLLOW_NAV_MESH_TO_COORD(psChop.PedIndex, vAnimPosition, 1.5, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, vAnimRotation.Z) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_PLAYER_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) ENDIF ENDIF ENDIF ENDIF IF HAS_CUTSCENE_FINISHED() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Intro cutscene has finished.") #ENDIF IF DOES_ENTITY_EXIST(psChop.PedIndex) AND DOES_ENTITY_EXIST(psLamar.PedIndex) AND DOES_ENTITY_EXIST(psTrevor.PedIndex) AND NOT IS_ENTITY_DEAD(psChop.PedIndex) AND NOT IS_ENTITY_DEAD(psLamar.PedIndex) AND NOT IS_ENTITY_DEAD(psTrevor.PedIndex) AND HAS_ANIM_DICT_LOADED("missfra1_tovan") AND HAS_ANIM_DICT_LOADED(GET_CHOP_IN_VAN_ANIM_DICT()) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(psChop.PedIndex) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(psLamar.PedIndex) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(psTrevor.PedIndex) AND HAS_MISSION_VEHICLE_BEEN_CREATED(vsVan, FALSE, FALSE, CHAR_LAMAR, TRUE) AND GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF ( bCutsceneSkipped = TRUE ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repositioning peds and giving new tasks due to into cutscene skip.") #ENDIF SETUP_ROADS_IN_GROVE_STREET(TRUE, iGroveStreetSetup) IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) iVanEnterSceneID = CREATE_SYNCHRONIZED_SCENE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iVanEnterSceneID, vsVan.VehicleIndex, -1) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iVanEnterSceneID, FALSE) PLAY_SYNCHRONIZED_ENTITY_ANIM(vsVan.VehicleIndex, iVanEnterSceneID, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_BLOCK_MOVER_UPDATE | SYNCED_SCENE_VEHICLE_ALLOW_PLAYER_ENTRY)) //PLAY_ENTITY_ANIM(vsVan.VehicleIndex, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, // FALSE, FALSE, FALSE, 0, ENUM_TO_INT(AF_USE_KINEMATIC_PHYSICS)) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(vsVan.VehicleIndex) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) CLEAR_PED_TASKS_IMMEDIATELY(psChop.PedIndex) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_PLAYER_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) TASK_SYNCHRONIZED_SCENE(psChop.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_chop", INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) FORCE_PED_AI_AND_ANIMATION_UPDATE(psChop.PedIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) CLEAR_PED_TASKS_IMMEDIATELY(psTrevor.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) TASK_SYNCHRONIZED_SCENE(psTrevor.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_lam", INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) FORCE_PED_AI_AND_ANIMATION_UPDATE(psTrevor.PedIndex) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) CLEAR_PED_TASKS_IMMEDIATELY(psLamar.PedIndex) WARP_PED(psLamar.PedIndex, psLamar.vPosition, psLamar.fHeading, FALSE, FALSE, FALSE) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) TASK_ENTER_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVE_WALK, ECF_USE_RIGHT_ENTRY | ECF_RESUME_IF_INTERRUPTED) ENDIF ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) WARP_PED(PLAYER_PED_ID(), psFranklin.vPosition, psFranklin.fHeading, FALSE, FALSE, FALSE) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SEQUENCE_INDEX PlayerPedSequence OPEN_SEQUENCE_TASK(PlayerPedSequence) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.25, -1454.61, 29.48 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.99, -1456.87, 29.41 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -18.12, -1456.95, 29.46 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT) CLOSE_SEQUENCE_TASK(PlayerPedSequence) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerPedSequence) CLEAR_SEQUENCE_TASK(PlayerPedSequence) ENDIF ENDIF ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) ENDIF IF DOES_ENTITY_EXIST(osTrowel.ObjectIndex) IF NOT IS_ENTITY_DEAD(osTrowel.ObjectIndex) SET_ENTITY_COORDS_NO_OFFSET(osTrowel.ObjectIndex, osTrowel.vPosition) SET_ENTITY_ROTATION(osTrowel.ObjectIndex, osTrowel.vRotation) FREEZE_ENTITY_POSITION(osTrowel.ObjectIndex, TRUE) ENDIF ENDIF SET_VEHICLE_AS_RESTRICTED(vsVan.VehicleIndex, 0) STORE_PLAYER_PED_VARIATIONS(GET_PED_INDEX(CHAR_TREVOR), TRUE) STORE_PLAYER_PED_VARIATIONS(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) DEBIT_BANK_ACCOUNT(CHAR_TREVOR, BAAC_UNLOGGED_SMALL_ACTION, 7) MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_FRANKLIN_1) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF RETURN TRUE ELSE //if not all entities exits, make sure player peds are created in script if the cutscene did not create them #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Not all entites exist.") #ENDIF ENDIF ELSE //if cutscene is skipped, fade out and remain cutscene on faded out screen IF ( bCutsceneSkipped = FALSE ) IF WAS_CUTSCENE_SKIPPED() SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) bCutsceneSkipped = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Intro mocap cutscene was skipped by the player.") #ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC MANAGE_CONVERSATIONS_DURING_VAN_RIDE(INT &iProgress) IF ( iProgress > 1 ) AND ( iProgress < 3 ) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) AND NOT IS_PED_INJURED(psLamar.PedIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) //resume paused conversations when player gets back in the car IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) ENDIF ENDIF //if vehicle is upside down IF IS_VEHICLE_STOPPED(vsVan.VehicleIndex) AND IS_ENTITY_UPSIDEDOWN(vsVan.VehicleIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_GDVUD") IF ( bConversationPaused = FALSE ) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() lConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_GDVUD", CONV_PRIORITY_HIGH) bConversationPaused = TRUE SET_LABEL_AS_TRIGGERED("F1_GDVUD", TRUE) ENDIF // ELSE // IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_TREVOR)) // PLAY_PED_AMBIENT_SPEECH(GET_PED_INDEX(CHAR_TREVOR), "FKN1_KTAA", SPEECH_PARAMS_FORCE) // bConversationPaused = TRUE // SET_LABEL_AS_TRIGGERED("F1_GDVUD", TRUE) // ENDIF ENDIF ENDIF ENDIF ENDIF ELSE //locates header blip does not exist, player is out of the car or wanted IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) //when wanted, kill conversation, pause it and play wanted conversation IF ( bConversationPaused = FALSE ) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() lConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_WNTD", CONV_PRIORITY_HIGH) bConversationPaused = TRUE ENDIF ENDIF ENDIF ELSE //player not wanted, pause face to face conversations IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF SWITCH iProgress CASE 0 iConversationTimer = GET_GAME_TIMER() iProgress++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Conversation progress is now ", iProgress, ".") #ENDIF BREAK CASE 1 IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) AND NOT IS_PED_INJURED(psLamar.PedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SDRVE") IF HAS_TIME_PASSED(1500, iConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) //check if player ped is near the van to trigger the conversation, in case player decides to run away from the van IF IS_PED_IN_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsVan.VehicleIndex, TRUE) AND IS_PED_IN_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsVan.VehicleIndex, TRUE) AND IS_PED_IN_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex, TRUE) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SDRVE", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_SDRVE", TRUE) ENDIF ENDIF ENDIF ENDIF ELSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() iProgress++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Conversation progress is now ", iProgress, ".") #ENDIF ENDIF ENDIF ENDIF BREAK CASE 2 IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) AND NOT IS_ENTITY_UPSIDEDOWN(vsVan.VehicleIndex) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) AND NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) AND NOT IS_PED_INJURED(psLamar.PedIndex) IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) //handle the "F1_DRIVE" conversation when Franklin, Trevor, Laamar and Chop drive to Grove Street IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_DRIVE") IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) AND NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_DRIVE", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_DRIVE", TRUE) bConversationPaused = FALSE //set the main conversation as not paused ENDIF ENDIF ELSE IF ( bConversationPaused = TRUE ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sFranklin1Conversation, "FKN1AUD", "F1_DRIVE", lConversationLabel, CONV_PRIORITY_MEDIUM) bConversationPaused = FALSE SET_LABEL_AS_TRIGGERED("F1_GDVUD", FALSE) ENDIF ENDIF ENDIF ENDIF //handle the "F1_ALLEY" conversation as the peds get close to the alley near Grove Street, pick randomly from 2 versions IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_ALLEY") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_ALLEY2") IF IS_ENTITY_AT_COORD(vsVan.VehicleIndex, <<-12.465752,-1776.519531,29.691679>>, << 24.0, 24.0, 4.0 >>) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_ALLEY", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_ALLEY", TRUE) bConversationPaused = FALSE //set the main conversation as not paused ENDIF BREAK CASE 1 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_ALLEY2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_ALLEY2", TRUE) bConversationPaused = FALSE //set the main conversation as not paused ENDIF BREAK ENDSWITCH ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF ELSE IF ( bConversationPaused = TRUE ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sFranklin1Conversation, "FKN1AUD", "F1_ALLEY", lConversationLabel, CONV_PRIORITY_MEDIUM) bConversationPaused = FALSE SET_LABEL_AS_TRIGGERED("F1_GDVUD", FALSE) ENDIF ENDIF ENDIF ENDIF //handle the "F1_DRVE2" conversation about Clay Jackson as the peds get closer to the deal location IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_DRVE2") IF IS_ENTITY_AT_COORD(vsVan.VehicleIndex, <<-46.280575,-1832.291138,27.419958>>, << 58.0, 32.0, 5.0 >>) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_DRVE2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_DRVE2", TRUE) //make sure alley conversations doesn't play after this one if player avoided alley conversation locates SET_LABEL_AS_TRIGGERED("F1_ALLEY", TRUE) bConversationPaused = FALSE //set the main conversation as not paused #IF IS_DEBUG_BUILD bStageResetFlag = TRUE #ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF ELSE IF ( bConversationPaused = TRUE ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sFranklin1Conversation, "FKN1AUD", "F1_DRVE2", lConversationLabel, CONV_PRIORITY_MEDIUM) bConversationPaused = FALSE SET_LABEL_AS_TRIGGERED("F1_GDVUD", FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF //handle the "F1_LCAR" conversation when the peds get out of the van IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCAR") IF ( bPlayerArrivedAtGroveStreet = TRUE ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCAR", "F1_LCAR_01", CONV_PRIORITY_HIGH) SET_LABEL_AS_TRIGGERED("F1_LCAR", TRUE) iConversationTimer = GET_GAME_TIMER() iProgress++ #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Conversation progress is now ", iProgress, ".") #ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF ENDIF ENDIF BREAK CASE 3 //lead in conversations IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_MCS1L_1") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_MCS1L", "F1_MCS1L_1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_MCS1L_1", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_MCS1L_2") IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_MCS1L", "F1_MCS1L_2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_MCS1L_2", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_HURRY") IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_MCS1L_2") IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_intro_lamar") OR IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_loop_lamar") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF HAS_TIME_PASSED(10000, psLamar.iHealthConversationTimer) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_HURRY2") IF IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_HURRY2", CONV_PRIORITY_MEDIUM) psLamar.iHealthConversationTimer = GET_GAME_TIMER() psLamar.iHealthConversationCounter++ IF ( psLamar.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_HURRY", TRUE) ENDIF SET_LABEL_AS_TRIGGERED("F1_HURRY2", TRUE) TASK_LOOK_AT_ENTITY(psLamar.PedIndex, PLAYER_PED_ID(), 2000, SLF_WHILE_NOT_IN_FOV) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_HURRY1") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_HURRY1", CONV_PRIORITY_MEDIUM) psLamar.iHealthConversationTimer = GET_GAME_TIMER() psLamar.iHealthConversationCounter++ IF ( psLamar.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_HURRY", TRUE) ENDIF TASK_LOOK_AT_ENTITY(psLamar.PedIndex, PLAYER_PED_ID(), 2000, SLF_WHILE_NOT_IN_FOV) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_CHOP_IN_VAN(INT &iProgress) IF IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) SET_PED_CAPSULE(psChop.PedIndex, 0.25) SET_PED_RESET_FLAG(psChop.PedIndex, PRF_ExpandPedCapsuleFromSkeleton, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) SET_PED_CAPSULE(psTrevor.PedIndex, 0.5) //SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_ExpandPedCapsuleFromSkeleton, TRUE) ENDIF ENDIF ENDIF SWITCH iProgress CASE 0 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) IF NOT IS_PED_INJURED(psChop.PedIndex) AND NOT IS_PED_INJURED(psTrevor.PedIndex) //fix for B*1827983, stop Trevor from playing wall hit animation when walking into Chop SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_DisableWallHitAnimation, TRUE) SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_DisablePedCollisionWithPedEvent, TRUE) IF GET_SCRIPT_TASK_STATUS(psTrevor.PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = FINISHED_TASK IF GET_SCRIPT_TASK_STATUS(psTrevor.PedIndex, SCRIPT_TASK_LOOK_AT_ENTITY) != PERFORMING_TASK TASK_LOOK_AT_ENTITY(psTrevor.PedIndex, psChop.PedIndex, INFINITE_TASK_TIME) ENDIF ENDIF IF GET_SCRIPT_TASK_STATUS(psChop.PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = FINISHED_TASK AND GET_SCRIPT_TASK_STATUS(psTrevor.PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = FINISHED_TASK iProgress++ ENDIF ENDIF ELSE iProgress++ ENDIF BREAK CASE 1 IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) iVanEnterSceneID = CREATE_SYNCHRONIZED_SCENE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iVanEnterSceneID, vsVan.VehicleIndex, -1) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iVanEnterSceneID, FALSE) PLAY_SYNCHRONIZED_ENTITY_ANIM(vsVan.VehicleIndex, iVanEnterSceneID, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_BLOCK_MOVER_UPDATE | SYNCED_SCENE_VEHICLE_ALLOW_PLAYER_ENTRY)) //PLAY_ENTITY_ANIM(vsVan.VehicleIndex, "put_chop_in_van_van", "missfra1_tovan", INSTANT_BLEND_IN, // FALSE, FALSE, FALSE, 0, ENUM_TO_INT(AF_USE_KINEMATIC_PHYSICS)) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(vsVan.VehicleIndex) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) //CLEAR_PED_TASKS_IMMEDIATELY(psChop.PedIndex) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_PLAYER_IMPACT) TASK_SYNCHRONIZED_SCENE(psChop.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_chop", WALK_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_MELEE | RBF_PLAYER_IMPACT | RBF_BULLET_IMPACT, WALK_BLEND_IN) FORCE_PED_AI_AND_ANIMATION_UPDATE(psChop.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) //CLEAR_PED_TASKS_IMMEDIATELY(psTrevor.PedIndex) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_PLAYER_IMPACT) TASK_SYNCHRONIZED_SCENE(psTrevor.PedIndex, iVanEnterSceneID, "missfra1_tovan", "put_chop_in_van_lam", WALK_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_MELEE | RBF_PLAYER_IMPACT | RBF_BULLET_IMPACT, WALK_BLEND_IN) FORCE_PED_AI_AND_ANIMATION_UPDATE(psTrevor.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) ENDIF ENDIF ELSE iProgress++ ENDIF ENDIF ENDIF BREAK CASE 2 IF DOES_ENTITY_EXIST(vsVan.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) IF NOT IS_PED_IN_VEHICLE(psTrevor.PedIndex, vsVan.VehicleIndex) IF IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) IF GET_SYNCHRONIZED_SCENE_PHASE(iVanEnterSceneID) > 0.9875 CLEAR_PED_TASKS(psTrevor.PedIndex) TASK_CLEAR_LOOK_AT(psTrevor.PedIndex) SET_PED_INTO_VEHICLE(psTrevor.PedIndex, vsVan.VehicleIndex, VS_BACK_LEFT) SET_VEHICLE_DOOR_LATCHED(vsVan.VehicleIndex, SC_DOOR_REAR_LEFT, TRUE, TRUE) ENDIF ENDIF IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) CLEAR_PED_TASKS(psTrevor.PedIndex) TASK_CLEAR_LOOK_AT(psTrevor.PedIndex) SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(psTrevor.PedIndex, TRUE) SET_PED_INTO_VEHICLE(psTrevor.PedIndex, vsVan.VehicleIndex, VS_BACK_LEFT) SET_VEHICLE_DOOR_LATCHED(vsVan.VehicleIndex, SC_DOOR_REAR_LEFT, TRUE, TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanEnterSceneID) IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) CLEAR_PED_TASKS(psChop.PedIndex) SET_PED_CAN_RAGDOLL(psChop.PedIndex, FALSE) SET_CHOP_INTO_VAN(psChop.PedIndex, vsVan.VehicleIndex, eChopInVanState, fCachedVanSpeed, FALSE, TRUE, FALSE, TRUE, 0.00955187, -0.951951, 0.273625) ENDIF ENDIF REMOVE_ANIM_DICT("missfra1_tovan") iProgress++ ENDIF ENDIF ENDIF BREAK CASE 3 HANDLE_CHOP_LEAN_IN_VAN(psChop.PedIndex, vsVan.VehicleIndex, eChopInVanState, fCachedVanSpeed, iNextChopAnimTime, iNextBarkTime) IF ( bPlayerArrivedAtGroveStreet = TRUE ) iProgress++ ENDIF BREAK ENDSWITCH ENDPROC FUNC BOOL IS_MISSION_STAGE_DRIVE_TO_DEAL_COMPLETED(INT &iStageProgress) SET_BIT(sLocatesData.iLocatesBitSet, BS_DONT_DO_J_SKIP) MANAGE_CHOP_IN_VAN(iChopInVanProgress) MANAGE_BMX_CREW(psBmxCrew[0].iProgress) CREATE_PARKED_VEHICLES(iParkedVehiclesProgress) MANAGE_CONVERSATIONS_DURING_VAN_RIDE(iConversationProgress) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableAgitation, TRUE) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableAgitationTriggers, TRUE) ENDIF IF NOT IS_PED_INJURED(psTrevor.PedIndex) SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_DisableAgitation, TRUE) SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_DisableAgitationTriggers, TRUE) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_RESET_FLAG(psLamar.PedIndex, PRF_DisableAgitation, TRUE) SET_PED_RESET_FLAG(psLamar.PedIndex, PRF_DisableAgitationTriggers, TRUE) ENDIF IF DOES_BLIP_EXIST(vsVan.BlipIndex) IF IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) IF IS_THIS_PRINT_BEING_DISPLAYED("FRA1_GIV") CLEAR_PRINTS() ENDIF REMOVE_BLIP(vsVan.BlipIndex) ENDIF ENDIF IF ( bShouldUseDefaultRoute = FALSE ) IF ( bCustomRouteActive = FALSE ) IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) SET_GPS_DISABLED_ZONE(<< 32.459106 - 42.0, -1468.717529 - 42.0, 35.138702 - 8.0>>, << 32.459106 + 42.0, -1468.717529 + 42.0, 35.138702 + 8.0>>) bCustomRouteActive = TRUE ENDIF ELSE IF NOT DOES_BLIP_EXIST(sLocatesData.LocationBlip) SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) bCustomRouteActive = FALSE ENDIF IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << 32.459106, -1468.717529, 35.138702 >>, << 42.0, 42.0, 8.0 >>) OR NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -52.991241, -1465.017944, 36.128830>>, << 64.0, 64.0, 8.0 >>) SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) bShouldUseDefaultRoute = TRUE ENDIF ENDIF ENDIF ENDIF SWITCH iStageProgress CASE 0 //give ped tasks to enter the van and create blips IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) IF ( GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK ) SEQUENCE_INDEX PlayerPedSequence OPEN_SEQUENCE_TASK(PlayerPedSequence) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -13.81, -1454.59, 29.49 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -14.39, -1456.48, 29.41 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -18.12, -1456.95, 29.46 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT) CLOSE_SEQUENCE_TASK(PlayerPedSequence) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerPedSequence) CLEAR_SEQUENCE_TASK(PlayerPedSequence) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF NOT IS_PED_GETTING_INTO_A_VEHICLE(psLamar.PedIndex) AND NOT ( GET_SCRIPT_TASK_STATUS(psLamar.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) = PERFORMING_TASK ) AND NOT ( GET_SCRIPT_TASK_STATUS(psLamar.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK ) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) TASK_ENTER_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVE_WALK, ECF_USE_RIGHT_ENTRY | ECF_RESUME_IF_INTERRUPTED) ENDIF ENDIF ENDIF //block the back doors of the van from being broken off SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVan.VehicleIndex, SC_DOOR_REAR_LEFT, FALSE) SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVan.VehicleIndex, SC_DOOR_REAR_RIGHT, FALSE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) IF NOT DOES_BLIP_EXIST(vsVan.BlipIndex) vsVan.BlipIndex = CREATE_BLIP_FOR_VEHICLE(vsVan.VehicleIndex, FALSE) ENDIF PRINT_GOD_TEXT_ADVANCED("FRA1_GIV", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF iStageProgress++ BREAK CASE 1 //wait until all peds enter the van //block the driving controls until all peds are in IF IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) DISABLE_PLAYER_VEHICLE_DRIVING_CONTROLS_THIS_FRAME() ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_PED_INJURED(psLamar.PedIndex) AND NOT IS_PED_INJURED(psTrevor.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) //block player from getting through lamar's door SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePlayerToEnterVehicleThroughDirectDoorOnly, TRUE) IF ( bEnterVehicleTaskInterrupted = FALSE ) INT iXValue, iYValue iXValue = ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR) * 255.0) iYValue = ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD) * 255.0) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID()) IF (iXValue < -20 OR iXValue > 20) OR (iYValue < -20 OR iYValue > 20) CLEAR_PED_TASKS(PLAYER_PED_ID()) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WaitingForPlayerControlInterrupt, TRUE) bEnterVehicleTaskInterrupted = TRUE ENDIF ENDIF ENDIF IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WaitingForPlayerControlInterrupt, TRUE) bEnterVehicleTaskInterrupted = TRUE ENDIF ENDIF IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) AND IS_PED_SITTING_IN_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex) AND IS_PED_SITTING_IN_VEHICLE(psTrevor.PedIndex, vsVan.VehicleIndex) REPLAY_RECORD_BACK_FOR_TIME(5.0 , 8.0, REPLAY_IMPORTANCE_HIGHEST) iStageProgress++ ENDIF ENDIF BREAK CASE 2 IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) AND NOT IS_PED_INJURED(PLAYER_PED_ID()) IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(),vsVan.VehicleIndex) IF NOT DOES_BLIP_EXIST(vsVan.BlipIndex) vsVan.BlipIndex = CREATE_BLIP_FOR_VEHICLE(vsVan.VehicleIndex) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_GBIV") PRINT_GOD_TEXT_ADVANCED("FRA1_GBIV") SET_LABEL_AS_TRIGGERED("FRA1_GBIV", TRUE) ENDIF ELSE IF HAS_LABEL_BEEN_TRIGGERED("FRA1_GBIV") CLEAR_PRINTS() ENDIF IF DOES_BLIP_EXIST(vsVan.BlipIndex) REMOVE_BLIP(vsVan.BlipIndex) ENDIF ENDIF ENDIF //if dialogue has been played, then move on IF HAS_LABEL_BEEN_TRIGGERED("F1_SDRVE") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() iStageProgress++ ENDIF ENDIF BREAK CASE 3 //Franklin, Trevor, Lamar and Chop drive to Grove Street IF DOES_BLIP_EXIST(vsVan.BlipIndex) REMOVE_BLIP(vsVan.BlipIndex) ENDIF IF IS_PLAYER_AT_LOCATION_WITH_BUDDIES_IN_VEHICLE(sLocatesData, << 99.07, -1945.10, 19.73 >>, << 3.0, 3.0, LOCATE_SIZE_HEIGHT >>, TRUE, psLamar.PedIndex, psTrevor.PedIndex, NULL, vsVan.VehicleIndex, "FRA1_GROVE", "CMN_LLEAVE", "CMN_TLEAVE", "FRA1_PICKUP", "FRA1_PICKUP", "FRA1_GIV", "FRA1_GBIV", FALSE, TRUE, TRUE) CLEANUP_PED_GROUP(psBmxCrew, FALSE) CLEANUP_VEHICLE_GROUP(vsBmxBikes, FALSE, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(BMX) DISABLE_CELLPHONE_THIS_FRAME_ONLY() bPlayerArrivedAtGroveStreet = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player arrived at Grove Street locate.") #ENDIF REPLAY_RECORD_BACK_FOR_TIME(5.0 , 8.0, REPLAY_IMPORTANCE_HIGHEST) iStageProgress++ ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_GET_TO_GROVE_ST") IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) START_AUDIO_SCENE("FRANKLIN_1_GET_TO_GROVE_ST") ENDIF ENDIF IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP() OR IS_PLAYER_CHANGING_CLOTHES() IF HAS_THIS_CUTSCENE_LOADED("fra_1_mcs_1") OR HAS_CUTSCENE_LOADED() OR IS_CUTSCENE_ACTIVE() REMOVE_CUTSCENE() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player browsing items in a shop or changing clothes. Removing cutscene.") #ENDIF ENDIF ELSE IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vGroveStreet) < DEFAULT_CUTSCENE_LOAD_DIST REQUEST_CUTSCENE("fra_1_mcs_1") REQUEST_IPL("SC1_27_Cut") REQUEST_MODEL(osBag.ModelName) REQUEST_ANIM_DICT("missfra1leadinoutmcs_1") REQUEST_CLIP_SET("move_ped_wpn_jerrycan_generic") REQUEST_WEAPON_ASSET(WEAPONTYPE_SMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_PUMPSHOTGUN) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) REQUEST_MODEL(GET_WEAPONTYPE_MODEL(WEAPONTYPE_SMG)) REQUEST_MODEL(GET_WEAPONTYPE_MODEL(WEAPONTYPE_PUMPSHOTGUN)) REQUEST_MODEL(GET_WEAPONTYPE_MODEL(WEAPONTYPE_ASSAULTRIFLE)) CLEANUP_MISSION_OBJECT(osTrowel, TRUE) IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Franklin", GET_PED_INDEX(CHAR_FRANKLIN)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Trevor", GET_PED_INDEX(CHAR_TREVOR)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Lamar", psLamar.PedIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting cutscene ped components for cutscene ped Franklin, Trevor, Lamar and Chop from peds.") #ENDIF ENDIF ELSE IF HAS_THIS_CUTSCENE_LOADED("fra_1_mcs_1") OR HAS_CUTSCENE_LOADED() OR IS_CUTSCENE_ACTIVE() REMOVE_CUTSCENE() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player too far away from destination to keep cutscene in memory. Removing cutscene.") #ENDIF ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) ENDIF ENDIF ENDIF BREAK CASE 4 IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vsVan.VehicleIndex, 6.0) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) SET_VEHICLE_UNDRIVEABLE(vsVan.VehicleIndex, TRUE) //make sure it does not turn back on due to player sitting in it SET_VEHICLE_ENGINE_ON(vsVan.VehicleIndex, FALSE, FALSE) //switch of van engine SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsVan.VehicleIndex, FALSE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) psChop.iProgress = 0 psLamar.iProgress = 0 psTrevor.iProgress = 0 psChop.bHasTask = FALSE psLamar.bHasTask = FALSE psTrevor.bHasTask = FALSE STOP_AUDIO_SCENE("FRANKLIN_1_GET_TO_GROVE_ST") CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) iStageProgress++ ENDIF BREAK CASE 5 SUPPRESS_CONTEXT_BUTTON_ACTIONS_THIS_FRAME() DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DUCK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON) SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK) IF IS_PED_IN_THIS_VEHICLE(psLamar.PedIndex, vsVan.VehicleIndex) AND IS_PED_IN_THIS_VEHICLE(psTrevor.PedIndex, vsVan.VehicleIndex) AND IS_PED_SITTING_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsVan.VehicleIndex) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) ENDIF IF ( bLeadInLocateReached = FALSE ) IF ( bLeadInTriggered = TRUE ) OR IS_PLAYER_AT_LOCATION_ANY_MEANS(sLocatesData, << 85.99, -1957.19, 19.75 >>, << 1.25, 1.25, LOCATE_SIZE_HEIGHT >>, TRUE, "FRA1_HOUSE", TRUE) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) bLeadInLocateReached = TRUE ENDIF ENDIF IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(psLamar.PedIndex, GET_STRING_FROM_INT(psLamar.iProgress), 1.0) #ENDIF SET_PED_RESET_FLAG(psLamar.PedIndex, PRF_DisablePedCollisionWithPedEvent, TRUE) SWITCH psLamar.iProgress CASE 0 IF ( psLamar.bHasTask = FALSE ) IF HAS_LABEL_BEEN_TRIGGERED("F1_MCS1L_1") osBag.vPosition = GET_ENTITY_COORDS(psLamar.PedIndex) osBag.vRotation = << 0.0, 0.0, 0.0 >> IF HAS_MISSION_OBJECT_BEEN_CREATED(osBag) ATTACH_ENTITY_TO_ENTITY(osBag.ObjectIndex, psLamar.PedIndex, GET_PED_BONE_INDEX(psLamar.PedIndex, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) PLAY_ENTITY_ANIM(osBag.ObjectIndex, "money_bag", "missfra1leadinoutmcs_1", INSTANT_BLEND_IN, TRUE, FALSE) SET_ENTITY_VISIBLE(osBag.ObjectIndex, FALSE) ENDIF REMOVE_PED_FROM_GROUP(psLamar.PedIndex) SET_PED_WEAPON_MOVEMENT_CLIPSET(psLamar.PedIndex, "move_ped_wpn_jerrycan_generic") VECTOR vScenePosition, vSceneRotation vScenePosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfra1leadinoutmcs_1", "_leadin_intro_lamar", vLamarsLeadInPosition, vLamarsLeadInRotation) vSceneRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfra1leadinoutmcs_1", "_leadin_intro_lamar", vLamarsLeadInPosition, vLamarsLeadInRotation) SEQUENCE_INDEX WalkSequenceIndex CLEAR_SEQUENCE_TASK(WalkSequenceIndex) OPEN_SEQUENCE_TASK(WalkSequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 87.99, -1954.83, 19.76 >>, PEDMOVE_WALK + 0.2, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vScenePosition, PEDMOVE_WALK + 0.2, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, vSceneRotation.Z) TASK_ACHIEVE_HEADING(NULL, vSceneRotation.Z) TASK_STAND_STILL(NULL, 10) CLOSE_SEQUENCE_TASK(WalkSequenceIndex) TASK_PERFORM_SEQUENCE(psLamar.PedIndex, WalkSequenceIndex) CLEAR_SEQUENCE_TASK(WalkSequenceIndex) SET_RAGDOLL_BLOCKING_FLAGS(psLamar.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psLamar.PedIndex, RBF_PLAYER_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(psLamar.PedIndex, RBF_BULLET_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) psLamar.bHasTask = TRUE ENDIF ENDIF IF ( psLamar.bHasTask = TRUE ) IF DOES_ENTITY_EXIST(osBag.ObjectIndex) IF NOT IS_ENTITY_DEAD(osBag.ObjectIndex) IF NOT IS_ENTITY_VISIBLE(osBag.ObjectIndex) IF NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) SET_ENTITY_VISIBLE(osBag.ObjectIndex, TRUE) ENDIF ENDIF ENDIF ENDIF IF GET_SCRIPT_TASK_STATUS(psLamar.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK psLamar.bHasTask = FALSE psLamar.iProgress++ ENDIF ENDIF BREAK CASE 1 IF ( psLamar.bHasTask = FALSE ) IF HAS_ANIM_DICT_LOADED("missfra1leadinoutmcs_1") SEQUENCE_INDEX AnimSequenceIndex CLEAR_SEQUENCE_TASK(AnimSequenceIndex) OPEN_SEQUENCE_TASK(AnimSequenceIndex) TASK_PLAY_ANIM_ADVANCED(NULL, "missfra1leadinoutmcs_1", "_leadin_intro_lamar", vLamarsLeadInPosition, vLamarsLeadInRotation, SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) TASK_PLAY_ANIM_ADVANCED(NULL, "missfra1leadinoutmcs_1", "_leadin_loop_lamar", vLamarsLeadInPosition, vLamarsLeadInRotation, SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_LOOPING | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) CLOSE_SEQUENCE_TASK(AnimSequenceIndex) TASK_PERFORM_SEQUENCE(psLamar.PedIndex, AnimSequenceIndex) CLEAR_SEQUENCE_TASK(AnimSequenceIndex) TASK_LOOK_AT_ENTITY(psLamar.PedIndex, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV) RESET_PED_WEAPON_MOVEMENT_CLIPSET(psLamar.PedIndex) psLamar.iHealthConversationTimer = GET_GAME_TIMER() psLamar.iHealthConversationCounter = 0 psLamar.bHasTask = TRUE ELSE REQUEST_ANIM_DICT("missfra1leadinoutmcs_1") ENDIF ENDIF IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_loop_lamar") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<90.288116,-1952.259155,19.639692>>, <<84.327744,-1959.426147,23.126755>>, 8.0) bLeadInTriggered = TRUE psLamar.bHasTask = FALSE psLamar.iProgress++ ENDIF ENDIF BREAK CASE 2 IF ( psLamar.bHasTask = FALSE ) IF HAS_ANIM_DICT_LOADED("missfra1leadinoutmcs_1") TASK_PLAY_ANIM_ADVANCED(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar", vLamarsLeadInPosition, vLamarsLeadInRotation, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_HOLD_LAST_FRAME | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) RESET_PED_WEAPON_MOVEMENT_CLIPSET(psLamar.PedIndex) psLamar.bHasTask = TRUE ELSE REQUEST_ANIM_DICT("missfra1leadinoutmcs_1") ENDIF ENDIF IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") SET_ENTITY_ANIM_SPEED(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar", 1.25) ENDIF BREAK ENDSWITCH IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_loop_lamar") OR IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_loop_lamar") OR IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") SET_PED_CAPSULE(psLamar.PedIndex, 0.25) SET_PED_RESET_FLAG(psLamar.PedIndex, PRF_ExpandPedCapsuleFromSkeleton, TRUE) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psTrevor.PedIndex) IF NOT IS_ENTITY_DEAD(psTrevor.PedIndex) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(psTrevor.PedIndex, GET_STRING_FROM_INT(psTrevor.iProgress), 1.0) #ENDIF SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_DisablePedCollisionWithPedEvent, TRUE) SWITCH psTrevor.iProgress CASE 0 IF ( psTrevor.bHasTask = FALSE ) IF NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) VECTOR vScenePosition, vSceneRotation vScenePosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfra1leadinoutmcs_1", "_leadin_action_trevor", vTrevorsLeadInPosition, vTrevorsLeadInRotation) vSceneRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfra1leadinoutmcs_1", "_leadin_action_trevor", vTrevorsLeadInPosition, vTrevorsLeadInRotation) REMOVE_PED_FROM_GROUP(psTrevor.PedIndex) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL, 500) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 86.44, -1955.48, 19.77 >>, PEDMOVE_WALK - 0.2, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vScenePosition, PEDMOVE_WALK - 0.2, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, vSceneRotation.Z) TASK_ACHIEVE_HEADING(NULL, vSceneRotation.Z) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psTrevor.PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_PLAYER_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(psTrevor.PedIndex, RBF_BULLET_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) psTrevor.bHasTask = TRUE ENDIF ENDIF IF ( psTrevor.bHasTask = TRUE ) IF GET_SCRIPT_TASK_STATUS(psTrevor.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK psTrevor.bHasTask = FALSE psTrevor.iProgress++ ENDIF ENDIF BREAK CASE 1 IF ( psTrevor.bHasTask = FALSE ) TASK_LOOK_AT_ENTITY(psTrevor.PedIndex, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV) psTrevor.bHasTask = TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<90.288116,-1952.259155,19.639692>>, <<84.327744,-1959.426147,23.126755>>, 8.0) psTrevor.bHasTask = FALSE psTrevor.iProgress++ ENDIF BREAK CASE 2 IF ( psTrevor.bHasTask = FALSE ) IF HAS_ANIM_DICT_LOADED("missfra1leadinoutmcs_1") IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") //TASK_PLAY_ANIM_ADVANCED(psTrevor.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_trevor", // vTrevorsLeadInPosition, vTrevorsLeadInRotation, // SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, // AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | // AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME) TASK_PLAY_ANIM(psTrevor.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_trevor", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME) psTrevor.bHasTask = TRUE ENDIF ELSE REQUEST_ANIM_DICT("missfra1leadinoutmcs_1") ENDIF ENDIF IF IS_ENTITY_PLAYING_ANIM(psTrevor.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_trevor") SET_ENTITY_ANIM_SPEED(psTrevor.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_trevor", 1.25) ENDIF BREAK ENDSWITCH IF IS_ENTITY_PLAYING_ANIM(psTrevor.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_trevor") SET_PED_CAPSULE(psTrevor.PedIndex, 0.25) SET_PED_RESET_FLAG(psTrevor.PedIndex, PRF_ExpandPedCapsuleFromSkeleton, TRUE) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(psChop.PedIndex, GET_STRING_FROM_INT(psChop.iProgress), 1.0) #ENDIF SWITCH psChop.iProgress CASE 0 IF NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) IF IS_ENTRY_POINT_FOR_SEAT_CLEAR(psTrevor.PedIndex, vsVan.VehicleIndex, VS_BACK_LEFT) AND IS_ENTRY_POINT_FOR_SEAT_CLEAR(psTrevor.PedIndex, vsVan.VehicleIndex, VS_BACK_RIGHT) IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanExitSceneID) iVanExitSceneID = CREATE_SYNCHRONIZED_SCENE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iVanExitSceneID, FALSE) ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iVanExitSceneID, vsVan.VehicleIndex, -1) IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) PLAY_ENTITY_ANIM(vsVan.VehicleIndex, "_open_van_door_van", "missfra1leadinoutmcs_1", INSTANT_BLEND_IN, FALSE, FALSE, FALSE, 0, ENUM_TO_INT(AF_USE_KINEMATIC_PHYSICS)) ENDIF IF IS_ENTITY_ATTACHED(psChop.PedIndex) DETACH_ENTITY(psChop.PedIndex) ENDIF SET_PED_CAN_RAGDOLL(psChop.PedIndex, TRUE) CLEAR_PED_TASKS_IMMEDIATELY(psChop.PedIndex) TASK_SYNCHRONIZED_SCENE(psChop.PedIndex, iVanExitSceneID, "missfra1leadinoutmcs_1", "chop_van_getout", INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT) FORCE_PED_AI_AND_ANIMATION_UPDATE(psChop.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) ENDIF ELSE IF IS_ENTITY_ATTACHED(psChop.PedIndex) DETACH_ENTITY(psChop.PedIndex) ENDIF CLEAR_PED_TASKS_IMMEDIATELY(psChop.PedIndex) WARP_PED(psChop.PedIndex, << 91.15, -1945.23, 19.74 >>, 0.0, FALSE, FALSE, FALSE) ENDIF REMOVE_ANIM_DICT(GET_CHOP_IN_VAN_ANIM_DICT()) psChop.bHasTask = FALSE psChop.iProgress++ ENDIF BREAK CASE 1 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iVanExitSceneID) psChop.bHasTask = FALSE psChop.iProgress++ ENDIF BREAK CASE 2 IF ( psChop.bHasTask = FALSE ) REQUEST_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@base") REQUEST_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@enter") REQUEST_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@idle_a") SEQUENCE_INDEX ChopSequenceIndex CLEAR_SEQUENCE_TASK(ChopSequenceIndex) OPEN_SEQUENCE_TASK(ChopSequenceIndex) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 89.63, -1954.82, 19.84 >>, PEDMOVE_WALK - 0.4, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 88.250, -1956.100, 19.83 >>, PEDMOVE_WALK - 0.4, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_STOP_EXACTLY, 95.0) CLOSE_SEQUENCE_TASK(ChopSequenceIndex) TASK_PERFORM_SEQUENCE(psChop.PedIndex, ChopSequenceIndex) CLEAR_SEQUENCE_TASK(ChopSequenceIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) psChop.bHasTask = TRUE ENDIF IF ( psChop.bHasTask = TRUE ) IF IS_ENTITY_AT_COORD(psChop.PedIndex, << 88.250, -1956.100, 19.83 >>, << 1.0, 1.0, 1.0>>) IF GET_SCRIPT_TASK_STATUS(psChop.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK IF HAS_ANIM_DICT_LOADED("creatures@rottweiler@amb@world_dog_sitting@base") AND HAS_ANIM_DICT_LOADED("creatures@rottweiler@amb@world_dog_sitting@enter") AND HAS_ANIM_DICT_LOADED("creatures@rottweiler@amb@world_dog_sitting@idle_a") psChop.bHasTask = FALSE psChop.iProgress++ ENDIF ENDIF ENDIF ENDIF BREAK CASE 3 IF ( psChop.bHasTask = FALSE ) SEQUENCE_INDEX ChopSequenceIndex CLEAR_SEQUENCE_TASK(ChopSequenceIndex) OPEN_SEQUENCE_TASK(ChopSequenceIndex) TASK_PLAY_ANIM(NULL, "creatures@rottweiler@amb@world_dog_sitting@enter", "enter", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) TASK_PLAY_ANIM(NULL, "creatures@rottweiler@amb@world_dog_sitting@base", "base", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_LOOPING | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) CLOSE_SEQUENCE_TASK(ChopSequenceIndex) TASK_PERFORM_SEQUENCE(psChop.PedIndex, ChopSequenceIndex) CLEAR_SEQUENCE_TASK(ChopSequenceIndex) CLEAR_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_MELEE) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_PLAYER_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(psChop.PedIndex, RBF_BULLET_IMPACT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psChop.PedIndex, TRUE) psChop.iTimer = GET_GAME_TIMER() psChop.iHealthConversationTimer = GET_RANDOM_INT_IN_RANGE(5000, 7501) psChop.bHasTask = TRUE ENDIF IF ( psChop.bHasTask = TRUE ) IF IS_ENTITY_PLAYING_ANIM(psChop.PedIndex, "creatures@rottweiler@amb@world_dog_sitting@base", "base") IF HAS_TIME_PASSED(psChop.iHealthConversationTimer, psChop.iTimer) STRING ChopAnimation SEQUENCE_INDEX ChopSequenceIndex SWITCH GET_RANDOM_INT_IN_RANGE(0, 3) CASE 0 ChopAnimation = "idle_a" BREAK CASE 1 ChopAnimation = "idle_b" BREAK CASE 2 ChopAnimation = "idle_c" BREAK ENDSWITCH CLEAR_SEQUENCE_TASK(ChopSequenceIndex) OPEN_SEQUENCE_TASK(ChopSequenceIndex) TASK_PLAY_ANIM(NULL, "creatures@rottweiler@amb@world_dog_sitting@idle_a", ChopAnimation, SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) TASK_PLAY_ANIM(NULL, "creatures@rottweiler@amb@world_dog_sitting@base", "base", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_LOOPING | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) CLOSE_SEQUENCE_TASK(ChopSequenceIndex) TASK_PERFORM_SEQUENCE(psChop.PedIndex, ChopSequenceIndex) CLEAR_SEQUENCE_TASK(ChopSequenceIndex) psChop.iTimer = GET_GAME_TIMER() psChop.iPedConversationTimer = GET_RANDOM_INT_IN_RANGE(5000, 7501) ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_PED_INJURED(psChop.PedIndex) AND NOT IS_PED_INJURED(psLamar.PedIndex) AND NOT IS_PED_INJURED(psTrevor.PedIndex) IF IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_TREVOR), <<86.655319,-1959.258545,19.626707>>, <<84.261604,-1957.282837,22.626705>>, 3.5) AND IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, <<86.655319,-1959.258545,19.626707>>, <<84.261604,-1957.282837,22.626705>>, 3.5) IF IS_ENTITY_PLAYING_ANIM(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") IF GET_ENTITY_ANIM_CURRENT_TIME(psLamar.PedIndex, "missfra1leadinoutmcs_1", "_leadin_action_lamar") > 0.725 REMOVE_PED_FROM_GROUP(psChop.PedIndex) REMOVE_ANIM_DICT("missfra1leadinoutmcs_1") REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@base") REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@enter") REMOVE_ANIM_DICT("creatures@rottweiler@amb@world_dog_sitting@idle_a") REMOVE_CLIP_SET("move_ped_wpn_jerrycan_generic") RESET_PED_WEAPON_MOVEMENT_CLIPSET(psLamar.PedIndex) REMOVE_VEHICLE_ASSET(GET_NPC_VEH_MODEL(CHAR_LAMAR)) TASK_CLEAR_LOOK_AT(psLamar.PedIndex) TASK_CLEAR_LOOK_AT(psTrevor.PedIndex) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) RETURN TRUE ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC MANAGE_LAMAR_IN_GROVE_STREET(PED_STRUCT &ped, PED_INDEX TargetPedIndex) IF DOES_ENTITY_EXIST(ped.PedIndex) AND NOT IS_ENTITY_DEAD(ped.PedIndex) IF DOES_ENTITY_EXIST(TargetPedIndex) AND NOT IS_PED_INJURED(TargetPedIndex) #IF IS_DEBUG_BUILD //debug info display IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.25) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_INT(ped.iProgress), 1.35) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_FLOAT(GET_PED_HEALTH_RATIO(ped.PedIndex)), 1.45) IF ( ped.bWaitingToAdvance = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, "WAITING_TO_ADVANCE", 1.55) ENDIF ENDIF ped.sDebugName = "Lamar" #ENDIF SET_PED_RESET_FLAG(ped.PedIndex, PRF_DontSuppressUseNavMeshToNavigateToVehicleDoorWhenVehicleInWater, TRUE) //fix for B*2027310 SET_PED_RESET_FLAG(ped.PedIndex, PRF_BlockWeaponReactionsUnlessDead, TRUE) //block weapon reactions SET_PED_RESET_FLAG(ped.PedIndex, PRF_DisableFriendlyGunReactAudio, TRUE) ped.fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(ped.PedIndex, TargetPedIndex) //get distance to player ped.fDistanceToCoord = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(ped.PedIndex), vGroveStreetStart) //get distance to shootout start SWITCH ped.eState CASE PED_STATE_COMBAT_ON_FOOT SWITCH ped.iProgress CASE 0 //make Lamar wait in cover for shootout combat to begin IF NOT DOES_BLIP_EXIST(ped.BlipIndex) ped.BlipIndex = CREATE_BLIP_FOR_ENTITY(ped.PedIndex, FALSE) ENDIF IF ( ped.bHasTask = FALSE ) SET_ENTITY_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_SUFFERS_CRITICAL_HITS(ped.PedIndex, FALSE) SET_PED_PROOFS(ped.PedIndex, FALSE, TRUE, TRUE, FALSE, FALSE) GIVE_WEAPON_TO_PED(ped.PedIndex, WEAPONTYPE_ASSAULTRIFLE, INFINITE_AMMO, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_DISABLE_PINNED_DOWN, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_DISABLE_PIN_DOWN_OTHERS, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) ped.bHasTask = TRUE ENDIF IF ( Events[EVENT_SHOOTOUT_STARTED] = TRUE ) //if shootout is started, move on to the next stage ped.iTimer = GET_GAME_TIMER() ped.bHasTask = FALSE ped.iProgress++ ENDIF BREAK CASE 1 //make Lamar wait a bit in cover behind low white wall after the shootout started, then make Lamar go to combat IF ( ped.bHasTask = FALSE ) IF HAS_TIME_PASSED(1250, ped.iTimer) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF NOT IS_PED_IN_COVER(ped.PedIndex) TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, csCoverpoints[1].vPosition, 1750, FALSE, 0, TRUE, FALSE) ENDIF IF NOT IS_PED_INJURED(esGroup1[0].PedIndex) TASK_COMBAT_PED(NULL, esGroup1[0].PedIndex) ENDIF TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 150.0) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(ped.PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<83.982208,-1948.702637,19.784775>>, <<84.980690,-1947.491943,21.768717>>, 1.5) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[1].CoverpointIndex) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) ped.bHasTask = TRUE ENDIF ENDIF IF SHOULD_ALLIES_LEAVE_STARTING_COVER() ped.iTimer = GET_GAME_TIMER() ped.bHasTask = FALSE ped.iProgress++ ENDIF BREAK CASE 2 //make Lamar move to the end of low white wall and combat from there IF ( ped.bHasTask = FALSE ) IF HAS_TIME_PASSED(300, ped.iTimer) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_DEFENSIVE_AREA_SPHERE(ped.PedIndex, LamarShootoutPositions[0], 0.76, TRUE) SET_PED_MOVEMENT_PROPERTIES(ped.PedIndex, 1.0, 0.0) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ped.bHasTask = TRUE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_STREET() ped.bHasTask = FALSE ped.iProgress++ ENDIF BREAK CASE 3 //make Lamar move close to the first car IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_DEFENSIVE_AREA_SPHERE(ped.PedIndex, LamarShootoutPositions[1], 5.0, TRUE) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE) SET_PED_MOVEMENT_PROPERTIES(ped.PedIndex, 1.0, 0.0) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) ped.bHasTask = TRUE ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_1() ped.bHasTask = FALSE ped.iProgress++ ENDIF BREAK CASE 4 //make Lamar move to the green bin on the left side of the street IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_MOVEMENT_PROPERTIES(ped.PedIndex, 1.0, 0.0) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<85.600143,-1910.209351,19.930676>>, <<86.443237,-1909.208374,22.010962>>, 1.25, TRUE) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<85.600143,-1910.209351,19.930676>>, <<86.443237,-1909.208374,22.010962>>, 1.25) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, TRUE, 16.0, FALSE, 0.0, 3.0, 8.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[35].CoverpointIndex) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) ped.bDefensiveAreaTaken = FALSE ped.bBehindPlayer = FALSE ped.bInPosition = FALSE ped.bHasTask = TRUE ENDIF IF ( ped.bInPosition = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(ped.PedIndex, sLamarsDefensiveArea) ped.bInPosition = TRUE ENDIF ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) IF ( ped.bInPosition = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ENDIF SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<87.089577,-1909.869141,19.598919>>, <<83.724327,-1913.982178,22.993858>>, 4.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<87.089577,-1909.869141,19.598919>>, <<83.724327,-1913.982178,22.993858>>, 4.0) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<85.600143,-1910.209351,19.930676>>, <<86.443237,-1909.208374,22.010962>>, 1.25, TRUE) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<85.600143,-1910.209351,19.930676>>, <<86.443237,-1909.208374,22.010962>>, 1.25) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[35].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_2() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bDefensiveAreaTaken = FALSE ped.bHasTask = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 5 //make Lamar move to the elecricity box on the corner of the street IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_MOVEMENT_PROPERTIES(ped.PedIndex, 1.0, 0.0) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<77.564301,-1895.341797,20.497177>>, <<74.564690,-1898.971680,23.120573>>, 2.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<77.564301,-1895.341797,20.497177>>, <<74.564690,-1898.971680,23.120573>>, 2.5) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, TRUE) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[58].CoverpointIndex) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_SPHERE(ped.PedIndex, << 73.83, -1897.55, 20.67 >>, 4.0, FALSE) STORE_DEFENSIVE_AREA_SPHERE(sLamarsDefensiveArea, << 73.83, -1897.55, 20.67 >>, 4.0) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<77.564301,-1895.341797,20.497177>>, <<74.564690,-1898.971680,23.120573>>, 2.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<77.564301,-1895.341797,20.497177>>, <<74.564690,-1898.971680,23.120573>>, 2.5) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF IS_ENEMY_PED_DEAD(esPorchEnemies[0]) IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_3() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 40, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF ENDIF BREAK CASE 6 //make Lamar move to the first white wall corner IF ( ped.bHasTask = FALSE) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[32].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<60.649189,-1886.116943,20.631060>>, <<59.815632,-1887.141357,23.162979>>, 1.5, TRUE) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<60.649189,-1886.116943,20.631060>>, <<59.815632,-1887.141357,23.162979>>, 1.5) ped.bDefensiveAreaTaken = FALSE ped.bInPosition = FALSE ped.bHasTask = TRUE ENDIF IF ( ped.bInPosition = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(ped.PedIndex, sLamarsDefensiveArea) ped.bInPosition = TRUE ENDIF ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) IF ( ped.bInPosition = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ENDIF SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<61.658737,-1886.880981,20.171867>>, <<56.869209,-1892.697510,23.476622>>, 5.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<61.658737,-1886.880981,20.171867>>, <<56.869209,-1892.697510,23.476622>>, 5.0) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, FALSE, FALSE, FALSE) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<60.649189,-1886.116943,20.631060>>, <<59.815632,-1887.141357,23.162979>>, 1.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<60.649189,-1886.116943,20.631060>>, <<59.815632,-1887.141357,23.162979>>, 1.5) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[32].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_4() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 7 //make Lamar go to the second white wall corner IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<46.914013,-1874.782715,20.902359>>, <<45.906673,-1875.919922,24.362179>>, 1.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<46.914013,-1874.782715,20.902359>>, <<45.906673,-1875.919922,24.362179>>, 1.5) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[28].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ped.bInPosition = FALSE ped.bHasTask = TRUE ENDIF IF ( ped.bInPosition = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(ped.PedIndex, sLamarsDefensiveArea) ped.bInPosition = TRUE ENDIF ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) IF ( ped.bInPosition = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ENDIF SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<48.228836,-1875.824707,20.864565>>, <<43.268642,-1881.522461,24.114298>>, 5.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<48.228836,-1875.824707,20.864565>>, <<43.268642,-1881.522461,24.114298>>, 5.0) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, FALSE, FALSE, FALSE) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<46.914013,-1874.782715,20.902359>>, <<45.906673,-1875.919922,24.362179>>, 1.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<46.914013,-1874.782715,20.902359>>, <<45.906673,-1875.919922,24.362179>>, 1.5) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[28].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_5() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 8 //make Lamar move to the third white wall corner IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<31.006004,-1861.029419,21.636925>>, <<29.675428,-1862.520874,25.219547>>, 1.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<31.006004,-1861.029419,21.636925>>, <<29.675428,-1862.520874,25.219547>>, 1.5) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[30].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ped.bBehindPlayer = FALSE ped.bInPosition = FALSE ped.bHasTask = TRUE ENDIF IF ( ped.bInPosition = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(ped.PedIndex, sLamarsDefensiveArea) ped.bInPosition = TRUE ENDIF ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) IF ( ped.bInPosition = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ENDIF SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<32.000683,-1861.708740,21.591938>>, <<27.473648,-1866.846558,25.148037>>, 4.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<32.000683,-1861.708740,21.591938>>, <<27.473648,-1866.846558,25.148037>>, 4.0) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, psLamar.ItemsetIndex) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, FALSE, FALSE, FALSE) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<31.006004,-1861.029419,21.636925>>, <<29.675428,-1862.520874,25.219547>>, 1.5) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<31.006004,-1861.029419,21.636925>>, <<29.675428,-1862.520874,25.219547>>, 1.5) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[30].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF ( Events[EVENT_ENEMIES_GROUP8_KILLED] = TRUE ) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bBehindPlayer = FALSE ped.bHasTask = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ELSE IF ( ped.bBehindPlayer = FALSE ) IF NOT IS_ENEMY_PED_DEAD(esGroup8[1]) IF ( ped.bInPosition = TRUE ) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_FRANKLIN)), vAlleyEntrance) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(ped.PedIndex), vAlleyEntrance) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_TREVOR)), vAlleyEntrance) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(ped.PedIndex), vAlleyEntrance) SET_PED_DEFENSIVE_AREA_SPHERE(ped.PedIndex, << 23.08, -1857.19, 22.56 >>, 1.25, TRUE) ped.bBehindPlayer = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 9 //make Lamar run to the fourth white wall cover IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<21.373867,-1852.910889,22.234501>>, <<19.742620,-1854.827148,25.728672>>, 2.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<21.373867,-1852.910889,22.234501>>, <<19.742620,-1854.827148,25.728672>>, 2.0) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[34].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ped.bInPosition = FALSE ped.bHasTask = TRUE ENDIF IF ( ped.bInPosition = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(ped.PedIndex, sLamarsDefensiveArea) ped.bInPosition = TRUE ENDIF ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) IF ( ped.bInPosition = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ENDIF SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<22.464781,-1853.238159,22.331705>>, <<17.881580,-1858.349365,25.682585>>, 4.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<22.464781,-1853.238159,22.331705>>, <<17.881580,-1858.349365,25.682585>>, 4.0) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, FALSE, FALSE, FALSE) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sLamarsDefensiveArea) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<21.373867,-1852.910889,22.234501>>, <<19.742620,-1854.827148,25.728672>>, 2.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<21.373867,-1852.910889,22.234501>>, <<19.742620,-1854.827148,25.728672>>, 2.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[34].CoverpointIndex) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF ( GET_NUMBER_OF_ENEMIES_ALIVE(esGroup7) <= 1 ) AND ( Events[EVENT_ENEMIES_GROUP8_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_CARSTREETRIGHT_KILLED] = TRUE ) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(ped.PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 10 //make Lamar run to the orange wall corner IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 15, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<11.226377,-1842.662476,23.029819>>, <<7.591852,-1846.963135,25.803003>>, 4.0) STORE_DEFENSIVE_AREA_ANGLED(sLamarsDefensiveArea, <<11.226377,-1842.662476,23.029819>>, <<7.591852,-1846.963135,25.803003>>, 4.0) SET_PED_COVER_PROPERTIES(ped.PedIndex, TRUE, TRUE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) SET_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex, csCoverpoints[59].CoverpointIndex) ped.bHasTask = TRUE ENDIF IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_ALLEY) ENDIF BREAK ENDSWITCH IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_ALLEY) ENDIF BREAK CASE PED_STATE_RUNNING_TO_ALLEY IF ( ped.bHasTask = FALSE ) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) TASK_FOLLOW_NAV_MESH_TO_COORD(ped.PedIndex, << -22.67, -1846.52, 24.27 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS * 2, ENAV_NO_STOPPING) //TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(ped.PedIndex, << -22.67, -1846.52, 24.27 >>, << -29.40, -1829.25, 24.95 >>, PEDMOVE_SPRINT, TRUE) //TASK_FOLLOW_NAV_MESH_TO_COORD(ped.PedIndex, << -22.67, -1846.52, 24.27 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3) //TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 200.0) //SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) //SET_PED_MOVEMENT_PROPERTIES(psLamar.PedIndex, 0.25, 0.0) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 30, 90, FIRING_PATTERN_FULL_AUTO) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<-25.168402,-1849.832520,24.081337>>, <<-23.603153,-1848.054199,27.270437>>, 2.0) SET_PED_COVER_PROPERTIES(ped.PedIndex, FALSE) REMOVE_PED_PREFERRED_COVERPOINT(ped.PedIndex, ped.ItemsetIndex) ped.bHasTask = TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, <<-43.314060,-1866.162598,23.556183>>, <<-24.120207,-1844.029419,29.362137>>, 8.0) GO_TO_PED_STATE(ped, PED_STATE_WAITING_IN_ALLEY) ENDIF BREAK CASE PED_STATE_WAITING_IN_ALLEY IF ( ped.bHasTask = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_PED_COMBAT_PROPERTIES(ped.PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_DEFENSIVE_AREA_ANGLED(ped.PedIndex, <<-25.168402,-1849.832520,24.081337>>, <<-23.603153,-1848.054199,27.270437>>, 2.0) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 30, 100, FIRING_PATTERN_FULL_AUTO) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ped.bWaitingForPlayer = TRUE ped.iTimer = GET_GAME_TIMER() ped.bHasTask = TRUE ENDIF IF SHOULD_ALLIES_RUN_TO_RIVER() GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_RIVER) ENDIF REQUEST_WAYPOINT_RECORDING("fra1_lamar") BREAK CASE PED_STATE_RUNNING_TO_RIVER IF ( ped.bHasTask = FALSE ) REQUEST_WAYPOINT_RECORDING("fra1_lamar") IF GET_IS_WAYPOINT_RECORDING_LOADED("fra1_lamar") //CLEAR_PED_TASKS(ped.PedIndex) REMOVE_PED_DEFENSIVE_AREA(ped.PedIndex) SET_PED_PROOFS(ped.PedIndex, FALSE, FALSE, FALSE, FALSE, FALSE) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(ped.PedIndex, FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) TASK_FOLLOW_WAYPOINT_RECORDING(ped.PedIndex, "fra1_lamar", 0, EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_TURN_TO_FACE_WAYPOINT_HEADING_AT_END) //TASK_FOLLOW_NAV_MESH_TO_COORD(ped.PedIndex, <<-115.4358, -1861.7389, 1.2639>>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3) ped.iPedConversationTimer = GET_GAME_TIMER() ped.bWaitingForPlayer = FALSE ped.bFleeing = TRUE ped.bHasTask = TRUE ENDIF ENDIF IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ped.PedIndex) IF IS_PED_RUNNING(TargetPedIndex) OR IS_PED_SPRINTING(TargetPedIndex) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ped.PedIndex, PEDMOVE_SPRINT) ELSE WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ped.PedIndex, PEDMOVE_RUN) ENDIF ELSE IF IS_PED_RUNNING(TargetPedIndex) OR IS_PED_SPRINTING(TargetPedIndex) SET_PED_DESIRED_MOVE_BLEND_RATIO(ped.PedIndex, PEDMOVE_SPRINT) ELSE SET_PED_DESIRED_MOVE_BLEND_RATIO(ped.PedIndex, PEDMOVE_RUN) ENDIF ENDIF //IF ( GET_PED_WAYPOINT_PROGRESS(ped.PedIndex) > 25 ) IF ( ped.fDistanceToTargetPed > 25.0 ) AND bShouldAlliesWaitForPlayer IF GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(TargetPedIndex)) > GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(ped.PedIndex)) GO_TO_PED_STATE(ped, PED_STATE_WAITING_FOR_PLAYER) ENDIF ENDIF //ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(ped.PedIndex), vsSpeedophiles[1].vPosition) < 20.0 GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_VEHICLE) ENDIF BREAK CASE PED_STATE_WAITING_FOR_PLAYER IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(ped.PedIndex) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(ped.PedIndex, FALSE) SEQUENCE_FACE_AND_LOOK_AT_PED(ped.PedIndex, TargetPedIndex, -1, SLF_USE_TORSO | SLF_FAST_TURN_RATE) ped.iTimer = GET_GAME_TIMER() ped.bWaitingForPlayer = TRUE ped.bHasTask = TRUE ENDIF IF ( ped.fDistanceToTargetPed < 10.0 ) OR GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(TargetPedIndex)) < GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(ped.PedIndex)) TASK_CLEAR_LOOK_AT(ped.PedIndex) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_RIVER) ELSE IF HAS_TIME_PASSED(1000, ped.iTimer) GO_TO_PED_STATE(ped, PED_STATE_WAITING_FOR_PLAYER) ENDIF ENDIF BREAK CASE PED_STATE_RUNNING_TO_VEHICLE IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(ped.PedIndex) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) IF NOT IS_PED_INJURED(psFilmCrew[FCP_GIRL].PedIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<-116.9544, -1861.3503, 0.9790>> /*<< -159.64218, -1842.44299, -0.44773 >>*/, psFilmCrew[FCP_GIRL].PedIndex, PEDMOVE_RUN, FALSE) TASK_AIM_GUN_AT_ENTITY(NULL, psFilmCrew[FCP_GIRL].PedIndex, -1, TRUE) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<-116.9544, -1861.3503, 0.9790>> /*<< -159.64218, -1842.44299, -0.44773 >>*/, << -164.11, -1847.47, 0.46 >>, PEDMOVE_RUN, FALSE) TASK_AIM_GUN_AT_COORD(NULL, << -164.11, -1847.47, 0.46 >>, -1, TRUE) ENDIF CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(ped.PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ped.bFleeing = TRUE ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE ) IF ( GET_SCRIPT_TASK_STATUS(ped.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK ) IF ( GET_SEQUENCE_PROGRESS(ped.PedIndex) = 1 ) GO_TO_PED_STATE(ped, PED_STATE_WAITING_AT_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_WAITING_AT_VEHICLE IF ( ped.bHasTask = FALSE ) IF NOT IS_PED_INJURED(psFilmCrew[FCP_GIRL].PedIndex) TASK_AIM_GUN_AT_ENTITY(ped.PedIndex, psFilmCrew[FCP_GIRL].PedIndex, -1, TRUE) ELSE TASK_AIM_GUN_AT_COORD(ped.PedIndex, << -164.11, -1847.47, 0.46 >>, -1, TRUE) ENDIF iLamarEnterSeasharkDelayTimer = 0 ped.bHasTask = TRUE ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[0].vPosition) < 10.0 OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[1].vPosition) < 10.0 OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[2].vPosition) < 10.0 IF ( iLamarEnterSeasharkDelayTimer = 0) iLamarEnterSeasharkDelayTimer = GET_GAME_TIMER() ELSE IF HAS_TIME_PASSED(500, iLamarEnterSeasharkDelayTimer) CLEAR_PED_TASKS(ped.PedIndex) GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_ENTERING_VEHICLE IF ( ped.bHasTask = FALSE ) IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) <> vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex AND GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) <> vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex TASK_ENTER_VEHICLE(ped.PedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_2 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_2.") #ENDIF ENDIF ENDIF ENDIF ENDIF IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) <> vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex AND GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) <> vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex TASK_ENTER_VEHICLE(ped.PedIndex, vsSpeedophiles[2].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_3 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_3.") #ENDIF ENDIF ENDIF ENDIF ENDIF IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) <> vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex AND GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) <> vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex TASK_ENTER_VEHICLE(ped.PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_1 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_1.") #ENDIF ENDIF ENDIF ENDIF ENDIF ped.bHasTask = TRUE ENDIF SWITCH ped.ePedVehicle CASE SPEEDOPHILE_1 CASE SPEEDOPHILE_2 CASE SPEEDOPHILE_3 #IF IS_DEBUG_BUILD SWITCH ped.ePedVehicle CASE SPEEDOPHILE_1 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_1.") BREAK CASE SPEEDOPHILE_2 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_2.") BREAK CASE SPEEDOPHILE_3 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_3.") BREAK ENDSWITCH #ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[ped.ePedVehicle].VehicleIndex) //change this to vehicle array //it is possible to still block them IF NOT IS_PED_IN_VEHICLE(ped.PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, TRUE) IF NOT IS_VEHICLE_SEAT_FREE(vsSpeedophiles[ped.ePedVehicle].VehicleIndex, VS_DRIVER) OR vsSpeedophiles[ped.ePedVehicle].VehicleIndex = GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) OR vsSpeedophiles[ped.ePedVehicle].VehicleIndex = GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) CLEAR_PED_TASKS(ped.PedIndex) ped.ePedVehicle = MAX_SPEEDOPHILES #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to pick a different vehicle.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF IF GET_SCRIPT_TASK_STATUS(ped.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(ped.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK CLEAR_PED_TASKS(ped.PedIndex) ped.ePedVehicle = MAX_SPEEDOPHILES #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to be retasked to enter a vehicle.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF ELSE IF IS_PED_IN_VEHICLE(ped.PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[ped.ePedVehicle].VehicleIndex, FALSE) ENDIF IF IS_PED_SITTING_IN_VEHICLE(ped.PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex) GO_TO_PED_STATE(ped, PED_STATE_SITTING_IN_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE MAX_SPEEDOPHILES CLEAR_PED_TASKS(ped.PedIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to pick a vehicle again.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) BREAK ENDSWITCH BREAK CASE PED_STATE_SITTING_IN_VEHICLE IF ( ped.bHasTask = FALSE ) //do nothing ped.bHasTask = TRUE ENDIF IF NOT IS_PED_IN_VEHICLE(ped.PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex) ped.ePedVehicle = MAX_SPEEDOPHILES GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC MANAGE_OTHER_PLAYER_PED_IN_GROVE_STREET(PED_INDEX PedIndex, PED_STRUCT &ped, PED_INDEX TargetPedIndex) IF DOES_ENTITY_EXIST(PedIndex) AND NOT IS_ENTITY_DEAD(PedIndex) IF DOES_ENTITY_EXIST(TargetPedIndex) AND NOT IS_PED_INJURED(TargetPedIndex) #IF IS_DEBUG_BUILD //debug info display IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.25) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, GET_STRING_FROM_INT(ped.iProgress), 1.35) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, GET_STRING_FROM_FLOAT(GET_PED_HEALTH_RATIO(PedIndex)), 1.45) IF ( ped.bWaitingToAdvance = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, "WAITING_TO_ADVANCE", 1.55) ENDIF ENDIF SWITCH GET_CURRENT_PLAYER_PED_ENUM() //set ped debug name for debug output CASE CHAR_FRANKLIN ped.sDebugName = "Trevor" BREAK CASE CHAR_TREVOR ped.sDebugName = "Franklin" BREAK ENDSWITCH #ENDIF COVERPOINT_STRUCT csCover //every frame checks and commands SET_PED_RESET_FLAG(PedIndex, PRF_DontSuppressUseNavMeshToNavigateToVehicleDoorWhenVehicleInWater, TRUE) //fix for B*2027310 SET_PED_RESET_FLAG(PedIndex, PRF_BlockWeaponReactionsUnlessDead, TRUE) //block weapon reactions SET_PED_RESET_FLAG(PedIndex, PRF_DisableFriendlyGunReactAudio, TRUE) ped.fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(PedIndex, TargetPedIndex) //get distance to player SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN RUN_PED_WEAPON_AMMO_RESTORE_CHECK(PedIndex, WEAPONTYPE_PUMPSHOTGUN) BREAK CASE CHAR_TREVOR RUN_PED_WEAPON_AMMO_RESTORE_CHECK(PedIndex, WEAPONTYPE_SMG) BREAK ENDSWITCH //update ped states SWITCH ped.eState CASE PED_STATE_COMBAT_ON_FOOT SWITCH ped.iProgress //combat progression CASE 0 //put other player ped into cover behind low white wall if he is not in cover, make him wait in cover for shootout to begin IF NOT DOES_BLIP_EXIST(ped.BlipIndex) ped.BlipIndex = CREATE_BLIP_FOR_ENTITY(PedIndex, FALSE) ENDIF IF ( ped.bHasTask = FALSE ) IF NOT IS_PED_INJURED(PedIndex) SET_ENTITY_HEALTH(PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_SUFFERS_CRITICAL_HITS(PedIndex, FALSE) SET_PED_INFINITE_AMMO(PedIndex, FALSE) SET_PED_INFINITE_AMMO(PedIndex, FALSE, WEAPONTYPE_PUMPSHOTGUN) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DISABLE_PIN_DOWN_OTHERS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_CAN_FIGHT_ARMED_PEDS_WHEN_NOT_ARMED, TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, FALSE) IF NOT IS_PED_IN_COVER(PedIndex) WARP_PED(PedIndex, ped.vPosition, ped.fHeading, FALSE, FALSE, FALSE) TASK_PUT_PED_DIRECTLY_INTO_COVER(PedIndex, csCoverpoints[2].vPosition, -1, FALSE, 0, TRUE, FALSE, csCoverpoints[2].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(PedIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Putting the other player ped in cover on shootout start.") #ENDIF ENDIF SET_PED_USING_ACTION_MODE(PedIndex, TRUE) ENDIF ped.bHasTask = TRUE ENDIF IF ( Events[EVENT_SHOOTOUT_STARTED] = TRUE ) ped.iTimer = GET_GAME_TIMER() ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.iProgress++ ENDIF BREAK CASE 1 //make other player ped wait in cover behind low white wall after the shootout started, then go to combat IF ( ped.bHasTask = FALSE ) IF HAS_TIME_PASSED(850, ped.iTimer) //wait in cover IF DOES_ENTITY_EXIST(esGroup1[0].PedIndex) AND NOT IS_PED_INJURED(esGroup1[0].PedIndex) TASK_SHOOT_AT_ENTITY(PedIndex, esGroup1[0].PedIndex, -1, FIRING_TYPE_CONTINUOUS) ELSE TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, 100.0) ENDIF SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DISABLE_PINNED_DOWN, TRUE) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, <<84.926735,-1947.690674,19.272692>>, <<86.487030,-1945.870117,21.760073>>, 1.5) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 100, FIRING_PATTERN_FULL_AUTO) psTrevor.bHasTask = TRUE ENDIF ENDIF IF SHOULD_ALLIES_LEAVE_STARTING_COVER() ped.iTimer = GET_GAME_TIMER() ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.iProgress++ ENDIF BREAK CASE 2 //make other player ped move to the end of low white wall and combat from there IF ( ped.bHasTask = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_DEFENSIVE_AREA_SPHERE(PedIndex, << 90.05, -1941.15, 19.74 >>, 0.76, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) ped.bHasTask = TRUE ENDIF IF SHOULD_ALLIES_ADVANCE_TO_STREET() ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.iProgress++ ENDIF BREAK CASE 3 //make other player ped go to the first blue dumpster and take cover there IF ( ped.bHasTask = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, FALSE, FALSE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[60].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 76.77, -1932.37, 19.28 >>, << 78.38, -1930.44, 21.76 >>, 2.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 76.77, -1932.37, 19.28 >>, << 78.38, -1930.44, 21.76 >>, 2.5) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 76.83, -1933.13, 19.26 >>, << 81.12, -1928.17, 21.69 >>, 3.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 76.83, -1933.13, 19.26 >>, << 81.12, -1928.17, 21.69 >>, 3.5) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[60].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 76.77, -1932.37, 19.28 >>, << 78.38, -1930.44, 21.76 >>, 2.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 76.77, -1932.37, 19.28 >>, << 78.38, -1930.44, 21.76 >>, 2.5) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_1() ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ENDIF BREAK CASE 4 //make other player ped move to the first green dumpster on the right side of the street IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 74.24, -1927.30, 19.95 >>, PEDMOVE_RUN, TRUE, << 59.68, -1915.02, 20.58 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[3].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 72.78, -1928.84, 19.46 >>, << 75.01, -1926.21, 22.34 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 72.78, -1928.84, 19.46 >>, << 75.01, -1926.21, 22.34 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 72.86, -1928.85, 19.48 >>, << 76.75, -1924.10, 21.78 >>, 3.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 72.86, -1928.85, 19.48 >>, << 76.75, -1924.10, 21.78 >>, 3.5) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[3].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 72.78, -1928.84, 19.46 >>, << 75.01, -1926.21, 22.34 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 72.78, -1928.84, 19.46 >>, << 75.01, -1926.21, 22.34 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF //IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_2() IF SHOULD_OTHER_PLAYER_PED_ADVANCE_UP_TO_BIN_3() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 5 //make other player ped move to the second green bin IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 66.13, -1920.24, 20.46 >>, PEDMOVE_RUN, TRUE, << 52.56, -1909.63, 20.63 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[11].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 63.13, -1921.39, 20.15 >>, << 65.40, -1918.74, 23.03 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 63.13, -1921.39, 20.15 >>, << 65.40, -1918.74, 23.03 >>, 3.0) //make him go to cover ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, <<63.63, -1922.20, 19.98 >>, << 69.73, -1915.05, 22.44 >>, 5.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, <<63.63, -1922.20, 19.98 >>, << 69.73, -1915.05, 22.44 >>, 5.5) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[11].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 63.13, -1921.39, 20.15 >>, << 65.40, -1918.74, 23.03 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 63.13, -1921.39, 20.15 >>, << 65.40, -1918.74, 23.03 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF //handle the switch to buddy under fire IF ( bBuddyPinnedDown = FALSE ) IF DOES_ENTITY_EXIST(esPorchEnemies[0].PedIndex) IF NOT IS_ENTITY_DEAD(esPorchEnemies[0].PedIndex) IF IS_PED_IN_DEFENSIVE_AREA(PedIndex, sTrevorsDefensiveArea) IF IS_PED_IN_COVER(PedIndex) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN SET_SELECTOR_PED_DAMAGED(sSelectorPeds, SELECTOR_PED_TREVOR, TRUE) BREAK CASE CHAR_TREVOR SET_SELECTOR_PED_DAMAGED(sSelectorPeds, SELECTOR_PED_FRANKLIN, TRUE) BREAK ENDSWITCH bBuddyPinnedDown = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_ENEMY_PED_DEAD(esPorchEnemies[0]) IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbParkedCar) OR GET_NUM_REMAINING_OF_WAVE_4_ENEMIES() < 5 bBuddyPinnedDown = FALSE SET_SELECTOR_PED_DAMAGED(sSelectorPeds, SELECTOR_PED_TREVOR, FALSE) SET_SELECTOR_PED_DAMAGED(sSelectorPeds, SELECTOR_PED_FRANKLIN, FALSE) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ENDIF ENDIF BREAK CASE 6 //make other player ped move to the white wall cover IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 56.78, -1913.42, 20.62 >>, PEDMOVE_RUN, TRUE, << 52.56, -1909.63, 20.63 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[4].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 53.54, -1913.36, 20.20 >>, << 56.28, -1910.08, 23.04 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 53.54, -1913.36, 20.20 >>, << 56.28, -1910.08, 23.04 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 54.60, -1914.03, 20.18 >>, << 58.81, -1908.89, 22.47 >>, 5.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 54.60, -1914.03, 20.18 >>, << 58.81, -1908.89, 22.47 >>, 5.5) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[4].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 53.54, -1913.36, 20.20 >>, << 56.28, -1910.08, 23.04 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 53.54, -1913.36, 20.20 >>, << 56.28, -1910.08, 23.04 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF ( Events[EVENT_ENEMIES_GROUP3_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_GROUP4_KILLED] = TRUE ) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 7 //make other player ped move to the brown garage wall IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 40.10, -1900.23, 20.85 >>, PEDMOVE_RUN, TRUE, << 30.67, -1891.61, 21.37 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[10].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 37.22, -1901.63, 20.41 >>, << 39.89, -1898.44, 23.38 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 37.22, -1901.63, 20.41 >>, << 39.89, -1898.44, 23.38 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 38.18, -1902.36, 20.43 >>, << 44.59, -1894.62, 23.76 >>, 6.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 38.18, -1902.36, 20.43 >>, << 44.59, -1894.62, 23.76 >>, 6.0) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[10].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 37.22, -1901.63, 20.41 >>, << 39.89, -1898.44, 23.38 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 37.22, -1901.63, 20.41 >>, << 39.89, -1898.44, 23.38 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_4() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 8 //make other player ped move to the low white wall corner IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 34.62, -1895.43, 21.14 >>, PEDMOVE_RUN, TRUE, << 22.67, -1884.88, 21.80 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[5].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 31.64, -1895.74, 20.80 >>, << 33.99, -1892.91, 23.71 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 31.64, -1895.74, 20.80 >>, << 33.99, -1892.91, 23.71 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 32.46,-1896.44, 20.79 >>, << 38.02, -1889.85, 24.08 >>, 5.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 32.46,-1896.44, 20.79 >>, << 38.02, -1889.85, 24.08 >>, 5.0) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[5].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 31.64, -1895.74, 20.80 >>, << 33.99, -1892.91, 23.71 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 31.64, -1895.74, 20.80 >>, << 33.99, -1892.91, 23.71 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF SHOULD_ALLIES_ADVANCE_TO_UP_STREET_5() IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 9 //make other player ped move to the green dumpster IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 18.13, -1881.51, 22.03 >>, PEDMOVE_RUN, TRUE, << 5.44, -1868.51, 22.75 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[61].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 14.52, -1883.05, 21.67 >>, << 17.70, -1879.24, 24.59 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 14.52, -1883.05, 21.67 >>, << 17.70, -1879.24, 24.59 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 14.78, -1883.76, 21.68 >>, << 20.16, -1877.56, 24.94 >>, 5.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 14.78, -1883.76, 21.68 >>, << 20.16, -1877.56, 24.94 >>, 5.0) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[61].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 14.52, -1883.05, 21.67 >>, << 17.70, -1879.24, 24.59 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 14.52, -1883.05, 21.67 >>, << 17.70, -1879.24, 24.59 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF IS_ENEMY_PED_DEAD(esGroup7[1]) AND ( IS_ENEMY_PED_DEAD(esGroup7[2]) OR IS_ENEMY_PED_DEAD(esGroup7[0]) ) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 10 //make other player ped move to the high white wall IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 11.21, -1875.09, 22.42 >>, PEDMOVE_RUN, TRUE, << 5.44, -1868.51, 22.75 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[6].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 7.52, -1876.60, 21.93 >>, << 10.41, -1873.20, 25.00 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 7.52, -1876.60, 21.93 >>, << 10.41, -1873.20, 25.00 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 8.79, -1877.08, 21.90 >>, << 13.30, -1871.56, 25.45 >>, 5.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 8.79, -1877.08, 21.90 >>, << 13.30, -1871.56, 25.45 >>, 5.0) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[6].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 7.52, -1876.60, 21.93 >>, << 10.41, -1873.20, 25.00 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 7.52, -1876.60, 21.93 >>, << 10.41, -1873.20, 25.00 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF IS_ENEMY_PED_DEAD(esGroup7[0]) AND IS_ENEMY_PED_DEAD(esGroup7[1]) AND IS_ENEMY_PED_DEAD(esGroup7[2]) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 11 //make other player ped move to the green dumpster IF ( ped.bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << 6.77, -1871.65, 22.66 >>, PEDMOVE_RUN, TRUE, << 2.82, -1852.34, 23.32 >>, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[8].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 4.13, -1873.69, 22.20 >>, << 6.66, -1870.60, 25.18 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 4.13, -1873.69, 22.20 >>, << 6.66, -1870.60, 25.18 >>, 3.0) ped.bHasTask = TRUE ENDIF IF ( ped.bDefensiveAreaTaken = FALSE ) IF IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 4.42, -1874.28, 22.17 >>, << 10.90, -1866.32, 25.62 >>, 5.5) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 4.42, -1874.28, 22.17 >>, << 10.90, -1866.32, 25.62 >>, 5.5) ped.bDefensiveAreaTaken = TRUE ENDIF ELSE IF NOT IS_PED_IN_DEFENSIVE_AREA(TargetPedIndex, sTrevorsDefensiveArea) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[8].CoverpointIndex) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, << 4.13, -1873.69, 22.20 >>, << 6.66, -1870.60, 25.18 >>, 3.0) STORE_DEFENSIVE_AREA_ANGLED(sTrevorsDefensiveArea, << 4.13, -1873.69, 22.20 >>, << 6.66, -1870.60, 25.18 >>, 3.0) ped.bDefensiveAreaTaken = FALSE ENDIF ENDIF IF ( Events[EVENT_ENEMIES_GROUP7_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_CARSTREETRIGHT_KILLED] = TRUE ) AND ( Events[EVENT_COPS_ARRIVE] = TRUE ) IF IS_ENTITY_CLOSE_ENOUGH_TO_TARGET_ENTITY(PedIndex, TargetPedIndex, ped.fDistanceToTargetPed, 25, vGroveStreetStart) ped.bWaitingToAdvance = FALSE ped.bHasTask = FALSE ped.bIgnoreProgress = FALSE ped.bDefensiveAreaTaken = FALSE ped.iProgress++ ELSE ped.bWaitingToAdvance = TRUE ENDIF ENDIF BREAK CASE 12 IF ( ped.bHasTask = FALSE ) IF NOT IS_ENEMY_PED_DEAD(esGroup9[1]) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << -24.73, -1845.16, 24.38 >>, PEDMOVE_RUN, TRUE, << -20.29, -1850.10, 24.10 >>, esGroup9[1].PedIndex, TRUE) ELSE COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(PedIndex, << -24.73, -1845.16, 24.38 >>, PEDMOVE_RUN, TRUE, << -1.23, -1833.20, 23.97 >>, esGroup9[1].PedIndex, TRUE) ENDIF SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, FALSE) SET_PED_SHOOTING_PROPERTIES(PedIndex, 15, 100, FIRING_PATTERN_BURST_FIRE) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, <<-27.294376,-1848.436646,24.232262>>, <<-24.770103,-1845.416748,27.368807>>, 2.0) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, FALSE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[26].CoverpointIndex) ped.bHasTask = TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PedIndex, <<-44.493145,-1867.814697,23.294022>>, <<-17.559521,-1835.444336,29.422800>>, 22.0) GO_TO_PED_STATE(ped, PED_STATE_WAITING_IN_ALLEY) ENDIF BREAK ENDSWITCH IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_ALLEY) ENDIF IF ( ped.bHasTask = TRUE AND ped.bIgnoreProgress = TRUE AND ped.bHasSwitchTask = FALSE ) IF CAN_GET_CLOSEST_COVERPOINT_FOR_PED(PedIndex, csCoverpoints, csCover, TRUE, 3.5, bOtherPedAtStationaryCoverpoint) IF ( csCover.bStationary = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_TO_COVER_THEN_COMBAT(PedIndex, csCover.vPosition, PEDMOVE_RUN, TRUE, vGroveStreetEnd, GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(PedIndex, rgEnemies), TRUE, csCover.vPosition, vGroveStreetEnd, 1000) //set other ped's combat settings when the coverpoint is non stationary SET_PED_COMBAT_PROPERTIES(PedIndex, CM_WILLADVANCE, CAL_PROFESSIONAL, CR_NEAR, CA_USE_COVER, FALSE) SET_PED_DEFENSIVE_AREA_SPHERE(PedIndex, csCover.vPosition, 2.0) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCover.CoverpointIndex) SWITCH csCover.CoverpointUsage //set ped cover properties based on the selected non stationary coverpoint CASE COVUSE_WALLTOLEFT SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped going to coverpoint with COVUSE_WALLTOLEFT, ped will face right in cover.") #ENDIF BREAK CASE COVUSE_WALLTORIGHT SET_PED_COVER_PROPERTIES(PedIndex, TRUE, TRUE, FALSE, TRUE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped going to coverpoint with COVUSE_WALLTORIGHT, ped will face left in cover.") #ENDIF BREAK DEFAULT SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, FALSE, FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped going to coverpoint without any specific direction to face in cover.") #ENDIF BREAK ENDSWITCH bOtherPedAtStationaryCoverpoint = FALSE ped.bHasSwitchTask = TRUE ELIF ( csCover.bStationary = TRUE ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped going to stationary cover point.") #ENDIF COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_AIM_THEN_COMBAT(PedIndex, csCover.vPosition, PEDMOVE_RUN, TRUE, vGroveStreetEnd, GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(PedIndex, rgEnemies), TRUE, TRUE, 1500) //set other ped's combat settings when the coverpoint is stationary SET_PED_COMBAT_PROPERTIES(PedIndex, CM_STATIONARY, CAL_PROFESSIONAL, CR_NEAR, CA_AGGRESSIVE, FALSE) SET_PED_DEFENSIVE_AREA_SPHERE(PedIndex, csCover.vPosition, 2.0) //remove ped's preferred coverpoint and reset the cover flags REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, psTrevor.ItemsetIndex) SET_PED_COVER_PROPERTIES(PedIndex, FALSE, FALSE, FALSE, FALSE) bOtherPedAtStationaryCoverpoint = TRUE ped.bHasSwitchTask = TRUE ped.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RUNNING_TO_ALLEY IF ( ped.bHasTask = FALSE ) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(PedIndex, FALSE) TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, << -22.67, -1846.52, 24.27 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3) //SEQUENCE_INDEX SequenceIndex //CLEAR_SEQUENCE_TASK(SequenceIndex) //OPEN_SEQUENCE_TASK(SequenceIndex) // TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, << -4.30, -1862.53, 23.26 >> /*<< -22.67, -1846.52, 24.27 >>*/, << -29.40, -1829.25, 24.95 >>, PEDMOVE_RUN, TRUE) // TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) //CLOSE_SEQUENCE_TASK(SequenceIndex) //TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) SET_PED_COMBAT_MOVEMENT(PedIndex, CM_DEFENSIVE) SET_PED_MOVEMENT_PROPERTIES(PedIndex, 0.8, 0.0) SET_PED_SHOOTING_PROPERTIES(PedIndex, 30, 90, FIRING_PATTERN_BURST_FIRE) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, <<-27.294376,-1848.436646,24.232262>>, <<-24.770103,-1845.416748,27.368807>>, 2.0) REMOVE_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex) ped.bHasTask = TRUE ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PedIndex, <<-44.493145,-1867.814697,23.294022>>, <<-17.559521,-1835.444336,29.422800>>, 22.0) GO_TO_PED_STATE(ped, PED_STATE_WAITING_IN_ALLEY) ENDIF REQUEST_WAYPOINT_RECORDING("fra1_trevor") BREAK CASE PED_STATE_WAITING_IN_ALLEY IF ( ped.bHasTask = FALSE ) TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, 100.0) SET_PED_COMBAT_PROPERTIES(PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_FAR, CA_USE_COVER, FALSE) SET_PED_DEFENSIVE_AREA_ANGLED(PedIndex, <<-27.294376,-1848.436646,24.232262>>, <<-24.770103,-1845.416748,27.368807>>, 2.0) SET_PED_SHOOTING_PROPERTIES(PedIndex, 30, 100, FIRING_PATTERN_BURST_FIRE) SET_PED_COVER_PROPERTIES(PedIndex, TRUE, FALSE, TRUE, FALSE) SET_PED_PREFERRED_COVERPOINT(PedIndex, ped.ItemsetIndex, csCoverpoints[26].CoverpointIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) ped.iTimer = GET_GAME_TIMER() ped.bWaitingForPlayer = TRUE ped.bHasTask = TRUE ENDIF IF SHOULD_ALLIES_RUN_TO_RIVER() OR psLamar.bFleeing = TRUE GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_RIVER) ENDIF REQUEST_WAYPOINT_RECORDING("fra1_trevor") BREAK CASE PED_STATE_RUNNING_TO_RIVER IF ( ped.bHasTask = FALSE ) REQUEST_WAYPOINT_RECORDING("fra1_trevor") IF GET_IS_WAYPOINT_RECORDING_LOADED("fra1_trevor") IF ( ped.iTimer <> 0) IF HAS_TIME_PASSED(375, ped.iTimer) //use the time delay to make other player and Lamar not run in perfect sync CLEAR_PED_TASKS(PedIndex) REMOVE_PED_DEFENSIVE_AREA(PedIndex) SET_PED_PROOFS(GET_PED_INDEX(CHAR_TREVOR), FALSE, FALSE, FALSE, FALSE, FALSE) SET_PED_PROOFS(GET_PED_INDEX(CHAR_FRANKLIN), FALSE, FALSE, FALSE, FALSE, FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(PedIndex, FALSE) TASK_FOLLOW_WAYPOINT_RECORDING(PedIndex, "fra1_trevor", 0, EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_TURN_TO_FACE_WAYPOINT_HEADING_AT_END | EWAYPOINT_NAVMESH_TO_INITIAL_WAYPOINT) //TASK_FOLLOW_NAV_MESH_TO_COORD(PedIndex, <<-114.8476, -1864.9554, 0.4774>>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3) ped.bFleeing = TRUE ped.bHasTask = TRUE ENDIF ELSE ped.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(PedIndex) IF IS_PED_RUNNING(TargetPedIndex) OR IS_PED_SPRINTING(TargetPedIndex) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(PedIndex, PEDMOVE_SPRINT) ELSE WAYPOINT_PLAYBACK_OVERRIDE_SPEED(PedIndex, PEDMOVE_RUN) ENDIF ELSE IF IS_PED_RUNNING(TargetPedIndex) OR IS_PED_SPRINTING(TargetPedIndex) SET_PED_DESIRED_MOVE_BLEND_RATIO(PedIndex, PEDMOVE_SPRINT) ELSE SET_PED_DESIRED_MOVE_BLEND_RATIO(PedIndex, PEDMOVE_RUN) ENDIF ENDIF //IF ( GET_PED_WAYPOINT_PROGRESS(PedIndex) > 25 ) IF ( ped.fDistanceToTargetPed > 25.0 ) AND bShouldAlliesWaitForPlayer IF GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(TargetPedIndex)) > GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(PedIndex)) GO_TO_PED_STATE(ped, PED_STATE_WAITING_FOR_PLAYER) ENDIF ENDIF //ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PedIndex), vsSpeedophiles[0].vPosition) < 20.0 GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_VEHICLE) ENDIF BREAK CASE PED_STATE_WAITING_FOR_PLAYER IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(PedIndex) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(PedIndex, FALSE) SEQUENCE_FACE_AND_LOOK_AT_PED(PedIndex, TargetPedIndex, -1, SLF_USE_TORSO | SLF_FAST_TURN_RATE) ped.bHasTask = TRUE ENDIF IF ( ped.fDistanceToTargetPed < 10.0 ) OR GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(TargetPedIndex)) < GET_DISTANCE_BETWEEN_COORDS(vFilmCrewBeginAnimPosition, GET_ENTITY_COORDS(PedIndex)) TASK_CLEAR_LOOK_AT(PedIndex) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_RIVER) ENDIF BREAK CASE PED_STATE_RUNNING_TO_VEHICLE IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(PedIndex) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<-114.8476, -1864.9554, 0.4774>> /*<< -163.90746, -1838.89514, -0.44773 >>*/, psFilmCrew[FCP_JACKEDGIRL].PedIndex, PEDMOVE_RUN, FALSE) TASK_AIM_GUN_AT_ENTITY(NULL, psFilmCrew[FCP_JACKEDGIRL].PedIndex, -1, TRUE) ELSE TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<-114.8476, -1864.9554, 0.4774>> /*<< -163.90746, -1838.89514, -0.44773 >>*/, << -166.80, -1842.87, 0.46 >>, PEDMOVE_RUN, FALSE) TASK_AIM_GUN_AT_COORD(NULL, << -166.80, -1842.87, 0.46 >>, -1, TRUE) ENDIF CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ped.bFleeing = TRUE ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE ) IF ( GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK ) IF ( GET_SEQUENCE_PROGRESS(PedIndex) = 1 ) GO_TO_PED_STATE(ped, PED_STATE_WAITING_AT_VEHICLE) ENDIF ENDIF IF IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF ENDIF BREAK CASE PED_STATE_WAITING_AT_VEHICLE IF ( ped.bHasTask = FALSE ) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN //player playing Franklin, give Trevor specific task and parameters IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) TASK_AIM_GUN_AT_ENTITY(PedIndex, psFilmCrew[FCP_JACKEDGIRL].PedIndex, -1, TRUE) ELSE TASK_AIM_GUN_AT_COORD(PedIndex, << -159.72, -1849.10, 0.46 >>, -1, TRUE) ENDIF BREAK CASE CHAR_TREVOR //player playing Trevor, give Franklin specific task and parameters IF NOT IS_PED_INJURED(psFilmCrew[FCP_CLAY].PedIndex) TASK_AIM_GUN_AT_ENTITY(PedIndex, psFilmCrew[FCP_CLAY].PedIndex, -1, TRUE) ELSE TASK_AIM_GUN_AT_COORD(PedIndex, << -166.80, -1842.87, 0.46 >>, -1, TRUE) ENDIF BREAK ENDSWITCH ped.bVehicleReached = TRUE ped.bHasTask = TRUE ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[SPEEDOPHILE_1].vPosition) < 10.0 OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[SPEEDOPHILE_1].vPosition) < 10.0 OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(TargetPedIndex), vsSpeedophiles[SPEEDOPHILE_1].vPosition) < 10.0 GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF IF IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(TargetPedIndex, vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF BREAK CASE PED_STATE_ENTERING_VEHICLE IF ( ped.bHasTask = FALSE ) IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(TargetPedIndex) <> vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex AND GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) <> vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex TASK_ENTER_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_1 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_1.") #ENDIF ENDIF ENDIF ENDIF ENDIF IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(TargetPedIndex) <> vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex AND GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) <> vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex TASK_ENTER_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_2 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_2.") #ENDIF ENDIF ENDIF ENDIF ENDIF IF ( ped.ePedVehicle = MAX_SPEEDOPHILES ) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF IS_VEHICLE_SEAT_FREE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, VS_DRIVER) IF GET_VEHICLE_PED_IS_USING(TargetPedIndex) <> vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex AND GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) <> vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex TASK_ENTER_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVE_RUN, ECF_JACK_ANYONE) ped.ePedVehicle = SPEEDOPHILE_3 #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is tasked to enter SPEEDOPHILE_3.") #ENDIF ENDIF ENDIF ENDIF ENDIF IF ( iEnterVehicleTimer = 0 ) iEnterVehicleTimer = GET_GAME_TIMER() ENDIF ped.bVehicleReached = TRUE ped.bHasTask = TRUE ENDIF SWITCH ped.ePedVehicle CASE SPEEDOPHILE_1 CASE SPEEDOPHILE_2 CASE SPEEDOPHILE_3 #IF IS_DEBUG_BUILD SWITCH ped.ePedVehicle CASE SPEEDOPHILE_1 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_1.") BREAK CASE SPEEDOPHILE_2 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_2.") BREAK CASE SPEEDOPHILE_3 PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned SPEEDOPHILE_3.") BREAK ENDSWITCH #ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[ped.ePedVehicle].VehicleIndex) //fix for B*2027310 - warp buddy ped into vehicle if they cannot enter IF NOT IS_PED_IN_VEHICLE(PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, TRUE) AND GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK IF ( iEnterVehicleTimer != 0 ) IF HAS_TIME_PASSED(DEFAULT_TIME_BEFORE_WARP / 2, iEnterVehicleTimer) CLEAR_PED_TASKS(PedIndex) SET_PED_INTO_VEHICLE(PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, VS_DRIVER) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " was warped into vehicle.") #ENDIF ENDIF ENDIF ENDIF IF NOT IS_PED_IN_VEHICLE(PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, TRUE) IF NOT IS_VEHICLE_SEAT_FREE(vsSpeedophiles[ped.ePedVehicle].VehicleIndex, VS_DRIVER) OR vsSpeedophiles[ped.ePedVehicle].VehicleIndex = GET_VEHICLE_PED_IS_USING(TargetPedIndex) OR vsSpeedophiles[ped.ePedVehicle].VehicleIndex = GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) CLEAR_PED_TASKS(PedIndex) iEnterVehicleTimer = 0 //reset warp timer if we need to pick a new vehicle ped.ePedVehicle = MAX_SPEEDOPHILES #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to pick a different vehicle.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF IF GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK CLEAR_PED_TASKS(PedIndex) ped.ePedVehicle = MAX_SPEEDOPHILES #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to be retasked to enter a vehicle.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF ELSE IF IS_PED_IN_VEHICLE(PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[ped.ePedVehicle].VehicleIndex, FALSE) ENDIF IF IS_PED_SITTING_IN_VEHICLE(PedIndex, GET_VEHICLE_PED_IS_USING(PedIndex)) GO_TO_PED_STATE(ped, PED_STATE_SITTING_IN_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE MAX_SPEEDOPHILES #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " is assigned MAX_SPEEDOPHILES.") #ENDIF CLEAR_PED_TASKS(PedIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped ", ped.sDebugName, " has to pick a vehicle again.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) BREAK ENDSWITCH BREAK CASE PED_STATE_SITTING_IN_VEHICLE IF ( ped.bHasTask = FALSE ) //do nothing ped.bHasTask = TRUE ENDIF IF NOT IS_PED_IN_VEHICLE(PedIndex, vsSpeedophiles[ped.ePedVehicle].VehicleIndex) ped.ePedVehicle = MAX_SPEEDOPHILES GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ENDIF BREAK CASE PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH IF IS_PED_IN_ANY_VEHICLE(PedIndex, TRUE) IF NOT IS_PED_IN_THIS_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) AND NOT IS_PED_IN_THIS_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) AND NOT IS_PED_IN_THIS_VEHICLE(PedIndex, vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) TASK_LEAVE_ANY_VEHICLE(PedIndex) ENDIF ENDIF IF ( ped.bFleeing = TRUE ) IF NOT IS_PED_IN_ANY_VEHICLE(PedIndex) ped.ePedVehicle = MAX_SPEEDOPHILES IF ( ped.bVehicleReached = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_ENTERING_VEHICLE) ELSE GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_RIVER) ENDIF ENDIF ELIF ( ped.bWaitingForPlayer = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_WAITING_IN_ALLEY) ELIF ( Events[EVENT_SHOOTOUT_ENDED] = TRUE ) GO_TO_PED_STATE(ped, PED_STATE_RUNNING_TO_ALLEY) ELIF ( Events[EVENT_SHOOTOUT_ENDED] = FALSE ) GO_TO_PED_STATE(ped, PED_STATE_COMBAT_ON_FOOT) ped.bHasTask = TRUE ped.bHasSwitchTask = FALSE ped.bIgnoreProgress = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC MANAGE_ENEMY_PEDS_DURING_DEAL_CUTSCENE(INT &iEnemyProgress) SWITCH iEnemyProgress CASE 0 IF IS_CUTSCENE_PLAYING() iEnemyProgress++ ENDIF BREAK CASE 1 //create enemies REQUEST_MODEL(mnBalla) IF HAS_MODEL_LOADED(mnBalla) esGroup1[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<73.5813, -1944.3768, 19.8115>>, 304.0889, rgEnemies, WEAPONTYPE_MICROSMG, 125) esGroup1[1].PedIndex = CREATE_ENEMY_PED(mnBalla, <<81.7639, -1904.2952, 20.5794>>, 142.1008, rgEnemies, WEAPONTYPE_MICROSMG, 125) esGroup1[2].PedIndex = CREATE_ENEMY_PED(mnBalla, <<79.4749, -1908.1135, 20.3492>>, 169.8566, rgEnemies, WEAPONTYPE_MICROSMG, 125) INITIALISE_ENEMY_GROUP(esGroup1, FALSE #IF IS_DEBUG_BUILD, "Group1 " #ENDIF) iEnemyProgress++ ENDIF BREAK CASE 2 //give combat task IF ( bCutsceneSkipped = FALSE ) IF ( bFirstEnemyGroupInitialised = FALSE ) IF ( GET_CUTSCENE_TIME() > 61500.0 ) IF DOES_ENTITY_EXIST(esGroup1[0].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[0].PedIndex) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, << 81.91, -1942.41, 19.85 >>, vGroup1EnemyAimCoords, PEDMOVE_RUN, TRUE) TASK_SHOOT_AT_COORD(NULL, vGroup1EnemyAimCoords, INFINITE_TASK_TIME, FIRING_TYPE_CONTINUOUS) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(esGroup1[0].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) ENDIF ENDIF IF DOES_ENTITY_EXIST(esGroup1[1].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[1].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[1].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[1].PedIndex, << 89.92, -1918.83, 19.63 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[1].PedIndex, 1.0, 1.0) SET_PED_SHOOTING_PROPERTIES(esGroup1[1].PedIndex, 1, 175, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[1].PedIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(esGroup1[2].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[2].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[2].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[2].PedIndex, << 86.32, -1918.05, 19.69 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[2].PedIndex, 1.0, 1.0) SET_PED_SHOOTING_PROPERTIES(esGroup1[2].PedIndex, 1, 175, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[2].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[2].PedIndex, FALSE) ENDIF ENDIF bFirstEnemyGroupInitialised = TRUE ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC FUNC BOOL IS_MISSION_STAGE_CUTSCENE_DEAL_COMPLETED(INT &iStageProgress) SWITCH iStageProgress CASE 0 REQUEST_IPL("SC1_27_Cut") IF IS_IPL_ACTIVE("SC1_27_Cut") AND HAS_REQUESTED_CUTSCENE_LOADED("fra_1_mcs_1") IF NOT IS_PED_INJURED(PLAYER_PED_ID()) GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_SMG, GET_MAX_AMMO_IN_CLIP(PLAYER_PED_ID(), WEAPONTYPE_SMG) * 2) REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_ONE) ENDIF IF NOT IS_PED_INJURED(psTrevor.PedIndex) SET_PED_SUFFERS_CRITICAL_HITS(psTrevor.PedIndex, FALSE) SET_ENTITY_HEALTH(psTrevor.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(psTrevor.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_INFINITE_AMMO(psTrevor.PedIndex, FALSE) GIVE_WEAPON_TO_PED(psTrevor.PedIndex, WEAPONTYPE_PUMPSHOTGUN, GET_MAX_AMMO_IN_CLIP(psTrevor.PedIndex, WEAPONTYPE_PUMPSHOTGUN) * 2) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTrevor.PedIndex, TRUE) REGISTER_ENTITY_FOR_CUTSCENE(psTrevor.PedIndex, "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_TWO) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) SET_PED_SUFFERS_CRITICAL_HITS(psLamar.PedIndex, FALSE) SET_ENTITY_HEALTH(psLamar.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(psLamar.PedIndex, MAX_BUDDY_PED_HEALTH) GIVE_WEAPON_TO_PED(psLamar.PedIndex, WEAPONTYPE_ASSAULTRIFLE, INFINITE_AMMO) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) SET_PED_PRELOAD_VARIATION_DATA(psLamar.PedIndex, PED_COMP_SPECIAL2, 1, 0) REGISTER_ENTITY_FOR_CUTSCENE(psLamar.PedIndex, "Lamar", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF IF DOES_ENTITY_EXIST(osBag.ObjectIndex) IF NOT IS_ENTITY_DEAD(osBag.ObjectIndex) IF IS_ENTITY_ATTACHED(osBag.ObjectIndex) DETACH_ENTITY(osBag.ObjectIndex, FALSE) ENDIF IF IS_ENTITY_PLAYING_ANIM(osBag.ObjectIndex, "missfra1leadinoutmcs_1", "money_bag") STOP_ENTITY_ANIM(osBag.ObjectIndex, "money_bag", "missfra1leadinoutmcs_1", INSTANT_BLEND_OUT) ENDIF REGISTER_ENTITY_FOR_CUTSCENE(osBag.ObjectIndex, "Michaels_Heist_Bag", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, P_LD_HEIST_BAG_S_1) ENDIF ENDIF REGISTER_ENTITY_FOR_CUTSCENE(osCokeBlock.ObjectIndex, "Coke_Block", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, osCokeBlock.ModelName) FranklinsWeapon = CREATE_WEAPON_OBJECT_FROM_PED_WEAPON_WITH_COMPONENTS(PLAYER_PED_ID(), WEAPONTYPE_SMG) REGISTER_ENTITY_FOR_CUTSCENE(FranklinsWeapon, "Franklins_weapon", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) TrevorsWeapon = CREATE_WEAPON_OBJECT_FROM_PED_WEAPON_WITH_COMPONENTS(psTrevor.PedIndex, WEAPONTYPE_PUMPSHOTGUN) REGISTER_ENTITY_FOR_CUTSCENE(TrevorsWeapon, "Trevors_weapon", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) SET_MODEL_AS_NO_LONGER_NEEDED(GET_WEAPONTYPE_MODEL(WEAPONTYPE_SMG)) SET_MODEL_AS_NO_LONGER_NEEDED(GET_WEAPONTYPE_MODEL(WEAPONTYPE_PUMPSHOTGUN)) SET_MODEL_AS_NO_LONGER_NEEDED(GET_WEAPONTYPE_MODEL(WEAPONTYPE_ASSAULTRIFLE)) CLEAR_HELP() CLEAR_PRINTS() KILL_FACE_TO_FACE_CONVERSATION() //clear any previous coversations PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) iStageProgress++ ELSE IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() //Franklin's variations IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_FRANKLIN)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Franklin", GET_PED_INDEX(CHAR_FRANKLIN)) ENDIF //Trevor's variations IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Trevor", GET_PED_INDEX(CHAR_TREVOR)) ENDIF //Lamar's variations IF DOES_ENTITY_EXIST(psLamar.PedIndex) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Lamar", psLamar.PedIndex) ENDIF ENDIF ENDIF BREAK CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip IF IS_CUTSCENE_PLAYING() CLEANUP_VEHICLE_GROUP(vsParkedVehicles, TRUE) IF ( bCoverpointsCreated = FALSE ) CREATE_COVERPOINTS(csCoverpoints) bCoverpointsCreated = TRUE ENDIF //clear area when starting the cutscene CLEAR_AREA(<< 93.38, -1948.68, 19.75 >>, 7.5, TRUE) //clear area in front of the house and driveway CLEAR_AREA(<< 1.50, -1853.74, 23.31 >>, 125.00, TRUE) //clear grove street area for damage caused before triggering cutscene #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling clear area at in front of the dealer's house.") #ENDIF //create big scenario blocking area IF ( ScenarioBlockingArea5 = NULL ) ScenarioBlockingArea5 = CREATE_SCENARIO_BLOCKING_AREA(<< 82.898, -1949.781, 19.79 >>, << 5000.0, 5000.0, 64.0 >>) ENDIF CLEAR_AREA_OF_PEDS(psFranklin.vPosition, 5000.0) CLEAR_AREA_OF_VEHICLES(psFranklin.vPosition, 5000.0) CLEAR_AREA_OF_PROJECTILES(psFranklin.vPosition, 5000.0) //reposition player's van for cutscene IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) SET_ENTITY_COORDS(vsVan.VehicleIndex, vsVan.vPosition) SET_ENTITY_HEADING(vsVan.VehicleIndex, vsVan.fHeading) SET_VEHICLE_ON_GROUND_PROPERLY(vsVan.VehicleIndex) SET_VEHICLE_DOORS_SHUT(vsVan.VehicleIndex, TRUE) ENDIF //reposition Chop IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) CLEAR_PED_TASKS(psChop.PedIndex) WARP_PED(psChop.PedIndex, << 88.97, -1958.81, 19.75 >>, 0.0, FALSE, FALSE, FALSE) ENDIF ENDIF SET_WEATHER_TYPE_OVERTIME_PERSIST("EXTRASUNNY", 30.0) bFirstEnemyGroupInCombat = FALSE IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF iStageProgress++ ENDIF BREAK CASE 2 MANAGE_ENEMY_PEDS_DURING_DEAL_CUTSCENE(iEnemiesInCutsceneProgress) //handle music events in the cutscene IF IS_CUTSCENE_PLAYING() CREATE_DUMPSTERS(iDumpstersProgress) CREATE_PARKED_VEHICLES(iParkedVehiclesProgress) IF ( bMusicScorePlaying = FALSE ) IF ( GET_CUTSCENE_TIME() > 60000 ) AND ( bCutsceneSkipped = FALSE ) IF TRIGGER_MUSIC_EVENT("FRA1_MISSION_START") bMusicScorePlaying = TRUE ENDIF ENDIF ENDIF IF ( bMusicEventHustlerTriggered = FALSE ) IF ( GET_CUTSCENE_TIME() > 65000 ) AND ( bCutsceneSkipped = FALSE ) IF TRIGGER_MUSIC_EVENT("FRA1_HUSTLER") bMusicEventHustlerTriggered = TRUE ENDIF ENDIF ENDIF //fix for B*2013717, warp Trevor to reset his ped capsule during cutscene IF ( bCutsceneSkipped = FALSE ) IF ( bWarpTrevorToResetCapsule = FALSE ) IF ( GET_CUTSCENE_TIME() > 15000 ) IF NOT IS_PED_INJURED(psTrevor.PedIndex) WARP_PED(psTrevor.PedIndex, GET_ENTITY_COORDS(psTrevor.PedIndex), 0.0, FALSE, FALSE, FALSE) bWarpTrevorToResetCapsule = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(osCokeBlock.ObjectIndex) IF DOES_CUTSCENE_ENTITY_EXIST("Coke_Block") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Coke_Block")) osCokeBlock.ObjectIndex = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Coke_Block")) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object Coke_Block in the cutscene.") #ENDIF ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Franklin.") #ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(), csCoverpoints[0].vPosition, -1, FALSE, 0.5, TRUE, FALSE, csCoverpoints[0].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Putting Franklin into cover on cutscene end.") #ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(17.0 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-9.077) ENDIF IF DOES_ENTITY_EXIST(osCokeBlock.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCokeBlock.ObjectIndex) SET_ENTITY_COORDS_NO_OFFSET(osCokeBlock.ObjectIndex, osCokeBlock.vPosition) SET_ENTITY_ROTATION(osCokeBlock.ObjectIndex, osCokeBlock.vRotation) FREEZE_ENTITY_POSITION(osCokeBlock.ObjectIndex, TRUE) SET_ENTITY_INVINCIBLE(osCokeBlock.ObjectIndex, TRUE) ENDIF ENDIF REPLAY_STOP_EVENT() REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lamar", psLamar.ModelName) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lamar.") #ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) WARP_PED(psLamar.PedIndex, psLamar.vPosition, psLamar.fHeading, FALSE, FALSE, FALSE) SET_CURRENT_PED_WEAPON(psLamar.PedIndex, WEAPONTYPE_ASSAULTRIFLE, TRUE) SET_PED_COMPONENT_VARIATION(psLamar.PedIndex, PED_COMP_SPECIAL2, 1, 0, 0) TASK_PUT_PED_DIRECTLY_INTO_COVER(psLamar.PedIndex, csCoverpoints[1].vPosition, -1, FALSE, 0.5, TRUE, FALSE, csCoverpoints[1].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(psLamar.PedIndex) bLamarsBagEquipped = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Putting Lamar into cover on exit state.") #ENDIF ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_COMBAT_ON_FOOT) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Trevor.") #ENDIF IF NOT IS_PED_INJURED(psTrevor.PedIndex) TASK_PUT_PED_DIRECTLY_INTO_COVER(psTrevor.PedIndex, csCoverpoints[2].vPosition, -1, FALSE, 0.5, TRUE, FALSE, csCoverpoints[2].CoverpointIndex) FORCE_PED_AI_AND_ANIMATION_UPDATE(psTrevor.PedIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Putting Trevor into cover on exit state.") #ENDIF ENDIF GO_TO_PED_STATE(psTrevor, PED_STATE_COMBAT_ON_FOOT) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklins_weapon") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Franklins_weapon.") #ENDIF IF NOT IS_PED_INJURED(PLAYER_PED_ID()) GIVE_WEAPON_OBJECT_TO_PED(FranklinsWeapon, PLAYER_PED_ID()) ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevors_weapon") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Trevors_weapon.") #ENDIF IF NOT IS_PED_INJURED(psTrevor.PedIndex) GIVE_WEAPON_OBJECT_TO_PED(TrevorsWeapon, psTrevor.PedIndex) ENDIF ENDIF IF HAS_CUTSCENE_FINISHED() IF HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_SMG) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_PUMPSHOTGUN) AND HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_ASSAULTRIFLE) AND GET_IS_WAYPOINT_RECORDING_LOADED("fra1_cflee") AND DOES_ENTITY_EXIST(esGroup1[0].PedIndex) AND DOES_ENTITY_EXIST(esGroup1[1].PedIndex) AND DOES_ENTITY_EXIST(esGroup1[2].PedIndex) IF ( bCutsceneSkipped = TRUE ) //cutscene was skipped //put player ped and buddy peds into cover here on cutscene skip? //give combat tasks to enemy peds on cutscene skip IF NOT IS_ENTITY_DEAD(esGroup1[0].PedIndex) WARP_PED(esGroup1[0].PedIndex, vGroup1Enemy0Position, fGroup1Enemy0Heading, FALSE, FALSE, FALSE) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT(esGroup1[0].PedIndex, << 81.91, -1942.41, 19.85 >>, PEDMOVE_RUN, FALSE, vGroup1EnemyAimCoords, NULL, TRUE) SET_PED_COMBAT_PROPERTIES(esGroup1[0].PedIndex, CM_STATIONARY, CAL_AVERAGE, CR_MEDIUM, CA_AGGRESSIVE) SET_PED_SHOOTING_PROPERTIES(esGroup1[0].PedIndex, 1, 60, FIRING_PATTERN_FULL_AUTO) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[0].PedIndex, 1.0, 1.0) ENDIF IF NOT IS_ENTITY_DEAD(esGroup1[1].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[1].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[1].PedIndex, << 89.92, -1918.83, 19.63 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[1].PedIndex, 1.0, 1.0) SET_PED_SHOOTING_PROPERTIES(esGroup1[1].PedIndex, 1, 175, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[1].PedIndex, FALSE) ENDIF IF NOT IS_ENTITY_DEAD(esGroup1[2].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[2].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[2].PedIndex, << 86.32, -1918.05, 19.69 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[2].PedIndex, 1.0, 1.0) SET_PED_SHOOTING_PROPERTIES(esGroup1[2].PedIndex, 1, 175, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[2].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[2].PedIndex, FALSE) ENDIF bFirstEnemyGroupInCombat = TRUE WAIT(1500) //wait a bit so that enemies are moving, not stationary KILL_FACE_TO_FACE_CONVERSATION() //clear any previous coversations PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) REMOVE_IPL("SC1_27_Cut") DELETE_OBJECT(TrevorsWeapon) DELETE_OBJECT(FranklinsWeapon) TRIGGER_MUSIC_EVENT("FRA1_FIGHT_START") IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF RETURN TRUE ELSE //cutscene was not skipped KILL_FACE_TO_FACE_CONVERSATION() //clear any previous coversations PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) REMOVE_IPL("SC1_27_Cut") DELETE_OBJECT(TrevorsWeapon) DELETE_OBJECT(FranklinsWeapon) TRIGGER_MUSIC_EVENT("FRA1_FIGHT_START") IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(FADE_TIME) ENDIF RETURN TRUE ENDIF ENDIF ELSE REQUEST_MODEL(mnBalla) REQUEST_WAYPOINT_RECORDING("fra1_cflee") REQUEST_WEAPON_ASSET(WEAPONTYPE_SMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_PUMPSHOTGUN) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) IF ( bCutsceneSkipped = FALSE ) //if cutscene is skipped, fade out and remain cutscene on faded out screen IF WAS_CUTSCENE_SKIPPED() SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) bCutsceneSkipped = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mocap cutscene was skipped by the player.") #ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC RUN_ENEMY_GROUP_DEAD_CHECK(ENEMY_STRUCT &esArray[], BOOL &bFlag #IF IS_DEBUG_BUILD, STRING sDebugPrint = NULL #ENDIF) IF ( bFlag = FALSE ) IF IS_ENEMY_GROUP_DEAD(esArray) bFlag = TRUE #IF IS_DEBUG_BUILD IF NOT IS_STRING_NULL_OR_EMPTY(sDebugPrint) PRINTLN(GET_THIS_SCRIPT_NAME(), ": Flag ", sDebugPrint, " set to ", bFlag, ".") ENDIF #ENDIF ENDIF ENDIF ENDPROC PROC RUN_EVENTS_CHECK() IF ( Events[EVENT_PLAYER_ENTERED_RIVER_ENTRANCE_LOCATE] = FALSE ) IF IS_ENTITY_IN_ANGLED_AREA_LOCATE(PLAYER_PED_ID(), <<-44.493145,-1867.814697,23.294022>>, <<-17.559521,-1835.444336,29.422800>>, 22.0) Events[EVENT_PLAYER_ENTERED_RIVER_ENTRANCE_LOCATE] = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Event EVENT_PLAYER_ENTERED_RIVER_ENTRANCE_LOCATE set to TRUE.") #ENDIF ENDIF ENDIF IF ( Events[EVENT_SHOOTOUT_ENDED] = FALSE ) IF ( Events[EVENT_ENEMIES_GROUP7_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_GROUP8_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_CARSTREETLEFT_KILLED] = TRUE ) AND ( Events[EVENT_ENEMIES_CARSTREETRIGHT_KILLED] = TRUE ) AND ( Events[EVENT_COPS_ARRIVE] = TRUE) Events[EVENT_SHOOTOUT_ENDED] = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Event EVENT_SHOOTOUT_ENDED set to TRUE.") #ENDIF ENDIF ENDIF IF ( Events[EVENT_BUDDIES_WAITING_FOR_PLAYER] = FALSE ) IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) IF ( psTrevor.bWaitingForPlayer = TRUE ) OR ( psLamar.bWaitingForPlayer = TRUE) Events[EVENT_BUDDIES_WAITING_FOR_PLAYER] = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Event EVENT_BUDDIES_WAITING_FOR_PLAYER set to TRUE.") #ENDIF ENDIF ENDIF ENDIF IF ( Events[EVENT_COPS_ARRIVE] = FALSE ) IF ( Events[EVENT_COPS_SPAWNED] = TRUE ) IF IS_VEHICLE_AT_COORD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, <<-30.758705,-1822.644653,27.052753>>, <<10.000000,12.000000,3.000000>>) OR IS_VEHICLE_AT_COORD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, <<-30.758705,-1822.644653,27.052753>>, <<10.000000,12.000000,3.000000>>) Events[EVENT_COPS_ARRIVE] = TRUE iCopReinforcementTimer = GET_GAME_TIMER() SET_MODEL_AS_NO_LONGER_NEEDED(mnBalla) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Event EVENT_COPS_ARRIVE set to TRUE.") CPRINTLN(DEBUG_MISSION, "Start tracking reinforcement time at:", iCopReinforcementTimer) #ENDIF ENDIF ENDIF ENDIF ENDPROC PROC MANAGE_CHOP_DURING_SHOOTOUT(PED_STRUCT &ped) IF DOES_ENTITY_EXIST(ped.PedIndex) IF NOT IS_ENTITY_DEAD(ped.PedIndex) #IF IS_DEBUG_BUILD //debug info display IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.25) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_INT(ped.iProgress), 1.35) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_FLOAT(GET_PED_HEALTH_RATIO(ped.PedIndex)), 1.45) ENDIF ped.sDebugName = "Chop" #ENDIF SWITCH ped.eState CASE PED_STATE_IDLE IF ( ped.bHasTask = FALSE ) SET_ENTITY_HEALTH(ped.PedIndex, 800) SET_PED_MAX_HEALTH(ped.PedIndex, 800) CLEAR_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_EXPLOSION) SET_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_PLAYER_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_BULLET_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_PLAYER_IMPACT) GIVE_WEAPON_TO_PED(ped.PedIndex, WEAPONTYPE_ANIMAL, INFINITE_AMMO) WARP_PED(ped.PedIndex, ped.vPosition, ped.fHeading, FALSE, FALSE, FALSE) ped.bHasTask = TRUE ENDIF IF ( Events[EVENT_SHOOTOUT_STARTED] = TRUE ) SWITCH eChopBehaviour CASE CHOP_BEHAVIOUR_BAD CASE CHOP_BEHAVIOUR_GOOD CASE CHOP_BEHAVIOUR_MEDIUM GO_TO_PED_STATE(ped, PED_STATE_FLEEING) BREAK ENDSWITCH ENDIF BREAK CASE PED_STATE_FLEEING IF ( ped.bHasTask = FALSE ) IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ped.PedIndex) REQUEST_WAYPOINT_RECORDING("fra1_cflee") IF GET_IS_WAYPOINT_RECORDING_LOADED("fra1_cflee") TASK_FOLLOW_WAYPOINT_RECORDING(ped.PedIndex, "fra1_cflee", 0, EWAYPOINT_START_FROM_CLOSEST_POINT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) ENDIF ELSE ped.iHealthConversationTimer = 0 //use for F1_LCGO & F1_FCGO ped.iHealthConversationCounter = 0 //use for F1_LCGO & F1_FCGO ped.iPedConversationTimer = 0 //use for F1_LCGO & F1_FCGO ped.iProgress = 0 //use ped progress to control chop camera ped.bHasTask = TRUE ENDIF ENDIF IF ( ped.bHasTask = TRUE ) IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ped.PedIndex) WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ped.PedIndex, 2.5, TRUE) //make chop sprint when fleeing INT iWaypointProgress iWaypointProgress = GET_PED_WAYPOINT_PROGRESS(ped.PedIndex) IF ( iWaypointProgress >= 95 ) IF IS_ENTITY_OCCLUDED(ped.PedIndex) OR NOT IS_ENTITY_ON_SCREEN(ped.PedIndex) DELETE_PED(ped.PedIndex) REMOVE_WAYPOINT_RECORDING("fra1_cflee") ELSE TASK_SMART_FLEE_COORD(ped.PedIndex, GET_ENTITY_COORDS(ped.PedIndex), 250.0, INFINITE_TASK_TIME) SET_PED_KEEP_TASK(ped.PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex) REMOVE_WAYPOINT_RECORDING("fra1_cflee") ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC RUN_VEHICLE_TYRE_BURST_CHECK(VEHICLE_INDEX VehicleIndex, SC_WHEEL_LIST eVehicleWheel, VECTOR vWheelOffset, FLOAT fRadius, BOOL bPlayerOnly, BOOL bApplyDamage, VECTOR vDamageOffset, FLOAT fDamage = 100.0, FLOAT fDeformation = 100.0 #IF IS_DEBUG_BUILD, BOOL bDrawDebugInfo = TRUE #ENDIF) IF DOES_ENTITY_EXIST(VehicleIndex) IF NOT IS_ENTITY_DEAD(VehicleIndex) IF NOT IS_VEHICLE_TYRE_BURST(VehicleIndex, eVehicleWheel) IF IS_BULLET_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(VehicleIndex, vWheelOffset), fRadius, bPlayerOnly) SWITCH eVehicleWheel CASE SC_WHEEL_CAR_FRONT_LEFT SET_VEHICLE_TYRE_BURST(VehicleIndex, SC_WHEEL_CAR_FRONT_LEFT) SMASH_VEHICLE_WINDOW(VehicleIndex, SC_WINDOW_FRONT_LEFT) BREAK CASE SC_WHEEL_CAR_FRONT_RIGHT SET_VEHICLE_TYRE_BURST(VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT) SMASH_VEHICLE_WINDOW(VehicleIndex, SC_WINDOW_FRONT_RIGHT) BREAK CASE SC_WHEEL_CAR_REAR_LEFT SET_VEHICLE_TYRE_BURST(VehicleIndex, SC_WHEEL_CAR_REAR_LEFT) SMASH_VEHICLE_WINDOW(VehicleIndex, SC_WINDOW_REAR_LEFT) BREAK CASE SC_WHEEL_CAR_REAR_RIGHT SET_VEHICLE_TYRE_BURST(VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT) SMASH_VEHICLE_WINDOW(VehicleIndex, SC_WINDOW_REAR_RIGHT) BREAK ENDSWITCH IF ( bApplyDamage = TRUE ) SET_VEHICLE_DAMAGE(VehicleIndex, vDamageOffset, fDamage, fDeformation, TRUE) ENDIF ENDIF #IF IS_DEBUG_BUILD IF ( bDrawDebugInfo = TRUE ) DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(VehicleIndex, vWheelOffset), fRadius, 0, 0, 255, 64) DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(VehicleIndex, vDamageOffset), 0.1, 255, 0, 0) ENDIF #ENDIF ENDIF ENDIF ENDIF ENDPROC PROC UPDATE_VEHICLE_FOR_DAMAGE(VEHICLE_INDEX VehicleIndex, INT iExplodeHealth #IF IS_DEBUG_BUILD, BOOL bDrawDebugInfo = TRUE #ENDIF) IF DOES_ENTITY_EXIST(VehicleIndex) IF IS_VEHICLE_DRIVEABLE(VehicleIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugInfo = TRUE ) TEXT_LABEL HealthLabel = "H: " TEXT_LABEL EngineLabel = "E: " TEXT_LABEL PetrolLabel = "P: " HealthLabel += GET_STRING_FROM_INT(GET_ENTITY_HEALTH(VehicleIndex)) EngineLabel += GET_STRING_FROM_FLOAT(GET_VEHICLE_ENGINE_HEALTH(VehicleIndex)) PetrolLabel += GET_STRING_FROM_FLOAT(GET_VEHICLE_PETROL_TANK_HEALTH(VehicleIndex)) DRAW_DEBUG_TEXT_ABOVE_ENTITY(VehicleIndex, HealthLabel, 2.15) DRAW_DEBUG_TEXT_ABOVE_ENTITY(VehicleIndex, EngineLabel, 1.95) DRAW_DEBUG_TEXT_ABOVE_ENTITY(VehicleIndex, PetrolLabel, 1.75) ENDIF #ENDIF IF NOT IS_ENTITY_DEAD(VehicleIndex) IF ( GET_ENTITY_HEALTH(VehicleIndex) = 0 ) SET_VEHICLE_ENGINE_HEALTH(VehicleIndex, -100) SET_VEHICLE_PETROL_TANK_HEALTH(VehicleIndex, -100) ELIF ( GET_ENTITY_HEALTH(VehicleIndex) < iExplodeHealth ) SET_VEHICLE_ENGINE_HEALTH(VehicleIndex, -100) SET_VEHICLE_PETROL_TANK_HEALTH(VehicleIndex, -100) SET_ENTITY_HEALTH(VehicleIndex, 100) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(VehicleIndex) ENDIF ENDIF ENDIF ENDIF ENDPROC FUNC BOOL IS_FILMCREW_SCARED() IF bFilmCrewAttacked RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC MANAGE_CONVERSATIONS_DURING_SHOOTOUT(INT &iProgress) PED_INDEX ClosestEnemyPed INT iEnemySpeakerID STRING sEnemyVoiceName STRING sEnemyConversationRoot IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_FLOW") IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_FRANKLIN)) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_FRANKLIN)) IF GET_PED_HEALTH_RATIO(GET_PED_INDEX(CHAR_FRANKLIN)) < 0.475 IF HAS_TIME_PASSED(15000, psFranklin.iHealthConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_FLOW", CONV_PRIORITY_HIGH) psFranklin.iHealthConversationTimer = GET_GAME_TIMER() psFranklin.iHealthConversationCounter++ IF ( psFranklin.iHealthConversationCounter = 6 ) SET_LABEL_AS_TRIGGERED("F1_FLOW", TRUE) ENDIF ENDIF ENDIF ELSE IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_FRANKLIN)) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(GET_PED_INDEX(CHAR_FRANKLIN), "FKN1_GSAA", "FRANKLIN", SPEECH_PARAMS_FORCE_NORMAL) psFranklin.iHealthConversationTimer = GET_GAME_TIMER() psFranklin.iHealthConversationCounter++ IF ( psFranklin.iHealthConversationCounter = 6 ) SET_LABEL_AS_TRIGGERED("F1_FLOW", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_TLOW") IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_TREVOR)) IF GET_PED_HEALTH_RATIO(GET_PED_INDEX(CHAR_TREVOR)) < 0.475 IF HAS_TIME_PASSED(15000, psTrevor.iHealthConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_TLOW", CONV_PRIORITY_HIGH) psTrevor.iHealthConversationTimer = GET_GAME_TIMER() psTrevor.iHealthConversationCounter++ IF ( psTrevor.iHealthConversationCounter = 6 ) SET_LABEL_AS_TRIGGERED("F1_TLOW", TRUE) ENDIF ENDIF ENDIF ELSE IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_TREVOR)) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(GET_PED_INDEX(CHAR_TREVOR), "FKN1_GTAA", "TREVOR", SPEECH_PARAMS_FORCE_NORMAL) psTrevor.iHealthConversationTimer = GET_GAME_TIMER() psTrevor.iHealthConversationCounter++ IF ( psTrevor.iHealthConversationCounter = 6 ) SET_LABEL_AS_TRIGGERED("F1_TLOW", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( bBuddyPinnedDown = TRUE AND bBuddyPinnedDownSwitched = FALSE ) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF HAS_TIME_PASSED(7500, psTrevor.iHealthConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_HELP1", CONV_PRIORITY_HIGH) psTrevor.iHealthConversationTimer = GET_GAME_TIMER() ENDIF ELSE IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_TREVOR)) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(GET_PED_INDEX(CHAR_TREVOR), "FKN1_KZAA", "TREVOR", SPEECH_PARAMS_FORCE_NORMAL) psTrevor.iHealthConversationTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF BREAK CASE CHAR_TREVOR IF HAS_TIME_PASSED(7500, psFranklin.iHealthConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_FHELP1", CONV_PRIORITY_HIGH) psFranklin.iHealthConversationTimer = GET_GAME_TIMER() ENDIF ELSE IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_FRANKLIN)) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(GET_PED_INDEX(CHAR_FRANKLIN), "FKN1_LBAA", "FRANKLIN", SPEECH_PARAMS_FORCE_NORMAL) psFranklin.iHealthConversationTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LLOW") IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF GET_PED_HEALTH_RATIO(psLamar.PedIndex) < 0.475 IF HAS_TIME_PASSED(15000, psLamar.iHealthConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LLOW", CONV_PRIORITY_HIGH) psTrevor.iHealthConversationTimer = GET_GAME_TIMER() psTrevor.iHealthConversationCounter++ IF ( psTrevor.iHealthConversationCounter = 4 ) SET_LABEL_AS_TRIGGERED("F1_LLOW", TRUE) ENDIF ENDIF ENDIF ELSE IF NOT IS_AMBIENT_SPEECH_PLAYING(psLamar.PedIndex) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(psLamar.PedIndex, "FKN1_GRAA", "LAMAR", SPEECH_PARAMS_FORCE_NORMAL) psLamar.iHealthConversationTimer = GET_GAME_TIMER() psLamar.iHealthConversationCounter++ IF ( psLamar.iHealthConversationCounter = 4 ) SET_LABEL_AS_TRIGGERED("F1_LLOW", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF SWITCH iProgress CASE 0 //play conversation at the start of the shootout IF ( Events[EVENT_SHOOTOUT_STARTED] = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_GSESCG") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_GSESCG", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_GSESCG", TRUE) ENDIF ENDIF ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_GSVIW") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_GSVIW", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_GSVIW", TRUE) iEnemyRandomConversationDelay = 5000 + GET_RANDOM_INT_IN_RANGE(0, 3001) iEnemyConversationTimer = GET_GAME_TIMER() bRandomConversationAllowed = TRUE iConversationTimer = GET_GAME_TIMER() iProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 //play conversations during the shootout IF ( Events[EVENT_SHOOTOUT_ENDED] = FALSE ) //play conversations from shootout start to the end //handle conversation for enemies in car doing drive by IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_BALL7D") IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) > 3000.0 IF DOES_ENTITY_EXIST(esCarIntersection1Right[0].PedIndex) IF NOT IS_ENTITY_DEAD(esCarIntersection1Right[0].PedIndex) IF IS_PED_IN_COMBAT(esCarIntersection1Right[0].PedIndex) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, BALLA7SPEAKERID, esCarIntersection1Right[0].PedIndex, BALLA7VOICENAME) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_BALL7D", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_BALL7D", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF //play conversation for car rolling out of control IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_ROLL") IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) > 2000.0 IF DOES_ENTITY_EXIST(psLamar.PedIndex) IF NOT IS_ENTITY_DEAD(psLamar.PedIndex) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(psLamar.PedIndex, vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_ROLL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_ROLL", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF //play conversation for player sniping IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LSNIPE_3") IF bLastEnemyKilledWithSniperRifle = TRUE IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LSNIPE", CONV_PRIORITY_MEDIUM) iSniperRifleConversationsCounter++ iConversationTimer = GET_GAME_TIMER() bLastEnemyKilledWithSniperRifle = FALSE IF ( iSniperRifleConversationsCounter >=3 ) SET_LABEL_AS_TRIGGERED("F1_LSNIPE_3", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psChop.PedIndex) IF NOT IS_ENTITY_DEAD(psChop.PedIndex) SWITCH pschop.eState CASE PED_STATE_FLEEING IF HAS_LABEL_BEEN_TRIGGERED("FRA1_ESCGSF") OR HAS_LABEL_BEEN_TRIGGERED("FRA1_ESCGST") IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCGO") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_FCGO") IF ( psChop.iHealthConversationTimer = 0) psChop.iPedConversationTimer = 250 psChop.iHealthConversationTimer = GET_GAME_TIMER() ELSE IF HAS_TIME_PASSED(psChop.iPedConversationTimer, psChop.iHealthConversationTimer) SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCGO", CONV_PRIORITY_MEDIUM) psChop.iPedConversationTimer = 1250 psChop.iHealthConversationTimer = GET_GAME_TIMER() psChop.iHealthConversationCounter++ IF ( psChop.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_LCGO", TRUE) ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(psLamar.PedIndex) IF NOT IS_AMBIENT_SPEECH_PLAYING(psLamar.PedIndex) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(psLamar.PedIndex, "FKN1_CDAA", "LAMAR", SPEECH_PARAMS_FORCE_NORMAL) psChop.iPedConversationTimer = 1250 psChop.iHealthConversationTimer = GET_GAME_TIMER() psChop.iHealthConversationCounter++ IF ( psChop.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_LCGO", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_FCGO", CONV_PRIORITY_MEDIUM) psChop.iPedConversationTimer = 1250 psChop.iHealthConversationTimer = GET_GAME_TIMER() psChop.iHealthConversationCounter++ IF ( psChop.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_FCGO", TRUE) ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) IF NOT IS_AMBIENT_SPEECH_PLAYING(GET_PED_INDEX(CHAR_FRANKLIN)) PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(GET_PED_INDEX(CHAR_FRANKLIN), "FKN1_CCAA", "FRANKLIN", SPEECH_PARAMS_FORCE_NORMAL) psChop.iPedConversationTimer = 1250 psChop.iHealthConversationTimer = GET_GAME_TIMER() psChop.iHealthConversationCounter++ IF ( psChop.iHealthConversationCounter = 2 ) SET_LABEL_AS_TRIGGERED("F1_FCGO", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF IF ( bRandomConversationAllowed = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LSIREN") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_TSIREN") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_FSIREN") IF ( Events[EVENT_COPS_SPAWNED] = TRUE ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_RANDOM_INT_IN_RANGE(0,2) CASE 0 lConversationLabel = "F1_LSIREN" BREAK CASE 1 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN lConversationLabel = "F1_TSIREN" ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR lConversationLabel = "F1_FSIREN" ENDIF BREAK ENDSWITCH IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", lConversationLabel, CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED(lConversationLabel, TRUE) iConversationTimer = GET_GAME_TIMER() iEnemyConversationTimer = GET_GAME_TIMER() iEnemyRandomConversationDelay = 2000 + GET_RANDOM_INT_IN_RANGE(0, 1001) ENDIF ENDIF ENDIF ENDIF ENDIF IF HAS_TIME_PASSED(6000, iConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF ( psLamar.bWaitingToAdvance = FALSE ) AND ( psTrevor.bWaitingToAdvance = FALSE ) SWITCH GET_RANDOM_INT_IN_RANGE(0,3) CASE 0 SWITCH GET_RANDOM_INT_IN_RANGE(0,3) CASE 0 lConversationLabel = "F1_LCMBT" BREAK CASE 1 lConversationLabel = "F1_LMOVE" BREAK CASE 2 lConversationLabel = "F1_LMORE" BREAK ENDSWITCH BREAK CASE 1 SWITCH GET_RANDOM_INT_IN_RANGE(0,2) CASE 0 lConversationLabel = "F1_FCMBT" BREAK CASE 1 lConversationLabel = "F1_FMOVE" BREAK ENDSWITCH BREAK CASE 2 SWITCH GET_RANDOM_INT_IN_RANGE(0,2) CASE 0 lConversationLabel = "F1_TCMBT" BREAK CASE 1 lConversationLabel = "F1_TMOVE" BREAK ENDSWITCH BREAK ENDSWITCH IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", lConversationLabel, CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF ELSE SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_TREVOR SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCWTA", CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE 1 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_FCWTA", CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH BREAK CASE CHAR_FRANKLIN SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCWTA", CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE 1 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_TCWTA", CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) //play conversations when cops arrive IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_BLOCK") //play conversation when cops block the street IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_BLOCK", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_BLOCK", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LEFT") //play conversation when Lamar starts running left to the alley IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LEFT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LEFT", TRUE) iConversationTimer = GET_GAME_TIMER() iProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF //play enemy random dialogue IF HAS_TIME_PASSED(iEnemyRandomConversationDelay, iEnemyConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) ClosestEnemyPed = GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(PLAYER_PED_ID(), rgEnemies, GET_RANDOM_INT_IN_RANGE(0, 3)) IF ( ClosestEnemyPed <> NULL ) SWITCH GET_RANDOM_INT_IN_RANGE(0, 7) CASE 0 iEnemySpeakerID = BALLA1SPEAKERID sEnemyVoiceName = BALLA1VOICENAME sEnemyConversationRoot = "F1_BALL1" BREAK CASE 1 iEnemySpeakerID = BALLA2SPEAKERID sEnemyVoiceName = BALLA2VOICENAME sEnemyConversationRoot = "F1_BALL2" BREAK CASE 2 iEnemySpeakerID = BALLA3SPEAKERID sEnemyVoiceName = BALLA3VOICENAME sEnemyConversationRoot = "F1_BALL3" BREAK CASE 3 iEnemySpeakerID = BALLA4SPEAKERID sEnemyVoiceName = BALLA4VOICENAME sEnemyConversationRoot = "F1_BALL4" BREAK CASE 4 iEnemySpeakerID = BALLA5SPEAKERID sEnemyVoiceName = BALLA5VOICENAME sEnemyConversationRoot = "F1_BALL5" BREAK CASE 5 iEnemySpeakerID = BALLA6SPEAKERID sEnemyVoiceName = BALLA6VOICENAME sEnemyConversationRoot = "F1_BALL6" BREAK CASE 6 iEnemySpeakerID = BALLA7SPEAKERID sEnemyVoiceName = BALLA7VOICENAME sEnemyConversationRoot = "F1_BALL7" BREAK ENDSWITCH ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, iEnemySpeakerID, ClosestEnemyPed, sEnemyVoiceName) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", sEnemyConversationRoot, CONV_PRIORITY_MEDIUM) iEnemyConversationTimer = GET_GAME_TIMER() iEnemyRandomConversationDelay = 6000 + GET_RANDOM_INT_IN_RANGE(0, 4001) ENDIF ELSE iEnemyConversationTimer = GET_GAME_TIMER() iEnemyRandomConversationDelay = 4000 + GET_RANDOM_INT_IN_RANGE(0, 3001) ENDIF ENDIF ENDIF ENDIF BREAK CASE 2 //play conversations from the moment the buddies start waiting for the player at the alley to the river IF ( Events[EVENT_BUDDIES_WAITING_FOR_PLAYER] = TRUE ) IF ( psLamar.bFleeing = FALSE ) AND ( psTrevor.bFleeing = FALSE ) IF HAS_TIME_PASSED(5000, iConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_RANDOM_INT_IN_RANGE(0,2) CASE 0 lConversationLabel = "F1_LWAIT" BREAK CASE 1 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN lConversationLabel = "F1_TWAIT" ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR lConversationLabel = "F1_FWAIT" ENDIF BREAK ENDSWITCH IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", lConversationLabel, CONV_PRIORITY_MEDIUM) iConversationTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ELSE IF ( psLamar.bFleeing = TRUE ) IF ( psLamar.bWaitingForPlayer = TRUE ) IF HAS_TIME_PASSED(3000, psLamar.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM02", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LHILL") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LHILL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LHILL", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM03") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, <<-41.722290,-1866.694702,28.490503>>, <<-61.971512,-1891.405518,4.101753>>, 16.0) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM03", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM03", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM04") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_INJURED(psLamar.PedIndex) IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(psLamar.PedIndex) IF ( GET_PED_WAYPOINT_PROGRESS(psLamar.PedIndex) > 40 ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM04", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM04", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT IS_FILMCREW_SCARED() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM05") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_RUNNING_TO_VEHICLE) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM05", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM05", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT IS_FILMCREW_SCARED() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM06") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_WAITING_AT_VEHICLE) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM06", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM06", TRUE) psLamar.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_WAITING_AT_VEHICLE) OR IS_PED_IN_PED_STATE(psLamar, PED_STATE_SITTING_IN_VEHICLE) IF NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) AND NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) AND NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF HAS_TIME_PASSED(5000, psLamar.iTimer) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM07", CONV_PRIORITY_MEDIUM) IF NOT IS_PED_INJURED(psLamar.PedIndex) TASK_LOOK_AT_ENTITY(psLamar.PedIndex, PLAYER_PED_ID(), 2000, SLF_WHILE_NOT_IN_FOV) ENDIF psLamar.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( bFilmCrewAttacked = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM08F") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM08T") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM08F", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM08F", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM08T", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM08T", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF ( psFilmCrew[FCP_CLAY].eCleanupReason <> PED_CLEANUP_NO_CLEANUP ) IF ( psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = FALSE ) SWITCH psFilmCrew[FCP_CLAY].eCleanupReason CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM09F", CONV_PRIORITY_MEDIUM) psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = TRUE ENDIF BREAK CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM09F", CONV_PRIORITY_MEDIUM) //uses the same root here psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FILM_CREW_PEDS_BEFORE_JACK(INT &iProgress) SWITCH iProgress CASE 0 IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) OR ( Events[EVENT_PLAYER_ENTERED_RIVER_ENTRANCE_LOCATE] = TRUE ) OR IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<-52.439522,-1860.438843,23.112972>>, <<-38.097290,-1843.122192,29.922827>>, 84.0) g_bFranklin1GirlFled = FALSE iProgress++ ENDIF BREAK CASE 1 //create 1st speedophile IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_1], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 46, 46, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_1" #ENDIF) SET_VEHICLE_ENGINE_ON(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, FALSE, TRUE) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, FALSE) SET_BOAT_ANCHOR(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) SETTIMERA(0) iProgress++ ENDIF BREAK CASE 2 IF TIMERA() > 100 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_2], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 51, 51, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_2" #ENDIF) SET_VEHICLE_ENGINE_ON(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, FALSE, TRUE) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, FALSE) SET_BOAT_ANCHOR(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 3 IF TIMERA() > 100 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsSpeedophiles[SPEEDOPHILE_3], FALSE, FALSE, NO_CHARACTER, TRUE, -1, 82, 82, 0, 0 #IF IS_DEBUG_BUILD, "SPEEDOPHILE_3" #ENDIF) SET_VEHICLE_ENGINE_ON(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, FALSE, TRUE) SET_VEHICLE_RADIO_ENABLED(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, FALSE) SET_BOAT_ANCHOR(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) FailFlags[MISSION_FAIL_SPEEDOPHILE_DEAD] = TRUE FailFlags[MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE] = TRUE iProgress++ ENDIF ENDIF BREAK CASE 4 //create film crew IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) REQUEST_MODEL(psFilmCrew[FCP_CLAY].ModelName) //request clay ped model REQUEST_MODEL(psFilmCrew[FCP_CAMERAMAN].ModelName) //request grip ped model REQUEST_MODEL(psFilmCrew[FCP_JACKEDGIRL].ModelName) //request beach girl ped model REQUEST_MODEL(osLight.ModelName) REQUEST_MODEL(osCamera.ModelName) REQUEST_MODEL(osBoombox.ModelName) REQUEST_MODEL(osMicrophone.ModelName) IF HAS_MODEL_LOADED(osLight.ModelName) AND HAS_MODEL_LOADED(osCamera.ModelName) AND HAS_MODEL_LOADED(osBoombox.ModelName) AND HAS_MODEL_LOADED(osMicrophone.ModelName) AND HAS_MODEL_LOADED(psFilmCrew[FCP_CLAY].ModelName) AND HAS_MODEL_LOADED(psFilmCrew[FCP_CAMERAMAN].ModelName) AND HAS_MODEL_LOADED(psFilmCrew[FCP_JACKEDGIRL].ModelName) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_JACKEDGIRL], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsSpeedophiles[0].VehicleIndex) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_GIRL], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE, FALSE, vsSpeedophiles[1].VehicleIndex) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_CLAY], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_CAMERAMAN], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE) IF HAS_MISSION_PED_BEEN_CREATED(psFilmCrew[FCP_BOOMMAN], FALSE, rgFilmCrew, FALSE, NO_CHARACTER, FALSE, TRUE) IF HAS_MISSION_OBJECT_BEEN_CREATED(osLight) AND HAS_MISSION_OBJECT_BEEN_CREATED(osCamera) AND HAS_MISSION_OBJECT_BEEN_CREATED(osBoombox) AND HAS_MISSION_OBJECT_BEEN_CREATED(osMicrophone) IF NOT IS_PED_INJURED(psFilmCrew[FCP_CLAY].PedIndex) SET_ENTITY_LOD_DIST(psFilmCrew[FCP_CLAY].PedIndex, 100) SET_PED_LOD_MULTIPLIER(psFilmCrew[FCP_CLAY].PedIndex, 5.0) ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_CAMERAMAN].PedIndex) SET_ENTITY_LOD_DIST(psFilmCrew[FCP_CAMERAMAN].PedIndex, 100) SET_PED_LOD_MULTIPLIER(psFilmCrew[FCP_CAMERAMAN].PedIndex, 5.0) ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_BOOMMAN].PedIndex) SET_ENTITY_LOD_DIST(psFilmCrew[FCP_BOOMMAN].PedIndex, 100) SET_PED_LOD_MULTIPLIER(psFilmCrew[FCP_BOOMMAN].PedIndex, 5.0) ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_GIRL].PedIndex) SET_ENTITY_LOD_DIST(psFilmCrew[FCP_GIRL].PedIndex, 100) SET_PED_LOD_MULTIPLIER(psFilmCrew[FCP_GIRL].PedIndex, 5.0) //fix for B*1809004, disable writhe as the ped can end up attached to vehicle they died on while in writhe SET_PED_DIES_WHEN_INJURED(psFilmCrew[FCP_GIRL].PedIndex, TRUE) SET_PED_CONFIG_FLAG(psFilmCrew[FCP_GIRL].PedIndex, PCF_DisableGoToWritheWhenInjured, TRUE) ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) SET_ENTITY_LOD_DIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex, 100) SET_PED_LOD_MULTIPLIER(psFilmCrew[FCP_JACKEDGIRL].PedIndex, 5.0) //fix for B*1809004, disable writhe as the ped can end up attached to vehicle they died on while in writhe SET_PED_DIES_WHEN_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex, TRUE) SET_PED_CONFIG_FLAG(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PCF_DisableGoToWritheWhenInjured, TRUE) ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_CAMERAMAN].PedIndex) IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) IF NOT IS_ENTITY_ATTACHED(osCamera.ObjectIndex) SET_ENTITY_INVINCIBLE(osCamera.ObjectIndex, TRUE) ATTACH_ENTITY_TO_ENTITY(osCamera.ObjectIndex, psFilmCrew[FCP_CAMERAMAN].PedIndex, GET_PED_BONE_INDEX(psFilmCrew[FCP_CAMERAMAN].PedIndex, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) ENDIF ENDIF ENDIF ENDIF IF NOT IS_PED_INJURED(psFilmCrew[FCP_BOOMMAN].PedIndex) IF DOES_ENTITY_EXIST(osMicrophone.ObjectIndex) IF NOT IS_ENTITY_DEAD(osMicrophone.ObjectIndex) IF NOT IS_ENTITY_ATTACHED(osMicrophone.ObjectIndex) SET_ENTITY_INVINCIBLE(osMicrophone.ObjectIndex, TRUE) ATTACH_ENTITY_TO_ENTITY(osMicrophone.ObjectIndex, psFilmCrew[FCP_BOOMMAN].PedIndex, GET_PED_BONE_INDEX(psFilmCrew[FCP_BOOMMAN].PedIndex, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>) ENDIF ENDIF ENDIF ENDIF #IF IS_DEBUG_BUILD //give debug names to peds psFilmCrew[FCP_GIRL].sDebugName = "FCP_GIRL" psFilmCrew[FCP_CLAY].sDebugName = "FCP_CLAY" psFilmCrew[FCP_JACKEDGIRL].sDebugName = "FCP_JACKEDGIRL" psFilmCrew[FCP_CAMERAMAN].sDebugName = "FCP_CAMERAMAN" psFilmCrew[FCP_BOOMMAN].sDebugName = "FCP_BOOMMAN" #ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_JACKEDGIRL].PedIndex) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_HEAD, 1, 0, 0) //(head) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_HAIR, 1, 1, 0) //(hair) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_TORSO, 0, 5, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_LEG, 0, 5, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PED_COMP_SPECIAL, 1, 0, 0) //(accs) ENDIF ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_GIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_GIRL].PedIndex) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_GIRL].PedIndex, PED_COMP_HEAD, 0, 0, 0) //(head) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_GIRL].PedIndex, PED_COMP_HAIR, 2, 0, 0) //(hair) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_GIRL].PedIndex, PED_COMP_TORSO, 0, 2, 0) //(uppr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_GIRL].PedIndex, PED_COMP_LEG, 0, 2, 0) //(lowr) SET_PED_COMPONENT_VARIATION(psFilmCrew[FCP_GIRL].PedIndex, PED_COMP_SPECIAL, 1, 0, 0) //(accs) ENDIF ENDIF iProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 5 REQUEST_ANIM_DICT("missfra1") REQUEST_ANIM_DICT("missfra1mcs_2_crew_react") IF HAS_ANIM_DICT_LOADED("missfra1") AND HAS_ANIM_DICT_LOADED("missfra1mcs_2_crew_react") AND REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_CAMERAS") AND REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_GIRLS") IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) PLAY_SOUND_FROM_ENTITY(iPhotoShootSoundID, "FRANKLIN_1_PHOTO_SHOOT", psFilmCrew[FCP_JACKEDGIRL].PedIndex) ENDIF GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_PLAYING_BEGIN_ANIM) GO_TO_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_PLAYING_BEGIN_ANIM) GO_TO_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_PLAYING_BEGIN_ANIM) GO_TO_PED_STATE(psFilmCrew[FCP_CAMERAMAN], PED_STATE_PLAYING_BEGIN_ANIM) GO_TO_PED_STATE(psFilmCrew[FCP_BOOMMAN], PED_STATE_PLAYING_BEGIN_ANIM) iProgress++ ENDIF BREAK CASE 6 //update ped tasks IF DOES_ENTITY_EXIST(psFilmCrew[FCP_CLAY].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_CLAY].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_CLAY].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_CLAY].eState), 1.25) ENDIF #ENDIF psFilmCrew[FCP_CLAY].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_CLAY].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_CLAY].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF NOT IS_PED_IN_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_FLEEING) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_CLAY].eState CASE PED_STATE_PLAYING_BEGIN_ANIM IF ( psFilmCrew[FCP_CLAY].bHasTask = FALSE ) WARP_PED(psFilmCrew[FCP_CLAY].PedIndex, <<-119.6947, -1863.9877, 0.4591>>, 62.9280, FALSE, FALSE, FALSE) TASK_PLAY_ANIM(psFilmCrew[FCP_CLAY].PedIndex, "missfra1", "fra_1_mcs_2_clayidle", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) psFilmCrew[FCP_CLAY].bHasTask = TRUE ENDIF IF ( psLamar.eState = PED_STATE_RUNNING_TO_VEHICLE) GO_TO_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_PLAYING_REACTION_ANIM) ENDIF BREAK CASE PED_STATE_PLAYING_REACTION_ANIM IF ( psFilmCrew[FCP_CLAY].bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex CLEAR_PED_TASKS(psFilmCrew[FCP_CLAY].PedIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLamar.PedIndex) TASK_LOOK_AT_ENTITY(NULL, psLamar.PedIndex, 100, SLF_USE_TORSO) TASK_CLEAR_LOOK_AT(NULL) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "handsup_standing_base", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_CLAY].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) psFilmCrew[FCP_CLAY].bHasTask = TRUE ENDIF PLAY_PAIN(psFilmCrew[FCP_CLAY].PedIndex, AUD_DAMAGE_REASON_SCREAM_SCARED) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CLIP3") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_PED_IN_THIS_VEHICLE(psLamar.PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(psLamar.PedIndex, vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(psLamar.PedIndex, vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 7, psFilmCrew[FCP_CLAY].PedIndex, "MCCLIP") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CLIP3", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CLIP3", TRUE) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_CLAY].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_CLAY].PedIndex) TASK_SMART_FLEE_COORD(psFilmCrew[FCP_CLAY].PedIndex, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_USE_VEHICLE, FALSE) psFilmCrew[FCP_CLAY].bHasTask = TRUE ENDIF IF ( psFilmCrew[FCP_CLAY].bHasTask = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CLIP2") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 7, psFilmCrew[FCP_CLAY].PedIndex, "MCCLIP") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CLIP2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CLIP2", TRUE) ENDIF ENDIF ENDIF ENDIF IF ( psFilmCrew[FCP_CLAY].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_CLAY], FALSE, FALSE, TRUE) ENDIF BREAK ENDSWITCH ELSE IF ( psFilmCrew[FCP_CLAY].eCleanupReason = PED_CLEANUP_NO_CLEANUP ) psFilmCrew[FCP_CLAY].eCleanupReason = GET_PED_CLEANUP_REASON(psFilmCrew[FCP_CLAY].PedIndex #IF IS_DEBUG_BUILD, psFilmCrew[FCP_CLAY].sDebugName #ENDIF) IF NOT IS_REPEAT_PLAY_ACTIVE() SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FRANK1_MC_CLIPPED, TRUE) ENDIF bFilmCrewAttacked = TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_JACKEDGIRL].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_JACKEDGIRL].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_JACKEDGIRL].eState), 1.25) ENDIF #ENDIF psFilmCrew[FCP_JACKEDGIRL].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_JACKEDGIRL].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF NOT IS_PED_IN_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_FLEEING) IF ( bFilmCrewAttacked = TRUE ) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_JACKEDGIRL].eState CASE PED_STATE_PLAYING_BEGIN_ANIM IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) TASK_PLAY_ANIM(psFilmCrew[FCP_JACKEDGIRL].PedIndex, "missfra1mcs_2_crew_react", "mcs2_f_jetski_idle01", INSTANT_BLEND_IN, WALK_BLEND_OUT, -1, AF_LOOPING, 0, FALSE, AIK_DISABLE_ARM_IK) psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF ( psLamar.eState = PED_STATE_RUNNING_TO_VEHICLE) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_PLAYING_REACTION_ANIM) ENDIF BREAK CASE PED_STATE_PLAYING_REACTION_ANIM IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 4, psFilmCrew[FCP_JACKEDGIRL].PedIndex, "FRA1MODEL1") CLEAR_PED_TASKS(psFilmCrew[FCP_JACKEDGIRL].PedIndex) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_PAUSE(NULL, 750) TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT(NULL, vsSpeedophiles[0].VehicleIndex) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "handsup_standing_base", WALK_BLEND_IN, WALK_BLEND_OUT, -1, AF_UPPERBODY | AF_LOOPING, 0, FALSE, AIK_DISABLE_ARM_IK) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, SequenceIndex) TASK_LOOK_AT_ENTITY(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV) CLEAR_SEQUENCE_TASK(SequenceIndex) STOP_SOUND(iPhotoShootSoundID) PLAY_PAIN(psFilmCrew[FCP_JACKEDGIRL].PedIndex, AUD_DAMAGE_REASON_SCREAM_TERROR) psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF IS_PED_SITTING_IN_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, vsSpeedophiles[0].VehicleIndex) IF IS_PED_SITTING_IN_VEHICLE_SEAT(psFilmCrew[FCP_JACKEDGIRL].PedIndex, vsSpeedophiles[0].VehicleIndex, VS_FRONT_RIGHT) IF GET_VEHICLE_PED_IS_ENTERING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[0].VehicleIndex OR GET_VEHICLE_PED_IS_ENTERING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[0].VehicleIndex GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_SITTING_IN_VEHICLE) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_SITTING_IN_VEHICLE IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_JACKEDGIRL].PedIndex) psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_GIRLJ") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_GIRLJ", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_GIRLJ", TRUE) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_JACKEDGIRL].PedIndex) SET_PED_DIES_IN_WATER(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FALSE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_USE_VEHICLE, FALSE) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) IF IS_PED_IN_ANY_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex) TASK_LEAVE_ANY_VEHICLE(NULL, GET_RANDOM_INT_IN_RANGE(250, 501), ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP) ENDIF TASK_SMART_FLEE_COORD(NULL, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) STOP_SOUND(iPhotoShootSoundID) PLAY_PAIN(psFilmCrew[FCP_JACKEDGIRL].PedIndex, AUD_DAMAGE_REASON_SCREAM_SCARED) g_bFranklin1GirlFled = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting g_bFranklin1GirlFled to TRUE.") #ENDIF psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF ( psFilmCrew[FCP_JACKEDGIRL].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_JACKEDGIRL], FALSE, FALSE, TRUE) ENDIF BREAK ENDSWITCH ELSE IF ( psFilmCrew[FCP_JACKEDGIRL].eCleanupReason = PED_CLEANUP_NO_CLEANUP ) psFilmCrew[FCP_JACKEDGIRL].eCleanupReason = GET_PED_CLEANUP_REASON(psFilmCrew[FCP_JACKEDGIRL].PedIndex #IF IS_DEBUG_BUILD, psFilmCrew[FCP_JACKEDGIRL].sDebugName #ENDIF) bFilmCrewAttacked = TRUE g_bFranklin1GirlFled = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting g_bFranklin1GirlFled to TRUE.") #ENDIF STOP_SOUND(iPhotoShootSoundID) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_GIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_GIRL].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_GIRL].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_GIRL].eState), 1.25) ENDIF #ENDIF psFilmCrew[FCP_GIRL].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_GIRL].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_GIRL].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF NOT IS_PED_IN_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_FLEEING) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_GIRL].eState CASE PED_STATE_PLAYING_BEGIN_ANIM IF ( psFilmCrew[FCP_GIRL].bHasTask = FALSE ) TASK_PLAY_ANIM(psFilmCrew[FCP_GIRL].PedIndex, "missfra1mcs_2_crew_react", "mcs2_f_jetski_idle02", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) psFilmCrew[FCP_GIRL].bHasTask = TRUE ENDIF IF ( psLamar.eState = PED_STATE_RUNNING_TO_VEHICLE) GO_TO_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_PLAYING_REACTION_ANIM) ENDIF BREAK CASE PED_STATE_PLAYING_REACTION_ANIM IF ( psFilmCrew[FCP_GIRL].bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) IF IS_PED_IN_ANY_VEHICLE(psFilmCrew[FCP_GIRL].PedIndex) TASK_LEAVE_ANY_VEHICLE(NULL, GET_RANDOM_INT_IN_RANGE(0, 251)) ENDIF TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLamar.PedIndex) TASK_LOOK_AT_ENTITY(NULL, psLamar.PedIndex, 100, SLF_USE_TORSO) TASK_CLEAR_LOOK_AT(NULL) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "handsup_standing_base", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), INFINITE_TASK_TIME) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_GIRL].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) STOP_SOUND(iPhotoShootSoundID) PLAY_PAIN(psFilmCrew[FCP_GIRL].PedIndex, AUD_DAMAGE_REASON_SCREAM_SCARED) psFilmCrew[FCP_GIRL].iTimer = GET_GAME_TIMER() psFilmCrew[FCP_GIRL].bHasTask = TRUE ENDIF IF HAS_TIME_PASSED(4000, psFilmCrew[FCP_GIRL].iTimer) GO_TO_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_FLEEING) ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_GIRL].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_GIRL].PedIndex) SET_PED_DIES_IN_WATER(psFilmCrew[FCP_GIRL].PedIndex, FALSE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_USE_VEHICLE, FALSE) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) IF IS_PED_IN_ANY_VEHICLE(psFilmCrew[FCP_GIRL].PedIndex) TASK_LEAVE_ANY_VEHICLE(NULL) ENDIF TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -164.81, -1837.12, -0.45 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) TASK_SMART_FLEE_COORD(NULL, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_GIRL].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) PLAY_PAIN(psFilmCrew[FCP_GIRL].PedIndex, AUD_DAMAGE_REASON_SCREAM_TERROR) psFilmCrew[FCP_GIRL].bHasTask = TRUE ENDIF IF ( psFilmCrew[FCP_GIRL].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_GIRL], FALSE, FALSE, TRUE) ENDIF BREAK ENDSWITCH ELSE IF ( psFilmCrew[FCP_GIRL].eCleanupReason = PED_CLEANUP_NO_CLEANUP ) psFilmCrew[FCP_GIRL].eCleanupReason = GET_PED_CLEANUP_REASON(psFilmCrew[FCP_GIRL].PedIndex #IF IS_DEBUG_BUILD, psFilmCrew[FCP_GIRL].sDebugName #ENDIF) bFilmCrewAttacked = TRUE ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_CAMERAMAN].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_CAMERAMAN].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_CAMERAMAN].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_CAMERAMAN].eState), 1.25) ENDIF #ENDIF psFilmCrew[FCP_CAMERAMAN].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_CAMERAMAN].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_CAMERAMAN].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF ( psFilmCrew[FCP_CAMERAMAN].eState <> PED_STATE_FLEEING ) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_CAMERAMAN], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_CAMERAMAN].eState CASE PED_STATE_PLAYING_BEGIN_ANIM IF ( psFilmCrew[FCP_CAMERAMAN].bHasTask = FALSE ) TASK_PLAY_ANIM_ADVANCED(psFilmCrew[FCP_CAMERAMAN].PedIndex, "missfra1", "mcs2_crew_idle_m_camera", vFilmCrewBeginAnimPosition, vFilmCrewBeginAnimRotation, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING | AF_EXTRACT_INITIAL_OFFSET) psFilmCrew[FCP_CAMERAMAN].bHasTask = TRUE ENDIF IF ( psLamar.eState = PED_STATE_RUNNING_TO_VEHICLE) GO_TO_PED_STATE(psFilmCrew[FCP_CAMERAMAN], PED_STATE_PLAYING_REACTION_ANIM) ENDIF BREAK CASE PED_STATE_PLAYING_REACTION_ANIM IF ( psFilmCrew[FCP_CAMERAMAN].bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "intro_m_camera", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "idle_m_camera", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), INFINITE_TASK_TIME) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_CAMERAMAN].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) psFilmCrew[FCP_CAMERAMAN].iTimer = 750 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() psFilmCrew[FCP_CAMERAMAN].bHasTask = TRUE ENDIF //detach camera prop IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) IF IS_ENTITY_ATTACHED(osCamera.ObjectIndex) IF IS_ENTITY_PLAYING_ANIM(psFilmCrew[FCP_CAMERAMAN].PedIndex, "missfra1mcs_2_crew_react", "intro_m_camera") IF GET_ENTITY_ANIM_CURRENT_TIME(psFilmCrew[FCP_CAMERAMAN].PedIndex, "missfra1mcs_2_crew_react", "intro_m_camera") > 0.5575 DETACH_ENTITY(osCamera.ObjectIndex, FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF IF HAS_TIME_PASSED(psFilmCrew[FCP_CAMERAMAN].iTimer, psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer) SWITCH GET_RANDOM_INT_IN_RANGE(0, 4) CASE 0 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_CAMERAMAN].PedIndex, "GENERIC_SHOCKED_MED", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_CAMERAMAN].iTimer = 5250 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 1 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_CAMERAMAN].PedIndex, "GENERIC_SHOCKED_HIGH", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_CAMERAMAN].iTimer = 5250 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 2 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_CAMERAMAN].PedIndex, "GENERIC_FRIGHTENED_MED", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_CAMERAMAN].iTimer = 5250 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 3 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_CAMERAMAN].PedIndex, "GENERIC_FRIGHTENED_HIGH", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_CAMERAMAN].iTimer = 5250 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 4 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_CAMERAMAN].PedIndex, "JACKED_GENERIC", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_CAMERAMAN].iTimer = 5250 psFilmCrew[FCP_CAMERAMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK ENDSWITCH ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_CAMERAMAN].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_CAMERAMAN].PedIndex) IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) IF IS_ENTITY_ATTACHED(osCamera.ObjectIndex) DETACH_ENTITY(osCamera.ObjectIndex, FALSE) ENDIF ENDIF ENDIF TASK_SMART_FLEE_COORD(psFilmCrew[FCP_CAMERAMAN].PedIndex, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CAMERAMAN].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CAMERAMAN].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CAMERAMAN].PedIndex, FA_USE_VEHICLE, FALSE) psFilmCrew[FCP_CAMERAMAN].bHasTask = TRUE ENDIF IF ( psFilmCrew[FCP_CAMERAMAN].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_CAMERAMAN], FALSE, FALSE, TRUE) ENDIF BREAK ENDSWITCH ELSE IF ( psFilmCrew[FCP_CAMERAMAN].eCleanupReason = PED_CLEANUP_NO_CLEANUP ) psFilmCrew[FCP_CAMERAMAN].eCleanupReason = GET_PED_CLEANUP_REASON(psFilmCrew[FCP_CAMERAMAN].PedIndex #IF IS_DEBUG_BUILD, psFilmCrew[FCP_CAMERAMAN].sDebugName #ENDIF) bFilmCrewAttacked = TRUE ENDIF ENDIF IF IS_PED_DEAD_OR_DYING(psFilmCrew[FCP_CAMERAMAN].PedIndex) IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) IF IS_ENTITY_ATTACHED(osCamera.ObjectIndex) DETACH_ENTITY(osCamera.ObjectIndex, FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_BOOMMAN].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_BOOMMAN].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_BOOMMAN].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_BOOMMAN].eState), 1.25) ENDIF #ENDIF psFilmCrew[FCP_BOOMMAN].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_BOOMMAN].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_BOOMMAN].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF ( psFilmCrew[FCP_BOOMMAN].eState <> PED_STATE_FLEEING ) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_BOOMMAN], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_BOOMMAN].eState CASE PED_STATE_PLAYING_BEGIN_ANIM IF ( psFilmCrew[FCP_BOOMMAN].bHasTask = FALSE ) TASK_PLAY_ANIM_ADVANCED(psFilmCrew[FCP_BOOMMAN].PedIndex, "missfra1", "mcs2_crew_idle_m_boom", vFilmCrewBeginAnimPosition, vFilmCrewBeginAnimRotation, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING | AF_EXTRACT_INITIAL_OFFSET) psFilmCrew[FCP_BOOMMAN].bHasTask = TRUE ENDIF IF ( psLamar.eState = PED_STATE_RUNNING_TO_VEHICLE) GO_TO_PED_STATE(psFilmCrew[FCP_BOOMMAN], PED_STATE_PLAYING_REACTION_ANIM) ENDIF BREAK CASE PED_STATE_PLAYING_REACTION_ANIM IF ( psFilmCrew[FCP_BOOMMAN].bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex CLEAR_SEQUENCE_TASK(SequenceIndex) OPEN_SEQUENCE_TASK(SequenceIndex) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "intro_m_boom", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1) TASK_PLAY_ANIM(NULL, "missfra1mcs_2_crew_react", "idle_m_boom", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), INFINITE_TASK_TIME) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(psFilmCrew[FCP_BOOMMAN].PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) psFilmCrew[FCP_BOOMMAN].iTimer = 500 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() psFilmCrew[FCP_BOOMMAN].bHasTask = TRUE ENDIF IF HAS_TIME_PASSED(psFilmCrew[FCP_BOOMMAN].iTimer, psFilmCrew[FCP_BOOMMAN].iPedConversationTimer) SWITCH GET_RANDOM_INT_IN_RANGE(0, 4) CASE 0 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_BOOMMAN].PedIndex, "GENERIC_SHOCKED_MED", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_BOOMMAN].iTimer = 7000 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 1 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_BOOMMAN].PedIndex, "GENERIC_SHOCKED_HIGH", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_BOOMMAN].iTimer = 7000 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 2 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_BOOMMAN].PedIndex, "GENERIC_CURSE_MED", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_BOOMMAN].iTimer = 7000 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 3 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_BOOMMAN].PedIndex, "GENERIC_CURSE_HIGH", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_BOOMMAN].iTimer = 7000 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK CASE 4 PLAY_PED_AMBIENT_SPEECH(psFilmCrew[FCP_BOOMMAN].PedIndex, "JACKED_GENERIC", SPEECH_PARAMS_FORCE) psFilmCrew[FCP_BOOMMAN].iTimer = 7000 psFilmCrew[FCP_BOOMMAN].iPedConversationTimer = GET_GAME_TIMER() BREAK ENDSWITCH ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_BOOMMAN].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_BOOMMAN].PedIndex) IF DOES_ENTITY_EXIST(osMicrophone.ObjectIndex) IF NOT IS_ENTITY_DEAD(osMicrophone.ObjectIndex) IF IS_ENTITY_ATTACHED(osMicrophone.ObjectIndex) DETACH_ENTITY(osMicrophone.ObjectIndex, FALSE) ENDIF ENDIF ENDIF TASK_SMART_FLEE_COORD(psFilmCrew[FCP_BOOMMAN].PedIndex, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_BOOMMAN].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_BOOMMAN].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_BOOMMAN].PedIndex, FA_USE_VEHICLE, FALSE) psFilmCrew[FCP_BOOMMAN].bHasTask = TRUE ENDIF IF ( psFilmCrew[FCP_BOOMMAN].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_BOOMMAN], FALSE, FALSE, TRUE) ENDIF BREAK ENDSWITCH ELSE IF ( psFilmCrew[FCP_BOOMMAN].eCleanupReason = PED_CLEANUP_NO_CLEANUP ) psFilmCrew[FCP_BOOMMAN].eCleanupReason = GET_PED_CLEANUP_REASON(psFilmCrew[FCP_BOOMMAN].PedIndex #IF IS_DEBUG_BUILD, psFilmCrew[FCP_BOOMMAN].sDebugName #ENDIF) bFilmCrewAttacked = TRUE ENDIF ENDIF IF IS_PED_DEAD_OR_DYING(psFilmCrew[FCP_BOOMMAN].PedIndex) IF DOES_ENTITY_EXIST(osMicrophone.ObjectIndex) IF NOT IS_ENTITY_DEAD(osMicrophone.ObjectIndex) IF IS_ENTITY_ATTACHED(osMicrophone.ObjectIndex) DETACH_ENTITY(osMicrophone.ObjectIndex, FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(osBoombox.ObjectIndex) IF NOT IS_ENTITY_DEAD(osBoombox.ObjectIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(osBoombox.ObjectIndex, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) SET_ENTITY_HEALTH(osBoombox.ObjectIndex, 0) ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FILM_CREW_PEDS_AFTER_JACK() IF DOES_ENTITY_EXIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_JACKEDGIRL].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_JACKEDGIRL].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_JACKEDGIRL].eState), 1.25) ENDIF psFilmCrew[FCP_JACKEDGIRL].sDebugName = "FCP_JACKEDGIRL" #ENDIF psFilmCrew[FCP_JACKEDGIRL].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_JACKEDGIRL].PedIndex, PLAYER_PED_ID()) SWITCH psFilmCrew[FCP_JACKEDGIRL].eState CASE PED_STATE_SITTING_IN_VEHICLE IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) SET_ENTITY_IS_TARGET_PRIORITY(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FALSE) SET_PED_DIES_IN_WATER(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FALSE) REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 4) psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF ( bJackedGirlConversationFinished = TRUE ) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(psFilmCrew[FCP_JACKEDGIRL].PedIndex, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF IF DOES_ENTITY_EXIST(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) PED_INDEX DriverPedIndex DriverPedIndex = GET_PED_IN_VEHICLE_SEAT(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) IF DOES_ENTITY_EXIST(DriverPedIndex) //check for seashark driver being present AND NOT IS_ENTITY_DEAD(DriverPedIndex) //check for seashark driver leaving IF NOT IS_PED_SITTING_IN_VEHICLE_SEAT(DriverPedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF ELSE GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF IF NOT IS_PED_IN_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF IF IS_PED_IN_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) IF ( DOES_ENTITY_EXIST(esLeftChaseEnemies[0].PedIndex) AND NOT IS_ENTITY_DEAD(esLeftChaseEnemies[0].PedIndex) AND IS_PED_SHOOTING(esLeftChaseEnemies[0].PedIndex) ) OR ( DOES_ENTITY_EXIST(esLeftChaseEnemies[1].PedIndex) AND NOT IS_ENTITY_DEAD(esLeftChaseEnemies[1].PedIndex) AND IS_PED_SHOOTING(esLeftChaseEnemies[1].PedIndex) ) PLAY_PAIN(psFilmCrew[FCP_JACKEDGIRL].PedIndex, AUD_DAMAGE_REASON_SCREAM_SCARED) ENDIF IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime > 37500) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF ENDIF ELSE GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_EXITING_VEHICLE) ENDIF ENDIF BREAK CASE PED_STATE_EXITING_VEHICLE IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) IF IS_PED_IN_ANY_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex) IF IS_PED_STOPPED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) TASK_LEAVE_ANY_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, 0, ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP) ELSE TASK_LEAVE_ANY_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, 0, ECF_JUMP_OUT | ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP) ENDIF ENDIF STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_GIRL_JUMP") PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, "SCREAM_PANIC", "WAVELOAD_PAIN_FEMALE", SPEECH_PARAMS_FORCE_FRONTEND) iJackedGirlAmbientSpeechDelay = GET_GAME_TIMER() psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF IF ( GET_SCRIPT_TASK_STATUS(psFilmCrew[FCP_JACKEDGIRL].PedIndex, SCRIPT_TASK_LEAVE_VEHICLE) = FINISHED_TASK ) IF NOT IS_PED_RAGDOLL(psFilmCrew[FCP_JACKEDGIRL].PedIndex) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_FLEEING) ENDIF ENDIF BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_JACKEDGIRL].bHasTask = FALSE ) STOP_PED_SPEAKING(psFilmCrew[FCP_JACKEDGIRL].PedIndex, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_USE_VEHICLE, FALSE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_JACKEDGIRL].PedIndex, FA_DISABLE_HANDS_UP, TRUE) TASK_SMART_FLEE_PED(psFilmCrew[FCP_JACKEDGIRL].PedIndex, GET_PED_INDEX(CHAR_TREVOR), 300, -1) psFilmCrew[FCP_JACKEDGIRL].bHasTask = TRUE ENDIF BREAK ENDSWITCH IF NOT IS_PED_IN_ANY_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex) IF ( psFilmCrew[FCP_JACKEDGIRL].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_JACKEDGIRL], FALSE, FALSE, TRUE) ENDIF ENDIF ELSE STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_GIRL_JUMP") ENDIF CLEANUP_PED(psFilmCrew[FCP_JACKEDGIRL], FALSE, TRUE) ELSE STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_GIRL_JUMP") ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_GIRL].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_GIRL].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_GIRL].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_GIRL].eState), 1.25) ENDIF psFilmCrew[FCP_GIRL].sDebugName = "FCP_GIRL" #ENDIF psFilmCrew[FCP_GIRL].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_GIRL].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_GIRL].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF NOT IS_PED_IN_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_FLEEING) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_GIRL], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_GIRL].eState CASE PED_STATE_PLAYING_REACTION_ANIM CASE PED_STATE_PLAYING_END_ANIM //task? BREAK CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_GIRL].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_GIRL].PedIndex) TASK_SMART_FLEE_COORD(psFilmCrew[FCP_GIRL].PedIndex, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_GIRL].PedIndex, FA_USE_VEHICLE, FALSE) psFilmCrew[FCP_GIRL].bHasTask = TRUE ENDIF BREAK ENDSWITCH IF ( psFilmCrew[FCP_GIRL].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_GIRL], FALSE, FALSE, TRUE) ENDIF ENDIF CLEANUP_PED(psFilmCrew[FCP_GIRL], FALSE, TRUE) ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_CLAY].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_CLAY].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_CLAY].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_CLAY].eState), 1.25) ENDIF psFilmCrew[FCP_CLAY].sDebugName = "FCP_CLAY" #ENDIF psFilmCrew[FCP_CLAY].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_CLAY].PedIndex, PLAYER_PED_ID()) IF ( bFilmCrewAttacked = FALSE ) IF HAS_PED_BEEN_DAMAGED_OR_SHOT_AT(psFilmCrew[FCP_CLAY].PedIndex) bFilmCrewAttacked = TRUE ENDIF ENDIF IF NOT IS_PED_IN_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_FLEEING) IF IS_FILMCREW_SCARED() GO_TO_PED_STATE(psFilmCrew[FCP_CLAY], PED_STATE_FLEEING) ENDIF ENDIF SWITCH psFilmCrew[FCP_CLAY].eState CASE PED_STATE_FLEEING IF ( psFilmCrew[FCP_CLAY].bHasTask = FALSE ) CLEAR_PED_TASKS(psFilmCrew[FCP_CLAY].PedIndex) TASK_SMART_FLEE_COORD(psFilmCrew[FCP_CLAY].PedIndex, vFilmCrewBeginAnimPosition, 300.0, INFINITE_TASK_TIME) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_CAN_SCREAM, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_DISABLE_HANDS_UP, TRUE) SET_PED_FLEE_ATTRIBUTES(psFilmCrew[FCP_CLAY].PedIndex, FA_USE_VEHICLE, FALSE) psFilmCrew[FCP_CLAY].bHasTask = TRUE ENDIF BREAK ENDSWITCH IF ( psFilmCrew[FCP_CLAY].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_CLAY], FALSE, FALSE, TRUE) ENDIF ENDIF IF IS_ENTITY_DEAD(psFilmCrew[FCP_CLAY].PedIndex) IF NOT IS_REPEAT_PLAY_ACTIVE() SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MISSION_FRANK1_MC_CLIPPED, TRUE) ENDIF ENDIF CLEANUP_PED(psFilmCrew[FCP_CLAY], FALSE, TRUE) ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_CAMERAMAN].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_CAMERAMAN].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_CAMERAMAN].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_CAMERAMAN].eState), 1.25) ENDIF psFilmCrew[FCP_CAMERAMAN].sDebugName = "FCP_CAMERAMAN" #ENDIF psFilmCrew[FCP_CAMERAMAN].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_CAMERAMAN].PedIndex, PLAYER_PED_ID()) SWITCH psFilmCrew[FCP_CAMERAMAN].eState CASE PED_STATE_FLEEING BREAK ENDSWITCH IF ( psFilmCrew[FCP_CAMERAMAN].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_CAMERAMAN], FALSE, FALSE, TRUE) CLEANUP_MISSION_OBJECT(osCamera, FALSE) ENDIF ELSE CLEANUP_MISSION_OBJECT(osCamera, FALSE) ENDIF CLEANUP_PED(psFilmCrew[FCP_CAMERAMAN], FALSE, TRUE) ENDIF IF DOES_ENTITY_EXIST(psFilmCrew[FCP_BOOMMAN].PedIndex) IF NOT IS_ENTITY_DEAD(psFilmCrew[FCP_BOOMMAN].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psFilmCrew[FCP_BOOMMAN].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psFilmCrew[FCP_BOOMMAN].eState), 1.25) ENDIF psFilmCrew[FCP_BOOMMAN].sDebugName = "FCP_BOOMMAN" #ENDIF psFilmCrew[FCP_BOOMMAN].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(psFilmCrew[FCP_BOOMMAN].PedIndex, PLAYER_PED_ID()) SWITCH psFilmCrew[FCP_BOOMMAN].eState CASE PED_STATE_FLEEING BREAK ENDSWITCH IF ( psFilmCrew[FCP_BOOMMAN].fDistanceToTargetPed > 125 ) CLEANUP_PED(psFilmCrew[FCP_BOOMMAN], FALSE, FALSE, TRUE) CLEANUP_MISSION_OBJECT(osMicrophone, FALSE) ENDIF ELSE CLEANUP_MISSION_OBJECT(osMicrophone, FALSE) ENDIF CLEANUP_PED(psFilmCrew[FCP_BOOMMAN], FALSE, TRUE) ENDIF IF DOES_ENTITY_EXIST(osBoombox.ObjectIndex) IF NOT IS_ENTITY_DEAD(osBoombox.ObjectIndex) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(osBoombox.ObjectIndex, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) SET_ENTITY_HEALTH(osBoombox.ObjectIndex, 0) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) OR DOES_ENTITY_EXIST(osBoombox.ObjectIndex) OR DOES_ENTITY_EXIST(osMicrophone.ObjectIndex) IF (vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime > 15000.0) SET_OBJECT_AS_NO_LONGER_NEEDED(osCamera.ObjectIndex) SET_OBJECT_AS_NO_LONGER_NEEDED(osBoombox.ObjectIndex) SET_OBJECT_AS_NO_LONGER_NEEDED(osMicrophone.ObjectIndex) ENDIF ENDIF ENDPROC PROC MANAGE_HOUSE_ENEMY(INT &iProgress) SWITCH iProgress CASE 0 //check if any player ped or buddy ped reached the locate to trigger the enemy IF IS_ANY_PED_IN_ANGLED_AREA_LOCATE(psLamar.PedIndex, GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), <<14.236324,-1913.274292,20.469467>>, <<70.221039,-1849.264526,24.780987>>, 12.0) iProgress++ ENDIF BREAK CASE 1 //create enemy ped esHouseEnemies[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << 21.69, -1898.34, 21.96 >>, 313.9330, rgEnemies, WEAPONTYPE_ASSAULTRIFLE, 150) INITIALISE_ENEMY_GROUP(esHouseEnemies, FALSE /*TRUE*/ #IF IS_DEBUG_BUILD, "House " #ENDIF) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT(esHouseEnemies[0].PedIndex, << 28.59, -1889.94, 21.48 >>, PEDMOVE_RUN, FALSE, << 66.79, -1885.01, 22.46 >>, GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(esHouseEnemies[0].PedIndex, RELGROUPHASH_PLAYER), FALSE, TRUE, 0.25, 0.25, FALSE) SET_PED_COMBAT_PROPERTIES(esHouseEnemies[0].PedIndex, CM_WILLADVANCE, CAL_PROFESSIONAL, CR_NEAR, CA_AGGRESSIVE, TRUE) SET_PED_DEFENSIVE_AREA_ANGLED(esHouseEnemies[0].PedIndex, <<24.075012,-1891.493652,20.611982>>, <<42.587761,-1869.529053,24.835415>>, 14.0, FALSE) SET_PED_SHOOTING_PROPERTIES(esHouseEnemies[0].PedIndex, 5, 80, FIRING_PATTERN_FULL_AUTO) iProgress++ BREAK CASE 2 SET_DOOR_STATE(DOORNAME_FRANK1_HOUSE_DOOR, DOORSTATE_FORCE_UNLOCKED_THIS_FRAME) IF DOES_ENTITY_EXIST(esHouseEnemies[0].PedIndex) IF NOT IS_ENTITY_DEAD(esHouseEnemies[0].PedIndex) IF NOT IS_ENTITY_IN_ANGLED_AREA(esHouseEnemies[0].PedIndex, <<21.022642,-1899.346313,21.970083>>, <<23.630833,-1896.150146,24.471025>>, 2.500000) iProgress++ ENDIF ENDIF ELSE iProgress++ ENDIF BREAK ENDSWITCH IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<22.705662,-1897.290283,21.970083>>, <<21.018452,-1899.358032,24.470083>>, 2.500000) SET_DOOR_STATE(DOORNAME_FRANK1_HOUSE_DOOR, DOORSTATE_FORCE_UNLOCKED_THIS_FRAME) ENDIF //IF ( Events[EVENT_ENEMIES_HOUSE_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esHouseEnemies, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esHouseEnemies, Events[EVENT_ENEMIES_HOUSE_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_HOUSE_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esHouseEnemies, bRenderEnemyBlips) ENDPROC PROC MANAGE_CAR_PULLING_OUT(INT &iProgress) FLOAT fPlaybackPercentage SWITCH iProgress CASE 0 //create car REQUEST_MODEL(vsEnemyCars[CAR_DRIVEWAY].ModelName) IF HAS_MODEL_LOADED(vsEnemyCars[CAR_DRIVEWAY].ModelName) vsEnemyCars[CAR_DRIVEWAY].VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyCars[CAR_DRIVEWAY], 2000, TRUE, VEHICLELOCK_UNLOCKED, 0, 113) SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyCars[CAR_DRIVEWAY].ModelName) iProgress++ ENDIF BREAK CASE 1 IF IS_ANY_FRIENDLY_IN_ANGLED_AREA_LOCATE(tbParkedCar) iProgress++ ENDIF BREAK CASE 2 //start recording REQUEST_VEHICLE_RECORDING(vsEnemyCars[CAR_DRIVEWAY].iRecordingNumber, sVehicleRecordingsFile) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyCars[CAR_DRIVEWAY].iRecordingNumber, sVehicleRecordingsFile) esCarDriveway[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_PISTOL, 125) esCarDriveway[1].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, VS_BACK_RIGHT, rgEnemies, WEAPONTYPE_MICROSMG, 150) INITIALISE_ENEMY_GROUP(esCarDriveway, FALSE /*TRUE*/ #IF IS_DEBUG_BUILD, "ParkedCar " #ENDIF) IF NOT IS_PED_INJURED(esCarDriveway[0].PedIndex) SET_PED_PLAYS_HEAD_ON_HORN_ANIM_WHEN_DIES_IN_VEHICLE(esCarDriveway[0].PedIndex, TRUE) ENDIF START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsEnemyCars[CAR_DRIVEWAY], sVehicleRecordingsFile, 1.15, FALSE, 250) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, TRUE) START_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_CRASH") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, "FRANKLIN_1_SHOOTOUT_CAR_CRASH_Group") ENDIF iProgress++ ENDIF BREAK CASE 3 #IF IS_DEBUG_BUILD DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, 1.0) #ENDIF IF IS_VEHICLE_RECORDING_PLAYBACK_RUNNING_OR_DRIVER_DEAD(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, fPlaybackPercentage, vsEnemyCars[CAR_DRIVEWAY].bDriverDead) IF ( fPlaybackPercentage > 80.0 ) OR ( vsEnemyCars[CAR_DRIVEWAY].bDriverDead = TRUE ) IF NOT IS_PED_INJURED(esCarDriveway[0].PedIndex) SET_PED_PLAYS_HEAD_ON_HORN_ANIM_WHEN_DIES_IN_VEHICLE(esCarDriveway[0].PedIndex, TRUE) SET_ENTITY_HEALTH(esCarDriveway[0].PedIndex, 0) vsEnemyCars[CAR_DRIVEWAY].bDriverDead = TRUE ENDIF STOP_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsEnemyCars[CAR_DRIVEWAY].iRecordingNumber, sVehicleRecordingsFile) COMBAT_SEQUENCE_GO_TO_COMBAT(esCarDriveway[1].PedIndex) SET_PED_COMBAT_PROPERTIES(esCarDriveway[1].PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_INVALID) SET_PED_DEFENSIVE_AREA_SPHERE(esCarDriveway[1].PedIndex, << 28.82, -1882.00, 21.59 >>, 3.0) SET_PED_SHOOTING_PROPERTIES(esCarDriveway[1].PedIndex, 5, 60) SET_HORN_PERMANENTLY_ON_TIME(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, 10000) SET_VEHICLE_ENGINE_HEALTH(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, 50.0) STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_CRASH") REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex) iProgress++ ENDIF ENDIF BREAK ENDSWITCH RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, SC_WHEEL_CAR_FRONT_LEFT, <<-0.85, 1.55, -0.15>>, 1.0, FALSE, TRUE, <<-0.85, 2.15, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT, <<0.85, 1.55, -0.15>>, 1.0, FALSE, TRUE, <<1.0, 0.95, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, SC_WHEEL_CAR_REAR_LEFT, <<-0.8500, -1.5500, -0.1500>>, 1.0, FALSE, TRUE, <<-1.0000, -2.1000, 0.1500>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_DRIVEWAY].VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT, <<0.8500, -1.5500, -0.1500>> , 1.0, FALSE, TRUE, <<0.9500, -2.1500, 0.1500>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) //IF ( Events[EVENT_ENEMIES_CARPARKED_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esCarDriveway, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esCarDriveway, Events[EVENT_ENEMIES_CARPARKED_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_CARPARKED_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarDriveway, bRenderEnemyBlips) ENDPROC PROC MANAGE_FIRST_ENEMY_WAVE(BOOL &bCurrentEnemyWaveSpawned, BOOL &bInitialEnemyGroupInitialised) IF ( bCurrentEnemyWaveSpawned = FALSE ) REQUEST_MODEL(mnBalla) REQUEST_MODEL(vsEnemyCars[CAR_CULDESAC].ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyCars[CAR_CULDESAC].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(mnBalla) AND HAS_MODEL_LOADED(vsEnemyCars[CAR_CULDESAC].ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyCars[CAR_CULDESAC].iRecordingNumber, sVehicleRecordingsFile) IF NOT DOES_ENTITY_EXIST(esGroup1[0].PedIndex) esGroup1[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<73.5813, -1944.3768, 19.8115>>, 304.0889, rgEnemies, WEAPONTYPE_MICROSMG, 125) ENDIF IF NOT DOES_ENTITY_EXIST(esGroup1[1].PedIndex) esGroup1[1].PedIndex = CREATE_ENEMY_PED(mnBalla, <<81.7639, -1904.2952, 20.5794>>, 142.1008, rgEnemies, WEAPONTYPE_MICROSMG, 125) ENDIF IF NOT DOES_ENTITY_EXIST(esGroup1[2].PedIndex) esGroup1[2].PedIndex = CREATE_ENEMY_PED(mnBalla, <<79.4749, -1908.1135, 20.3492>>, 169.8566, rgEnemies, WEAPONTYPE_MICROSMG, 125) ENDIF IF ( bInitialEnemyGroupInitialised = FALSE ) INITIALISE_ENEMY_GROUP(esGroup1, FALSE #IF IS_DEBUG_BUILD, "Group1 " #ENDIF) bInitialEnemyGroupInitialised = TRUE ENDIF //unblock enemy events IF ( bFirstEnemyGroupInCombat = FALSE ) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT(esGroup1[0].PedIndex, << 81.91, -1942.41, 19.85 >>, PEDMOVE_RUN, FALSE, vGroup1EnemyAimCoords, NULL, TRUE) ENDIF SET_PED_COMBAT_PROPERTIES(esGroup1[0].PedIndex, CM_STATIONARY, CAL_AVERAGE, CR_MEDIUM, CA_AGGRESSIVE) SET_PED_SHOOTING_PROPERTIES(esGroup1[0].PedIndex, 3, 60, FIRING_PATTERN_FULL_AUTO) IF DOES_ENTITY_EXIST(esGroup1[1].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[1].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[1].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[1].PedIndex, << 89.92, -1918.83, 19.63 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[1].PedIndex, 0.0, 0.5) SET_PED_SHOOTING_PROPERTIES(esGroup1[1].PedIndex, 3, 125, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.5) SET_COMBAT_FLOAT(esGroup1[1].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, FALSE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[1].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[1].PedIndex, FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(esGroup1[2].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[2].PedIndex) SET_PED_COMBAT_MOVEMENT(esGroup1[2].PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup1[2].PedIndex, << 86.32, -1918.05, 19.69 >>, 3.0) SET_PED_CHANCE_OF_FIRING_BLANKS(esGroup1[2].PedIndex, 0.0, 0.5) SET_PED_SHOOTING_PROPERTIES(esGroup1[2].PedIndex, 3, 125, FIRING_PATTERN_FULL_AUTO) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MAX_SHOOTING_DISTANCE, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_MIN_DISTANCE_TO_TARGET, 100.0) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.5) SET_COMBAT_FLOAT(esGroup1[2].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_CAN_SHOOT_WITHOUT_LOS, FALSE) SET_PED_COMBAT_ATTRIBUTES(esGroup1[2].PedIndex, CA_REQUIRES_LOS_TO_SHOOT, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup1[2].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup1[2].PedIndex, FALSE) ENDIF ENDIF esGroup2[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<80.4945, -1897.3193, 21.0409>>, 146.6319, rgEnemies, WEAPONTYPE_PISTOL, 150) //round the intersection INITIALISE_ENEMY_GROUP(esGroup2, FALSE #IF IS_DEBUG_BUILD, "Group2 " #ENDIF) SET_PED_COMBAT_PROPERTIES(esGroup2[0].PedIndex, CM_WILLADVANCE, CAL_POOR, CR_MEDIUM, CA_AGGRESSIVE) SET_PED_SHOOTING_PROPERTIES(esGroup2[0].PedIndex, 5, 40, FIRING_PATTERN_BURST_FIRE) COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT(esGroup2[0].PedIndex, <<85.9064, -1929.0186, 19.6911>>, PEDMOVE_RUN, TRUE, <<85.9064, -1929.0186, 19.6911>>, NULL, TRUE, TRUE, 4.0) vsEnemyCars[CAR_CULDESAC].VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyCars[CAR_CULDESAC], 1500, TRUE, VEHICLELOCK_UNLOCKED, 0, 0 #IF IS_DEBUG_BUILD, "Car0" #ENDIF) esCarCuldeSacLeft[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_CULDESAC].VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_MICROSMG) INITIALISE_ENEMY_GROUP(esCarCuldeSacLeft, FALSE #IF IS_DEBUG_BUILD, "Car1Left " #ENDIF) esCarCuldeSacRight[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_CULDESAC].VehicleIndex, VS_FRONT_RIGHT, rgEnemies, WEAPONTYPE_MICROSMG, 115) INITIALISE_ENEMY_GROUP(esCarCuldeSacRight, FALSE #IF IS_DEBUG_BUILD, "Car1Right " #ENDIF) esCarCuldeSacRight[0].bHasTask = FALSE esCarCuldeSacRight[0].iProgress = 0 SET_PED_SHOOTING_PROPERTIES(esCarCuldeSacLeft[0].PedIndex, 5, 40, FIRING_PATTERN_BURST_FIRE) SET_PED_SHOOTING_PROPERTIES(esCarCuldeSacRight[0].PedIndex, 5, 40, FIRING_PATTERN_BURST_FIRE) SET_VEHICLE_ENGINE_ON(vsEnemyCars[CAR_CULDESAC].VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyCars[CAR_CULDESAC].VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex, vsEnemyCars[CAR_CULDESAC].iRecordingNumber, sVehicleRecordingsFile) SET_PLAYBACK_SPEED(vsEnemyCars[CAR_CULDESAC].VehicleIndex, 1.15) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyCars[CAR_CULDESAC].VehicleIndex, "FRANKLIN_1_SHOOTOUT_CAR_01_Group") START_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyCars[CAR_CULDESAC].ModelName) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 1st enemy wave spawned.") #ENDIF bCurrentEnemyWaveSpawned = TRUE ENDIF ELSE //update enemy peds IF DOES_ENTITY_EXIST(esGroup1[0].PedIndex) IF NOT IS_ENTITY_DEAD(esGroup1[0].PedIndex) IF NOT IS_AMBIENT_SPEECH_PLAYING(esGroup1[0].PedIndex) PLAY_PED_AMBIENT_SPEECH(esGroup1[0].PedIndex, "GENERIC_WAR_CRY", SPEECH_PARAMS_FORCE_SHOUTED_CLEAR) ENDIF IF HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(esGroup1[0].PedIndex) SET_ENTITY_HEALTH(esGroup1[0].PedIndex, 0) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(esCarCuldeSacRight[0].PedIndex) IF NOT IS_ENTITY_DEAD(esCarCuldeSacRight[0].PedIndex) SWITCH esCarCuldeSacRight[0].iProgress CASE 0 IF ( esCarCuldeSacRight[0].bHasTask = FALSE ) IF NOT IS_ENTITY_DEAD(vsVan.VehicleIndex) TASK_DRIVE_BY(esCarCuldeSacRight[0].PedIndex, NULL, vsVan.VehicleIndex, << 0.0, 0.0, 0.0 >>, 200.0, 75, TRUE) ENDIF esCarCuldeSacRight[0].bHasTask = TRUE ENDIF IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_CULDESAC].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) IF ( GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) > 95.0 ) //STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_CULDESAC].VehicleIndex) ENDIF esCarCuldeSacRight[0].bHasTask = FALSE esCarCuldeSacRight[0].iProgress++ ENDIF ENDIF ENDIF BREAK CASE 1 IF ( esCarCuldeSacRight[0].bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COMBAT(esCarCuldeSacRight[0].PedIndex, 100, PLAYER_PED_ID()) SET_PED_SHOOTING_PROPERTIES(esCarCuldeSacRight[0].PedIndex, 5, 50) esCarCuldeSacRight[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_CULDESAC].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) IF ( GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) > 96.0 ) IF ( esCarCuldeSacLeft[0].bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COMBAT(esCarCuldeSacLeft[0].PedIndex, 100.0, PLAYER_PED_ID()) SET_PED_COVER_PROPERTIES(esCarCuldeSacLeft[0].PedIndex, TRUE, FALSE, FALSE, FALSE, 10.0, FALSE, 0.0, 1.0, 5.0) SET_PED_SHOOTING_PROPERTIES(esCarCuldeSacLeft[0].PedIndex, 5, 95) esCarCuldeSacLeft[0].bHasTask = TRUE ENDIF STOP_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_CULDESAC].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsEnemyCars[CAR_CULDESAC].iRecordingNumber, sVehicleRecordingsFile) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_CULDESAC].VehicleIndex) //STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") ENDIF ENDIF ENDIF //IF ( Events[EVENT_ENEMIES_GROUP1_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup1, FALSE, TRUE, FALSE) //ENDIF //IF ( Events[EVENT_ENEMIES_GROUP2_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup2, FALSE, TRUE, FALSE) //ENDIF //IF ( Events[EVENT_ENEMIES_CARCULDESACLEFT_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esCarCuldeSacLeft, FALSE, TRUE, FALSE) //ENDIF //IF ( Events[EVENT_ENEMIES_CARCULDESACRIGHT_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esCarCuldeSacRight, FALSE, TRUE, FALSE) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esGroup1, Events[EVENT_ENEMIES_GROUP1_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP1_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esGroup2, Events[EVENT_ENEMIES_GROUP2_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP2_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esCarCuldeSacLeft, Events[EVENT_ENEMIES_CARCULDESACLEFT_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_CARCULDESACLEFT_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esCarCuldeSacRight, Events[EVENT_ENEMIES_CARCULDESACRIGHT_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_CARCULDESACRIGHT_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup1, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup2, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarCuldeSacLeft, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarCuldeSacRight, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_SECOND_ENEMY_WAVE(BOOL &bCurrentEnemyWaveSpawned, BOOL bPreviousEnemyWaveSpawned) //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF ( bCurrentEnemyWaveSpawned = FALSE ) IF ( bPreviousEnemyWaveSpawned = TRUE ) IF SHOULD_SPAWN_WAVE_2() //create peds esGroup3[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << 50.75, -1912.24, 20.63 >>, 283.2224, rgEnemies, WEAPONTYPE_PISTOL, 150) esGroup3[1].PedIndex = CREATE_ENEMY_PED(mnBalla, << 38.82, -1911.66, 20.95 >>, 311.4131, rgEnemies, WEAPONTYPE_MICROSMG) esGroup3[2].PedIndex = CREATE_ENEMY_PED(mnBalla, << 46.45, -1913.46, 20.64 >>, 310.4631, rgEnemies, WEAPONTYPE_PISTOL, 125) INITIALISE_ENEMY_GROUP(esGroup3, FALSE #IF IS_DEBUG_BUILD, "Group3 " #ENDIF) esGroup4[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << 86.95, -1882.96, 22.22 >>, 187.3570, rgEnemies, WEAPONTYPE_MICROSMG, 125) esGroup4[1].PedIndex = CREATE_ENEMY_PED(mnBalla, << 81.71, -1894.12, 21.29 >>, 187.5137, rgEnemies, WEAPONTYPE_MICROSMG, 150) INITIALISE_ENEMY_GROUP(esGroup4, FALSE #IF IS_DEBUG_BUILD, "Group4 " #ENDIF) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup3, 5, 80) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup4, 5, 80) SET_PED_COMBAT_PROPERTIES(esGroup4[0].PedIndex, CM_DEFENSIVE, CAL_AVERAGE, CR_MEDIUM, CA_USE_COVER) SET_PED_DEFENSIVE_AREA_ANGLED(esGroup4[0].PedIndex, <<71.759903,-1899.529053,19.466902>>, <<83.361237,-1909.626587,23.124557>>, 8.0) SET_PED_COMBAT_PROPERTIES(esGroup4[1].PedIndex, CM_DEFENSIVE, CAL_AVERAGE, CR_MEDIUM, CA_USE_COVER) SET_PED_DEFENSIVE_AREA_ANGLED(esGroup4[1].PedIndex, <<71.759903,-1899.529053,19.466902>>, <<83.361237,-1909.626587,23.124557>>, 8.0) TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup3) TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup4) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 2nd enemy wave spawned.") #ENDIF bCurrentEnemyWaveSpawned = TRUE ENDIF ENDIF ELSE //update enemy peds //IF ( Events[EVENT_ENEMIES_GROUP3_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup3, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF //IF ( Events[EVENT_ENEMIES_GROUP4_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup4, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esGroup3, Events[EVENT_ENEMIES_GROUP3_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP3_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esGroup4, Events[EVENT_ENEMIES_GROUP4_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP4_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup3, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup4, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_ENEMY_CARS_AT_INTERSECTION() IF NOT Events[EVENT_ENEMY_WAVE_CARINTERSECTION_SPAWNED] IF SHOULD_SPAWN_INTERSECTION_CARS() REQUEST_MODEL(vsEnemyCars[CAR_INTERSECTION1].ModelName) REQUEST_MODEL(vsEnemyCars[CAR_INTERSECTION2].ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyCars[CAR_INTERSECTION1].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsEnemyCars[CAR_INTERSECTION2].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(vsEnemyCars[CAR_INTERSECTION1].ModelName) AND HAS_MODEL_LOADED(vsEnemyCars[CAR_INTERSECTION2].ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyCars[CAR_INTERSECTION1].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyCars[CAR_INTERSECTION2].iRecordingNumber, sVehicleRecordingsFile) vsEnemyCars[CAR_INTERSECTION1].VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyCars[CAR_INTERSECTION1], 1500, TRUE, VEHICLELOCK_UNLOCKED, 145, 105 #IF IS_DEBUG_BUILD, "Car0" #ENDIF) esCarIntersection1Left[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_MICROSMG) INITIALISE_ENEMY_GROUP(esCarIntersection1Left, FALSE #IF IS_DEBUG_BUILD, "CAR_INT1_L " #ENDIF) esCarIntersection1Right[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, VS_FRONT_RIGHT, rgEnemies, WEAPONTYPE_MICROSMG, 115) INITIALISE_ENEMY_GROUP(esCarIntersection1Right, FALSE #IF IS_DEBUG_BUILD, "CAR_INT1_R " #ENDIF) esCarIntersection1Right[0].bHasTask = FALSE esCarIntersection1Right[0].iProgress = 0 vsEnemyCars[CAR_INTERSECTION2].VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyCars[CAR_INTERSECTION2], 1500, TRUE, VEHICLELOCK_UNLOCKED, 10, 10 #IF IS_DEBUG_BUILD, "Car0" #ENDIF) esCarIntersection2Left[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_MICROSMG) //esCarIntersection2Left[1].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, VS_BACK_LEFT, rgEnemies, WEAPONTYPE_MICROSMG) INITIALISE_ENEMY_GROUP(esCarIntersection2Left, FALSE #IF IS_DEBUG_BUILD, "CAR_INT2_L " #ENDIF) esCarIntersection2Left[1].bHasTask = FALSE esCarIntersection2Left[1].iProgress = 0 IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, TRUE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION1], sVehicleRecordingsFile, 1.05, FALSE, 500.0) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, "FRANKLIN_1_SHOOTOUT_CAR_02_Group") ENDIF IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, TRUE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION2], sVehicleRecordingsFile, 0.95) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, "FRANKLIN_1_SHOOTOUT_CAR_02_Group") ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyCars[CAR_INTERSECTION1].ModelName) SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyCars[CAR_INTERSECTION2].ModelName) Events[EVENT_ENEMY_WAVE_CARINTERSECTION_SPAWNED] = TRUE ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, 1.25) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, 1.25) #ENDIF IF DOES_ENTITY_EXIST(esCarIntersection1Right[0].PedIndex) IF NOT IS_ENTITY_DEAD(esCarIntersection1Right[0].PedIndex) SWITCH esCarIntersection1Right[0].iProgress CASE 0 IF ( esCarIntersection1Right[0].bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) > 3750 SET_PED_SEEING_RANGE(esCarIntersection1Right[0].PedIndex, 200.0) SET_PED_HEARING_RANGE(esCarIntersection1Right[0].PedIndex, 200.0) SET_PED_COMBAT_ATTRIBUTES(esCarIntersection1Right[0].PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esCarIntersection1Right[0].PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(esCarIntersection1Right[0].PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_SHOOTING_PROPERTIES(esCarIntersection1Right[0].PedIndex, 3, 80, FIRING_PATTERN_FULL_AUTO) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esCarIntersection1Right[0].PedIndex, 200.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esCarIntersection1Right[0].PedIndex, FALSE) esCarIntersection1Right[0].bHasTask = TRUE ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) > 5600 esCarIntersection1Right[0].bHasTask = FALSE esCarIntersection1Right[0].iProgress++ ENDIf ENDIF ENDIF BREAK CASE 1 IF esCarIntersection1Right[0].bHasTask = FALSE SET_PED_COMBAT_ATTRIBUTES(esCarIntersection1Right[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(esCarIntersection1Right[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) //COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esCarIntersection1Right[0].PedIndex, vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, <<66.4768, -1899.1641, 20.6404>>) STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) ENDIF esCarIntersection1Right[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF IF DOES_ENTITY_EXIST(esCarIntersection1Left[0].PedIndex) IF NOT IS_ENTITY_DEAD(esCarIntersection1Left[0].PedIndex) SWITCH esCarIntersection1Left[0].iProgress CASE 0 IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) > 75.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsEnemyCars[CAR_INTERSECTION1].iRecordingNumber, sVehicleRecordingsFile) esCarIntersection1Left[0].bHasTask = FALSE esCarIntersection1Left[0].iProgress++ ENDIF ENDIF ENDIF BREAK CASE 1 IF esCarIntersection1Left[0].bHasTask = FALSE SET_PED_SHOOTING_PROPERTIES(esCarIntersection1Left[0].PedIndex, 5, 75) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esCarIntersection1Left[0].PedIndex, vsEnemyCars[CAR_INTERSECTION1].VehicleIndex, <<61.4590, -1905.0114, 20.6796>>) STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION1].VehicleIndex) ENDIF esCarIntersection1Left[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF IF DOES_ENTITY_EXIST(esCarIntersection2Left[0].PedIndex) IF NOT IS_ENTITY_DEAD(esCarIntersection2Left[0].PedIndex) SWITCH esCarIntersection2Left[0].iProgress CASE 0 IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) > 95.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsEnemyCars[CAR_INTERSECTION2].iRecordingNumber, sVehicleRecordingsFile) esCarIntersection2Left[0].bHasTask = FALSE esCarIntersection2Left[0].iProgress++ ENDIF ENDIF ENDIF BREAK CASE 1 IF esCarIntersection2Left[0].bHasTask = FALSE SET_PED_SHOOTING_PROPERTIES(esCarIntersection2Left[0].PedIndex, 5, 75) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esCarIntersection2Left[0].PedIndex, vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, <<0.0, 0.0, 0.0>>) STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) ENDIF esCarIntersection2Left[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF IF DOES_ENTITY_EXIST(esCarIntersection2Left[1].PedIndex) IF NOT IS_ENTITY_DEAD(esCarIntersection2Left[1].PedIndex) SWITCH esCarIntersection2Left[1].iProgress CASE 0 IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) > 65.0 esCarIntersection2Left[1].bHasTask = FALSE esCarIntersection2Left[1].iProgress++ ENDIF ENDIF ENDIF BREAK CASE 1 IF esCarIntersection2Left[1].bHasTask = FALSE SET_PED_SHOOTING_PROPERTIES(esCarIntersection2Left[1].PedIndex, 5, 75) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esCarIntersection2Left[1].PedIndex, vsEnemyCars[CAR_INTERSECTION2].VehicleIndex, <<0.0, 0.0, 0.0>>) STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_1") IF IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_INTERSECTION2].VehicleIndex) ENDIF esCarIntersection2Left[1].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF CLEANUP_ENEMY_GROUP(esCarIntersection1Left, FALSE, TRUE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection1Right, FALSE, TRUE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection2Left, FALSE, TRUE, FALSE) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarIntersection1Left, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarIntersection1Right, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarIntersection2Left, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_3RD_ENEMY_WAVE(BOOL &bCurrentEnemyWaveSpawned, BOOL bPreviousEnemyWaveSpawned) //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF ( bCurrentEnemyWaveSpawned = FALSE ) IF ( bPreviousEnemyWaveSpawned = TRUE ) IF SHOULD_SPAWN_WAVE_3() CPRINTLN(DEBUG_MISSION, "spawning wave 3") //create peds esGroup5[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << 24.09, -1894.78, 21.61 >>, 247.1808, rgEnemies, WEAPONTYPE_ASSAULTRIFLE) INITIALISE_ENEMY_GROUP(esGroup5, FALSE #IF IS_DEBUG_BUILD, "Group5 " #ENDIF) esGroup6[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << 44.57, -1870.54, 21.92 >>, 138.3147, rgEnemies, WEAPONTYPE_MICROSMG, 125) esGroup6[1].PedIndex = CREATE_ENEMY_PED(mnBalla, << 43.22, -1865.36, 21.83 >>, 138.3147, rgEnemies, WEAPONTYPE_PISTOL) //esGroup6[2].PedIndex = CREATE_ENEMY_PED(mnBalla, << 47.88, -1868.92, 21.85 >>, 138.3147, rgEnemies, WEAPONTYPE_PISTOL) INITIALISE_ENEMY_GROUP(esGroup6, FALSE #IF IS_DEBUG_BUILD, "Group6 " #ENDIF) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup5, 20, 40) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup6, 20, 40) TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup5) TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup6) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 3rd enemy wave spawned.") #ENDIF bCurrentEnemyWaveSpawned = TRUE ENDIF ENDIF ELSE //update enemy peds //IF ( Events[EVENT_ENEMIES_GROUP5_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup5, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF //IF ( Events[EVENT_ENEMIES_GROUP6_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup6, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esGroup5, Events[EVENT_ENEMIES_GROUP5_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP5_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esGroup6, Events[EVENT_ENEMIES_GROUP6_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP6_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup5, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup6, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_4TH_ENEMY_WAVE(BOOL &bCurrentEnemyWaveSpawned, BOOL bPreviousEnemyWaveSpawned) //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF ( bCurrentEnemyWaveSpawned = FALSE ) IF ( bPreviousEnemyWaveSpawned = TRUE ) IF SHOULD_SPAWN_WAVE_4() //create peds esGroup7[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<27.5975, -1897.2885, 21.5562>>, 309.5858, rgEnemies, WEAPONTYPE_PISTOL) esGroup7[1].PedIndex = CREATE_ENEMY_PED(mnBalla, <<17.2164, -1889.5151, 22.0813>>, 284.5244, rgEnemies, WEAPONTYPE_PISTOL) esGroup7[2].PedIndex = CREATE_ENEMY_PED(mnBalla, << 3.31, -1877.65, 22.61 >>, 329.7870, rgEnemies, WEAPONTYPE_PISTOL) esGroup7[3].PedIndex = CREATE_ENEMY_PED(mnBalla, <<45.0939, -1853.9063, 21.8317>>, 317.1190, rgEnemies, WEAPONTYPE_MICROSMG, 125) INITIALISE_ENEMY_GROUP(esGroup7, FALSE /*TRUE*/ #IF IS_DEBUG_BUILD, "Group7 " #ENDIF) esGroup8[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<46.9275, -1865.1483, 22.2834>>, 138.9487, rgEnemies, WEAPONTYPE_PISTOL) esGroup8[1].PedIndex = CREATE_ENEMY_PED(mnBalla, <<46.7417, -1873.0980, 21.7350>>, 146.0804, rgEnemies, WEAPONTYPE_MICROSMG, 115) INITIALISE_ENEMY_GROUP(esGroup8, FALSE /*TRUE*/ #IF IS_DEBUG_BUILD, "Group8 " #ENDIF) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup7, 20, 40) SET_ENEMY_GROUP_SHOOTING_PROPERTIES(esGroup8, 20, 40) //combat tasks TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup7) TASK_ENEMY_GROUP_COMBAT_HATED_PEDS(esGroup8) SET_PED_COMBAT_PROPERTIES(esGroup7[0].PedIndex, CM_DEFENSIVE, CAL_AVERAGE, CR_MEDIUM, CA_CLEAR_PRIMARY_DEFENSIVE_AREA_WHEN_REACHED) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup7[0].PedIndex, csCoverpoints[50].vPosition, 2.0) SET_PED_COMBAT_PROPERTIES(esGroup7[0].PedIndex, CM_DEFENSIVE, CAL_AVERAGE, CR_MEDIUM, CA_CLEAR_PRIMARY_DEFENSIVE_AREA_WHEN_REACHED) SET_PED_DEFENSIVE_AREA_SPHERE(esGroup8[1].PedIndex, csCoverpoints[49].vPosition, 2.0) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 4th enemy wave spawned.") #ENDIF INITIALISE_SPAWNPOINTS(EnemySpawnpoints, 4) INITIALISE_SPAWNPOINTS(EnemySidekickSpawnpoints, 4) bCurrentEnemyWaveSpawned = TRUE ENDIF ENDIF ELSE //update enemy peds IF NOT Events[EVENT_ENEMY_WAVE_5_SPAWNED] AND GET_NUM_REMAINING_OF_WAVE_4_ENEMIES() < 3 INT i FOR i = 0 TO ( COUNT_OF(EnemySpawnpoints) - 1 ) UPDATE_SPAWNPOINT(EnemySpawnpoints[i]) UPDATE_SPAWNPOINT(EnemySidekickSpawnpoints[i]) ENDFOR ENDIF //IF ( Events[EVENT_ENEMIES_GROUP7_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup7, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF //IF ( Events[EVENT_ENEMIES_GROUP8_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup8, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esGroup7, Events[EVENT_ENEMIES_GROUP7_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP7_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esGroup8, Events[EVENT_ENEMIES_GROUP8_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP8_KILLED" #ENDIF) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup7, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup8, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_5TH_ENEMY_WAVE() //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF NOT Events[EVENT_ENEMY_WAVE_5_SPAWNED] IF SHOULD_SPAWN_WAVE_5() REQUEST_MODEL(vsEnemyCars[CAR_STREET].ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyCars[CAR_STREET].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(vsEnemyCars[CAR_STREET].ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyCars[CAR_STREET].iRecordingNumber, sVehicleRecordingsFile) //create peds vsEnemyCars[CAR_STREET].VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyCars[CAR_STREET], 1500, TRUE, VEHICLELOCK_UNLOCKED, 68, 68) esCarStreetLeft[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_STREET].VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_PISTOL) INITIALISE_ENEMY_GROUP(esCarStreetLeft, FALSE #IF IS_DEBUG_BUILD, "CarstreetLeft " #ENDIF) esCarStreetRight[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyCars[CAR_STREET].VehicleIndex, VS_FRONT_RIGHT, rgEnemies, WEAPONTYPE_MICROSMG) INITIALISE_ENEMY_GROUP(esCarStreetRight, FALSE #IF IS_DEBUG_BUILD, "CarstreetRight " #ENDIF) //combat tasks SET_PED_COMBAT_DRIVE_BY(esCarStreetRight[0].PedIndex, 150.0) SET_PED_SHOOTING_PROPERTIES(esCarStreetRight[0].PedIndex, 5, 75, FIRING_PATTERN_FULL_AUTO) SET_VEHICLE_ENGINE_ON(vsEnemyCars[CAR_STREET].VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyCars[CAR_STREET].VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_STREET].VehicleIndex, vsEnemyCars[CAR_STREET].iRecordingNumber, sVehicleRecordingsFile) SET_PLAYBACK_SPEED(vsEnemyCars[CAR_STREET].VehicleIndex, 1.15) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsEnemyCars[CAR_STREET].VehicleIndex) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyCars[CAR_STREET].VehicleIndex, "FRANKLIN_1_SHOOTOUT_CAR_03_Group") START_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_3") SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyCars[CAR_STREET].ModelName) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 5th enemy wave spawned.") #ENDIF Events[EVENT_ENEMY_WAVE_5_SPAWNED] = TRUE ENDIF ENDIF ELSE //update enemy peds //IF ( Events[EVENT_ENEMIES_CARSTREETLEFT_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esCarStreetLeft, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF //IF ( Events[EVENT_ENEMIES_CARSTREETRIGHT_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esCarStreetRight, FALSE, TRUE, FALSE)//bRenderEnemyBlips) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esCarStreetLeft, Events[EVENT_ENEMIES_CARSTREETLEFT_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_CARSTREETLEFT_KILLED" #ENDIF) RUN_ENEMY_GROUP_DEAD_CHECK(esCarStreetRight, Events[EVENT_ENEMIES_CARSTREETRIGHT_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_CARSTREETRIGHT_KILLED" #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_STREET].VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT, vFrontRightOffset, 1.0, FALSE, TRUE, vFrontRightDamageOffset, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsEnemyCars[CAR_STREET].VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT, vRearRightOffset, 1.0, FALSE, TRUE, vRearRightDamageOffset, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) IF DOES_ENTITY_EXIST(vsEnemyCars[CAR_STREET].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsEnemyCars[CAR_STREET].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyCars[CAR_STREET].VehicleIndex) IF ( GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_STREET].VehicleIndex #IF IS_DEBUG_BUILD, TRUE #ENDIF ) > 80.0) IF ( esCarStreetRight[0].bHasTask = FALSE ) IF NOT IS_ENTITY_DEAD(esCarStreetRight[0].PedIndex ) SET_CURRENT_PED_WEAPON(esCarStreetRight[0].PedIndex, WEAPONTYPE_MICROSMG, TRUE) // run to a spot behind the car before shooting COMBAT_SEQUENCE_EXIT_CAR_RUN_TO_SPOT_AND_ATTACK(esCarStreetRight[0].PedIndex, <<-0.2979, -1855.7231, 23.3036>>) ENDIF STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_3") REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_STREET].VehicleIndex) esCarStreetRight[0].bHasTask = TRUE ENDIF ENDIF IF ( GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsEnemyCars[CAR_STREET].VehicleIndex) > 90.0 ) IF ( esCarStreetLeft[0].bHasTask = FALSE ) COMBAT_SEQUENCE_GO_TO_COMBAT(esCarStreetLeft[0].PedIndex) SET_PED_SHOOTING_PROPERTIES(esCarStreetLeft[0].PedIndex, 8, 60) SET_PED_COVER_PROPERTIES(esCarStreetLeft[0].PedIndex, TRUE, FALSE, FALSE, FALSE, 6.0, FALSE, 0.0, 3.0) esCarStreetLeft[0].bHasTask = TRUE ENDIF STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_CAR_ARRIVE_3") REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyCars[CAR_STREET].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsEnemyCars[CAR_STREET].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsEnemyCars[CAR_STREET].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarStreetLeft, bRenderEnemyBlips) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esCarStreetRight, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_6TH_ENEMY_WAVE(BOOL &bCurrentEnemyWaveSpawned, BOOL bPreviousEnemyWaveSpawned, INT iAliveEnemiesCountToTriggerWave) //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF ( bCurrentEnemyWaveSpawned = FALSE ) IF ( bPreviousEnemyWaveSpawned = TRUE ) IF ( ( GET_NUMBER_OF_ENEMIES_ALIVE(esCarStreetLeft) ) <= iAliveEnemiesCountToTriggerWave ) OR IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<-19.315809,-1883.604248,21.778067>>, <<27.231070,-1846.195313,25.670954>>, 8.0) //create peds esGroup9[0].PedIndex = CREATE_ENEMY_PED(mnBalla, << -16.66, -1813.80, 25.47 >>, 138.3147, rgEnemies, WEAPONTYPE_MICROSMG, 125) esGroup9[1].PedIndex = CREATE_ENEMY_PED(mnBalla, << -24.22, -1856.45, 24.01 >>, 330.4768, rgEnemies, WEAPONTYPE_MICROSMG, 120) esGroup9[2].PedIndex = CREATE_ENEMY_PED(mnBalla, << 6.5899, -1810.9725, 24.3479>>, 212.5341, rgEnemies, WEAPONTYPE_ASSAULTRIFLE) INITIALISE_ENEMY_GROUP(esGroup9, FALSE #IF IS_DEBUG_BUILD, "Group9 " #ENDIF) //combat tasks SET_PED_SHOOTING_PROPERTIES(esGroup9[0].PedIndex, 5, 30) COMBAT_SEQUENCE_GO_TO_COMBAT(esGroup9[0].PedIndex, 150.0) SET_PED_COMBAT_PROPERTIES(esGroup9[0].PedIndex, CM_DEFENSIVE, CAL_POOR, CR_MEDIUM, CA_USE_COVER) SET_PED_DEFENSIVE_AREA_ANGLED(esGroup9[0].PedIndex, <<-16.618637,-1821.934204,23.791941>>, <<-21.706158,-1828.041748,27.610094>>, 6.0) COMBAT_SEQUENCE_GO_TO_COVER_THEN_COMBAT(esGroup9[1].PedIndex, csCoverpoints[40].vPosition, PEDMOVE_RUN, 3000, TRUE, TRUE, TRUE) SET_PED_COVER_PROPERTIES(esGroup9[1].PedIndex, TRUE, TRUE, FALSE, TRUE, 10.0, FALSE, 0.0, 1.5, 5.0) SET_PED_SHOOTING_PROPERTIES(esGroup9[1].PedIndex, 5, 30) COMBAT_SEQUENCE_GO_TO_COORD_THEN_COMBAT(esGroup9[2].PedIndex, << 5.45, -1818.47, 24.35 >> /*<< 0.30, -1824.61, 28.55 >>*/, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 2, TRUE) SET_PED_SHOOTING_PROPERTIES(esGroup9[2].PedIndex, 3, 90) SET_PED_DEFENSIVE_AREA_ANGLED(esGroup9[2].PedIndex, <<-0.456124,-1825.613037,28.446308>>, <<1.161289,-1823.675171,30.546309>>, 1.5) esGroup9[2].iTimer = GET_GAME_TIMER() COMBAT_SEQUENCE_GO_TO_COORD_WHILE_AIMING_THEN_COMBAT_NEW(esGroup9[3].PedIndex, csCoverpoints[57].vPosition, PEDMOVE_RUN, FALSE, vGroveStreetStart, NULL, FALSE) SET_PED_COVER_PROPERTIES(esGroup9[3].PedIndex, TRUE, FALSE, FALSE, FALSE, 10.0, FALSE, 0.0, 1.0, 5.0) SET_PED_SHOOTING_PROPERTIES(esGroup9[3].PedIndex, 5, 60) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": 6th enemy wave spawned.") #ENDIF bCurrentEnemyWaveSpawned = TRUE ENDIF ENDIF ELSE //update enemy peds //IF ( Events[EVENT_ENEMIES_GROUP9_KILLED] = FALSE ) CLEANUP_ENEMY_GROUP(esGroup9, FALSE, TRUE, FALSE) //ENDIF RUN_ENEMY_GROUP_DEAD_CHECK(esGroup9, Events[EVENT_ENEMIES_GROUP9_KILLED] #IF IS_DEBUG_BUILD, "EVENT_ENEMIES_GROUP9_KILLED" #ENDIF) //update enemy who takes cover on the corner of the river entrance IF NOT IS_PED_INJURED(esGroup9[1].PedIndex) SWITCH esGroup9[1].iProgress CASE 0 //when shootout ends, make the ped go out of cover for easy kill IF ( Events[EVENT_SHOOTOUT_ENDED] = TRUE ) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup9[1].PedIndex, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup9[1].PedIndex, 100.0) SET_PED_COMBAT_PROPERTIES(esGroup9[1].PedIndex, CM_WILLADVANCE, CAL_PROFESSIONAL, CR_NEAR, CA_AGGRESSIVE) REMOVE_PED_DEFENSIVE_AREA(esGroup9[1].PedIndex) SET_PED_COVER_PROPERTIES(esGroup9[1].PedIndex, FALSE) esGroup9[1].iProgress++ ENDIF BREAK ENDSWITCH ENDIF IF NOT IS_PED_INJURED(esGroup9[2].PedIndex) SWITCH esGroup9[2].iProgress CASE 0 IF ( Events[EVENT_SHOOTOUT_ENDED] = TRUE ) esGroup9[2].bHasTask = FALSE esGroup9[2].iProgress++ ENDIF BREAK CASE 1 IF ( esGroup9[2].bHasTask = FALSE ) REMOVE_PED_DEFENSIVE_AREA(esGroup9[2].PedIndex) SET_PED_COMBAT_RANGE(esGroup9[2].PedIndex, CR_NEAR) SET_PED_COMBAT_MOVEMENT(esGroup9[2].PedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(esGroup9[2].PedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_MOVEMENT_PROPERTIES(esGroup9[2].PedIndex, 1.0, 0.0) SET_PED_SHOOTING_PROPERTIES(esGroup9[2].PedIndex, 5, 75) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esGroup9[2].PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esGroup9[2].PedIndex, FALSE) esGroup9[2].bHasTask = TRUE ENDIF BREAK ENDSWITCH ENDIF UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esGroup9, bRenderEnemyBlips) ENDIF ENDPROC PROC MANAGE_SPAWNER_PED(SPAWNPOINT_STRUCT &sSpawnpoint, BOOL bRenderBlip = TRUE) IF ( sSpawnpoint.bTaken = TRUE ) IF DOES_ENTITY_EXIST(sSpawnpoint.sEnemy.PedIndex) IF NOT IS_ENTITY_DEAD(sSpawnpoint.sEnemy.PedIndex) IF NOT IS_PED_INJURED(sSpawnpoint.sEnemy.PedIndex) IF ( sSpawnpoint.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) // give the spawner cops a defensive area so they dont follow // the player down the hill IF Events[EVENT_COPS_ARRIVE] IF ( psLamar.bFleeing = FALSE ) SET_PED_ACCURACY(sSpawnpoint.sEnemy.PedIndex, 1) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(sSpawnpoint.sEnemy.PedIndex, vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, <<0.0, 0.0, 0.0>>) ELSE SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_CAN_CHARGE, FALSE) SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(sSpawnpoint.sEnemy.PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(sSpawnpoint.sEnemy.PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(sSpawnpoint.sEnemy.PedIndex, CM_DEFENSIVE) SET_PED_ANGLED_DEFENSIVE_AREA(sSpawnpoint.sEnemy.PedIndex, <<-42.085915,-1866.869629,23.175344>>, <<-28.507175,-1851.517090,27.739193>>, 5.000000) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sSpawnpoint.sEnemy.PedIndex, 3000) ENDIF ELSE TASK_COMBAT_HATED_TARGETS_AROUND_PED(sSpawnpoint.sEnemy.PedIndex, 3000) ENDIF sSpawnpoint.bHasTask = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_ENTITY_DEAD(sSpawnpoint.sEnemy.PedIndex) OR IS_PED_INJURED(sSpawnpoint.sEnemy.PedIndex) IF ( sSpawnpoint.sEnemy.eCleanupReason = PED_CLEANUP_NO_CLEANUP ) IF DOES_BLIP_EXIST(sSpawnpoint.sEnemy.BlipIndex) REMOVE_BLIP(sSpawnpoint.sEnemy.BlipIndex) ENDIF sSpawnpoint.sEnemy.eCleanupReason = GET_PED_CLEANUP_REASON(sSpawnpoint.sEnemy.PedIndex #IF IS_DEBUG_BUILD, "Spawner" #ENDIF) sSpawnpoint.sEnemy.iCleanupAttempts++ IF ( sSpawnpoint.sEnemy.iCleanupAttempts = 10 ) sSpawnpoint.sEnemy.eCleanupReason = PED_CLEANUP_NONE ENDIF ELSE sSpawnpoint.iKillCount++ sSpawnpoint.iTimer = GET_GAME_TIMER() sSpawnpoint.bTaken = FALSE sSpawnpoint.bHasTask = FALSE UPDATE_PLAYER_AND_BUDDY_KILL_COUNTERS(sSpawnpoint.sEnemy.eCleanupReason, iPlayerFranklinKills, iPlayerTrevorKills, iBuddyFranklinKills, iBuddyTrevorKills, iBuddyLamarKills, iBuddyChopKills) SET_PED_AS_NO_LONGER_NEEDED(sSpawnpoint.sEnemy.PedIndex) ENDIF ENDIF ENDIF ENDIF IF bRenderBlip = TRUE IF DOES_ENTITY_EXIST(sSpawnpoint.sEnemy.PedIndex) AND NOT IS_ENTITY_DEAD(sSpawnpoint.sEnemy.PedIndex) AND GET_ENTITY_MODEL(sSpawnpoint.sEnemy.PedIndex) != mnCop UPDATE_AI_PED_BLIP(sSpawnpoint.sEnemy.PedIndex, sSpawnpoint.sEnemy.EnemyBlipData) ENDIF ELSE CLEANUP_AI_PED_BLIP(sSpawnpoint.sEnemy.EnemyBlipData) ENDIF ENDPROC // separated this out from the spawner, as we need to keep // managing them even if we've stopped spawning them // @BSW PROC MANAGE_SPAWNER_PEDS() INT i FOR i = 0 TO ( COUNT_OF(EnemySpawnpoints) - 1 ) MANAGE_SPAWNER_PED(EnemySpawnpoints[i], bRenderEnemyBlips) ENDFOR // do it twice because we're also using this for the "sidekicks" // as a hacky way to double up the spawns! FOR i = 0 TO ( COUNT_OF(EnemySidekickSpawnpoints) - 1 ) MANAGE_SPAWNER_PED(EnemySidekickSpawnpoints[i], bRenderEnemyBlips) ENDFOR ENDPROC PROC MANAGE_COP_WAVE(BOOL &bCurrentEnemyWaveSpawned) //create enemy wave when there is a specified number of enemies alive from previous wave or when locate is reached IF ( bCurrentEnemyWaveSpawned = FALSE ) IF SHOULD_SPAWN_COP_WAVE() INT i REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) //create first 3 cop cars REPEAT 3 i vsStreetCopCars[i].VehicleIndex = CREATE_VEHICLE(POLICE3, vsStreetCopCars[i].vPosition, vsStreetCopCars[i].fHeading) SET_VEHICLE_SIREN(vsStreetCopCars[i].VehicleIndex, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsStreetCopCars[i].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsStreetCopCars[i].VehicleIndex, FALSE) ENDREPEAT //create cop peds in first 3 cop cars //first cop car psStreetCopCar1Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar1Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) GO_TO_PED_STATE(psStreetCopCar1Cops[0], PED_STATE_RECORDING_PLAYBACK) GO_TO_PED_STATE(psStreetCopCar1Cops[1], PED_STATE_RECORDING_PLAYBACK) //second cop car psStreetCopCar2Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar2Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) GO_TO_PED_STATE(psStreetCopCar2Cops[0], PED_STATE_RECORDING_PLAYBACK) GO_TO_PED_STATE(psStreetCopCar2Cops[1], PED_STATE_RECORDING_PLAYBACK) //third cop car psStreetCopCar3Cops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) psStreetCopCar3Cops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) GO_TO_PED_STATE(psStreetCopCar3Cops[0], PED_STATE_RECORDING_PLAYBACK) GO_TO_PED_STATE(psStreetCopCar3Cops[1], PED_STATE_RECORDING_PLAYBACK) //start vehicle recordings on the first 3 cop cars REPEAT 3 i START_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[i].VehicleIndex, vsStreetCopCars[i].iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsStreetCopCars[i].VehicleIndex) ENDREPEAT //adjust playback speeds SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, 1.25) SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, 0.95) SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, 0.95) //start audio scene START_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_POLICE_ARRIVE") //set 3 star wanted level IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(POLICE3) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) PLAY_POLICE_REPORT("SCRIPTED_SCANNER_REPORT_Franklin_2_01", 0.0) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Cops wave spawned.") #ENDIF bCurrentEnemyWaveSpawned = TRUE //bCopConversationsAllowed = TRUE iReplayCameraWarpTimer = GET_GAME_TIMER() + 1000 //Fix for bug 2229916 ENDIF ENDIF ELSE //update cop peds ///COP CAR 1 IF DOES_ENTITY_EXIST(psStreetCopCar1Cops[0].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar1Cops[0].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar1Cops[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar1Cops[0].eState), 1.25) ENDIF psStreetCopCar1Cops[0].sDebugName = "StreetCopCar1Cop 0" #ENDIF SWITCH psStreetCopCar1Cops[0].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar1Cops[0].bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, 1.25) ELSE GIVE_WEAPON_TO_PED(psStreetCopCar1Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar1Cops[0].PedIndex, 1) psStreetCopCar1Cops[0].bHasTask = TRUE ENDIF ENDIF ENDIF ENDIF IF ( psStreetCopCar1Cops[0].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) > 10000.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) psStreetCopCar1Cops[0].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar1Cops[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar1Cops[0].iProgress CASE 0 IF ( psStreetCopCar1Cops[0].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar1Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar1Cops[0].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar1Cops[0].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar1Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar1Cops[0].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar1Cops[0].PedIndex, vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar1Cops[0].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar1Cops[0].PedIndex, FALSE) psStreetCopCar1Cops[0].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar1Cops[0].iProgress++ psStreetCopCar1Cops[0].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar1Cops[0].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar1Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar1Cops[0].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar1Cops[0].PedIndex, CM_WILLADVANCE) psStreetCopCar1Cops[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF IF IS_ENTITY_DEAD(psStreetCopCar1Cops[0].PedIndex) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psStreetCopCar1Cops[1].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar1Cops[1].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar1Cops[1].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar1Cops[1].eState), 1.25) ENDIF psStreetCopCar1Cops[1].sDebugName = "StreetCopCar1Cop 1" #ENDIF SWITCH psStreetCopCar1Cops[1].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar1Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar1Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) psStreetCopCar1Cops[1].bHasTask = TRUE ENDIF IF ( psStreetCopCar1Cops[1].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) > 9500.0 GO_TO_PED_STATE(psStreetCopCar1Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ELSE psStreetCopCar1Cops[1].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar1Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar1Cops[1].iProgress CASE 0 IF ( psStreetCopCar1Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar1Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar1Cops[1].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar1Cops[1].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar1Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar1Cops[1].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar1Cops[1].PedIndex, vsStreetCopCars[COPCAR_STREET_1].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar1Cops[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar1Cops[1].PedIndex, FALSE) psStreetCopCar1Cops[1].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar1Cops[1].iProgress++ psStreetCopCar1Cops[1].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar1Cops[1].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar1Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar1Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar1Cops[1].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar1Cops[1].PedIndex, CM_WILLADVANCE) psStreetCopCar1Cops[1].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF ///COP CAR 2 IF DOES_ENTITY_EXIST(psStreetCopCar2Cops[0].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar2Cops[0].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar2Cops[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar2Cops[0].eState), 1.25) ENDIF psStreetCopCar2Cops[0].sDebugName = "StreetCopCar2Cop 0" #ENDIF SWITCH psStreetCopCar2Cops[0].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar2Cops[0].bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, 1.25) ELSE GIVE_WEAPON_TO_PED(psStreetCopCar2Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar2Cops[0].PedIndex, 1) psStreetCopCar2Cops[0].bHasTask = TRUE ENDIF ENDIF ENDIF ENDIF IF ( psStreetCopCar2Cops[0].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) > 9000.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) psStreetCopCar2Cops[0].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar2Cops[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar2Cops[0].iProgress CASE 0 IF ( psStreetCopCar2Cops[0].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar2Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar2Cops[0].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar2Cops[0].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar2Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar2Cops[0].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar2Cops[0].PedIndex, vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar2Cops[0].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar2Cops[0].PedIndex, FALSE) psStreetCopCar2Cops[0].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar2Cops[0].iProgress++ psStreetCopCar2Cops[0].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar2Cops[0].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar2Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar2Cops[0].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar2Cops[0].PedIndex, CM_WILLADVANCE) psStreetCopCar2Cops[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF IF IS_ENTITY_DEAD(psStreetCopCar2Cops[0].PedIndex) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psStreetCopCar2Cops[1].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar2Cops[1].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar2Cops[1].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar2Cops[1].eState), 1.25) ENDIF psStreetCopCar2Cops[1].sDebugName = "StreetCopCar2Cop 1" #ENDIF SWITCH psStreetCopCar2Cops[1].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar2Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar2Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) psStreetCopCar2Cops[1].bHasTask = TRUE ENDIF IF ( psStreetCopCar2Cops[1].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) > 8750.0 GO_TO_PED_STATE(psStreetCopCar2Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ELSE psStreetCopCar2Cops[1].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar2Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar2Cops[1].iProgress CASE 0 IF ( psStreetCopCar2Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar2Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar2Cops[1].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar2Cops[1].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar2Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar2Cops[1].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar2Cops[1].PedIndex, vsStreetCopCars[COPCAR_STREET_2].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar2Cops[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar2Cops[1].PedIndex, FALSE) psStreetCopCar2Cops[1].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar2Cops[1].iProgress++ psStreetCopCar2Cops[1].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar2Cops[1].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar2Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar2Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar2Cops[1].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar2Cops[1].PedIndex, CM_WILLADVANCE) psStreetCopCar2Cops[1].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF ///COP CAR 3 IF DOES_ENTITY_EXIST(psStreetCopCar3Cops[0].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar3Cops[0].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar3Cops[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar3Cops[0].eState), 1.25) ENDIF psStreetCopCar3Cops[0].sDebugName = "StreetCopCar3Cop 0" #ENDIF SWITCH psStreetCopCar3Cops[0].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar3Cops[0].bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) SET_PLAYBACK_SPEED(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, 1.25) ELSE GIVE_WEAPON_TO_PED(psStreetCopCar3Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar3Cops[0].PedIndex, 1) psStreetCopCar3Cops[0].bHasTask = TRUE ENDIF ENDIF ENDIF ENDIF IF ( psStreetCopCar3Cops[0].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) > 8000.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) psStreetCopCar3Cops[0].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar3Cops[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar3Cops[0].iProgress CASE 0 IF ( psStreetCopCar3Cops[0].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar3Cops[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar3Cops[0].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar3Cops[0].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar3Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar3Cops[0].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar3Cops[0].PedIndex, vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar3Cops[0].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar3Cops[0].PedIndex, FALSE) psStreetCopCar3Cops[0].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar3Cops[0].iProgress++ psStreetCopCar3Cops[0].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar3Cops[0].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[0].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar3Cops[0].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar3Cops[0].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar3Cops[0].PedIndex, CM_WILLADVANCE) psStreetCopCar3Cops[0].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF IF IS_ENTITY_DEAD(psStreetCopCar3Cops[0].PedIndex) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(psStreetCopCar3Cops[1].PedIndex) IF NOT IS_ENTITY_DEAD(psStreetCopCar3Cops[1].PedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_TEXT_ABOVE_ENTITY(psStreetCopCar3Cops[1].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(psStreetCopCar3Cops[1].eState), 1.25) ENDIF psStreetCopCar3Cops[1].sDebugName = "StreetCopCar3Cop 1" #ENDIF SWITCH psStreetCopCar3Cops[1].eState CASE PED_STATE_RECORDING_PLAYBACK IF ( psStreetCopCar3Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar3Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) psStreetCopCar3Cops[1].bHasTask = TRUE ENDIF IF ( psStreetCopCar3Cops[1].bHasTask = TRUE ) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) > 7500.0 GO_TO_PED_STATE(psStreetCopCar3Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ELSE psStreetCopCar3Cops[1].iProgress = 0 GO_TO_PED_STATE(psStreetCopCar3Cops[1], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT SWITCH psStreetCopCar3Cops[1].iProgress CASE 0 IF ( psStreetCopCar3Cops[1].bHasTask = FALSE ) GIVE_WEAPON_TO_PED(psStreetCopCar3Cops[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_ACCURACY(psStreetCopCar3Cops[1].PedIndex, 1) SET_PED_SHOOT_RATE(psStreetCopCar3Cops[1].PedIndex, 90) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar3Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_COMBAT_MOVEMENT(psStreetCopCar3Cops[1].PedIndex, CM_DEFENSIVE) IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) AND NOT IS_ENTITY_DEAD(vsStreetCopCars[COPCAR_STREET_3].VehicleIndex) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(psStreetCopCar3Cops[1].PedIndex, vsStreetCopCars[COPCAR_STREET_3].VehicleIndex, << 0.0, 0.0, 0.0>>, 10.0) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(psStreetCopCar3Cops[1].PedIndex, 150.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psStreetCopCar3Cops[1].PedIndex, FALSE) psStreetCopCar3Cops[1].bHasTask = TRUE ENDIF IF ( psLamar.bFleeing) psStreetCopCar3Cops[1].iProgress++ psStreetCopCar3Cops[1].bHasTask = FALSE ENDIF BREAK CASE 1 IF ( psStreetCopCar3Cops[1].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_CAN_FLANK, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_CAN_CHASE_TARGET_ON_FOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(psStreetCopCar3Cops[1].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_TARGET_LOSS_RESPONSE(psStreetCopCar3Cops[1].PedIndex, TLR_SEARCH_FOR_TARGET) REMOVE_PED_DEFENSIVE_AREA(psStreetCopCar3Cops[1].PedIndex) SET_PED_COMBAT_MOVEMENT(psStreetCopCar3Cops[1].PedIndex, CM_WILLADVANCE) psStreetCopCar3Cops[1].bHasTask = TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF IF ( bCopConversationsAllowed = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COP1") IF GET_GAME_TIMER() - iCopConversationTimer > 0 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PED_INDEX ClosestCopPedIndex ClosestCopPedIndex = GET_PED_CLOSEST_PED_FROM_RELATIONSHIP_GROUP(PLAYER_PED_ID(), RELGROUPHASH_COP, 1) IF DOES_ENTITY_EXIST(ClosestCopPedIndex) IF NOT IS_ENTITY_DEAD(ClosestCopPedIndex) AND NOT IS_PED_IN_WRITHE(ClosestCopPedIndex) AND NOT IS_PED_DEAD_OR_DYING(ClosestCopPedIndex) AND NOT IS_PED_IN_ANY_VEHICLE(ClosestCopPedIndex) AND NOT IS_AMBIENT_SPEECH_PLAYING(ClosestCopPedIndex) AND NOT IS_SCRIPTED_SPEECH_PLAYING(ClosestCopPedIndex) IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), ClosestCopPedIndex) < 50.0 IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) REMOVE_PED_FOR_DIALOGUE(sFranklin1Conversation, 8) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 8, ClosestCopPedIndex, "FRA1POLICE1") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COP1", CONV_PRIORITY_MEDIUM) iCopConversationCounter++ iCopConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 10500) IF ( iCopConversationCounter >= 4 ) SET_LABEL_AS_TRIGGERED("F1_COP1", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF CLEANUP_PED_GROUP(psStreetCopCar1Cops, FALSE, TRUE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar2Cops, FALSE, TRUE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar3Cops, FALSE, TRUE, FALSE) ENDIF ENDPROC // these guys spawn if X cops are dead or after Y time // they just add to the existing cops parked on the street to make it more menacing @BSW PROC MANAGE_COP_REINFORCEMENTS() IF Events[EVENT_COPS_ARRIVE] IF NOT Events[EVENT_COPS_REINFORCEMENTS_SPAWNED] IF SHOULD_COP_REINFORCEMENTS_SPAWN() bShouldAlliesWaitForPlayer = FALSE REQUEST_MODEL(mnCop) REQUEST_MODEL(vsStreetCopCars[COPCAR_STREET_4].ModelName) REQUEST_MODEL(vsStreetCopCars[COPCAR_STREET_5].ModelName) REQUEST_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_4].iRecordingNumber, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_5].iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(mnCop) AND HAS_MODEL_LOADED(vsStreetCopCars[COPCAR_STREET_4].ModelName) AND HAS_MODEL_LOADED(vsStreetCopCars[COPCAR_STREET_5].ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsStreetCopCars[COPCAR_STREET_4].iRecordingNumber, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsStreetCopCars[COPCAR_STREET_5].iRecordingNumber, sVehicleRecordingsFile) vsStreetCopCars[COPCAR_STREET_4].VehicleIndex = CREATE_ENEMY_VEHICLE(vsStreetCopCars[COPCAR_STREET_4], 1000, FALSE) vsStreetCopCars[COPCAR_STREET_5].VehicleIndex = CREATE_ENEMY_VEHICLE(vsStreetCopCars[COPCAR_STREET_5], 1000, FALSE) SET_VEHICLE_SIREN(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex, TRUE) SET_VEHICLE_SIREN(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex, TRUE) // peds esPoliceCarEndReinforcements[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) esPoliceCarEndReinforcements[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) esPoliceCarEndReinforcements[2].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex, PEDTYPE_COP, mnCop, VS_DRIVER) esPoliceCarEndReinforcements[3].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex, PEDTYPE_COP, mnCop, VS_FRONT_RIGHT) GIVE_WEAPON_TO_PED(esPoliceCarEndReinforcements[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(esPoliceCarEndReinforcements[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) GIVE_WEAPON_TO_PED(esPoliceCarEndReinforcements[2].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(esPoliceCarEndReinforcements[3].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(esPoliceCarEndReinforcements[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(esPoliceCarEndReinforcements[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(esPoliceCarEndReinforcements[2].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(esPoliceCarEndReinforcements[3].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_ACCURACY(esPoliceCarEndReinforcements[0].PedIndex, 1) SET_PED_ACCURACY(esPoliceCarEndReinforcements[1].PedIndex, 1) SET_PED_ACCURACY(esPoliceCarEndReinforcements[2].PedIndex, 1) SET_PED_ACCURACY(esPoliceCarEndReinforcements[3].PedIndex, 1) INITIALISE_ENEMY_GROUP(esPoliceCarEndReinforcements, FALSE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_4], sVehicleRecordingsFile, 1.0) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_5], sVehicleRecordingsFile, 1.0) SET_MODEL_AS_NO_LONGER_NEEDED(vsStreetCopCars[COPCAR_STREET_4].ModelName) SET_MODEL_AS_NO_LONGER_NEEDED(vsStreetCopCars[COPCAR_STREET_5].ModelName) SET_MODEL_AS_NO_LONGER_NEEDED(mnCop) INITIALISE_SPAWNPOINTS(EnemySpawnpoints, 7) INITIALISE_SPAWNPOINTS(EnemySidekickSpawnpoints, 7) Events[EVENT_COPS_REINFORCEMENTS_SPAWNED] = TRUE ENDIF ENDIF ELSE VEHICLE_INDEX defendCar = vsStreetCopCars[COPCAR_STREET_4].VehicleIndex IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_1].VehicleIndex) defendCar = vsStreetCopCars[COPCAR_STREET_1].VehicleIndex ELIF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_2].VehicleIndex) defendCar = vsStreetCopCars[COPCAR_STREET_2].VehicleIndex ENDIF //reinforce1 IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) //if the driver is killed IF IS_PED_INJURED(esPoliceCarEndReinforcements[0].PedIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) ENDIF IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) > 95.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_4].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_4].iRecordingNumber, sVehicleRecordingsFile) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esPoliceCarEndReinforcements[0].PedIndex, defendCar, <<0.0, 0.0, 0.0>>) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esPoliceCarEndReinforcements[1].PedIndex, defendCar, <<0.0, 0.0, 0.0>>) ENDIF ENDIF ENDIF //reinforce2 IF DOES_ENTITY_EXIST(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) //if the driver is killed IF IS_PED_INJURED(esPoliceCarEndReinforcements[2].PedIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) ENDIF IF GET_VEHICLE_RECORDING_PLAYBACK_PERCENTAGE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) > 95.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsStreetCopCars[COPCAR_STREET_5].VehicleIndex) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_5].iRecordingNumber, sVehicleRecordingsFile) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esPoliceCarEndReinforcements[2].PedIndex, defendCar, <<0.0, 0.0, 0.0>>) COMBAT_SEQUENCE_EXIT_VEHICLE_THEN_DEFEND(esPoliceCarEndReinforcements[3].PedIndex, defendCar, <<0.0, 0.0, 0.0>>) ENDIF ENDIF ENDIF INT i FOR i = 0 TO ( COUNT_OF(EnemySpawnpoints) - 1 ) UPDATE_SPAWNPOINT(EnemySpawnpoints[i], TRUE) UPDATE_SPAWNPOINT(EnemySidekickSpawnpoints[i], TRUE) ENDFOR ENDIF ENDIF ENDPROC PROC MANAGE_PARKED_VEHICLES() INT i FOR i = 0 TO ( COUNT_OF(vsParkedVehicles) - 1 ) RUN_VEHICLE_TYRE_BURST_CHECK(vsParkedVehicles[i].VehicleIndex, SC_WHEEL_CAR_FRONT_LEFT, <<-0.85, 1.55, -0.15>>, 2.0, FALSE, TRUE, <<-0.85, 2.15, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsParkedVehicles[i].VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT, <<0.85, 1.55, -0.15>>, 2.0, FALSE, TRUE, <<1.0, 0.95, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsParkedVehicles[i].VehicleIndex, SC_WHEEL_CAR_REAR_LEFT, <<-0.85, -1.55, -0.15>>, 2.0, FALSE, TRUE, <<-1.0, -2.1, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) RUN_VEHICLE_TYRE_BURST_CHECK(vsParkedVehicles[i].VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT, <<0.85, -1.55, -0.15>> , 2.0, FALSE, TRUE, <<0.95, -2.15, 0.15>>, 100, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) UPDATE_VEHICLE_FOR_DAMAGE(vsParkedVehicles[i].VehicleIndex, 100 #IF IS_DEBUG_BUILD, bDrawDebugVehicleDamageInfo #ENDIF) ENDFOR ENDPROC PROC START_SPEEDOPHILE_CUTSCENE_RECORDING(PED_SPEEDOPHILE thisSpeedophile) IF thisSpeedophile < MAX_SPEEDOPHILES SET_BOAT_ANCHOR(vsSpeedophiles[thisSpeedophile].VehicleIndex, FALSE) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[thisSpeedophile].VehicleIndex, vsSpeedophiles[thisSpeedophile].iRecordingNumber, sVehicleRecordingsFile) SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(vsSpeedophiles[thisSpeedophile].VehicleIndex, << 1.0, 0.0, 0.0 >>) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[thisSpeedophile].VehicleIndex, 1000) SET_PLAYBACK_SPEED(vsSpeedophiles[thisSpeedophile].VehicleIndex, 1.15) ENDIF ENDPROC FUNC FLOAT GET_DISTANCE_BETWEEN_ENTITY_AND_COORDS(ENTITY_INDEX EntityIndex, VECTOR vPosition) IF DOES_ENTITY_EXIST(EntityIndex) IF NOT IS_ENTITY_DEAD(EntityIndex) RETURN VDIST2(vPosition, GET_ENTITY_COORDS(EntityIndex)) ENDIF ENDIF RETURN -1.0 ENDFUNC PROC RUN_MISSION_OBJECT_CLEANUP_CHECK(INT &iProgress) SWITCH iProgress CASE 0 IF ARE_ALL_PEDS_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<31.568884,-1875.895630,20.774818>>, <<-27.926706,-1827.226196,28.930943>>, 48.0) CLEANUP_MISSION_OBJECT(osDumpsters[0]) CLEANUP_MISSION_OBJECT(osDumpsters[1]) CLEANUP_MISSION_OBJECT(osDumpsters[2]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling first shootout cleanup.") #ENDIF iProgress++ ENDIF BREAK CASE 1 IF ARE_ALL_PEDS_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<16.508175,-1865.456177,21.567459>>, <<-39.960506,-1818.817017,29.483551>>, 48.0) CLEANUP_MISSION_OBJECT(osDumpsters[3]) CLEANUP_MISSION_OBJECT(osDumpsters[4]) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling second shootout cleanup.") #ENDIF iProgress++ ENDIF BREAK CASE 2 IF ARE_ALL_PEDS_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<-1.201015,-1851.073730,22.528681>>, <<-39.960506,-1818.817017,29.483551>>, 56.0) CLEANUP_MISSION_OBJECT_GROUP(osDumpsters) CLEANUP_VEHICLE_GROUP(vsEnemyCars, FALSE, FALSE) CLEANUP_VEHICLE_GROUP(vsParkedVehicles, FALSE, FALSE) CLEANUP_VEHICLE(vsVan, FALSE, FALSE) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling third shootout cleanup.") #ENDIF iProgress++ ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_PORCH_ENEMY(INT &iProgress) SWITCH iProgress CASE 0 IF IS_ANY_PED_IN_ANGLED_AREA_LOCATE(psLamar.PedIndex, GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), <<58.927086,-1922.503174,19.639235>>, <<78.294182,-1898.679810,23.840998>>, 20.0) iProgress++ ENDIF BREAK CASE 1 esPorchEnemies[0].PedIndex = CREATE_ENEMY_PED(mnBalla, <<45.6679, -1922.8232, 20.5738>>, 316.8530, rgEnemies, WEAPONTYPE_CARBINERIFLE, 200) INITIALISE_ENEMY_GROUP(esPorchEnemies, FALSE #IF IS_DEBUG_BUILD, "Porch " #ENDIF) COMBAT_SEQUENCE_GO_TO_COVER_THEN_COMBAT(esPorchEnemies[0].PedIndex, csCoverpoints[62].vPosition, PEDMOVE_RUN, 3000, TRUE, TRUE, TRUE, 200.0) SET_PED_COMBAT_PROPERTIES(esPorchEnemies[0].PedIndex, CM_DEFENSIVE, CAL_PROFESSIONAL, CR_MEDIUM, CA_USE_COVER) SET_PED_DEFENSIVE_AREA_ANGLED(esPorchEnemies[0].PedIndex, <<52.302341,-1920.344116,19.573799>>, <<50.694172,-1919.029419,23.573799>>, 2.5, FALSE) SET_PED_COVER_PROPERTIES(esPorchEnemies[0].PedIndex, TRUE, TRUE, FALSE, FALSE, 12.0, FALSE, 0.0, 5.0, 6.0) SET_PED_SHOOTING_PROPERTIES(esPorchEnemies[0].PedIndex, 8, 150, FIRING_PATTERN_FULL_AUTO) iProgress++ BREAK CASE 2 CLEANUP_ENEMY_GROUP(esPorchEnemies, FALSE, TRUE, FALSE) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esPorchEnemies, bRenderEnemyBlips) BREAK ENDSWITCH ENDPROC FUNC BOOL IS_MISSION_STAGE_GROVE_STREET_SHOOTOUT_COMPLETED(INT &iStageProgress) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_TREVOR)) psTrevor.fDistanceToCoord = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_TREVOR)), vGroveStreetStart) ENDIF IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_FRANKLIN)) psFranklin.fDistanceToCoord = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_FRANKLIN)), vGroveStreetStart) ENDIF REQUEST_WEAPON_ASSET(WEAPONTYPE_SMG) REQUEST_WEAPON_ASSET(WEAPONTYPE_PISTOL) REQUEST_WEAPON_ASSET(WEAPONTYPE_MICROSMG) CLEANUP_VEHICLE_GROUP(vsEnemyCars) RUN_EVENTS_CHECK() MANAGE_CHOP_DURING_SHOOTOUT(psChop) MANAGE_LAMAR_IN_GROVE_STREET(psLamar, PLAYER_PED_ID()) MANAGE_OTHER_PLAYER_PED_IN_GROVE_STREET(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, PLAYER_PED_ID()) MANAGE_CONVERSATIONS_DURING_SHOOTOUT(iConversationProgress) RUN_MISSION_OBJECT_CLEANUP_CHECK(iShootoutCleanupProgress) UPDATE_COVERPOINTS_ACTIVE_STATE_FOR_PEDS(psFranklin.fDistanceToCoord, psTrevor.fDistanceToCoord, csCoverpoints) MANAGE_FILM_CREW_PEDS_BEFORE_JACK(psFilmCrew[FCP_CLAY].iProgress) MANAGE_PARKED_VEHICLES() MANAGE_ENEMY_CARS_AT_INTERSECTION() MANAGE_FIRST_ENEMY_WAVE(Events[EVENT_ENEMY_WAVE_1_SPAWNED], bFirstEnemyGroupInitialised) MANAGE_SECOND_ENEMY_WAVE(Events[EVENT_ENEMY_WAVE_2_SPAWNED], Events[EVENT_ENEMY_WAVE_1_SPAWNED]) MANAGE_3RD_ENEMY_WAVE(Events[EVENT_ENEMY_WAVE_3_SPAWNED], Events[EVENT_ENEMY_WAVE_2_SPAWNED]) MANAGE_CAR_PULLING_OUT(vsEnemyCars[CAR_DRIVEWAY].iProgress) MANAGE_PORCH_ENEMY(esPorchEnemies[0].iProgress) MANAGE_HOUSE_ENEMY(esHouseEnemies[0].iProgress) MANAGE_4TH_ENEMY_WAVE(Events[EVENT_ENEMY_WAVE_4_SPAWNED], Events[EVENT_ENEMY_WAVE_3_SPAWNED]) MANAGE_5TH_ENEMY_WAVE() MANAGE_6TH_ENEMY_WAVE(Events[EVENT_ENEMY_WAVE_6_SPAWNED], Events[EVENT_ENEMY_WAVE_5_SPAWNED], 2) MANAGE_SPAWNER_PEDS() MANAGE_COP_WAVE(Events[EVENT_COPS_SPAWNED]) MANAGE_COP_REINFORCEMENTS() SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_SCTLT") IF NOT IS_PED_INJURED(psLamar.PedIndex) IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > 50 ) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) PRINT_GOD_TEXT_ADVANCED("FRA1_SCTLT", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ENDIF ENDIF BREAK CASE CHAR_TREVOR IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_SCTLF") IF NOT IS_PED_INJURED(psLamar.PedIndex) IF ( GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psLamar.PedIndex) > 50 ) IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) PRINT_GOD_TEXT_ADVANCED("FRA1_SCTLF", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH RUN_VEHICLE_TYRE_BURST_CHECK(vsVan.VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT, <<0.8, 1.5, -0.5>>, 1.25, FALSE, TRUE, <<0.85, 2.2, 0.25>>, 150, 150) RUN_VEHICLE_TYRE_BURST_CHECK(vsVan.VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT, <<1.0, -1.6, -0.5>>, 1.25, FALSE, TRUE, <<0.9, -2.5, 0.25>>, 150, 150) RUN_VEHICLE_TYRE_BURST_CHECK(vsVan.VehicleIndex, SC_WHEEL_CAR_FRONT_LEFT, <<-0.8, 1.55, -0.5>>, 2.0, FALSE, TRUE, <<-0.85, 2.2, 0.25>>, 150, 150) RUN_VEHICLE_TYRE_BURST_CHECK(vsVan.VehicleIndex, SC_WHEEL_CAR_REAR_LEFT, <<-1.0, -1.6, -0.5>>, 2.0, FALSE, TRUE, <<-0.9, -2.5, 0.25>>, 150, 150) IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_ESCGSF") AND NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_ESCGST") IF HAS_LABEL_BEEN_TRIGGERED("F1_GSESCG") AND HAS_LABEL_BEEN_TRIGGERED("F1_GSVIW") IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN PRINT_GOD_TEXT_ADVANCED("FRA1_ESCGSF", DEFAULT_GOD_TEXT_TIME, TRUE) BREAK CASE CHAR_TREVOR PRINT_GOD_TEXT_ADVANCED("FRA1_ESCGST", DEFAULT_GOD_TEXT_TIME, TRUE) BREAK ENDSWITCH ENDIF ENDIF ENDIF SWITCH iStageProgress CASE 0 //shootout setup IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) ENDIF IF IS_VEHICLE_DRIVEABLE(vsVan.VehicleIndex) ACTIVATE_PHYSICS(vsVan.VehicleIndex) SET_ENTITY_DYNAMIC(vsVan.VehicleIndex, TRUE) SMASH_VEHICLE_WINDOW(vsVan.VehicleIndex, SC_WINDOW_FRONT_LEFT) //visually damage the van SET_VEHICLE_TYRE_BURST(vsVan.VehicleIndex, SC_WHEEL_CAR_FRONT_LEFT) SET_VEHICLE_TYRE_BURST(vsVan.VehicleIndex, SC_WHEEL_CAR_FRONT_RIGHT) SET_VEHICLE_TYRE_BURST(vsVan.VehicleIndex, SC_WHEEL_CAR_REAR_RIGHT) SET_VEHICLE_ENGINE_HEALTH(vsVan.VehicleIndex, 50.0) //set engine health and block other peds from blowing up the van SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(vsVan.VehicleIndex, TRUE) ENDIF iStageProgress++ BREAK CASE 1 IF ( bFirstEnemyGroupInitialised = TRUE ) Events[EVENT_SHOOTOUT_STARTED] = TRUE iStageProgress++ ENDIF BREAK CASE 2 IF ( Events[EVENT_COPS_ARRIVE] = TRUE ) iStageProgress++ ENDIF BREAK CASE 3 IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabelFLAMAR) IF HAS_LABEL_BEEN_TRIGGERED("F1_LEFT") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_DIALOGUE_IF_SUBTITLES_OFF) IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_RUNNING_TO_ALLEY) OR IS_PED_IN_PED_STATE(psLamar, PED_STATE_WAITING_IN_ALLEY) OR IS_PED_IN_PED_STATE(psLamar, PED_STATE_RUNNING_TO_RIVER) PRINT_GOD_TEXT_ADVANCED(sLabelFLAMAR, DEFAULT_GOD_TEXT_TIME, TRUE) TRIGGER_MUSIC_EVENT("FRA1_FIGHT_LEAVE") bRenderEnemyBlips = FALSE bCopConversationsAllowed = TRUE ENDIF ENDIF ENDIF ENDIF //this check might require a better check in case player does not go through the alley IF IS_ENTITY_IN_ANGLED_AREA_LOCATE(PLAYER_PED_ID(), <<-46.707905,-1871.813354,21.337345>>, <<-30.788389,-1852.596924,28.817188>>, 24.0) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_RUN_TO_SPEEDOPHILES), "RUN TO SPEEDOPHILES", FALSE) IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_SHOOTOUT_MAIN") STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_MAIN") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_APPROACH_RIVER") START_AUDIO_SCENE("FRANKLIN_1_APPROACH_RIVER") ENDIF IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_SHOOTOUT_POLICE_ARRIVE") STOP_AUDIO_SCENE("FRANKLIN_1_SHOOTOUT_POLICE_ARRIVE") ENDIF ENDIF IF ARE_ALL_PEDS_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_TREVOR), GET_PED_INDEX(CHAR_FRANKLIN), psLamar.PedIndex, <<-58.721535,-1894.919189,21.326895>>, <<-86.694153,-1870.268921,-0.703830>>, 34.0) CLEANUP_SPAWNPOINTS(EnemySpawnpoints, FALSE) CLEANUP_SPAWNPOINTS(EnemySidekickSpawnpoints, FALSE) CLEANUP_ENEMY_GROUP(esGroup9, TRUE) CLEANUP_MISSION_OBJECT(osCokeBlock, FALSE) ENDIF IF ( bMusicEventWaterArriveTriggered = FALSE ) IF IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<-183.247894,-1877.746460,-8.911816>>, <<-121.605896,-1804.794434,29.815378>>, 72.0) IF TRIGGER_MUSIC_EVENT("FRA1_WATER_ARRIVE") bMusicEventWaterArriveTriggered = TRUE ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF ENDIF PREPARE_MUSIC_EVENT("FRA1_SPEED") //request start seasharks recordings REQUEST_VEHICLE_RECORDING(911, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(912, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(913, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(921, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(922, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(923, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(931, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(932, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(933, sVehicleRecordingsFile) //request main seasharks recordings REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) IF (IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(GET_PED_INDEX(CHAR_TREVOR)) AND IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(GET_PED_INDEX(CHAR_FRANKLIN)) AND IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(psLamar.PedIndex)) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(911, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(912, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(913, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(921, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(922, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(923, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(931, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(932, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(933, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) CLEAR_PED_SECONDARY_TASK(psFilmCrew[FCP_JACKEDGIRL].PedIndex) ENDIF //lamar IF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_1 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 911 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 912 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 913 ELIF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_2 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 921 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 922 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 923 ELIF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_3 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 931 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 932 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 933 ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_STARTING_RECORDING_PLAYBACK) //Trevor IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_1 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_2 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_3 ENDIF GO_TO_PED_STATE(psTrevor, PED_STATE_STARTING_RECORDING_PLAYBACK) //Franklin IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_1 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_2 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_3 ENDIF GO_TO_PED_STATE(psFranklin, PED_STATE_STARTING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_SITTING_IN_VEHICLE) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION() ENDIF CLEAR_HELP() CLEAR_PRINTS() //make sure the remaining enemy blips are removed and enemies removed as well //probably best to remove all enemy groups CLEANUP_SPAWNPOINTS(EnemySpawnpoints, FALSE) CLEANUP_SPAWNPOINTS(EnemySidekickSpawnpoints, FALSE) CLEANUP_ENEMY_GROUP(esGroup9, FALSE, FALSE) CLEANUP_VEHICLE_GROUP(vsEnemyCars, FALSE, FALSE) CLEANUP_VEHICLE_GROUP(vsParkedVehicles, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esPoliceCarEndReinforcements, FALSE, FALSE) CLEANUP_MISSION_OBJECT(osCokeBlock, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection1Left, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection1Right, FALSE, FALSE) CLEANUP_ENEMY_GROUP(esCarIntersection2Left, FALSE, FALSE) CLEANUP_PED_GROUP(psSwat, TRUE, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar1Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar2Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar3Cops, FALSE, FALSE) CLEANUP_VEHICLE(vsPoliceHeli, TRUE, FALSE) CLEANUP_VEHICLE_GROUP(vsStreetCopCars, FALSE, FALSE) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_1].iRecordingNumber, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_2].iRecordingNumber, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(vsStreetCopCars[COPCAR_STREET_3].iRecordingNumber, sVehicleRecordingsFile) STOP_SOUND(iPhotoShootSoundID) RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_CAMERAS") RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\FRANKLIN_1_GIRLS") CLEANUP_MISSION_OBJECT_GROUP(osDumpsters, FALSE) REMOVE_COVERPOINTS(csCoverpoints, bCoverpointsCreated) //disable peds to be damaged only by player IF NOT IS_PED_INJURED(GET_OTHER_PLAYER_PED_INDEX()) REMOVE_PED_FROM_GROUP(GET_OTHER_PLAYER_PED_INDEX()) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) REMOVE_PED_FROM_GROUP(psLamar.PedIndex) ENDIF IF NOT IS_PED_INJURED(psChop.PedIndex) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(psChop.PedIndex, FALSE) ENDIF REMOVE_ANIM_DICT("missfra1") IF ( iPlayerFranklinKills >= 5 AND iPlayerTrevorKills >= 5 ) //INFORM_STAT_FRANKLIN_ONE_5_ENEMIES_KILLED_AS_FRANKLIN_AND_TREVOR() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Awarding mission stat for 5 kills as Franklin and 5 kills as Trevor.") #ENDIF ENDIF TRIGGER_MUSIC_EVENT("FRA1_SPEED") START_SPEEDOPHILE_CUTSCENE_RECORDING(psFranklin.ePedVehicle) START_SPEEDOPHILE_CUTSCENE_RECORDING(psTrevor.ePedVehicle) START_SPEEDOPHILE_CUTSCENE_RECORDING(psLamar.ePedVehicle) IF NOT DOES_CAM_EXIST(ScriptedCamera) DESTROY_ALL_CAMS() ScriptedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) PLAY_CAM_ANIM(ScriptedCamera, "jetski_escape_cam", "missfra1", << -129.73, -1857.22, 0.35 >>, << 0.0, 0.0, 0.0 >>) DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) RENDER_SCRIPT_CAMS(TRUE, FALSE) DISABLE_CELLPHONE_THIS_FRAME_ONLY() ENDIF SETTIMERA(0) bAllowHotSwap = FALSE SET_SPEEDOPHILE_POSITIONS_IN_INT(g_iFranklin1VehicleChoice, psLamar.ePedVehicle, psFranklin.ePedVehicle, psTrevor.ePedVehicle) STOP_AUDIO_SCENE("FRANKLIN_1_APPROACH_RIVER") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_START") iStageProgress++ ENDIF ENDIF BREAK CASE 4 REQUEST_MODEL(mnBalla) REQUEST_MODEL(vsEnemyLeftChaseCar.ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2189178 HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLNCR") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLNCR", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLNCR", TRUE) ENDIF ENDIF IF ( TIMERA() > 3600 ) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, 6000.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 6000.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 6000.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) REMOVE_VEHICLE_RECORDING(911, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(912, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(913, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(921, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(922, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(923, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(931, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(932, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(933, sVehicleRecordingsFile) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, TRUE) vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_FRONT vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_RIGHT vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_LEFT iStageProgress++ ELIF ( TIMERA() > 3300 ) IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_BOAT) = CAM_VIEW_MODE_FIRST_PERSON IF ( bFirstPersonFlashPlayed = FALSE ) ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") bFirstPersonFlashPlayed = TRUE ENDIF ENDIF ENDIF BREAK CASE 5 SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) REMOVE_ANIM_DICT("missfra1") RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC MANAGE_LAMAR_IN_SPEEDOPHILE(PED_STRUCT &ped, VEH_STRUCT &vehicle, PED_INDEX TargetPedIndex) IF DOES_ENTITY_EXIST(ped.PedIndex) AND NOT IS_ENTITY_DEAD(ped.PedIndex) IF DOES_ENTITY_EXIST(TargetPedIndex) AND NOT IS_PED_INJURED(TargetPedIndex) ped.fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(ped.PedIndex, TargetPedIndex) //get distance to player SET_PED_RESET_FLAG(ped.PedIndex, PRF_DontSuppressUseNavMeshToNavigateToVehicleDoorWhenVehicleInWater, TRUE) //fix for B*2027310 SET_PED_RESET_FLAG(ped.PedIndex, PRF_DisableFriendlyGunReactAudio, TRUE) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.25) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_FLOAT(ped.fDistanceToTargetPed), 1.5) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_STRING_FROM_FLOAT(GET_PED_HEALTH_RATIO(ped.PedIndex)), 1.75) ENDIF ped.sDebugName = "Lamar" #ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) vehicle.fPlaybackTime = GET_TIME_POSITION_IN_RECORDING(vehicle.VehicleIndex) //get playback time ENDIF ENDIF ENDIF SWITCH ped.eState CASE PED_STATE_STARTING_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) vehicle.fPlaybackSpeed = 1.15 //playback start speed IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vehicle, sVehicleRecordingsFile, vehicle.fPlaybackSpeed, FALSE, 1000.0) ENDIF ELSE //give weapons and set as only damaged by player GIVE_WEAPON_TO_PED(ped.PedIndex, WEAPONTYPE_MICROSMG, INFINITE_AMMO, FALSE, TRUE) SET_CURRENT_PED_WEAPON(ped.PedIndex, WEAPONTYPE_MICROSMG, FALSE) SET_PED_DIES_IN_WATER(ped.PedIndex, FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(ped.PedIndex, TRUE) IF NOT DOES_BLIP_EXIST(ped.BlipIndex) ped.BlipIndex = CREATE_BLIP_FOR_ENTITY(ped.PedIndex, FALSE) ENDIF ped.iProgress = 0 GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF ( vehicle.fPlaybackTime > 3000.0) //start rubber banding to player ped after 3 seconds SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN RUBBER_BAND_PLAYBACK_SPEED_FOR_TRIGGER_VEHICLE(vehicle.VehicleIndex, vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, vehicle.fPlaybackSpeed, vehicle.fPlaybackTime #IF IS_DEBUG_BUILD, bPrintDebugOutput, "Lamar's", "Franklin's" #ENDIF) BREAK CASE CHAR_TREVOR RUBBER_BAND_PLAYBACK_SPEED_FOR_TRIGGER_VEHICLE(vehicle.VehicleIndex, vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, vehicle.fPlaybackSpeed, vehicle.fPlaybackTime #IF IS_DEBUG_BUILD, bPrintDebugOutput, "Lamar's", "Trevor's" #ENDIF) BREAK ENDSWITCH //clamp max buddy playback speed, fix for B*1917187 vehicle.fPlaybackSpeed = CLAMP(vehicle.fPlaybackSpeed, 0.0, 2.0) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, vehicle.fPlaybackSpeed) ENDIF ENDIF SWITCH ped.iProgress //handle Lamar's task during vehicle recording playback CASE 0 //Lamar sitting in the speedophile IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) AND NOT IS_ENEMY_GROUP_DEAD(esLeftChaseEnemies) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF ( vehicle.fPlaybackTime > 12000.0 ) ped.bHasTask = FALSE ped.iProgress++ ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 //Lamar looking at the incoming enemy car IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) TASK_LOOK_AT_ENTITY(ped.PedIndex, vsEnemyLeftChaseCar.VehicleIndex, 3000) ENDIF ENDIF ped.bHasTask = TRUE ENDIF IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) AND NOT IS_ENEMY_GROUP_DEAD(esLeftChaseEnemies) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF ( vehicle.fPlaybackTime > 15500.0 ) ped.bHasTask = FALSE ped.iProgress++ ENDIF ENDIF ENDIF ENDIF BREAK CASE 2 //Lamar in combat from speedophile with the enemy car IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) AND NOT IS_ENEMY_GROUP_DEAD(esLeftChaseEnemies) IF vehicle.fPlaybackTime >= fChaseAlliesCanFire AND vehicle.fPlaybackTime < fChaseHeliSpawnTime SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex , CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex , CA_ALWAYS_FLEE, FALSE) SET_PED_FLEE_ATTRIBUTES(ped.PedIndex , FA_NEVER_FLEE, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped.PedIndex, 100.0) SET_PED_SHOOTING_PROPERTIES(ped.PedIndex, 10, 50) TASK_LOOK_AT_ENTITY(ped.PedIndex, vsEnemyLeftChaseCar.VehicleIndex, 1500) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) ped.bHasTask = TRUE ENDIF ENDIF ENDIF ELSE IF vehicle.fPlaybackTime >= fChaseHeliSpawnTime CLEAR_PED_TASKS(ped.PedIndex) ped.bHasTask = FALSE ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF BREAK CASE PED_STATE_ENDING_RECORDING_PLAYBACK IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) SET_PED_INTO_VEHICLE(ped.PedIndex, vehicle.VehicleIndex, VS_DRIVER) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, 0.8) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) ENDIF ENDIF ENDIF ENDIF SET_ENTITY_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_ENTITY_HEALTH(vehicle.VehicleIndex, GET_ENTITY_HEALTH(vehicle.VehicleIndex) + 500) SET_VEHICLE_ENGINE_HEALTH(vehicle.VehicleIndex, GET_VEHICLE_ENGINE_HEALTH(vehicle.VehicleIndex) + 500) SET_VEHICLE_PETROL_TANK_HEALTH(vehicle.VehicleIndex, GET_VEHICLE_PETROL_TANK_HEALTH(vehicle.VehicleIndex) + 500) GIVE_WEAPON_TO_PED(ped.PedIndex, WEAPONTYPE_MICROSMG, INFINITE_AMMO, FALSE, TRUE) GIVE_WEAPON_TO_PED(ped.PedIndex, WEAPONTYPE_ASSAULTRIFLE, INFINITE_AMMO, FALSE, TRUE) SET_PED_CAN_RAGDOLL(ped.PedIndex, FALSE) SET_PED_SUFFERS_CRITICAL_HITS(ped.PedIndex, FALSE) SET_PED_CONFIG_FLAG(ped.PedIndex, PCF_DisableHurt, TRUE) CLEAR_PED_TASKS(ped.PedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) ped.bHasTask = TRUE ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN RUBBER_BAND_PLAYBACK_SPEED_FOR_TRIGGER_VEHICLE(vehicle.VehicleIndex, vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, vehicle.fPlaybackSpeed, vehicle.fPlaybackTime #IF IS_DEBUG_BUILD, bPrintDebugOutput, "Lamar's", "Franklin's" #ENDIF) BREAK CASE CHAR_TREVOR RUBBER_BAND_PLAYBACK_SPEED_FOR_TRIGGER_VEHICLE(vehicle.VehicleIndex, vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, vehicle.fPlaybackSpeed, vehicle.fPlaybackTime #IF IS_DEBUG_BUILD, bPrintDebugOutput, "Lamar's", "Trevor's" #ENDIF) BREAK ENDSWITCH SET_PLAYBACK_SPEED(vehicle.VehicleIndex, vehicle.fPlaybackSpeed) ELSE REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(ped, PED_STATE_EXITING_VEHICLE) ENDIF ENDIF ENDIF IF ( ped.fDistanceToTargetPed >= 300.0 ) IF NOT IS_ENTITY_ON_SCREEN(ped.PedIndex) DELETE_PED(ped.PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF NOT IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF BREAK CASE PED_STATE_EXITING_VEHICLE //Lamar exiting speedophile IF ( ped.bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 1175.89, -2582.79, 35.03 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(ped.PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) SET_CURRENT_PED_WEAPON(ped.PedIndex, WEAPONTYPE_ASSAULTRIFLE, TRUE) SET_ENTITY_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH * 2) SET_PED_MAX_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH * 2) ped.bHasTask = TRUE ENDIF IF NOT IS_PED_IN_ANY_VEHICLE(ped.PedIndex) WEAPON_TYPE eWeaponType IF NOT GET_CURRENT_PED_WEAPON(ped.PedIndex, eWeaponType) SET_CURRENT_PED_WEAPON(ped.PedIndex, WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF ENDIF IF ( ped.bHasTask = TRUE ) IF NOT IS_PED_IN_ANY_VEHICLE(ped.PedIndex) IF GET_SCRIPT_TASK_STATUS(ped.PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK GO_TO_PED_STATE(ped, PED_STATE_FLEE_COPS_ON_FOOT) ENDIF ENDIF ENDIF IF ( ped.fDistanceToTargetPed < 15.0 ) IF NOT IS_PED_IN_ANY_VEHICLE(ped.PedIndex) SET_ENTITY_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF ENDIF IF ( ped.fDistanceToTargetPed > 200.0 ) IF IS_ENTITY_ON_SCREEN(ped.PedIndex) SET_PED_KEEP_TASK(ped.PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex) ELSE DELETE_PED(ped.PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ELSE DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF BREAK CASE PED_STATE_FLEE_COPS_ON_FOOT //Lamar fleeing cops on foot IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(ped.PedIndex) PED_INDEX CopPedIndex CopPedIndex = GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(ped.PedIndex, RELGROUPHASH_COP) IF DOES_ENTITY_EXIST(CopPedIndex) #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(ped.PedIndex, FALSE), GET_ENTITY_COORDS(CopPedIndex, FALSE), 255, 255, 255) #ENDIF TASK_SMART_FLEE_PED(ped.PedIndex, CopPedIndex, 300, INFINITE_TASK_TIME) ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Not found nearby cops. Fleeing coords.") #ENDIF VECTOR vFleeCoords vFleeCoords = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(ped.PedIndex, << 0.0, -2.0, 0.0 >>) TASK_SMART_FLEE_COORD(ped.PedIndex, vFleeCoords, 300.0, INFINITE_TASK_TIME) ENDIF SET_PED_FLEE_ATTRIBUTES(ped.PedIndex, FA_USE_VEHICLE, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, TRUE) ped.iTimer = GET_GAME_TIMER() ped.bHasTask = TRUE ENDIF IF ( ped.fDistanceToTargetPed < 15.0 ) IF ( bCopsChaseFinished = FALSE ) SET_ENTITY_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(ped.PedIndex, MAX_BUDDY_PED_HEALTH) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF ENDIF IF ( ped.fDistanceToTargetPed > 200.0 ) IF IS_ENTITY_ON_SCREEN(ped.PedIndex) SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex) ELSE DELETE_PED(ped.PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ELSE DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF IF HAS_TIME_PASSED(7000, ped.iTimer) GO_TO_PED_STATE(ped, PED_STATE_FLEE_COPS_ON_FOOT) ENDIF BREAK CASE PED_STATE_FOLLOWING_PLAYER IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(ped.PedIndex) IF NOT IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID()) SET_PED_AS_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID()) ENDIF SET_GROUP_SEPARATION_RANGE(PLAYER_GROUP_ID(), BUDDY_SEPARATION_DIST) SET_PED_GROUP_MEMBER_PASSENGER_INDEX(ped.PedIndex, VS_FRONT_RIGHT) SET_PED_CAN_TELEPORT_TO_GROUP_LEADER(ped.PedIndex, PLAYER_GROUP_ID(), TRUE) SET_PED_CONFIG_FLAG(ped.PedIndex, PCF_TeleportToLeaderVehicle, FALSE) SET_PED_ACCURACY(ped.PedIndex, 20) SET_PED_SHOOT_RATE(ped.PedIndex, 115) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(ped.PedIndex, CA_DO_DRIVEBYS, TRUE) SET_COMBAT_FLOAT(ped.PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.9) SET_COMBAT_FLOAT(ped.PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) //apparently this is not needed for group members SET_PED_COMBAT_MOVEMENT(ped.PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(ped.PedIndex, TargetPedIndex, << 0.0, 0.0, 0.0 >>, 7.5) SET_PED_CAN_RAGDOLL(ped.PedIndex, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_BULLET_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(ped.PedIndex, RBF_PLAYER_IMPACT) SET_PED_SUFFERS_CRITICAL_HITS(ped.PedIndex, FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(ped.PedIndex, FALSE) SET_PED_CONFIG_FLAG(ped.PedIndex, PCF_DisableHurt, TRUE) SET_PED_CONFIG_FLAG(ped.PedIndex, PCF_GetOutUndriveableVehicle, FALSE) SET_PED_CONFIG_FLAG(ped.PedIndex, PCF_OnlyAttackLawIfPlayerIsWanted, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ePlayerBuddy = PLAYER_BUDDY_LAMAR ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE) IF ( ped.fDistanceToTargetPed > BUDDY_SEPARATION_DIST ) OR NOT IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID()) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped with debug name ", ped.sDebugName, " is not player group member any more.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_WAITING_FOR_PLAYER) ENDIF ENDIF BREAK CASE PED_STATE_WAITING_FOR_PLAYER IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_MOVEMENT(ped.PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(ped.PedIndex, TargetPedIndex, << 0.0, 0.0, 0.0 >>, 7.5) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped.PedIndex, FALSE) ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE) IF ( ped.fDistanceToTargetPed <= BUDDY_SEPARATION_DIST / 3 ) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC MANAGE_PLAYER_PED_IN_SPEEDOPHILE(PED_INDEX PedIndex, PED_STRUCT &ped, VEH_STRUCT &vehicle, VEH_STRUCT &targetvehicle) IF DOES_ENTITY_EXIST(PedIndex) AND NOT IS_ENTITY_DEAD(PedIndex) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) AND NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) SWITCH ped.eState CASE PED_STATE_STARTING_RECORDING_PLAYBACK vehicle.fPlaybackSpeed = 1.15 //playback start speed IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vehicle, sVehicleRecordingsFile, vehicle.fPlaybackSpeed, FALSE, 1000.0) ENDIF ELSE GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF IS_PED_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) IF DOES_BLIP_EXIST(vehicle.BlipIndex) IF IS_THIS_PRINT_BEING_DISPLAYED("FRA1_GETBACKIN") CLEAR_PRINTS() ENDIF REMOVE_BLIP(vehicle.BlipIndex) bDisplayBuddyBlips = TRUE ENDIF ELSE //create blip for player's speedophile and display god text if player gets off IF NOT DOES_BLIP_EXIST(vehicle.BlipIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_GETBACKIN") IF IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) CLEAR_PRINTS() ENDIF ENDIF vehicle.BlipIndex = CREATE_BLIP_FOR_VEHICLE(vehicle.VehicleIndex) PRINT_GOD_TEXT_ADVANCED("FRA1_GETBACKIN", DEFAULT_GOD_TEXT_TIME, TRUE) bDisplayBuddyBlips = FALSE ENDIF ENDIF IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF ( targetvehicle.fPlaybackTime > 3000.0 ) IF IS_PLAYER_CONTROL_ON(PLAYER_ID()) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_ENDING_RECORDING_PLAYBACK IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) SET_PED_INTO_VEHICLE(PedIndex, vehicle.VehicleIndex, VS_DRIVER) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, 0.5) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) ENDIF ENDIF ENDIF ENDIF ped.bHasTask = TRUE ENDIF IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF ( targetvehicle.fPlaybackTime > 73500.0 ) IF IS_PLAYER_CONTROL_ON(PLAYER_ID()) CLEAR_PED_TASKS(PedIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex) GO_TO_PED_STATE(ped, PED_STATE_FLEE_COPS_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_FLEE_COPS_ON_FOOT BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC MANAGE_OTHER_PLAYER_PED_IN_SPEEDOPHILE(PED_INDEX PedIndex, PED_STRUCT &ped, VEH_STRUCT &vehicle, PED_INDEX TargetPedIndex, VEH_STRUCT &targetvehicle, BOOL bLoseCopsStage) IF DOES_ENTITY_EXIST(PedIndex) AND NOT IS_ENTITY_DEAD(PedIndex) IF DOES_ENTITY_EXIST(TargetPedIndex) AND NOT IS_PED_INJURED(TargetPedIndex) #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.65) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.25) DRAW_DEBUG_TEXT_ABOVE_ENTITY(PedIndex, GET_STRING_FROM_FLOAT(GET_PED_HEALTH_RATIO(PedIndex)), 1.45) ENDIF SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN ped.sDebugName = "Trevor" BREAK CASE CHAR_TREVOR ped.sDebugName = "Franklin" BREAK ENDSWITCH #ENDIF ped.fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(PedIndex, TargetPedIndex) //get distance to player SET_PED_RESET_FLAG(PedIndex, PRF_DisableFriendlyGunReactAudio, TRUE) SET_PED_RESET_FLAG(PedIndex, PRF_DontSuppressUseNavMeshToNavigateToVehicleDoorWhenVehicleInWater, TRUE) //fix for B*2027310 IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) vehicle.fPlaybackTime = GET_TIME_POSITION_IN_RECORDING(vehicle.VehicleIndex) //get playback time ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF DOES_BLIP_EXIST(vehicle.BlipIndex) IF IS_PED_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) REMOVE_BLIP(vehicle.BlipIndex) ENDIF IF ( bLoseCopsStage = TRUE ) REMOVE_BLIP(vehicle.BlipIndex) ENDIF ELSE IF NOT IS_PED_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) IF ( bLoseCopsStage = FALSE ) vehicle.BlipIndex = CREATE_BLIP_FOR_VEHICLE(vehicle.VehicleIndex) ENDIF ENDIF ENDIF ELSE IF DOES_BLIP_EXIST(vehicle.BlipIndex) REMOVE_BLIP(vehicle.BlipIndex) ENDIF ENDIF ENDIF SWITCH ped.eState CASE PED_STATE_STARTING_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) vehicle.fPlaybackSpeed = 1.15 //playback start speed IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vehicle, sVehicleRecordingsFile, vehicle.fPlaybackSpeed, FALSE, 1000.0) ENDIF ELSE SET_PED_DIES_IN_WATER(PedIndex, FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(PedIndex, TRUE) GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, targetvehicle.fPlaybackSpeed) ENDIF ENDIF ENDIF IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) AND NOT IS_ENEMY_GROUP_DEAD(esLeftChaseEnemies) IF targetvehicle.fPlaybackTime >= fChaseAlliesCanFire + 1250 AND targetvehicle.fPlaybackTime < fChaseHeliSpawnTime SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex , CA_ALWAYS_FIGHT, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex , CA_ALWAYS_FLEE, FALSE) SET_PED_FLEE_ATTRIBUTES(PedIndex , FA_NEVER_FLEE, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(PedIndex, 100.0) SET_PED_SHOOTING_PROPERTIES(PedIndex, 10, 50) TASK_LOOK_AT_ENTITY(PedIndex, vsEnemyLeftChaseCar.VehicleIndex, 1500) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) ped.bHasTask = TRUE ENDIF ENDIF ENDIF ELSE IF targetvehicle.fPlaybackTime >= fChaseHeliSpawnTime CLEAR_PED_TASKS(PedIndex) ped.bHasTask = FALSE ENDIF ENDIF BREAK CASE PED_STATE_CATCHING_UP_WITH_RECORDING IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PED_IN_VEHICLE(PedIndex, vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) FLOAT fTimeFromPosition, fDistanceToRoute VECTOR vVehiclePosition, vPositionInRecording RECORDING_ID recordingID vehicle.fPlaybackSpeed = 1.0 fTimeFromPosition = targetvehicle.fPlaybackTime vVehiclePosition = GET_ENTITY_COORDS(vehicle.VehicleIndex) recordingID = GET_VEHICLE_RECORDING_ID(vehicle.iRecordingNumber, sVehicleRecordingsFile) vPositionInRecording = GET_POSITION_OF_VEHICLE_RECORDING_ID_AT_TIME(recordingID, fTimeFromPosition) fDistanceToRoute = GET_DISTANCE_BETWEEN_COORDS(vPositionInRecording, vVehiclePosition) IF ( fDistanceToRoute <= 13.0 ) fTimeFromPosition = targetvehicle.fPlaybackTime - 500 ELIF ( fDistanceToRoute > 13.0 AND fDistanceToRoute <= 20.0 ) fTimeFromPosition = targetvehicle.fPlaybackTime - 1000 ELIF ( fDistanceToRoute > 20.0 AND fDistanceToRoute <= 30.0 ) fTimeFromPosition = targetvehicle.fPlaybackTime - 2000 ELSE fTimeFromPosition = targetvehicle.fPlaybackTime - 3000 ENDIF START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, fTimeFromPosition) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), "######################################") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Playback time ", targetvehicle.fPlaybackTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": fDistanceToRoute ", fDistanceToRoute, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": fTimeFromPosition ", fTimeFromPosition, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), "######################################") #ENDIF ELSE IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF vehicle.fPlaybackTime < targetVehicle.fPlaybackTime FLOAT fCatchUpSpeed FLOAT fTimeDifference fTimeDifference = targetVehicle.fPlaybackTime - vehicle.fPlaybackTime IF ( fTimeDifference > 3000 ) fCatchUpSpeed = 1.4 ELIF ( fTimeDifference > 2000 ) fCatchUpSpeed = 1.3 ELIF ( fTimeDifference > 1000 ) fCatchUpSpeed = 1.2 ELIF ( fTimeDifference > 500 ) fCatchUpSpeed = 1.15 ELSE fCatchUpSpeed = 1.1 ENDIF CONVERGE_VALUE(vehicle.fPlaybackSpeed, fCatchUpSpeed, 0.01, TRUE) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, vehicle.fPlaybackSpeed) #IF IS_DEBUG_BUILD DRAW_DEBUG_TEXT_ABOVE_ENTITY(vehicle.VehicleIndex, GET_STRING_FROM_FLOAT(vehicle.fPlaybackSpeed), 2.0) #ENDIF ELSE GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ELSE SET_PED_INTO_VEHICLE(PedIndex, vehicle.VehicleIndex, VS_DRIVER) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_ENDING_RECORDING_PLAYBACK IF ( ped.bHasTask = FALSE ) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) SET_PED_INTO_VEHICLE(PedIndex, vehicle.VehicleIndex, VS_DRIVER) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, 73000.0) SET_PLAYBACK_SPEED(vehicle.VehicleIndex, 0.8) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) ENDIF ENDIF ENDIF ENDIF SET_ENTITY_HEALTH(PedIndex, MAX_BUDDY_PED_HEALTH) SET_PED_MAX_HEALTH(PedIndex, MAX_BUDDY_PED_HEALTH) GIVE_WEAPON_TO_PED(PedIndex, WEAPONTYPE_MICROSMG, INFINITE_AMMO, FALSE, TRUE) GIVE_WEAPON_TO_PED(PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO, FALSE, TRUE) SET_PED_SUFFERS_CRITICAL_HITS(PedIndex, FALSE) SET_PED_DIES_IN_WATER(PedIndex, FALSE) ped.bHasTask = TRUE ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vehicle.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) //rubber band? ELSE REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(ped, PED_STATE_EXITING_VEHICLE) ENDIF ENDIF ENDIF IF ( ped.fDistanceToTargetPed > 200.0 ) IF IS_ENTITY_ON_SCREEN(PedIndex) SET_PED_AS_NO_LONGER_NEEDED(PedIndex) ELSE DELETE_PED(PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ELSE DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF BREAK CASE PED_STATE_EXITING_VEHICLE //Trevor/Franklin exiting speedophile and climbing ladder IF ( ped.bHasTask = FALSE ) SEQUENCE_INDEX SequenceIndex OPEN_SEQUENCE_TASK(SequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 767.01, -2921.19, 5.53 >>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 2) //TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<764.0746, -2939.4189, 4.8384>>, PEDMOVE_RUN, DEFAULT_TIME_BEFORE_WARP * 2, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING) CLOSE_SEQUENCE_TASK(SequenceIndex) TASK_PERFORM_SEQUENCE(PedIndex, SequenceIndex) CLEAR_SEQUENCE_TASK(SequenceIndex) SET_PED_DIES_IN_WATER(PedIndex, FALSE) ped.bHasTask = TRUE ENDIF IF NOT IS_PED_IN_ANY_VEHICLE(PedIndex) IF IS_PED_CLIMBING(TargetPedIndex) AND NOT IS_PED_CLIMBING(PedIndex) IF IS_ENTITY_AT_COORD(TargetPedIndex, <<767.137512,-2920.180420,3.604882>>, << 1.5, 1.5, 4.0 >>) IF GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK IF IS_ENTITY_AT_COORD(PedIndex, <<768.390015,-2910.733398,1.063230>>,<<14.000000,10.000000,5.000000>>) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF ENDIF ENDIF ENDIF IF GET_SCRIPT_TASK_STATUS(PedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK IF ( ped.fDistanceToTargetPed < 15.0 ) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ELSE GO_TO_PED_STATE(ped, PED_STATE_FLEE_COPS_ON_FOOT) ENDIF ENDIF ENDIF IF ( ped.fDistanceToTargetPed > 200.0 ) IF IS_ENTITY_ON_SCREEN(PedIndex) SET_PED_AS_NO_LONGER_NEEDED(PedIndex) ELSE DELETE_PED(PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ELSE DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF BREAK CASE PED_STATE_FLEE_COPS_ON_FOOT //Trevor/Franklin fleeing cops on foot IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(PedIndex) PED_INDEX CopPedIndex CopPedIndex = GET_CLOSEST_PED_FROM_RELATIONSHIP_GROUP_FOR_PED(PedIndex, RELGROUPHASH_COP) IF DOES_ENTITY_EXIST(CopPedIndex) #IF IS_DEBUG_BUILD DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PedIndex, FALSE), GET_ENTITY_COORDS(CopPedIndex, FALSE), 255, 255, 255) #ENDIF TASK_SMART_FLEE_PED(PedIndex, CopPedIndex, 300, INFINITE_TASK_TIME) ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Not found nearby cops. Fleeing coords.") #ENDIF VECTOR vFleeCoords vFleeCoords = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PedIndex, << 0.0, -2.0, 0.0 >>) TASK_SMART_FLEE_COORD(PedIndex, vFleeCoords, 300.0, INFINITE_TASK_TIME) ENDIF SET_PED_FLEE_ATTRIBUTES(PedIndex, FA_USE_VEHICLE, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE) ped.iTimer = GET_GAME_TIMER() ped.bHasTask = TRUE ENDIF IF ( ped.fDistanceToTargetPed < 15.0 ) //determine to go to combat with cops or follow player GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF IF ( ped.fDistanceToTargetPed > 200.0 ) IF IS_ENTITY_ON_SCREEN(PedIndex) SET_PED_AS_NO_LONGER_NEEDED(PedIndex) ELSE DELETE_PED(PedIndex) ENDIF IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF IS_ENTITY_ON_SCREEN(vehicle.VehicleIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ELSE DELETE_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF DOES_BLIP_EXIST(ped.BlipIndex) REMOVE_BLIP(ped.BlipIndex) ENDIF ENDIF IF HAS_TIME_PASSED(7000, ped.iTimer) GO_TO_PED_STATE(ped, PED_STATE_FLEE_COPS_ON_FOOT) ENDIF BREAK CASE PED_STATE_FOLLOWING_PLAYER IF ( ped.bHasTask = FALSE ) CLEAR_PED_TASKS(PedIndex) IF NOT IS_PED_GROUP_MEMBER(PedIndex, PLAYER_GROUP_ID()) SET_PED_AS_GROUP_MEMBER(PedIndex, PLAYER_GROUP_ID()) ENDIF SET_PED_GROUP_MEMBER_PASSENGER_INDEX(PedIndex, VS_FRONT_RIGHT) SET_PED_CAN_TELEPORT_TO_GROUP_LEADER(PedIndex, PLAYER_GROUP_ID(), TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_TeleportToLeaderVehicle, FALSE) SET_PED_ACCURACY(PedIndex, 20) SET_PED_SHOOT_RATE(PedIndex, 115) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_USE_COVER, TRUE) SET_PED_COMBAT_ATTRIBUTES(PedIndex, CA_DO_DRIVEBYS, TRUE) SET_COMBAT_FLOAT(PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.9) SET_COMBAT_FLOAT(PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) //apparently this is not needed for group members SET_PED_COMBAT_MOVEMENT(PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(PedIndex, TargetPedIndex, << 0.0, 0.0, 0.0 >>, 7.5) SET_PED_CAN_RAGDOLL(PedIndex, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_BULLET_IMPACT) SET_RAGDOLL_BLOCKING_FLAGS(PedIndex, RBF_PLAYER_IMPACT) SET_PED_SUFFERS_CRITICAL_HITS(PedIndex, FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(PedIndex, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_DisableHurt, TRUE) SET_PED_CONFIG_FLAG(PedIndex, PCF_GetOutUndriveableVehicle, FALSE) SET_PED_CONFIG_FLAG(PedIndex, PCF_OnlyAttackLawIfPlayerIsWanted, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN ePlayerBuddy = PLAYER_BUDDY_TREVOR BREAK CASE CHAR_TREVOR ePlayerBuddy = PLAYER_BUDDY_FRANKLIN BREAK ENDSWITCH ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE) IF ( ped.fDistanceToTargetPed > BUDDY_SEPARATION_DIST ) OR NOT IS_PED_GROUP_MEMBER(PedIndex, PLAYER_GROUP_ID()) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Ped with debug name ", ped.sDebugName, " is not player group member any more.") #ENDIF GO_TO_PED_STATE(ped, PED_STATE_WAITING_FOR_PLAYER) ENDIF ENDIF BREAK CASE PED_STATE_WAITING_FOR_PLAYER IF ( ped.bHasTask = FALSE ) SET_PED_COMBAT_MOVEMENT(PedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(PedIndex, TargetPedIndex, << 0.0, 0.0, 0.0 >>, 7.5) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, FALSE) ped.bHasTask = TRUE ENDIF IF ( ped.bHasTask = TRUE) IF ( ped.fDistanceToTargetPed <= BUDDY_SEPARATION_DIST / 3 ) GO_TO_PED_STATE(ped, PED_STATE_FOLLOWING_PLAYER) ENDIF ENDIF BREAK CASE PED_STATE_WAITING_FOR_TASK_AFTER_SWITCH GO_TO_PED_STATE(ped, PED_STATE_CATCHING_UP_WITH_RECORDING) BREAK ENDSWITCH ENDIF ENDIF ENDPROC FUNC BOOL IS_MISSION_STAGE_RUN_TO_SPEEDOPHILES_COMPLETED(INT &iStageProgress) MANAGE_COP_WAVE(bCopWaveSpawned) MANAGE_LAMAR_IN_GROVE_STREET(psLamar, PLAYER_PED_ID()) MANAGE_OTHER_PLAYER_PED_IN_GROVE_STREET(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, PLAYER_PED_ID()) MANAGE_FILM_CREW_PEDS_BEFORE_JACK(psFilmCrew[FCP_CLAY].iProgress) IF ( psLamar.bFleeing = TRUE ) IF ( psLamar.bWaitingForPlayer = TRUE ) IF HAS_TIME_PASSED(3000, psLamar.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM02", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LHILL") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LHILL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LHILL", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM03") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, <<-41.722290,-1866.694702,28.490503>>, <<-61.971512,-1891.405518,4.101753>>, 16.0) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM03", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM03", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM04") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_INJURED(psLamar.PedIndex) IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(psLamar.PedIndex) IF ( GET_PED_WAYPOINT_PROGRESS(psLamar.PedIndex) > 40 ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM04", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM04", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_FILMCREW_SCARED() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM05") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_RUNNING_TO_VEHICLE) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM05", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM05", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_FILMCREW_SCARED() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM06") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_WAITING_AT_VEHICLE) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM06", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM06", TRUE) psLamar.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_PED_IN_PED_STATE(psLamar, PED_STATE_WAITING_AT_VEHICLE) OR IS_PED_IN_PED_STATE(psLamar, PED_STATE_SITTING_IN_VEHICLE) IF NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) AND NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) AND NOT IS_PED_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF HAS_TIME_PASSED(5000, psLamar.iTimer) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM07", CONV_PRIORITY_MEDIUM) IF NOT IS_PED_INJURED(psLamar.PedIndex) TASK_LOOK_AT_ENTITY(psLamar.PedIndex, PLAYER_PED_ID(), 2000, SLF_WHILE_NOT_IN_FOV) ENDIF psLamar.iTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( bFilmCrewAttacked = TRUE ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM08F") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_COM08T") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM08F", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM08F", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM08T", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_COM08T", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF ( psFilmCrew[FCP_CLAY].eCleanupReason <> PED_CLEANUP_NO_CLEANUP ) IF ( psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = FALSE ) SWITCH psFilmCrew[FCP_CLAY].eCleanupReason CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM09F", CONV_PRIORITY_MEDIUM) psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = TRUE ENDIF BREAK CASE PED_CLEANUP_KILLED_BY_PLAYER_AS_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_COM09F", CONV_PRIORITY_MEDIUM) //uses the same root here psFilmCrew[FCP_CLAY].bCleanupConversationTriggered = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF SWITCH iStageProgress CASE 0 iStageProgress++ BREAK CASE 1 IF ( bMusicEventWaterArriveTriggered = FALSE ) IF IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, <<-183.247894,-1877.746460,-8.911816>>, <<-121.605896,-1804.794434,29.815378>>, 72.0) IF TRIGGER_MUSIC_EVENT("FRA1_WATER_ARRIVE") bMusicEventWaterArriveTriggered = TRUE ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex) AND IS_VEHICLE_DRIVEABLE(vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex) IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, TRUE) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex, TRUE) OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex, TRUE) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF ENDIF PREPARE_MUSIC_EVENT("FRA1_SPEED") //request start seasharks recordings REQUEST_VEHICLE_RECORDING(911, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(912, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(913, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(921, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(922, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(923, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(931, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(932, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(933, sVehicleRecordingsFile) //request main seasharks recordings REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) REQUEST_VEHICLE_RECORDING(SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) IF (IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(GET_PED_INDEX(CHAR_TREVOR)) AND IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(GET_PED_INDEX(CHAR_FRANKLIN)) AND IS_FRIENDLY_PED_IN_ANY_SPEEDOPHILE(psLamar.PedIndex)) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(911, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(912, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(913, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(921, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(922, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(923, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(931, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(932, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(933, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) IF NOT IS_PED_INJURED(psFilmCrew[FCP_JACKEDGIRL].PedIndex) CLEAR_PED_SECONDARY_TASK(psFilmCrew[FCP_JACKEDGIRL].PedIndex) ENDIF //lamar IF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_1 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 911 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 912 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 913 ELIF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_2 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 921 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 922 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 923 ELIF GET_VEHICLE_PED_IS_USING(psLamar.PedIndex) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psLamar.ePedVehicle = SPEEDOPHILE_3 vsSpeedophiles[SPEEDOPHILE_1].iRecordingNumber = 931 vsSpeedophiles[SPEEDOPHILE_2].iRecordingNumber = 932 vsSpeedophiles[SPEEDOPHILE_3].iRecordingNumber = 933 ENDIF GO_TO_PED_STATE(psLamar, PED_STATE_STARTING_RECORDING_PLAYBACK) //Trevor IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_1 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_2 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_TREVOR)) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psTrevor.ePedVehicle = SPEEDOPHILE_3 ENDIF GO_TO_PED_STATE(psTrevor, PED_STATE_STARTING_RECORDING_PLAYBACK) //Franklin IF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_1 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_2].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_2 ELIF GET_VEHICLE_PED_IS_USING(GET_PED_INDEX(CHAR_FRANKLIN)) = vsSpeedophiles[SPEEDOPHILE_3].VehicleIndex psFranklin.ePedVehicle = SPEEDOPHILE_3 ENDIF GO_TO_PED_STATE(psFranklin, PED_STATE_STARTING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psFilmCrew[FCP_JACKEDGIRL], PED_STATE_SITTING_IN_VEHICLE) TRIGGER_MUSIC_EVENT("FRA1_SPEED") START_SPEEDOPHILE_CUTSCENE_RECORDING(psFranklin.ePedVehicle) START_SPEEDOPHILE_CUTSCENE_RECORDING(psTrevor.ePedVehicle) START_SPEEDOPHILE_CUTSCENE_RECORDING(psLamar.ePedVehicle) CLEANUP_PED_GROUP(psStreetCopCar1Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar2Cops, FALSE, FALSE) CLEANUP_PED_GROUP(psStreetCopCar3Cops, FALSE, FALSE) IF NOT DOES_CAM_EXIST(ScriptedCamera) DESTROY_ALL_CAMS() ScriptedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) PLAY_CAM_ANIM(ScriptedCamera, "jetski_escape_cam", "missfra1", << -129.73, -1857.22, 0.35 >>, << 0.0, 0.0, 0.0 >>) DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) RENDER_SCRIPT_CAMS(TRUE, FALSE) DISABLE_CELLPHONE_THIS_FRAME_ONLY() ENDIF SETTIMERA(0) bAllowHotSwap = FALSE SET_SPEEDOPHILE_POSITIONS_IN_INT(g_iFranklin1VehicleChoice, psLamar.ePedVehicle, psFranklin.ePedVehicle, psTrevor.ePedVehicle) STOP_AUDIO_SCENE("FRANKLIN_1_APPROACH_RIVER") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_START") iStageProgress++ ENDIF ENDIF BREAK CASE 2 REQUEST_MODEL(mnBalla) REQUEST_MODEL(vsEnemyLeftChaseCar.ModelName) REQUEST_VEHICLE_RECORDING(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2189178 HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLNCR") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLNCR", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLNCR", TRUE) ENDIF ENDIF IF ( TIMERA() > 3600 ) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_FRONT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_RIGHT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, SPEEDOPHILE_RECORDING_LEFT, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, 5500.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) REMOVE_VEHICLE_RECORDING(911, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(912, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(913, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(921, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(922, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(923, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(931, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(932, sVehicleRecordingsFile) REMOVE_VEHICLE_RECORDING(933, sVehicleRecordingsFile) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psLamar.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, TRUE) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, TRUE) vsSpeedophiles[psLamar.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_FRONT vsSpeedophiles[psTrevor.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_RIGHT vsSpeedophiles[psFranklin.ePedVehicle].iRecordingNumber = SPEEDOPHILE_RECORDING_LEFT iStageProgress++ ELIF ( TIMERA() > 3300 ) IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_BOAT) = CAM_VIEW_MODE_FIRST_PERSON IF ( bFirstPersonFlashPlayed = FALSE ) ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") bFirstPersonFlashPlayed = TRUE ENDIF ENDIF ENDIF BREAK CASE 3 SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) RENDER_SCRIPT_CAMS(FALSE, FALSE) DESTROY_ALL_CAMS() DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) REMOVE_ANIM_DICT("missfra1") RETURN TRUE BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC MANAGE_COP_HELICOPTER_IN_CHASE(PED_STRUCT &ped, FLOAT fPlaybackTime, FLOAT fPlaybackSpeed) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsPoliceHeli.VehicleIndex, 0.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.0) ENDIF #ENDIF SWITCH ped.eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vsPoliceHeli.VehicleIndex) IF ( fPlaybackTime > 15000.0 ) REQUEST_MODEL(S_M_Y_SWAT_01) REQUEST_MODEL(vsPoliceHeli.ModelName) REQUEST_VEHICLE_RECORDING(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(S_M_Y_SWAT_01) AND HAS_MODEL_LOADED(vsPoliceHeli.ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) IF ( fPlaybackTime >= fChaseHeliSpawnTime ) vsPoliceHeli.VehicleIndex = CREATE_VEHICLE(vsPoliceHeli.ModelName, vsPoliceHeli.vPosition, vsPoliceHeli.fHeading) psSwat[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_DRIVER) psSwat[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_BACK_LEFT) psSwat[2].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsPoliceHeli.VehicleIndex, PEDTYPE_COP, S_M_Y_SWAT_01, VS_BACK_RIGHT) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psSwat[0].PedIndex, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psSwat[1].PedIndex, FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psSwat[2].PedIndex, FALSE) FOR i = 0 TO 2 GIVE_WEAPON_TO_PED(psSwat[i].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO, FALSE) GIVE_WEAPON_TO_PED(psSwat[i].PedIndex, WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, FALSE) SET_ENTITY_HEALTH(psSwat[i].PedIndex, 250) ADD_ARMOUR_TO_PED(psSwat[i].PedIndex, 100) SET_PED_HEARING_RANGE(psSwat[i].PedIndex, 150) SET_PED_SEEING_RANGE(psSwat[i].PedIndex, 150) SET_PED_ID_RANGE(psSwat[i].PedIndex, 150) SET_PED_HIGHLY_PERCEPTIVE(psSwat[i].PedIndex, TRUE) SET_PED_SHOOT_RATE(psSwat[i].PedIndex, 50) SET_PED_ACCURACY(psSwat[i].PedIndex, 5) ENDFOR TASK_VEHICLE_AIM_AT_PED(psSwat[0].PedIndex, psLamar.PedIndex) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 8, NULL, "FRA1POLICE1") SET_ENTITY_FOR_NULL_CONV_PED(8, vsPoliceHeli.VehicleIndex) SET_VEHICLE_LIVERY(vsPoliceHeli.VehicleIndex, 0) START_PLAYBACK_RECORDED_VEHICLE(vsPoliceHeli.VehicleIndex, vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsPoliceHeli.VehicleIndex, TRUE) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsPoliceHeli.VehicleIndex) SET_PLAYBACK_SPEED(vsPoliceHeli.VehicleIndex, fPlaybackSpeed) SET_HELI_BLADES_FULL_SPEED(vsPoliceHeli.VehicleIndex) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_SWAT_01) SET_MODEL_AS_NO_LONGER_NEEDED(vsPoliceHeli.ModelName) START_AUDIO_SCENE("FRANKLIN_1_JETSKI_HELI_ESCAPE") IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 3) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) ENDIF psSwat[0].iPedConversationTimer = 0 iSearchLightChangeTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 9000) GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK UPDATE_WANTED_POSITION_THIS_FRAME(PLAYER_ID()) IF IS_VEHICLE_DRIVEABLE(vsPoliceHeli.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsPoliceHeli.VehicleIndex) SET_PLAYBACK_SPEED(vsPoliceHeli.VehicleIndex, fPlaybackSpeed) ENDIF IF NOT IS_PED_INJURED(psSwat[0].PedIndex) IF GET_GAME_TIMER() - iSearchLightChangeTimer > 0 SWITCH GET_RANDOM_INT_IN_RANGE(0, 3) CASE 0 IF NOT IS_PED_INJURED(psLamar.PedIndex) TASK_VEHICLE_AIM_AT_PED(psSwat[0].PedIndex, psLamar.PedIndex) ENDIF BREAK CASE 1 IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_TREVOR)) TASK_VEHICLE_AIM_AT_PED(psSwat[0].PedIndex, GET_PED_INDEX(CHAR_TREVOR)) ENDIF BREAK CASE 2 IF NOT IS_PED_INJURED(GET_PED_INDEX(CHAR_FRANKLIN)) TASK_VEHICLE_AIM_AT_PED(psSwat[0].PedIndex, GET_PED_INDEX(CHAR_FRANKLIN)) ENDIF BREAK ENDSWITCH iSearchLightChangeTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) ENDIF ENDIF ENDIF IF ( fPlaybackTime >= 80000.0 ) IF DOES_ENTITY_EXIST(vsPoliceHeli.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsPoliceHeli.VehicleIndex) STOP_PLAYBACK_RECORDED_VEHICLE(vsPoliceHeli.VehicleIndex) REMOVE_VEHICLE_RECORDING(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) FOR i = 0 TO 2 IF DOES_ENTITY_EXIST(psSwat[i].PedIndex) IF NOT IS_PED_INJURED(psSwat[i].PedIndex) TASK_COMBAT_PED(psSwat[i].PedIndex, PLAYER_PED_ID(), COMBAT_PED_PREVENT_CHANGING_TARGET) SET_PED_KEEP_TASK(psSwat[i].PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(psSwat[i].PedIndex) ENDIF ENDIF ENDFOR SET_VEHICLE_AS_NO_LONGER_NEEDED(vsPoliceHeli.VehicleIndex) ENDIF ENDIF /* SET_CREATE_RANDOM_COPS(TRUE) SET_DISPATCH_COPS_FOR_PLAYER(PLAYER_ID(), TRUE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) SET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID(), 0.1) */ GO_TO_PED_STATE(ped, PED_STATE_COMBAT_FROM_VEHICLE) ENDIF CLEANUP_PED_GROUP(psSwat, FALSE, TRUE) CLEANUP_VEHICLE(vsPoliceHeli, FALSE, TRUE) IF NOT IS_VEHICLE_DRIVEABLE(vsPoliceHeli.VehicleIndex) REMOVE_VEHICLE_RECORDING(vsPoliceHeli.iRecordingNumber, sVehicleRecordingsFile) ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_COP_BOAT(PED_STRUCT &ped) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE ) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vsCopBoat.VehicleIndex, 0.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(ped.PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(ped.eState), 1.0) ENDIF #ENDIF SWITCH ped.eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vsCopBoat.VehicleIndex) IF HAS_LABEL_BEEN_TRIGGERED("LOSE_WANTED") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<696.544495,-2563.472168,-3.594771>>, <<679.044983,-2604.659912,10.139076>>, 16.000000) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_MODEL(vsCopBoat.ModelName) REQUEST_VEHICLE_RECORDING(vsCopBoat.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_MODEL_LOADED(vsCopBoat.ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsCopBoat.iRecordingNumber, sVehicleRecordingsFile) vsCopBoat.VehicleIndex = CREATE_VEHICLE(vsCopBoat.ModelName, vsCopBoat.vPosition, vsCopBoat.fHeading) psBoatCops[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsCopBoat.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) psBoatCops[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vsCopBoat.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_BACK_LEFT) REPEAT 2 i GIVE_WEAPON_TO_PED(psBoatCops[i].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO, FALSE) GIVE_WEAPON_TO_PED(psBoatCops[i].PedIndex, WEAPONTYPE_CARBINERIFLE, INFINITE_AMMO, FALSE) SET_ENTITY_HEALTH(psBoatCops[i].PedIndex, 250) ADD_ARMOUR_TO_PED(psBoatCops[i].PedIndex, 100) SET_PED_HEARING_RANGE(psBoatCops[i].PedIndex, 150) SET_PED_SEEING_RANGE(psBoatCops[i].PedIndex, 150) SET_PED_ID_RANGE(psBoatCops[i].PedIndex, 150) SET_PED_HIGHLY_PERCEPTIVE(psBoatCops[i].PedIndex, TRUE) SET_PED_SHOOT_RATE(psBoatCops[i].PedIndex, 50) SET_PED_ACCURACY(psBoatCops[i].PedIndex, 5) ENDREPEAT SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psBoatCops[0].PedIndex, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsCopBoat.VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vsCopBoat.VehicleIndex, vsCopBoat.iRecordingNumber, sVehicleRecordingsFile) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vsCopBoat.VehicleIndex, 500.0) SET_PLAYBACK_SPEED(vsCopBoat.VehicleIndex, 1.15) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vsCopBoat.VehicleIndex) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) SET_MODEL_AS_NO_LONGER_NEEDED(vsCopBoat.ModelName) GO_TO_PED_STATE(ped, PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vsCopBoat.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsCopBoat.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsCopBoat.VehicleIndex) IF GET_TIME_POSITION_IN_RECORDING(vsCopBoat.VehicleIndex) > 2250.0 STOP_PLAYBACK_RECORDED_VEHICLE(vsCopBoat.VehicleIndex) REMOVE_VEHICLE_RECORDING(vsCopBoat.iRecordingNumber, sVehicleRecordingsFile) REPEAT 2 i IF DOES_ENTITY_EXIST(psBoatCops[i].PedIndex) IF NOT IS_PED_INJURED(psBoatCops[i].PedIndex) TASK_COMBAT_PED(psBoatCops[i].PedIndex, PLAYER_PED_ID()) SET_PED_KEEP_TASK(psBoatCops[i].PedIndex, TRUE) SET_PED_AS_NO_LONGER_NEEDED(psBoatCops[i].PedIndex) ENDIF ENDIF ENDREPEAT SET_VEHICLE_AS_NO_LONGER_NEEDED(vsCopBoat.VehicleIndex) ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_CONVERSATIONS_DURING_SPEEDOPHILE_RIDE(INT &iProgress) INT i INT iEnemySpeakerID STRING sEnemyVoiceName STRING sEnemyConversationRoot //might need a label here to store current root playing IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_TREVOR)) OR NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN)) KILL_FACE_TO_FACE_CONVERSATION() ENDIF ENDIF SWITCH iProgress CASE 0 //reset timers iEnemyConversationTimer = GET_GAME_TIMER() iEnemyRandomConversationDelay = 2000 iProgress++ BREAK CASE 1 IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRESC1") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRESC1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_SRESC1", TRUE) ENDIF ENDIF ENDIF ENDIF //handle conversation for Lamar spotting the incoming drive by car IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CARIN") IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsEnemyLeftChaseCar.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF ( psLamar.iProgress >= 1 ) IF DOES_ENTITY_EXIST(esLeftChaseEnemies[0].PedIndex) OR DOES_ENTITY_EXIST(esLeftChaseEnemies[1].PedIndex) IF ( esLeftChaseEnemies[0].iProgress > 0 ) //enemy ped not doing drive by OR ( esLeftChaseEnemies[1].iProgress > 0 ) //enemy ped not doing drive by IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CARIN", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CARIN", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF //handle conversation for enemies in car doing drive by IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF IS_VEHICLE_DRIVEABLE(vsEnemyLeftChaseCar.VehicleIndex) IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime < 25000.0 ) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF DOES_ENTITY_EXIST(esLeftChaseEnemies[0].PedIndex) OR DOES_ENTITY_EXIST(esLeftChaseEnemies[1].PedIndex) IF esLeftChaseEnemies[0].iProgress > 0 //ped doing drive by - if is ped in combat from vehicle state? OR esLeftChaseEnemies[1].iProgress > 0 //ped doing drive by - if is ped in combat from vehicle state? IF HAS_TIME_PASSED(iEnemyRandomConversationDelay, iEnemyConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) i = GET_RANDOM_INT_IN_RANGE(0, 2) IF NOT IS_ENTITY_DEAD(esLeftChaseEnemies[i].PedIndex) SWITCH i CASE 0 iEnemySpeakerID = BALLA5SPEAKERID sEnemyVoiceName = BALLA5VOICENAME sEnemyConversationRoot = "F1_BALL5D" BREAK CASE 1 iEnemySpeakerID = BALLA6SPEAKERID sEnemyVoiceName = BALLA6VOICENAME sEnemyConversationRoot = "F1_BALL6D" BREAK ENDSWITCH ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, iEnemySpeakerID, esLeftChaseEnemies[i].PedIndex, sEnemyVoiceName) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", sEnemyConversationRoot, CONV_PRIORITY_MEDIUM) iEnemyConversationTimer = GET_GAME_TIMER() iEnemyRandomConversationDelay = 3000 + GET_RANDOM_INT_IN_RANGE(0, 2001) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRPH") IF DOES_ENTITY_EXIST(psSwat[0].PedIndex) IF NOT IS_ENTITY_DEAD(psSwat[0].PedIndex) IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime > 27000.0 ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRPH", CONV_PRIORITY_MEDIUM) psSwat[0].iPedConversationTimer = GET_GAME_TIMER() SET_LABEL_AS_TRIGGERED("F1_SRPH", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") IF DOES_ENTITY_EXIST(psFilmCrew[FCP_JACKEDGIRL].PedIndex) AND NOT IS_ENTITY_DEAD(psFilmCrew[FCP_JACKEDGIRL].PedIndex) AND IS_PED_IN_VEHICLE(psFilmCrew[FCP_JACKEDGIRL].PedIndex, vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex) IF ( vsEnemyLeftChaseCar.bDriverDead = TRUE ) OR ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime > 25000.0 ) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) ADD_PED_FOR_DIALOGUE(sFranklin1Conversation, 4, psFilmCrew[FCP_JACKEDGIRL].PedIndex, "FRA1MODEL1") IF IS_PED_SITTING_IN_VEHICLE_SEAT(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRGIRLT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_SRGIRLT", TRUE) START_AUDIO_SCENE("FRANKLIN_1_JETSKI_GIRL_JUMP") SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", TRUE) SET_AUDIO_FLAG("DisableAbortConversationForDeathAndInjury", TRUE) ENDIF ELIF IS_PED_SITTING_IN_VEHICLE_SEAT(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[SPEEDOPHILE_1].VehicleIndex, VS_DRIVER) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRGIRLF", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_SRGIRLF", TRUE) START_AUDIO_SCENE("FRANKLIN_1_JETSKI_GIRL_JUMP") SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", TRUE) SET_AUDIO_FLAG("DisableAbortConversationForDeathAndInjury", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TEXT_LABEL_23 LocalConversationRoot, LocalConversationLabel LocalConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() LocalConversationLabel = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL() IF NOT IS_STRING_NULL_OR_EMPTY(LocalConversationRoot) AND NOT IS_STRING_NULL_OR_EMPTY(LocalConversationLabel) IF ARE_STRINGS_EQUAL(LocalConversationRoot, "F1_SRGIRLT") OR ARE_STRINGS_EQUAL(LocalConversationRoot, "F1_SRGIRLF") IF ARE_STRINGS_EQUAL(LocalConversationLabel, "F1_SRGIRLT_7") OR ARE_STRINGS_EQUAL(LocalConversationLabel, "F1_SRGIRLF_6") OR ( psFilmCrew[FCP_JACKEDGIRL].eState = PED_STATE_FLEEING ) IF ( psFilmCrew[FCP_JACKEDGIRL].eState = PED_STATE_FLEEING ) KILL_FACE_TO_FACE_CONVERSATION() ENDIF bJackedGirlConversationFinished = TRUE ENDIF ENDIF ENDIF ELSE bJackedGirlConversationFinished = TRUE SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", FALSE) SET_AUDIO_FLAG("DisableAbortConversationForDeathAndInjury", FALSE) ENDIF ENDIF IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime >= 29750.0 ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRESC2") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRESC2", CONV_PRIORITY_VERY_HIGH) SET_LABEL_AS_TRIGGERED("F1_SRESC2", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRESC3") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRESC3", CONV_PRIORITY_VERY_HIGH) SET_LABEL_AS_TRIGGERED("F1_SRESC3", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRRACE") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") AND iJackedGirlAmbientSpeechDelay <> 0 AND HAS_TIME_PASSED(3000, iJackedGirlAmbientSpeechDelay) ) OR ( NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLF") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRGIRLT") ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRRACE", CONV_PRIORITY_VERY_HIGH) SET_LABEL_AS_TRIGGERED("F1_SRRACE", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC UPDATE_VEHICLE_SPINNING_WHEN_SHOT(VEHICLE_INDEX VehicleIndex, INT &iSpinTimer, FLOAT fPlaybackSpeed, BOOL bSpinLeft = FALSE) IF IS_VEHICLE_DRIVEABLE(VehicleIndex) PED_INDEX DriverPedIndex = GET_PED_IN_VEHICLE_SEAT(VehicleIndex, VS_DRIVER) IF iSpinTimer = 0 IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(VehicleIndex) iSpinTimer = 1 ENDIF ELIF iSpinTimer = 1 IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(VehicleIndex) IF ABSF(GET_ENTITY_SPEED(VehicleIndex)) > 4.0 IF DOES_ENTITY_EXIST(DriverPedIndex) AND IS_PED_INJURED(DriverPedIndex) //check for player damage to the driver and award a stat if player killed the driver ped ENTITY_INDEX SourceOfDeathEntity = GET_PED_SOURCE_OF_DEATH(DriverPedIndex) IF DOES_ENTITY_EXIST(SourceOfDeathEntity) IF ( GET_PED_INDEX_FROM_ENTITY_INDEX(SourceOfDeathEntity) = PLAYER_PED_ID() ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player killed the driver ped of the enemy vehicle.") #ENDIF //INFORM_STAT_FRANKLIN_ONE_DRIVE_BY_FOILED() ENDIF ENDIF STOP_PLAYBACK_RECORDED_VEHICLE(VehicleIndex) SET_VEHICLE_ENGINE_HEALTH(VehicleIndex, 30.0) SET_VEHICLE_PETROL_TANK_HEALTH(VehicleIndex, 2000.0) REPLAY_RECORD_BACK_FOR_TIME(5, 0, REPLAY_IMPORTANCE_HIGH) iSpinTimer = GET_GAME_TIMER() ENDIF ENDIF ENDIF ELIF GET_GAME_TIMER() - iSpinTimer < 800 INT iForceModifier = 1 IF NOT bSpinLeft iForceModifier = -1 ENDIF APPLY_FORCE_TO_ENTITY(VehicleIndex, APPLY_TYPE_FORCE, << 20.0 * iForceModifier * fPlaybackSpeed, 0.0, 0.0 >>, <<0.0, 1.8, 0.0>>, 0, TRUE, TRUE, TRUE) ELSE //Kill the car off SET_VEHICLE_ENGINE_HEALTH(VehicleIndex, -100.0) SET_ENTITY_HEALTH(VehicleIndex, 1) //kill the remainining passengers PED_INDEX FrontRightPedIndex = GET_PED_IN_VEHICLE_SEAT(VehicleIndex, VS_FRONT_RIGHT) PED_INDEX BackLeftPedIndex = GET_PED_IN_VEHICLE_SEAT(VehicleIndex, VS_BACK_LEFT) PED_INDEX BackRightPedIndex = GET_PED_IN_VEHICLE_SEAT(VehicleIndex, VS_BACK_RIGHT) IF NOT IS_PED_INJURED(FrontRightPedIndex) SET_ENTITY_HEALTH(FrontRightPedIndex, 0) ENDIF IF NOT IS_PED_INJURED(BackLeftPedIndex) SET_ENTITY_HEALTH(BackLeftPedIndex, 0) ENDIF IF NOT IS_PED_INJURED(BackRightPedIndex) SET_ENTITY_HEALTH(BackRightPedIndex, 0) ENDIF //stop audio scenes when vehicle is taken out IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_01_JETSKI_CHASE_CAR") STOP_AUDIO_SCENE("FRANKLIN_01_JETSKI_CHASE_CAR") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Stopping audio scene FRANKLIN_01_JETSKI_CHASE_CAR") #ENDIF ENDIF IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_CAR_ARRIVE") STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_CAR_ARRIVE") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Stopping audio scene FRANKLIN_1_JETSKI_CAR_ARRIVE") #ENDIF ENDIF IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyLeftChaseCar.VehicleIndex) ENDIF ENDIF vsEnemyLeftChaseCar.bDriverDead = TRUE ENDIF ENDIF ENDPROC PROC MANAGE_LEFT_ENEMY_CAR_DURING_SPEEDOPHILE_RIDE(INT &iProgress, FLOAT fPlaybackTime, FLOAT fPlaybackSpeed) SWITCH iProgress CASE 0 IF NOT DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) REQUEST_VEHICLE_RECORDING(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(mnBalla) AND HAS_MODEL_LOADED(vsEnemyLeftChaseCar.ModelName) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vsEnemyLeftChaseCar.iRecordingNumber, sVehicleRecordingsFile) IF fPlaybackTime > 7000.0 vsEnemyLeftChaseCar.VehicleIndex = CREATE_ENEMY_VEHICLE(vsEnemyLeftChaseCar, 1000, TRUE, VEHICLELOCK_UNLOCKED, -1, -1 #IF IS_DEBUG_BUILD, "Chase Car" #ENDIF) esLeftChaseEnemies[0].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyLeftChaseCar.VehicleIndex, VS_DRIVER, rgEnemies, WEAPONTYPE_MICROSMG, 245) esLeftChaseEnemies[1].PedIndex = CREATE_ENEMY_PED_IN_VEHICLE(mnBalla, vsEnemyLeftChaseCar.VehicleIndex, VS_FRONT_RIGHT, rgEnemies, WEAPONTYPE_MICROSMG, 245) INITIALISE_ENEMY_GROUP(esLeftChaseEnemies, FALSE #IF IS_DEBUG_BUILD, "Chase " #ENDIF) bRenderEnemyBlips = FALSE //make the car invisible and don't render enemy blips SET_ENTITY_VISIBLE(vsEnemyLeftChaseCar.VehicleIndex, FALSE) //just after creation SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vsEnemyLeftChaseCar.VehicleIndex, TRUE) START_VEHICLE_RECORDING_PLAYBACK_FOR_VEHICLE(vsEnemyLeftChaseCar, sVehicleRecordingsFile, fPlaybackSpeed, FALSE, 50.0)// + 500.0) SET_MODEL_AS_NO_LONGER_NEEDED(mnBalla) SET_MODEL_AS_NO_LONGER_NEEDED(vsEnemyLeftChaseCar.ModelName) START_AUDIO_SCENE("FRANKLIN_01_JETSKI_CHASE_CAR") ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsEnemyLeftChaseCar.VehicleIndex, "FRANKLIN_01_GHETTO_SAFARI_GANG_CAR") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_CAR_ARRIVE") iProgress++ ENDIF ENDIF ENDIF BREAK CASE 1 IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) SET_PLAYBACK_SPEED(vsEnemyLeftChaseCar.VehicleIndex, fPlaybackSpeed) ENDIF IF NOT IS_ENTITY_VISIBLE(vsEnemyLeftChaseCar.VehicleIndex) //make the car visible and render enemy blips IF ( fPlaybackTime > 8000.0 ) SET_ENTITY_VISIBLE(vsEnemyLeftChaseCar.VehicleIndex, TRUE) bRenderEnemyBlips = TRUE ENDIF ENDIF ENDIF IF ( fPlaybackTime > 30000.0 ) IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_01_JETSKI_CHASE_CAR") STOP_AUDIO_SCENE("FRANKLIN_01_JETSKI_CHASE_CAR") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Stopping audio scene FRANKLIN_01_JETSKI_CHASE_CAR") #ENDIF ENDIF IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_CAR_ARRIVE") STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_CAR_ARRIVE") #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Stopping audio scene FRANKLIN_1_JETSKI_CAR_ARRIVE") #ENDIF ENDIF IF DOES_ENTITY_EXIST(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_ENTITY_DEAD(vsEnemyLeftChaseCar.VehicleIndex) REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vsEnemyLeftChaseCar.VehicleIndex) ENDIF ENDIF ENDIF IF ( fPlaybackTime > 35000.0 ) //cleanup vehicle and peds based on recording playback time SET_VEHICLE_AS_NO_LONGER_NEEDED(vsEnemyLeftChaseCar.VehicleIndex) IF DOES_ENTITY_EXIST(esLeftChaseEnemies[0].PedIndex) SET_PED_AS_NO_LONGER_NEEDED(esLeftChaseEnemies[0].PedIndex) ENDIF IF DOES_ENTITY_EXIST(esLeftChaseEnemies[1].PedIndex) SET_PED_AS_NO_LONGER_NEEDED(esLeftChaseEnemies[1].PedIndex) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(esLeftChaseEnemies[0].PedIndex) IF NOT IS_ENTITY_DEAD(esLeftChaseEnemies[0].PedIndex) SWITCH esLeftChaseEnemies[0].iProgress CASE 0 IF ( fPlaybackTime >= 15350.0 ) OR IS_PED_SHOOTING_AT_ENEMIES(PLAYER_PED_ID(), esLeftChaseEnemies) esLeftChaseEnemies[0].bHasTask = FALSE esLeftChaseEnemies[0].iProgress++ ENDIF BREAK CASE 1 IF (esLeftChaseEnemies[0].bHasTask = FALSE ) SET_PED_SEEING_RANGE(esLeftChaseEnemies[0].PedIndex, 100.0) SET_PED_HEARING_RANGE(esLeftChaseEnemies[0].PedIndex, 100.0) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[0].PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[0].PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[0].PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_SHOOTING_PROPERTIES(esLeftChaseEnemies[0].PedIndex, 5, 50) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esLeftChaseEnemies[0].PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esLeftChaseEnemies[0].PedIndex, TRUE) esLeftChaseEnemies[0].bHasTask = TRUE ENDIF //kill the ped for now when playback stops IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_PED_IN_CURRENT_CONVERSATION(esLeftChaseEnemies[0].PedIndex) SET_ENTITY_HEALTH(esLeftChaseEnemies[0].PedIndex, 0) vsEnemyLeftChaseCar.bDriverDead = TRUE ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF IF DOES_ENTITY_EXIST(esLeftChaseEnemies[1].PedIndex) IF NOT IS_ENTITY_DEAD(esLeftChaseEnemies[1].PedIndex) SWITCH esLeftChaseEnemies[1].iProgress CASE 0 IF ( fPlaybackTime >= 15000.0 ) OR IS_PED_SHOOTING_AT_ENEMIES(PLAYER_PED_ID(), esLeftChaseEnemies) esLeftChaseEnemies[1].bHasTask = FALSE esLeftChaseEnemies[1].iProgress++ ENDIF BREAK CASE 1 IF ( esLeftChaseEnemies[1].bHasTask = FALSE ) SET_PED_SEEING_RANGE(esLeftChaseEnemies[1].PedIndex, 100.0) SET_PED_HEARING_RANGE(esLeftChaseEnemies[1].PedIndex, 100.0) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[1].PedIndex, CA_USE_VEHICLE, TRUE) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[1].PedIndex, CA_DO_DRIVEBYS, TRUE) SET_PED_COMBAT_ATTRIBUTES(esLeftChaseEnemies[1].PedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_SHOOTING_PROPERTIES(esLeftChaseEnemies[1].PedIndex, 5, 50) TASK_COMBAT_HATED_TARGETS_AROUND_PED(esLeftChaseEnemies[1].PedIndex, 100.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(esLeftChaseEnemies[1].PedIndex, TRUE) esLeftChaseEnemies[1].bHasTask = TRUE ENDIF //kill the ped for now when playback stops IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsEnemyLeftChaseCar.VehicleIndex) IF NOT IS_PED_IN_CURRENT_CONVERSATION(esLeftChaseEnemies[1].PedIndex) SET_ENTITY_HEALTH(esLeftChaseEnemies[1].PedIndex, 0) vsEnemyLeftChaseCar.bDriverDead = TRUE ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF UPDATE_VEHICLE_SPINNING_WHEN_SHOT(vsEnemyLeftChaseCar.VehicleIndex, esLeftChaseEnemies[0].iTimer, fPlaybackSpeed, FALSE) BREAK ENDSWITCH CLEANUP_ENEMY_GROUP(esLeftChaseEnemies, FALSE, TRUE, FALSE) UPDATE_AI_PED_BLIPS_FOR_ENEMY_GROUP(esLeftChaseEnemies, bRenderEnemyBlips) ENDPROC PROC MANAGE_MISSION_TRAIN(INT &iProgress, FLOAT fTime) SWITCH iProgress CASE 0 IF ( fTime >= 29000.0 ) IF HAS_MISSION_TRAIN_BEEN_CREATED(sMissionTrain, 12.5, FALSE) iProgress++ ENDIF ENDIF BREAK CASE 1 IF DOES_ENTITY_EXIST(sMissionTrain.VehicleIndex) IF IS_ENTITY_AT_COORD(sMissionTrain.VehicleIndex, << 351.22, -2615.83, 13.01>>, << 16.0, 6.0, 4.0 >>) //or playback time reached IF NOT IS_ENTITY_DEAD(sMissionTrain.VehicleIndex) DELETE_MISSION_TRAIN(sMissionTrain.VehicleIndex) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Deleted mission train.") #ENDIF iProgress++ ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FIRST_RIVER_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 25000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF fPlaybackTime >= 30500.0 vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) peds[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) //give weapons to cop peds GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) //start vehicle recording playback SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_VEHICLE_ENGINE_ON(vehicle.VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vehicle.VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[1].iProgress = 0 peds[1].bHasTask = FALSE GO_TO_PED_STATE(peds[0], PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_ACCURACY(peds[i].PedIndex, 2) SET_PED_SHOOT_RATE(peds[i].PedIndex, 125) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 250.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF fPlaybackTime >= 60000.0 IF ( peds[i].fDistanceToTargetPed > 250.0 ) SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_SECOND_RIVER_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 26000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF fPlaybackTime >= 32000.0 vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) peds[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) //give weapons to cop peds GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) //start vehicle recording playback SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_VEHICLE_ENGINE_ON(vehicle.VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vehicle.VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[1].iProgress = 0 peds[1].bHasTask = FALSE GO_TO_PED_STATE(peds[0], PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_ACCURACY(peds[i].PedIndex, 2) SET_PED_SHOOT_RATE(peds[i].PedIndex, 125) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 250.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF fPlaybackTime >= 60000.0 IF ( peds[i].fDistanceToTargetPed > 250.0 ) SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_THIRD_RIVER_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 42000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF fPlaybackTime >= 47000.0 vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) peds[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) //give weapons to cop peds GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) //start vehicle recording playback SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_VEHICLE_ENGINE_ON(vehicle.VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vehicle.VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[1].iProgress = 0 peds[1].bHasTask = FALSE GO_TO_PED_STATE(peds[0], PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_ACCURACY(peds[i].PedIndex, 2) SET_PED_SHOOT_RATE(peds[i].PedIndex, 125) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 250.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF fPlaybackTime >= 70000.0 IF ( peds[i].fDistanceToTargetPed > 250.0 ) SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FOURTH_RIVER_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 55000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) REQUEST_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(vehicle.iRecordingNumber, sVehicleRecordingsFile) IF fPlaybackTime >= 60000.0 vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) peds[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) //give weapons to cop peds GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) //start vehicle recording playback SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_VEHICLE_ENGINE_ON(vehicle.VehicleIndex, TRUE, TRUE) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vehicle.VehicleIndex, TRUE) START_PLAYBACK_RECORDED_VEHICLE(vehicle.VehicleIndex, vehicle.iRecordingNumber, sVehicleRecordingsFile) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehicle.VehicleIndex) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[1].iProgress = 0 peds[1].bHasTask = FALSE iReplayCameraWarpTimer = GET_GAME_TIMER() + 1000 //Fix for bug 2229916 GO_TO_PED_STATE(peds[0], PED_STATE_RECORDING_PLAYBACK) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_RECORDING_PLAYBACK IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT IS_ENTITY_DEAD(vehicle.VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.VehicleIndex) REMOVE_VEHICLE_RECORDING(vehicle.iRecordingNumber, sVehicleRecordingsFile) GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_ACCURACY(peds[i].PedIndex, 2) SET_PED_SHOOT_RATE(peds[i].PedIndex, 125) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 250.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF fPlaybackTime >= 85000.0 IF ( peds[i].fDistanceToTargetPed > 300.0 ) SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) CLEANUP_PED_GROUP(peds, FALSE, FALSE, FALSE) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FIFTH_RIVER_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 60000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) IF fPlaybackTime >= 62000.0 vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED(PEDTYPE_COP, S_M_Y_COP_01, <<693.4204, -2529.8364, 11.4264>>, 115.3417) peds[1].PedIndex = CREATE_PED(PEDTYPE_COP, S_M_Y_COP_01, <<691.3856, -2529.0046, 11.4266>>, 103.4375) //give weapons to cop peds GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_MODEL_AS_NO_LONGER_NEEDED(POLICE3) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[1].iProgress = 0 peds[1].bHasTask = FALSE GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_ACCURACY(peds[i].PedIndex, 2) SET_PED_SHOOT_RATE(peds[i].PedIndex, 125) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_COMBAT_RANGE(peds[i].PedIndex, CR_NEAR) SET_PED_COMBAT_MOVEMENT(peds[i].PedIndex, CM_WILLADVANCE) SET_COMBAT_FLOAT(peds[i].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(peds[i].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) //SET_PED_ANGLED_DEFENSIVE_AREA(peds[i].PedIndex, <<674.837952,-2546.900879,6.932896>>, <<685.186707,-2535.064453,13.635417>>, 24.000000) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 250.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF fPlaybackTime >= 85000.0 IF ( peds[i].fDistanceToTargetPed > 300.0 ) SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) CLEANUP_PED_GROUP(peds, FALSE, FALSE, FALSE) ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC MANAGE_FIRST_HILL_COP_CAR(VEH_STRUCT &vehicle, PED_STRUCT &peds[], FLOAT fPlaybackTime) INT i #IF IS_DEBUG_BUILD IF ( bDrawDebugStates = TRUE) DRAW_DEBUG_VEHICLE_RECORDING_INFO(vehicle.VehicleIndex, 1.0) DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[0].PedIndex, GET_PED_STATE_NAME_FOR_DEBUG(peds[0].eState), 1.25) REPEAT 2 i DRAW_DEBUG_TEXT_ABOVE_ENTITY(peds[i].PedIndex, GET_STRING_FROM_FLOAT(peds[i].fDistanceToTargetPed), 1.5) ENDREPEAT ENDIF #ENDIF SWITCH peds[0].eState CASE PED_STATE_IDLE IF NOT DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF ( fPlaybackTime >= 85000.0 ) REQUEST_MODEL(POLICE3) REQUEST_MODEL(S_M_Y_COP_01) IF HAS_MODEL_LOADED(POLICE3) AND HAS_MODEL_LOADED(S_M_Y_COP_01) vehicle.VehicleIndex = CREATE_VEHICLE(POLICE3, vehicle.vPosition, vehicle.fHeading) peds[0].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER) peds[1].PedIndex = CREATE_PED_INSIDE_VEHICLE(vehicle.VehicleIndex, PEDTYPE_COP, S_M_Y_COP_01, VS_FRONT_RIGHT) SET_ENTITY_LOAD_COLLISION_FLAG(peds[0].PedIndex, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(peds[1].PedIndex, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(vehicle.VehicleIndex, TRUE) GIVE_WEAPON_TO_PED(peds[0].PedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO) GIVE_WEAPON_TO_PED(peds[1].PedIndex, WEAPONTYPE_PUMPSHOTGUN, INFINITE_AMMO) SET_PED_TARGET_LOSS_RESPONSE(peds[0].PedIndex, TLR_SEARCH_FOR_TARGET) SET_PED_TARGET_LOSS_RESPONSE(peds[1].PedIndex, TLR_SEARCH_FOR_TARGET) SET_VEHICLE_SIREN(vehicle.VehicleIndex, TRUE) SET_MODEL_AS_NO_LONGER_NEEDED(POLICE3) SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_COP_01) peds[0].iProgress = 0 peds[0].bHasTask = FALSE peds[0].iTimer = GET_GAME_TIMER() peds[1].iProgress = 0 peds[1].bHasTask = FALSE peds[1].iTimer = GET_GAME_TIMER() SET_CREATE_RANDOM_COPS(TRUE) SET_DISPATCH_COPS_FOR_PLAYER(PLAYER_ID(), TRUE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_RIDERS, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_ROAD_BLOCK, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_BOAT, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) SET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID(), 0.1) GO_TO_PED_STATE(peds[0], PED_STATE_COMBAT_ON_FOOT) ENDIF ENDIF ENDIF BREAK CASE PED_STATE_COMBAT_ON_FOOT IF HAS_TIME_PASSED(3000, peds[0].iTimer) AND HAS_TIME_PASSED(3000, peds[1].iTimer) REPEAT 2 i IF DOES_ENTITY_EXIST(peds[i].PedIndex) peds[i].fDistanceToTargetPed = GET_DISTANCE_BETWEEN_PEDS(peds[i].PedIndex, PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(peds[i].PedIndex) SWITCH peds[i].iProgress CASE 0 IF ( peds[i].bHasTask = FALSE ) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_COVER, FALSE) SET_PED_ACCURACY(peds[i].PedIndex, 1) SET_PED_SHOOT_RATE(peds[i].PedIndex, 50) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_USE_VEHICLE, FALSE) SET_PED_COMBAT_ATTRIBUTES(peds[i].PedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_COMBAT_RANGE(peds[i].PedIndex, CR_NEAR) SET_PED_COMBAT_MOVEMENT(peds[i].PedIndex, CM_WILLADVANCE) SET_COMBAT_FLOAT(peds[i].PedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 1.0) SET_COMBAT_FLOAT(peds[i].PedIndex, CCF_WALK_WHEN_STRAFING_CHANCE, 0.0) TASK_COMBAT_HATED_TARGETS_AROUND_PED(peds[i].PedIndex, 500.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[i].PedIndex, FALSE) peds[i].bHasTask = TRUE ENDIF IF ( peds[i].bHasTask = TRUE ) IF peds[i].fDistanceToTargetPed > 600.0 SET_PED_AS_NO_LONGER_NEEDED(peds[i].PedIndex) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDREPEAT ENDIF CLEANUP_PED_GROUP(peds, FALSE, TRUE) IF DOES_ENTITY_EXIST(vehicle.VehicleIndex) IF NOT DOES_ENTITY_EXIST(peds[0].PedIndex) AND NOT DOES_ENTITY_EXIST(peds[1].PedIndex) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehicle.VehicleIndex) ENDIF ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) CLEANUP_PED_GROUP(peds, FALSE, FALSE, FALSE) ENDIF ENDIF BREAK ENDSWITCH ENDPROC FUNC BOOL IS_MISSION_STAGE_SPEEDOPHILE_RIDE_COMPLETED(INT &iStageProgress) MANAGE_LAMAR_IN_SPEEDOPHILE(psLamar, vsSpeedophiles[psLamar.ePedVehicle], PLAYER_PED_ID()) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN MANAGE_PLAYER_PED_IN_SPEEDOPHILE(PLAYER_PED_ID(), psFranklin, vsSpeedophiles[psFranklin.ePedVehicle], vsSpeedophiles[psLamar.ePedVehicle]) MANAGE_OTHER_PLAYER_PED_IN_SPEEDOPHILE(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, vsSpeedophiles[psTrevor.ePedVehicle], PLAYER_PED_ID(), vsSpeedophiles[psLamar.ePedVehicle], FALSE) IF ( bDisplayBuddyBlips = TRUE ) IF NOT DOES_BLIP_EXIST(psLamar.BlipIndex) psLamar.BlipIndex = CREATE_BLIP_FOR_ENTITY(psLamar.PedIndex, FALSE) ENDIF IF NOT DOES_BLIP_EXIST(psTrevor.BlipIndex) psTrevor.BlipIndex = CREATE_BLIP_FOR_ENTITY(GET_PED_INDEX(CHAR_TREVOR), FALSE) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_FDLLT") AND NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_TDLLF") IF ( psLamar.fDistanceToTargetPed > 75.0 ) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION() ENDIF IF IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) CLEAR_PRINTS() ENDIF PRINT_GOD_TEXT_ADVANCED("FRA1_FDLLT", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ELSE IF DOES_BLIP_EXIST(psLamar.BlipIndex) REMOVE_BLIP(psLamar.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psTrevor.BlipIndex) REMOVE_BLIP(psTrevor.BlipIndex) ENDIF ENDIF IF NOT IS_PED_SITTING_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) bAllowHotSwap = FALSE ELSE bAllowHotSwap = TRUE ENDIF BREAK CASE CHAR_TREVOR MANAGE_PLAYER_PED_IN_SPEEDOPHILE(PLAYER_PED_ID(), psFranklin, vsSpeedophiles[psTrevor.ePedVehicle], vsSpeedophiles[psLamar.ePedVehicle]) MANAGE_OTHER_PLAYER_PED_IN_SPEEDOPHILE(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, vsSpeedophiles[psFranklin.ePedVehicle], PLAYER_PED_ID(), vsSpeedophiles[psLamar.ePedVehicle], FALSE) IF ( bDisplayBuddyBlips = TRUE ) IF NOT DOES_BLIP_EXIST(psLamar.BlipIndex) psLamar.BlipIndex = CREATE_BLIP_FOR_ENTITY(psLamar.PedIndex, FALSE) ENDIF IF NOT DOES_BLIP_EXIST(psFranklin.BlipIndex) psFranklin.BlipIndex = CREATE_BLIP_FOR_ENTITY(GET_PED_INDEX(CHAR_FRANKLIN), FALSE) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_FDLLT") AND NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_TDLLF") IF ( psLamar.fDistanceToTargetPed > 75.0 ) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION() ENDIF IF IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) CLEAR_PRINTS() ENDIF REPLAY_RECORD_BACK_FOR_TIME(1.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) PRINT_GOD_TEXT_ADVANCED("FRA1_TDLLF", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ELSE IF DOES_BLIP_EXIST(psLamar.BlipIndex) REMOVE_BLIP(psLamar.BlipIndex) ENDIF IF DOES_BLIP_EXIST(psFranklin.BlipIndex) REMOVE_BLIP(psFranklin.BlipIndex) ENDIF ENDIF IF NOT IS_PED_SITTING_IN_THIS_VEHICLE(PLAYER_PED_ID(), vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) bAllowHotSwap = FALSE ELSE bAllowHotSwap = TRUE ENDIF BREAK ENDSWITCH MANAGE_FILM_CREW_PEDS_AFTER_JACK() MANAGE_MISSION_TRAIN(sMissionTrain.iProgress, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FIRST_RIVER_COP_CAR(vsRiverCopCars[0], psRiverCopCar0Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_SECOND_RIVER_COP_CAR(vsRiverCopCars[1], psRiverCopCar1Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_THIRD_RIVER_COP_CAR(vsRiverCopCars[2], psRiverCopCar2Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FOURTH_RIVER_COP_CAR(vsRiverCopCars[3], psRiverCopCar3Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FIFTH_RIVER_COP_CAR(vsRiverCopCars[4], psRiverCopCar4Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_COP_HELICOPTER_IN_CHASE(psSwat[0], vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackSpeed) MANAGE_LEFT_ENEMY_CAR_DURING_SPEEDOPHILE_RIDE(vsEnemyLeftChaseCar.iProgress, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackSpeed) MANAGE_CONVERSATIONS_DURING_SPEEDOPHILE_RIDE(iConversationProgress) IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_APPROACH_RIVER") STOP_AUDIO_SCENE("FRANKLIN_1_APPROACH_RIVER") ENDIF IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_START") IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime > 27000.0) STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_START") ENDIF ENDIF //handle blips for vehicle SWITCH iStageProgress CASE 0 SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex, -15.0) ENDIF BREAK CASE CHAR_TREVOR IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) MODIFY_VEHICLE_TOP_SPEED(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex, -15.0) ENDIF BREAK ENDSWITCH OVERRIDE_WATER_SETTINGS(TRUE, 3.0, fOverrideStrength) REMOVE_ANIM_DICT("missfra1") REMOVE_ANIM_DICT("missfra1mcs_2_crew_react") iStageProgress++ BREAK CASE 1 IF NOT IS_STRING_NULL_OR_EMPTY(sLabelFLAMAR) AND NOT HAS_LABEL_BEEN_TRIGGERED(sLabelFLAMAR) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData) IF IS_SCREEN_FADED_IN() PRINT_GOD_TEXT_ADVANCED(sLabelFLAMAR, DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ENDIF ENDIF IF ( vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime >= 74500.0 ) OR IS_ANY_PED_IN_ANGLED_AREA_LOCATE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR), psLamar.PedIndex, << 732.77, -2621.94, -1.72>>, << 731.85, -2562.83, 16.46>>, 36.0) IF NOT IS_SELECTOR_CAM_ACTIVE() bAllowHotswap = FALSE FailFlags[MISSION_FAIL_BUDDIES_LEFT_BEHIND] = FALSE FailFlags[MISSION_FAIL_SPEEDOPHILE_DEAD] = FALSE FailFlags[MISSION_FAIL_SPEEDOPHILE_UNDRIVABLE] = FALSE GO_TO_PED_STATE(psLamar, PED_STATE_ENDING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psTrevor, PED_STATE_ENDING_RECORDING_PLAYBACK) GO_TO_PED_STATE(psFranklin, PED_STATE_FLEE_COPS_ON_FOOT) RETURN TRUE ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC PROC MANAGE_CONVERSATIONS_DURING_LOSE_COPS() IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_SRCLEAR") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_SRCLEAR", CONV_PRIORITY_VERY_HIGH) SET_LABEL_AS_TRIGGERED("F1_SRCLEAR", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ELSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bSplitUpConversationFinished = TRUE ENDIF ENDIF IF ( bCopsChaseFinished = FALSE ) //scripted cops chase is in progress IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) //play conversation for Franklin chatting with Trevor when close on speedophiles IF IS_PED_SITTING_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) AND IS_PED_SITTING_IN_THIS_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[psTrevor.ePedVehicle].VehicleIndex) OR IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[psFranklin.ePedVehicle].VehicleIndex) IF ( psTrevor.fDistanceToTargetPed < 10.0 ) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTJR1") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTJR1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTJR1", TRUE) ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTJR2") IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTJR2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTJR2", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_TREVOR)) AND DOES_ENTITY_EXIST(GET_PED_INDEX(CHAR_FRANKLIN)) IF NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_TREVOR)) AND NOT IS_ENTITY_DEAD(GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_PED_CLIMBING(GET_PED_INDEX(CHAR_TREVOR)) OR IS_PED_CLIMBING(GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_TREVOR), <<767.280884,-2921.152832,3.528324>>, << 14.0, 18.0, 6.0 >>) AND IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_FRANKLIN), <<767.280884,-2921.152832,3.528324>>, << 14.0, 18.0, 6.0 >>) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFCUL") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTCUL") VECTOR vTrevorsPosition, vFranklinsPosition vTrevorsPosition = GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_TREVOR)) vFranklinsPosition = GET_ENTITY_COORDS(GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_PED_CLIMBING(GET_PED_INDEX(CHAR_FRANKLIN)) IF ( vFranklinsPosition.Z > vTrevorsPosition.Z ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFCUL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFCUL", TRUE) ENDIF ENDIF ENDIF IF IS_PED_CLIMBING(GET_PED_INDEX(CHAR_TREVOR)) IF ( vFranklinsPosition.Z < vTrevorsPosition.Z ) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTCUL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTCUL", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF SWITCH ePlayerBuddy CASE PLAYER_BUDDY_LAMAR //player is escaping cops with Lamar IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLJF") //Lamar joins Franklin AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLJT") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLJF", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLJF", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLJT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLJT", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH ENDIF ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLJFR") //Franklin responds to Lamar joining AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLJTR") //Trevor responds to Lamar joining IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLJFR", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLJFR", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLJTR", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLJTR", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLNC") //Lamar says they need a car IF HAS_TIME_PASSED(10000, psLamar.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLNC", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders = 2 ) SET_LABEL_AS_TRIGGERED("F1_LCLNC", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLNCR") //Lamar says they need to move AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSOFR") //Franklin says to stay on him AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSOTR") //Trevor says to stay on him IF HAS_LABEL_BEEN_TRIGGERED("F1_LCLNC") IF HAS_TIME_PASSED(15000, psLamar.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLNCR", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 7 ) SET_LABEL_AS_TRIGGERED("F1_LCLNCR", TRUE) ENDIF ENDIF BREAK CASE 1 SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSOFR", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 7 ) SET_LABEL_AS_TRIGGERED("F1_LCFSOFR", TRUE) ENDIF ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSOTR", CONV_PRIORITY_MEDIUM) psLamar.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 7 ) SET_LABEL_AS_TRIGGERED("F1_LCTSOTR", TRUE) ENDIF ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSOF") //Franklin says a line to remind buddy to come with him when entering a vehicle AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSOT") //Trevor says a line to remind buddy to come with him when entering a vehicle IF NOT ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSOF", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFSOF", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSOT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTSOT", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLSLC") //Lamar says to lose the cops initially IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLSLC", TRUE) ENDIF ENDIF ENDIF ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLFC1") //Lamar and Franklin chat when losing cops 1 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLTC1") //Lamar and Trevor chat when losing cops 1 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLFC1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLFC1", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLTC1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLTC1", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLFC2") //Lamar and Franklin chat when losing cops 2 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLTC2") //Lamar and Trevor chat when losing cops 2 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLFC2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLFC2", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLTC2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLTC2", TRUE) psLamar.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLFC3") //Lamar and Franklin chat when losing cops 3 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLTC3") //Lamar and Trevor chat when losing cops 3 IF HAS_TIME_PASSED(20000, psLamar.iPedConversationTimer) IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLFC3", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLFC3", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLTC3", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLTC3", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT1") //Lamar and Franklin chat when losing cops F1_CHAT1 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT6") //Lamar and Trevor chat when losing cops F1_CHAT6 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT1", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT6", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT6", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT2") //Lamar and Franklin chat when losing cops F1_CHAT2 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT7") //Lamar and Trevor chat when losing cops F1_CHAT6 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT2", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT7", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT7", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT3") //Lamar and Franklin chat when losing cops F1_CHAT3 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT8") //Lamar and Trevor chat when losing cops F1_CHAT8 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT3", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT3", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT8", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT8", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT4") //Lamar and Franklin chat when losing cops F1_CHAT4 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT9") //Lamar and Trevor chat when losing cops F1_CHAT9 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT4", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT4", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT9", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT9", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_STRETCH") //Lamar and Franklin chat when losing cops STRETCH IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_STRETCH", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_STRETCH", TRUE) ENDIF BREAK CASE CHAR_TREVOR SET_LABEL_AS_TRIGGERED("F1_STRETCH", TRUE) BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT5") //Lamar and Franklin chat when losing cops F1_CHAT4 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_CHAT10") //Lamar and Trevor chat when losing cops F1_CHAT9 IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT5", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT5", TRUE) bRandomConversationAllowed = TRUE iLoseCopsReminderCount = 0 iLoseCopsReminderTime = GET_RANDOM_INT_IN_RANGE(12000, 15001) psLamar.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_CHAT10", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_CHAT10", TRUE) bRandomConversationAllowed = TRUE iLoseCopsReminderCount = 0 iLoseCopsReminderTime = GET_RANDOM_INT_IN_RANGE(12000, 15001) psLamar.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF IF ( bRandomConversationAllowed = TRUE ) //Lamar reminds to lose the cops randomly IF HAS_TIME_PASSED(iLoseCopsReminderTime, psLamar.iPedConversationTimer) IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT ARE_PLAYER_FLASHING_STARS_ABOUT_TO_DROP(PLAYER_ID()) //player not wanted level cooldown IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLSLC_2") //reuse one more line from F1_LCLSLC IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLSLC_2", TRUE) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(8000, 10001)) psLamar.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ELSE //play random reminder root F1_LCLRLC IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLRLC", CONV_PRIORITY_MEDIUM) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(5000, 7501)) psLamar.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PLAYER_BUDDY_TREVOR //player is escaping cops with Trevor CASE PLAYER_BUDDY_FRANKLIN //player is escaping cops with Franklin IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTJF") //Trevor joins Franklin(player) AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFJT") //Franklin joins Trevor(player) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTJF", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTJF", TRUE) psTrevor.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFJT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFJT", TRUE) psTrevor.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTNC") //Trevor says they need a car AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFNC") //Franklin says they need a car IF HAS_TIME_PASSED(10000, psTrevor.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN)) AND NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_TREVOR)) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTNC", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() SET_LABEL_AS_TRIGGERED("F1_LCTNC", TRUE) ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFNC", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() SET_LABEL_AS_TRIGGERED("F1_LCFNC", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTNCR") //Trevor says they need to move AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFNCR") //Franklin says they need to move AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSOFR") //Franklin says to stay on him AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSOTR") //Trevor says to stay on him IF HAS_LABEL_BEEN_TRIGGERED("F1_LCTNC") OR HAS_LABEL_BEEN_TRIGGERED("F1_LCFNC") IF HAS_TIME_PASSED(15000, psTrevor.iPedConversationTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN)) AND NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_TREVOR)) SWITCH GET_RANDOM_INT_IN_RANGE(0, 2) CASE 0 SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTNCR", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 5 ) SET_LABEL_AS_TRIGGERED("F1_LCTNCR", TRUE) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFNCR", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 5 ) SET_LABEL_AS_TRIGGERED("F1_LCFNCR", TRUE) ENDIF ENDIF BREAK ENDSWITCH BREAK CASE 1 SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSOFR", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 5 ) SET_LABEL_AS_TRIGGERED("F1_LCFSOFR", TRUE) ENDIF ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSOTR", CONV_PRIORITY_MEDIUM) psTrevor.iPedConversationTimer = GET_GAME_TIMER() iNeedCarBuddyReminders++ IF ( iNeedCarBuddyReminders >= 5 ) SET_LABEL_AS_TRIGGERED("F1_LCTSOTR", TRUE) ENDIF ENDIF BREAK ENDSWITCH BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSOF") //Franklin says a line to remind buddy to come with him when entering a vehicle AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSOT") //Trevor says a line to remind buddy to come with him when entering a vehicle IF NOT ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_TREVOR), GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSOF", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFSOF", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSOT", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTSOT", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSLC") //Trevor says to lose the cops initially AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSLC") //Franklin says to lose the cops initially IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTSLC", TRUE) psTrevor.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFSLC", TRUE) psTrevor.iPedConversationTimer = GET_GAME_TIMER() ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTC1") //Franklin and Trevor chat when losing cops 1 IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTC1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTC1", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTC2") //Franklin and Trevor chat when losing cops 1 IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTC2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTC2", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTC3") //Franklin and Trevor chat when losing cops 1 IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTC3", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTC3", TRUE) bRandomConversationAllowed = TRUE iLoseCopsReminderCount = 0 iLoseCopsReminderTime = GET_RANDOM_INT_IN_RANGE(12000, 15001) psTrevor.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF ( bRandomConversationAllowed = TRUE ) //Lamar reminds to lose the cops randomly IF HAS_TIME_PASSED(iLoseCopsReminderTime, psTrevor.iPedConversationTimer) IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT ARE_PLAYER_FLASHING_STARS_ABOUT_TO_DROP(PLAYER_ID()) //player not wanted level cooldown IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSLC_2") //reuse one more line from F1_LCTSLC IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTSLC_2", TRUE) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(8000, 10001)) psTrevor.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ELSE //play random reminder root F1_LCTRLC IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTRLC", CONV_PRIORITY_MEDIUM) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(5000, 7501)) psTrevor.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSLC_2") //reuse one more line from F1_LCFSLC IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSLC", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFSLC_2", TRUE) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(8000, 10001)) psTrevor.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ELSE IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFRLC", CONV_PRIORITY_MEDIUM) iLoseCopsReminderCount++ iLoseCopsReminderTime = iLoseCopsReminderTime + (iLoseCopsReminderCount * GET_RANDOM_INT_IN_RANGE(5000, 7501)) psTrevor.iPedConversationTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderTime: ", iLoseCopsReminderTime, ".") PRINTLN(GET_THIS_SCRIPT_NAME(), ": iLoseCopsReminderCount: ", iLoseCopsReminderCount, ".") #ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH ELSE //scripted cops chase has finished SWITCH ePlayerBuddy CASE PLAYER_BUDDY_LAMAR IF ( bBuddyDroppedOff = FALSE ) //buddy not delivered to drop off location yet IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLCL") //Lamar says cops were lost IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLCL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLCL", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() //stop any ongoing conversation ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFDL1") //Lamar chats with Franklin after losing cops 1 AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTDL1") //Lamar chats with Trevor after losing cops 1 IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) AND ( HAS_LABEL_BEEN_TRIGGERED(sLabelGTLAMH) OR IS_STRING_NULL_OR_EMPTY(sLabelGTLAMH) ) IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFDL1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFDL1", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTDL1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTDL1", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFDL2") //Lamar chats with Franklin after losing cops 2 IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) AND ( HAS_LABEL_BEEN_TRIGGERED(sLabelGTLAMH) OR IS_STRING_NULL_OR_EMPTY(sLabelGTLAMH) ) IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFDL2", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFDL2", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDIF ENDIF ELSE //buddy delivered to drop off location IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCLSD") //Lamar says he'll get out here, after arriving at drop off IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCLSD", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCLSD", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF ELSE SET_LABEL_AS_TRIGGERED("F1_LCLSD", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFDLE") AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTDLE") IF HAS_LABEL_BEEN_TRIGGERED("F1_LCLSD") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFDLE", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFDLE", TRUE) ENDIF BREAK CASE CHAR_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTDLE", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTDLE", TRUE) ENDIF BREAK ENDSWITCH ENDIF ENDIF ENDIF ELSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bDropOffConversationFinished = TRUE ENDIF ENDIF ENDIF BREAK CASE PLAYER_BUDDY_TREVOR CASE PLAYER_BUDDY_FRANKLIN IF ( bBuddyDroppedOff = FALSE ) //buddy not delivered to drop off location yet IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTCL") //Trevor says cops were lost AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFCL") //Franklin says cops were lost IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTCL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTCL", TRUE) ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFCL", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFCL", TRUE) ENDIF BREAK ENDSWITCH ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() //stop any ongoing conversation ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTD1") //Franklin and Trevor chat after losing cops 1 IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) AND ( ( HAS_LABEL_BEEN_TRIGGERED(sLabelGTFRAH) OR IS_STRING_NULL_OR_EMPTY(sLabelGTFRAH) ) OR ( HAS_LABEL_BEEN_TRIGGERED(sLabelGTTREH) OR IS_STRING_NULL_OR_EMPTY(sLabelGTTREH) ) ) IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTD1", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTD1", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCTSD") //Trevor says he'll get out here, after arriving at drop off AND NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFSD") //Franklin says he'll get out here, after arriving at drop off SWITCH ePlayerBuddy CASE PLAYER_BUDDY_TREVOR IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vTrevorsDropOffPosition) < 75.0 IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCTSD", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCTSD", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ELSE SET_LABEL_AS_TRIGGERED("F1_LCTSD", TRUE) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vFranklinsDropOffPosition) < 75.0 IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFSD", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFSD", TRUE) ENDIF ENDIF ELSE KILL_FACE_TO_FACE_CONVERSATION() ENDIF ELSE SET_LABEL_AS_TRIGGERED("F1_LCFSD", TRUE) ENDIF ENDIF BREAK ENDSWITCH ENDIF ELSE //buddy delivered to drop off location IF NOT HAS_LABEL_BEEN_TRIGGERED("F1_LCFTDE") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF) IF CREATE_CONVERSATION(sFranklin1Conversation, "FKN1AUD", "F1_LCFTDE", CONV_PRIORITY_MEDIUM) SET_LABEL_AS_TRIGGERED("F1_LCFTDE", TRUE) ENDIF ENDIF ENDIF ELSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bDropOffConversationFinished = TRUE ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDPROC PROC MANAGE_GETAWAY_CARS(INT &iProgress) SWITCH iProgress CASE 0 //initialise array with getaway cars information vsGetawayCars[0].vPosition = << 1114.05, -2512.10, 32.14 >> //parked for Lamar vsGetawayCars[0].fHeading = 20.0221 vsGetawayCars[0].ModelName = BALLER vsGetawayCars[1].vPosition = <<1129.3522, -2510.1978, 32.2125>> vsGetawayCars[1].fHeading = 190.3422 vsGetawayCars[1].ModelName = BALLER vsGetawayCars[2].vPosition = <<1150.1798, -2509.4131, 32.3467>> vsGetawayCars[2].fHeading = 14.0235 vsGetawayCars[2].ModelName = BALLER vsGetawayCars[3].vPosition = << 769.01, -2944.49, 4.83 >> //parked for Trevor/Franklin vsGetawayCars[3].fHeading = 296.0139 vsGetawayCars[3].ModelName = BALLER vsGetawayCars[4].vPosition = <<781.2610, -2957.3347, 4.8006>> vsGetawayCars[4].fHeading = 249.0547 vsGetawayCars[4].ModelName = BALLER vsGetawayCars[5].vPosition = <<769.4281, -2974.8413, 4.8384>> vsGetawayCars[5].fHeading = 296.4401 vsGetawayCars[5].ModelName = BALLER SETTIMERA(0) iProgress++ BREAK CASE 1 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[0], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 0" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 2 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[1], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 1" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 3 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[2], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 2" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 4 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[3], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 3" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 5 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[4], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 4" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 6 IF TIMERA() > 250 IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsGetawayCars[5], FALSE, FALSE, NO_CHARACTER, FALSE, -1, -1, -1, 0, 0 #IF IS_DEBUG_BUILD, "GC 5" #ENDIF) SETTIMERA(0) iProgress++ ENDIF ENDIF BREAK CASE 7 CLEANUP_VEHICLE_GROUP(vsGetawayCars, FALSE, TRUE) BREAK ENDSWITCH ENDPROC FUNC BOOL IS_MISSION_STAGE_LOSE_COPS_COMPLETED(INT &iStageProgress) MANAGE_CONVERSATIONS_DURING_LOSE_COPS() MANAGE_GETAWAY_CARS(iGetawayCarsProgress) MANAGE_LAMAR_IN_SPEEDOPHILE(psLamar, vsSpeedophiles[psLamar.ePedVehicle], PLAYER_PED_ID()) SWITCH GET_CURRENT_PLAYER_PED_ENUM() CASE CHAR_FRANKLIN MANAGE_PLAYER_PED_IN_SPEEDOPHILE(PLAYER_PED_ID(), psFranklin, vsSpeedophiles[psFranklin.ePedVehicle], vsSpeedophiles[psLamar.ePedVehicle]) MANAGE_OTHER_PLAYER_PED_IN_SPEEDOPHILE(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, vsSpeedophiles[psTrevor.ePedVehicle], PLAYER_PED_ID(), vsSpeedophiles[psLamar.ePedVehicle], TRUE) BREAK CASE CHAR_TREVOR MANAGE_PLAYER_PED_IN_SPEEDOPHILE(PLAYER_PED_ID(), psFranklin, vsSpeedophiles[psTrevor.ePedVehicle], vsSpeedophiles[psLamar.ePedVehicle]) MANAGE_OTHER_PLAYER_PED_IN_SPEEDOPHILE(GET_OTHER_PLAYER_PED_INDEX(), psTrevor, vsSpeedophiles[psFranklin.ePedVehicle], PLAYER_PED_ID(), vsSpeedophiles[psLamar.ePedVehicle], TRUE) BREAK ENDSWITCH IF bCopsChaseFinished = TRUE IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) ENDIF ENDIF MANAGE_COP_BOAT(psBoatCops[0]) MANAGE_FIRST_RIVER_COP_CAR(vsRiverCopCars[0], psRiverCopCar0Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_SECOND_RIVER_COP_CAR(vsRiverCopCars[1], psRiverCopCar1Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_THIRD_RIVER_COP_CAR(vsRiverCopCars[2], psRiverCopCar2Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FOURTH_RIVER_COP_CAR(vsRiverCopCars[3], psRiverCopCar3Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FIFTH_RIVER_COP_CAR(vsRiverCopCars[4], psRiverCopCar4Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_FIRST_HILL_COP_CAR(vsHillCopCars[0], psHillCopCar0Cops, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime) MANAGE_COP_HELICOPTER_IN_CHASE(psSwat[0], vsSpeedophiles[psLamar.ePedVehicle].fPlaybackTime, vsSpeedophiles[psLamar.ePedVehicle].fPlaybackSpeed) SWITCH ePlayerBuddy //update blips for buddies in lose cops stage CASE PLAYER_BUDDY_LAMAR //update Lamar's blip UPDATE_TRIGGERED_LABEL(sLabelGTLAMH) IF bCopsChaseFinished = FALSE AND NOT ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF NOT DOES_BLIP_EXIST(psLamar.BlipIndex) psLamar.BlipIndex = CREATE_BLIP_FOR_PED(psLamar.PedIndex, FALSE) ENDIF ELSE IF DOES_BLIP_EXIST(psLamar.BlipIndex) REMOVE_BLIP(psLamar.BlipIndex) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN //update Franklin's blip UPDATE_TRIGGERED_LABEL(sLabelGTFRAH) IF bCopsChaseFinished = FALSE AND NOT ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), GET_PED_INDEX(CHAR_FRANKLIN)) IF NOT DOES_BLIP_EXIST(psFranklin.BlipIndex) psFranklin.BlipIndex = CREATE_BLIP_FOR_PED(GET_PED_INDEX(CHAR_FRANKLIN), FALSE) ENDIF ELSE IF DOES_BLIP_EXIST(psFranklin.BlipIndex) REMOVE_BLIP(psFranklin.BlipIndex) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_TREVOR //update Trevor's blip UPDATE_TRIGGERED_LABEL(sLabelGTTREH) IF bCopsChaseFinished = FALSE AND NOT ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), GET_PED_INDEX(CHAR_TREVOR)) IF NOT DOES_BLIP_EXIST(psTrevor.BlipIndex) psTrevor.BlipIndex = CREATE_BLIP_FOR_PED(GET_PED_INDEX(CHAR_TREVOR), FALSE) ENDIF ELSE IF DOES_BLIP_EXIST(psTrevor.BlipIndex) REMOVE_BLIP(psTrevor.BlipIndex) ENDIF ENDIF BREAK ENDSWITCH SWITCH iStageProgress CASE 0 IF IS_PLAYER_PLAYING(PLAYER_ID()) IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) IF NOT HAS_LABEL_BEEN_TRIGGERED("LOSE_WANTED") IF HAS_LABEL_BEEN_TRIGGERED("F1_SRCLEAR") IF ( bSplitUpConversationFinished = TRUE ) IF IS_SCREEN_FADED_IN() PRINT_GOD_TEXT_ADVANCED("LOSE_WANTED", DEFAULT_GOD_TEXT_TIME, TRUE) //remove blips for vehicles and peds INT i REPEAT 3 i IF DOES_BLIP_EXIST(vsSpeedophiles[i].BlipIndex) REMOVE_BLIP(vsSpeedophiles[i].BlipIndex) ENDIF ENDREPEAT IF NOT IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_SPLIT_UP") START_AUDIO_SCENE("FRANKLIN_1_JETSKI_SPLIT_UP") ENDIF OVERRIDE_WATER_SETTINGS(FALSE, 15.0) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(FRA1_COP_LOSS_TIME) ePlayerBuddy = PLAYER_BUDDY_NONE bCopsChaseFinished = FALSE ENDIF ENDIF ENDIF ENDIF SWITCH ePlayerBuddy CASE PLAYER_BUDDY_FRANKLIN FailFlags[MISSION_FAIL_FRANKLIN_LEFT_BEHIND] = TRUE IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_ECFRA") IF HAS_LABEL_BEEN_TRIGGERED("F1_LCFJT") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_DIALOGUE_IF_SUBTITLES_OFF) PRINT_GOD_TEXT_ADVANCED("FRA1_ECFRA", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("CMN_FLEAVE") IF psTrevor.fDistanceToTargetPed > BUDDY_SEPARATION_DIST PRINT_GOD_TEXT_ADVANCED("CMN_FLEAVE", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_TREVOR FailFlags[MISSION_FAIL_TREVOR_LEFT_BEHIND] = TRUE IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_ECTRE") IF HAS_LABEL_BEEN_TRIGGERED("F1_LCTJF") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_DIALOGUE_IF_SUBTITLES_OFF) PRINT_GOD_TEXT_ADVANCED("FRA1_ECTRE", DEFAULT_GOD_TEXT_TIME, TRUE) SET_STRIPCLUB_GLOBAL_FORCE_CREATE_FRONT_BOUNCER(TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("CMN_TLEAVE") IF psTrevor.fDistanceToTargetPed > BUDDY_SEPARATION_DIST PRINT_GOD_TEXT_ADVANCED("CMN_TLEAVE", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF BREAK CASE PLAYER_BUDDY_LAMAR FailFlags[MISSION_FAIL_LAMAR_LEFT_BEHIND] = TRUE IF NOT HAS_LABEL_BEEN_TRIGGERED("FRA1_ECLAM") IF HAS_LABEL_BEEN_TRIGGERED("F1_LCLJFR") OR HAS_LABEL_BEEN_TRIGGERED("F1_LCLJTR") IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_DIALOGUE_IF_SUBTITLES_OFF) PRINT_GOD_TEXT_ADVANCED("FRA1_ECLAM", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("CMN_LLEAVE") IF psLamar.fDistanceToTargetPed > BUDDY_SEPARATION_DIST PRINT_GOD_TEXT_ADVANCED("CMN_LLEAVE", DEFAULT_GOD_TEXT_TIME, TRUE) ENDIF ENDIF BREAK ENDSWITCH ELSE TRIGGER_MUSIC_EVENT("FRA1_STOP_TRACK") IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_1_JETSKI_SPLIT_UP") STOP_AUDIO_SCENE("FRANKLIN_1_JETSKI_SPLIT_UP") ENDIF INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED() ALLOW_DIALOGUE_IN_WATER(FALSE) bCopsChaseFinished = TRUE iStageProgress++ ENDIF ENDIF BREAK CASE 1 SWITCH ePlayerBuddy CASE PLAYER_BUDDY_FRANKLIN CASE PLAYER_BUDDY_TREVOR CASE PLAYER_BUDDY_LAMAR #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player has a buddy after losing cops.") #ENDIF iStageProgress++ BREAK CASE PLAYER_BUDDY_NONE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player has no buddy after losing cops.") #ENDIF RETURN TRUE BREAK ENDSWITCH BREAK CASE 2 //have player drop off buddy at destination SWITCH ePlayerBuddy CASE PLAYER_BUDDY_FRANKLIN IF HAS_LABEL_BEEN_TRIGGERED("F1_LCFCL") IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vFranklinsDropOffPosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, GET_PED_INDEX(CHAR_FRANKLIN), sLabelGTFRAH, "CMN_FLEAVE", FALSE, TRUE) //do the check to progress the stage here IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) //both peds in vehicle angled area IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_TREVOR), <<-20.488831,-1459.062012,28.607000>>, <<-11.658115,-1458.320557,32.486198>>, 8.0) AND IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_FRANKLIN), <<-20.488831,-1459.062012,28.607000>>, <<-11.658115,-1458.320557,32.486198>>, 8.0) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ELSE IF IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_TREVOR), <<-18.035868,-1457.587769,31.472479>>, << 10.0, 10.0, 3.0 >>) AND IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_FRANKLIN), <<-18.035868,-1457.587769,31.472479>>, << 10.0, 10.0, 3.0 >>) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ELSE CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PLAYER_BUDDY_TREVOR IF HAS_LABEL_BEEN_TRIGGERED("F1_LCTCL") IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vTrevorsDropOffPosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, GET_PED_INDEX(CHAR_TREVOR), sLabelGTTREH, "CMN_TLEAVE", FALSE, TRUE) //do the check to progress the stage here IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) //both peds in vehicle angled area IF ARE_PEDS_IN_THE_SAME_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN), GET_PED_INDEX(CHAR_TREVOR)) IF IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_TREVOR), <<130.302841,-1311.455444,26.953234>>, <<143.630798,-1303.390259,30.950567>>, 8.0) AND IS_ENTITY_IN_ANGLED_AREA(GET_PED_INDEX(CHAR_FRANKLIN), <<130.302841,-1311.455444,26.953234>>, <<143.630798,-1303.390259,30.950567>>, 8.0) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ELSE IF IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_TREVOR), <<135.962570,-1306.711182,29.997814>>, << 8.0, 8.0, 3.0 >>) AND IS_ENTITY_AT_COORD(GET_PED_INDEX(CHAR_FRANKLIN), <<135.962570,-1306.711182,29.997814>>, << 8.0, 8.0, 3.0 >>) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ELSE CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE PLAYER_BUDDY_LAMAR IF HAS_LABEL_BEEN_TRIGGERED("F1_LCLCL") IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vLamarsDropOffPosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, psLamar.PedIndex, sLabelGTLAMH, "CMN_LLEAVE", FALSE, TRUE) //do the check to progress the stage here IF DOES_BLIP_EXIST(sLocatesData.LocationBlip) //both peds in vehicle angled area IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psLamar.PedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-61.234806,-1464.389771,30.094234>>, <<-50.740864,-1462.935547,32.909306>>, 8.0) AND IS_ENTITY_IN_ANGLED_AREA(psLamar.PedIndex, <<-61.234806,-1464.389771,30.094234>>, <<-50.740864,-1462.935547,32.909306>>, 8.0) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ELSE IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-58.462658,-1461.084106,32.958130>>, << 8.0, 8.0, 3.0 >>) AND IS_ENTITY_AT_COORD(psLamar.PedIndex, <<-58.462658,-1461.084106,32.958130>>, << 8.0, 8.0, 3.0 >>) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ELSE CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SETTIMERA(0) //start backup timer in case the conversations are busted by streaming bBuddyDroppedOff = TRUE iStageProgress++ ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH BREAK CASE 3 IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), 3.0) IF ( bDropOffConversationFinished = TRUE ) SWITCH ePlayerBuddy CASE PLAYER_BUDDY_LAMAR SEQUENCE_INDEX LamarSequenceIndex CLEAR_SEQUENCE_TASK(LamarSequenceIndex) OPEN_SEQUENCE_TASK(LamarSequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL, 0) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -64.65, -1451.78, 31.12 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3) CLOSE_SEQUENCE_TASK(LamarSequenceIndex) TASK_PERFORM_SEQUENCE(psLamar.PedIndex, LamarSequenceIndex) CLEAR_SEQUENCE_TASK(LamarSequenceIndex) BREAK CASE PLAYER_BUDDY_TREVOR SEQUENCE_INDEX TrevorSequenceIndex CLEAR_SEQUENCE_TASK(TrevorSequenceIndex) OPEN_SEQUENCE_TASK(TrevorSequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL, 0) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<129.25, -1299.28, 28.23>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3) CLOSE_SEQUENCE_TASK(TrevorSequenceIndex) TASK_PERFORM_SEQUENCE(GET_PED_INDEX(CHAR_TREVOR), TrevorSequenceIndex) CLEAR_SEQUENCE_TASK(TrevorSequenceIndex) BREAK CASE PLAYER_BUDDY_FRANKLIN SEQUENCE_INDEX FranklinSequenceIndex CLEAR_SEQUENCE_TASK(FranklinSequenceIndex) OPEN_SEQUENCE_TASK(FranklinSequenceIndex) TASK_LEAVE_ANY_VEHICLE(NULL, 0) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-14.0385, -1437.2465, 30.1235>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3) CLOSE_SEQUENCE_TASK(FranklinSequenceIndex) TASK_PERFORM_SEQUENCE(GET_PED_INDEX(CHAR_FRANKLIN), FranklinSequenceIndex) CLEAR_SEQUENCE_TASK(FranklinSequenceIndex) BREAK ENDSWITCH iStageProgress++ ENDIF ENDIF ELSE IF ( bDropOffConversationFinished = TRUE ) iStageProgress++ ENDIF ENDIF BREAK CASE 4 IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF SWITCH ePlayerBuddy CASE PLAYER_BUDDY_LAMAR IF NOT IS_PED_IN_ANY_VEHICLE(psLamar.PedIndex) RETURN TRUE ENDIF BREAK CASE PLAYER_BUDDY_TREVOR IF NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_TREVOR)) RETURN TRUE ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN IF NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX(CHAR_FRANKLIN)) RETURN TRUE ENDIF BREAK ENDSWITCH BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR_COMPLETED(INT &iStageProgress) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF IF IS_REPLAY_RECORDING() REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() ENDIF SWITCH iStageProgress CASE 0 IF NOT DOES_CAM_EXIST(ScriptedCamera) STOP_FIRE_IN_RANGE(<< -64.65, -1451.78, 31.12 >>, 20.0) REMOVE_DECALS_IN_RANGE(<< -64.65, -1451.78, 31.12 >>, 20.0) REMOVE_PARTICLE_FX_IN_RANGE(<< -64.65, -1451.78, 31.12 >>, 20.0) CLEAR_AREA_OF_PEDS(<< -64.65, -1451.78, 31.12 >>, 10.0) CLEAR_AREA_OF_COPS(<< -64.65, -1451.78, 31.12 >>, 1000.0) CLEAR_AREA_OF_VEHICLES(<< -64.65, -1451.78, 31.12 >>, 10.0) CLEAR_AREA_OF_PROJECTILES(<< -64.65, -1451.78, 31.12 >>, 10.0) ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE) SET_CAM_PARAMS(ScriptedCamera, <<-68.575203,-1461.094849,33.279221>>,<<-4.170227,-0.026384,-32.343029>>,44.888512) SHAKE_CAM(ScriptedCamera, "HAND_SHAKE", 0.125) DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) RENDER_SCRIPT_CAMS(TRUE, FALSE) ENDIF iStageProgress++ BREAK CASE 1 IF DOES_CAM_EXIST(ScriptedCamera) IF IS_CAM_RENDERING(ScriptedCamera) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) SET_VEHICLE_DOORS_SHUT(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) ENDIF ENDIF //if last player vehicle is in the cutscene area and would interfere with cutscene entities IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_AT_COORD(GET_PLAYERS_LAST_VEHICLE(), <<-63.822353,-1455.467651,33.114697>>, << 4.0, 5.0, 3.0 >>) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<<-53.1256, -1457.9814, 30.9968>>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), <<-53.1256, -1457.9814, 30.9968>>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(),276.0446) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF //if player needs to be repositioned from the scripted cutscene area IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-63.822353,-1455.467651,33.114697>>, << 4.0, 5.0, 3.0 >>) IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_AT_COORD(GET_PLAYERS_LAST_VEHICLE(), <<-64.584755,-1461.101929,31.494101>>, << 1.25, 1.25, 1.5 >>) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<<-53.1256, -1457.9814, 30.9968>>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), <<-53.1256, -1457.9814, 30.9968>>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(),276.0446) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF CLEAR_AREA(<<-64.4999, -1461.2111, 30.9891>>, 5.0, TRUE) WARP_PED(PLAYER_PED_ID(), <<-64.4999, -1461.2111, 30.9891>>, 244.9519, FALSE, FALSE, FALSE) ENDIF ENDIF IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF IF NOT IS_PED_INJURED(psLamar.PedIndex) IF IS_PED_GROUP_MEMBER(psLamar.PedIndex, PLAYER_GROUP_ID()) REMOVE_PED_FROM_GROUP(psLamar.PedIndex) ENDIF CLEAR_PED_TASKS_IMMEDIATELY(psLamar.PedIndex) WARP_PED(psLamar.PedIndex, <<-62.8937, -1460.6669, 31.1184>>, 13.6490, FALSE, FALSE, FALSE) FORCE_PED_MOTION_STATE(psLamar.PedIndex, MS_ON_FOOT_WALK) TASK_FOLLOW_NAV_MESH_TO_COORD(psLamar.PedIndex, << -64.65, -1451.78, 31.12 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLamar.PedIndex, TRUE) ENDIF psLamar.iTimer = GET_GAME_TIMER() iStageProgress++ ENDIF ENDIF BREAK CASE 2 IF DOES_CAM_EXIST(ScriptedCamera) IF IS_CAM_RENDERING(ScriptedCamera) IF HAS_TIME_PASSED(7000, psLamar.iTimer) DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) DESTROY_ALL_CAMS() DESTROY_CAM(ScriptedCamera) RENDER_SCRIPT_CAMS(FALSE, FALSE) IF DOES_ENTITY_EXIST(psLamar.PedIndex) DELETE_PED(psLamar.PedIndex) ENDIF ePlayerBuddy = PLAYER_BUDDY_LAMAR iStageProgress++ ELIF HAS_TIME_PASSED(iLamarEntryFlashTime, psLamar.iTimer) IF ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) = CAM_VIEW_MODE_FIRST_PERSON ) OR ( NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON ) IF ( bFirstPersonFlashPlayed = FALSE ) ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") bFirstPersonFlashPlayed = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 3 IF NOT ANIMPOSTFX_IS_RUNNING("CamPushInNeutral") RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR_COMPLETED(INT &iStageProgress) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF IF IS_REPLAY_RECORDING() REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() ENDIF SWITCH iStageProgress CASE 0 REQUEST_ANIM_DICT("missfra1enter_club") REQUEST_MODEL(osStripClubDoorDummy.ModelName) PIN_INTERIOR_IN_MEMORY(GET_INTERIOR_AT_COORDS(osStripClubDoorDummy.vPosition)) IF HAS_ANIM_DICT_LOADED("missfra1enter_club") AND HAS_MODEL_LOADED(osStripClubDoorDummy.ModelName) AND IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(osStripClubDoorDummy.vPosition)) iStageProgress++ ENDIF BREAK CASE 1 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iTrevorEntrySceneID) STOP_FIRE_IN_RANGE(osStripClubDoorDummy.vPosition, 20.0) REMOVE_DECALS_IN_RANGE(osStripClubDoorDummy.vPosition, 20.0) REMOVE_PARTICLE_FX_IN_RANGE(osStripClubDoorDummy.vPosition, 20.0) CLEAR_AREA_OF_PEDS(osStripClubDoorDummy.vPosition, 10.0) CLEAR_AREA_OF_COPS(osStripClubDoorDummy.vPosition, 1000.0) CLEAR_AREA_OF_VEHICLES(osStripClubDoorDummy.vPosition, 10.0) CLEAR_AREA_OF_PROJECTILES(osStripClubDoorDummy.vPosition, 10.0) iTrevorEntrySceneID = CREATE_SYNCHRONIZED_SCENE(osStripClubDoorDummy.vPosition, <<0.0, 0.0, 29.0>>) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iTrevorEntrySceneID, TRUE) CLEAR_PED_TASKS_IMMEDIATELY(GET_PED_INDEX(CHAR_TREVOR)) SET_CURRENT_PED_WEAPON(GET_PED_INDEX(CHAR_TREVOR), WEAPONTYPE_UNARMED) HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(GET_PED_INDEX(CHAR_TREVOR), TRUE) SET_FORCE_FOOTSTEP_UPDATE(GET_PED_INDEX(CHAR_TREVOR), TRUE) TASK_SYNCHRONIZED_SCENE(GET_PED_INDEX(CHAR_TREVOR), iTrevorEntrySceneID, "missfra1enter_club", "trevor_enter_club", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_PED_INDEX(CHAR_TREVOR)) IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_STRIPCLUB_F)) DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_STRIPCLUB_F), 1.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_STRIPCLUB_F), DOORSTATE_LOCKED, FALSE, TRUE) ENDIF CREATE_MODEL_HIDE(osStripClubDoorDummy.vPosition, 1.0, osStripClubDoorDummy.ModelName, FALSE) osStripClubDoorDummy.ObjectIndex = CREATE_OBJECT(osStripClubDoorDummy.ModelName, osStripClubDoorDummy.vPosition) PLAY_SYNCHRONIZED_ENTITY_ANIM(osStripClubDoorDummy.ObjectIndex, iTrevorEntrySceneID, "trevor_enter_club_door", "missfra1enter_club", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(osStripClubDoorDummy.ObjectIndex) DESTROY_ALL_CAMS() ScriptedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) PLAY_SYNCHRONIZED_CAM_ANIM(ScriptedCamera, iTrevorEntrySceneID, "trevor_enter_club_cam", "missfra1enter_club") DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(osStripClubDoorDummy.ModelName) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF iStageProgress++ ENDIF BREAK CASE 2 IF IS_SYNCHRONIZED_SCENE_RUNNING(iTrevorEntrySceneID) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) SET_VEHICLE_DOORS_SHUT(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) ENDIF ENDIF //if last player vehicle is in the cutscene area and would interfere with cutscene entities IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<128.619202,-1298.313599,27.232681>>, <<132.460739,-1305.096802,32.193935>>, 6.000000) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<<136.4794, -1307.4880, 27.9153>>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), <<136.4794, -1307.4880, 27.9153>>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 300.4910) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF //if player needs to be repositioned from the scripted cutscene area IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<128.619202,-1298.313599,27.232681>>, <<132.460739,-1305.096802,32.193935>>, 6.000000) IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_AT_COORD(GET_PLAYERS_LAST_VEHICLE(), <<137.777435,-1310.892578,28.581730>>, << 1.25, 1.25, 1.5 >>) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<<136.4794, -1307.4880, 27.9153>>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), <<136.4794, -1307.4880, 27.9153>>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 300.4910) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF CLEAR_AREA(<<137.7463, -1310.9183, 28.0845>>, 5.0, TRUE) WARP_PED(PLAYER_PED_ID(), <<137.7463, -1310.9183, 28.0845>>, 245.5865, FALSE, FALSE, FALSE) ENDIF ENDIF iStageProgress++ ENDIF BREAK CASE 3 IF DOES_CAM_EXIST(ScriptedCamera) IF IS_SYNCHRONIZED_SCENE_RUNNING(iTrevorEntrySceneID) IF GET_SYNCHRONIZED_SCENE_PHASE(iTrevorEntrySceneID) >= 0.99 DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) DESTROY_ALL_CAMS() DESTROY_CAM(ScriptedCamera) RENDER_SCRIPT_CAMS(FALSE, FALSE) REMOVE_ANIM_DICT("missfra1enter_club") IF DOES_ENTITY_EXIST(psTrevor.PedIndex) DELETE_PED(psTrevor.PedIndex) ENDIF IF DOES_ENTITY_EXIST(osStripClubDoorDummy.ObjectIndex) DELETE_OBJECT(osStripClubDoorDummy.ObjectIndex) REMOVE_MODEL_HIDE(osStripClubDoorDummy.vPosition, 1.0, osStripClubDoorDummy.ModelName) ENDIF IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_STRIPCLUB_F)) DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_STRIPCLUB_F), 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_STRIPCLUB_F), DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF UNPIN_INTERIOR(GET_INTERIOR_AT_COORDS(osStripClubDoorDummy.vPosition)) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF ePlayerBuddy = PLAYER_BUDDY_TREVOR iStageProgress++ ELIF GET_SYNCHRONIZED_SCENE_PHASE(iTrevorEntrySceneID) >= fTrevorEntryFlashPhase IF ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) = CAM_VIEW_MODE_FIRST_PERSON ) OR ( NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON ) IF ( bFirstPersonFlashPlayed = FALSE ) ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") bFirstPersonFlashPlayed = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 4 IF NOT ANIMPOSTFX_IS_RUNNING("CamPushInNeutral") RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN_COMPLETED(INT &iStageProgress) IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) DISABLE_PLAYER_VEHICLE_CONTROLS_THIS_FRAME() ENDIF IF IS_REPLAY_RECORDING() REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() ENDIF SWITCH iStageProgress CASE 0 REQUEST_MODEL(osFranklinsDoorDummy.ModelName) REQUEST_ANIM_DICT("misstimelapse@franklinold_home") IF HAS_MODEL_LOADED(osFranklinsDoorDummy.ModelName) AND HAS_ANIM_DICT_LOADED("misstimelapse@franklinold_home") iStageProgress++ ENDIF BREAK CASE 1 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iFranklinEntrySceneID) STOP_FIRE_IN_RANGE(<<-14.862, -1441.208, 31.180>>, 20.0) REMOVE_DECALS_IN_RANGE(<<-14.862, -1441.208, 31.180>>, 20.0) REMOVE_PARTICLE_FX_IN_RANGE(<<-14.862, -1441.208, 31.180>>, 20.0) CLEAR_AREA_OF_PEDS(<<-14.862, -1441.208, 31.180>>, 10.0) CLEAR_AREA_OF_COPS(<<-14.862, -1441.208, 31.180>>, 1000.0) CLEAR_AREA_OF_VEHICLES(<<-14.862, -1441.208, 31.180>>, 10.0) CLEAR_AREA_OF_PROJECTILES(<<-14.862, -1441.208, 31.180>>, 100.0) iFranklinEntrySceneID = CREATE_SYNCHRONIZED_SCENE(<<-14.862, -1441.208, 31.180>>, <<0.000, 0.000, 180.000>>) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iFranklinEntrySceneID, TRUE) CLEAR_PED_TASKS_IMMEDIATELY(GET_PED_INDEX(CHAR_FRANKLIN)) SET_CURRENT_PED_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), WEAPONTYPE_UNARMED) HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) SET_FORCE_FOOTSTEP_UPDATE(GET_PED_INDEX(CHAR_FRANKLIN), TRUE) TASK_SYNCHRONIZED_SCENE(GET_PED_INDEX(CHAR_FRANKLIN), iFranklinEntrySceneID, "misstimelapse@franklinold_home", "franklin_enters_old_home", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_PED_INDEX(CHAR_FRANKLIN)) IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F)) DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F), 1.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F), DOORSTATE_LOCKED, FALSE, TRUE) ENDIF CREATE_MODEL_HIDE(osFranklinsDoorDummy.vPosition, 1.0, osFranklinsDoorDummy.ModelName, FALSE) osFranklinsDoorDummy.ObjectIndex = CREATE_OBJECT(osFranklinsDoorDummy.ModelName, osFranklinsDoorDummy.vPosition) PLAY_SYNCHRONIZED_ENTITY_ANIM(osFranklinsDoorDummy.ObjectIndex, iFranklinEntrySceneID, "franklin_enters_old_home_door", "misstimelapse@franklinold_home", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(osFranklinsDoorDummy.ObjectIndex) DESTROY_ALL_CAMS() ScriptedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) PLAY_SYNCHRONIZED_CAM_ANIM(ScriptedCamera, iFranklinEntrySceneID, "franklin_enters_old_home_cam_fra1", "misstimelapse@franklinold_home") DISPLAY_HUD(FALSE) DISPLAY_RADAR(FALSE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(osFranklinsDoorDummy.ModelName) IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF iStageProgress++ ENDIF BREAK CASE 2 IF IS_SYNCHRONIZED_SCENE_RUNNING(iFranklinEntrySceneID) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) SET_VEHICLE_DOORS_SHUT(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) ENDIF ENDIF //if last player vehicle is in the cutscene area and would interfere with cutscene entities IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_AT_COORD(GET_PLAYERS_LAST_VEHICLE(), <<-14.230108,-1445.700317,31.646164>>, << 4.0, 4.0, 3.0 >>) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<< -19.1293, -1455.2057, 29.5073 >>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), << -19.1293, -1455.2057, 29.5073 >>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 94.6991) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF //if player needs to be repositioned from the scripted cutscene area IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-14.230108,-1445.700317,31.646164>>, << 4.0, 4.0, 3.0 >>) IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) IF IS_ENTITY_AT_COORD(GET_PLAYERS_LAST_VEHICLE(), <<-13.969899,-1455.114258,29.966293>>, << 1.25, 1.25, 1.5 >>) IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE()) ENDIF STOP_VEHICLE_FIRE(GET_PLAYERS_LAST_VEHICLE()) CLEAR_AREA(<< -19.1293, -1455.2057, 29.5073 >>, 5.0, TRUE) SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), << -19.1293, -1455.2057, 29.5073 >>) SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 94.6991) SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE) SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE()) SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE) ENDIF ENDIF CLEAR_AREA(<<-13.9080, -1455.1030, 29.4679>>, 5.0, TRUE) WARP_PED(PLAYER_PED_ID(), <<-13.9080, -1455.1030, 29.4679>>, 359.4438, FALSE, FALSE, FALSE) ENDIF ENDIF iStageProgress++ ENDIF BREAK CASE 3 IF DOES_CAM_EXIST(ScriptedCamera) IF IS_SYNCHRONIZED_SCENE_RUNNING(iFranklinEntrySceneID) IF GET_SYNCHRONIZED_SCENE_PHASE(iFranklinEntrySceneID) >= 0.99 DISPLAY_HUD(TRUE) DISPLAY_RADAR(TRUE) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) DESTROY_ALL_CAMS() DESTROY_CAM(ScriptedCamera) RENDER_SCRIPT_CAMS(FALSE, FALSE) REMOVE_ANIM_DICT("misstimelapse@franklinold_home") IF DOES_ENTITY_EXIST(psFranklin.PedIndex) DELETE_PED(psFranklin.PedIndex) ENDIF IF DOES_ENTITY_EXIST(osFranklinsDoorDummy.ObjectIndex) DELETE_OBJECT(osFranklinsDoorDummy.ObjectIndex) REMOVE_MODEL_HIDE(osFranklinsDoorDummy.vPosition, 1.0, osFranklinsDoorDummy.ModelName) ENDIF IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F)) DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F), 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_F_HOUSE_SC_F), DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF SET_PLAYER_PED_CAN_ENTER_SAVEHOUSE(CHAR_TREVOR, SAVEHOUSE_FRANKLIN_SC, FALSE) ePlayerBuddy = PLAYER_BUDDY_FRANKLIN iStageProgress++ ELIF GET_SYNCHRONIZED_SCENE_PHASE(iFranklinEntrySceneID) >= fFranklinEntryFlashPhase IF ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) = CAM_VIEW_MODE_FIRST_PERSON ) OR ( NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON ) IF ( bFirstPersonFlashPlayed = FALSE ) ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") bFirstPersonFlashPlayed = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 4 IF NOT ANIMPOSTFX_IS_RUNNING("CamPushInNeutral") RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_STAGE_END_COMPLETED(INT &iStageProgress) SWITCH iStageProgress CASE 0 IF NOT IS_PED_INJURED(PLAYER_PED_ID()) WARP_PED(PLAYER_PED_ID(), psFranklin.vPosition, psFranklin.fHeading, FALSE, FALSE, FALSE) TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(), psFranklin.vPosition, INFINITE_TASK_TIME, FALSE, 0, TRUE, TRUE, EndCoverPointIndex, FALSE) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) WAIT(500) SET_GAMEPLAY_CAM_RELATIVE_HEADING(125.120 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(5.0) iStageProgress++ ENDIF BREAK CASE 1 IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF iStageProgress++ BREAK CASE 2 IF IS_SCREEN_FADED_IN() RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC //debug stages #IF IS_DEBUG_BUILD FUNC BOOL IS_MISSION_STAGE_DEBUG_PLAYBACK_CHASE_COMPLETED(INT &iStageProgress) SWITCH iStageProgress CASE 0 //used for playback and set piece recording INITIALISE_UBER_PLAYBACK(sVehicleRecordingsFile, vsSpeedophiles[1].iRecordingNumber) INITIALISE_UBER_ARRAY() iStageProgress++ BREAK CASE 1 //used for playback and set piece recording IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[1].VehicleIndex) CREATE_ALL_WAITING_UBER_CARS() UPDATE_UBER_PLAYBACK(vsSpeedophiles[1].VehicleIndex, 1.0) ENDIF ENDIF IF DOES_ENTITY_EXIST(SetPieceCarID[0]) IF NOT IS_ENTITY_DEAD(SetPieceCarID[0]) SET_ENTITY_COLLISION(SetPieceCarID[0], FALSE) ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL IS_MISSION_STAGE_DEBUG_RECORD_CHASE_COMPLETED(INT &iStageProgress) IF DOES_ENTITY_EXIST(osCamera.ObjectIndex) IF NOT IS_ENTITY_DEAD(osCamera.ObjectIndex) SET_ENTITY_COORDS(osCamera.ObjectIndex, vPropCameraPosition) SET_ENTITY_ROTATION(osCamera.ObjectIndex, vPropCameraRotation) ENDIF ENDIF SWITCH iStageProgress CASE 0 IF ( bStartOnAccelerateToggle = TRUE ) IF IS_BUTTON_JUST_PRESSED(PAD1, RIGHTSHOULDER2) IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[0].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[0].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsSpeedophiles[0].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[0].VehicleIndex, vsSpeedophiles[0].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[1].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[1].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsSpeedophiles[1].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[1].VehicleIndex, vsSpeedophiles[1].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsSpeedophiles[2].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsSpeedophiles[2].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsSpeedophiles[2].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsSpeedophiles[2].VehicleIndex, vsSpeedophiles[2].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF //ghosts IF IS_VEHICLE_DRIVEABLE(vsGhosts[0].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsGhosts[0].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsGhosts[0].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsGhosts[0].VehicleIndex, vsGhosts[0].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsGhosts[1].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsGhosts[1].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsGhosts[1].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsGhosts[1].VehicleIndex, vsGhosts[1].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(vsGhosts[2].VehicleIndex) IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vsGhosts[2].VehicleIndex) AND NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(vsGhosts[2].VehicleIndex) START_PLAYBACK_RECORDED_VEHICLE(vsGhosts[2].VehicleIndex, vsGhosts[2].iRecordingNumber, sVehicleRecordingsFile) ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC #ENDIF //|============================= END MISSION STAGES FUNCTIONS ============================| //|=================================== MAIN SCRIPT LOOP ==================================| SCRIPT SET_MISSION_FLAG (TRUE) //check for death or arrest IF HAS_FORCE_CLEANUP_OCCURRED() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Force cleanup occurred in stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".") #ENDIF STORE_FAIL_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), ENUM_TO_INT(SELECTOR_PED_FRANKLIN)) STORE_FAIL_WEAPON(GET_PED_INDEX(CHAR_TREVOR), ENUM_TO_INT(SELECTOR_PED_TREVOR)) Mission_Flow_Mission_Force_Cleanup() MISSION_CLEANUP() TERMINATE_THIS_THREAD() ENDIF #IF IS_DEBUG_BUILD CREATE_DEBUG_MISSION_STAGE_MENU() CREATE_DEBUG_WIDGETS() #ENDIF IF IS_REPLAY_IN_PROGRESS() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission replay is in progress.") #ENDIF SET_MISSION_STAGE_FOR_REPLAY(eMissionStage, Get_Replay_Mid_Mission_Stage()) eFranklinsFailWeapon = GET_FAIL_WEAPON(ENUM_TO_INT(SELECTOR_PED_FRANKLIN)) eTrevorsFailWeapon = GET_FAIL_WEAPON(ENUM_TO_INT(SELECTOR_PED_TREVOR)) bReplayFlag = TRUE //handle shitskip message IF ( g_bShitSkipAccepted = TRUE ) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip accepted by the player.") #ENDIF eMissionStage = GET_NEXT_MISSION_STAGE_FOR_SHITSKIP(eMissionStage) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip changed mission stage to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".") #ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip not triggered.") #ENDIF ENDIF ELSE SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_DEAL), "DRIVE TO DEAL", FALSE) ENDIF IF IS_REPEAT_PLAY_ACTIVE() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active.") #ENDIF IF NOT IS_REPLAY_IN_PROGRESS() #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active and mission replay is not in progress.") #ENDIF eMissionStage = MISSION_STAGE_CUTSCENE_INTRO bReplayFlag = TRUE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting local replay flag to TRUE for stage loading.") #ENDIF #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission stage is ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), " for repeat play and no mission replay.") #ENDIF ELSE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active and mission replay is in progress.") PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission stage is ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), " for repeat play and mission replay.") #ENDIF ENDIF ENDIF WHILE TRUE //check each frame for hotswap if it is allowed IF ( bAllowHotSwap = TRUE ) RUN_HOTSWAP(sSelectorPeds, sCamDetails) ENDIF //check each frame if mission is failed due to fail conditions //check only if mission stage loading has finished IF ( bLoadingFlag = TRUE ) RUN_FAIL_CHECKS(eMissionStage, eMissionFail) ENDIF REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_HoodSafari") IF iReplayCameraWarpTimer > GET_GAME_TIMER() REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2229916 ENDIF SWITCH eMissionStage CASE MISSION_STAGE_CUTSCENE_INTRO SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5) IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_CUTSCENE_INTRO_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_DRIVE_TO_DEAL ENDIF ENDIF BREAK CASE MISSION_STAGE_DRIVE_TO_DEAL IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_DRIVE_TO_DEAL_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_CUTSCENE_DEAL ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DEAL SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0) IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_CUTSCENE_DEAL_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_GROVE_STREET_SHOOTOUT ENDIF ENDIF BREAK CASE MISSION_STAGE_GROVE_STREET_SHOOTOUT SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0) IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_GROVE_STREET_SHOOTOUT_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_SPEEDOPHILE_RIDE ENDIF ENDIF BREAK CASE MISSION_STAGE_RUN_TO_SPEEDOPHILES SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0) IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_RUN_TO_SPEEDOPHILES_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_SPEEDOPHILE_RIDE ENDIF ENDIF BREAK CASE MISSION_STAGE_SPEEDOPHILE_RIDE IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_SPEEDOPHILE_RIDE_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_LOSE_COPS ENDIF ENDIF BREAK CASE MISSION_STAGE_LOSE_COPS IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_LOSE_COPS_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() SWITCH ePlayerBuddy CASE PLAYER_BUDDY_LAMAR eMissionStage = MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR BREAK CASE PLAYER_BUDDY_TREVOR eMissionStage = MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR BREAK CASE PLAYER_BUDDY_FRANKLIN eMissionStage = MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN BREAK CASE PLAYER_BUDDY_NONE eMissionStage = MISSION_STAGE_PASSED BREAK ENDSWITCH ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) ENDIF IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_CUTSCENE_DROPOFF_LAMAR_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) ENDIF IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_CUTSCENE_DROPOFF_TREVOR_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK CASE MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN IF IS_PLAYER_PLAYING(PLAYER_ID()) SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) ENDIF IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_CUTSCENE_DROPOFF_FRANKLIN_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK CASE MISSION_STAGE_END IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_END_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK CASE MISSION_STAGE_PASSED SWITCH ePlayerBuddy CASE PLAYER_BUDDY_NONE CASE PLAYER_BUDDY_LAMAR g_ePostFranklin1Switch = POST_FRANKLIN1_0_ESCAPEPOLICEALONE #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting g_ePostFranklin1Switch to value POST_FRANKLIN1_0_ESCAPEPOLICEALONE.") #ENDIF BREAK CASE PLAYER_BUDDY_TREVOR g_ePostFranklin1Switch = POST_FRANKLIN1_1_TREVORSTRIPCLUB #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting g_ePostFranklin1Switch to value POST_FRANKLIN1_1_TREVORSTRIPCLUB.") #ENDIF BREAK CASE PLAYER_BUDDY_FRANKLIN g_ePostFranklin1Switch = POST_FRANKLIN1_2_FRANK #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting g_ePostFranklin1Switch to value POST_FRANKLIN1_2_FRANK.") #ENDIF BREAK ENDSWITCH MISSION_FLOW_MISSION_PASSED() MISSION_CLEANUP() TERMINATE_THIS_THREAD() BREAK CASE MISSION_STAGE_FAILED //store fail weapons for Franklin and Trevor STORE_FAIL_WEAPON(GET_PED_INDEX(CHAR_FRANKLIN), ENUM_TO_INT(SELECTOR_PED_FRANKLIN)) STORE_FAIL_WEAPON(GET_PED_INDEX(CHAR_TREVOR), ENUM_TO_INT(SELECTOR_PED_TREVOR)) SET_MISSION_FAILED_WITH_REASON(eMissionFail) CLEAR_HELP() CLEAR_PRINTS() KILL_ANY_CONVERSATION() TRIGGER_MUSIC_EVENT("FRA1_MISSION_FAIL") WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP() WAIT(0) #IF IS_DEBUG_BUILD PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for GET_MISSION_FLOW_SAFE_TO_CLEANUP() to return TRUE.") #ENDIF ENDWHILE MISSION_CLEANUP() TERMINATE_THIS_THREAD() BREAK #IF IS_DEBUG_BUILD CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_DEBUG_PLAYBACK_CHASE_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK CASE MISSION_STAGE_DEBUG_RECORD_CHASE IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag) IF IS_MISSION_STAGE_DEBUG_RECORD_CHASE_COMPLETED(iMissionStageProgress) RESET_MISSION_FLAGS() eMissionStage = MISSION_STAGE_PASSED ENDIF ENDIF BREAK #ENDIF ENDSWITCH #IF IS_DEBUG_BUILD //handle debug functionality RUN_DEBUG_PASS_AND_FAIL_CHECK(eMissionStage, eMissionFail) //handle key_f and key_s presses RUN_DEBUG_MISSION_STAGE_MENU(iReturnStage, eMissionStage, bSkipFlag, bStageResetFlag) //handle z-skip menu RUN_DEBUG_SKIPS(eMissionStage, bSkipFlag, bStageResetFlag) //handle j-skip and p-skip RUN_DEBUG_WIDGETS(eMissionStage) //handle rag widgets RUN_DEBUG_INFORMATION_DISPLAY() //handle drawing of debug information #ENDIF WAIT(0) ENDWHILE ENDSCRIPT