Files
gtav-src/script/dev_ng/singleplayer/scripts/Minigames/Trafficking/Traffick_Ground.sc
T
2025-09-29 00:52:08 +02:00

4492 lines
152 KiB
Python
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : Transport //
// AUTHOR : Steven Messinger //
// DESCRIPTION : //
// //
//////////////////////////////////////////////////////////////////////////////////////////
//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
// including the most common script headers
USING "rage_builtins.sch"
USING "globals.sch"
USING "brains.sch"
USING "script_player.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "commands_graphics.sch"
USING "commands_camera.sch"
USING "commands_streaming.sch"
USING "commands_interiors.sch"
USING "commands_object.sch"
USING "commands_vehicle.sch"
USING "commands_player.sch"
USING "commands_path.sch"
USING "finance_control_public.sch"
USING "player_ped_public.sch"
USING "model_enums.sch"
USING "timer_public.sch"
USING "lineactivation.sch"
USING "completionpercentage_public.sch"
USING "flow_public_game.sch"
USING "Drug_Trafficking_core.sch"
USING "Traffick_CarChase_lib.sch"
USING "Traffick_Ground_Smugglers_lib.sch"
USING "Traffick_Ground_Hijack_lib.sch"
USING "replay_public.sch"
USING "RC_Helper_Functions.sch"
USING "end_screen.sch"
USING "achievement_public.sch"
USING "rich_presence_public.sch"
//USING "z_volumes.sch"
// Enums
ENUM MISSION_STAGE_ENUM // distinct stages of the mission
STAGE_START = 0,
STAGE_GET_CAR,
STAGE_GET_CAR_B,
STAGE_DO_TAXI_CUTSCENE,
STAGE_GET_CAR_C,
STAGE_DRIVE_HERE,
STAGE_PICKUP,
STAGE_PICKUP_NEED_CAR,
STAGE_PICKUP_HAVE_CAR,
STAGE_FIGHT_AMBUSH,
STAGE_DELIVER,
STAGE_PICKUP_B,
STAGE_PICKUP_C,
STAGE_DESTINATION,
STAGE_ENDING_CUTSCENE,
STAGE_ENDING_CUTSCENE_RUN,
STAGE_DISPLAY_UI_01,
STAGE_DISPLAY_UI_02,
STAGE_DISPLAY_UI_03,
STAGE_DRIVE_OFF,
STAGE_ESCAPE
ENDENUM
ENUM ENDING_CUTSCENE_STATE
ENDING_CUTSCENE_STATE_01 = 0,
ENDING_CUTSCENE_STATE_02,
ENDING_CUTSCENE_STATE_03,
ENDING_CUTSCENE_STATE_04,
ENDING_CUTSCENE_SKIP_01,
ENDING_CUTSCENE_SKIP_02
ENDENUM
ENUM SMUGGLERS_ENDING_STATE
SMUGGLERS_ENDING_STATE_01 = 0,
SMUGGLERS_ENDING_STATE_02,
SMUGGLERS_ENDING_STATE_03,
SMUGGLERS_ENDING_STATE_04,
SMUGGLERS_ENDING_STATE_05,
SMUGGLERS_ENDING_SKIP_01,
SMUGGLERS_ENDING_SKIP_02
ENDENUM
ENUM SMUGGLERS_PICKUP_STATE
SMUGGLERS_PICKUP_STATE_01,
SMUGGLERS_PICKUP_STATE_02,
SMUGGLERS_PICKUP_STATE_03,
SMUGGLERS_PICKUP_STATE_04,
SMUGGLERS_PICKUP_STATE_05,
SMUGGLERS_PICKUP_SKIP_01,
SMUGGLERS_PICKUP_SKIP_02
ENDENUM
ENUM SMUGGLER_ENDING_SHOOTOUT_STATE
SMUGGLER_ENDING_SHOOTOUT_STATE_01 = 0,
SMUGGLER_ENDING_SHOOTOUT_STATE_02,
SMUGGLER_ENDING_SHOOTOUT_STATE_03,
SMUGGLER_ENDING_SHOOTOUT_SKIP_01,
SMUGGLER_ENDING_SHOOTOUT_SKIP_02
ENDENUM
ENUM SMUGGLERS_RETRIEVE_STATE
SMUGGLERS_RETRIEVE_STATE_01 = 0,
SMUGGLERS_RETRIEVE_STATE_02,
SMUGGLERS_RETRIEVE_STATE_03,
SMUGGLERS_RETRIEVE_STATE_04,
SMUGGLERS_RETRIEVE_SKIP_01,
SMUGGLERS_RETRIEVE_SKIP_02
ENDENUM
ENUM FLARE_PICKUP_STATE
FLARE_PICKUP_STATE_01 = 0,
FLARE_PICKUP_STATE_02,
FLARE_PICKUP_STATE_03,
FLARE_PICKUP_STATE_04,
FLARE_PICKUP_STATE_05,
FLARE_PICKUP_STATE_06,
FLARE_PICKUP_STATE_07,
FLARE_PICKUP_STATE_08,
FLARE_PICKUP_SKIP_01,
FLARE_PICKUP_SKIP_02
ENDENUM
ENUM CONTACT_CUTSCENE_STATE
CONTACT_CUTSCENE_STATE_01 = 0,
CONTACT_CUTSCENE_STATE_02,
CONTACT_CUTSCENE_STATE_03,
CONTACT_CUTSCENE_STATE_04
ENDENUM
ENUM HIJACK_RETRIEVE_STATE
HIJACK_RETRIEVE_STATE_01 = 0,
HIJACK_RETRIEVE_STATE_01a,
HIJACK_RETRIEVE_STATE_02,
HIJACK_RETRIEVE_STATE_03,
HIJACK_RETRIEVE_STATE_04,
HIJACK_RETRIEVE_STATE_SKIPPED_01,
HIJACK_RETRIEVE_STATE_SKIPPED_02
ENDENUM
ENUM STARTING_CUTSCENE_STATE
STARTING_CUTSCENE_STATE_01 = 0,
STARTING_CUTSCENE_STATE_02,
STARTING_CUTSCENE_STATE_03,
STARTING_CUTSCENE_SKIP_01,
STARTING_CUTSCENE_SKIP_02
ENDENUM
ENUM OSCAR_STATES
OSCAR_CREATE = 0,
OSCAR_UPDATE,
OSCAR_COMPLETE
ENDENUM
ENUM QUICK_CAM
QUICK_CAM_STAGE_01 = 0,
QUICK_CAM_STAGE_02,
QUICK_CAM_STAGE_03,
QUICK_CAM_STAGE_04
ENDENUM
ENUM VARIATION
TYPE_1 = 0,
TYPE_2
ENDENUM
// Enum inits
SMUGGLERS_ENDING_STATE smugglerEndingStage = SMUGGLERS_ENDING_STATE_01
SMUGGLERS_RETRIEVE_STATE smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_STATE_01
CAR_CHASE carChaseProgress = CAR_CHASE_INIT
AMBUSH ambushState = AMBUSH_INIT
PLANE_DROP planeDropState = PLANE_DROP_INIT
SMUGGLERS_STATE smugglersState = SMUGGLERS_STATE_TO_PICKUP
SMUGGLERS_RETRIEVE_DRUGS smugglerRetrieveState = SMUGGLERS_RETRIEVE_DRUGS_CHECK_PEDS_DEAD
FAIL_REASON_ENUM failReason
ENDING_CUTSCENE_STATE endingCutsceneStages = ENDING_CUTSCENE_STATE_01
SMUGGLER_PLANE_STATE smugglerPlaneRecordingStages = SMUGGLER_PLANE_STATE_INIT
//TRAP_STATE trapStages = TRAP_INIT
SMUGGLERS_CREATE_HELI_VEHICLE smugglersCreateHeliPedStages = SMUGGLERS_CREATE_HELI_VEHICLE_STAGE_01
QUICK_CAM quickCamStages = QUICK_CAM_STAGE_01
MISSION_STAGE_ENUM currentMissionStage = STAGE_START
// All data needed by the UI.
STRUCT GROUND_TRAFFICKING_UI
SCRIPT_SCALEFORM_UI uiControls
END_SCREEN_DATASET groundTraffickingEndScreen
INT uiFlags
ENDSTRUCT
GROUND_TRAFFICKING_UI groundEndScreen
// Function pointers
CustomCutsceneCaller fpSmugglersEnding
//CustomCutsceneCaller fpEndingCutscene01
CustomCutsceneCaller fpSmugglersPickupCutscene
// Structs
CUTSCENE_ARGS cutArgs
ARGS myArgsCopy
LOCATION_DATA myLocData
CAR_AMBUSH_ARGS ambushArgs
PLANE_DROP_ARGS planeDropArgs
DRUG_CARGO_ARGS drugCargoArgs
SMUGGLERS_MODE_ARGS smugArgs
CAR_CHASER_ARGS carChaserArgs
STATIC_CHASE_ARGS staticChaseArgs
HIJACK_ARGS hijackArgs
EXPLOSIVE_PACKAGE_ARGS expPackageArgs
//TRAP_ARGS trapArgs
structPedsForConversation MyLocalPedStruct
CONST_INT NUMBER_BAD_GUY_VEHICLES 1
CONST_INT HIJACK_DELAY_TIME 20 // using struct timer, so time is in seconds
CONST_INT DELAY_TIME 15000
CONST_INT DELAY_TIME_AMBUSH 25000
CONST_INT DISTANCE_TO_WARN_OF_AMBUSHERS 300
CONST_FLOAT MAX_TIME_ALLOWED_ON_ROADS 32.0
TEXT_LABEL_31 sLastObjective
BOOL bInAmbush = FALSE
BOOL bIsChaseActive = FALSE
BOOL bInActiveFight = FALSE
BOOL bDrugsLoaded = FALSE
BOOL bIsSmugglersActive = FALSE
BOOL bIsCutsceneActive = FALSE
BOOL bDoPlane = FALSE
BOOL bDoAmbush = TRUE
BOOL bDoCarChase = TRUE
BOOL bDoPoliceChase = FALSE
BOOL bDoDelicate = TRUE
BOOL bDoSmugglers = FALSE
BOOL bSmugglersCreated = FALSE
BOOL bComplete = FALSE
BOOL bDoFlareCutscene = FALSE
BOOL bDoContactCutscene = FALSE
BOOL bDoHijack = FALSE
BOOL bOkayToRunTrap = FALSE
BOOL bSkippedMission = FALSE
BOOL bWanted = FALSE
BOOL bOutOfVehicle = FALSE
BOOL bGenPrinted = FALSE
BOOL bTimedPickup = TRUE
BOOL bDisplayTimer = FALSE
BOOL bCarChaseComplete = FALSE
BOOL bPrintObjAgain = TRUE
BOOL bSkippedCutscene = FALSE
BOOL bSmugglersRetrieveCutscene = FALSE
BOOL bSmugglersEndingCutscene = FALSE
BOOL bEndingCutscene = FALSE
BOOL bRunOnce = FALSE
BOOL bTimerStarted = FALSE
BOOL bGiveTimeWarning = FALSE
BOOL bTriggerAmbushNow = FALSE
BOOL bTriggerAmbushLate = FALSE
BOOL bTimeExpired = FALSE
BOOL bPlayMusic = FALSE
BOOL bPrintObjectivesAndHelp = FALSE
BOOL bGrabbedTimeForCutscene = FALSE
BOOL bStreamed = FALSE
BOOL bInRepeatableMode = FALSE
BOOL bRemoveFlare = FALSE
BOOL bGiveAmbushWarning = FALSE
BOOL bPassed = FALSE
BOOL bPlayerVisible = FALSE
BOOL bOnRoads = FALSE
BOOL bGiveCopWarning = FALSE
BOOL bAmbushActive = FALSE
BOOL bPlayerWantedAtDropOff = FALSE
BOOL bToldToGetBackInVehicle = FALSE
BOOL bSetTimer = FALSE
BOOL bOutOfVehicleAtPickup = FALSE
BOOL bPrintLateObjective = FALSE
BOOL bUseInterp = FALSE
BOOL bTriggeredWanted = FALSE
BOOL bNoAmbush = FALSE
BOOL bRunHeliChase = FALSE
BOOL bPlayedNoAmbushDialogue = FALSE
BOOL bLedPoliceToSite = FALSE
BOOL bIdleAmbusherTrigger = FALSE
BOOL bRunAmbushChase = FALSE
BOOL bRunSmugglerChase = FALSE
BOOL bDrawCorona = FALSE
BOOL bGaveDelayWarning = FALSE
BOOL bPassedOnce = FALSE
BOOL bPrintHelpForOtherVehicle = FALSE
BOOL bInterrupt = FALSE
BOOL bPrintedObjectiveToLoseRunners = FALSE
BOOL bNoAmbushPrintObjective = FALSE
BOOL bPrintedLoseCopsAtEnd = FALSE
BOOL bPrintedLoseAmbushersAtEnd = FALSE
BOOL bPlayedWantedDialogue = FALSE
BOOL bOkayToBlipObjective = FALSE
BOOL bSkippedEndingScreen = FALSE
BOOL bDoneRenderingEndScreen = FALSE
VECTOR vCurDestObjective[MAX_NUMBER_DROPS]
VECTOR vQuickCamPosOffset = <<3, -10.0, 1.5>>
VECTOR vQuickCamRotOffset = <<0, 0, 0>>
VECTOR vCamPosition, vCamRotation
VECTOR vGroundEndingPos = <<2134.7585, 4789.8989, 39.9702>>
VECTOR vSpawnPosition = <<2149.7371, 4798.4717, 40.1071>>
FLOAT fHeadingDelta
FLOAT fGroundEndingHeading = 24.9014
FLOAT fMissionTime
FLOAT fPlayerSpeed
FLOAT fHealth = 100
FLOAT fCurDist = -1
FLOAT fTimeToBlip
FLOAT fTimeToBlipRivals
FLOAT fSpawnHeading = 55.4847
INT startTime
INT outOfVehicleTime = 0
INT iAllowSkipCutsceneTime = 0
INT iRandInt
INT iStageToUse
INT iSmugglersCinematicStages = 0
INT iTypeOneCinmaticStages = 0
STRING sWeapon
// Peds
PED_INDEX badGuyPed[maxNumBadGuys]
// Vehicles
VEHICLE_INDEX myVehicle
VEHICLE_INDEX myEntities[MAX_NUMBER_DROPS]
// Blips
BLIP_INDEX myVehicleBlip
BLIP_INDEX myLocationBlip[MAX_NUMBER_DROPS]
//BLIP_INDEX badGuyBlips[maxNumBadGuys]
//BLIP_INDEX badGuyVehicleBlips[4]
// Cameras
CAMERA_INDEX camQuickPlaneCam
CAMERA_INDEX myCamera
CAMERA_INDEX transitionCam
SCENARIO_BLOCKING_INDEX sbi01, sbi02, sbi03, sbi04
TEXT_LABEL_23 TestResumptionLabel
// Timers
structTimer stMissionTimer
structTimer tQuickCam
structTimer myTimer
structTimer stLoadSceneTimer
structTimer tOnRoadTimer
structTimer tNoAmbushTimer
structTimer tIdleTimer
structTimer tDelayReturnTimer
structTimer tAbandonPackageTimer
structTimer tEndChaseTimer
// Model Names
MODEL_NAMES mnVehicleToUse
MODEL_NAMES mnPedToUse
//CustomCutsceneCaller fpEndingCutscene01
// Misc
WEAPON_TYPE weaponInHand
SIMPLE_USE_CONTEXT cucEndScreen
#IF IS_DEBUG_BUILD
BOOL pSkipping = FALSE
#ENDIF
#IF IS_DEBUG_BUILD
//Necessary data for adjusting objects via RAG widgets
STRUCT DEBUG_POSITION_DATA
BOOL bTurnOnPositioning
BOOL bUseAttachWidgets
VECTOR vDebugVector
FLOAT fRotateX
FLOAT fRotateY
FLOAT fRotateZ
FLOAT fOffsetX
FLOAT fOffsetY
FLOAT fOffsetZ
ENDSTRUCT
DEBUG_POSITION_DATA myDebugData
//need to call this once at the start of the script to add the
PROC BEAT_ADD_WIDGETS()
START_WIDGET_GROUP("BEAT WIDGETS")
ADD_WIDGET_BOOL("Turn On Positioning Widgets", myDebugData.bTurnOnPositioning)
ADD_WIDGET_BOOL("Use Attach", myDebugData.bUseAttachWidgets)
ADD_WIDGET_FLOAT_SLIDER("RotateX", myDebugData.fRotateX, -359, 359, 2.5)
ADD_WIDGET_FLOAT_SLIDER("RotateY", myDebugData.fRotateY, -359, 359, 2.5)
ADD_WIDGET_FLOAT_SLIDER("RotateZ", myDebugData.fRotateZ, -359, 359, 2.5)
ADD_WIDGET_FLOAT_SLIDER("OffsetX", myDebugData.fOffsetX, -100, 100, 0.05)
ADD_WIDGET_FLOAT_SLIDER("OffsetY", myDebugData.fOffsetY, -100, 100, 0.05)
ADD_WIDGET_FLOAT_SLIDER("OffsetZ", myDebugData.fOffsetZ, -100, 100, 0.05)
STOP_WIDGET_GROUP()
ENDPROC
PROC BEAT_UPDATE_WIDGETS_FOR_OBJECT(OBJECT_INDEX entityFirst, VECTOR vCenterPoint, FLOAT fCenterHeading, ENTITY_INDEX entitySecond = NULL, INT iBoneIndexSecond = 0)
IF myDebugData.bTurnOnPositioning
IF NOT myDebugData.bUseAttachWidgets
IF DOES_ENTITY_EXIST(entityFirst)
VECTOR vOffset = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vCenterPoint, fCenterHeading, << myDebugData.fOffsetX, myDebugData.fOffsetY, myDebugData.fOffsetZ >>)
SET_ENTITY_COORDS(entityFirst, vOffset)
SET_ENTITY_ROTATION(entityFirst, << myDebugData.fRotateX, myDebugData.fRotateY, myDebugData.fRotateZ >>)
ENDIF
ELSE
IF DOES_ENTITY_EXIST(entityFirst) AND DOES_ENTITY_EXIST(entitySecond)
ATTACH_ENTITY_TO_ENTITY(entityFirst, entitySecond, iBoneIndexSecond, << myDebugData.fOffsetX, myDebugData.fOffsetY, myDebugData.fOffsetZ >>, << myDebugData.fRotateX, myDebugData.fRotateY, myDebugData.fRotateZ >> )
ENDIF
ENDIF
ENDIF
ENDPROC
#ENDIF
// cleanup the mission
PROC MISSION_CLEANUP()
INT iStatsTime
// cleanup anything you need to. You don't need to dereference script-created entities like peds and vehicles,
// as code will do this automatically when the script terminates.
IF DOES_ENTITY_EXIST(myVehicle) AND NOT IS_ENTITY_DEAD(myVehicle)
SET_VEHICLE_DOORS_LOCKED(myVehicle, VEHICLELOCK_UNLOCKED)
PRINTLN("MAKING SURE DOORS ARE UNLOCKED ON - myVehicle")
ENDIF
SET_SCENARIO_GROUP_ENABLED("PRISON_TOWERS", FALSE)
PRINTLN("DISABLING PRISON TOWERS")
CLEAR_AREA_OF_PROJECTILES(vGroundEndingPos, 150.0)
REMOVE_NAVMESH_REQUIRED_REGIONS()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
iStatsTime = FLOOR(fMissionTime)
PRINTLN("iStatsTime = ", iStatsTime)
//set rich presence back to default.
SET_DEFAULT_RICH_PRESENCE_FOR_SP()
PLAYSTATS_ODDJOB_DONE(iStatsTime, ENUM_TO_INT(MINIGAME_TRAFFICKING_GROUND))
PRINTLN("CALLING PLAYSTATS_ODDJOB_DONE - MINIGAME_TRAFFICKING_GROUND")
SET_ROADS_BACK_TO_ORIGINAL(<< 1651.576, 4939.412, 41.818 >>, << 1721.456, 4540.486, 41.818 >>)
SET_ROADS_BACK_TO_ORIGINAL(<< 2499.300, 3456.401, -49.795>>, << 2424.300, 3456.401, 49.795>>)
SET_ROADS_BACK_TO_ORIGINAL(<< 1751.693, 4562.989, -57.869 >>, << 769.406, 4375.608, 57.869 >>)
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<2164.037842,4825.626953,35.613750>>, <<1899.277832,4697.752441,49.086414>>, 100.000000)
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<1757.214600,4570.540039,30.477287>>, <<1385.558228,4495.363770,62.740479>>, 100.000000)
// Re-setting wanted multiplier back to 1.0
SET_WANTED_LEVEL_MULTIPLIER(1.0)
SET_MAX_WANTED_LEVEL(5)
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(1.0)
SET_TIME_SCALE(1.0)
SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE)
IF NOT bPassed
IF DOES_ENTITY_EXIST(myVehicle)
SET_ENTITY_AS_MISSION_ENTITY(myVehicle, TRUE, TRUE)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(myVehicle, vSpawnPosition) < 50
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vGroundEndingPos)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fGroundEndingHeading)
DELETE_VEHICLE(myVehicle)
PRINTLN("DELETING GROUND VEHICLE - TOO CLOSE TO SPAWN POSITION")
ENDIF
ENDIF
ENDIF
ENDIF
// IF NOT IS_ENTITY_DEAD(myVehicle)
// SET_VEHICLE_AS_NO_LONGER_NEEDED(myVehicle)
// PRINTLN("SETTING myVehicle AS NO LONGER NEEDED")
// ENDIF
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// // only delete the vehicle if the player isn't in it
// SAFE_DELETE_VEHICLE(myVehicle)
// ELSE
// PRINTLN("PLAYER INJURED IN CLEANUP")
// ENDIF
IF bPassed = TRUE
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
DISPLAY_RADAR(TRUE)
ENDIF
DISABLE_CELLPHONE(FALSE)
REMOVE_VEHICLE_RECORDING(101, "GroundTaxi")
CLEAR_GPS_CUSTOM_ROUTE()
REMOVE_ROAD_NODE_SPEED_ZONE(hijackArgs.iSpeedNode)
REMOVE_SCENARIO_BLOCKING_AREA(sbi01)
REMOVE_SCENARIO_BLOCKING_AREA(sbi02)
REMOVE_SCENARIO_BLOCKING_AREA(sbi03)
REMOVE_SCENARIO_BLOCKING_AREA(sbi04)
PRINTLN("TERMINATING Traffic_Ground.sc")
TERMINATE_THIS_THREAD() // important, kills the script
ENDPROC
FUNC VARIATION GET_VARIATION_TYPE()
VARIATION enumType
// PRINTLN("g_savedGlobals.sTraffickingData.iGroundRank = ", g_savedGlobals.sTraffickingData.iGroundRank)
IF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTraffickingData.iBools, TRAF_BOOL_Type1)
enumType = TYPE_1
// PRINTLN("RETURNING TYPE 1")
ELIF IS_BITMASK_AS_ENUM_SET(g_savedGlobals.sTraffickingData.iBools, TRAF_BOOL_Type2)
enumType = TYPE_2
// PRINTLN("RETURNING TYPE 2")
ENDIF
RETURN enumType
ENDFUNC
PROC DELETE_CUTSCENE_CARGO()
INT idx
REPEAT COUNT_OF(drugCargoArgs.oCutsceneCargo) idx
IF DOES_ENTITY_EXIST(drugCargoArgs.oCutsceneCargo[idx])
DELETE_OBJECT(drugCargoArgs.oCutsceneCargo[idx])
DEBUG_PRINT("DELETING CUTSCENE CARGO")
ENDIF
ENDREPEAT
ENDPROC
PROC HANDLE_TAXI_DIALOGUE()
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, NULL, "OSCAR")
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", myLocData.dropData[0].sConvo, CONV_PRIORITY_VERY_HIGH)
ENDPROC
PROC HANDLE_PRINTS(TEXT_LABEL_63 sObjective, STRING sHelp)
IF IS_STRING_NULL_OR_EMPTY(sObjective)
PRINT("DTRFKGR_02", DEFAULT_GOD_TEXT_TIME, 1)
PRINTLN("STRING IS NULL - USING DEFAULT")
ELSE
PRINT(sObjective, DEFAULT_GOD_TEXT_TIME, 1)
PRINTLN("STRING IS GOOD - USING SPECIFIC STRING")
ENDIF
sLastObjective = sObjective
REGISTER_PRINT_DELAY(printTimer, sHelp)
ENDPROC
PROC PRINT_FIRST_OBJECTIVES_AND_HELP()
IF GET_VARIATION_TYPE() = TYPE_1
HANDLE_PRINTS(myLocData.dropData[0].sObjective, "DTRFKGR_HELP_02")
DEBUG_PRINT("PRINTING OBJECTIVE - LEVEL 1")
ELSE
HANDLE_PRINTS(myLocData.dropData[0].sObjective, "DTRFKGR_HELP_03")
DEBUG_PRINT("PRINTING OBJECTIVE - LEVEL 2")
ENDIF
ENDPROC
FUNC STRING PRINT_FIRST_HELP()
STRING sHelpPrint
IF GET_VARIATION_TYPE() = TYPE_1
sHelpPrint = "DTRFKGR_HELP_07"
ELSE
sHelpPrint = "DTRFKGR_HELP_03"
ENDIF
RETURN sHelpPrint
ENDFUNC
// common stuff for cutscene skip
PROC HANDLE_SKIP_CUTSCENE_GROUND()
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
AND GET_GAME_TIMER() >= iAllowSkipCutsceneTime + 1000
DEBUG_PRINT("SKIPPED CUTSCENE")
DO_SCREEN_FADE_OUT(500)
WHILE NOT IS_SCREEN_FADED_OUT()
WAIT(0)
ENDWHILE
CLEAR_PRINTS()
HANG_UP_AND_PUT_AWAY_PHONE()
KILL_ANY_CONVERSATION()
bSkippedCutscene = TRUE
// Ending cargo unloading cutscene
IF bEndingCutscene
PRINTLN("SETTING STATE - ENDING_CUTSCENE_SKIP_01")
endingCutsceneStages = ENDING_CUTSCENE_SKIP_01
ENDIF
// Smuggler's cutscenes
IF bSmugglersRetrieveCutscene
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_SKIP_01
ENDIF
IF bSmugglersEndingCutscene
smugglerEndingStage = SMUGGLERS_ENDING_SKIP_01
ENDIF
ENDIF
ENDPROC
PROC GIVE_PLAYER_WEAPONS()
INT iStickyBombAmmo, iPistolAmmo, iSMGAmmo
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STICKYBOMB)
PRINTLN("PLAYER HAS STICKYBOMB")
iStickyBombAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STICKYBOMB)
PRINTLN("NUMBER OF STICKYBOMBS = ", iStickyBombAmmo)
IF iStickyBombAmmo < 5
SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_STICKYBOMB, 5)
PRINTLN("GIVING PLAYER STICKYBOMB 01")
ENDIF
ELSE
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_STICKYBOMB, 5)
PRINTLN("GIVING PLAYER STICKYBOMB 02")
ENDIF
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL)
PRINTLN("PLAYER HAS WEAPONTYPE_PISTOL")
iPistolAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL)
PRINTLN("NUMBER OF PISTOL BULLETS = ", iPistolAmmo)
IF iPistolAmmo < 100
SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 100)
PRINTLN("GIVING PLAYER WEAPONTYPE_PISTOL 01")
ENDIF
ELSE
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 100)
PRINTLN("GIVING PLAYER WEAPONTYPE_PISTOL 02")
ENDIF
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_MICROSMG)
PRINTLN("PLAYER HAS WEAPONTYPE_MICROSMG")
iSMGAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_MICROSMG)
PRINTLN("NUMBER OF MICROSMG BULLETS = ", iSMGAmmo)
IF iSMGAmmo < 100
SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_MICROSMG, 100)
PRINTLN("GIVING PLAYER WEAPONTYPE_MICROSMG 01")
ENDIF
ELSE
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_MICROSMG, 100)
PRINTLN("GIVING PLAYER WEAPONTYPE_SMG 02")
ENDIF
ENDIF
ENDPROC
PROC AWARD_PLAYER_WEAPONS(WEAPON_TYPE wtWeapon, INT iDesiredAmmoCount)
INT iAmmoCount
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), wtWeapon)
PRINTLN("PLAYER HAS WEAPON ALREADY")
iAmmoCount = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtWeapon)
PRINTLN("NUMBER OF AMMO 01 = ", iAmmoCount)
// IF iAmmoCount < iDesiredAmmoCount
SET_PED_AMMO(PLAYER_PED_ID(), wtWeapon, (iDesiredAmmoCount + iAmmoCount))
PRINTLN("GIVING PLAYER WEAPON WITH AMMO")
// ENDIF
ELSE
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), wtWeapon, 0)
iAmmoCount = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtWeapon)
PRINTLN("NUMBER OF AMMO 02 = ", iAmmoCount)
IF iAmmoCount < iDesiredAmmoCount
SET_PED_AMMO(PLAYER_PED_ID(), wtWeapon, iDesiredAmmoCount)
ENDIF
PRINTLN("GIVING PLAYER WEAPON")
ENDIF
ENDIF
ENDPROC
FUNC STRING GET_WEAPON_AWARDED()
IF g_savedGlobals.sTraffickingData.iGroundRank = 0
sWeapon = "DTRSHRD_WEAP01"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PISTOL, 100)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 1
sWeapon = "DTRSHRD_WEAP02"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_MICROSMG, 100)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 2
sWeapon = "DTRSHRD_WEAP03"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_GRENADE, 5)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 3
sWeapon = "DTRSHRD_WEAP04"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PUMPSHOTGUN, 40)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 4
sWeapon = "DTRSHRD_WEAP05"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_ASSAULTRIFLE, 5)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 5
SWITCH g_savedGlobals.sTraffickingData.iNumRepeatComplete
CASE 0
sWeapon = "DTRSHRD_WEAP01"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PISTOL, 100)
BREAK
CASE 1
sWeapon = "DTRSHRD_WEAP02"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_MICROSMG, 100)
BREAK
CASE 2
sWeapon = "DTRSHRD_WEAP03"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_GRENADE, 5)
BREAK
CASE 3
sWeapon = "DTRSHRD_WEAP04"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PUMPSHOTGUN, 40)
BREAK
CASE 4
sWeapon = "DTRSHRD_WEAP05"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_ASSAULTRIFLE, 5)
BREAK
CASE 5
sWeapon = "DTRSHRD_WEAP01"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PISTOL, 100)
BREAK
CASE 6
sWeapon = "DTRSHRD_WEAP02"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_MICROSMG, 100)
BREAK
CASE 7
sWeapon = "DTRSHRD_WEAP03"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_GRENADE, 5)
BREAK
CASE 8
sWeapon = "DTRSHRD_WEAP04"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PUMPSHOTGUN, 40)
BREAK
CASE 9
sWeapon = "DTRSHRD_WEAP05"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_ASSAULTRIFLE, 5)
BREAK
CASE 10
sWeapon = "DTRSHRD_WEAP01"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PISTOL, 100)
BREAK
CASE 11
sWeapon = "DTRSHRD_WEAP02"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_MICROSMG, 100)
BREAK
CASE 12
sWeapon = "DTRSHRD_WEAP03"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_GRENADE, 5)
BREAK
CASE 13
sWeapon = "DTRSHRD_WEAP04"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_PUMPSHOTGUN, 40)
BREAK
CASE 14
sWeapon = "DTRSHRD_WEAP05"
AWARD_PLAYER_WEAPONS(WEAPONTYPE_ASSAULTRIFLE, 5)
BREAK
ENDSWITCH
ENDIF
RETURN sWeapon
ENDFUNC
// mission passed
PROC MISSION_PASSED()
IF NOT bPassedOnce
// To Fix Bug # 504501, for some reason -1 was being passed into myArgsCopy.completionEntry.
myArgsCopy.completionEntry = myArgsCopy.completionEntry
SWITCH g_savedGlobals.sTraffickingData.iGroundRank
CASE 0
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_OJ_DTG1)
PRINTLN("REGISTERING COMPLETION PERCENTAGE FOR COMPLETING GROUND TRAFFICKING 1")
BREAK
CASE 1
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_OJ_DTG2)
PRINTLN("REGISTERING COMPLETION PERCENTAGE FOR COMPLETING GROUND TRAFFICKING 2")
BREAK
CASE 2
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_OJ_DTG3)
PRINTLN("REGISTERING COMPLETION PERCENTAGE FOR COMPLETING GROUND TRAFFICKING 3")
BREAK
CASE 3
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_OJ_DTG4)
PRINTLN("REGISTERING COMPLETION PERCENTAGE FOR COMPLETING GROUND TRAFFICKING 4")
BREAK
CASE 4
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_OJ_DTG5)
PRINTLN("REGISTERING COMPLETION PERCENTAGE FOR COMPLETING GROUND TRAFFICKING 5")
BREAK
ENDSWITCH
IF g_savedGlobals.sTraffickingData.iGroundRank < 5
g_savedGlobals.sTraffickingData.iGroundRank++
PRINTLN("GROUND RANK NOW = ", g_savedGlobals.sTraffickingData.iGroundRank)
ELIF g_savedGlobals.sTraffickingData.iGroundRank >= 5
g_savedGlobals.sTraffickingData.iGroundRank = 5
PRINTLN("COMPLETED CYCLE, GROUND RANK = ", g_savedGlobals.sTraffickingData.iGroundRank)
g_savedGlobals.sTraffickingData.iNumRepeatComplete++
PRINTLN("NUMBER OF REPEATS COMPLETED = ", g_savedGlobals.sTraffickingData.iNumRepeatComplete)
ENDIF
//Check if the trafficking total stat has changed
int iCurrStatVal
int iNewStatVal = g_savedGlobals.sTraffickingData.iAirRank + g_savedGlobals.sTraffickingData.iGroundRank
STAT_GET_INT(NUM_TRAFFICKING_COMPLETED, iCurrStatVal)
// CPRINTLN(debug_dan,"Current/new trafficking values: ",iCurrStatVal,"/",iNewStatVal)
IF icurrStatVal < iNewstatVal
//Update total trafficking count stat
STAT_SET_INT(NUM_TRAFFICKING_COMPLETED, iNewStatVal)
//Update achievement progress
SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH13), iNewStatVal)
// CPRINTLN(debug_dan,"Set tp industries achievement to ",iNewStatVal)
ENDIF
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: ACH13 - TP Industries Arms Race - ", g_savedGlobals.sTraffickingData.iAirRank + g_savedGlobals.sTraffickingData.iGroundRank, " of ", ACH13_AIR_TOTAL + ACH13_GND_TOTAL)
IF (g_savedGlobals.sTraffickingData.iAirRank >= ACH13_AIR_TOTAL) AND (g_savedGlobals.sTraffickingData.iGroundRank >= ACH13_GND_TOTAL)
AWARD_ACHIEVEMENT(ACH13) // TP Industries Arms Race
ENDIF
IF NOT bRunOnce
IF bSkippedMission
// Using myArgs.fTimeLimit as a way to determine if we're in repeatable mode.
fMissionTime = GET_TIMER_IN_SECONDS(stMissionTimer)
PRINTSTRING("TOTAL MISSION TIME = ")
PRINTFLOAT(fMissionTime)
PRINTNL()
IF bInRepeatableMode
PRINTLN("S-SKIP: IN REPEATABLE MODE")
SET_ENDSCREEN_DATASET_HEADER(groundEndScreen.groundTraffickingEndScreen, "DTRSHRD_MPASS", "DTRSHRD_GRT")
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_TIME_M_S, "DTRSHRD_TIME", "", FLOOR(fMissionTime), 0, ESCM_NO_MARK)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_DOLLAR_VALUE, "DTRSHRD_MONEY", "", 5000, 0, ESCM_NO_MARK)
ELSE
PRINTLN("IN REGULAR MODE")
sWeapon = GET_WEAPON_AWARDED()
SET_ENDSCREEN_DATASET_HEADER(groundEndScreen.groundTraffickingEndScreen, "DTRSHRD_MPASS", "DTRSHRD_GRT")
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_TIME_M_S, "DTRSHRD_TIME", "", FLOOR(fMissionTime), 0, ESCM_NO_MARK)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_DOLLAR_VALUE, "DTRSHRD_MONEY", "", 5000, 0, ESCM_NO_MARK)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_RAW_STRING, "DTRSHRD_WEAP", sWeapon, 0, 0, ESCM_NO_MARK)
ENDIF
currentMissionStage = STAGE_ENDING_CUTSCENE
bRunOnce = TRUE
ENDIF
ENDIF
PROPERTY_PAY_INCOME(PROPERTY_ARMS_TRAFFICKING, 5000)
SET_AUTOSAVE_IGNORES_ON_MISSION_FLAG(TRUE)
ODDJOB_AUTO_SAVE()
PRINTLN("CALLING AUTOSAVE")
bPassedOnce = TRUE
PRINTLN("bPassedOnce = TRUE") // To Fix Bug # 1327402
ENDIF
ENDPROC
PROC REPOSITION_PLAYER_AND_REMOVE_ITEMS()
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vGroundEndingPos)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fGroundEndingHeading)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
ENDIF
IF NOT IS_ENTITY_DEAD(myVehicle)
SET_ENTITY_AS_MISSION_ENTITY(myVehicle)
ENDIF
IF bDoHijack
DELETE_CANISTERS(expPackageArgs)
IF DOES_ENTITY_EXIST(hijackArgs.oWeaponsCargo)
DELETE_OBJECT(hijackArgs.oWeaponsCargo)
DEBUG_PRINT("DELETING hijackArgs.oWeaponsCargo")
ENDIF
IF DOES_ENTITY_EXIST(expPackageArgs.oRamp)
DELETE_OBJECT(expPackageArgs.oRamp)
PRINTLN("DELETING RAMP")
ENDIF
IF DOES_ENTITY_EXIST(expPackageArgs.oRampDoor)
DELETE_OBJECT(expPackageArgs.oRampDoor)
PRINTLN("DELETING RAMP DOOR")
ENDIF
ENDIF
DEBUG_PRINT("MISSION ENDING")
REMOVE_DRUG_CARGO(drugCargoArgs)
IF DOES_ENTITY_EXIST(myVehicle)
DELETE_VEHICLE(myVehicle)
DEBUG_PRINT("DELETING myVehicle")
ENDIF
ENDPROC
FUNC BOOL ENDING_CUTSCENE_NEW()
FLOAT fTempHeading = 0.0
FLOAT fPlayerHeading
VECTOR vPlayerPos
IF NOT bGrabbedTimeForCutscene
// Set for skip
bEndingCutscene = TRUE
iAllowSkipCutsceneTime = GET_GAME_TIMER()
bGrabbedTimeForCutscene = TRUE
ENDIF
//------------------------------------------SKIP CUTSCENE------------------------------------------
IF bSetTimer AND TIMERA() > 3000
IF NOT bSkippedCutscene
HANDLE_SKIP_CUTSCENE_GROUND()
ENDIF
ENDIF
SWITCH endingCutsceneStages
CASE ENDING_CUTSCENE_STATE_01
ODDJOB_ENTER_CUTSCENE(SPC_REMOVE_EXPLOSIONS | SPC_REMOVE_FIRES | SPC_REMOVE_PROJECTILES)
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID())
REMOVE_BLIP(myLocationBlip[0])
TRIGGER_MUSIC_EVENT("OJDG_COMPLETE")
PRINTLN("STARTING MUSIC - OJDG_COMPLETE")
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
START_TIMER_NOW(cutArgs.cutSceneTimer)
ELSE
RESTART_TIMER_NOW(cutArgs.cutSceneTimer)
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
PRINTLN("vPlayerPos = ",vPlayerPos)
ENDIF
fTempHeading = GET_HEADING_BETWEEN_VECTORS(vPlayerPos, vGroundEndingPos)
PRINTLN("fTempHeading = ", fTempHeading)
fPlayerHeading = GET_ENTITY_HEADING(PLAYER_PED_ID())
PRINTLN("fPlayerHeading = ", fPlayerHeading)
fHeadingDelta = fPlayerHeading - fTempHeading
PRINTLN("BEFORE: fHeadingDelta = ", fHeadingDelta)
IF fHeadingDelta > 180
fHeadingDelta -= 360
ELIF fHeadingDelta < -180
fHeadingDelta += 360
ENDIF
PRINTLN("AFTER: fHeadingDelta = ", fHeadingDelta)
bIsCutsceneActive = TRUE
DEBUG_PRINT("bIsCutsceneActive = TRUE")
vCamPosition = GET_GAMEPLAY_CAM_COORD()
PRINTLN("BEFORE: vCamPosition = ", vCamPosition)
vCamRotation = GET_GAMEPLAY_CAM_ROT()
PRINTLN("vCamRotation = ", vCamRotation)
vCamPosition.z += 20.0 //25m above the player.
PRINTLN("AFTER: vCamPosition = ", vCamPosition)
IF fHeadingDelta < 0
vCamRotation.z -= 40
ELSE
vCamRotation.z += 40
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << 2146.438, 4785.841, -40.970 >>, << 2123.817, 4775.197, 50.970 >>, 23.000)
PRINTLN("PLAYER IS IN ANGLED AREA")
bUseInterp = FALSE
ELSE
PRINTLN("PLAYER IS NOT IN ANGLED AREA")
bUseInterp = TRUE
ENDIF
IF NOT DOES_CAM_EXIST(myCamera)
myCamera = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vCamPosition, vCamRotation, 45, TRUE)
RENDER_SCRIPT_CAMS(TRUE, bUseInterp, 6500)
SHAKE_CAM(myCamera, "HAND_SHAKE", 0.1)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), myVehicle)
ENDIF
CLEAR_HELP()
IF bUseInterp
DEBUG_PRINT("GOING TO STATE - ENDING_CUTSCENE_STATE_02")
endingCutsceneStages = ENDING_CUTSCENE_STATE_02
ELSE
DEBUG_PRINT("bUseInterp IS TRUE: GOING TO STATE - ENDING_CUTSCENE_STATE_03")
endingCutsceneStages = ENDING_CUTSCENE_STATE_03
ENDIF
ENDIF
BREAK
//======================================================================================================================================
CASE ENDING_CUTSCENE_STATE_02
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 5)
IF fHeadingDelta < 0
vCamRotation.z -= 20
ELSE
vCamRotation.z += 20
ENDIF
transitionCam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vCamPosition, vCamRotation, 45, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(transitionCam, myCamera, 15000, GRAPH_TYPE_SIN_ACCEL_DECEL)
SHAKE_CAM(myCamera, "HAND_SHAKE", 0.1)
RESTART_TIMER_NOW(cutArgs.cutSceneTimer)
// Setting player coordinates following cutscene
IF NOT IS_ENTITY_ON_SCREEN(PLAYER_PED_ID()) AND IS_ENTITY_OCCLUDED(PLAYER_PED_ID())
REPOSITION_PLAYER_AND_REMOVE_ITEMS()
PRINTLN("REPOSITIONING PLAYER EARLY")
ELSE
bPlayerVisible = TRUE
CLEAR_PED_TASKS(PLAYER_PED_ID())
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), vGroundEndingPos, PEDMOVE_WALK)
PRINTLN("PLAYER VISIBLE, TASKING GO TO COORDS")
ENDIF
DEBUG_PRINT("GOING TO STATE - ENDING_CUTSCENE_STATE_03")
endingCutsceneStages = ENDING_CUTSCENE_STATE_03
ENDIF
BREAK
//======================================================================================================================================
CASE ENDING_CUTSCENE_STATE_03
IF ENDSCREEN_PREPARE(groundEndScreen.groundTraffickingEndScreen)
IF NOT bPlayMusic
MISSION_FLOW_PLAY_END_OF_MISSION_MUSIC(TRUE)
bPlayMusic = TRUE
ENDIF
DEBUG_PRINT("GOING TO STATE - ENDING_CUTSCENE_STATE_04")
endingCutsceneStages = ENDING_CUTSCENE_STATE_04
ENDIF
BREAK
//======================================================================================================================================
CASE ENDING_CUTSCENE_STATE_04
IF NOT bSetTimer
SETTIMERA(0)
bSetTimer = TRUE
ENDIF
IF RENDER_ENDSCREEN(groundEndScreen.groundTraffickingEndScreen)
PRINTLN("RENDERING ENDSCREEN")
ENDIF
IF TIMERA() > 5000
ENDSCREEN_SHUTDOWN(groundEndScreen.groundTraffickingEndScreen)
IF IS_CAM_SHAKING(myCamera)
STOP_CAM_SHAKING(myCamera)
PRINTLN("STOP CAM, myCamera, FROM SHAKING")
ENDIF
IF bPlayerVisible
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
PRINTLN("REPOSITIONING PLAYER LATE")
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK)
ENDIF
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DESTROY_CAM(transitionCam)
ODDJOB_EXIT_CUTSCENE()
bIsCutsceneActive = FALSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
RETURN TRUE
ENDIF
BREAK
//======================================================================================================================================
CASE ENDING_CUTSCENE_SKIP_01
DESTROY_CAM(myCamera)
DESTROY_CAM(transitionCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
// Setting player coordinates following cutscene
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vGroundEndingPos)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fGroundEndingHeading)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK)
ENDIF
IF bDoHijack
DELETE_CANISTERS(expPackageArgs)
ENDIF
IF DOES_ENTITY_EXIST(hijackArgs.oWeaponsCargo)
DELETE_OBJECT(hijackArgs.oWeaponsCargo)
DEBUG_PRINT("DELETING hijackArgs.oWeaponsCargo")
ENDIF
DELETE_CUTSCENE_CARGO()
DEBUG_PRINT("MISSION ENDING VIA SKIP")
REMOVE_DRUG_CARGO(drugCargoArgs)
IF DOES_ENTITY_EXIST(expPackageArgs.oRamp)
DELETE_OBJECT(expPackageArgs.oRamp)
PRINTLN("DELETING RAMP")
ENDIF
IF DOES_ENTITY_EXIST(expPackageArgs.oRampDoor)
DELETE_OBJECT(expPackageArgs.oRampDoor)
PRINTLN("DELETING RAMP DOOR")
ENDIF
IF DOES_ENTITY_EXIST(myVehicle) AND NOT IS_ENTITY_DEAD(myVehicle)
DELETE_VEHICLE(myVehicle)
DEBUG_PRINT("DELETING myVehicle VIA SKIP")
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
endingCutsceneStages = ENDING_CUTSCENE_SKIP_02
BREAK
//======================================================================================================================================
CASE ENDING_CUTSCENE_SKIP_02
DO_SCREEN_FADE_IN(1000)
WHILE NOT IS_SCREEN_FADED_IN()
WAIT(0)
ENDWHILE
DEBUG_PRINT("RETURNING TRUE IN STATE- ENDING_CUTSCENE_SKIP_02")
RETURN TRUE
// IF NOT bLaunchedMissionEndingScreen
// IF LAUNCH_MINIGAME_MISSION_TRACKER()
// MISSION_FLOW_PLAY_END_OF_MISSION_MUSIC(TRUE)
// DEBUG_PRINT("RETURNING TRUE IN STATE- ENDING_CUTSCENE_SKIP_02 WITHOUT ENDING SCREEN")
// RETURN TRUE
// ENDIF
// ELSE
// DEBUG_PRINT("RETURNING TRUE IN STATE- ENDING_CUTSCENE_SKIP_02")
// RETURN TRUE
// ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL SMUGGLERS_RETRIEVE_CUTSCENE_NEW()
INT iInterpTime = 3000
VECTOR vPlayerVehiclePos
FLOAT fPlayerVehicleHeading
VECTOR vPlayerPositionNearCar
FLOAT fGroundZ
VECTOR vCamPos01 = <<1.9821, -3.7360, 0.8606>>
VECTOR vCamRot01 = <<0.7863, -1.0294, 0.3664>>
VECTOR vCamPos02 = <<1.8626, -2.6789, 0.6921>>
VECTOR vCamRot02 = <<0.6378, 0.0387, 0.3551>>
FLOAT fSmugglersHeading, fHeadingToUse
VECTOR vFront, vSide, vUp, vPosition
VECTOR vPlayerCoord, vSmugglerRealCoord, vSmugglerCoord
IF NOT bGrabbedTimeForCutscene
bSmugglersRetrieveCutscene = TRUE
iAllowSkipCutsceneTime = GET_GAME_TIMER()
bGrabbedTimeForCutscene = TRUE
ENDIF
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
START_TIMER_NOW(cutArgs.cutSceneTimer)
ENDIF
//------------------------------------------SKIP CUTSCENE------------------------------------------
IF NOT bSkippedCutscene
HANDLE_SKIP_CUTSCENE_GROUND()
ENDIF
// ------------------------------------------FAIL SAFE------------------------------------------
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 10.0)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
DEBUG_PRINT("TRIGGERING FAIL SAFE")
RETURN TRUE
ENDIF
ENDIF
SWITCH smugglerRetrieveCutState
CASE SMUGGLERS_RETRIEVE_STATE_01
SET_TIME_SCALE(0.8)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), weaponInHand)
ENDIF
// Remove from AI
REMOVE_DRUG_CARGO(drugCargoArgs)
// Add to player's vehicle
ADD_DRUGS_TO_VEHICLE(drugCargoArgs, myLocData, myVehicle)
CLEAR_PRINTS()
CLEAR_HELP()
ODDJOB_ENTER_CUTSCENE()
CLEAR_AREA(smugArgs.vVehicleNodePos, 10.0, TRUE)
IF IS_VEHICLE_DRIVEABLE(myVehicle)
IF IS_ENTITY_AT_ENTITY(smugArgs.smugglersVehicles[0], myVehicle, <<1.5,1.5,1.5>>)
SET_ENTITY_VISIBLE(smugArgs.smugglersVehicles[0], FALSE)
SET_ENTITY_COLLISION(smugArgs.smugglersVehicles[0], FALSE)
PRINTLN("TURNING OFF VISIBILITY AND COLLISION ON SMUGGLER VEHICLE")
ELSE
SET_ENTITY_COORDS(smugArgs.smugglersVehicles[0], smugArgs.vSafeCarPos)
SET_ENTITY_HEADING(smugArgs.smugglersVehicles[0], smugArgs.fDefeatedSmugglerVehHeading)
SET_VEHICLE_ON_GROUND_PROPERLY(smugArgs.smugglersVehicles[0])
ENDIF
ENDIF
// Move Car
IF IS_VEHICLE_DRIVEABLE(myVehicle)
// Set positions on player's vehicle and smugglers vehicle
SET_ENTITY_COORDS(myVehicle, smugArgs.vVehicleNodePos)
// Set player vehicle settings
IF DT_IS_CAR_IN_FRONT_OF_CAR(myVehicle, smugArgs.smugglersVehicles[0])
PRINTLN("PLAYER'S CAR IS IN FRONT OF SMUGGLER'S CAR")
fSmugglersHeading = GET_ENTITY_HEADING(smugArgs.smugglersVehicles[0])
PRINTLN("FRONT: fSmugglersHeading = ", fSmugglersHeading)
fHeadingToUse = fSmugglersHeading - 180
PRINTLN("FRONT: fHeadingToUse = ", fHeadingToUse)
// IF fHeadingToUse < 0
// fHeadingToUse += 360
// PRINTLN("FRONT: fHeadingToUse NEW = ", fHeadingToUse)
// ENDIF
ELSE
fSmugglersHeading = GET_ENTITY_HEADING(smugArgs.smugglersVehicles[0])
PRINTLN("BEHIND: fSmugglersHeading = ", fSmugglersHeading)
fHeadingToUse = fSmugglersHeading
PRINTLN("BEHIND: fHeadingToUse = ", fHeadingToUse)
ENDIF
SET_ENTITY_HEADING(myVehicle, fHeadingToUse)
SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle)
ENDIF
// Need to test if the smuggler's vehicle is offscreen, if so we'll need to point at it.
IF IS_VEHICLE_DRIVEABLE(myVehicle)
GET_ENTITY_MATRIX(myVehicle, vFront, vSide, vUp, vPosition)
vPlayerCoord = GET_ENTITY_COORDS(myVehicle)
ENDIF
vSmugglerRealCoord = GET_ENTITY_COORDS(smugArgs.smugglersVehicles[0])
vSmugglerCoord = vSmugglerRealCoord - vPlayerCoord
IF NOT IS_VECTOR_ZERO(vSide)
IF DOT_PRODUCT(vSide, vSmugglerCoord) < 0
smugArgs.bNeedToPointAtSmugglerVehicle = TRUE
PRINTLN("smugArgs.bNeedToPointAtSmugglerVehicle = TRUE")
ELSE
smugArgs.bNeedToPointAtSmugglerVehicle = FALSE
PRINTLN("smugArgs.bNeedToPointAtSmugglerVehicle = FALSE")
ENDIF
ENDIF
// Move Player
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
vPlayerVehiclePos = GET_ENTITY_COORDS(myVehicle)
PRINTLN("vPlayerVehiclePos = ", vPlayerVehiclePos)
fPlayerVehicleHeading = GET_ENTITY_HEADING(myVehicle)
PRINTLN("fPlayerVehicleHeading = ", fPlayerVehicleHeading)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
vPlayerPositionNearCar = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPlayerVehiclePos, fPlayerVehicleHeading, <<-1.5,-1.25,0>>)
GET_GROUND_Z_FOR_3D_COORD(vPlayerPositionNearCar, fGroundZ)
PRINTLN("fGroundZ = ", fGroundZ)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), << vPlayerPositionNearCar.x, vPlayerPositionNearCar.y, fGroundZ >>, TRUE, TRUE)
fPlayerVehicleHeading = GET_ENTITY_HEADING(myVehicle)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerVehicleHeading - 90)
ENDIF
ENDIF
// Attach 1st camera to player's vehicle
myCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED)
SET_CAM_FOV(myCamera, 35.0)
SET_CAM_NEAR_DOF(myCamera, 0.5)
SET_CAM_FAR_DOF(myCamera, 4.0)
SET_CAM_DOF_STRENGTH(myCamera, 0.5)
// SET_CAM_USE_SHALLOW_DOF_MODE(myCamera, TRUE)
SHAKE_CAM(myCamera, "HAND_SHAKE", 0.2)
ATTACH_CAM_TO_ENTITY(myCamera, myVehicle, vCamPos01)
IF smugArgs.bNeedToPointAtSmugglerVehicle
POINT_CAM_AT_ENTITY(myCamera, smugArgs.smugglersVehicles[0], vCamRot01)
PRINTLN("POINTING AT SMUGGLER'S VEHICLE 01")
ELSE
POINT_CAM_AT_ENTITY(myCamera, myVehicle, vCamRot01)
ENDIF
SET_CAM_ACTIVE(myCamera, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
// Attach 2nd camera to player's vehicle
transitionCam = CREATE_CAMERA(CAMTYPE_SCRIPTED)
SET_CAM_FOV(transitionCam, 35.0)
SET_CAM_NEAR_DOF(transitionCam, 0.5)
SET_CAM_FAR_DOF(transitionCam, 4.0)
SET_CAM_DOF_STRENGTH(transitionCam, 0.5)
// SET_CAM_USE_SHALLOW_DOF_MODE(transitionCam, TRUE)
SHAKE_CAM(transitionCam, "HAND_SHAKE", 0.2)
ATTACH_CAM_TO_ENTITY(transitionCam, myVehicle, vCamPos02)
IF smugArgs.bNeedToPointAtSmugglerVehicle
POINT_CAM_AT_ENTITY(transitionCam, smugArgs.smugglersVehicles[0], vCamRot02)
PRINTLN("POINTING AT SMUGGLER'S VEHICLE 02")
ELSE
POINT_CAM_AT_ENTITY(transitionCam, myVehicle, vCamRot02)
ENDIF
SET_CAM_ACTIVE_WITH_INTERP(transitionCam, myCamera, iInterpTime, GRAPH_TYPE_SIN_ACCEL_DECEL)
PRINTLN("GOING TO STATE - SMUGGLERS_RETRIEVE_STATE_02")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_STATE_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_STATE_02
SET_USE_HI_DOF()
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), myVehicle, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_RUN, ECF_WARP_ENTRY_POINT)
PRINTLN("GOING TO STATE - SMUGGLERS_RETRIEVE_STATE_03")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_STATE_03
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_STATE_03
SET_USE_HI_DOF()
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 2.5)
IF IS_CAM_SHAKING(myCamera)
STOP_CAM_SHAKING(myCamera)
PRINTLN("STOP CAM, myCamera, FROM SHAKING")
ENDIF
IF IS_CAM_SHAKING(transitionCam)
STOP_CAM_SHAKING(transitionCam)
PRINTLN("STOP CAM, transitionCam, FROM SHAKING")
ENDIF
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF DOES_CAM_EXIST(myCamera)
DESTROY_CAM(myCamera)
PRINTLN("DESTROYING CAM - myCamera")
ENDIF
IF DOES_CAM_EXIST(transitionCam)
DESTROY_CAM(transitionCam)
PRINTLN("DESTROYING CAM - transitionCam")
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_TIME_SCALE(1.0)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
PRINTLN("FAIL SAFE - SETTING PLAYER IN VEHICLE")
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), weaponInHand, TRUE)
ENDIF
DEBUG_PRINT("RETURNING TRUE IN STATE- SMUGGLERS_RETRIEVE_STATE_03 ")
ODDJOB_EXIT_CUTSCENE()
RETURN TRUE
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_SKIP_01
DESTROY_CAM(myCamera)
DESTROY_CAM(transitionCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
ENDIF
ENDIF
SET_TIME_SCALE(1.0)
DEBUG_PRINT("INSIDE STATE - SMUGGLERS_RETRIEVE_SKIP_01")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_SKIP_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_SKIP_02
DO_SCREEN_FADE_IN(1000)
WHILE NOT IS_SCREEN_FADED_IN()
WAIT(0)
ENDWHILE
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
// Reseting skipped cutscene bool, so you can skip ending cutscenes.
bSkippedCutscene = FALSE
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), weaponInHand, TRUE)
ENDIF
ODDJOB_EXIT_CUTSCENE()
DEBUG_PRINT("RETURNING TRUE IN STATE- SMUGGLERS_RETRIEVE_SKIP_02 ")
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL SMUGGLERS_ENDING_CUTSCENE()
SEQUENCE_INDEX iSeq
VECTOR vClosestNode
IF NOT bGrabbedTimeForCutscene
// Set for skip
bSmugglersEndingCutscene = TRUE
iAllowSkipCutsceneTime = GET_GAME_TIMER()
bGrabbedTimeForCutscene = TRUE
ENDIF
//------------------------------------------SKIP CUTSCENE------------------------------------------
IF NOT bSkippedCutscene
HANDLE_SKIP_CUTSCENE_GROUND()
ENDIF
//-----------------------------------------------FAIL SAFE-----------------------------------------------
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
START_TIMER_NOW(cutArgs.cutSceneTimer)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 12.0)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
DEBUG_PRINT("TRIGGERING FAIL SAFE")
DEBUG_PRINT("FAIL SAFE - smugArgs.bSmugglerReachedDest = TRUE")
smugArgs.bSmugglerReachedDest = TRUE
RETURN TRUE
ENDIF
ENDIF
SWITCH smugglerEndingStage
CASE SMUGGLERS_ENDING_STATE_01
RENDER_SCRIPT_CAMS(TRUE, FALSE)
POINT_CAM_AT_ENTITY(myCamera, smugArgs.smugglersVehicles[0], <<0,0,0>>)
IF NOT IS_PED_INJURED(smugArgs.smugglersHeliPed) AND IS_VEHICLE_DRIVEABLE(smugArgs.smugglersHeliVeh)
SET_PED_INTO_VEHICLE(smugArgs.smugglersHeliPed, smugArgs.smugglersHeliVeh)
ENDIF
smugglerEndingStage = SMUGGLERS_ENDING_STATE_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_STATE_02
// After two seconds cut to the heli
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 1.0)
// Point cam at helicopter
SET_CAM_COORD(myCamera, myLocData.endData[1].vCutscenePos2)
SET_CAM_ROT(myCamera, myLocData.endData[1].vCutsceneOrien2)
SET_CAM_FOV(myCamera, 35.0)
SHAKE_CAM(myCamera, "ROAD_VIBRATION_SHAKE", 2.0)
POINT_CAM_AT_ENTITY(myCamera, smugArgs.smugglersHeliVeh, <<0,0,0>>)
smugglerEndingStage = SMUGGLERS_ENDING_STATE_03
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_STATE_03
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 2.0)
FREEZE_ENTITY_POSITION(smugArgs.smugglersHeliVeh, FALSE)
IF NOT IS_PED_INJURED(smugArgs.smugglersHeliPed) AND IS_VEHICLE_DRIVEABLE(smugArgs.smugglersHeliVeh)
CLEAR_SEQUENCE_TASK(iSeq)
OPEN_SEQUENCE_TASK(iSeq)
TASK_HELI_MISSION(NULL, smugArgs.smugglersHeliVeh, NULL, NULL, <<myLocData.endData[1].vSmugHeliPos.x, myLocData.endData[1].vSmugHeliPos.y, (myLocData.endData[1].vSmugHeliPos.z + 50.0)>>, MISSION_GOTO, 40.0, -1, 0, 60, 30)
TASK_HELI_MISSION(NULL, smugArgs.smugglersHeliVeh, NULL, NULL, <<(myLocData.endData[1].vSmugHeliPos.x + 500), (myLocData.endData[1].vSmugHeliPos.y + 500), (myLocData.endData[1].vSmugHeliPos.z + 10.0)>>, MISSION_GOTO, 40.0, -1, 0, 60, 30)
CLOSE_SEQUENCE_TASK(iSeq)
IF NOT IS_PED_INJURED(smugArgs.smugglersHeliPed)
TASK_PERFORM_SEQUENCE(smugArgs.smugglersHeliPed, iSeq)
ENDIF
CLEAR_SEQUENCE_TASK(iSeq)
smugglerEndingStage = SMUGGLERS_ENDING_STATE_04
ENDIF
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_STATE_04
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 5.0)
// Put smuggler drive back into the car
IF IS_VEHICLE_DRIVEABLE(smugArgs.vehSmugglerCarWithDrugs) AND NOT IS_PED_INJURED(smugArgs.pedSmugglerWithDrugs)
SET_PED_INTO_VEHICLE(smugArgs.pedSmugglerWithDrugs, smugArgs.vehSmugglerCarWithDrugs)
ENDIF
IF IS_VEHICLE_DRIVEABLE(smugArgs.vehSmugglerCarWithDrugs) AND NOT IS_PED_INJURED(smugArgs.pedSmugglerWithDrugs)
GET_CLOSEST_VEHICLE_NODE(GET_ENTITY_COORDS(smugArgs.vehSmugglerCarWithDrugs), vClosestNode)
SET_ENTITY_COORDS(smugArgs.vehSmugglerCarWithDrugs, vClosestNode)
smugglerEndingStage = SMUGGLERS_ENDING_STATE_05
ENDIF
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_STATE_05
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 7.0)
IF IS_VEHICLE_DRIVEABLE(smugArgs.vehSmugglerCarWithDrugs) AND NOT IS_PED_INJURED(smugArgs.pedSmugglerWithDrugs)
TASK_VEHICLE_DRIVE_WANDER(smugArgs.pedSmugglerWithDrugs, smugArgs.vehSmugglerCarWithDrugs, 20.0, DRIVINGMODE_AVOIDCARS_OBEYLIGHTS)
ENDIF
DEBUG_PRINT("smugArgs.bSmugglerReachedDest = TRUE")
smugArgs.bSmugglerReachedDest = TRUE
DEBUG_PRINT("RETURNING TRUE ON SMUGGLERS_ENDING_CUTSCENE")
RETURN TRUE
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_SKIP_01
DESTROY_CAM(myCamera)
DESTROY_CAM(transitionCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
// Put the driver into his vehicle and task him to wander.
IF IS_VEHICLE_DRIVEABLE(smugArgs.vehSmugglerCarWithDrugs) AND NOT IS_PED_INJURED(smugArgs.pedSmugglerWithDrugs)
SET_PED_INTO_VEHICLE(smugArgs.pedSmugglerWithDrugs, smugArgs.vehSmugglerCarWithDrugs)
TASK_VEHICLE_DRIVE_WANDER(smugArgs.pedSmugglerWithDrugs, smugArgs.vehSmugglerCarWithDrugs, 20.0, DRIVINGMODE_AVOIDCARS_OBEYLIGHTS)
ENDIF
// Put the helicopter driver in the heli and task him to fly off.
FREEZE_ENTITY_POSITION(smugArgs.smugglersHeliVeh, FALSE)
IF NOT IS_PED_INJURED(smugArgs.smugglersHeliPed) AND IS_VEHICLE_DRIVEABLE(smugArgs.smugglersHeliVeh)
CLEAR_SEQUENCE_TASK(iSeq)
OPEN_SEQUENCE_TASK(iSeq)
TASK_HELI_MISSION(NULL, smugArgs.smugglersHeliVeh, NULL, NULL, <<myLocData.endData[1].vSmugHeliPos.x, myLocData.endData[1].vSmugHeliPos.y, (myLocData.endData[1].vSmugHeliPos.z + 50.0)>>, MISSION_GOTO, 40.0, -1, 0, 60, 30)
TASK_HELI_MISSION(NULL, smugArgs.smugglersHeliVeh, NULL, NULL, <<(myLocData.endData[1].vSmugHeliPos.x + 500), (myLocData.endData[1].vSmugHeliPos.y + 500), (myLocData.endData[1].vSmugHeliPos.z + 10.0)>>, MISSION_GOTO, 40.0, -1, 0, 60, 30)
CLOSE_SEQUENCE_TASK(iSeq)
IF NOT IS_PED_INJURED(smugArgs.smugglersHeliPed)
TASK_PERFORM_SEQUENCE(smugArgs.smugglersHeliPed, iSeq)
ENDIF
CLEAR_SEQUENCE_TASK(iSeq)
ENDIF
DEBUG_PRINT("INSIDE STATE - SMUGGLERS_ENDING_SKIP_01")
smugglerEndingStage = SMUGGLERS_ENDING_SKIP_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_ENDING_SKIP_02
DO_SCREEN_FADE_IN(1000)
WHILE NOT IS_SCREEN_FADED_IN()
WAIT(0)
ENDWHILE
DEBUG_PRINT("smugArgs.bSmugglerReachedDest = TRUE VIA SKIP")
smugArgs.bSmugglerReachedDest = TRUE
// Reseting skipped cutscene bool, so you can skip ending cutscenes.
bSkippedCutscene = FALSE
DEBUG_PRINT("RETURNING TRUE IN STATE- SMUGGLERS_ENDING_SKIP_02 ")
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL SMUGGLER_ENDING_SHOOTOUT_CUTSCENE_NEW()
INT iInterpTime = 4000
VECTOR vPlayerVehiclePos
FLOAT fPlayerVehicleHeading
VECTOR vPlayerPositionNearCar
FLOAT fGroundZ
VECTOR vCamPos01 = <<1.9821, -3.7360, 0.8606>>
VECTOR vCamRot01 = <<0.7863, -1.0294, 0.3664>>
VECTOR vCamPos02 = <<1.8626, -2.6789, 0.6921>>
VECTOR vCamRot02 = <<0.6378, 0.0387, 0.3551>>
IF NOT bGrabbedTimeForCutscene
bSmugglersRetrieveCutscene = TRUE
iAllowSkipCutsceneTime = GET_GAME_TIMER()
bGrabbedTimeForCutscene = TRUE
ENDIF
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
START_TIMER_NOW(cutArgs.cutSceneTimer)
ENDIF
//------------------------------------------SKIP CUTSCENE------------------------------------------
IF NOT bSkippedCutscene
HANDLE_SKIP_CUTSCENE_GROUND()
ENDIF
// ------------------------------------------FAIL SAFE------------------------------------------
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 10.0)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
DEBUG_PRINT("TRIGGERING FAIL SAFE")
RETURN TRUE
ENDIF
ENDIF
SWITCH smugglerRetrieveCutState
CASE SMUGGLERS_RETRIEVE_STATE_01
// Remove from AI
REMOVE_DRUG_CARGO(drugCargoArgs)
// Add to player's vehicle
ADD_DRUGS_TO_VEHICLE(drugCargoArgs, myLocData, myVehicle)
CLEAR_PRINTS()
ODDJOB_ENTER_CUTSCENE()
CLEAR_AREA(smugArgs.vVehicleNodePos, 10.0, TRUE)
// Move Car
IF IS_VEHICLE_DRIVEABLE(myVehicle)
// Set positions on player's vehicle and smugglers vehicle
SET_ENTITY_COORDS(myVehicle, myLocData.endData[1].vCarPlacementShootEnd)
SET_ENTITY_HEADING(myVehicle, myLocData.endData[1].fCarPlacementShootEnd)
SET_VEHICLE_ON_GROUND_PROPERLY(myVehicle)
ENDIF
// Move Player
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
vPlayerVehiclePos = GET_ENTITY_COORDS(myVehicle)
PRINTLN("vPlayerVehiclePos = ", vPlayerVehiclePos)
fPlayerVehicleHeading = GET_ENTITY_HEADING(myVehicle)
PRINTLN("fPlayerVehicleHeading = ", fPlayerVehicleHeading)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
vPlayerPositionNearCar = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPlayerVehiclePos, fPlayerVehicleHeading, <<-1.5,0.25,0>>)
GET_GROUND_Z_FOR_3D_COORD(vPlayerPositionNearCar, fGroundZ)
PRINTLN("fGroundZ = ", fGroundZ)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), << vPlayerPositionNearCar.x, vPlayerPositionNearCar.y, fGroundZ >>, TRUE, TRUE)
fPlayerVehicleHeading = GET_ENTITY_HEADING(myVehicle)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerVehicleHeading - 90)
ENDIF
ENDIF
// Attach 1st camera to player's vehicle
myCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED)
SET_CAM_FOV(myCamera, 35.0)
SET_CAM_NEAR_DOF(myCamera, 0.5)
SET_CAM_FAR_DOF(myCamera, 4.0)
SET_CAM_DOF_STRENGTH(myCamera, 0.5)
// SET_CAM_USE_SHALLOW_DOF_MODE(myCamera, TRUE)
SHAKE_CAM(myCamera, "HAND_SHAKE", 0.2)
ATTACH_CAM_TO_ENTITY(myCamera, myVehicle, vCamPos01)
POINT_CAM_AT_ENTITY(myCamera, myVehicle, vCamRot01)
SET_CAM_ACTIVE(myCamera, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
// Attach 2nd camera to player's vehicle
transitionCam = CREATE_CAMERA(CAMTYPE_SCRIPTED)
SET_CAM_FOV(transitionCam, 35.0)
SET_CAM_NEAR_DOF(transitionCam, 0.5)
SET_CAM_FAR_DOF(transitionCam, 4.0)
SET_CAM_DOF_STRENGTH(transitionCam, 0.5)
// SET_CAM_USE_SHALLOW_DOF_MODE(transitionCam, TRUE)
SHAKE_CAM(transitionCam, "HAND_SHAKE", 0.2)
ATTACH_CAM_TO_ENTITY(transitionCam, myVehicle, vCamPos02)
POINT_CAM_AT_ENTITY(transitionCam, myVehicle, vCamRot02)
SET_CAM_ACTIVE_WITH_INTERP(transitionCam, myCamera, iInterpTime, GRAPH_TYPE_SIN_ACCEL_DECEL)
PRINTLN("GOING TO STATE - SMUGGLERS_RETRIEVE_STATE_02")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_STATE_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_STATE_02
SET_USE_HI_DOF()
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), myVehicle)
PRINTLN("GOING TO STATE - SMUGGLERS_RETRIEVE_STATE_03")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_STATE_03
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_STATE_03
SET_USE_HI_DOF()
IF TIMER_DO_WHEN_READY(cutArgs.cutSceneTimer, 4.0)
IF IS_CAM_SHAKING(myCamera)
STOP_CAM_SHAKING(myCamera)
PRINTLN("STOP CAM, myCamera, FROM SHAKING")
ENDIF
IF IS_CAM_SHAKING(transitionCam)
STOP_CAM_SHAKING(transitionCam)
PRINTLN("STOP CAM, transitionCam, FROM SHAKING")
ENDIF
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF DOES_CAM_EXIST(myCamera)
DESTROY_CAM(myCamera)
PRINTLN("DESTROYING CAM - myCamera, SHOOTOUT CUTSCENE")
ENDIF
IF DOES_CAM_EXIST(transitionCam)
DESTROY_CAM(transitionCam)
PRINTLN("DESTROYING CAM - transitionCam, SHOOTOUT CUTSCENE")
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
DEBUG_PRINT("RETURNING TRUE IN STATE- SMUGGLERS_RETRIEVE_STATE_03 ")
ODDJOB_EXIT_CUTSCENE()
RETURN TRUE
ENDIF
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_SKIP_01
DESTROY_CAM(myCamera)
DESTROY_CAM(transitionCam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), myVehicle)
ENDIF
ENDIF
DEBUG_PRINT("INSIDE STATE - SMUGGLERS_RETRIEVE_SKIP_01")
smugglerRetrieveCutState = SMUGGLERS_RETRIEVE_SKIP_02
BREAK
//==============================================================================================================================
CASE SMUGGLERS_RETRIEVE_SKIP_02
DO_SCREEN_FADE_IN(1000)
WHILE NOT IS_SCREEN_FADED_IN()
WAIT(0)
ENDWHILE
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
// Reseting skipped cutscene bool, so you can skip ending cutscenes.
bSkippedCutscene = FALSE
ODDJOB_EXIT_CUTSCENE()
DEBUG_PRINT("RETURNING TRUE IN STATE- SMUGGLERS_RETRIEVE_SKIP_02 ")
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_PLAYER_DESTROYED_PLANE()
INT idx
// PRINTLN("RUNNING - HAS_PLAYER_DESTROYED_PLANE")
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured AND (myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_PLANE)
IF DOES_ENTITY_EXIST(planeDropArgs.planeDropVehicles[idx])
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(planeDropArgs.planeDropVehicles[idx], PLAYER_PED_ID())
PRINTLN("PLANE HAS BEEN DAMAGED BY PLAYER")
IF IS_ENTITY_DEAD(planeDropArgs.planeDropVehicles[idx])
PRINTLN("PLANE IS DEAD, RETURNING TRUE")
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDREPEAT
#IF IS_DEBUG_BUILD
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_K, KEYBOARD_MODIFIER_ALT, "")
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured AND (myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_PLANE)
IF DOES_ENTITY_EXIST(planeDropArgs.planeDropVehicles[idx])
IF NOT IS_ENTITY_DEAD(planeDropArgs.planeDropVehicles[idx])
EXPLODE_VEHICLE(planeDropArgs.planeDropVehicles[idx])
PRINTLN("DEBUG, EXPLODING PLANE")
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDIF
#ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_PLAYER_ABANDONED_PACKAGE()
VECTOR vPlayerPos
IF NOT bDrugsLoaded
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
ENDIF
IF planeDropArgs.bCargoHasLanded
IF NOT IS_TIMER_STARTED(tAbandonPackageTimer)
START_TIMER_NOW(tAbandonPackageTimer)
PRINTLN("STARTING TIMER - tAbandonPackageTimer")
ELSE
IF VDIST2(vPlayerPos, myLocData.dropData[0].vCenterPos) > 10000 //100m
// PRINTLN("GREATER THAN 100m")
IF GET_TIMER_IN_SECONDS(tAbandonPackageTimer) > 60
RETURN TRUE
ELSE
// PRINTLN("TIMER CHECK STILL GOING")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL UPDATE_FAIL_CONDITIONS()
// FLOAT fTempDistance
IF HAS_PLAYER_ABANDONED_PACKAGE()
PRINTLN("PLAYER HAS ABANDONED JOB")
failReason = FAIL_ABANDONED_JOB
RETURN TRUE
ENDIF
IF DOES_ENTITY_EXIST(planeDropArgs.oLandedPackage) AND NOT IS_ENTITY_DEAD(planeDropArgs.oLandedPackage)
IF HAS_BULLET_IMPACTED_IN_AREA(GET_ENTITY_COORDS(planeDropArgs.oLandedPackage), 0.5)
ADD_EXPLOSION(GET_ENTITY_COORDS(planeDropArgs.oLandedPackage), EXP_TAG_TRAIN)
DELETE_OBJECT(planeDropArgs.oLandedPackage)
PRINTLN("PLAYER HAS DESTROYED PACKAGE - TYPE 1")
failReason = FAIL_PACKAGE_DESTROYED
RETURN TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(smugArgs.oArmsPackage) AND NOT IS_ENTITY_DEAD(smugArgs.oArmsPackage)
IF HAS_BULLET_IMPACTED_IN_AREA(GET_ENTITY_COORDS(smugArgs.oArmsPackage), 0.5)
ADD_EXPLOSION(GET_ENTITY_COORDS(smugArgs.oArmsPackage), EXP_TAG_TRAIN)
DELETE_OBJECT(smugArgs.oArmsPackage)
PRINTLN("PLAYER HAS DESTROYED PACKAGE - TYPE 2")
failReason = FAIL_PACKAGE_DESTROYED
RETURN TRUE
ENDIF
ENDIF
IF IS_PLAYER_IN_ANY_SHOP()
PRINTLN("PLAYER HAS ABANDONED JOB")
failReason = FAIL_ABANDONED_JOB
RETURN TRUE
ENDIF
IF bPlayerWantedAtDropOff
PRINTLN("FAILING, BECAUSE PLAYER WANTED AT DROPOFF SITE")
failReason = FAIL_PLAYER_WANTED
RETURN TRUE
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) OR NOT IS_PED_INJURED(PLAYER_PED_ID())
IF NOT bInActiveFight AND NOT bWanted AND NOT bIsCutsceneActive
IF bOutOfVehicle
IF HANDLE_OUT_OF_VEHICLE_WARNING_AND_FAIL("DTRSHRD_03", myVehicle, outOfVehicleTime)
PRINTLN("FAILING, BECAUSE OUT OF CAR!!!!!!!!!!!!!!!!!")
failReason = FAIL_ABANDONED_CAR
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF planeDropArgs.bCargoHasLanded
IF bTimeExpired
IF bWanted
PRINTLN("failReason = FAIL_TIME_EXPIRED_WANTED")
failReason = FAIL_TIME_EXPIRED_WANTED
RETURN TRUE
ELSE
PRINTLN("failReason = FAIL_TIME_EXPIRED")
failReason = FAIL_TIME_EXPIRED
RETURN TRUE
ENDIF
ENDIF
ENDIF
IF bLedPoliceToSite
PRINTLN("failReason = FAIL_WANTED_AT_SITE")
failReason = FAIL_WANTED_AT_SITE
RETURN TRUE
ENDIF
IF bDoDelicate
IF fHealth <= 0
IF bDoHijack
IF DOES_ENTITY_EXIST(hijackArgs.oWeaponsCargo)
ADD_EXPLOSION(GET_ENTITY_COORDS(hijackArgs.oWeaponsCargo), EXP_TAG_MOLOTOV)
failReason = FAIL_WEAPONS_DESTROYED
ENDIF
ELSE
EXPLODE_VEHICLE(myVehicle)
PRINTLN("FAIL REASON - FAIL_TRANSPORT_DESTROYED - 01")
failReason = FAIL_TRANSPORT_DESTROYED
ENDIF
RETURN TRUE
ENDIF
ENDIF
IF NOT bDoSmugglers AND NOT bDoHijack
IF HAS_PLAYER_DESTROYED_PLANE()
PRINTLN("FAILING, THE PLAYER DESTROYED THE PLANE")
failReason = FAIL_PLANE_DESTROYED
RETURN TRUE
ENDIF
ENDIF
IF bDoSmugglers
IF DOES_ENTITY_EXIST(smugArgs.smugglersVehicles[0]) AND NOT IS_ENTITY_DEAD(smugArgs.smugglersVehicles[0])
IF smugArgs.bCarHasDrugs[0]
IF IS_ENTITY_IN_WATER(smugArgs.smugglersVehicles[0])
PRINTLN("FAIL REASON - FAIL_TRANSPORT_DESTROYED - 02")
failReason = FAIL_TRANSPORT_DESTROYED
RETURN TRUE
ENDIF
ENDIF
ENDIF
IF smugArgs.bSmugglerReachedDest
PRINTLN("FAILING, BECAUSE SMUGGLERS REACHED THEIR DESTINATION")
failReason = FAIL_SMUGGLER_REACHED_DEST
RETURN TRUE
ENDIF
IF smugArgs.bDestroyedVehicleWithDrugs
ADD_EXPLOSION(GET_ENTITY_COORDS(drugCargoArgs.oLoadedCargo), EXP_TAG_TRAIN)
DELETE_OBJECT(drugCargoArgs.oLoadedCargo)
PRINTLN("FAILING, BECAUSE SMUGGLERS VEHICLE IS DESTROYED AND THEY WERE CARRYING THE PACKAGE")
failReason = FAIL_WEAPONS_DESTROYED
RETURN TRUE
ENDIF
IF smugArgs.bAbandonedPackage
PRINTLN("PLAYER HAS ABANDONED JOB - ABANDONED SMUGGLER'S PACKAGE")
failReason = FAIL_ABANDONED_JOB
RETURN TRUE
ENDIF
ENDIF
IF bDoHijack
IF hijackArgs.bTransportReachedDest
failReason = FAIL_SMUGGLER_REACHED_DEST
RETURN TRUE
ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_PED_INJURED(PLAYER_PED_ID())
IF currentMissionStage < STAGE_ENDING_CUTSCENE
IF NOT IS_VEHICLE_DRIVEABLE(myVehicle) //AND bDrugsLoaded
DEBUG_PRINT("myVehicle IS NOT DRIVEABLE, FAILED MISSION")
failReason = FAIL_TRANSPORT_DESTROYED
RETURN TRUE
ENDIF
ENDIF
ENDIF
BOOL bRunAbandonedCheck = TRUE
// If the player has gone too far away from their current objective, assume they have abandoned the mission and fail them.
// TODO: setup Hijack for abandon check
IF bWanted OR bIsChaseActive OR (bIsSmugglersActive AND NOT bDrugsLoaded) OR bDoHijack OR bInActiveFight
fDistanceToObjective = GET_DISTANCE_TO_NEXT_OBJECTIVE(vCurDestObjective)
// PRINTLN("fDistanceToObjective = ", fDistanceToObjective)
bRunAbandonedCheck = FALSE
ENDIF
IF bRunAbandonedCheck
IF PLAYER_HAS_ABANDONED_JOB(vCurDestObjective, MyLocalPedStruct)//, myLocData)
PRINTLN("PLAYER HAS ABANDONED JOB")
failReason = FAIL_ABANDONED_JOB
RETURN TRUE
ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(myVehicle)
IF IS_VEHICLE_STUCK_TIMER_UP(myVehicle, VEH_STUCK_ON_ROOF, ROOF_TIME)
OR IS_VEHICLE_STUCK_TIMER_UP(myVehicle, VEH_STUCK_ON_SIDE, SIDE_TIME)
OR IS_VEHICLE_STUCK_TIMER_UP(myVehicle, VEH_STUCK_HUNG_UP, HUNG_UP_TIME)
OR IS_VEHICLE_STUCK_TIMER_UP(myVehicle, VEH_STUCK_JAMMED, JAMMED_TIME)
DEBUG_PRINT("FAILING - VEHICLE HAS BECOME UNDRIVEABLE/STUCK")
failReason = FAIL_VEHICLE_DISABLED
RETURN TRUE
ENDIF
ENDIF
// RETURN UPSIDE_DOWN_CHECK(myVehicle, bIsUpsideDown, upsideDownVehicleTime, failReason)
RETURN FALSE
ENDFUNC
// mission failed
PROC MISSION_FAILED()
STRING strFailReason
CLEAR_PRINTS()
STOP_SCRIPTED_CONVERSATION(TRUE)
TRIGGER_MUSIC_EVENT("OJDG_STOP")
PRINTLN("STARTING MUSIC - OJDG_STOP - FAIL")
// This sets us up for a replay through the launcher.
SET_BITMASK_AS_ENUM(sLauncherData.iLauncherFlags, LAUNCHED_SCRIPT_GroundTraffickingFailed)
// will usually print a line of god text on fail describing the reason
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SWITCH failReason
CASE FAIL_LOST_BAD_GUY
strFailReason = "SAN_FAIL1"
PRINTLN("FAIL REASON - SAN_FAIL1")
BREAK
CASE FAIL_TRANSPORT_DESTROYED
strFailReason = "DTRSHRD_FAIL_09"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_09")
BREAK
CASE FAIL_PLANE_DESTROYED
strFailReason = "DTRSHRD_FAIL_11"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_11")
BREAK
CASE FAIL_ABANDONED_CAR
strFailReason = "DTRSHRD_FAIL_02"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_02")
BREAK
CASE FAIL_PLAYER_WANTED
strFailReason = "DTRSHRD_FAIL_14"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_14")
BREAK
CASE FAIL_TIME_EXPIRED
strFailReason = "DTRSHRD_FAIL_03"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_03")
BREAK
CASE FAIL_TIME_EXPIRED_WANTED
strFailReason = "DTRSHRD_FAIL_15"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_15")
BREAK
CASE FAIL_WANTED_AT_SITE
strFailReason = "DTRSHRD_FAIL_15"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_15")
BREAK
CASE FAIL_DISTANCE_FAIL
strFailReason = "DTRSHRD_FAIL_05"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_05")
BREAK
CASE FAIL_ABANDONED_JOB
strFailReason = "DTRSHRD_FAIL_06"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_06")
BREAK
CASE FAIL_SMUGGLER_REACHED_DEST
strFailReason = "DTRSHRD_FAIL_07"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_07")
BREAK
CASE FAIL_VEHICLE_DISABLED
strFailReason = "DTRSHRD_FAIL_08"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_08")
BREAK
CASE FAIL_WEAPONS_DESTROYED
strFailReason = "DTRSHRD_FAIL_01"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_01")
BREAK
CASE FAIL_PLAYER_DIED
// this gets handled by SET_FORCE_CLEANUP_FAIL_REASON()
PRINTLN("FAIL REASON - DTRSHRD_FAIL_10")
BREAK
CASE FAIL_PACKAGE_DESTROYED
strFailReason = "DTRSHRD_FAIL_16"
PRINTLN("FAIL REASON - DTRSHRD_FAIL_16")
BREAK
ENDSWITCH
ELSE
// this gets handled by SET_FORCE_CLEANUP_FAIL_REASON()
PRINTLN("FAIL REASON - DTRSHRD_FAIL_10 - A")
ENDIF
// Do a check here to see if we need to warp the player at all
// (only set the fail warp locations if we can't leave the player where he was)
//SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(vGroundEndingPos, fGroundEndingHeading)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
MISSION_FLOW_SET_FAIL_WARP_LOCATION(vGroundEndingPos, fGroundEndingHeading)
ENDIF
ENDIF
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(strFailReason)
MISSION_FLOW_SET_FAIL_REASON(strFailReason)
ENDIF
SET_FORCE_CLEANUP_FAIL_REASON()
PRINTLN("Setting us up for a replay!")
Setup_Minigame_Replay(GET_THIS_SCRIPT_NAME())
// Wait for replay controller to fade the screen out
WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP()
WAIT(0)
ENDWHILE
// cleanup and terminate the thread (must be done in 1 frame)
MISSION_CLEANUP()
ENDPROC
FUNC BOOL VALIDATE_CAR()
VEHICLE_INDEX tempCar
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
tempCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
RETURN VALIDATE_OFF_ROAD_CAR(GET_ENTITY_MODEL(tempCar))
ELSE
RETURN FALSE
ENDIF
ELSE
RETURN FALSE
ENDIF
ENDFUNC
FUNC BOOL CAR_CHASE_READY_FIRST_TIME()
VECTOR vPlayerPosition
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
vPlayerPosition = GET_ENTITY_COORDS(PLAYER_PED_ID())
ENDIF
IF NOT bIsChaseActive
IF VDIST2(vPlayerPosition, myLocData.endData[0].vDrugPickup) < 40000 //200m
// PRINTLN("EXITING EARLY ON CAR CHASE")
RETURN FALSE
ENDIF
ENDIF
IF bDoCarChase
IF bRunAmbushChase
IF TIMERA() > DELAY_TIME
RETURN TRUE
ENDIF
ELIF bRunSmugglerChase
IF TIMERB() > DELAY_TIME
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC TYPE_2_CINEMATIC_CAM()
PED_INDEX pedSmugglerDriver
SWITCH iSmugglersCinematicStages
CASE 0
CONTROL_COORD_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, myLocData.dropData[0].vCenterPos)
// PRINTLN("SHOULD BE LOOKING AT DROP")
IF DOES_ENTITY_EXIST(smugArgs.vehSmugglerPlane)
AND NOT IS_ENTITY_DEAD(smugArgs.vehSmugglerPlane)
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF GET_ENTITY_DISTANCE_FROM_LOCATION(smugArgs.vehSmugglerPlane, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 250
PRINTLN("iSmugglersCinematicStages = 1")
iSmugglersCinematicStages = 1
ENDIF
ENDIF
BREAK
CASE 1
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
PRINTLN("iSmugglersCinematicStages = 2")
iSmugglersCinematicStages = 2
BREAK
CASE 2
CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, smugArgs.oArmsPackage)
// PRINTLN("SHOULD BE LOOKING AT PACKAGE")
IF smugArgs.bPickupAIFirst
PRINTLN("iSmugglersCinematicStages = 3")
iSmugglersCinematicStages = 3
ENDIF
BREAK
CASE 3
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
PRINTLN("iSmugglersCinematicStages = 4")
iSmugglersCinematicStages = 4
BREAK
CASE 4
IF NOT IS_ENTITY_DEAD(smugArgs.smugglersVehicles[0])
pedSmugglerDriver = GET_PED_IN_VEHICLE_SEAT(smugArgs.smugglersVehicles[0])
IF DOES_ENTITY_EXIST(pedSmugglerDriver) AND NOT IS_ENTITY_DEAD(pedSmugglerDriver)
CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, smugArgs.smugglersVehicles[0])
// PRINTLN("SHOULD BE LOOKING AT ENEMIES")
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
PRINTLN("iSmugglersCinematicStages = 7")
iSmugglersCinematicStages = 7
ENDIF
ENDIF
BREAK
CASE 7
CONTROL_COORD_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, myLocData.endData[0].vDrugPickup)
// PRINTLN("SHOULD BE LOOKING AT ENEMIES")
BREAK
ENDSWITCH
ENDPROC
PROC TYPE_1_CINEMATIC_CAM()
SWITCH iTypeOneCinmaticStages
CASE 0
CONTROL_COORD_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, myLocData.dropData[0].vCenterPos)
PRINTLN("TYPE 1: SHOULD BE LOOKING AT DROP")
IF DOES_ENTITY_EXIST(planeDropArgs.planeVehicle)
AND NOT IS_ENTITY_DEAD(planeDropArgs.planeVehicle)
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF GET_ENTITY_DISTANCE_FROM_LOCATION(planeDropArgs.planeVehicle, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 250
PRINTLN("iTypeOneCinmaticStages = 1")
iTypeOneCinmaticStages = 1
ENDIF
ENDIF
BREAK
CASE 1
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
PRINTLN("iTypeOneCinmaticStages = 2")
iTypeOneCinmaticStages = 2
BREAK
CASE 2
IF DOES_ENTITY_EXIST(planeDropArgs.planeVehicle)
CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, planeDropArgs.planeVehicle)
PRINTLN("TYPE 1: SHOULD BE LOOKING AT PLANE")
ENDIF
IF DOES_BLIP_EXIST(planeDropArgs.blipPackage)
PRINTLN("iTypeOneCinmaticStages = 3")
iTypeOneCinmaticStages = 3
ENDIF
BREAK
CASE 3
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
PRINTLN("iTypeOneCinmaticStages = 4")
iTypeOneCinmaticStages = 4
BREAK
CASE 4
IF DOES_ENTITY_EXIST(planeDropArgs.oPackage)
CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, planeDropArgs.oPackage)
PRINTLN("TYPE 1: SHOULD BE LOOKING AT PACKAGE")
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC HANDLE_HINT_CAM()
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
IF GET_VARIATION_TYPE() = TYPE_1
TYPE_1_CINEMATIC_CAM()
ELSE
TYPE_2_CINEMATIC_CAM()
ENDIF
ENDIF
ENDIF
ENDPROC
PROC RUN_QUICK_PLANE_CAM()
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
IF IS_VEHICLE_DRIVEABLE(myVehicle)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
FREEZE_ENTITY_POSITION(myVehicle, FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_VEHICLE_FORWARD_SPEED(myVehicle, fPlayerSpeed)
PRINTLN("RETURNING PLAYER CONTROL AND SETTING SPEED BACK TO = ", fPlayerSpeed)
ENDIF
ENDIF
IF DOES_CAM_EXIST(camQuickPlaneCam)
IF IS_CAM_SHAKING(camQuickPlaneCam)
STOP_CAM_SHAKING(camQuickPlaneCam, TRUE)
ENDIF
SET_CAM_ACTIVE(camQuickPlaneCam, FALSE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DESTROY_CAM(camQuickPlaneCam)
ENDIF
PRINTLN("GOING TO STATE - QUICK_CAM_STAGE_04")
quickCamStages = QUICK_CAM_STAGE_04
ENDIF
SWITCH quickCamStages
CASE QUICK_CAM_STAGE_01
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(myVehicle) AND IS_VEHICLE_DRIVEABLE(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
fPlayerSpeed = GET_ENTITY_SPEED(myVehicle)
FREEZE_ENTITY_POSITION(myVehicle, TRUE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
PRINTLN("FREEZING PLAYER VEHICLE, REMOVING CONTROL, AND STORING SPEED = ", fPlayerSpeed)
ENDIF
ENDIF
ENDIF
camQuickPlaneCam = CREATE_CAMERA(CAMTYPE_SCRIPTED)
IF DOES_CAM_EXIST(camQuickPlaneCam)
IF DOES_ENTITY_EXIST(planeDropArgs.planeVehicle) AND IS_VEHICLE_DRIVEABLE(planeDropArgs.planeVehicle)
ATTACH_CAM_TO_ENTITY(camQuickPlaneCam, planeDropArgs.planeVehicle, vQuickCamPosOffset)
POINT_CAM_AT_ENTITY(camQuickPlaneCam, planeDropArgs.planeVehicle, vQuickCamRotOffset)
SET_CAM_FOV(camQuickPlaneCam, 50.0000)
ENDIF
ENDIF
SET_CAM_ACTIVE(camQuickPlaneCam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
IF NOT IS_TIMER_STARTED(tQuickCam)
START_TIMER_NOW(tQuickCam)
PRINTLN("STARTING tQuickCam TIMER")
ENDIF
IF DOES_CAM_EXIST(camQuickPlaneCam) AND IS_CAM_ACTIVE(camQuickPlaneCam)
SHAKE_CAM(camQuickPlaneCam, "ROAD_VIBRATION_SHAKE", 0.5)
ENDIF
quickCamStages = QUICK_CAM_STAGE_02
BREAK
//==============================================================================================================================
CASE QUICK_CAM_STAGE_02
// OUTPUT_DEBUG_CAM_RELATIVE_TO_ENTITY(planeDropArgs.planeVehicle)
IF IS_TIMER_STARTED(tQuickCam)
IF GET_TIMER_IN_SECONDS(tQuickCam) > 2.0
IF DOES_CAM_EXIST(camQuickPlaneCam) AND IS_CAM_ACTIVE(camQuickPlaneCam)
IF IS_CAM_SHAKING(camQuickPlaneCam)
STOP_CAM_SHAKING(camQuickPlaneCam, TRUE)
ENDIF
ENDIF
PRINTLN("GOING TO STATE - QUICK_CAM_STAGE_02")
quickCamStages = QUICK_CAM_STAGE_03
ENDIF
ENDIF
BREAK
//==============================================================================================================================
CASE QUICK_CAM_STAGE_03
IF IS_VEHICLE_DRIVEABLE(myVehicle)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
FREEZE_ENTITY_POSITION(myVehicle, FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_VEHICLE_FORWARD_SPEED(myVehicle, fPlayerSpeed)
PRINTLN("RETURNING PLAYER CONTROL AND SETTING SPEED BACK TO = ", fPlayerSpeed)
ENDIF
ENDIF
SET_CAM_ACTIVE(camQuickPlaneCam, FALSE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
IF DOES_CAM_EXIST(camQuickPlaneCam)
DESTROY_CAM(camQuickPlaneCam)
ENDIF
PRINTLN("GOING TO STATE - QUICK_CAM_STAGE_04")
quickCamStages = QUICK_CAM_STAGE_04
BREAK
//==============================================================================================================================
CASE QUICK_CAM_STAGE_04
BREAK
ENDSWITCH
ENDPROC
PROC SAFELY_REMOVE_PLANE()
IF DOES_ENTITY_EXIST(planeDropArgs.planeVehicle) AND IS_VEHICLE_DRIVEABLE(planeDropArgs.planeVehicle)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(planeDropArgs.planeVehicle)
IF planeDropArgs.bCargoHasLanded
SET_PED_AS_NO_LONGER_NEEDED(tempPed)
PRINTLN("SETTING PED AS NO LONGER NEEDED - tempPed - 01")
SET_VEHICLE_AS_NO_LONGER_NEEDED(planeDropArgs.planeVehicle)
PRINTLN("SETTING PLANE AS NO LONGER NEEDED - 01")
ENDIF
ENDIF
ENDIF
ENDPROC
PROC RUN_PLANE_DROP()
VECTOR vPlanePosition, vPlayerPosition
FLOAT fPlayerDistanceToPoint
FLOAT fPlaneDistanceToPoint
// Start plane when you're close to the area...
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<myLocData.dropData[0].fTriggerPlaneDistance, myLocData.dropData[0].fTriggerPlaneDistance, 250>>, TRUE)
OR bGiveTimeWarning
UPDATE_AIR_DROP(myLocData, planeDropArgs, planeDropState, myLocationBlip)
ENDIF
IF DOES_ENTITY_EXIST(planeDropArgs.planeVehicle) AND IS_VEHICLE_DRIVEABLE(planeDropArgs.planeVehicle)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(planeDropArgs.planeVehicle)
vPlanePosition = GET_ENTITY_COORDS(planeDropArgs.planeVehicle)
IF NOT IS_VECTOR_ZERO(vPlanePosition)
fPlaneDistanceToPoint = VDIST2(vPlanePosition, myLocData.dropData[0].vCenterPos)
ENDIF
vPlayerPosition = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF NOT IS_VECTOR_ZERO(vPlayerPosition)
fPlayerDistanceToPoint = VDIST2(vPlayerPosition, myLocData.dropData[0].vCenterPos)
ENDIF
// PRINTLN("fPlayerDistanceToPoint = ", fPlayerDistanceToPoint)
// PRINTLN("fPlaneDistanceToPoint = ", fPlaneDistanceToPoint)
IF fPlayerDistanceToPoint < fPlaneDistanceToPoint
SET_PLAYBACK_SPEED(planeDropArgs.planeVehicle, 1.3)
PRINTLN("INCREASING PLANE PLAYBACK SPEED")
ELSE
SET_PLAYBACK_SPEED(planeDropArgs.planeVehicle, 1.0)
ENDIF
ELSE
IF planeDropArgs.bCargoHasLanded
SET_PED_AS_NO_LONGER_NEEDED(tempPed)
PRINTLN("SETTING PED AS NO LONGER NEEDED - tempPed - 01")
SET_VEHICLE_AS_NO_LONGER_NEEDED(planeDropArgs.planeVehicle)
PRINTLN("SETTING PLANE AS NO LONGER NEEDED - 01")
ENDIF
ENDIF
ENDIF
ENDPROC
PROC HANDLE_AMBUSHER_BLIPPING()
// We need to first check if we're running ambush at all, if we are, then wait until one of them is blipped to print objective - to fix Bug # 1371514
IF bTriggerAmbushNow OR bTriggerAmbushLate
IF bOkayToPrintAmbusherObjective
IF NOT bPrintedObjectiveToLoseRunners
PRINT_NOW("DTRFKGR_04", DEFAULT_GOD_TEXT_TIME, -1)
PRINTLN("PRINTING OBJECTIVE TO LOSE THE RIVAL RUNNERS")
bPrintedObjectiveToLoseRunners = TRUE
// vCurDestObjective[0] = myLocData.endData[0].vDrugPickup
// PRINTLN("HANDLE_AMBUSHER_BLIPPING: vCurDestObjective[0] = ", vCurDestObjective[0])
ENDIF
ENDIF
ELSE
IF bNoAmbush
IF NOT bNoAmbushPrintObjective
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
IF NOT DOES_BLIP_EXIST(myLocationBlip[0])
myLocationBlip[0] = ADD_BLIP_FOR_COORD(myLocData.endData[0].vDrugPickup)
// SET_BLIP_ROUTE(myLocationBlip[0], TRUE)
SET_BLIP_NAME_FROM_TEXT_FILE(myLocationBlip[0], "DTRFKGR_BLIP07")
PRINTLN("ADDING IN BLIP VIA HANDLE_PLAYER_REACHING_PACKAGE")
ELSE
PRINTLN("BLIP ALREADY EXIST, NOT ADDING - 01")
ENDIF
PRINTLN("THE PLAYER IS NOT OUT OF THEIR VEHICLE")
PRINT_NOW("DTRFKGR_03a", DEFAULT_GOD_TEXT_TIME, 1)
sLastObjective = "DTRFKGR_03a"
vCurDestObjective[0] = myLocData.endData[0].vDrugPickup
PRINTLN("vCurDestObjective[0] = ", vCurDestObjective[0])
bNoAmbushPrintObjective = TRUE
PRINTLN("bNoAmbushPrintObjective = TRUE - 01")
ELSE
bNoAmbushPrintObjective = TRUE
PRINTLN("bNoAmbushPrintObjective = TRUE - 02")
bOutOfVehicleAtPickup = TRUE
PRINTLN("bOutOfVehicleAtPickup = TRUE")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC HANDLE_PLAYER_REACHING_PACKAGE()
INT idx
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_PACK", CONV_PRIORITY_VERY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
bDisplayTimer = FALSE
CLEAR_THIS_PRINT("DTRFKGR_06")
IF DOES_ENTITY_EXIST(oFlareProp)
DELETE_OBJECT(oFlareProp)
DEBUG_PRINT("DELETING oFlareProp")
ENDIF
IF DOES_BLIP_EXIST(myLocationBlip[0])
REMOVE_BLIP(myLocationBlip[0])
DEBUG_PRINT("REMOVING myLocationBlip[0] VIA PLAYER REACHING PICKUP LOCATION")
ENDIF
// Turn off the flare
IF DOES_PARTICLE_FX_LOOPED_EXIST(PTFXsmugglersFlare)
STOP_PARTICLE_FX_LOOPED(PTFXsmugglersFlare)
ENDIF
// Delete package
REPEAT MAX_NUM_RECORDS idx
IF DOES_ENTITY_EXIST(planeDropArgs.oPackage)
FREEZE_ENTITY_POSITION(planeDropArgs.oPackage, FALSE)
DELETE_OBJECT(planeDropArgs.oPackage)
DEBUG_PRINT("DELETING planeDropArgs.oPackage")
ENDIF
ENDREPEAT
IF bTriggerAmbushNow
PRINTLN("bTriggerAmbushNow IS TRUE")
ELSE
PRINTLN("bTriggerAmbushNow IS FALSE")
ENDIF
IF bOutOfVehicle
PRINTLN("bOutOfVehicle IS TRUE")
ELSE
PRINTLN("bOutOfVehicle IS FALSE")
ENDIF
IF bTriggerAmbushNow AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myVehicle) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
vCurDestObjective[0] = <<0,0,0>>
PRINTLN("SETTING vCurDestObjective[0] = <<0,0,0>>")
ELSE
vCurDestObjective[0] = myLocData.endData[0].vDrugPickup
PRINTLN("SETTING vCurDestObjective[0] = myLocData.endData[0].vDrugPickup")
ENDIF
IF DOES_BLIP_EXIST(smugArgs.blipPackage)
REMOVE_BLIP(smugArgs.blipPackage)
PRINTLN("REMOVING BLIP - smugArgs.blipPackage")
ENDIF
IF DOES_BLIP_EXIST(planeDropArgs.blipPackage)
REMOVE_BLIP(planeDropArgs.blipPackage)
PRINTLN("REMOVING BLIP - planeDropArgs.blipPackage")
ENDIF
IF DOES_ENTITY_EXIST(planeDropArgs.oParachute)
DELETE_OBJECT(planeDropArgs.oParachute)
PRINTLN("DELETING PARACHUTE - VIA HANDLE_PLAYER_REACHING_PACKAGE")
ENDIF
ADD_DRUGS_TO_VEHICLE(drugCargoArgs, myLocData, myVehicle)
bDrugsLoaded = TRUE
SET_VEHICLE_DOORS_LOCKED(myVehicle, VEHICLELOCK_LOCKED_NO_PASSENGERS)
ENDPROC
PROC GIVE_AMBUSH_WARNING()
// Warn the player of the ambushers.
IF NOT bGiveAmbushWarning
IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(), 0)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<250,250,250>>)
AND g_savedGlobals.sTraffickingData.iGroundRank = 0
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, NULL, "OSCAR")
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_AMBH", CONV_PRIORITY_VERY_HIGH)
bGiveAmbushWarning = TRUE
ELSE
IF GET_RANDOM_BOOL()
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<150,150,150>>)
AND g_savedGlobals.sTraffickingData.iGroundRank <> 0
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, NULL, "OSCAR")
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_AMBH", CONV_PRIORITY_VERY_HIGH)
bGiveAmbushWarning = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC CHECK_FOR_STAYING_ON_MAIN_ROADS()
VECTOR vPlayerCoordinates, vClosetNodePosition
FLOAT fTempDistance //, fTempDistance01
IF bTriggeredWanted
IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(GET_PLAYER_INDEX(), 0)
TRIGGER_MUSIC_EVENT("OJDG1_GOING_LOST")
PRINTLN("TRIGGERING MUSIC - OJDG1_GOING_LOST")
bTriggeredWanted = FALSE
ENDIF
ENDIF
// fTempDistance01 = GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), <<2058.6912, 4761.4756, 40.2296>>)
// PRINTLN("fTempDistance = ", fTempDistance01)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF (GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos) < 50)
OR (GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), myLocData.endData[0].vDrugPickup) < 50)
OR (GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), <<2058.6912, 4761.4756, 40.2296>>) < 150)
OR bAmbushActive
OR bIsChaseActive
OR bIsSmugglersActive
// OR planeDropArgs.bPlaneActive
RESTART_TIMER_NOW(tOnRoadTimer)
// PRINTLN("CHECK_FOR_STAYING_ON_MAIN_ROADS - EXITING EARLY")
EXIT
ENDIF
ENDIF
// IF iRoadCounter > 20
// PRINTLN("CHECKING FOR PROXIMITY TO ROAD NODES")
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
vPlayerCoordinates = GET_ENTITY_COORDS(PLAYER_PED_ID())
ENDIF
IF NOT IS_VECTOR_ZERO(vPlayerCoordinates)
GET_CLOSEST_VEHICLE_NODE(vPlayerCoordinates, vClosetNodePosition, NF_NONE)
IF NOT IS_VECTOR_ZERO(vClosetNodePosition)
fTempDistance = VDIST2(vPlayerCoordinates, vClosetNodePosition)
fTempDistance = SQRT(fTempDistance)
// PRINTLN("fTempDistance = ", fTempDistance)
IF VDIST2(vPlayerCoordinates, vClosetNodePosition) < 400 // 20m
IF NOT IS_TIMER_STARTED(tOnRoadTimer)
START_TIMER_NOW(tOnRoadTimer)
bOnRoads = TRUE
// PRINTLN("bOnRoads = TRUE 01")
ELSE
bOnRoads = TRUE
// PRINTLN("bOnRoads = TRUE 02")
ENDIF
ELSE
bOnRoads = FALSE
// PRINTLN("bOnRoads = FALSE")
IF IS_TIMER_STARTED(tOnRoadTimer)
RESTART_TIMER_NOW(tOnRoadTimer)
// PRINTLN("RESTARTING TIMER - tOnRoadTimer")
ENDIF
ENDIF
ENDIF
ENDIF
IF bOnRoads
IF IS_TIMER_STARTED(tOnRoadTimer)
FLOAT fTempTime = GET_TIMER_IN_SECONDS(tOnRoadTimer)
fTempTime = fTempTime
// PRINTLN("fTempTime = ", fTempTime)
IF myLocData.dropData[0].fTimeAllowedToStayOnRoads = 0
myLocData.dropData[0].fTimeAllowedToStayOnRoads = MAX_TIME_ALLOWED_ON_ROADS
PRINTLN("TIME ALLOWED EQUALS ZERO, SETTING TO DEFAULT VALUE OF MAX_TIME_ALLOWED_ON_ROADS")
ENDIF
IF GET_TIMER_IN_SECONDS(tOnRoadTimer) > myLocData.dropData[0].fTimeAllowedToStayOnRoads
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 2)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
PRINTLN("SETTING PLAYER WANTED LEVEL - BEING ON ROADS TOO LONG")
ENDIF
IF NOT bTriggeredWanted
TRIGGER_MUSIC_EVENT("OJDG1_GOING_WANTED")
PRINTLN("TRIGGERING MUSIC - OJDG1_GOING_WANTED")
bTriggeredWanted = TRUE
ENDIF
ELIF GET_TIMER_IN_SECONDS(tOnRoadTimer) > (myLocData.dropData[0].fTimeAllowedToStayOnRoads - 11.0)
IF NOT bGiveCopWarning
IF CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_ROADS", CONV_PRIORITY_VERY_HIGH)
DEBUG_PRINT("OSCAR - POLICE WARNING DIALOGUE")
bGiveCopWarning = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// iRoadCounter = 0
// ENDIF
//
// iRoadCounter++
ENDPROC
PROC HANDLE_OBJECTIVE_PRINT_LOSE_RIVALS()
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.endData[0].vDrugPickup, <<GATEWAY_SIZE,GATEWAY_SIZE,GATEWAY_SIZEZ>>, TRUE)
AND (bInActiveFight OR bIsChaseActive OR bIsSmugglersActive)
AND NOT bWanted
PRINT_NOW("DTRSHRD_06", DEFAULT_GOD_TEXT_TIME, 1)
PRINTLN("PLAYER AT PICKUP SPOT - PRINTING OBJECTIVE TO LOSE THE RIVAL RUNNERS")
ELSE
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.endData[0].vDrugPickup, <<GATEWAY_SIZE,GATEWAY_SIZE,GATEWAY_SIZEZ>>, TRUE)
AND NOT (bInActiveFight AND bIsChaseActive AND bIsSmugglersActive)
IF IS_MESSAGE_BEING_DISPLAYED()
CLEAR_THIS_PRINT("DTRSHRD_06")
ENDIF
IF IS_HELP_MESSAGE_ON_SCREEN()
CLEAR_HELP()
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL OKAY_TO_RUN_TRAP()
IF g_savedGlobals.sTraffickingData.iGroundRank <> 20
AND g_savedGlobals.sTraffickingData.iGroundRank > 4
IF GET_VARIATION_TYPE() = TYPE_2
IF iRandInt = 0
IF bOkayToRunTrap
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC REMOVE_FLARE()
// Remove the flare if you the package has landed, is visible, and you're close.
IF NOT bRemoveFlare
IF planeDropArgs.bCargoHasLanded
IF DOES_ENTITY_EXIST(planeDropArgs.oLandedPackage)
AND NOT IS_ENTITY_OCCLUDED(planeDropArgs.oLandedPackage)
AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<25,25,25>>)
// Turn off the flare
IF DOES_PARTICLE_FX_LOOPED_EXIST(PTFXsmugglersFlare)
STOP_PARTICLE_FX_LOOPED(PTFXsmugglersFlare)
ENDIF
bRemoveFlare = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
PROC HANDLE_OSCAR_POST_AMBUSH_DIALOGUE()
IF NOT bPlayedNoAmbushDialogue
IF NOT bIdleAmbusherTrigger AND NOT bTriggerAmbushLate
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
IF IS_TIMER_STARTED(tNoAmbushTimer)
IF GET_TIMER_IN_SECONDS(tNoAmbushTimer) > 7.5
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_GOOD", CONV_PRIORITY_VERY_HIGH)
bPlayedNoAmbushDialogue = TRUE
PRINTLN("PLAYING OSCAR CONVO - ARMS_GOOD")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC HANDLE_TREVOR_DELAYING_RETURN()
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), vGroundEndingPos) < 200
// PRINTLN("EXITING EARLY, BECAUSE WE'RE CLOSE")
EXIT
ENDIF
ENDIF
IF NOT bGaveDelayWarning
IF bDrugsLoaded AND NOT bInActiveFight
IF NOT IS_TIMER_STARTED(tDelayReturnTimer)
START_TIMER_NOW(tDelayReturnTimer)
PRINTLN("STARTING TIMER - tDelayReturnTimer")
ELSE
IF GET_TIMER_IN_SECONDS(tDelayReturnTimer) > 180
IF CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "OSCAR_HURRY", CONV_PRIORITY_VERY_HIGH)
PRINTLN("bGaveDelayWarning = TRUE")
bGaveDelayWarning = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_PLAYER_COLLIDED_WITH_PACKAGE()
IF DOES_ENTITY_EXIST(planeDropArgs.oLandedPackage) AND NOT IS_ENTITY_DEAD(planeDropArgs.oLandedPackage)
IF NOT IS_ENTITY_DEAD(myVehicle)
IF IS_ENTITY_TOUCHING_ENTITY(myVehicle, planeDropArgs.oLandedPackage)
PRINTLN("PLAYER'S VEHICLE HAS COLLIDED WITH PACKAGE")
planeDropArgs.bCargoHasLanded = TRUE
PRINTLN("SETTING planeDropArgs.bCargoHasLanded = TRUE SINCE THE PLAYER HAS TOUCHED THE PACKAGE")
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_AT_PACKAGE_ON_FOOT()
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), planeDropArgs.oLandedPackage)
PRINTLN("PLAYER IS ON FOOT AND CAN PICK UP THE PACKAGE")
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC CREATE_AMBUSH_ATTACKER_VEHICLES()
INT idx
REPEAT 2 idx
IF NOT DOES_ENTITY_EXIST(ambushArgs.vehAmbushAttackers[idx])
IF NOT IS_VECTOR_ZERO(myLocData.dropData[0].vAmbushVehicleAttackerPositions[idx])
ambushArgs.vehAmbushAttackers[idx] = CREATE_VEHICLE(REBEL, myLocData.dropData[0].vAmbushVehicleAttackerPositions[idx])
ENDIF
ENDIF
ENDREPEAT
ENDPROC
FUNC BOOL IS_VEHICLE_ON_FIRE_OR_UPSIDEDOWN(VEHICLE_INDEX TheVehicle)
IF IS_ENTITY_UPSIDEDOWN(TheVehicle)
OR IS_ENTITY_ON_FIRE(TheVehicle)
OR GET_NUMBER_OF_FIRES_IN_RANGE(GET_ENTITY_COORDS(TheVehicle, FALSE), 5) > 0
OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(TheVehicle, WEAPONTYPE_MOLOTOV)
OR IS_PROJECTILE_TYPE_IN_AREA(GET_ENTITY_COORDS(TheVehicle, FALSE) - << 5, 5, 5 >>, GET_ENTITY_COORDS(TheVehicle, FALSE) + << 5, 5, 5 >>, WEAPONTYPE_MOLOTOV)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC HANDLE_PLAYER_LEAVING_VEHICLE_DURING_CONVO()
IF NOT IS_PLAYER_IN_VALID_VEHICLE(myVehicle)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TestResumptionLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
PRINTLN("KILLING ANY CONVERSATION THAT MIGHT BE ONGOING")
KILL_FACE_TO_FACE_CONVERSATION()
bInterrupt = TRUE
PRINTLN("bInterrupt = TRUE")
ENDIF
ELSE
IF bInterrupt
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "ARMSAUD", myLocData.dropData[0].sConvo, TestResumptionLabel, CONV_PRIORITY_HIGH)
PRINTLN("TRYING TO RESUME INTERRUPTED LINE")
bInterrupt = FALSE
ENDIF
ENDIF
ENDIF
ENDPROC
PROC CREATE_DUNE_BUGGY()
IF NOT DOES_ENTITY_EXIST(myVehicle)
myVehicle = CREATE_VEHICLE(DUNE, vSpawnPosition, fSpawnHeading)
PRINTLN("VEHICLE DOES NOT EXIST - CREATING NEW ONE")
SET_VEHICLE_RADIO_ENABLED(myVehicle, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(DUNE)
IF DOES_ENTITY_EXIST(myVehicle)
IF DOES_EXTRA_EXIST(myVehicle, 1)
SET_VEHICLE_EXTRA(myVehicle, 1, TRUE)
CPRINTLN(DEBUG_MINIGAME, "SETTING myVehicle VEHICLE EXTRA 1 TO TRUE")
ENDIF
IF DOES_EXTRA_EXIST(myVehicle, 2)
SET_VEHICLE_EXTRA(myVehicle, 2, FALSE)
CPRINTLN(DEBUG_MINIGAME, "SETTING myVehicle VEHICLE EXTRA 2 TO FALSE")
ENDIF
IF DOES_EXTRA_EXIST(myVehicle, 3)
SET_VEHICLE_EXTRA(myVehicle, 3, FALSE)
CPRINTLN(DEBUG_MINIGAME, "SETTING myVehicle VEHICLE EXTRA 3 TO FALSE")
ENDIF
SET_VEHICLE_COLOURS(myVehicle, 0, 0)
ENDIF
ELSE
PRINTLN("VEHICLE ALREADY EXISTS - MOVING ALONG")
ENDIF
ENDPROC
FUNC BOOL UPDATE()
SWITCH currentMissionStage
CASE STAGE_START
IF IS_SCREEN_FADED_OUT()
CREATE_DUNE_BUGGY()
IF NOT IS_TIMER_STARTED(stLoadSceneTimer)
START_TIMER_NOW(stLoadSceneTimer)
PRINTLN("STARTING TIMER - stLoadSceneTimer - 01")
ENDIF
currentMissionStage = STAGE_GET_CAR
ELSE
PRINTLN("GOING TO STATE - STAGE_GET_CAR_B 01")
currentMissionStage = STAGE_GET_CAR_B
ENDIF
BREAK
CASE STAGE_GET_CAR
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
END_REPLAY_SETUP(myVehicle)
PRINTLN("GOING TO STATE - STAGE_GET_CAR_B 02")
currentMissionStage = STAGE_GET_CAR_B
BREAK
CASE STAGE_GET_CAR_B
#IF IS_DEBUG_BUILD
IF pSkipping
DO_SCREEN_FADE_IN(500)
ENDIF
#ENDIF
// Fade in if we need to - RParadis (for replays)
IF IS_SCREEN_FADED_OUT()
CLEAR_AREA_OF_VEHICLES(<< 2149.3284, 4805.9575, 40.2094 >>, 100, FALSE, TRUE)
DO_SCREEN_FADE_IN(500)
PRINTLN("CALLING SCREEN FADE IN")
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
ELSE
PRINTLN("SCREEN IS FADED OUT")
ENDIF
IF NOT bGenPrinted AND NOT DOES_ENTITY_EXIST(myVehicle) // AND TIMER_DO_WHEN_READY(myTimer, 8)
//Aqcuire an off-road vehicle
//TODO make this a phone call // A known location for off road vehicles has been added to your map. You must aquire a proper vehicle to handle the rugged terrain of this drug drop.
//PRINT_HELP("DTRFKGR_HELP_01")
//Acquire an off-road vehicle.
PRINT_NOW("DTRFKGR_01",DEFAULT_GOD_TEXT_TIME,1) //PRINT("S3_PASS", DEFAULT_GOD_TEXT_TIME, 1)
sLastObjective = "DTRFKGR_01"
myVehicle = CREATE_VEHICLE(myLocData.mnCarChasers[0], myLocData.vKnownVehicleLoc, myLocData.vKnownVehicleHead)
myVehicleBlip = ADD_BLIP_FOR_ENTITY(myVehicle)
SET_BLIP_COLOUR(myVehicleBlip, BLIP_COLOUR_BLUE)
//RADIUS
bGenPrinted = TRUE
ENDIF
IF VALIDATE_CAR()
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
myVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
SET_ENTITY_AS_MISSION_ENTITY(myVehicle, TRUE, TRUE)
SET_VEHICLE_CAN_LEAK_OIL(myVehicle, FALSE)
SET_VEHICLE_CAN_LEAK_PETROL(myVehicle, FALSE)
SET_VEHICLE_RADIO_ENABLED(myVehicle, FALSE)
SET_DISABLE_VEHICLE_PETROL_TANK_FIRES(myVehicle, TRUE)
SET_ENTITY_HEALTH(myVehicle, 2000)
SET_VEHICLE_STRONG(myVehicle, TRUE)
SET_VEHICLE_TYRES_CAN_BURST(myVehicle, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(myVehicle, TRUE)
SUPPRESS_PLAYERS_CAR()
PRINTLN("SETTING PETROL/OIL TO NOT LEAK")
ENDIF
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, FALSE)
ENDIF
REMOVE_BLIP(myVehicleBlip)
vCurDestObjective[0] = myLocData.dropData[0].vCenterPos
//set up the relationship groups.
ADD_RELATIONSHIP_GROUP("policeChasers", staticChaseArgs.relStaticPoliceChasers)
ADD_RELATIONSHIP_GROUP("carChaserEnemies", carChaserArgs.relCarChaserEnemies)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_DISLIKE, RELGROUPHASH_PLAYER, staticChaseArgs.relStaticPoliceChasers)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_DISLIKE, staticChaseArgs.relStaticPoliceChasers, RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, carChaserArgs.relCarChaserEnemies)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, carChaserArgs.relCarChaserEnemies, RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_COP, carChaserArgs.relCarChaserEnemies)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, carChaserArgs.relCarChaserEnemies, RELGROUPHASH_COP)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, staticChaseArgs.relStaticPoliceChasers, carChaserArgs.relCarChaserEnemies)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, carChaserArgs.relCarChaserEnemies, staticChaseArgs.relStaticPoliceChasers)
DEBUG_PRINT("SETTING RELATIONSHIP GROUPS")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, PLAYER_PED_ID(), "TREVOR")
IF NOT IS_TIMER_STARTED(stMissionTimer)
START_TIMER_NOW(stMissionTimer)
PRINTSTRING("STARTING MISSION TIMER AT = ")
PRINTFLOAT(GET_TIMER_IN_SECONDS(stMissionTimer))
PRINTNL()
ENDIF
GIVE_PLAYER_WEAPONS()
HANDLE_TAXI_DIALOGUE()
SETTIMERA(0)
// Basically reseting cutscene, first bool is to grab the time at the very start and the second is to reset to the first state
bGrabbedTimeForCutscene = FALSE
cutArgs.cutsceneState = CUTSCENE_STATE_START
IF GET_VARIATION_TYPE() = TYPE_1
// Create particle effect right at center position
PTFXsmugglersFlare = START_PARTICLE_FX_LOOPED_AT_COORD("scr_drug_traffic_flare_L", myLocData.dropData[0].vCenterPos, <<0,0,0>>, 0.5)
SET_PARTICLE_FX_LOOPED_COLOUR(PTFXsmugglersFlare, 1.0, 0.84, 0.0)
TRIGGER_MUSIC_EVENT("OJDG1_START")
PRINTLN("STARTING MUSIC - OJDG1_START")
SNAP_3D_COORD_TO_GROUND(myLocData.dropData[0].vCenterPos)
oFlareProp = CREATE_OBJECT(Prop_Flare_01b, myLocData.dropData[0].vCenterPos)
ELSE
TRIGGER_MUSIC_EVENT("OJDG2_START")
PRINTLN("STARTING MUSIC - OJDG2_START")
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
DEBUG_PRINT("GIVING BACK PLAYER CONTROL")
ENDIF
currentMissionStage = STAGE_PICKUP
ENDIF
BREAK
//===================================================================================================================================
CASE STAGE_PICKUP
IF NOT bOutOfVehicle
IF g_savedGlobals.sTraffickingData.iGroundRank = 0
fTimeToBlip = 15000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 1
fTimeToBlip = 9000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
fTimeToBlipRivals = 7500
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 2
fTimeToBlip = 6000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 3
fTimeToBlip = 6000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
fTimeToBlipRivals = 9500
ELIF g_savedGlobals.sTraffickingData.iGroundRank = 4
fTimeToBlip = 7000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
ELSE
fTimeToBlip = 5000
fTimeToBlipRivals = 5000
// PRINTLN("fTimeToBlip = ", fTimeToBlip)
ENDIF
IF TIMERA() > fTimeToBlipRivals
bOkayToBlipEnemies = TRUE
ENDIF
IF NOT bOkayToBlipObjective
IF TIMERA() > fTimeToBlip
myLocationBlip[0] = ADD_BLIP_FOR_COORD(myLocData.dropData[0].vCenterPos)
IF DOES_BLIP_EXIST(myLocationBlip[0])
// SET_BLIP_ROUTE(myLocationBlip[0], TRUE)
SET_BLIP_NAME_FROM_TEXT_FILE(myLocationBlip[0], "DTRFKGR_BLIP02")
ENDIF
vCurDestObjective[0] = myLocData.dropData[0].vCenterPos
PRINTLN("BLIPPING LOCATION")
IF NOT IS_ENTITY_DEAD(myVehicle)
SET_VEHICLE_RADIO_ENABLED(myVehicle, TRUE)
ENDIF
bOkayToBlipObjective = TRUE
ENDIF
ENDIF
IF TIMERA() > fTimeToBlip
// This handles the objective prints and help
IF NOT bPrintObjectivesAndHelp
// IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF bTimedPickup
bDisplayTimer = TRUE
ENDIF
PRINT_FIRST_OBJECTIVES_AND_HELP()
bPrintObjectivesAndHelp = TRUE
// ENDIF
ENDIF
ENDIF
ENDIF
HANDLE_PLAYER_LEAVING_VEHICLE_DURING_CONVO()
HANDLE_HINT_CAM()
// ------------------------------------------------TYPE 1 UPDATE------------------------------------------------
IF GET_VARIATION_TYPE() = TYPE_1
// Check to see if the player is staying on the main roads too long
CHECK_FOR_STAYING_ON_MAIN_ROADS()
// Handles the plane dropping the package
RUN_PLANE_DROP()
// Creates some vehicles that are to be used by the attackers on foot.
CREATE_AMBUSH_ATTACKER_VEHICLES()
// IF NOT bWanted
REMOVE_FLARE()
// Point at which we judge the player's time.
IF NOT bTriggerAmbushNow AND NOT bTriggerAmbushLate
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<50,50,50>>, FALSE) AND IS_PLAYER_IN_VALID_VEHICLE(myVehicle)
// PRINTLN("UPDATE: fTimeLeft = ", fTimeLeft)
IF fTimeLeft < myLocData.fTriggerNowTime
bTriggerAmbushNow = TRUE
PRINTLN("fTimeLeft = ", fTimeLeft)
PRINTLN("!!!!!!!!!!!TRIGGERING AMBUSH EARLY!!!!!!!!!!!")
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_GR09", CONV_PRIORITY_VERY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
PRINTLN("TRYING TO PLAY OSCAR AMBUSH LINE - 01")
ENDIF
ELIF fTimeLeft < myLocData.fSlowTime AND fTimeLeft > myLocData.fTriggerNowTime
bTriggerAmbushLate = TRUE
PRINTLN("fTimeLeft = ", fTimeLeft)
PRINTLN("!!!!!!!!!!!TRIGGERING AMBUSH LATE!!!!!!!!!!!")
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_GR09", CONV_PRIORITY_VERY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
PRINTLN("TRYING TO PLAY OSCAR AMBUSH LINE - 02")
ENDIF
bAmbushActive = TRUE
ELSE
bNoAmbush = TRUE
// PRINTLN("bNoAmbush = TRUE")
ENDIF
ENDIF
ENDIF
IF planeDropArgs.bCargoHasLanded
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, <<35,35,35>>, FALSE) AND IS_PLAYER_IN_VALID_VEHICLE(myVehicle)
bDisplayTimer = FALSE
// PRINTLN("bDisplayTimer = FALSE - PLAYER CLOSE ENOUGH TO DROPSITE")
IF NOT IS_TIMER_STARTED(tIdleTimer)
START_TIMER_NOW(tIdleTimer)
PRINTLN("STARTING TIMER - tIdleTimer")
PRINT_HELP("DTRFKGR_HELP_05")
ELSE
IF GET_TIMER_IN_SECONDS(tIdleTimer) > 20
bIdleAmbusherTrigger = TRUE
bTriggerAmbushNow = TRUE
PRINTLN("WE'RE SITTING IDLE FOR TOO LONG, TRIGGER AMBUSH")
ENDIF
ENDIF
ENDIF
ENDIF
IF bTriggerAmbushNow
UPDATE_AMBUSH(myLocData, ambushState, badGuyPed, bInAmbush, ambushArgs, bDoAmbush, vCurDestObjective,
bWanted, myVehicle, outOfVehicleTime, bAmbushActive, MyLocalPedStruct, bDrugsLoaded, bOutOfVehicle,
sLastObjective, myLocationBlip)
ENDIF
// Once your there, add the package
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, vPickupDimension, FALSE)
OR HAS_PLAYER_COLLIDED_WITH_PACKAGE()
OR (NOT IS_ENTITY_DEAD(planeDropArgs.oLandedPackage) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_ENTITY_COORDS(planeDropArgs.oLandedPackage), vPickupDimension, FALSE))
IF planeDropArgs.bCargoHasLanded
AND IS_PLAYER_IN_VALID_VEHICLE(myVehicle)
OR (planeDropArgs.bCargoHasLanded AND IS_PLAYER_AT_PACKAGE_ON_FOOT())
HANDLE_PLAYER_REACHING_PACKAGE()
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
IF bNoAmbush
IF NOT IS_TIMER_STARTED(tNoAmbushTimer)
START_TIMER_NOW(tNoAmbushTimer)
PRINTLN("STARTING TIMER - tNoAmbushTimer")
ENDIF
TRIGGER_MUSIC_EVENT("OJDG1_SAFE_PACKAGE")
PRINTLN("TRIGGERING MUSIC - OJDG1_SAFE_PACKAGE")
ENDIF
RESTART_TIMER_NOW(tOnRoadTimer)
DEBUG_PRINT("GO TO STAGE_DESTINATION VIA PICKUP UPDATE")
currentMissionStage = STAGE_DESTINATION
ELSE
// PRINTLN("PACKAGE HAS NOT TECHNICALLY LANDED YET")
ENDIF
ENDIF
// ELSE
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), myLocData.dropData[0].vCenterPos, vPickupDimension, FALSE)
// bLedPoliceToSite = TRUE
// DEBUG_PRINT("bLedPoliceToSite = TRUE")
// ENDIF
// ENDIF
ENDIF
// ------------------------------------------------TYPE 2 UPDATE------------------------------------------------
IF bDoSmugglers AND bOkayToBlipEnemies
CREATE_SMUGGLERS_MODE(myLocData, smugArgs, bSmugglersCreated)
// If the smugglers have been created, go ahead and run update loop.
IF bSmugglersCreated
UPDATE_SMUGGLERS_MODE(myLocData, smugArgs, smugglersState, vCurDestObjective, myLocationBlip, sLastObjective,
bDrugsLoaded, bIsSmugglersActive, smugglerRetrieveState, myVehicle, fpSmugglersEnding, cutArgs, myCamera,
drugCargoArgs, smugglerPlaneRecordingStages, MyLocalPedStruct,
fpSmugglersPickupCutscene, bOkayToRunTrap, bOutOfVehicle, bWanted, smugglersCreateHeliPedStages, outOfVehicleTime)//, bDoSmugglers)
// HANDLE_OBJECTIVE_PRINT_LOSE_RIVALS()
ENDIF
// If the flag has been set, i.e. the mode is effectively over... go to STAGE_DESTINATION to read when the player has reached the drop-off location.
IF smugArgs.bGoToDestination
DEBUG_PRINT("EARLY BREAK")
// Setting to false in an effort to fix Bug #201467
bIsSmugglersActive = FALSE
bGrabbedTimeForCutscene = FALSE
currentMissionStage = STAGE_DESTINATION
BREAK
ENDIF
// IF OKAY_TO_RUN_TRAP()
// UPDATE_TRAP(myLocData, trapArgs, carChaserArgs, smugArgs, trapStages, bIsChaseActive, MyLocalPedStruct, myVehicle,
// bDoCarChase, bDoSmugglers, myLocationBlip, sLastObjective)
// ENDIF
ENDIF
BREAK
//----------------------------------------------------------------------------------------------------------------------------------
CASE STAGE_DESTINATION
SAFELY_REMOVE_PLANE()
IF g_savedGlobals.sTraffickingData.iGroundRank = 0 // Handles Ground 1
CHECK_FOR_STAYING_ON_MAIN_ROADS()
ELSE
IF bCarChaseComplete // should handle all the other variations... but we want a 5 second buffer
IF IS_TIMER_STARTED(tEndChaseTimer)
IF GET_TIMER_IN_SECONDS(tEndChaseTimer) > 5
CHECK_FOR_STAYING_ON_MAIN_ROADS()
ENDIF
ENDIF
ENDIF
ENDIF
// If the player gets to the location without triggering an ambush, Oscar say's "Good Job!"
HANDLE_OSCAR_POST_AMBUSH_DIALOGUE()
HANDLE_TREVOR_DELAYING_RETURN()
HANDLE_AMBUSHER_BLIPPING()
IF NOT bInActiveFight AND NOT bIsChaseActive
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), myVehicle)
CONTROL_COORD_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, myLocData.endData[0].vDrugPickup)
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
ENDIF
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
ENDIF
ENDIF
// ------------------------------------------------TYPE 1 UPDATE------------------------------------------------
// If the player got the warning and we didn't trigger the ambush early, trigger now.
IF bTriggerAmbushLate OR bTriggerAmbushNow
IF NOT bToldToGetBackInVehicle
IF UPDATE_AMBUSH(myLocData, ambushState, badGuyPed, bInAmbush, ambushArgs, bDoAmbush, vCurDestObjective,
bWanted, myVehicle, outOfVehicleTime, bAmbushActive, MyLocalPedStruct, bDrugsLoaded, bOutOfVehicle,
sLastObjective, myLocationBlip)
IF bOutOfVehicle
PRINT_NOW("DTRSHRD_03", DEFAULT_GOD_TEXT_TIME, 1)
sLastObjective = "DTRSHRD_03"
vCurDestObjective[0] = myLocData.endData[0].vDrugPickup
PRINTLN("OUT OF VEHICLE IS TRUE - vCurDestObjective[0] = ", vCurDestObjective[0])
IF NOT DOES_BLIP_EXIST(myVehicleBlip)
myVehicleBlip = ADD_BLIP_FOR_ENTITY(myVehicle)
SET_BLIP_COLOUR(myVehicleBlip, BLIP_COLOUR_BLUE)
PRINTLN("ADDING IN myVehicleBlip IN AMBUSH")
ENDIF
ENDIF
SETTIMERA(0)
DEBUG_PRINT("***********************STARTING CAR CHASE TIMER VIA AMBUSH - 01***********************")
bDoCarChase = TRUE
bRunAmbushChase = TRUE
bToldToGetBackInVehicle = TRUE
ENDIF
ENDIF
ELSE
IF g_savedGlobals.sTraffickingData.iGroundRank > 0
IF NOT bDoCarChase
SETTIMERA(0)
DEBUG_PRINT("***********************STARTING CAR CHASE TIMER VIA AMBUSH - 02***********************")
bDoCarChase = TRUE
bRunAmbushChase = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bPrintLateObjective
IF bOutOfVehicleAtPickup AND NOT bTriggerAmbushNow
IF GET_VARIATION_TYPE() = TYPE_1
IF NOT bOutOfVehicle
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
PRINT_NOW("DTRFKGR_03a", DEFAULT_GOD_TEXT_TIME, 1)
PRINTLN("PRINTING OBJECTIVE NOW THAT THE PLAYER IS BACK IN THEIR VEHICLE")
bPrintLateObjective = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// ------------------------------------------------TYPE 2 UPDATE------------------------------------------------
IF bDoSmugglers AND bSmugglersCreated
IF UPDATE_SMUGGLERS_MODE(myLocData, smugArgs, smugglersState, vCurDestObjective, myLocationBlip, sLastObjective,
bDrugsLoaded, bIsSmugglersActive, smugglerRetrieveState, myVehicle, fpSmugglersEnding, cutArgs, myCamera,
drugCargoArgs, smugglerPlaneRecordingStages, MyLocalPedStruct,
fpSmugglersPickupCutscene, bOkayToRunTrap, bOutOfVehicle, bWanted, smugglersCreateHeliPedStages, outOfVehicleTime)//, bDoSmugglers)
// Setting to false in an effort to fix Bug #201467
bIsSmugglersActive = FALSE
DEBUG_PRINT("SETTING WANTED LEVEL MULTIPLIER TO ZERO IN SMUGGLERS MODE AGAIN!!!")
SET_WANTED_LEVEL_MULTIPLIER(0.0)
SETTIMERB(0)
DEBUG_PRINT("***********************STARTING CAR CHASE TIMER VIA SMUGGLERS***********************")
bDoCarChase = TRUE
bRunSmugglerChase = TRUE
bDoSmugglers = FALSE
ENDIF
ENDIF
// IF OKAY_TO_RUN_TRAP()
// UPDATE_TRAP(myLocData, trapArgs, carChaserArgs, smugArgs, trapStages, bIsChaseActive, MyLocalPedStruct, myVehicle,
// bDoCarChase, bDoSmugglers, myLocationBlip, sLastObjective)
// ENDIF
//------------------------------------------------CAR CHASE------------------------------------------------
IF CAR_CHASE_READY_FIRST_TIME()
IF UPDATE_CAR_CHASE(carChaseProgress, myTimer, myLocationBlip, myLocData, carChaserArgs, sLastObjective,
vCurDestObjective, bCarChaseComplete, bIsChaseActive, bInActiveFight, bWanted, bOutOfVehicle, myVehicleBlip,
bDoPoliceChase, mnVehicleToUse, mnPedToUse, bOkayToRunTrap, MyLocalPedStruct, outOfVehicleTime, myVehicle,
bRunHeliChase)
IF NOT IS_TIMER_STARTED(tEndChaseTimer)
START_TIMER_NOW(tEndChaseTimer)
PRINTLN("STARTING TIMER - tEndChaseTimer")
RESTART_TIMER_NOW(tOnRoadTimer)
PRINTLN("RESTARTING TIMER - tOnRoadTimer")
bGiveCopWarning = FALSE
PRINTLN("bGiveCopWarning = FALSE")
ENDIF
/* Hack: to fix Bug # 488111, we need to check if the player is back in their vehicle. We're turning off bool
so UPDATE_MISSION_CAR does not run until we're given our next objective... was killing print immediately after
it was printed.*/
IF NOT DOES_BLIP_EXIST(myLocationBlip[0])
IF NOT bOutOfVehicle
myLocationBlip[0] = ADD_BLIP_FOR_COORD(vCurDestObjective[0])
IF DOES_BLIP_EXIST(myLocationBlip[0])
// SET_BLIP_ROUTE(myLocationBlip[0], TRUE)
SET_BLIP_NAME_FROM_TEXT_FILE(myLocationBlip[0], "DTRFKGR_BLIP07")
PRINTLN("ADDING IN myLocationBlip[0] AFTER CAR CHASE")
ENDIF
PRINT_NOW("DTRFKGR_03a", DEFAULT_GOD_TEXT_TIME, 1)
sLastObjective = "DTRFKGR_03a"
ELSE
PRINTLN("STILL OUT OF VEHICLE")
ENDIF
ELSE
IF bOutOfVehicle
IF DOES_BLIP_EXIST(myLocationBlip[0])
REMOVE_BLIP(myLocationBlip[0])
PRINTLN("REMOVING myLocationBlip[0] POST UPDATE_CAR_CHASE")
ENDIF
ENDIF
PRINTLN("myLocationBlip[0] DOES EXIST")
ENDIF
ENDIF
ENDIF
HANDLE_CHASE_ENDING_CONVO(MyLocalPedStruct, bRunHeliChase, myVehicle, bCarChaseComplete)
// HANDLE_OBJECTIVE_PRINT_LOSE_RIVALS()
bComplete = TRUE
IF bInActiveFight
bComplete = FALSE
ENDIF
IF bInActiveFight OR bWanted
bDrawCorona = FALSE
// PRINTLN("bDrawCorona = FALSE")
ELSE
bDrawCorona = TRUE
// PRINTLN("bDrawCorona = TRUE")
ENDIF
IF NOT IS_ENTITY_AT_COORD(myVehicle, myLocData.endData[0].vDrugPickup, <<5,5,LOCATE_SIZE_HEIGHT>>, bDrawCorona)
OR NOT IS_PLAYER_IN_VALID_VEHICLE(myVehicle)
AND NOT IS_VEHICLE_ON_FIRE_OR_UPSIDEDOWN(myVehicle)
bComplete = FALSE
ELIF NOT bInActiveFight
bComplete = TRUE
ENDIF
IF bComplete
// TRIGGER_MUSIC_EVENT("OJDG1_ALL_SAFE")
// PRINTLN("TRIGGERING MUSIC - OJDG1_ALL_SAFE")
TRIGGER_MUSIC_EVENT("OJDG_COMPLETE")
PRINTLN("STARTING MUSIC - OJDG_COMPLETE")
BRING_VEHICLE_TO_HALT(myVehicle, 5.0, 2)
REMOVE_DRUG_CARGO(drugCargoArgs)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(myVehicle)
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), myVehicle)
PRINTLN("TASKING THE PLAYER TO LEAVE VEHICLE")
ENDIF
// Using myArgs.fTimeLimit as a way to determine if we're in repeatable mode.
fMissionTime = GET_TIMER_IN_SECONDS(stMissionTimer)
PRINTLN("BEFORE CONVERSION: fMissionTime = ", fMissionTime)
fMissionTime = (fMissionTime*1000)
PRINTLN("AFTER CONVERSION: fMissionTime = ", fMissionTime)
IF g_savedGlobals.sTraffickingData.iGroundRank >=20
PRINTLN("IN REPEATABLE MODE")
SET_ENDSCREEN_DATASET_HEADER(groundEndScreen.groundTraffickingEndScreen, "DTRSHRD_MPASS", "DTRSHRD_GRT")
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_TIME_M_S, "DTRSHRD_TIME1", "", FLOOR(fMissionTime), 0, ESCM_NO_MARK, FALSE)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_DOLLAR_VALUE, "DTRSHRD_MONEY", "", 5000, 0, ESCM_NO_MARK, FALSE)
ELSE
PRINTLN("IN REGULAR MODE")
sWeapon = GET_WEAPON_AWARDED()
SET_ENDSCREEN_DATASET_HEADER(groundEndScreen.groundTraffickingEndScreen, "DTRSHRD_MPASS", "DTRSHRD_GRT")
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_TIME_M_S, "DTRSHRD_TIME1", "", FLOOR(fMissionTime), 0, ESCM_NO_MARK, FALSE)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_DOLLAR_VALUE, "DTRSHRD_MONEY", "", 5000, 0, ESCM_NO_MARK, FALSE)
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(groundEndScreen.groundTraffickingEndScreen, ESEF_RAW_STRING, "DTRSHRD_WEAP", sWeapon, 0, 0, ESCM_NO_MARK, FALSE)
ENDIF
// currentMissionStage = STAGE_ENDING_CUTSCENE
TRIGGER_MUSIC_EVENT("OJDG_COMPLETE")
PRINTLN("STARTING MUSIC - OJDG_COMPLETE")
DEBUG_PRINT("GOING TO STATE - STAGE_ENDING_CUTSCENE_RUN")
currentMissionStage = STAGE_ENDING_CUTSCENE_RUN
ELSE
IF IS_ENTITY_AT_COORD(myVehicle, myLocData.endData[0].vDrugPickup, <<5,5,LOCATE_SIZE_HEIGHT>>, bDrawCorona)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
IF NOT bPrintedLoseCopsAtEnd
PRINT_NOW("DTRSHRD_01", DEFAULT_GOD_TEXT_TIME, -1)
bPrintedLoseCopsAtEnd = TRUE
ENDIF
ELSE
IF bInActiveFight
AND NOT bPrintedLoseAmbushersAtEnd
PRINT_NOW("DTRSHRD_06", DEFAULT_GOD_TEXT_TIME, -1)
bPrintedLoseAmbushersAtEnd = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_ENDING_CUTSCENE_RUN
IF DOES_BLIP_EXIST(myLocationBlip[0])
REMOVE_BLIP(myLocationBlip[0])
PRINTLN("REMOVING myLocationBlip[0] - STAGE_ENDING_CUTSCENE_RUN")
ENDIF
IF NOT bPlayMusic
PLAY_MISSION_COMPLETE_AUDIO("TREVOR_SMALL_01")
bPlayMusic = TRUE
ENDIF
IF ENDSCREEN_PREPARE(groundEndScreen.groundTraffickingEndScreen)
AND IS_MISSION_COMPLETE_READY_FOR_UI()
INIT_SIMPLE_USE_CONTEXT(cucEndScreen, TRUE, FALSE, FALSE, TRUE)
ADD_SIMPLE_USE_CONTEXT_INPUT(cucEndScreen, "DTRSHRD_CONT", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
SETTIMERA(0)
CLEAR_PRINTS()
CLEAR_HELP()
KILL_ANY_CONVERSATION()
DEBUG_PRINT("GOING TO STATE - STAGE_ENDING_CUTSCENE")
currentMissionStage = STAGE_ENDING_CUTSCENE
ENDIF
BREAK
CASE STAGE_ENDING_CUTSCENE
// IF DO_CUTSCENE_CUSTOM_GROUND(fpEndingCutscene01)
IF TIMERA() > 7000 AND NOT bSkippedEndingScreen
UPDATE_SIMPLE_USE_CONTEXT(cucEndScreen)
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT)
OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // B*2276517 - Player can now press esc to close endscreen, if player control is on during endscreen
PRINTLN("bSkippedEndingScreen = TRUE")
bSkippedEndingScreen = TRUE
ENDIF
ENDIF
bDoneRenderingEndScreen = RENDER_ENDSCREEN(groundEndScreen.groundTraffickingEndScreen, FALSE)
IF bSkippedEndingScreen OR TIMERA() > 12000
//Call transition out
ENDSCREEN_START_TRANSITION_OUT(groundEndScreen.groundTraffickingEndScreen)
//Wait until endscreen is done rendering
IF bDoneRenderingEndScreen
ENDSCREEN_SHUTDOWN(groundEndScreen.groundTraffickingEndScreen)
MISSION_PASSED()
bPassed = TRUE
//Mission Complete
DELETE_CUTSCENE_CARGO()
PRINTLN("GROUND RANK = ", g_savedGlobals.sTraffickingData.iGroundRank)
DEBUG_PRINT("GOING TO STATE - STAGE_DRIVE_OFF")
currentMissionStage = STAGE_DRIVE_OFF
ENDIF
ENDIF
BREAK
CASE STAGE_DRIVE_OFF
ENDSCREEN_SHUTDOWN(groundEndScreen.groundTraffickingEndScreen)
DEBUG_PRINT("INSIDE STATE - STAGE_DRIVE_OFF")
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC TELEPORT_PLAYER()
WHILE NOT FADE_DOWN()
WAIT(0)
ENDWHILE
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
LOAD_SCENE(myLocData.vPlayerStart)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(), myLocData.vPlayerStart)
SET_ENTITY_HEADING(PLAYER_PED_ID(), myLocData.fPlayerRot)
ENDIF
WAIT(500)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
WHILE NOT FADE_UP()
WAIT(0)
ENDWHILE
ENDPROC
FUNC BOOL LOAD_SMUGGLERS_MODELS()
INT idx
PRINTLN("INSIDE - LOAD_SMUGGLERS_MODELS")
REPEAT myLocData.iNumSmugVehicles idx
REQUEST_MODEL(myLocData.mnSmugglersVehicles[idx])
DEBUG_PRINT("REQUESTING SMUGGLERS VEHICLES")
ENDREPEAT
REPEAT MAX_NUM_SMUGGLERS_RECORDINGS idx
IF myLocData.dropData[0].smugglersRecordings[idx].recordingType = RECORDING_TYPE_CAR
IF myLocData.dropData[0].smugglersRecordings[idx].bConfigured
REQUEST_VEHICLE_RECORDING(myLocData.dropData[0].smugglersRecordings[idx].carrecNum, myLocData.dropData[0].smugglersRecordings[idx].carrecName)
DEBUG_PRINT("REQUESTING VEHICLE RECORDING FOR SMUGGLERS")
DEBUG_PRINT("CarRecInfo:")
DEBUG_PRINT(myLocData.dropData[0].smugglersRecordings[idx].carrecName)
PRINTLN("P-SKIP: REQUEST")
PRINTSTRING(" num: ")
PRINTINT(myLocData.dropData[0].smugglersRecordings[idx].carrecNum)
PRINTNL()
ELIF myLocData.dropData[0].smugglersRecordings[idx].bWaypointConfigured
REQUEST_WAYPOINT_RECORDING(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
PRINTSTRING("REQUESTING WAYPOINT RECORDING: ")
PRINTSTRING(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
PRINTNL()
ENDIF
ENDIF
ENDREPEAT
REPEAT MAX_NUM_SMUGGLERS_RECORDINGS idx
IF myLocData.dropData[0].smugglersRecordings[idx].recordingType = RECORDING_TYPE_CAR
IF myLocData.dropData[0].smugglersRecordings[idx].bWaypointConfigured
IF NOT GET_IS_WAYPOINT_RECORDING_LOADED(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
DEBUG_PRINT("DRUG TRAFFICKING GROUND: trying to load Smugglers WAYPOINT recordings")
PRINTLN("P-SKIP: WAITING ON SMUGGLERS")
RETURN FALSE
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN TRUE
ENDFUNC
PROC PRINT_GANG_TYPES()
IF bUsingMexicans
PRINTLN("bUsingMexicans IS TRUE")
ELSE
PRINTLN("bUsingMexicans IS FALSE")
ENDIF
IF bUsingMarabunta
PRINTLN("bUsingMarabunta IS TRUE")
ELSE
PRINTLN("bUsingMarabunta IS FALSE")
ENDIF
IF bUsingHillbillies
PRINTLN("bUsingHillbillies IS TRUE")
ELSE
PRINTLN("bUsingHillbillies IS FALSE")
ENDIF
ENDPROC
// initialise mission
PROC INIT_MISSION()
INT idx
IF myLocData.dropData[0].gangType = GANG_MEXICANS
bUsingMexicans = TRUE
bUsingMarabunta = FALSE
bUsingHillbillies = FALSE
ELIF myLocData.dropData[0].gangType = GANG_MARABUNTA
bUsingMexicans = FALSE
bUsingMarabunta = TRUE
bUsingHillbillies = FALSE
ELIF myLocData.dropData[0].gangType = GANG_HILLBILLIES
bUsingMexicans = FALSE
bUsingMarabunta = FALSE
bUsingHillbillies = TRUE
ENDIF
PRINT_GANG_TYPES()
iRandInt = GET_RANDOM_INT_IN_RANGE() % 3
PRINTLN("iRandInt = ", iRandInt)
// INIT_ZVOLUME_WIDGETS()
// -----------------------------------------------Used in all missions-----------------------------------------------
REQUEST_MODEL(myLocData.mnLoadedCargo)
DEBUG_PRINT("REQUESTING LOADED CARGO")
REQUEST_MODEL(REBEL)
DEBUG_PRINT("REQUESTING REBEL")
REQUEST_MODEL(DUNE)
DEBUG_PRINT("REQUESTING DUNE")
IF NOT bDoHijack
REQUEST_MODEL(Prop_Flare_01b)
DEBUG_PRINT("REQUESTING - Prop_Flare_01b")
ENDIF
REQUEST_PTFX_ASSET()
IF GET_VARIATION_TYPE() = TYPE_2
IF bUsingMexicans
myLocData.mnGenericBadGuy = G_M_M_MEXBOSS_01
REQUEST_MODEL(myLocData.mnGenericBadGuy)
DEBUG_PRINT("REQUESTING MEXICAN BAD GUY - G_M_M_MEXBOSS_01")
ELIF bUsingMarabunta
myLocData.mnGenericBadGuy = G_M_Y_SalvaGoon_03
REQUEST_MODEL(myLocData.mnGenericBadGuy)
DEBUG_PRINT("REQUESTING MARABUNTA BAD GUY - G_M_Y_SalvaGoon_03")
ELIF bUsingHillbillies
myLocData.mnGenericBadGuy = A_M_M_HillBilly_01
REQUEST_MODEL(myLocData.mnGenericBadGuy)
DEBUG_PRINT("REQUESTING HILLBILLY BAD GUY - A_M_M_HillBilly_01")
ENDIF
ENDIF
REQUEST_ADDITIONAL_TEXT("DTRFKGR", ODDJOB_TEXT_SLOT) // load text for the mission
REQUEST_ADDITIONAL_TEXT("DTRSHRD", MINIGAME_TEXT_SLOT) // load text for the mission
// ------------------------------------------------------------------------------------------------------------------
IF bDoSmugglers
REPEAT myLocData.iNumSmugVehicles idx
REQUEST_MODEL(myLocData.mnSmugglersVehicles[idx])
DEBUG_PRINT("REQUESTING SMUGGLERS VEHICLES")
ENDREPEAT
REPEAT MAX_NUM_SMUGGLERS_RECORDINGS idx
IF myLocData.dropData[0].smugglersRecordings[idx].recordingType = RECORDING_TYPE_CAR
IF myLocData.dropData[0].smugglersRecordings[idx].bConfigured
REQUEST_VEHICLE_RECORDING(myLocData.dropData[0].smugglersRecordings[idx].carrecNum, myLocData.dropData[0].smugglersRecordings[idx].carrecName)
DEBUG_PRINT("REQUESTING VEHICLE RECORDING FOR SMUGGLERS")
DEBUG_PRINT("CarRecInfo:")
DEBUG_PRINT(myLocData.dropData[0].smugglersRecordings[idx].carrecName)
PRINTSTRING(" num: ")
PRINTINT(myLocData.dropData[0].smugglersRecordings[idx].carrecNum)
PRINTNL()
ELIF myLocData.dropData[0].smugglersRecordings[idx].bWaypointConfigured
REQUEST_WAYPOINT_RECORDING(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
PRINTSTRING("REQUESTING WAYPOINT RECORDING: ")
PRINTSTRING(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
PRINTNL()
ENDIF
ENDIF
ENDREPEAT
ENDIF
IF bDoAmbush
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured
IF myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_CAR
REQUEST_MODEL(myLocData.dropData[0].carRecData[idx].carrecVehicle)
DEBUG_PRINT("REQUESTING CAR RECORDING VEHICLE")
REQUEST_VEHICLE_RECORDING(myLocData.dropData[0].carRecData[idx].carrecNum, myLocData.dropData[0].carRecData[idx].carrecName)
PRINTLN("CAR RECORDING NAME: ", myLocData.dropData[0].carRecData[idx].carrecName)
PRINTLN("CAR RECORDING NUMBER: ", myLocData.dropData[0].carRecData[idx].carrecNum)
ENDIF
ENDIF
ENDREPEAT
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured
IF myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_PLANE
REQUEST_MODEL(myLocData.dropData[0].carRecData[idx].carrecVehicle)
REQUEST_VEHICLE_RECORDING(myLocData.dropData[0].carRecData[idx].carrecNum, myLocData.dropData[0].carRecData[idx].carrecName)
PRINTLN("CAR RECORDING NAME: ", myLocData.dropData[0].carRecData[idx].carrecName)
PRINTLN("CAR RECORDING NUMBER: ", myLocData.dropData[0].carRecData[idx].carrecNum)
ENDIF
ENDIF
ENDREPEAT
ENDIF
//------------------------------------------------CHECK LOADING STATUS------------------------------------------------
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(ODDJOB_TEXT_SLOT)
OR NOT HAS_ADDITIONAL_TEXT_LOADED(MINIGAME_TEXT_SLOT)
WAIT(0)
DEBUG_PRINT("WAITING ON TEXT SLOTS")
ENDWHILE
WHILE NOT HAS_MODEL_LOADED(Prop_Flare_01b)
WAIT(0)
DEBUG_PRINT("WAITING ON Prop_Flare_01b")
ENDWHILE
WHILE NOT HAS_MODEL_LOADED(REBEL)
OR NOT HAS_MODEL_LOADED(DUNE)
WAIT(0)
DEBUG_PRINT("WAITING ON REBEL AND DUNE")
ENDWHILE
IF bDoSmugglers
REPEAT MAX_NUM_SMUGGLERS_RECORDINGS idx
IF myLocData.dropData[0].smugglersRecordings[idx].recordingType = RECORDING_TYPE_CAR
IF myLocData.dropData[0].smugglersRecordings[idx].bConfigured
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(myLocData.dropData[0].smugglersRecordings[idx].carrecNum, myLocData.dropData[0].smugglersRecordings[idx].carrecName)
DEBUG_PRINT("DRUG TRAFFICKING GROUND: trying to load Smugglers recordings")
WAIT(0)
ENDWHILE
ELIF myLocData.dropData[0].smugglersRecordings[idx].bWaypointConfigured
WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED(myLocData.dropData[0].smugglersRecordings[idx].carrecWaypointName)
DEBUG_PRINT("DRUG TRAFFICKING GROUND: trying to load Smugglers WAYPOINT recordings")
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDREPEAT
ENDIF
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(ODDJOB_TEXT_SLOT)
OR NOT HAS_MODEL_LOADED(myLocData.mnLoadedCargo)
DEBUG_PRINT("DRUG TRAFFICKING GROUND: trying to load string table, and cargo model")
WAIT(0)
ENDWHILE
bStreamed = TRUE
IF bDoAmbush
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured
IF myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_CAR
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(myLocData.dropData[0].carRecData[idx].carrecNum, myLocData.dropData[0].carRecData[idx].carrecName)
OR NOT HAS_MODEL_LOADED(myLocData.dropData[0].carRecData[idx].carrecVehicle)
DEBUG_PRINT("DRUG TRAFFICKING GROUND: trying to load ambush models")
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDREPEAT
ENDIF
WHILE NOT HAS_PTFX_ASSET_LOADED()
WAIT(0)
DEBUG_PRINT("WAITING ON PARTICLE EFFECTS")
ENDWHILE
IF NOT bStreamed
DEBUG_PRINT("Waiting for vehicle recording to be loaded")
WAIT(0)
ENDIF
SET_VEHICLE_MODEL_IS_SUPPRESSED(DLOADER, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(DUNE, TRUE)
ENDPROC
// debug builds only
#IF IS_DEBUG_BUILD
BLIP_INDEX blipLocations[20]
VECTOR vCenterPositions[20]
PROC INIT_BLIP_LOCATIONS()
vCenterPositions[0] = << 2709.4263, 4148.5249, 42.7539 >>
vCenterPositions[1] = << 1352.0400, 4370.2515, 43.3564 >>
vCenterPositions[2] = << 2221.6963, 5579.6660, 52.8354 >>
vCenterPositions[3] = << 2924.0862, 4638.2456, 47.5449 >>
vCenterPositions[4] = << 1954.2291, 3440.9077, 40.6718 >>
vCenterPositions[5] = << 1428.30, 3143.96, 40.387 >>
vCenterPositions[6] = << 2856.1038, 4488.6426, 47.2848 >>
vCenterPositions[7] = << 717.6153, 4176.4287, 39.7190 >>
vCenterPositions[8] = << 1761.8362, 3050.5618, 60.8981 >>
vCenterPositions[9] = << 2038.5756, 3224.4949, 43.8766 >>
vCenterPositions[10] = << 2623.6450, 3287.7129, 54.3001 >>
vCenterPositions[11] = << 1178.1967, 3271.2627, 38.2326 >>
vCenterPositions[12] = << 3702.8269, 4511.5928, 20.1186 >>
vCenterPositions[13] = << 2669.8481, 3546.6760, 50.5799 >>
vCenterPositions[14] = << 2346.9280, 3095.9612, 47.0212 >>
vCenterPositions[15] = << 1206.8820, 3599.0930, 33.0185 >>
vCenterPositions[16] = << 1178.1967, 3271.2627, 38.2326 >>
vCenterPositions[17] = << 2181.7673, 3367.6118, 44.4324 >>
vCenterPositions[18] = << 2685.8694, 2844.3059, 38.8406 >>
vCenterPositions[19] = << 1690.2025, 3166.5276, 44.8952 >>
ENDPROC
PROC DEBUG_BLIP_LOCATIONS
INT idx
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_B, KEYBOARD_MODIFIER_ALT, "")
INIT_BLIP_LOCATIONS()
REPEAT 20 idx
IF NOT DOES_BLIP_EXIST(blipLocations[idx])
blipLocations[idx] = ADD_BLIP_FOR_COORD(vCenterPositions[idx])
PRINTLN("ADDING BLIP FOR LOCATION INDEX: ", idx)
IF idx % 2 = 0
SET_BLIP_COLOUR(blipLocations[idx], BLIP_COLOUR_GREEN)
PRINTLN("SETTING INDEX: ", idx, " TO GREEN")
ENDIF
ELSE
REMOVE_BLIP(blipLocations[idx])
PRINTLN("REMOVING BLIP FOR LOCATION INDEX: ", idx)
ENDIF
ENDREPEAT
ENDIF
ENDPROC
PROC REMOVE_AMBUSHERS()
INT idx
REPEAT MAX_NUM_RECORDS idx
IF myLocData.dropData[0].carRecData[idx].bConfigured AND (myLocData.dropData[0].carRecData[idx].recordingType = RECORDING_TYPE_CAR)
IF DOES_ENTITY_EXIST(ambushArgs.ambushVehicles[idx])
DELETE_VEHICLE(ambushArgs.ambushVehicles[idx])
PRINTLN("DELETING AMBUSH VEHICLE INDEX: ", idx)
ENDIF
ENDIF
ENDREPEAT
REPEAT myLocData.iNumBadGuys idx
IF DOES_ENTITY_EXIST(badGuyPed[idx])
DELETE_PED(badGuyPed[idx])
PRINTLN("DELETING AMBUSH PED INDEX: ", idx)
ENDIF
ENDREPEAT
REPEAT MAX_NUMBER_AMBUSH_ATTACKERS idx
IF DOES_ENTITY_EXIST(ambushArgs.pedAmbushAttackers[idx])
DELETE_PED(ambushArgs.pedAmbushAttackers[idx])
PRINTLN("DELETING AMBUSH ATTACKER PED INDEX: ", idx)
ENDIF
ENDREPEAT
ENDPROC
PROC REMOVE_SMUGGLERS()
INT idx
// Remove blips
REPEAT COUNT_OF(smugArgs.blipSmugglersPeds) idx
IF DOES_BLIP_EXIST(smugArgs.blipSmugglersPeds[idx])
REMOVE_BLIP(smugArgs.blipSmugglersPeds[idx])
DEBUG_PRINT("REMOVING BLIP blipSmugglersPeds")
ENDIF
ENDREPEAT
REPEAT COUNT_OF(smugArgs.blipSmugglersCars) idx
IF DOES_BLIP_EXIST(smugArgs.blipSmugglersCars[idx])
REMOVE_BLIP(smugArgs.blipSmugglersCars[idx])
DEBUG_PRINT("REMOVING blipSmugglersCars")
ENDIF
ENDREPEAT
REPEAT myLocData.iNumSmugVehicles idx
IF DOES_ENTITY_EXIST(smugArgs.smugglersVehicles[idx])
DELETE_VEHICLE(smugArgs.smugglersVehicles[idx])
PRINTLN("DELETING SMUGGLER VEHICLE INDEX: ", idx)
ENDIF
ENDREPEAT
REPEAT (myLocData.iNumSmugPedsPerVehicle * myLocData.iNumSmugVehicles) idx
IF DOES_ENTITY_EXIST(smugArgs.smugglersPeds[idx])
DELETE_PED(smugArgs.smugglersPeds[idx])
PRINTLN("DELETING SMUGGLER PED INDEX: ", idx)
ENDIF
ENDREPEAT
IF DOES_ENTITY_EXIST(smugArgs.smugglersHeliVeh)
DELETE_VEHICLE(smugArgs.smugglersHeliVeh)
PRINTLN("DELETING SMUGGLER VEHICLE - HELICOPTER")
ENDIF
IF DOES_ENTITY_EXIST(smugArgs.smugglersHeliPed)
DELETE_PED(smugArgs.smugglersHeliPed)
PRINTLN("DELETING SMUGGLER PED - HELICOPTER PILOT")
ENDIF
ENDPROC
PROC REMOVE_CAR_CHASERS()
INT idx
REPEAT COUNT_OF(carChaserArgs.badGuyBlips) idx
IF DOES_BLIP_EXIST(carChaserArgs.badGuyBlips[idx])
REMOVE_BLIP(carChaserArgs.badGuyBlips[idx])
DEBUG_PRINT("REMOVING BLIP badGuyBlips")
ENDIF
ENDREPEAT
REPEAT COUNT_OF(carChaserArgs.blipCarChasers) idx
IF DOES_BLIP_EXIST(carChaserArgs.blipCarChasers[idx])
REMOVE_BLIP(carChaserArgs.blipCarChasers[idx])
DEBUG_PRINT("REMOVING blipCarChasers")
ENDIF
ENDREPEAT
IF DOES_ENTITY_EXIST(carChaserArgs.vehCarChasers[0])
DELETE_VEHICLE(carChaserArgs.vehCarChasers[0])
PRINTLN("REMOVE_CAR_CHASERS - DELETING VEHICLE - carChaserArgs.vehCarChasers[0]")
ENDIF
IF DOES_ENTITY_EXIST(carChaserArgs.pedCarChasers[0])
DELETE_PED(carChaserArgs.pedCarChasers[0])
PRINTLN("DELETING CAR CHASER PED - carChaserArgs.pedCarChasers[0]")
ENDIF
IF DOES_ENTITY_EXIST(carChaserArgs.pedCarChasers[1])
DELETE_PED(carChaserArgs.pedCarChasers[1])
PRINTLN("DELETING CAR CHASER PED - carChaserArgs.pedCarChasers[1]")
ENDIF
ENDPROC
PROC REMOVE_PLANE()
// Type 1 plane
IF DOES_ENTITY_EXIST(planeDropArgs.planeDropVehicles[0])
DELETE_VEHICLE(planeDropArgs.planeDropVehicles[0])
PRINTLN("DELETING PLANE - planeDropArgs.planeDropVehicles[0]")
ENDIF
IF DOES_ENTITY_EXIST(tempPed)
DELETE_PED(tempPed)
PRINTLN("DELETING PED - tempPed]")
ENDIF
// Type 2 plane
IF DOES_ENTITY_EXIST(smugArgs.vehSmugglerPlane)
DELETE_VEHICLE(smugArgs.vehSmugglerPlane)
PRINTLN("DELETING PLANE - smugArgs.vehSmugglerPlane")
ENDIF
IF DOES_ENTITY_EXIST(pedTempPilot)
DELETE_PED(pedTempPilot)
PRINTLN("DELETING PED - pedTempPilot")
ENDIF
ENDPROC
// debug skips
PROC DO_DEBUG_SKIPS()
// mission pass S
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
TRIGGER_MUSIC_EVENT("OJDG_STOP")
PRINTLN("STARTING MUSIC - OJDG_STOP - SKIP")
bSkippedMission = TRUE
MISSION_PASSED()
ENDIF
// mission failed F
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
failReason = FAIL_TRANSPORT_DESTROYED
MISSION_FAILED()
ENDIF
// skip stage J
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
planeDropArgs.bCargoHasLanded = TRUE
// skip forward a stage
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(), vCurDestObjective[0])
ENDIF
ENDIF
// previous stage P
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
// skip back a stage
PRINTLN("P-SKIP ACTIVATED")
IF currentMissionStage = STAGE_DESTINATION
DO_SCREEN_FADE_OUT(500)
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
pSkipping = TRUE
IF DOES_BLIP_EXIST(myLocationBlip[0])
REMOVE_BLIP(myLocationBlip[0])
PRINTLN("REMOVING BLIP - myLocationBlip[0] VIA P-SKIP")
ENDIF
REMOVE_RELATIONSHIP_GROUP(staticChaseArgs.relStaticPoliceChasers)
REMOVE_RELATIONSHIP_GROUP(carChaserArgs.relCarChaserEnemies)
REMOVE_RELATIONSHIP_GROUP(smugArgs.relSmugglersEnemies)
REMOVE_AMBUSHERS()
REMOVE_SMUGGLERS()
REMOVE_CAR_CHASERS()
REMOVE_PLANE()
IF GET_VARIATION_TYPE() = TYPE_2
PRINTLN("P-SKIP, ATTEMPTING TO LOAD MODELS")
bDoSmugglers = TRUE
WHILE NOT LOAD_SMUGGLERS_MODELS()
PRINTLN("WAITING ON SMUGGLERS MODELS")
WAIT(0)
ENDWHILE
ELSE
PRINTLN("VARIATION NOT TYPE_2")
ENDIF
bGenPrinted = FALSE
bOkayToBlipEnemies = FALSE
bPrintObjectivesAndHelp = FALSE
bRemoveFlare = FALSE
bTriggerAmbushNow = FALSE
bTriggerAmbushLate = FALSE
planeDropArgs.bCargoHasLanded = FALSE
bSmugglersCreated = FALSE
smugArgs.bGoToDestination = FALSE
bTimerStarted = FALSE
planeDropState = PLANE_DROP_INIT
smugglerPlaneRecordingStages = SMUGGLER_PLANE_STATE_INIT
smugglersState = SMUGGLERS_STATE_TO_PICKUP
ambushState = AMBUSH_INIT
carChaseProgress = CAR_CHASE_INIT
IF IS_TIMER_STARTED(stMissionTimer)
RESTART_TIMER_NOW(stMissionTimer)
ENDIF
SETTIMERA(0)
SET_ENTITY_COORDS(myVehicle, <<2006.7253, 4738.1470, 40.2239>>)
SET_ENTITY_HEADING(myVehicle, 298.2369)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
PRINTLN("GOING TO STATE - STAGE_GET_CAR_B")
currentMissionStage = STAGE_GET_CAR_B
ENDIF
ENDIF
ENDPROC
#ENDIF
PROC CONFIGURE_OVERRIDE_DATA(ARGS myArgs, BOOL bSetEnd = TRUE)
INT idx
POPULATE_DRUG_LOCATION(myLocData.dropData[0], myArgs.dropLocations[0])
IF bSetEnd
POPULATE_DRUG_LOCATION(myLocData.endData[0], myArgs.endLocation[0])
POPULATE_DRUG_LOCATION(myLocData.endData[1], myArgs.endLocation[1])
ENDIF
myLocData.fPickupTime = myArgs.fTimeLimit
myLocData.fSlowTime = myArgs.fSTime
myLocData.fTriggerNowTime = myArgs.fTNowTime
IF myArgs.iNumStaticCars > 0
myLocData.iNumCarChaserCars = myArgs.iNumStaticCars
myLocData.iNumPedsPerCar = myArgs.iNumStaticPedsPerCar
DEBUG_PRINT("OVERRIDING CAR CHASER DATA")
ENDIF
IF myArgs.mnPedChasers[0] <> DUMMY_MODEL_FOR_SCRIPT
REPEAT myLocData.iNumPedsPerCar idx
myLocData.mnPedChasers[idx] = myArgs.mnPedChasers[idx]
DEBUG_PRINT("REPLACING PED MODELS")
ENDREPEAT
ENDIF
IF myArgs.mnCarChasers[0] <> DUMMY_MODEL_FOR_SCRIPT
REPEAT myLocData.iNumCarChaserCars idx
myLocData.mnCarChasers[idx] = myArgs.mnCarChasers[idx]
DEBUG_PRINT("REPLACING VEHICLE MODELS")
ENDREPEAT
ENDIF
VALIDATE_VARIATIONS(myLocData, bDoDelicate, bTimedPickup, bDoAmbush, bDoCarChase, bDoPlane, bDoSmugglers,bDoFlareCutscene, bDoPoliceChase, bDoContactCutscene, bDoHijack, myArgs)
CONFIGURE_DIFFICULTY_SETTINGS(myLocData, myArgs)
ENDPROC
PROC HANDLE_LAW_DIALOGUE()
IF NOT bPlayedWantedDialogue
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, NULL, "TREVOR")
CREATE_CONVERSATION(MyLocalPedStruct, "ARMSAUD", "ARMS_WANTED", CONV_PRIORITY_VERY_HIGH)
PRINTLN("bPlayedWantedDialogue = TRUE")
bPlayedWantedDialogue = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// main script
SCRIPT(ARGS myArgs)
DEBUG_PRINT("Traffick Ground Start")
SET_MISSION_FLAG(TRUE)
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY)
TRIGGER_MUSIC_EVENT("OJDG_STOP")
PRINTLN("STARTING MUSIC - OJDG_STOP - FAIL")
DEBUG_PRINT("FORCE CLEANUP HAS OCCURRED: setting us up for a replay!!!")
SET_FORCE_CLEANUP_FAIL_REASON()
IF NOT IS_REPLAY_BEING_PROCESSED()
SET_BITMASK_AS_ENUM(sLauncherData.iLauncherFlags, LAUNCHED_SCRIPT_GroundTraffickingFailed)
Setup_Minigame_Replay(GET_THIS_SCRIPT_NAME())
ENDIF
MISSION_CLEANUP() // cleanup and terminate thread (must be done in same frame)
ENDIF
// #IF IS_DEBUG_BUILD
// AddWidgetsNew(myData)
// #ENDIF
//LAUNCHER Start
IF NOT myArgs.bSpawnVehicle
//Fill in myArgs
CONFIGURE_GROUND_PROGRESSION(g_savedGlobals.sTraffickingData.iGroundRank, myArgs)
//Fill in Data
POPULATE_DATA(myLocData, ENUM_TO_INT(myArgs.myLocation))
//Transfer values from myArgs into myData
CONFIGURE_OVERRIDE_DATA(myArgs, TRUE)
DEBUG_PRINT("LAUNCHING VIA PROGRESSION")
IF NOT IS_PED_INJURED(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
myVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
ENDIF
ENDIF
ELSE
//Fill in Data
POPULATE_DATA(myLocData, ENUM_TO_INT(myArgs.myLocation))
DEBUG_PRINT("LAUNCHING VIA DEBUG SCRIPT")
//Transfer values from myArgs into myData
CONFIGURE_OVERRIDE_DATA(myArgs, FALSE)
ENDIF
IF NOT DOES_ENTITY_EXIST(myVehicle)
TELEPORT_PLAYER()
PRINTSTRING("Teleport Player")
ENDIF
// CREATE_OFFSET_WIDGETS_NEW()
myArgsCopy = myArgs
INIT_MISSION()
// General modifications
CLEAR_AREA_OF_VEHICLES(<< 2149.3284, 4805.9575, 40.2094 >>, 100, FALSE, TRUE)
CLEAR_AREA(<<2158.5933, 4787.7354, 40.0958>>, 5.0, TRUE) // Trying to remove guy sitting on chair behind start position.
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE)
SET_CREATE_RANDOM_COPS(FALSE)
sbi01 = ADD_SCENARIO_BLOCKING_AREA(<< 2784.2268, 4507.9756, 45.9679 >> - <<10,10,10>>, << 2784.2268, 4507.9756, 45.9679 >> + <<10,10,10>>)
sbi02 = ADD_SCENARIO_BLOCKING_AREA(<< 2890.9604, 4198.8589, 49.1813 >> - <<10,10,10>>, << 2890.9604, 4198.8589, 49.1813 >> + <<10,10,10>>)
sbi01 = ADD_SCENARIO_BLOCKING_AREA(<<2030.6633, 4760.4531, 40.0605>> - <<800,800,800>>, <<2030.6633, 4760.4531, 40.0605>> + <<800,800,800>>) // Area around airfield
sbi04 = ADD_SCENARIO_BLOCKING_AREA(myLocData.dropData[0].vCenterPos - <<50,50,50>>, myLocData.dropData[0].vCenterPos + <<50,50,50>>) // Area around drop sites
DISABLE_CELLPHONE(TRUE)
SET_CELLPHONE_PROFILE_TO_NORMAL()
// IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// SET_ENTITY_HEALTH(PLAYER_PED_ID(), GET_PED_MAX_HEALTH(PLAYER_PED_ID()))
// PRINTLN("SETTING PLAYER TO HAVE MAX HEALTH")
// ENDIF
// Cutscene
cutArgs.cutsceneState = CUTSCENE_STATE_START
// fpEndingCutscene01 = &ENDING_CUTSCENE_NEW
IF bDoSmugglers
fpSmugglersEnding = &SMUGGLERS_ENDING_CUTSCENE
DEBUG_PRINT("SETTING WANTED LEVEL MULTIPLIER TO ZERO IN SMUGGLERS MODE")
SET_WANTED_LEVEL_MULTIPLIER(0.0)
SET_ROADS_IN_ANGLED_AREA(<<2164.037842,4825.626953,35.613750>>, <<1899.277832,4697.752441,49.086414>>, 100.000000, FALSE, FALSE)
// SET_ROADS_IN_ANGLED_AREA(<< 2499.300, 3456.401, -49.795>>, << 2424.300, 3456.401, 49.795>>, 125, FALSE, FALSE)
// SET_ROADS_IN_ANGLED_AREA(<< 1751.693, 4562.989, -57.869 >>, << 769.406, 4375.608, 57.869 >>, 385, FALSE, FALSE)
SET_ROADS_IN_ANGLED_AREA(<<1757.214600,4570.540039,30.477287>>, <<1385.558228,4495.363770,62.740479>>, 100.000000, FALSE, FALSE) // Dirt road leading to location in ground 2
ENDIF
// Way to check if we're in repeatable mode.
IF myArgs.fTimeLimit = 1
bInRepeatableMode = TRUE
DEBUG_MESSAGE("bInRepeatableMode = TRUE")
ENDIF
DEBUG_PRINT_MODES(bTimedPickup, bDoCarChase, bDoDelicate, bDoAmbush, bDoPlane, bDoSmugglers, bDoFlareCutscene,
bDoPoliceChase, bDoContactCutscene, bDoHijack)
DISPLAY_RADAR(TRUE)
// IF GET_RANDOM_BOOL()
// ambushArgs.bCreateGuysOnFoot = TRUE
// PRINTLN("ambushArgs.bCreateGuysOnFoot = TRUE")
// ELSE
// ambushArgs.bCreateGuysOnFoot = FALSE
// PRINTLN("ambushArgs.bCreateGuysOnFoot = FALSE")
// ENDIF
ambushArgs.bCreateGuysOnFoot = TRUE
// Tests to run heli chase
IF g_savedGlobals.sTraffickingData.iGroundRank >= 5
IF GET_RANDOM_BOOL()
bRunHeliChase = TRUE
PRINTLN("bRunHeliChase = TRUE")
ELSE
bRunHeliChase = FALSE
PRINTLN("bRunHeliChase = FALSE")
ENDIF
ENDIF
IF g_savedGlobals.sTraffickingData.iGroundRank = 4
bRunHeliChase = TRUE
PRINTLN("OVERRIDE bRunHeliChase = TRUE")
ENDIF
// Cutscene
cutArgs.cutsceneState = CUTSCENE_STATE_START
// fpEndingCutscene01 = &ENDING_CUTSCENE_NEW
PRINTLN("GROUND TRAFFICKING LEVEL = ", g_savedGlobals.sTraffickingData.iGroundRank)
#IF IS_DEBUG_BUILD
BEAT_ADD_WIDGETS()
#ENDIF
IF IS_REPLAY_IN_PROGRESS()
g_replay.iReplayInt[0] ++ //used to strictly to track number of retries specific to trafficking
iStageToUse = Get_Replay_Mid_Mission_Stage()
PRINTLN("START - REPLAY IS IN PROGRESS, USING STAGE = ", iStageToUse)
IF iStageToUse = 0
START_REPLAY_SETUP(vSpawnPosition, fSpawnHeading)
PRINTLN("CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse)
ENDIF
ELSE
g_replay.iReplayInt[0] = 0 //reset this int since we are not replaying the mission
ENDIF
SET_SCENARIO_GROUP_ENABLED("PRISON_TOWERS", TRUE)
PRINTLN("ENABLING PRISON TOWERS")
vCamTransitionOffsetPosition = vCamTransitionOffsetPosition
vCamTransitionOffsetRotation = vCamTransitionOffsetRotation
REMOVE_HELP_FROM_FLOW_QUEUE("MG_TRAF_AVAIL")
WHILE TRUE
// main loop
WAIT(0)
// UPDATE_ZVOLUME_WIDGETS()
IF bInAmbush OR bWanted OR bIsChaseActive OR bIsSmugglersActive OR hijackArgs.bHijackActive
bInActiveFight = TRUE
ELSE
bInActiveFight = FALSE
ENDIF
IF bTimedPickup AND bDisplayTimer
UPDATE_TIMER_NEW(startTime, myLocData.fPickupTime, myLocData.fSlowTime, bTimerStarted, bTimeExpired,
bGiveTimeWarning, "ARMS_GR08", MyLocalPedStruct)
ENDIF
IF currentMissionStage > STAGE_DO_TAXI_CUTSCENE AND currentMissionStage < STAGE_ENDING_CUTSCENE
IF bDrugsLoaded
UPDATE_MISSION_CAR(myVehicle, myVehicleBlip, myEntities, myLocationBlip, vCurDestObjective, outOfVehicleTime,
bOutOfVehicle, bInActiveFight, bIsCutsceneActive, bDoPlane, bPrintObjAgain, FALSE, TRUE)
ENDIF
ENDIF
IF NOT bDrugsLoaded
IF IS_PLAYER_IN_OTHER_VEHICLE(myVehicle)
IF NOT bPrintHelpForOtherVehicle
CLEAR_HELP(TRUE)
PRINT_HELP("DTRFKGR_HELP_17")
bPrintHelpForOtherVehicle = TRUE
PRINTLN("bPrintHelpForOtherVehicle = TRUE")
ENDIF
ENDIF
ENDIF
UPDATE_PRINT_DELAY(printTimer, 7, TRUE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// run appropriate stage
SET_MINIMAP_COMPONENT(MINIMAP_COMPONENT_RUNWAY_3, FALSE)
IF UPDATE()
MISSION_CLEANUP()
ENDIF
ENDIF
IF currentMissionStage > STAGE_PICKUP
AND NOT bIsSmugglersActive
AND NOT bIsChaseActive
AND NOT bAmbushActive
UPDATE_LAW(myVehicle, bWanted, myEntities, myLocationBlip, vCurDestObjective, sLastObjective, fCurDist,
outOfVehicleTime, myVehicleBlip, bOutOfVehicle, TRUE, FALSE, TRUE, TRUE)
ENDIF
HANDLE_LAW_DIALOGUE()
IF currentMissionStage > STAGE_GET_CAR_B
IF UPDATE_FAIL_CONDITIONS()
MISSION_FAILED()
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
DO_DEBUG_SKIPS()
DEBUG_BLIP_LOCATIONS()
IF DOES_ENTITY_EXIST(drugCargoArgs.oLoadedCargo) AND NOT IS_ENTITY_DEAD(drugCargoArgs.oLoadedCargo)
IF NOT IS_ENTITY_DEAD(myVehicle)
BEAT_UPDATE_WIDGETS_FOR_OBJECT(drugCargoArgs.oLoadedCargo, <<0,0,0>>, 0, myVehicle)
ENDIF
ENDIF
#ENDIF
ENDWHILE
ENDSCRIPT