27961 lines
1015 KiB
Python
Executable File
27961 lines
1015 KiB
Python
Executable File
//|=======================================================================================|
|
|
//| 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), <<LamarShootoutPositions[i].x, LamarShootoutPositions[i].y, LamarShootoutPositions[i].z + 0.25>>)
|
|
|
|
|
|
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
|