Files
gtav-src/script/dev_ng/singleplayer/scripts/heists/heistJewelry/jewelry_setup1.sc
T
2025-09-29 00:52:08 +02:00

12196 lines
430 KiB
Python
Executable File

//
//
// Author: Ben Barclay Date: 20/05/2010
// Prev:
//
//
//
// Jewellery Heist - Setup 1
//
// The crew check out the jewellery store
//
// * Michael and the contact drive to the jewellery store
// * They scope out the outside- noting the air vents on the roof
// * The go inside and talk with an employee
// * She reveals where the best jewellery and security are
// * Possibly take pictures of inside the store
// * Possibly cut back to Franklin collecting the pictures
//
// Gameplay elements introduced: Talking, taking subterfuge pictures
// Vehicle Introduced:
// Location: Jewellery store
// Notes:
//
//
//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
// COMMAND HEADERS
using "rage_builtins.sch"
using "globals.sch"
using "script_heist.sch"
using "commands_misc.sch"
using "commands_pad.sch"
using "commands_script.sch"
using "commands_player.sch"
using "commands_streaming.sch"
using "commands_vehicle.sch"
using "commands_camera.sch"
using "commands_path.sch"
using "commands_fire.sch"
using "commands_graphics.sch"
using "commands_object.sch"
using "script_player.sch"
using "script_debug.sch"
using "streamed_scripts.sch"
using "selector_public.sch"
using "model_enums.sch"
using "script_misc.sch"
using "dialogue_public.sch"
USING "flow_public_core_override.sch"
using "script_blips.sch"
using "commands_cutscene.sch"
using "script_buttons.sch"
using "replay_public.sch"
using "player_ped_public.sch"
using "script_ped.sch"
using "cutscene_public.sch"
using "seamless_cuts.sch"
USING "CompletionPercentage_public.sch"
USING "taxi_functions.sch"
USING "flow_public_GAME.sch"
USING "clearMissionArea.sch"
USING "mission_stat_public.sch"
//USING "timelapse.sch"
USING "locates_public.sch"
USING "overlay_effects.sch"
USING "commands_recording.sch"
USING "commands_audio.sch"
///// DEBUG VARIABLES
#IF IS_DEBUG_BUILD
USING "select_mission_stage.sch"
CONST_INT MAX_SKIP_MENU_LENGTH 5 // number of stages in mission + 2 (for menu )
INT iReturnStage // mission stage to jump to
//FLOAT debugX = 0
//FLOAT debugY = 0
//FLOAT debugZ = 0
BOOL jSkipReady = FALSE
BOOL PSkipReady = FALSE
MissionStageMenuTextStruct SkipMenuStruct[MAX_SKIP_MENU_LENGTH] // struct containing the debug menu
//WIDGET_ID widgetDebug
#ENDIF
///// END OF DEBUG
// ENUMS
// MISSION CONTROL
ENUM MISSION_STAGE
STAGE_INIT_MISSION,
STAGE_OPENING_CUTSCENE,
STAGE_DRIVE_TO_STORE,
STAGE_SCOUT_OUT_STORE,
STAGE_FIND_ROOF_ENTRANCE,
STAGE_CHECK_OUT_ROOF,
STAGE_DRIVE_TO_WAREHOUSE,
STAGE_GO_TO_OFFICE,
STAGE_END_MISSION
ENDENUM
MISSION_STAGE missionStage
//Cam stuff
CONST_FLOAT MAX_ZOOM 20.0
CONST_FLOAT MIN_ZOOM 55.0 //increased to match first person FOV settings
FLOAT f_current_cam_fov
FLOAT f_scale_rotate_speed_zoom
FLOAT f_rotate_speed
// CONSTANTS
// COORDINATES AND HEADINGS
//Players car
VECTOR vCarSpawnCoords = <<714.9441, -981.2628, 23.1180>>// << 718.1437, -983.6423, 23.1401 >> //<< 718.1439, -985.8972, 23.1081 >>
CONST_FLOAT fCarSpawnHeading 268.4990
////Contact start position
//VECTOR vContactSpawnCoords = << 707.8595, -964.1854, 29.4334 >>
//CONST_FLOAT fContactSpawnHeading 80.0883
//Store destination
VECTOR vParkingSpace = <<-659.0, -270.9, 35>>
//VECTOR vOffice = << 706.0189, -964.4463, 29.4335 >>
VECTOR vWareHouse = <<718, -981.7, 23.5>>
// VARIABLES
// WEAPON TYPES
WEAPON_TYPE Current_Ped_weapon
// PLAYERS GLASSES
//PED_COMP_NAME_ENUM ePlayersGlasses
// INTEGERS
INT iCutsceneStage = 0
INT iControlFlag = 0
//INT IcamStage = 0
//INT Cam1Scene, Cam2Scene, Cam3Scene
INT iGlassesCamTimer
INT iPlayerTakingPhotoTimer
INT iShotsBeforeStoreTimer
INT iSaveHouseCheck
INT icount
INT iSnapDialogueTimer = 0
INT StartPH8ChatTimer = 0
INT iPhotosTaken = 0
INT iTrackedAlarmPoint[2]
INT iTrackedCamPoint[4]
INT iTrackedVentPoint[4]
//INT SyncdScene1
INT iMoveStageOnTimer
INT iWarnMichaelChatTimer
INT iTimerForRoofEntranceBlip
INT iMeleeTimer
INT iHurryUpChatTimer
INT iGlassesActivatedTimer
INT iAroundChatTimer
INT iCamZoomInSoundID, iCamZoomOutSoundID, iCamShootSoundID, iBackGroundSoundID
INT ShopGuardSyncdScene, ShopGuardSyncdSceneHold, ShopGuardSyncdSceneOpen
INT iPicTakenTimer
INT iAllPicsTakenTimer
INT AllpicsDoneTimer
INT iPlayerCantFindVents
INT iPicSpeedTimer
INT NotHighEnoughTimer
INT iPlayerNotApproachingTimer
INT iVentGodTextTimer
INT iGetBackInTimer
INT iBackInCarTimer
INT icopsTextTimer
INT iGoToFactoryTimer
INT iChat46Timer
INT LesterGetInCarSyncdScene
INT iChat72Timer
INT iHurryUpTimer
INT iHurryUpRoofTimer
INT iKilledPedsCloseToStore
INT iKilledPedsAwayFromStore
INT iGodText3Timer
INT iVideoTimer[5]
// PEDS
PED_INDEX pedContact
PED_INDEX shopGuard
PED_INDEX shopAssistant
PED_INDEX ShopCustomer[1]
//PED_INDEX WorkshopPed[3]
PED_INDEX ClosestPed
OBJECT_INDEX walkingStick
//OBJECT_INDEX IronProp
OBJECT_INDEX ObjBallCam[4]
OBJECT_INDEX ObjBallVent[4]
OBJECT_INDEX ObjBallAlarm[2]
//OBJECT_INDEX ChairProp[2]
//OBJECT_INDEX SewingProp[2]
OBJECT_INDEX Vent1PropBall[8]
OBJECT_INDEX Vent2PropBall[8]
OBJECT_INDEX Vent3PropBall[8]
OBJECT_INDEX SouthWallPropBall[6]
OBJECT_INDEX MainVentPropBall[4]
// ENTITYS
// INTERIOR
INTERIOR_INSTANCE_INDEX InteriorJewelleryShop
INTERIOR_INSTANCE_INDEX WarehouseInterior
// VEHICLES
VEHICLE_INDEX vehCar
VEHICLE_INDEX playersStartCar
// SEQUENCES
SEQUENCE_INDEX seqSequencePlayer
SEQUENCE_INDEX seqSequenceAssistant
SEQUENCE_INDEX seqSequencePedContact
SEQUENCE_INDEX shopCustomerSeq
// BLIPS
BLIP_INDEX blipLocate
BLIP_INDEX blipContact
BLIP_INDEX BlipVeh
BLIP_INDEX shopBlip
BLIP_INDEX ScopeOutViewPointBlip
BLIP_INDEX shopAssistantBlip
BLIP_INDEX BlipWareHouse
BLIP_INDEX BlipOffice
BLIP_INDEX BlipRoofCheck
BLIP_INDEX ventsBlip
BLIP_INDEX MainVentBlip
// SCENARIO'S ╞═════════
SCENARIO_BLOCKING_INDEX ScenarioBlocking[5]
// CAMERAS
CAMERA_INDEX interpCamera
//CAMERA_INDEX initCam
//CAMERA_INDEX destCam
CAMERA_INDEX GlassesCamera
// STRINGS
STRING FailReason
//STRING playersRadioStation
// SCALEFORM
SCALEFORM_INDEX SF_Glasses_Shutter_Index
// FLOATS
FLOAT fCamNewDirectionZCoord, fCamDirectionZCoord, fPlayerHeading, fCamNewDirectionXCoord, fGlassesCamFOV
FLOAT fminFOV, fMaxFOV
FLOAT fOpenRatio
// VECTORS
VECTOR vplayerCoords
VECTOR vplayerStartRoofCoords
// STRUCTS
structPedsForConversation MyLocalPedStruct
// TEXT LABELS
TEXT_LABEL_23 JHS1_OLDCREW1
TEXT_LABEL_23 STP12c_StartLine
TEXT_LABEL_23 STP13_StartLine
// FLAGS
BOOL doneGetInCarText = FALSE
BOOL DoneCarChat = FALSE
BOOL doneGlassChat = FALSE
BOOL GoToJewellersTextDisplayed = FALSE
BOOL GetInCarText = FALSE
BOOL GotoCarTextDone = FALSE
BOOL CheckpointReplayStarting = FALSE
BOOL CanMissionFail = FALSE
BOOL playerhasbeenincar = FALSE
BOOL doneGetInCarText2 = FALSE
BOOL MissionStageBeingSkippedTo = FALSE
BOOL bTracker
BOOL clearedGodText = FALSE
BOOL doneWarningText = FALSE
BOOL cutsceneSkipped
BOOL doneGodText
BOOL playerCausedTroubleInsideStore = FALSE
BOOL hasStartAreaBeenCleanedUp
BOOL PlayerEnteredShopTooSoon
BOOL updatedGodText
BOOL SecurityCamObjectiveDone
BOOL VentObjectiveDone
BOOL SpokeToStaffObjectiveDone
BOOL GlassesCamActive
BOOL glassesHaveBeenActivated
BOOL glassesActivatedTimerStarted
BOOL AlarmObjectiveDone
BOOL camSetup
BOOL playerTakingPhoto
BOOL biscutsceneActive
BOOL AllBallsCreated
BOOL updatedGodText2
BOOL doneHintCam
BOOL donePH1Chat
BOOL donePH8Chat
BOOL donePH9Chat
BOOL donePH10Chat
BOOL donePH11Chat
BOOL donePH12Chat
BOOL doneTOCARChat
BOOL donePH13Chat
BOOL donePH16Chat
BOOL donePH17Chat
BOOL donePH18Chat
BOOL donePH19Chat
BOOL SnapDialogueNeeded
BOOL StoreStaffCreated
BOOL bMissionFailed
BOOL doneGodText2
BOOL doneGodText3
BOOL donePH23Chat
BOOL donePH28Chat
BOOL donePH29Chat
BOOL donePH20Chat
BOOL donePH21Chat
BOOL donePH22Chat
BOOL donePH24Chat
BOOL donePH25Chat
BOOL donePH26Chat
BOOL PlayerIsInsideJewellers
BOOL GunHolstered
BOOL PH8ChatTimerStarted
BOOL doneGetBackInCarText
//BOOL SweatshopPedsRequired
//BOOL SweatshopPedsCreated
BOOL player_coming_from_left
BOOL player_coming_from_right
BOOL donePH41Chat
BOOL donePH44Chat
BOOL donePH42Chat
BOOL doneDESCChat
BOOL playerOnRoof
BOOL moveStageOnTimerSet
BOOL donePH43Chat
BOOL donePH45Chat
BOOL donePH46Chat
BOOL DoneGlassesHelpText
BOOL doneGotoCar2Text
BOOL MusicStarted[3]
BOOL timerstartedForRooftopEntranceBlip
BOOL donePH47Chat
BOOL meleeNeedsDisabled
BOOL modelsRequested
BOOL LesterLookTaskGiven
BOOL shopAssistantLookTaskGiven
BOOL shopGuardLookTaskGiven
BOOL hasPhoneBeenDisabled
BOOL JewelStoreModelsRequested
BOOL ShopCustomerTaskGiven[6]
BOOL customerReadyToMoveOn
BOOL ShopCustomerFrozen
BOOL ShopCustomerReadyToLeave
BOOL doneSTP14Chat
BOOL playerTookTooLong
BOOL PlayerInsideWarehouse
BOOL AlarmIsOnScreen[2]
BOOL VentIsOnScreen[4]
BOOL CamIsOnScreen[4]
BOOL AnAlarmIsOnScreen
BOOL ACamIsOnScreen
BOOL AVentIsOnScreen
BOOL endsceneRequested
BOOL interiorPinnedInMemory
BOOL isCamZoomInSoundPlaying
BOOL isCamZoomOutSoundPlaying
BOOL PlayerApproching
BOOL GuardOpeningDoor
BOOL GuardOpeningDoorSequenceStarted
BOOL doneGoToStoreText
BOOL donePH3Chat
BOOL hasCutsceneBeenRequested
BOOL CutSceneGoodToStart
BOOL doneOLDCREWChat
BOOL doneHelp1Text
//BOOL doneHelp2Text
BOOL allpicsTaken
BOOL PausedOldCrewChat
BOOL doneVentChat
BOOL donePH51Chat
BOOL playerHasBeenAtPerfectPlace
BOOL PlayerCantFindVentsTimerSet
BOOL doneVentsBlipText
BOOL doneVentsGodText
BOOL updatedGodText3
BOOL PlayerTakingPicsTooFast
BOOL PicSpeedTimerStarted
BOOL AlarmHasBeenSnapped
BOOL CamHasBeenSnapped
BOOL VentHasBeenSnapped
BOOL AlarmHasBeenMentioned
BOOL CamHasBeenMentioned
BOOL VentHasBeenMentioned
BOOL donePH6Chat
BOOL donePH5Chat
BOOL LoadedInteriorForCut
BOOL pinnedInterior
BOOL doneChatPH53
BOOL OfficeFail
BOOL CounterFail
BOOL doneChatPH32
BOOL convoskilled
BOOL BallsForVentsCreated
BOOL playerIsHighEnough
BOOL DoChatPH57
BOOL GoodShotDialogueRequired
BOOL GoodButNotRightChatRequired
BOOL DoChatPH58
BOOL DoChatPH59
BOOL DoChatPH60
BOOL GoodShotDone
BOOL doneChatPH57
BOOL doneChatPH60
BOOL ballsDeleted
BOOL DoChatPH61
BOOL doneChatPH61
BOOL PhotoJustTaken
BOOL DoChatPH62
BOOL DoChatPH63
BOOL PerfectShotDialogueRequired
BOOL DoChatPH64
BOOL HigherChatNeeded
BOOL doneChatPH64
BOOL playerInPerfectPlace
BOOL DoChatPH65
BOOL doneFirstHelp
BOOL OkShotDone
BOOL hintCamCancelled
BOOL doneChatPH68
BOOL doneChatPH69
BOOL doneGodTextMainVent
BOOL doneReturnText
BOOL clearedGetBackin
BOOL clearedText
BOOL DoneChat46
BOOL bLockstate
BOOL DoorAnimStopped
BOOL syncSceneStarted
BOOL donePH71Chat
BOOL doneLoseCopsText
//BOOL gotPlayersRadioStation
BOOL donchat72
BOOL doneLoseWantedText
//BOOL michaelInRightClothes
BOOl openingDialogueRequired
BOOL doneWantedChat
BOOL playerInSafeHouse
BOOL statPicturePerfectSet
BOOL ScreenFadedIn
BOOL PausedSTP12cChat
BOOL PausedSTP13Chat
BOOL trackedPointsCreated
BOOL bVideoOfPlayerEnteringStore
BOOL bVideoOfPlayerTakingLastPic
BOOL bVideoOfPlayerEnteringRoof
BOOL bVideoOfPlayerTakingPicOfVent
BOOL bVideoTimerStarted[5]
// CLEANUP, MISSION PASSED/FAILED PROCEDURES
//PURPOSE: Removes all blips ideal for stage selector
PROC REMOVE_BLIPS()
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DOES_BLIP_EXIST(blipContact)
REMOVE_BLIP(blipContact)
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
IF DOES_BLIP_EXIST(ScopeOutViewPointBlip)
REMOVE_BLIP(ScopeOutViewPointBlip)
ENDIF
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
IF DOES_BLIP_EXIST(BlipWareHouse)
REMOVE_BLIP(BlipWareHouse)
ENDIF
IF DOES_BLIP_EXIST(BlipOffice)
REMOVE_BLIP(BlipOffice)
ENDIF
IF DOES_BLIP_EXIST(BlipRoofCheck)
REMOVE_BLIP(BlipRoofCheck)
ENDIF
IF DOES_BLIP_EXIST(ventsBlip)
REMOVE_BLIP(ventsBlip)
ENDIF
IF DOES_BLIP_EXIST(MainVentBlip)
REMOVE_BLIP(MainVentBlip)
ENDIF
ENDPROC
//PURPOSE: Deletes or removes all elements of the script
PROC MissionTidyUp()
// PLAYER
//Activate player control
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
ENDIF
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
// ROAD NODES
SET_ROADS_IN_AREA(<<-611.9, -362.4, 30>>, <<-558.6, -264.5, 45>>, TRUE)
SET_ROADS_IN_AREA(<<-538.9, -296.7, 43.3>>, <<-631.3, -185.2, 30>>, TRUE)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-645.8, -301.2, 30>>, <<-674.2, -244.6, 46.1>>, TRUE, TRUE)
// TRACKED POINTS
//Destroy all tracked points
IF trackedPointsCreated = TRUE
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[0])
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[2])
DESTROY_TRACKED_POINT(iTrackedVentPoint[3])
DESTROY_TRACKED_POINT(iTrackedCamPoint[0])
DESTROY_TRACKED_POINT(iTrackedCamPoint[1])
DESTROY_TRACKED_POINT(iTrackedCamPoint[2])
DESTROY_TRACKED_POINT(iTrackedCamPoint[3])
trackedPointsCreated = FALSE
ENDIF
// TEXT
CLEAR_HELP()
// TIMECYCLE
CLEAR_TIMECYCLE_MODIFIER()
// SCENARIO's ╞═════════
REMOVE_SCENARIO_BLOCKING_AREA(ScenarioBlocking[0])
REMOVE_SCENARIO_BLOCKING_AREA(ScenarioBlocking[1])
REMOVE_SCENARIO_BLOCKING_AREA(ScenarioBlocking[2])
REMOVE_SCENARIO_BLOCKING_AREA(ScenarioBlocking[3])
REMOVE_SCENARIO_BLOCKING_AREA(ScenarioBlocking[4])
//Switch off the scenario
IF DOES_SCENARIO_GROUP_EXIST("SEW_MACHINE")
IF IS_SCENARIO_GROUP_ENABLED("SEW_MACHINE")
SET_SCENARIO_GROUP_ENABLED("SEW_MACHINE", FALSE)
ENDIF
ENDIF
// PEDS
CLEAR_PED_NON_CREATION_AREA()
// IF DOES_ENTITY_EXIST(pedContact)
// SET_PED_AS_NO_LONGER_NEEDED(pedContact)
// ENDIF
// SEQUENCES
CLEAR_SEQUENCE_TASK(seqSequencePedContact)
CLEAR_SEQUENCE_TASK(seqSequenceAssistant)
CLEAR_SEQUENCE_TASK(seqSequencePlayer)
// CAMS
DESTROY_ALL_CAMS()
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
SET_WIDESCREEN_BORDERS(FALSE, 0)
// BLIPS
REMOVE_BLIPS()
// SPEECH
KILL_ANY_CONVERSATION()
// TAXI'S ╞═════════
DISABLE_TAXI_HAILING(FALSE)
// SOUNDS
//Set the ambient sound back to normal
// SET_PED_WALLA_DENSITY(0, 0)
STOP_SOUND(iCamZoomInSoundID)
STOP_SOUND(iCamZoomOutSoundID)
STOP_SOUND(iCamShootSoundID)
STOP_SOUND(iBackGroundSoundID)
OVERRIDE_MICROPHONE_SETTINGS(0, FALSE)
// PHONE
DISABLE_CELLPHONE(FALSE)
// ROADS
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-650.4, -286.5, 34.1>>, <<-670.4, -251.7, 37.5>>, TRUE)
// SYNC'D SCENES ╞═════════
IF IS_SYNCHRONIZED_SCENE_RUNNING(ShopGuardSyncdScene)
PRINTNL() PRINTSTRING("ShopGuardSyncdScene is running, door anim being stopped now") PRINTNL()
STOP_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, NORMAL_BLEND_OUT)
ENDIF
// INTERIORS
// Steve R - Disable interiors of Jewel Store and Max Renda store
SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_STORE, BUILDINGSTATE_NORMAL, FALSE)
SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_HEIST_MAX_RENDA_INTERIOR, BUILDINGSTATE_NORMAL, FALSE)
ENDPROC
// /// PURPOSE:
///// Checks if Michael is wearing any suit, or items bought from high end shop
///// This function will need to be updated as clothes items get finalised in the high end shop
///// RETURNS:
///// TRUE if outfit is suitable for triggering mission in. FALSE otherwise
//FUNC BOOL IS_MICHAEL_WEARING_SUITABLE_OUTFIT()
//
// IF IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_MOVIE_TUXEDO)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_BLACK_SUIT)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_DARK_GRAY_SUIT)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SHIRT_AND_PANTS)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_JEWEL_HEIST)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_NAVY_SUIT)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_5)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_6)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_7)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_8)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_9)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_10)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_11)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_12)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_13)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_14)
// OR IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_SUIT_15)
// // the player is wearing an outfit bought from the high end shop
// RETURN TRUE
// ENDIF
//
// IF NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_01)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_02)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_03)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_04)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_05)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_06)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_07)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_08)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_09)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_10)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_11)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_12)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_13)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_14)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GREY_SUIT_15)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_1)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_2)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_3)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_4)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_5)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_6)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_SUIT_JACKET_7)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_VNECK)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_1)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_2)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_3)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_4)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_5)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_6)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_DRESS_SHIRT_7)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_MOVIE_TUXEDO)
// // the player is wearing a torso that is not from the high end shop
// RETURN FALSE
// ENDIF
//
// IF NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_1)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_2)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_3)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_4)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_5)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_6)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_7)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_8)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_9)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_10)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_11)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_12)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_13)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_14)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_GREY_SUIT_15)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_SECURITY)
// AND NOT IS_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_BLACK_TROUSERS)
// // the player is wearing a legs component that is not from the high end shop
// RETURN FALSE
// ENDIF
//
// // the player is wearing torso and legs from the high end shop
// RETURN TRUE
//ENDFUNC
//PURPOSE: Cleans up the mission after passing or failing.
PROC MissionCleanup()
MissionTidyUp()
TERMINATE_THIS_THREAD()
ENDPROC
//PURPOSE: Performs necessary actions for player completing the mission, then calls cleanup
PROC MissionPassed()
PRINTSTRING("MissionPassed") PRINTNL()
//Set board intro cutscene to load and save reference to Lester and car
//so the heist controller can grab ownership of them and clean them up.
IF NOT IS_REPEAT_PLAY_ACTIVE()
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE)
ENDIF
g_sTriggerSceneAssets.ped[0] = pedContact
g_sTriggerSceneAssets.veh[0] = vehCar
//Cutting directly into planning board view.
//Make sure radar is turned off.
DISPLAY_RADAR(FALSE)
//Increment global heist flow counter
IF NOT IS_REPEAT_PLAY_ACTIVE()
Mission_Flow_Mission_Passed(TRUE)
ELSE
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_SHORT)
ENDIF
Mission_Flow_Mission_Passed()
ENDIF
MissionCleanup()
ENDPROC
//PURPOSE: Performs necessary actions for player failing the mission, then calls cleanup
PROC MissionFailed()
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, FALSE)
// check if we need to respawn the player in a different position,
// if so call MISSION_FLOW_SET_FAIL_WARP_LOCATION() + SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION here
KILL_ANY_CONVERSATION()
MissionCleanup() // must only take 1 frame and terminate the thread
ENDPROC
// INITIALISING
// DEBUG
//DEBUG STAGE SELECTOR NAMING
#IF IS_DEBUG_BUILD
PROC SET_DEBUG_STAGE_NAMES()
SkipMenuStruct[0].sTxtLabel = "STAGE_START_MISSION" // Stage 0 Name
SkipMenuStruct[1].sTxtLabel = "STAGE_SCOUT_OUT_STORE" // Stage 1 Name
SkipMenuStruct[2].sTxtLabel = "STAGE_FIND_ROOF_ENTRANCE" // Stage 2 Name
SkipMenuStruct[3].sTxtLabel = "STAGE_CHECK_OUT_ROOF" // Stage 3 Name
SkipMenuStruct[4].sTxtLabel = "STAGE_DRIVE_TO_WAREHOUSE" // Stage 4 Name
ENDPROC
#ENDIF
//PURPOSE: Deletes any peds if they were injured
PROC DELETE_ALL_ENTITIES()
//Destroy all tracked points
IF trackedPointsCreated = TRUE
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[0])
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[2])
DESTROY_TRACKED_POINT(iTrackedVentPoint[3])
DESTROY_TRACKED_POINT(iTrackedCamPoint[0])
DESTROY_TRACKED_POINT(iTrackedCamPoint[1])
DESTROY_TRACKED_POINT(iTrackedCamPoint[2])
DESTROY_TRACKED_POINT(iTrackedCamPoint[3])
trackedPointsCreated = FALSE
ENDIF
//Delete Peds first
IF DOES_ENTITY_EXIST(pedContact)
DELETE_PED(pedContact)
ENDIF
IF DOES_ENTITY_EXIST(shopGuard)
DELETE_PED(shopGuard)
ENDIF
IF DOES_ENTITY_EXIST(shopAssistant)
DELETE_PED(shopAssistant)
ENDIF
IF DOES_ENTITY_EXIST(ShopCustomer[0])
DELETE_PED(ShopCustomer[0])
ENDIF
// IF DOES_ENTITY_EXIST(WorkshopPed[0])
// DELETE_PED(WorkshopPed[0])
// ENDIF
// IF DOES_ENTITY_EXIST(WorkshopPed[1])
// DELETE_PED(WorkshopPed[1])
// ENDIF
// IF DOES_ENTITY_EXIST(WorkshopPed[2])
// DELETE_PED(WorkshopPed[2])
// ENDIF
// //Delete Guadaloupe now for good.
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[4])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[4], TRUE, TRUE)
// GuadaloupePed = g_sTriggerSceneAssets.ped[4]
// CLEAR_PED_TASKS(GuadaloupePed)
// DELETE_PED(GuadaloupePed)
// ENDIF
//Delete all vehicles
IF DOES_ENTITY_EXIST(vehCar)
DELETE_VEHICLE(vehCar)
ENDIF
//Delete all objects
IF DOES_ENTITY_EXIST(walkingStick)
DELETE_OBJECT(walkingStick)
ENDIF
FOR icount = 0 TO 3
IF DOES_ENTITY_EXIST(ObjBallCam[icount])
DELETE_OBJECT(ObjBallCam[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 3
IF DOES_ENTITY_EXIST(ObjBallVent[icount])
DELETE_OBJECT(ObjBallVent[icount])
ENDIF
ENDFOR
IF DOES_ENTITY_EXIST(ObjBallAlarm[0])
DELETE_OBJECT(ObjBallAlarm[0])
ENDIF
IF DOES_ENTITY_EXIST(ObjBallAlarm[1])
DELETE_OBJECT(ObjBallAlarm[1])
ENDIF
// IF DOES_ENTITY_EXIST(IronProp)
// DELETE_OBJECT(IronProp)
// ENDIF
// IF DOES_ENTITY_EXIST(ChairProp[0])
// DELETE_OBJECT(ChairProp[0])
// ENDIF
// IF DOES_ENTITY_EXIST(ChairProp[1])
// DELETE_OBJECT(ChairProp[1])
// ENDIF
// IF DOES_ENTITY_EXIST(SewingProp[0])
// DELETE_OBJECT(SewingProp[0])
// ENDIF
// IF DOES_ENTITY_EXIST(SewingProp[1])
// DELETE_OBJECT(SewingProp[1])
// ENDIF
//Anim dicts
REMOVE_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
REMOVE_ANIM_DICT("amb@world_human_window_shop@male@idle_a")
//Remove any models that may have been requested
SET_MODEL_AS_NO_LONGER_NEEDED(A_M_M_BEVHILLS_01)
//Clean up the glasses camera scaleform stuff
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(SF_Glasses_Shutter_Index)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("digitalOverlay")
//Remove waypoint recordings
REMOVE_WAYPOINT_RECORDING("BB_JEW_6")
//Put rode nodes back on
SET_ROADS_IN_AREA(<<-611.9, -362.4, 30>>, <<-558.6, -264.5, 45>>, TRUE)
SET_ROADS_IN_AREA(<<-538.9, -296.7, 43.3>>, <<-631.3, -185.2, 30>>, TRUE)
//Audio
CANCEL_MUSIC_EVENT("JH1_RESTART_1")
CANCEL_MUSIC_EVENT("JH1_RESTART_2")
CANCEL_MUSIC_EVENT("JH1_RESTART_3")
CANCEL_MUSIC_EVENT("JH1_START")
CANCEL_MUSIC_EVENT("JH1_STORE")
CANCEL_MUSIC_EVENT("JH1_STOP_TRACK_ACTION")
// CANCEL_MUSIC_EVENT("JH1_END")
ENDPROC
PROC CREATE_ENTITIES_REQUIRED()
// //Creat the car the player started in if on replay
// IF IS_REPLAY_IN_PROGRESS()
// IF IS_REPLAY_START_VEHICLE_AVAILABLE()
// IF NOT DOES_ENTITY_EXIST(playersStartCar)
// IF GET_REPLAY_START_VEHICLE_MODEL() != TAILGATER
// IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
// CREATE_REPLAY_START_VEHICLE(<<686.8995, -985.1403, 22.3440>>, 268.5802)
// ELSE
// IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
// OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
// OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
// CREATE_REPLAY_START_VEHICLE(<<706.0064, -979.6544, 23.1403>>, 227.0058)
// ELSE
// DELETE_VEHICLE(playersStartCar)
// ENDIF
// ENDIF
// SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<0.0,0.0,0.0>>, 0.0)
// ELSE
// DELETE_VEHICLE(playersStartCar)
// ENDIF
// ENDIF
// ENDIF
// ENDIF
SWITCH missionStage
CASE STAGE_DRIVE_TO_STORE
// WHILE NOT NEW_LOAD_SCENE_START_SPHERE(<<718, -974, 24>>, 10)
// PRINTSTRING("Waiting for new load scene to start") PRINTNL()
// WAIT(0)
// ENDWHILE
REQUEST_PLAYER_VEH_MODEL(CHAR_MICHAEL)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_MICHAEL)
OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting for models to load") PRINTNL()
WAIT(0)
ENDWHILE
IF NOT DOES_ENTITY_EXIST(vehCar)
CLEAR_AREA(vCarSpawnCoords, 15, TRUE)
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, vCarSpawnCoords, fCarSpawnHeading)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedContact)
CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
SET_PLAYER_VEH_MODEL_AS_NO_LONGER_NEEDED(CHAR_MICHAEL)
BREAK
CASE STAGE_SCOUT_OUT_STORE
REQUEST_PLAYER_VEH_MODEL(CHAR_MICHAEL)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_MICHAEL)
OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting for models to load") PRINTNL()
WAIT(0)
ENDWHILE
IF NOT DOES_ENTITY_EXIST(vehCar)
CLEAR_AREA(vCarSpawnCoords, 15, TRUE)
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, <<-659.1774, -270.6738, 34.8078>>, 30.7532)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
SET_VEHICLE_ENGINE_ON(vehCar, TRUE, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedContact)
CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
SET_PLAYER_VEH_MODEL_AS_NO_LONGER_NEEDED(CHAR_MICHAEL)
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
REQUEST_PLAYER_VEH_MODEL(CHAR_MICHAEL)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
SF_Glasses_Shutter_Index = REQUEST_SCALEFORM_MOVIE ("camera_gallery")
LOAD_OVERLAY_EFFECTS()
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_MICHAEL)
OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting for models to load") PRINTNL()
WAIT(0)
ENDWHILE
IF NOT DOES_ENTITY_EXIST(vehCar)
CLEAR_AREA(vCarSpawnCoords, 15, TRUE)
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, <<-659.1774, -270.6738, 34.8078>>, 30.7532)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedContact)
CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
SET_PLAYER_VEH_MODEL_AS_NO_LONGER_NEEDED(CHAR_MICHAEL)
BREAK
CASE STAGE_CHECK_OUT_ROOF
SF_Glasses_Shutter_Index = REQUEST_SCALEFORM_MOVIE ("camera_gallery")
LOAD_OVERLAY_EFFECTS()
REQUEST_MISSION_AUDIO_BANK("JWL_HEIST_SETUP")
REQUEST_PLAYER_VEH_MODEL(CHAR_MICHAEL)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_MICHAEL)
OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting for models to load") PRINTNL()
WAIT(0)
ENDWHILE
IF NOT DOES_ENTITY_EXIST(vehCar)
CLEAR_AREA(vCarSpawnCoords, 15, TRUE)
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, <<-575.9287, -277.7308, 34.1598>>, 27.8937)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedContact)
CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
SET_PLAYER_VEH_MODEL_AS_NO_LONGER_NEEDED(CHAR_MICHAEL)
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
REQUEST_PLAYER_VEH_MODEL(CHAR_MICHAEL)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
// PREPARE_MUSIC_EVENT("JH1_END")
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_MICHAEL)
OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting for models to load") PRINTNL()
WAIT(0)
ENDWHILE
IF NOT DOES_ENTITY_EXIST(vehCar)
CLEAR_AREA(vCarSpawnCoords, 15, TRUE)
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, <<-575.9287, -277.7308, 34.1598>>, 27.8937)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedContact)
CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
SET_PLAYER_VEH_MODEL_AS_NO_LONGER_NEEDED(CHAR_MICHAEL)
BREAK
ENDSWITCH
ENDPROC
PROC SET_PLAYER_COORDS()
SWITCH missionStage
CASE STAGE_DRIVE_TO_STORE
// SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE)
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_SCOUT_OUT_STORE
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_CHECK_OUT_ROOF
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
// SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE)
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC ANYTHING_STAGE_SPECIFIC_FOR_SKIPPING()
SWITCH missionStage
CASE STAGE_DRIVE_TO_STORE
TRIGGER_MUSIC_EVENT("JH1_RESTART_1")
StoreStaffCreated = FALSE
modelsRequested = FALSE
// SweatshopPedsCreated = FALSE
PlayerInsideWarehouse = FALSE
BREAK
CASE STAGE_SCOUT_OUT_STORE
TRIGGER_MUSIC_EVENT("JH1_RESTART_2")
StoreStaffCreated = FALSE
modelsRequested = FALSE
// SweatshopPedsCreated = FALSE
PlayerInsideWarehouse = FALSE
interiorPinnedInMemory = FALSE
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
TRIGGER_MUSIC_EVENT("JH1_RESTART_2")
StoreStaffCreated = FALSE
modelsRequested = FALSE
// SweatshopPedsCreated = FALSE
PlayerInsideWarehouse = FALSE
interiorPinnedInMemory = FALSE
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES, FALSE)
PRINTSTRING("JEWEL = Glasses being given to player now")
BREAK
CASE STAGE_CHECK_OUT_ROOF
TRIGGER_MUSIC_EVENT("JH1_RESTART_3")
ScenarioBlocking[2] = ADD_SCENARIO_BLOCKING_AREA(<<-603.5, -271.1, 44.2>>, <<-566.5, -298.7, 31.4>>)
StoreStaffCreated = FALSE
modelsRequested = FALSE
// SweatshopPedsCreated = FALSE
PlayerInsideWarehouse = FALSE
interiorPinnedInMemory = FALSE
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES, FALSE)
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
// TRIGGER_MUSIC_EVENT("JH1_END")
StoreStaffCreated = FALSE
modelsRequested = FALSE
PlayerInsideWarehouse = FALSE
interiorPinnedInMemory = FALSE
BREAK
ENDSWITCH
ENDPROC
//PURPOSE: anything that doesn't need to be called when using new replay system
PROC ANYTHING_NOT_TO_BE_CALLED_WHEN_NEW_REPLAY_SYSTEM_IS_ACTIVE()
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE()
ENDIF
REMOVE_CUTSCENE()
RELEASE_MISSION_AUDIO_BANK()
DISABLE_CELLPHONE(FALSE)
//Clear any conversation or text
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
//Move the player out of any vehicle before deleting the vehicle
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
ENDPROC
PROC STAGE_SELECTOR_MISSION_SETUP()
//Stop and remove any cutscene if one is playing
IF NOT IS_REPLAY_BEING_SET_UP()
ANYTHING_NOT_TO_BE_CALLED_WHEN_NEW_REPLAY_SYSTEM_IS_ACTIVE()
ENDIF
REMOVE_BLIPS()
DELETE_ALL_ENTITIES()
OVERRIDE_MICROPHONE_SETTINGS(0, FALSE)
CREATE_ENTITIES_REQUIRED()
IF NOT IS_REPLAY_BEING_SET_UP()
SET_PLAYER_COORDS()
ENDIF
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ANYTHING_STAGE_SPECIFIC_FOR_SKIPPING()
//Reset any flags global for mission
LesterLookTaskGiven = FALSE
shopAssistantLookTaskGiven = FALSE
shopGuardLookTaskGiven = FALSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDPROC
//TIMEOFDAY currentTimeOfDay
//CAMERA_INDEX splineCamera
//INT iTimelapseCut
//
//PROC DO_STAGE_TIME_LAPSE()
//
// IF IS_TIME_BETWEEN_THESE_HOURS(TODS_SUNSET, TODS_SUNRISE)
// TimelapseRequired = TRUE
// ENDIF
//
// IF DO_TIMELAPSE(SP_HEIST_JEWELRY_1, currentTimeOfDay, iTimelapseCut, splineCamera)
// missionstage = STAGE_INIT_MISSION
// ENDIF
//
//ENDPROC
//Sets up the end of the mission for skipping to end
PROC SET_UP_MISSION_PASSED()
IF iControlFlag = 0
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE)
// WHILE NOT HAS_CUTSCENE_LOADED()
// PRINTSTRING("waiting for end cutscene to load") PRINTNL()
// WAIT(0)
// ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(<< 718.0418, -984.2304, 23.1442 >>, 20, TRUE)
IF NOT DOES_ENTITY_EXIST(vehCar)
REQUEST_MODEL(TAILGATER)
WHILE NOT HAS_MODEL_LOADED(TAILGATER)
PRINTSTRING("waiting for model tailgater loading") PRINTNL()
WAIT(0)
ENDWHILE
IF CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, << 718.0418, -984.2304, 23.1442 >>, 271.3340)
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
PRINTSTRING("CREATE_PLAYER_VEHICLE has returned TRUE") PRINTNL()
iControlFlag ++
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
// SET_ENTITY_COORDS(vehCar, << 718.0418, -984.2304, 23.1442 >>)
// SET_ENTITY_HEADING(vehCar, 271.3340)
iControlFlag ++
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 1
PRINTSTRING("iControlFlag = 1") PRINTNL()
// IF NOT IS_SCREEN_FADED_IN()
END_REPLAY_SETUP(vehCar)
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
// ENDIF
MissionPassed()
ENDIF
ENDPROC
//PURPOSE: Controls all the video recordings of important points in the mission
PROC VIDEO_RECORDER_MANAGER()
IF missionStage = STAGE_SCOUT_OUT_STORE
//Have a video of the player first entering the store
IF bVideoOfPlayerEnteringStore = FALSE
IF bVideoTimerStarted[0] = FALSE
IF PlayerIsInsideJewellers = TRUE
iVideoTimer[0] = GET_GAME_TIMER()
bVideoTimerStarted[0] = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > (iVideoTimer[0] + 3000)
REPLAY_RECORD_BACK_FOR_TIME(6)
bVideoOfPlayerEnteringStore = TRUE
ENDIF
ENDIF
ENDIF
//Have a video of last pic being taken
IF bVideoOfPlayerTakingLastPic = FALSE
IF bVideoTimerStarted[1] = FALSE
IF VentObjectiveDone
AND SecurityCamObjectiveDone
AND AlarmObjectiveDone
iVideoTimer[1] = GET_GAME_TIMER()
bVideoTimerStarted[1] = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > (iVideoTimer[1] + 2000)
REPLAY_RECORD_BACK_FOR_TIME(6)
bVideoOfPlayerTakingLastPic = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF missionStage = STAGE_CHECK_OUT_ROOF
//Have a video of the player first entering the roof
IF bVideoOfPlayerEnteringRoof = FALSE
IF bVideoTimerStarted[2] = FALSE
IF playerOnRoof = TRUE
iVideoTimer[2] = GET_GAME_TIMER()
bVideoTimerStarted[2] = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > (iVideoTimer[2] + 3000)
REPLAY_RECORD_BACK_FOR_TIME(10)
bVideoOfPlayerEnteringRoof = TRUE
ENDIF
ENDIF
ENDIF
//Have a video of the player taking a snap of the vent
IF bVideoOfPlayerTakingPicOfVent = FALSE
IF bVideoTimerStarted[3] = FALSE
IF GoodShotDone = TRUE
iVideoTimer[3] = GET_GAME_TIMER()
bVideoTimerStarted[3] = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > (iVideoTimer[3] + 2500)
REPLAY_RECORD_BACK_FOR_TIME(8)
bVideoOfPlayerTakingPicOfVent = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// START THE MISSION
PROC DO_STAGE_INIT_MISSION()
///DEBUG STUFF
#IF IS_DEBUG_BUILD
jSkipReady = FALSE
SET_DEBUG_STAGE_NAMES()
#ENDIF
///END OF DEBUG STUFF
// SET FLAGS
doneGetInCarText = FALSE
DoneCarChat = FALSE
GoToJewellersTextDisplayed = FALSE
GetInCarText = FALSE
// shopAssistantMoved3 = FALSE
// LookAtWatchesTextDone = FALSE
GotoCarTextDone = FALSE
CheckpointReplayStarting = FALSE
playerCausedTroubleInsideStore = FALSE
iControlFlag = 0
IF NOT IS_REPLAY_IN_PROGRESS()
//Request opening cutscene
REQUEST_CUTSCENE("Jh_1_int")
ENDIF
//clear up Lester from previous mission attempts if replaying mission from start menu
IF IS_REPEAT_PLAY_ACTIVE()
IF DOES_SCENARIO_GROUP_EXIST("SEW_MACHINE")
IF NOT IS_SCENARIO_GROUP_ENABLED("SEW_MACHINE")
SET_SCENARIO_GROUP_ENABLED("SEW_MACHINE", TRUE)
PRINTSTRING("Sceanrio peds should now be active") PRINTNL()
ENDIF
ENDIF
CLEAR_AREA(<<717.7, -967.6, 27.8>>, 50, TRUE)
IF NOT IS_MICHAEL_WEARING_SMART_OUTFIT()
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
ENDIF
//Start a new load scene now to help load in the interior
NEW_LOAD_SCENE_START_SPHERE(<<713.1, -963.4, 29.9>>, 15, NEWLOADSCENE_FLAG_LONGSWITCH_CUTSCENE)
PRINTSTRING("clear area being called for replaying mission") PRINTNL()
ENDIF
//Load heist mission text.
// LOAD_ADDITIONAL_TEXT("H3SET1", MISSION_TEXT_SLOT)
// ScenarioBlocking[1] = ADD_SCENARIO_BLOCKING_AREA(<<710.2, -959.6, 31.5>>, <<721.8, -975.6, 26.3>>)
//Remove the bin man scenario
ScenarioBlocking[3] = ADD_SCENARIO_BLOCKING_AREA(<<713.7754, -996.4443, 22.3085>>, <<715.7624, -991.7067, 25.6214>>)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-645.8, -301.2, 30>>, <<-674.2, -244.6, 46.1>>, FALSE, FALSE)
//Grab the players car they arrived in from the trigger scene.
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[0])
IF IS_VEHICLE_DRIVEABLE(g_sTriggerSceneAssets.veh[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[0], TRUE, TRUE)
playersStartCar = g_sTriggerSceneAssets.veh[0]
ENDIF
ENDIF
// Steve R - Enable interiors for Jewel store and Max Renda store
SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_STORE, BUILDINGSTATE_DESTROYED)
SET_BUILDING_STATE(BUILDINGNAME_IPL_JEWEL_HEIST_MAX_RENDA_INTERIOR, BUILDINGSTATE_DESTROYED)
//Add the player for dialogue
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), "MICHAEL")
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
//Request and load models.
REQUEST_MODEL(TAILGATER)
TOGGLE_STEALTH_RADAR(FALSE)
//Vehicles
// CLEAR_AREA(vCarSpawnCoords, 300, TRUE)
IF IS_SCREEN_FADED_OUT()
LOAD_ALL_OBJECTS_NOW()
ENDIF
//Do replay stuff
IF Is_Replay_In_Progress()
// //Kill the timelapse camera
// SET_TODS_CUTSCENE_RUNNING(FALSE)
SET_CLOCK_TIME(9,0,0)
IF IS_CUTSCENE_ACTIVE()
PRINTSTRING("Waiting for cutscene to stop") PRINTNL()
STOP_CUTSCENE()
REMOVE_CUTSCENE()
ENDIF
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
iControlFlag = 0
iCutsceneStage = 0
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
//Check if player chose to shitskip
IF g_bShitskipAccepted = TRUE
IF GET_REPLAY_MID_MISSION_STAGE() = 0
START_REPLAY_SETUP(<<-659.1774, -270.6738, 34.8078>>, 30.7532)
missionStage = STAGE_SCOUT_OUT_STORE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 1
START_REPLAY_SETUP(<<-659.1774, -270.6738, 34.8078>>, 30.7532)
missionStage = STAGE_FIND_ROOF_ENTRANCE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 2
START_REPLAY_SETUP(<<-575.9287, -277.7308, 34.1598>>, 27.8937)
missionStage = STAGE_CHECK_OUT_ROOF
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 3
START_REPLAY_SETUP(<<-575.9287, -277.7308, 34.1598>>, 27.8937)
missionStage = STAGE_DRIVE_TO_WAREHOUSE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 4
START_REPLAY_SETUP(<< 718.0418, -984.2304, 23.1442 >>, 271.3340)
SET_UP_MISSION_PASSED()
ENDIF
ELSE
IF GET_REPLAY_MID_MISSION_STAGE() = 0
START_REPLAY_SETUP(vCarSpawnCoords, fCarSpawnHeading)
missionStage = STAGE_DRIVE_TO_STORE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 1
START_REPLAY_SETUP(<<-659.1774, -270.6738, 34.8078>>, 30.7532)
missionStage = STAGE_SCOUT_OUT_STORE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 2
START_REPLAY_SETUP(<<-659.1774, -270.6738, 34.8078>>, 30.7532)
missionStage = STAGE_FIND_ROOF_ENTRANCE
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 3
START_REPLAY_SETUP(<<-575.9287, -277.7308, 34.1598>>, 27.8937)
missionStage = STAGE_CHECK_OUT_ROOF
ENDIF
IF GET_REPLAY_MID_MISSION_STAGE() = 4
START_REPLAY_SETUP(<<-575.9287, -277.7308, 34.1598>>, 27.8937)
missionStage = STAGE_DRIVE_TO_WAREHOUSE
ENDIF
ENDIF
ELSE
PRINTSTRING("******************This is NOT a replay******************") PRINTNL()
//Change flag so stage selector can be used again.
#IF IS_DEBUG_BUILD
MissionStageBeingSkippedTo = FALSE
#ENDIF
//Stop traffic being able to drive along the road at the jewellers.
SET_ROADS_IN_AREA(<<-631.51, -332.75, 32>>, <<-692.36, -228.83, 38>>, FALSE)
//Move the mission stage on
iControlFlag = 0
missionStage = STAGE_OPENING_CUTSCENE
ENDIF
REQUEST_ADDITIONAL_TEXT("H3SET1", MISSION_TEXT_SLOT)
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
PRINTSTRING("Waiting for additional text to load") PRINTNL()
WAIT(0)
ENDWHILE
ENDPROC
//PURPOSE: Deletes the temp store staff for the mocap scenes.
PROC DELETE_TEMP_STORE_STAFF()
IF DOES_ENTITY_EXIST(shopGuard)
DELETE_PED(shopGuard)
ENDIF
IF DOES_ENTITY_EXIST(shopAssistant)
DELETE_PED(shopAssistant)
ENDIF
ENDPROC
/// PURPOSE:
/// Sets bMissionFailed to be True so that we start fading for screen to fade out
/// Sets the fail reason string and calls the flow mission failed function.
/// This tells the replay controller to start displaying the fail reason + fading
/// (If bMissionFailed is already true, this function doesn't do anything- as we're already waiting for fail fade to finish)
/// PARAMS:
/// sFailReason - text label of the fail reason
PROC SetMissionFailed(String sFailReason)
IF bMissionFailed = FALSE
TRIGGER_MUSIC_EVENT("JH1_FAIL")
PRINTSTRING("Triggering music event JH1_FAIL") PRINTNL()
FailReason = sFailReason
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
MISSION_FLOW_MISSION_FAILED_WITH_REASON(FailReason)
bMissionFailed = TRUE
ENDIF
ENDPROC
// DEBUG PROCEDURES
#IF IS_DEBUG_BUILD
//PURPOSE: Moniters for any keyboard inputs that would alter the mission(debug pass etc)
PROC Debug_Options()
// Press S on keyboard to pass the mission
IF NOT IS_CUTSCENE_PLAYING()
IF IS_KEYBOARD_KEY_PRESSED(KEY_S)
IF IS_CUTSCENE_ACTIVE()
PRINTSTRING("Waiting for cutscene to stop") PRINTNL()
STOP_CUTSCENE()
REMOVE_CUTSCENE()
ENDIF
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE) //Add this in here for to guarantee it's going to get called incase something else breaks
g_sTriggerSceneAssets.ped[0] = pedContact
g_sTriggerSceneAssets.veh[0] = vehCar
MissionPassed()
ENDIF
ENDIF
// Press F on keyboard to fail the mission
IF IS_KEYBOARD_KEY_PRESSED(KEY_F)
CanMissionFail = TRUE
SetMissionFailed("")
ENDIF
// Press J to skip through stages of the mission
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
IF jSkipReady = TRUE
IF IS_CUTSCENE_ACTIVE()
PRINTSTRING("Waiting for cutscene to stop") PRINTNL()
STOP_CUTSCENE()
REMOVE_CUTSCENE()
ENDIF
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
SWITCH missionStage
CASE STAGE_DRIVE_TO_STORE
//SET_FLAGS
GetInCarText = TRUE
doneGetInCarText = TRUE
DoneCarChat = TRUE
doneGlassChat = TRUE
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_SCOUT_OUT_STORE
BREAK
CASE STAGE_SCOUT_OUT_STORE
//SET_FLAGS
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_FIND_ROOF_ENTRANCE
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
//SET_FLAGS
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_CHECK_OUT_ROOF
BREAK
CASE STAGE_CHECK_OUT_ROOF
//SET_FLAGS
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
missionStage = STAGE_DRIVE_TO_WAREHOUSE
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
ENDIF
IF NOT IS_PED_INJURED(pedContact)
IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
ENDIF
ENDIF
SET_ENTITY_COORDS(vehCar, <<721.7731, -982.6254, 23.1553>>)
SET_ENTITY_HEADING(vehCar, 89.6079)
ENDIF
ENDIF
//Set board intro cutscene to load and save reference to Lester and car
//so the heist controller can grab ownership of them and clean them up.
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE)
g_sTriggerSceneAssets.ped[0] = pedContact
g_sTriggerSceneAssets.veh[0] = vehCar
WHILE NOT HAS_CUTSCENE_LOADED()
PRINTSTRING("Waiting for cutscene to load") PRINTNL()
WAIT(0)
ENDWHILE
LOAD_SCENE(<<721.7731, -982.6254, 23.1553>>)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
iControlFlag = 2
BREAK
ENDSWITCH
ENDIF
ENDIF
// Press P to skip back through stages of the mission
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
IF PSkipReady = TRUE
IF IS_CUTSCENE_ACTIVE()
PRINTSTRING("Waiting for cutscene to stop") PRINTNL()
STOP_CUTSCENE()
REMOVE_CUTSCENE()
ENDIF
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
SWITCH missionStage
CASE STAGE_DRIVE_TO_STORE
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_DRIVE_TO_STORE
BREAK
CASE STAGE_SCOUT_OUT_STORE
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_DRIVE_TO_STORE
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_SCOUT_OUT_STORE
BREAK
CASE STAGE_CHECK_OUT_ROOF
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_FIND_ROOF_ENTRANCE
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_CHECK_OUT_ROOF
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDPROC
#ENDIF
// NON-Stage FUNCTIONS AND PROCEDURES
//This will check for anything that should fail the mission.
PROC FAIL_CHECKS()
IF CanMissionFail = TRUE
IF bMissionFailed = FALSE
IF missionStage = STAGE_CHECK_OUT_ROOF
//Fail if player gets a wanted level while on the roof top
IF playerOnRoof = TRUE
AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
PRINTSTRING("***********************~s~Michael failed to check out the roof.*************************") PRINTNL()
SetMissionFailed("FAIL_ROOF2") //~s~Michael's cover was blown.
ENDIF
//Fail if Michael drives off without checking out the roof
IF iControlFlag = 1
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vplayerStartRoofCoords) > 80
PRINTSTRING("***********************~s~Michael failed to check out the roof.*************************") PRINTNL()
SetMissionFailed("FAIL_ROOF1") //~s~Michael failed to check out the roof.
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run checks for player having a wanted level
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) != 0
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.4, -237.6, 37.3>>) < 10
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
PRINTSTRING("***********************Players entered the store with a wanted level*************************") PRINTNL()
SetMissionFailed("FAIL_BBWAN") //Michael entered the store with a wanted level.
ENDIF
ENDIF
ENDIF
//Check to see if player is trying to get to the store without hitting the trigger
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.4, -237.6, 37.3>>) < 80
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-649.311646,-218.046204,52.554173>>, <<-603.178650,-298.184631,34.903049>>, 32.500000)
IF doneWarningText = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH70", CONV_PRIORITY_MEDIUM)
//Are you crazy? This is a pedestrian zone. Turn around!
doneWarningText = TRUE
ENDIF
ELSE
//Fail if player gets too close to store in car
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-644.376892,-232.851837,35.540142>>, <<-629.327698,-251.028458,41.738682>>, 15.250000)
PRINTSTRING("***********************Player has got too close to the store in his car*************************") PRINTNL()
SetMissionFailed("FAIL_SHOP3") //Michael was spotted driving in a pedestrian zone by shop staff.
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_ENTITY_IN_ANGLED_AREA(vehCar, <<-644.376892,-232.851837,35.540142>>, <<-629.327698,-251.028458,41.738682>>, 15.250000)
PRINTSTRING("***********************Player's car has got too close to the store *************************") PRINTNL()
SetMissionFailed("FAIL_SHOP3") //Michael was spotted driving in a pedestrian zone by shop staff.
ENDIF
ENDIF
ENDIF
ENDIF
//Fail if player vehicle is destroyed
IF NOT IS_VEHICLE_DRIVEABLE(vehCar, TRUE)
PRINTSTRING("***********************Players car is not driveable*************************") PRINTNL()
SetMissionFailed("CMN_GENDEST") //~r~You destroyed the car.
ENDIF
//Fail if the vehicle is stuck on its roof
IF IS_VEHICLE_STUCK_ON_ROOF(vehCar)
PRINTSTRING("***********************Players car is stuck*************************") PRINTNL()
SetMissionFailed("FAIL_CAR") //The car is stuck.
ENDIF
IF IS_VEHICLE_FUCKED(vehCar)
PRINTSTRING("***********************Players car is fucked*************************") PRINTNL()
SetMissionFailed("CMN_GENDEST") //The car is stuck.
ENDIF
//Fail if the vehicle is stuck
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_PERMANENTLY_STUCK(vehCar)
PRINTSTRING("***********************Players car is stuck*************************") PRINTNL()
SetMissionFailed("FAIL_CAR") //The car is stuck.
ENDIF
ENDIF
//Fail if Lester is killed
IF DOES_ENTITY_EXIST(pedContact)
IF IS_PED_INJURED(pedContact)
PRINTSTRING("***********************Lester has died*************************") PRINTNL()
SetMissionFailed("FAIL_LEST") // ~r~Lester died.
ENDIF
ENDIF
//Fail if shop assistant2 is killed
IF DOES_ENTITY_EXIST(shopAssistant)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < 100
IF IS_PED_INJURED(shopAssistant)
PRINTSTRING("***********************Shop assistant2 has died*************************") PRINTNL()
SetMissionFailed("FAIL_ASS") // ~r~The shop assistant was killed.
ENDIF
ENDIF
ENDIF
//Fail if shop Guard is killed
IF DOES_ENTITY_EXIST(shopGuard)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < 100
IF IS_PED_INJURED(shopGuard)
PRINTSTRING("***********************Shop guard has died*************************") PRINTNL()
SetMissionFailed("FAIL_GUARD") // ~r~The shop guard was killed.
ENDIF
ENDIF
ENDIF
//Whilst inside the jewellers
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), Current_Ped_weapon)
//Holster players weapon if they have one equipped.
IF GunHolstered = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < 30
IF Current_Ped_weapon != WEAPONTYPE_UNARMED
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
GunHolstered = TRUE
ENDIF
ENDIF
ENDIF
//Fail if the player brings out a weapon
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < 20
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF Current_Ped_weapon != WEAPONTYPE_UNARMED
IF NOT IS_PHONE_ONSCREEN()
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF vplayerCoords.z < 46
PRINTSTRING("***********************Player was spotted carrying a weapon*************************") PRINTNL()
SetMissionFailed("FAIL_WEAP") // ~r~Michael were spotted carrying a weapon.
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Check if player is firing bullets at the store
IF IS_BULLET_IN_AREA(<<-624.5, -232.5, 36.9>>, 9)
OR IS_BULLET_IN_AREA(<<-632.1, -237.9, 37.1>>, 9)
PRINTSTRING("***********************playerCausedTroubleInsideStore = TRUE firing bullets in the shop area*************************") PRINTNL()
playerCausedTroubleInsideStore = TRUE
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-622, -231, 37>>, <<20, 14, 5>>, FALSE, TRUE, TM_ON_FOOT)
GET_CLOSEST_PED(GET_ENTITY_COORDS(PLAYER_PED_ID()), 5, TRUE, TRUE, ClosestPed, FALSE, TRUE)
//Fail if player tries to combat any peds inside the store
IF IS_PED_IN_MELEE_COMBAT(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(ClosestPed)
// PRINTSTRING("closestPed Exists") PRINTNL()
IF NOT IS_PED_INJURED(ClosestPed)
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), ClosestPed)
PRINTSTRING("***********************Player is in Melee combat inside the store*************************") PRINTNL()
playerCausedTroubleInsideStore = TRUE
ENDIF
ENDIF
ELSE
// PRINTSTRING("closestPed doesn't Exist") PRINTNL()
ENDIF
ENDIF
ENDIF
//Check if the player has killed anyone near the store
IF DOES_ENTITY_EXIST(shopGuard)
IF NOT IS_PED_INJURED(shopGuard)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopGuard) < 20
STAT_GET_INT(SP0_KILLS_INNOCENTS, iKilledPedsCloseToStore, 0)
IF iKilledPedsCloseToStore > iKilledPedsAwayFromStore
PRINTSTRING("***********************Player has killed an innocent ped less than 20m from the shop guard*************************") PRINTNL()
playerCausedTroubleInsideStore = TRUE
ENDIF
ELSE
STAT_GET_INT(SP0_KILLS_INNOCENTS, iKilledPedsAwayFromStore, 0)
ENDIF
ENDIF
ENDIF
IF playerCausedTroubleInsideStore = TRUE
PRINTSTRING("***********************MISSION FAIL FADE CALLED AS Player is in Melee combat inside the store*************************") PRINTNL()
SetMissionFailed("FAIL_SHOP2") //Michael blew his cover.
ENDIF
//Fail if you get too far away from Lester
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF missionStage = STAGE_CHECK_OUT_ROOF
IF doneReturnText = FALSE
IF DOES_BLIP_EXIST(BlipVeh)
IF Get_distance_between_peds(pedContact, PLAYER_PED_ID()) > 130
CLEAR_PRINTS()
PRINT_NOW("GOD8", DEFAULT_GOD_TEXT_TIME, 1)//~s~Return to ~b~Lester.
doneReturnText = TRUE
ENDIF
ENDIF
ENDIF
IF Get_distance_between_peds(pedContact, PLAYER_PED_ID()) > 150
PRINTSTRING("***********************player is too far away from Lester*************************") PRINTNL()
SetMissionFailed("FAIL_DIST") //Lester was abandoned.
ENDIF
ELSE
IF doneReturnText = FALSE
IF DOES_BLIP_EXIST(BlipVeh)
IF Get_distance_between_peds(pedContact, PLAYER_PED_ID()) > 70
CLEAR_PRINTS()
PRINT_NOW("GOD8", DEFAULT_GOD_TEXT_TIME, 1)//~s~Return to ~b~Lester.
doneReturnText = TRUE
ENDIF
ENDIF
ENDIF
IF Get_distance_between_peds(pedContact, PLAYER_PED_ID()) > 100
PRINTSTRING("***********************player is too far away from Lester*************************") PRINTNL()
SetMissionFailed("FAIL_DIST") //Lester was abandoned.
ENDIF
ENDIF
ENDIF
ENDIF
//Fail if player enters the office inside the store.
IF doneChatPH53 = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-625.9, -230.3, 37.2>>) < 15
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-628.614502,-227.853210,36.767178>>, <<-632.386353,-230.547195,39.406311>>, 2.750000)
IF DOES_ENTITY_EXIST(shopAssistant)
IF NOT IS_PED_INJURED(shopAssistant)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, shopAssistant, "JewelSales")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
TASK_TURN_PED_TO_FACE_ENTITY(shopAssistant, PLAYER_PED_ID(), 8000)
SET_PED_KEEP_TASK(shopAssistant, TRUE)
//commenting out as conversation has been removed from dialoguestar
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH53", CONV_PRIORITY_MEDIUM)
// //Hey! Only staff can go there.
// OfficeFail = TRUE
// doneChatPH53 = TRUE
// ENDIF
OfficeFail = TRUE
doneChatPH53 = TRUE
ENDIF
ENDIF
ENDIF
//Fail if player goes behind the counter
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-620.852295,-232.565659,36.558861>>, <<-623.239685,-229.273026,38.558861>>, 2.250000)
IF DOES_ENTITY_EXIST(shopAssistant)
IF NOT IS_PED_INJURED(shopAssistant)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, shopAssistant, "JewelSales")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
TASK_TURN_PED_TO_FACE_ENTITY(shopAssistant, PLAYER_PED_ID(), 8000)
SET_PED_KEEP_TASK(shopAssistant, TRUE)
//commenting out as conversation has been removed from dialoguestar
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH53", CONV_PRIORITY_MEDIUM)
// //Hey! Only staff can go there.
// CounterFail = TRUE
// doneChatPH53 = TRUE
// ENDIF
CounterFail = TRUE
doneChatPH53 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF doneChatPH53 = TRUE
AND OfficeFail = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
PRINTSTRING("***********************MISSION FAIL FADE CALLED AS player entered the office of the jewellers*************************") PRINTNL()
SetMissionFailed("FAIL_SHOP5") //Michael was spotted entering the managers office.
ELSE
PRINTSTRING("can't fail as conversation is on-going") PRINTNL()
ENDIF
ENDIF
IF doneChatPH53 = TRUE
AND CounterFail = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
PRINTSTRING("***********************MISSION FAIL FADE CALLED AS player went behind the counter*************************") PRINTNL()
SetMissionFailed("FAIL_SHOP6") //Michael was spotted going behind the pay desk.
ENDIF
ENDIF
// //Check for player wearing correct clothes before he's been in the store
// IF NOT IS_MICHAEL_WEARING_SUITABLE_OUTFIT()
// //Check for player wearing correct clothes before he's been in the store
// IF missionStage = STAGE_DRIVE_TO_STORE
// OR missionStage = STAGE_SCOUT_OUT_STORE
// michaelInRightClothes = FALSE
// IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("WARN_SUIT")
// PRINT_HELP_FOREVER("WARN_SUIT")
// //Get changed into a smart outfit before entering the store.
// ENDIF
// ENDIF
// //Warn player not to enter store without a suit if he gets too close to the store
// IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(shopGuard)) < 20
// IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("WARN_SUIT")
// PRINT_HELP_FOREVER("WARN_SUIT")
// //Get changed into a smart outfit before entering the store.
// ENDIF
// ENDIF
// //Fail mission if player goes into the store not wearing a suit
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
// PRINTSTRING("***********************Players entered the store with a wanted level*************************") PRINTNL()
// SetMissionFailed("FAIL_SUIT") //Michael entered the store wearing the wrong clothes.
// ENDIF
// ELSE
// IF missionStage = STAGE_DRIVE_TO_STORE
// OR missionStage = STAGE_SCOUT_OUT_STORE
// michaelInRightClothes = TRUE
// IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("WARN_SUIT")
// CLEAR_HELP()
// ENDIF
// ENDIF
// IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("WARN_SUIT")
// CLEAR_HELP()
// ENDIF
// ENDIF
ENDIF
// Wait for replay controller to finish fading
IF bMissionFailed = TRUE
IF convoskilled = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
convoskilled = TRUE
ENDIF
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
IF DOES_ENTITY_EXIST(pedContact)
DELETE_PED(pedContact)
ENDIF
IF PlayerIsInsideJewellers = TRUE
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<-660.2747, -264.2336, 35.0936>>, 114.1384)
SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<-662.3032, -265.4387, 34.9448>>, 30.6827)
ENDIF
// REMOVE_PED_COMP_ITEM_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES)
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
MissionFailed()
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Controls everything to do with the ambient scene inside the store
PROC JEWEL_STORE_AMBIENT_CONTROLLER()
IF JewelStoreModelsRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -237.4, 39>>) < 20
REQUEST_MODEL(A_M_M_BEVHILLS_01)
REQUEST_WAYPOINT_RECORDING("BB_JEW_6")
REQUEST_ANIM_DICT("amb@world_human_window_shop@male@idle_a")
JewelStoreModelsRequested = TRUE
ENDIF
ENDIF
IF ShopCustomerFrozen = FALSE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_ENTITY_PLAYING_ANIM(ShopCustomer[0], "amb@world_human_window_shop@male@idle_a", "browse_a")
FREEZE_ENTITY_POSITION(ShopCustomer[0], TRUE)
ShopCustomerFrozen = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Create the 1st customer and make them enter the store
IF JewelStoreModelsRequested = TRUE
IF PlayerIsInsideJewellers = TRUE
IF ShopCustomerTaskGiven[0] = FALSE
IF NOT DOES_ENTITY_EXIST(ShopCustomer[0])
IF HAS_MODEL_LOADED(A_M_M_BEVHILLS_01)
AND GET_IS_WAYPOINT_RECORDING_LOADED("BB_JEW_6")
AND HAS_ANIM_DICT_LOADED("amb@world_human_window_shop@male@idle_a")
ShopCustomer[0] = CREATE_PED(PEDTYPE_MISSION, A_M_M_BEVHILLS_01, <<-628.4003, -244.6562, 37.2985>>, 34.4691)
SET_MODEL_AS_NO_LONGER_NEEDED(A_M_M_BEVHILLS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ShopCustomer[0], TRUE)
TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer[0], "BB_JEW_6")
ShopCustomerTaskGiven[0] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Stop the 1st customer at the 1st counter and make him play 3 anims in a sequence before moving onto next counter.
IF ShopCustomerTaskGiven[1] = FALSE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer[0])
IF GET_PED_WAYPOINT_PROGRESS(ShopCustomer[0]) > 11
WAYPOINT_PLAYBACK_PAUSE(ShopCustomer[0], FALSE)
OPEN_SEQUENCE_TASK(shopCustomerSeq)
TASK_ACHIEVE_HEADING(NULL, 214.3621)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
CLOSE_SEQUENCE_TASK(shopCustomerSeq)
TASK_PERFORM_SEQUENCE(ShopCustomer[0], shopCustomerSeq)
CLEAR_SEQUENCE_TASK(shopCustomerSeq)
TASK_LOOK_AT_COORD(ShopCustomer[0], <<-625.7, -238.8, 37.8>>, -1, SLF_USE_TORSO, SLF_LOOKAT_HIGH)
ShopCustomerTaskGiven[1] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Resume the waypoint progress as soon as the customer has finished playing the last anim
IF ShopCustomerTaskGiven[2] = FALSE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_ENTITY_PLAYING_ANIM(ShopCustomer[0], "amb@world_human_window_shop@male@idle_a", "browse_c")
customerReadyToMoveOn = TRUE
ENDIF
IF customerReadyToMoveOn = TRUE
IF NOT IS_ENTITY_PLAYING_ANIM(ShopCustomer[0], "amb@world_human_window_shop@male@idle_a", "browse_c")
IF ShopCustomerFrozen = TRUE
FREEZE_ENTITY_POSITION(ShopCustomer[0], FALSE)
ShopCustomerFrozen = FALSE
ENDIF
TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer[0], "BB_JEW_6", 12)
customerReadyToMoveOn = FALSE
ShopCustomerTaskGiven[2] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Stop the 1st customer at the 2nd counter and make him play 3 anims in a sequence before moving onto next counter.
IF ShopCustomerTaskGiven[3] = FALSE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer[0])
IF GET_PED_WAYPOINT_PROGRESS(ShopCustomer[0]) > 18
WAYPOINT_PLAYBACK_PAUSE(ShopCustomer[0], FALSE)
OPEN_SEQUENCE_TASK(shopCustomerSeq)
TASK_ACHIEVE_HEADING(NULL, 302.2427)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
TASK_PLAY_ANIM(NULL, "amb@world_human_window_shop@male@idle_a", "browse_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)
CLOSE_SEQUENCE_TASK(shopCustomerSeq)
TASK_PERFORM_SEQUENCE(ShopCustomer[0], shopCustomerSeq)
CLEAR_SEQUENCE_TASK(shopCustomerSeq)
TASK_LOOK_AT_COORD(ShopCustomer[0], <<-617.6, -229.3, 38>>, -1, SLF_USE_TORSO, SLF_LOOKAT_HIGH)
ShopCustomerTaskGiven[3] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Resume the waypoint progress as soon as the customer has finished playing the last anim
IF ShopCustomerTaskGiven[4] = FALSE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_ENTITY_PLAYING_ANIM(ShopCustomer[0], "amb@world_human_window_shop@male@idle_a", "browse_c")
customerReadyToMoveOn = TRUE
ENDIF
IF customerReadyToMoveOn = TRUE
IF NOT IS_ENTITY_PLAYING_ANIM(ShopCustomer[0], "amb@world_human_window_shop@male@idle_a", "browse_c")
IF ShopCustomerFrozen = TRUE
FREEZE_ENTITY_POSITION(ShopCustomer[0], FALSE)
ShopCustomerFrozen = FALSE
ENDIF
TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer[0], "BB_JEW_6", 19)
ShopCustomerTaskGiven[4] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set ped as no longer needed once they've finished their cycle
IF ShopCustomerTaskGiven[5] = FALSE
IF ShopCustomerTaskGiven[4] = TRUE
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer[0])
ShopCustomerReadyToLeave = TRUE
ENDIF
IF ShopCustomerReadyToLeave = TRUE
IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer[0])
CLEAR_PED_TASKS(ShopCustomer[0])
SET_PED_AS_NO_LONGER_NEEDED(ShopCustomer[0])
REMOVE_ANIM_DICT("amb@world_human_window_shop@male@idle_a")
REMOVE_WAYPOINT_RECORDING("BB_JEW_6")
ShopCustomerTaskGiven[5] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Creates and deletes the staff inside the jewel store warehouse.
PROC JEWEL_STORE_STAFF_CONTROLLER()
//Create the shop staff if player is less than 100m from the store
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < 100
IF StoreStaffCreated = FALSE
DoorAnimStopped = FALSE
//Request the models and anim dictionaries required
IF modelsRequested = FALSE
REQUEST_MODEL(U_M_M_JEWELSEC_01)
REQUEST_MODEL(IG_JEWELASS)
REQUEST_ANIM_DICT("amb@world_human_stand_guard@male@idle_a")
REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
modelsRequested = TRUE
ENDIF
//Store the interior jewellery store in memory for loading reasons.
IF interiorPinnedInMemory = FALSE
InteriorJewelleryShop = GET_INTERIOR_AT_COORDS(<<-623, -229.7, 38.7>>)
PIN_INTERIOR_IN_MEMORY(InteriorJewelleryShop)
PRINTSTRING("GET_INTERIOR_AT_COORDS BEING CALLED") PRINTNL()
interiorPinnedInMemory = TRUE
ENDIF
//Create the staff and give them their tasks
IF interiorPinnedInMemory = TRUE
IF IS_INTERIOR_READY(InteriorJewelleryShop)
IF modelsRequested = TRUE
IF NOT DOES_ENTITY_EXIST(shopGuard)
IF HAS_MODEL_LOADED(U_M_M_JEWELSEC_01)
shopGuard = CREATE_PED(PEDTYPE_MISSION, U_M_M_JEWELSEC_01, <<-630.9388, -235.8340, 37.0570>>, 214.5493) //<<-630.8662, -235.6432, 37.0570>>, 214.5493)//<< -631.2426, -235.5237, 37.0570 >>, 295.9203)
SET_ENTITY_LOAD_COLLISION_FLAG(shopGuard, TRUE)
SET_PED_RESET_FLAG(shopGuard, PRF_ExpandPedCapsuleFromSkeleton, TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(shopGuard, TRUE)
// TASK_PLAY_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
SET_PED_KEEP_TASK(shopGuard, TRUE)
FREEZE_ENTITY_POSITION(shopGuard, TRUE)
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(shopAssistant)
REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
IF HAS_MODEL_LOADED(IG_JEWELASS)
AND HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL_SETUP")
shopAssistant = CREATE_PED(PEDTYPE_MISSION, IG_JEWELASS, <<-623.0729, -230.0248, 37.0570>>, 130.6013)//<<-623.4161, -230.4396, 37.0570>>, 120.5971)
SET_PED_PROP_INDEX(shopAssistant, ANCHOR_EYES, 0)
SET_ENTITY_LOAD_COLLISION_FLAG(shopAssistant, TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(shopAssistant, TRUE)
TASK_PLAY_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "idle_storeclerk", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
SET_PED_KEEP_TASK(shopAssistant, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(shopGuard)
AND DOES_ENTITY_EXIST(shopAssistant)
SET_MODEL_AS_NO_LONGER_NEEDED(U_M_M_JEWELSEC_01)
SET_MODEL_AS_NO_LONGER_NEEDED(IG_JEWELASS)
GuardOpeningDoorSequenceStarted = FALSE
StoreStaffCreated = TRUE
ENDIF
ELSE
//Handle the security guard opening and closing the door for the player.
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(shopGuard)
IF NOT IS_PED_INJURED(shopGuard)
//Run a control to check if player is entering/leaving or not near the guard to determine which anim to play.
// IF SyncdSceneDisrupted = FALSE
IF PlayerIsInsideJewellers = TRUE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopGuard) > 5
PlayerApproching = FALSE
// PRINTSTRING("PlayerApproching = FALSE 1") PRINTNL()
ELSE
IF GET_ENTITY_HEADING(PLAYER_PED_ID()) > 51.7575
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) < 185.4324
iPlayerNotApproachingTimer = GET_GAME_TIMER()
PlayerApproching = TRUE
// PRINTSTRING("PlayerApproching = TRUE 1") PRINTNL()
ELSE
//Have a timer before confirming that the player is not wanting the door open
IF GET_GAME_TIMER() > (iPlayerNotApproachingTimer + 2000)
PlayerApproching = FALSE
// PRINTSTRING("PlayerApproching = FALSE 2") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
IF PlayerIsInsideJewellers = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopGuard) > 7
PlayerApproching = FALSE
// PRINTSTRING("PlayerApproching = FALSE 3") PRINTNL()
ELSE
IF (GET_ENTITY_HEADING(PLAYER_PED_ID()) > 252 AND GET_ENTITY_HEADING(PLAYER_PED_ID()) < 360)
OR (GET_ENTITY_HEADING(PLAYER_PED_ID()) > 0 AND GET_ENTITY_HEADING(PLAYER_PED_ID()) < 8)
iPlayerNotApproachingTimer = GET_GAME_TIMER()
PlayerApproching = TRUE
// PRINTSTRING("PlayerApproching = TRUE 2") PRINTNL()
ELSE
//Have a timer before confirming that the player is not wanting the door open
IF GET_GAME_TIMER() > (iPlayerNotApproachingTimer + 4000)
PlayerApproching = FALSE
// PRINTSTRING("PlayerApproching = FALSE 4") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
//Open the door if player is approaching guard. but is not standing between the door and the guard.
IF GuardOpeningDoorSequenceStarted = FALSE
IF PlayerApproching = TRUE
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.071350,-236.910248,36.568245>>, <<-631.664856,-236.094299,39.306984>>, 1.000000)
IF NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "enter_guard")
AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "exit_guard")
AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "base_guard")
ShopGuardSyncdSceneOpen = CREATE_SYNCHRONIZED_SCENE(<<-631.96, -236.33, 38.21>>, << 0, 0.000, -54 >>)
TASK_SYNCHRONIZED_SCENE(shopGuard, ShopGuardSyncdSceneOpen, "MISSHEIST_JEWEL_SETUP", "enter_guard", SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS)
PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, ShopGuardSyncdSceneOpen, "enter_door", "MISSHEIST_JEWEL_SETUP", SLOW_BLEND_IN)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(ShopGuardSyncdSceneOpen, FALSE)
GuardOpeningDoorSequenceStarted = TRUE
DoorAnimStopped = FALSE
ENDIF
ENDIF
ENDIF
//Have the guard hold the door open until player is clear of doorway
IF GuardOpeningDoorSequenceStarted = TRUE
//Set flag to tell when the guard is opening the door
IF IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "enter_guard")
GuardOpeningDoor = TRUE
ENDIF
IF GuardOpeningDoor = TRUE
// IF NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "enter_guard")
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(ShopGuardSyncdSceneOpen)
OR GET_SYNCHRONIZED_SCENE_PHASE(ShopGuardSyncdSceneOpen) >= 0.96
ShopGuardSyncdSceneHold = CREATE_SYNCHRONIZED_SCENE(<<-631.96, -236.33, 38.21>>, << 0, 0.000, -54 >>)
TASK_SYNCHRONIZED_SCENE(shopGuard, ShopGuardSyncdSceneHold, "MISSHEIST_JEWEL_SETUP", "base_guard", SLOW_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS)
PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, ShopGuardSyncdSceneHold, "base_door", "MISSHEIST_JEWEL_SETUP", INSTANT_BLEND_IN)
SET_SYNCHRONIZED_SCENE_LOOPED(ShopGuardSyncdSceneHold, TRUE)
SET_PED_KEEP_TASK(shopGuard, TRUE)
GuardOpeningDoor = FALSE
DoorAnimStopped = FALSE
ENDIF
ENDIF
ENDIF
//Close the door if the guard is holding it open.
IF GuardOpeningDoorSequenceStarted = TRUE
IF IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "base_guard")
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-630.477356,-238.321152,36.588997>>, <<-631.923706,-236.355164,38.814049>>, 3.500000)
AND PlayerApproching = FALSE
ShopGuardSyncdScene = CREATE_SYNCHRONIZED_SCENE(<<-631.96, -236.33, 38.21>>, << 0, 0.000, -54 >>)
TASK_SYNCHRONIZED_SCENE(shopGuard, ShopGuardSyncdScene, "MISSHEIST_JEWEL_SETUP", "exit_guard", NORMAL_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_USE_PHYSICS)
PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, ShopGuardSyncdScene, "exit_door", "MISSHEIST_JEWEL_SETUP", NORMAL_BLEND_IN)
SET_SYNCHRONIZED_SCENE_LOOPED(ShopGuardSyncdScene, FALSE)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(ShopGuardSyncdScene, FALSE)
SET_PED_KEEP_TASK(shopGuard, TRUE)
DoorAnimStopped = FALSE
ENDIF
ENDIF
//Set flag to tell when the guard is closing the door to allow for the opening sequence to begin again if necessary.
IF IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "exit_guard")
GuardOpeningDoorSequenceStarted = FALSE
ENDIF
ENDIF
//Play a looped idle anim if door has been closed and player is not approaching it.
IF GuardOpeningDoorSequenceStarted = FALSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-630.477356,-238.321152,36.588997>>, <<-631.923706,-236.355164,38.814049>>, 3.500000)
AND PlayerApproching = FALSE
IF NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a")
AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "enter_guard")
AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "exit_guard")
AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL_SETUP", "base_guard")
AND GuardOpeningDoor = FALSE
//Create the sync'd scene for the sweatshop workers to play their anims.
TASK_PLAY_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a", REALLY_SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
SET_PED_KEEP_TASK(shopGuard, TRUE)
ENDIF
//Set the doors to closed if guard is playing idle anim
IF IS_ENTITY_PLAYING_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a")
GET_STATE_OF_CLOSEST_DOOR_OF_TYPE(P_JEWEL_DOOR_L, <<-632, -236, 38>>, bLockstate, fOpenRatio)
IF fOpenRatio <> 0
IF DoorAnimStopped = FALSE
fOpenRatio = 0
bLockstate = TRUE
IF IS_SYNCHRONIZED_SCENE_RUNNING(ShopGuardSyncdScene)
PRINTSTRING("ShopGuardSyncdScene is running ") PRINTNL()
STOP_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, NORMAL_BLEND_OUT)
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(P_JEWEL_DOOR_L, <<-632, -236, 38>>, bLockstate, fOpenRatio)
DoorAnimStopped = TRUE
ELSE
PRINTSTRING("ShopGuardSyncdScene is not running ") PRINTNL()
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(P_JEWEL_DOOR_L, <<-632, -236, 38>>, bLockstate, fOpenRatio)
DoorAnimStopped = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// ENDIF
// //Run checks here that should cancel any anim and put the guard and door back to idle if the player is fucking around.
// //If guard is starting the open door anim but player gets between him and the door, cancel his anim and set him back to idle
// IF SyncdSceneDisrupted = FALSE
// IF IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL", "enter_guard")
// // PRINTSTRING("anim phase is ") PRINTFLOAT(GET_SYNCHRONIZED_SCENE_PHASE(ShopGuardSyncdScene)) PRINTNL()
// IF GET_SYNCHRONIZED_SCENE_PHASE(ShopGuardSyncdScene) < 0.45
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.621216,-236.748566,36.441540>>, <<-630.985107,-236.279022,39.307037>>, 1.000000)
// CLEAR_PED_TASKS(shopGuard)
// STOP_SYNCHRONIZED_ENTITY_ANIM(shopGuard, INSTANT_BLEND_OUT, TRUE)
// STOP_SYNCHRONIZED_MAP_ENTITY_ANIM(<<-631.96, -236.33, 38.21>>, 2, P_JEWEL_DOOR_L, INSTANT_BLEND_OUT)
// SyncdSceneDisrupted = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// IF SyncdSceneDisrupted = TRUE
// IF NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a")
// AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL", "enter_guard")
// AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL", "exit_guard")
// AND NOT IS_ENTITY_PLAYING_ANIM(shopGuard, "MISSHEIST_JEWEL", "base_guard")
// //Create the sync'd scene for the sweatshop workers to play their anims.
// TASK_PLAY_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
// SET_PED_KEEP_TASK(shopGuard, TRUE)
// ENDIF
//
// IF IS_ENTITY_PLAYING_ANIM(shopGuard, "amb@world_human_stand_guard@male@idle_a", "idle_a")
// SyncdSceneDisrupted = FALSE
// ENDIF
// ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//Reset flags
IF StoreStaffCreated = TRUE
StoreStaffCreated = FALSE
ENDIF
IF modelsRequested = TRUE
REMOVE_ANIM_DICT("amb@world_human_stand_guard@male@idle_a")
REMOVE_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
SET_MODEL_AS_NO_LONGER_NEEDED(U_M_M_JEWELSEC_01)
SET_MODEL_AS_NO_LONGER_NEEDED(IG_JEWELASS)
modelsRequested = FALSE
ENDIF
//Delete peds
IF DOES_ENTITY_EXIST(shopGuard)
DELETE_PED(shopGuard)
ENDIF
IF DOES_ENTITY_EXIST(shopAssistant)
DELETE_PED(shopAssistant)
ENDIF
//Remove interior from memory
IF interiorPinnedInMemory = TRUE
UNPIN_INTERIOR(InteriorJewelleryShop)
interiorPinnedInMemory = FALSE
ENDIF
ENDIF
ENDPROC
//PURPOSE: Creates and deletes the workers inside the sweatshop warehouse.
PROC SWEATSHOP_AMBIENT_CONTROLLER()
//
// IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<718.1, -975.5, 23.6>>) < 35
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<717.4, -964.4, 30>>, <<20,20,20>>)
// SweatshopPedsRequired = TRUE
// ELSE
// SweatshopPedsRequired = FALSE
// ENDIF
// ENDIF
//Run a check to see if player is inside the warehouse or not.
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<718.1, -975.5, 23.6>>, <<5,5,5>>)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<720.109497,-974.879761,23.414156>>, <<716.210571,-974.832031,25.664173>>, 1.000000)
PlayerInsideWarehouse = TRUE
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<714.390991,-976.440125,22.644867>>, <<721.805359,-976.489441,24.898579>>, 1.750000)
PlayerInsideWarehouse = FALSE
ENDIF
ENDIF
IF PlayerInsideWarehouse = TRUE
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), Current_Ped_weapon)
IF Current_Ped_weapon <> WEAPONTYPE_UNARMED
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
ENDIF
// IF SweatshopPedsRequired = TRUE
//
// IF SweatshopPedsCreated = FALSE
// REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
// REQUEST_MODEL(S_F_Y_SWEATSHOP_01)
// REQUEST_MODEL(PROP_IRON_01)
// REQUEST_MODEL(v_ind_ss_chair01)
// REQUEST_MODEL(v_ind_ss_chair2)
// REQUEST_MODEL(prop_sewing_machine)
//
// //Create the workers
// IF HAS_MODEL_LOADED(S_F_Y_SWEATSHOP_01)
// //Ironer
// IF NOT DOES_ENTITY_EXIST(WorkshopPed[0])
// WorkshopPed[0] = CREATE_PED(PEDTYPE_MISSION, S_F_Y_SWEATSHOP_01, <<711.6627, -968.0543, 29.3956>>, 260.2629)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[0], INT_TO_ENUM(PED_COMPONENT,0), 1, 1, 0) //(head)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[0], INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[0], INT_TO_ENUM(PED_COMPONENT,3), 1, 2, 0) //(uppr)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[0], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
// ENDIF
// //Sewer 1
// IF NOT DOES_ENTITY_EXIST(WorkshopPed[1])
// WorkshopPed[1] = CREATE_PED(PEDTYPE_MISSION, S_F_Y_SWEATSHOP_01, <<714.9799, -967.7026, 29.3956>>, 83.3026)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[1], INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[1], INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[1], INT_TO_ENUM(PED_COMPONENT,3), 1, 3, 0) //(uppr)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[1], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
// ENDIF
// //Sewer 2
// IF NOT DOES_ENTITY_EXIST(WorkshopPed[2])
// WorkshopPed[2] = CREATE_PED(PEDTYPE_MISSION, S_F_Y_SWEATSHOP_01, <<716.0836, -962.3854, 29.3956>>, 187.4468)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[2], INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[2], INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[2], INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
// SET_PED_COMPONENT_VARIATION(WorkshopPed[2], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
// ENDIF
// ENDIF
//
// //Iron prop for Ironer
// IF HAS_MODEL_LOADED(PROP_IRON_01)
// IF NOT DOES_ENTITY_EXIST(IronProp)
// IF DOES_ENTITY_EXIST(WorkshopPed[0])
// IF NOT IS_PED_INJURED(WorkshopPed[0])
// IronProp = CREATE_OBJECT(PROP_IRON_01, <<712.2, -967.8, 30.6>>)
//// ATTACH_ENTITY_TO_ENTITY(IronProp, WorkshopPed[0], 26, <<0.09, 0.07, 0.07>>, <<-103.996, 32.6619, 14.2599>>, TRUE, TRUE)
// ATTACH_ENTITY_TO_ENTITY(IronProp, WorkshopPed[0], GET_PED_BONE_INDEX(WorkshopPed[0], BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>)
// SET_MODEL_AS_NO_LONGER_NEEDED(PROP_IRON_01)
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// //Seat 1 under sewer at top of stairs
// IF HAS_MODEL_LOADED(v_ind_ss_chair01)
// IF NOT DOES_ENTITY_EXIST(ChairProp[0])
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[2])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[2], TRUE, TRUE)
// ChairProp[0] = g_sTriggerSceneAssets.object[2]
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair01)
// ELSE
// CREATE_MODEL_HIDE(<<716.2011, -962.5433, 29.363>>, 1, v_ind_ss_chair01, TRUE)
// ChairProp[0] = CREATE_OBJECT(v_ind_ss_chair01, <<716.2011, -962.5433, 29.363>>)
// SET_ENTITY_ROTATION(ChairProp[0], <<0.0000, 0.0000, 4.6800>>)
// SET_ENTITY_QUATERNION(ChairProp[0], 0.0000, 0.0000, 0.0408, 0.9992)
// FREEZE_ENTITY_POSITION(ChairProp[0], TRUE)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair01)
// ENDIF
// ENDIF
// ENDIF
//
// //Seat 2 under sewer opposite ironing lady
// IF HAS_MODEL_LOADED(v_ind_ss_chair2)
// IF NOT DOES_ENTITY_EXIST(ChairProp[1])
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[3])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[3], TRUE, TRUE)
// ChairProp[1] = g_sTriggerSceneAssets.object[3]
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair2)
// ELSE
// CREATE_MODEL_HIDE(<<714.7697, -967.7910, 29.3672>>, 1, v_ind_ss_chair2, TRUE)
// ChairProp[1] = CREATE_OBJECT(v_ind_ss_chair2, <<714.7697, -967.7910, 29.3672>>)
// SET_ENTITY_ROTATION(ChairProp[1], <<0.0000, 0.0000, -92.5307>>)
// SET_ENTITY_QUATERNION(ChairProp[1], -0.0000, 0.0000, 0.7225, -0.6913)
// FREEZE_ENTITY_POSITION(ChairProp[1], TRUE)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair2)
// ENDIF
// ENDIF
// ENDIF
//
// //Sewing machine 1 under sewer at top of stairs
// IF HAS_MODEL_LOADED(prop_sewing_machine)
// IF NOT DOES_ENTITY_EXIST(SewingProp[0])
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[4])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[4], TRUE, TRUE)
// SewingProp[0] = g_sTriggerSceneAssets.object[4]
// ELSE
// CREATE_MODEL_HIDE(<<716.0047, -963.1053, 30.5499>>, 1, prop_sewing_machine, TRUE)
// SewingProp[0] = CREATE_OBJECT(prop_sewing_machine, <<716.0047, -963.1053, 30.3424>>)
// SET_ENTITY_ROTATION(SewingProp[0], <<0.0000, 0.0000, 180.0000>>)
// SET_ENTITY_QUATERNION(SewingProp[0], 0.0000, 0.0000, 1.0000, 0.0000)
// FREEZE_ENTITY_POSITION(SewingProp[0], TRUE)
// ENDIF
// ENDIF
// ENDIF
//
// //Sewing machine 2 under sewer opposite ironing lady
// IF HAS_MODEL_LOADED(prop_sewing_machine)
// IF NOT DOES_ENTITY_EXIST(SewingProp[1])
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[5])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[5], TRUE, TRUE)
// SewingProp[1] = g_sTriggerSceneAssets.object[5]
// ELSE
// CREATE_MODEL_HIDE(<<714.2352, -967.4576, 30.3425>>, 1, prop_sewing_machine, TRUE)
// SewingProp[1] = CREATE_OBJECT(prop_sewing_machine, <<714.2352, -967.4576, 30.135>>)
// SET_ENTITY_ROTATION(SewingProp[1], <<0.0000, 0.0000, 90.0000>>)
// SET_ENTITY_QUATERNION(SewingProp[1], 0.0000, 0.0000, 0.7071, 0.7071)
// FREEZE_ENTITY_POSITION(SewingProp[1], TRUE)
// ENDIF
// ENDIF
// ENDIF
//
// //Start sync'd scene once all entities have been created
// IF DOES_ENTITY_EXIST(ChairProp[0])
// AND DOES_ENTITY_EXIST(ChairProp[1])
// AND DOES_ENTITY_EXIST(IronProp)
// AND DOES_ENTITY_EXIST(WorkshopPed[0])
// AND DOES_ENTITY_EXIST(WorkshopPed[1])
// AND DOES_ENTITY_EXIST(WorkshopPed[2])
// AND DOES_ENTITY_EXIST(SewingProp[0])
// AND DOES_ENTITY_EXIST(SewingProp[1])
//
// //Create the sync'd scene for the sweatshop workers to play their anims.
// SyncdScene1 = CREATE_SYNCHRONIZED_SCENE(<< 710.150, -964.900, 29.400 >>, << 0, 0.000, 0.000 >>)
//
// //Start anims for sync'd scene on the 3 sewers.
// IF HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL_SETUP")
// IF NOT IS_PED_INJURED(WorkshopPed[0])
// CLEAR_PED_TASKS(WorkshopPed[0])
// TASK_SYNCHRONIZED_SCENE(WorkshopPed[0], SyncdScene1, "MISSHEIST_JEWEL_SETUP", "Ironing_Idle_Character_A", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_LOOP_WITHIN_SCENE|SYNCED_SCENE_USE_PHYSICS)
// SET_PED_KEEP_TASK(WorkshopPed[0], TRUE)
// ENDIF
// IF NOT IS_PED_INJURED(WorkshopPed[1])
// CLEAR_PED_TASKS(WorkshopPed[1])
// TASK_SYNCHRONIZED_SCENE(WorkshopPed[1], SyncdScene1, "MISSHEIST_JEWEL_SETUP", "Sewing_Idle_01_Character_B", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_LOOP_WITHIN_SCENE|SYNCED_SCENE_USE_PHYSICS)
// SET_PED_KEEP_TASK(WorkshopPed[1], TRUE)
// ENDIF
// IF NOT IS_PED_INJURED(WorkshopPed[2])
// CLEAR_PED_TASKS(WorkshopPed[2])
// TASK_SYNCHRONIZED_SCENE(WorkshopPed[2], SyncdScene1, "MISSHEIST_JEWEL_SETUP", "Sewing_Idle_02_Character_C", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_LOOP_WITHIN_SCENE|SYNCED_SCENE_USE_PHYSICS)
// SET_PED_KEEP_TASK(WorkshopPed[2], TRUE)
// ENDIF
//
// SET_SYNCHRONIZED_SCENE_LOOPED(SyncdScene1, TRUE)
//
// SET_MODEL_AS_NO_LONGER_NEEDED(S_F_Y_SWEATSHOP_01)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair2)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair01)
// SET_MODEL_AS_NO_LONGER_NEEDED(PROP_IRON_01)
// SET_MODEL_AS_NO_LONGER_NEEDED(prop_sewing_machine)
// REMOVE_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
//
// SweatshopPedsCreated = TRUE
// ENDIF
// ENDIF
//
// ENDIF
//
// ELSE
//
// //Delete everything to save memory when player leaves the area.
// IF SweatshopPedsCreated = TRUE
//
// //Delete all peds and objects
// IF DOES_ENTITY_EXIST(IronProp)
// DELETE_OBJECT(IronProp)
// ENDIF
// IF DOES_ENTITY_EXIST(ChairProp[0])
// DELETE_OBJECT(ChairProp[0])
// ENDIF
// IF DOES_ENTITY_EXIST(ChairProp[1])
// DELETE_OBJECT(ChairProp[1])
// ENDIF
// IF DOES_ENTITY_EXIST(SewingProp[0])
// DELETE_OBJECT(SewingProp[0])
// ENDIF
// IF DOES_ENTITY_EXIST(SewingProp[1])
// DELETE_OBJECT(SewingProp[1])
// ENDIF
//
// IF DOES_ENTITY_EXIST(WorkshopPed[0])
// DELETE_PED(WorkshopPed[0])
// ENDIF
// IF DOES_ENTITY_EXIST(WorkshopPed[1])
// DELETE_PED(WorkshopPed[1])
// ENDIF
// IF DOES_ENTITY_EXIST(WorkshopPed[2])
// DELETE_PED(WorkshopPed[2])
// ENDIF
//// //Delete Guadaloupe now for good.
//// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[4])
//// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[4], TRUE, TRUE)
//// GuadaloupePed = g_sTriggerSceneAssets.ped[4]
//// CLEAR_PED_TASKS(GuadaloupePed)
//// DELETE_PED(GuadaloupePed)
//// ENDIF
//
// SET_MODEL_AS_NO_LONGER_NEEDED(S_F_Y_SWEATSHOP_01)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair2)
// SET_MODEL_AS_NO_LONGER_NEEDED(v_ind_ss_chair01)
// SET_MODEL_AS_NO_LONGER_NEEDED(PROP_IRON_01)
// SET_MODEL_AS_NO_LONGER_NEEDED(prop_sewing_machine)
// REMOVE_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
//
// SweatshopPedsCreated = FALSE
//
// ENDIF
//
// ENDIF
ENDPROC
//PURPOSE: Handles dialogue if player enter's mod shop
PROC CHECK_FOR_MOD_SHOP()
//Pause the chat on route to the jewellers if player goes into mod shop
IF missionStage = STAGE_DRIVE_TO_STORE
IF DoneCarChat = TRUE
AND doneGlassChat = FALSE
IF PausedSTP12cChat = FALSE
IF IS_PLAYER_IN_SHOP_OF_TYPE(SHOP_TYPE_CARMOD)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
STP12c_StartLine = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
PausedSTP12cChat = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_PLAYER_IN_SHOP_OF_TYPE(SHOP_TYPE_CARMOD)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_STP12c", STP12c_StartLine, CONV_PRIORITY_MEDIUM)
PausedSTP12cChat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Pause the chat on way back to warehouse if player goes into mod shop
IF missionStage = STAGE_DRIVE_TO_WAREHOUSE
IF iControlFlag > 1
IF PausedSTP13Chat = FALSE
IF IS_PLAYER_IN_SHOP_OF_TYPE(SHOP_TYPE_CARMOD)
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
STP13_StartLine = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
PausedSTP13Chat = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_PLAYER_IN_SHOP_OF_TYPE(SHOP_TYPE_CARMOD)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_STP13", STP13_StartLine, CONV_PRIORITY_MEDIUM)
PausedSTP13Chat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE:Handles Lester dialogue about the cops if player has a wanted level and is in the car with Lester
PROC LESTER_WANTED_CHAT()
//Do some dialogue from Lester if player is in the car with Lester
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF doneWantedChat = TRUE
doneWantedChat = FALSE
ENDIF
ELSE
IF doneWantedChat = FALSE
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_WANT", CONV_PRIORITY_MEDIUM)
//Maybe bringing the authorities along is not such a good idea.
//I'm thinking we should ditch the police escort.
//Cops while we case the joint? Not so smart.
doneWantedChat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// MISSION STAGES
//Beginning of mission will start with a short cutscene of Player and Lester looking at the planning board.
PROC DO_STAGE_OPENING_CUTSCENE()
// REQUEST_WAYPOINT_RECORDING("H3SET1_BUDDY6")
// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_BUDDY6")
// WAIT(0)
// ENDWHILE
IF iControlFlag = 0
//Reset Flags
cutsceneSkipped = FALSE
hasStartAreaBeenCleanedUp = FALSE
syncSceneStarted = FALSE
ScreenFadedIn = FALSE
// timeOfDayChanged = FALSE
REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
//Set flags
iCutsceneStage = 0
iControlFlag = 1
ENDIF
IF iControlFlag = 1
SWITCH iCutsceneStage
CASE 0
//Do a load scene now to help load in the interior. Mainly for if a repeat play is used.
// IF IS_SCREEN_FADED_OUT()
// LOAD_SCENE(<<713.1, -963.4, 29.9>>)
// ENDIF
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
//Create Michaels car
IF NOT DOES_ENTITY_EXIST(vehCar)
WHILE NOT CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, vCarSpawnCoords, fCarSpawnHeading)
PRINTSTRING("Stuck waiting for players car to be created..") PRINTNL()
WAIT(0)
ENDWHILE
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
// WHILE NOT HAS_CUTSCENE_LOADED()
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// WAIT(0)
// ENDWHILE
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//Register entities for cutscene
//Lester
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[0], TRUE, TRUE)
pedContact = g_sTriggerSceneAssets.ped[0]
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
//Register Lester
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
ENDIF
//Create Lester incase mission is being replayed after already been played as he wont exist as the trigger scene is skipped.
IF NOT DOES_ENTITY_EXIST(pedContact)
REQUEST_NPC_PED_MODEL(CHAR_LESTER)
WHILE NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
PRINTSTRING("Waiting on NPC Lester loading") PRINTNL()
WAIT(0)
ENDWHILE
CREATE_NPC_PED_ON_FOOT(pedContact, CHAR_LESTER, <<718.6170, -964.8593, 29.3956>>, 120.4053)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_NPC_PED_MODEL(CHAR_LESTER))
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedContact, PED_COMP_LEG, 1, 0)
SET_PED_PROP_INDEX(pedContact, INT_TO_ENUM(PED_PROP_POSITION,1), 0, 0)
REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(pedContact, FALSE)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_PED_CONFIG_FLAG(pedContact, PCF_LawWillOnlyAttackIfPlayerIsWanted, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[0], TRUE, TRUE)
walkingStick = g_sTriggerSceneAssets.object[0]
ENDIF
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[1])
// IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[1])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[1], TRUE, TRUE)
// WorkshopPed[0] = g_sTriggerSceneAssets.ped[1]
//// REGISTER_ENTITY_FOR_CUTSCENE(WorkshopPed[0], "worker_ironing", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// ENDIF
//
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[2])
// IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[2])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[2], TRUE, TRUE)
// WorkshopPed[1] = g_sTriggerSceneAssets.ped[2]
//// REGISTER_ENTITY_FOR_CUTSCENE(WorkshopPed[1], "worker_sewing_nearstairs", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// ENDIF
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[3])
// IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[3])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[3], TRUE, TRUE)
// WorkshopPed[2] = g_sTriggerSceneAssets.ped[3]
//// REGISTER_ENTITY_FOR_CUTSCENE(WorkshopPed[2], "worker_sewing_nearoffice", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// ENDIF
//Register players car
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
REGISTER_ENTITY_FOR_CUTSCENE(vehCar, "Michaels_car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
ENDIF
// //Delete the iron from trigger scene
// IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[1])
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[1], TRUE, TRUE)
// DELETE_OBJECT(g_sTriggerSceneAssets.object[1])
// ENDIF
// IF DOES_ENTITY_EXIST(walkingStick)
// REGISTER_ENTITY_FOR_CUTSCENE(walkingStick, "WalkingStick_Lester", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
// ENDIF
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_HEIST_JEWELRY_1)
//Stop the new load scene now
IF IS_REPEAT_PLAY_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
// //Kill the timelapse camera
// SET_TODS_CUTSCENE_RUNNING(FALSE)
//Configure script systems into a safe mode.
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//Set peds up for dialogue
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
// CREATE_MODEL_HIDE(<<709.98, -963.53, 30.55>>, 3, v_ilev_ss_door02, TRUE)
SETTIMERA(0)
// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
iCutsceneStage ++
ENDIF
BREAK
CASE 1
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_PRESSED(KEY_J)
IF NOT HAS_CUTSCENE_FINISHED()
STOP_CUTSCENE()
ENDIF
ENDIF
#ENDIF
IF IS_CUTSCENE_PLAYING()
//Make sure to fade in now that the cutscene has started
IF ScreenFadedIn = FALSE
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT)
ScreenFadedIn = TRUE
ENDIF
IF IS_SCREEN_FADED_IN()
ScreenFadedIn = TRUE
ENDIF
ENDIF
IF GET_CUTSCENE_TIME() > 75000
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
ELSE
IF GET_CUTSCENE_TIME() > CUTSCENE_SKIP_DELAY
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
cutsceneSkipped = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(walkingStick)
DELETE_OBJECT(walkingStick)
ENDIF
//clear start area for cutscene as soon as it starts.
IF IS_CUTSCENE_ACTIVE()
IF hasStartAreaBeenCleanedUp = FALSE
CLEAR_AREA(<<717, -978, 24>>, 100, TRUE, TRUE)
//Move vehicles to a safe area
IF DOES_ENTITY_EXIST(playersStartCar)
IF IS_VEHICLE_DRIVEABLE(playersStartCar)
IF GET_ENTITY_MODEL(playersStartCar) != TAILGATER
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(playersStartCar))
SET_ENTITY_COORDS(playersStartCar, <<686.8995, -985.1403, 22.3440>>)
SET_ENTITY_HEADING(playersStartCar, 268.5802)
ELSE
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(playersStartCar))
OR IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(playersStartCar))
OR IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(playersStartCar))
SET_ENTITY_COORDS(playersStartCar, <<706.0064, -979.6544, 23.1403>>)
SET_ENTITY_HEADING(playersStartCar, 227.0058)
ELSE
DELETE_VEHICLE(playersStartCar)
ENDIF
ENDIF
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<0.0,0.0,0.0>>, 0.0)
ELSE
DELETE_VEHICLE(playersStartCar)
ENDIF
ENDIF
ENDIF
hasStartAreaBeenCleanedUp = TRUE
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lester")
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michaels_car")
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_INJURED(pedContact)
IF cutsceneSkipped = TRUE
AND IS_SCREEN_FADED_OUT()
IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
ENDIF
ELSE
// TASK_ENTER_VEHICLE(pedContact, vehCar, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
IF HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL_SETUP")
IF syncSceneStarted = FALSE
// LesterGetInCarSyncdScene = CREATE_SYNCHRONIZED_SCENE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehCar, GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(vehcar, GET_WORLD_POSITION_OF_ENTITY_BONE(vehCar, GET_ENTITY_BONE_INDEX_BY_NAME(vehCar, "seat_pside_f")))), <<0,0,-90>>)
LesterGetInCarSyncdScene = CREATE_SYNCHRONIZED_SCENE(<<0,0,0>>, <<0,0,0>>)
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(LesterGetInCarSyncdScene, vehCar, 0)
TASK_SYNCHRONIZED_SCENE(pedContact, LesterGetInCarSyncdScene, "MISSHEIST_JEWEL_SETUP", "LESTER_GET_IN_CAR", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
// TASK_VEHICLE_PLAY_ANIM(vehCar, "MISSHEIST_JEWEL_SETUP", "lester_get_in_car_cardoor")
// PLAY_ENTITY_ANIM(vehCar, "lester_get_in_car_cardoor", "MISSHEIST_JEWEL_SETUP", NORMAL_BLEND_IN, FALSE, FALSE, FALSE, 0, ENUM_TO_INT(AF_USE_KINEMATIC_PHYSICS))
PLAY_SYNCHRONIZED_ENTITY_ANIM(vehCar, LesterGetInCarSyncdScene, "lester_get_in_car_cardoor", "MISSHEIST_JEWEL_SETUP", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS)| ENUM_TO_INT(SYNCED_SCENE_BLOCK_MOVER_UPDATE)| ENUM_TO_INT(SYNCED_SCENE_VEHICLE_ALLOW_PLAYER_ENTRY))
syncSceneStarted = TRUE
ENDIF
// ATTACH_ENTITY_TO_ENTITY(pedContact, vehCar, GET_ENTITY_BONE_INDEX_BY_NAME(vehCar, "seat_pside_f"), <<0,0,0>>, <<0,0,0>>)
// IF NOT IS_ENTITY_PLAYING_ANIM(pedContact, "MISSHEIST_JEWEL_SETUP", "LESTER_GET_IN_CAR")
// TASK_PLAY_ANIM(pedContact, "MISSHEIST_JEWEL_SETUP", "LESTER_GET_IN_CAR")
// ENDIF
// IF NOT IS_ENTITY_PLAYING_ANIM(vehCar, "MISSHEIST_JEWEL_SETUP", "lester_get_in_car_cardoor")
// TASK_VEHICLE_PLAY_ANIM(vehCar, "MISSHEIST_JEWEL_SETUP", "lester_get_in_car_cardoor")
// ENDIF
ENDIF
// TASK_ENTER_VEHICLE(pedContact, vehCar, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
ENDIF
// IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// ENDIF
// SET_ENTITY_COORDS(pedContact, <<716.0284, -983.0331, 23.1286>>)
// SET_ENTITY_HEADING(pedContact, 75.7852)
// TASK_ENTER_VEHICLE(pedContact, vehCar, DEFAULT_TIME_BEFORE_WARP, VS_FRONT_RIGHT, PEDMOVEBLENDRATIO_WALK)
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael", PLAYER_ZERO)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// TASK_ENTER_VEHICLE(PLAYER_PED_ID(), vehCar, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK, ECF_USE_LEFT_ENTRY)
// ENDIF
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
IF cutsceneSkipped = TRUE
AND IS_SCREEN_FADED_OUT()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<717.2747, -978.3644, 23.1189>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 185.8557)
ENDIF
// IF cutsceneSkipped = FALSE
// SET_ENTITY_COORDS(PLAYER_PED_ID(), <<717.3191, -978.5477, 23.1180>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 188.7111)
// ENDIF
REPLAY_STOP_EVENT()
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_ENTITY_HEADING(PLAYER_PED_ID(), 185.8557)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-15.00)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
IF cutsceneSkipped = FALSE
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //for some reason player control needs to be restored for the pitch command to work?
ENDIF
ELSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDIF
ENDIF
IF NOT CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michaels_car", PLAYER_ZERO)
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(vehCar, TRUE, TRUE, TRUE)
ENDIF
ENDIF
ENDIF
// IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michaels_car", PLAYER_ZERO)
// IF DOES_ENTITY_EXIST(vehCar)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// SET_ENTITY_COORDS(vehCar, <<717.6990, -982.7634, 23.1318>>)
// SET_ENTITY_HEADING(vehCar, 273.8153)
// ENDIF
// ENDIF
// ENDIF
// IF cutsceneSkipped = TRUE
// IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael", PLAYER_ZERO)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
// ENDIF
// ENDIF
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// ENDIF
// ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_ENTITY_HEADING(PLAYER_PED_ID(), 185.8557)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-15.00)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//ANIMPOSTFX_PLAY("SwitchSceneMichael", 0, FALSE)
ELSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDIF
ENDIF
IF HAS_CUTSCENE_FINISHED()
//Return script systems to normal.
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//Stop the doors anim from before the lead in scene.
IF NOT IS_REPEAT_PLAY_ACTIVE()
STOP_SYNCHRONIZED_MAP_ENTITY_ANIM(<<709.9813, -963.5311, 30.5453>>, 2, v_ilev_ss_door02, INSTANT_BLEND_OUT)
ENDIF
IF cutsceneSkipped = TRUE
AND IS_SCREEN_FADED_OUT()
IF NOT DOES_ENTITY_EXIST(vehCar)
WHILE NOT HAS_MODEL_LOADED(TAILGATER)
WAIT(0)
ENDWHILE
CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, vCarSpawnCoords, fCarSpawnHeading)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
SET_VEHICLE_CAN_BREAK(vehCar, FALSE)
SET_VEHICLE_HAS_STRONG_AXLES(vehCar, TRUE)
//Stat for how much damage the players car takes.
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehCar)
//Stat for what speed the player gets their car up to.
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehCar)
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_INJURED(pedContact)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
ENDIF
ENDIF
ENDIF
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
// ENDIF
// ENDIF
// PRINTSTRING("cutscneneSkipped = TRUE") PRINTNL()
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ELSE
// PRINTSTRING("cutscneneSkipped = FALSE") PRINTNL()
ENDIF
IF cutsceneSkipped = TRUE
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<717.2747, -978.3644, 23.1189>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 185.8557)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-15.00)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDIF
ENDIF
iCutsceneStage++
ENDIF
BREAK
CASE 2
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
iCutsceneStage++
BREAK
CASE 3
// REMOVE_MODEL_HIDE(<<709.98, -963.53, 30.55>>, 3, v_ilev_ss_door02)
iControlFlag = 0
missionStage = STAGE_DRIVE_TO_STORE
iCutsceneStage ++
BREAK
ENDSWITCH
ENDIF
ENDPROC
//Stage where the player has to drive Lester to the Jewellery Store.
PROC DO_STAGE_DRIVE_TO_STORE()
// IF IS_SYNCHRONIZED_SCENE_RUNNING(LesterGetInCarSyncdScene)
// IF GET_SYNCHRONIZED_SCENE_PHASE(LesterGetInCarSyncdScene) > 0.99
// IF DOES_ENTITY_EXIST(vehCar)
// AND DOES_ENTITY_EXIST(pedContact)
// STOP_SYNCHRONIZED_ENTITY_ANIM(vehCar, INSTANT_BLEND_OUT, TRUE)
// STOP_SYNCHRONIZED_ENTITY_ANIM(pedContact, INSTANT_BLEND_OUT, TRUE)
// SET_VEHICLE_DOOR_SHUT(vehCar, SC_DOOR_FRONT_RIGHT)
// ENDIF
// ENDIF
// ENDIF
SWEATSHOP_AMBIENT_CONTROLLER()
JEWEL_STORE_STAFF_CONTROLLER()
IF iControlFlag = 0
IF MissionStageBeingSkippedTo = TRUE
STAGE_SELECTOR_MISSION_SETUP()
MissionStageBeingSkippedTo = FALSE
ENDIF
// SET FLAGS
GetInCarText = FALSE
doneGetInCarText = FALSE
GoToJewellersTextDisplayed = FALSE
DoneCarChat = FALSE
doneGlassChat = FALSE
GotoCarTextDone = FALSE
clearedGodText = FALSE
doneWarningText = FALSE
// CarStopped = FALSE
PlayerEnteredShopTooSoon = FALSE
CanMissionFail = TRUE
StoreStaffCreated = FALSE
// SweatshopPedsCreated = FALSE
musicStarted[0] = FALSE
modelsRequested = FALSE
PlayerInsideWarehouse = FALSE
interiorPinnedInMemory = FALSE
doneReturnText = FALSE
PausedSTP12cChat = FALSE
PausedSTP13Chat = FALSE
// SyncdSceneDisrupted = FALSE
// SETUP
REMOVE_CUTSCENE()
//DEBUG
#IF IS_DEBUG_BUILD
jSkipReady = TRUE
PSkipReady = TRUE
#ENDIF
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-650.4, -286.5, 34.1>>, <<-670.4, -251.7, 37.5>>, FALSE)
CLEAR_AREA(<<-662.3000, -265.4466, 34.9446>>, 15, TRUE)
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehCar)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//Blips
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
ENDIF
ENDIF
ENDIF
IF NOT IS_PED_INJURED(pedContact)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
ENDIF
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), "MICHAEL")
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 1
ENDIF
IF iControlFlag = 1
//Sort out car and Lester for once their sync'd scene is finished
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_ENTITY_PLAYING_ANIM(vehCar, "MISSHEIST_JEWEL_SETUP", "lester_get_in_car_cardoor")
IF IS_SYNCHRONIZED_SCENE_RUNNING(LesterGetInCarSyncdScene)
IF GET_SYNCHRONIZED_SCENE_PHASE(LesterGetInCarSyncdScene) = 1
STOP_SYNCHRONIZED_ENTITY_ANIM(vehCar, NORMAL_BLEND_OUT, TRUE)
SET_VEHICLE_DOOR_SHUT(vehCar, SC_DOOR_FRONT_RIGHT, TRUE)
PRINTSTRING("stopping syncd scene anim on the car now.") PRINTNL()
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF IS_ENTITY_PLAYING_ANIM(pedContact, "MISSHEIST_JEWEL_SETUP", "LESTER_GET_IN_CAR")
IF IS_SYNCHRONIZED_SCENE_RUNNING(LesterGetInCarSyncdScene)
IF GET_SYNCHRONIZED_SCENE_PHASE(LesterGetInCarSyncdScene) = 1
STOP_SYNCHRONIZED_ENTITY_ANIM(pedContact, NORMAL_BLEND_OUT, TRUE)
IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
ENDIF
PRINTSTRING("stopping syncd scene and putting Lester into car.") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF PlayerEnteredShopTooSoon = TRUE
SetMissionFailed("FAIL_SHOP4") //~r~You left Lester behind.
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
playerhasbeenincar = TRUE
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_STORE")
START_AUDIO_SCENE("JSH_1_DRIVE_TO_STORE")
ENDIF
//Start the mission music
IF musicStarted[0] = FALSE
TRIGGER_MUSIC_EVENT("JH1_START")
musicStarted[0] = TRUE
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF playerhasbeenincar = TRUE
IF GotoCarTextDone = TRUE
IF clearedGodText = FALSE
CLEAR_PRINTS()
clearedGodText = TRUE
ENDIF
ENDIF
ENDIF
IF NOT IS_PED_INJURED(pedContact)
IF IS_PED_IN_VEHICLE(pedContact, vehCar)
IF IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
REMOVE_PED_FROM_GROUP(pedContact)
ENDIF
//BLIPS
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF NOT DOES_BLIP_EXIST(blipLocate)
blipLocate = CREATE_BLIP_FOR_COORD(vParkingSpace, TRUE)
ENDIF
ELSE
IF DOES_BLIP_EXIST(blipLocate)
CLEAR_PRINTS()
REMOVE_BLIP(blipLocate)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
ENDIF
IF DOES_BLIP_EXIST(blipContact)
REMOVE_BLIP(blipContact)
ENDIF
//CHAT
//opening line in dialogue
IF doneGetInCarText = FALSE
CLEAR_PRINTS()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP1", CONV_PRIORITY_MEDIUM)//Let's take a drive. Head to the jewellers in Rockford.
WAIT(0)
SETTIMERA(0)
doneGetInCarText = TRUE
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF doneGetInCarText = TRUE
IF TIMERA() > 500
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF GoToJewellersTextDisplayed = FALSE
REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
PRINT_NOW("ENTER_STORE", DEFAULT_GOD_TEXT_TIME, 1)//~s~Go to ~y~Rockford Hills.
GoToJewellersTextDisplayed = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GoToJewellersTextDisplayed = TRUE
IF doneGetInCarText = TRUE
IF DoneCarChat = FALSE
IF TIMERA() > 7000
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP12c", CONV_PRIORITY_MEDIUM)//Your FIB buddies know you're back in business....
WAIT(0)
DoneCarChat = TRUE
ENDIF
ENDIF
ELSE
IF doneGlassChat = FALSE
AND PausedSTP12cChat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_GLASS", CONV_PRIORITY_MEDIUM)//Look, we can talk about this another time. Take these glasses....
doneGlassChat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF DoneCarChat = TRUE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF NOT IS_PED_JUMPING_OUT_OF_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<vParkingSpace.x, vParkingSpace.y, 34.97223>>, <<7, 7, 4>>)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-661.279968,-267.138245,34.393761>>, <<-656.862854,-274.783630,37.700790>>, 5.750000)
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
KILL_ANY_CONVERSATION()
CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_THERE", CONV_PRIORITY_MEDIUM)
//Here we are.
//Break a leg.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 2
ENDIF
ENDIF
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<vParkingSpace.x, vParkingSpace.y, 34.97223>>, <<2.5,2.5,LOCATE_SIZE_HEIGHT>>, TRUE)
ENDIF
ENDIF
ENDIF
ELSE
IF GoToJewellersTextDisplayed = TRUE
IF NOT IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
SET_PED_AS_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
ENDIF
IF NOT DOES_BLIP_EXIST(blipContact)
blipContact = CREATE_BLIP_FOR_PED(pedContact)
CLEAR_PRINTS()
PRINT_NOW("WAIT_PED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Wait for ~b~Lester.
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DoneCarChat = TRUE
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//Blips
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DoneCarChat = TRUE
AND OfficeFail = FALSE
AND counterFail = FALSE
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
ENDIF
ENDIF
//God text
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
IF playerhasbeenincar = TRUE
IF GotoCarTextDone = FALSE
CLEAR_PRINTS()
ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(FALSE)
PRINT_NOW("GOTO_CAR2", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in your ~b~car.
GotoCarTextDone = TRUE
ENDIF
ELSE
IF GetInCarText = FALSE
CLEAR_PRINTS()
PRINT("GOTO_CAR", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get in your ~b~car.
GetInCarText = TRUE
ENDIF
ENDIF
SETTIMERB(0)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 2
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), DEFAULT_VEH_STOPPING_DISTANCE, 1, 0.2)
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), vehCar)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 0
iCutsceneStage = 0
missionStage = STAGE_SCOUT_OUT_STORE
ENDIF
ENDIF
// IF iControlFlag = 3
//
// IF DOES_ENTITY_EXIST(vehCar)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF IS_ENTITY_IN_ANGLED_AREA(vehCar, <<-661.279968,-267.138245,34.393761>>, <<-656.862854,-274.783630,37.700790>>, 5.750000)
// IF IS_VEHICLE_STOPPED(vehCar)
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
// iControlFlag = 0
// iCutsceneStage = 0
// missionStage = STAGE_SCOUT_OUT_STORE
// ENDIF
// ELSE
// //Go back to stage 1 if car goes passed the locate.
// iControlFlag = 1
// ENDIF
// ENDIF
// ENDIF
//
// ENDIF
ENDPROC
//PURPOSE:Controls the left and right movements for the glasses cam
PROC LEFT_AND_RIGHT_CONTROLLER()
IF fCamNewDirectionZCoord < -179.9
fCamNewDirectionZCoord = (fCamNewDirectionZCoord + 360)
ENDIF
IF fCamNewDirectionZCoord > 179.9
fCamNewDirectionZCoord = (fCamNewDirectionZCoord - 360)
ENDIF
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_LEFT_ONLY)
fCamNewDirectionZCoord = (fCamNewDirectionZCoord + 2)
ENDIF
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_RIGHT_ONLY)
fCamNewDirectionZCoord = (fCamNewDirectionZCoord - 2)
ENDIF
ENDPROC
//PURPOSE:Controls the up and down movements for the glasses cam
PROC UP_AND_DOWN_CONTROLLER()
//General Rule
IF fCamNewDirectionXCoord > 80
fCamNewDirectionXCoord = 80
ENDIF
IF fCamNewDirectionXCoord < -80
fCamNewDirectionXCoord = -80
ENDIF
IF (IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_UP_ONLY) AND NOT IS_LOOK_INVERTED())
OR (IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_DOWN_ONLY) AND IS_LOOK_INVERTED())
IF fCamNewDirectionXCoord < 80
fCamNewDirectionXCoord = (fCamNewDirectionXCoord + 2)
ENDIF
ENDIF
IF (IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_DOWN_ONLY) AND NOT IS_LOOK_INVERTED())
OR (IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_LOOK_UP_ONLY) AND IS_LOOK_INVERTED())
IF fCamNewDirectionXCoord > -80
fCamNewDirectionXCoord = (fCamNewDirectionXCoord - 2)
ENDIF
ENDIF
ENDPROC
//PURPOSE:Controls the FOV movements for the glasses cam
PROC FOV_CONTROLLER()
fminFOV = 27
fMaxFOV = 46
GET_SOUND_ID()
//General rule.
IF fGlassesCamFOV < fminFOV
fGlassesCamFOV = fminFOV
ENDIF
IF fGlassesCamFOV > fMaxFOV
fGlassesCamFOV = fMaxFOV
ENDIF
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN_ONLY)
IF fGlassesCamFOV > fminFOV
IF isCamZoomInSoundPlaying = FALSE
PLAY_SOUND_FRONTEND (iCamZoomInSoundID, "Camera_Zoom", "Phone_SoundSet_Glasses_Cam")
isCamZoomInSoundPlaying = TRUE
ENDIF
IF isCamZoomInSoundPlaying = TRUE
IF GET_SOUND_ID() = iCamZoomInSoundID
IF HAS_SOUND_FINISHED(iCamZoomInSoundID)
PLAY_SOUND_FRONTEND (iCamZoomInSoundID, "Camera_Zoom", "Phone_SoundSet_Glasses_Cam")
ENDIF
ENDIF
ENDIF
fGlassesCamFOV = (fGlassesCamFOV - 1)
ELSE
IF isCamZoomInSoundPlaying = TRUE
STOP_SOUND(iCamZoomInSoundID)
isCamZoomInSoundPlaying = FALSE
ENDIF
ENDIF
ELSE
IF isCamZoomInSoundPlaying = TRUE
STOP_SOUND(iCamZoomInSoundID)
isCamZoomInSoundPlaying = FALSE
ENDIF
ENDIF
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_OUT_ONLY)
IF fGlassesCamFOV < fMaxFOV
IF isCamZoomOutSoundPlaying = FALSE
PLAY_SOUND_FRONTEND (iCamZoomOutSoundID, "Camera_Zoom", "Phone_SoundSet_Glasses_Cam")
isCamZoomOutSoundPlaying = TRUE
ENDIF
IF isCamZoomOutSoundPlaying = TRUE
IF GET_SOUND_ID() = iCamZoomOutSoundID
IF HAS_SOUND_FINISHED(iCamZoomOutSoundID)
PLAY_SOUND_FRONTEND (iCamZoomOutSoundID, "Camera_Zoom", "Phone_SoundSet_Glasses_Cam")
ENDIF
ENDIF
ENDIF
fGlassesCamFOV = (fGlassesCamFOV + 1)
ELSE
IF isCamZoomOutSoundPlaying = TRUE
STOP_SOUND(iCamZoomOutSoundID)
isCamZoomOutSoundPlaying = FALSE
ENDIF
ENDIF
ELSE
IF isCamZoomOutSoundPlaying = TRUE
STOP_SOUND(iCamZoomOutSoundID)
isCamZoomOutSoundPlaying = FALSE
ENDIF
ENDIF
ENDPROC
PROC APPLY_TEMP_DEAD_ZONE(INT &iMod)
IF iMod > 0
AND iMod < 10
iMod = 0
ENDIF
IF iMod < 0
AND iMod > -10
iMod = 0
ENDIF
ENDPROC
//PURPOSE: Updates the glasses cam's position
PROC UPDATE_GLASSES_CAM()
CONST_FLOAT ZOOM_SPEED 50.0
//Convert input into rotation/zoom changes
INT i_left_stick_x, i_left_stick_y, i_right_stick_x, i_right_stick_y
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(i_left_stick_x, i_left_stick_y, i_right_stick_x, i_right_stick_y)
i_left_stick_y = FLOOR(GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SNIPER_ZOOM) * 127)
IF NOT IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
// temp deadzone
APPLY_TEMP_DEAD_ZONE(i_left_stick_x)
APPLY_TEMP_DEAD_ZONE(i_left_stick_y)
APPLY_TEMP_DEAD_ZONE(i_right_stick_x)
APPLY_TEMP_DEAD_ZONE(i_right_stick_y)
ENDIF
FLOAT f_zoom_modifier = (f_current_cam_fov - MIN_ZOOM) / (MAX_ZOOM - MIN_ZOOM) //Changes turn/zoom speed depending on how far the scope is zoomed in
//Modify input based on controller settings: can swap zoom/aim to other sticks, and invert y-look
INT i_rot_x_input = i_right_stick_y
INT i_rot_z_input = i_right_stick_x
INT i_zoom_input = i_left_stick_y
IF IS_LOOK_INVERTED()
i_rot_x_input = -i_rot_x_input
ENDIF
//Rotation
FLOAT f_x_rot_vel = -(i_rot_x_input / 128.0) * f_rotate_speed //(ROTATE_SPEED / (1.0 + (f_zoom_modifier * 10.0)))
FLOAT f_z_rot_vel = -(i_rot_z_input / 128.0) * f_rotate_speed //(ROTATE_SPEED / (1.0 + (f_zoom_modifier * 10.0)))
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
f_x_rot_vel *= 5.0
f_z_rot_vel *= 5.0
ENDIF
//When the cam is at high zoom levels, reduce the turn speed for better accuracy.
IF f_current_cam_fov <= f_scale_rotate_speed_zoom
FLOAT f_turn_modifier = (f_current_cam_fov - MAX_ZOOM) / (f_scale_rotate_speed_zoom - MAX_ZOOM)
IF f_turn_modifier < 0.05
f_turn_modifier = 0.05
ENDIF
f_x_rot_vel *= f_turn_modifier
f_z_rot_vel *= f_turn_modifier
ENDIF
VECTOR v_obj_rot = GET_CAM_ROT(GlassesCamera)
// rotate Z
IF ABSI(i_rot_z_input) > 0
v_obj_rot = v_obj_rot +@ <<0.0, 0.0, f_z_rot_vel>>
ENDIF
// rotate X
IF ABSI(i_rot_x_input) > 0
v_obj_rot = v_obj_rot +@ <<f_x_rot_vel, 0.0, 0.0>>
ENDIF
//Zoom
FLOAT f_zoom_vel = (i_zoom_input / 128.0) * (ZOOM_SPEED / (1.0 + (f_zoom_modifier * 2.0)))
BOOL bZoomed = TRUE
IF ABSI(i_zoom_input) > 0
f_current_cam_fov = f_current_cam_fov +@ f_zoom_vel
IF f_current_cam_fov <= MAX_ZOOM
f_current_cam_fov = MAX_ZOOM
bZoomed = FALSE
ENDIF
IF f_current_cam_fov >= MIN_ZOOM
f_current_cam_fov = MIN_ZOOM
bZoomed = FALSE
ENDIF
ELSE
bZoomed = FALSE
ENDIF
//Lock the look up and down so player can't look all the way down or all the way up.
IF v_obj_rot.x < -50
v_obj_rot.x = -50
ENDIF
IF v_obj_rot.x > 50
v_obj_rot.x = 50
ENDIF
//Zoom audio
IF bZoomed
IF HAS_SOUND_FINISHED(iCamZoomInSoundID)
PLAY_SOUND_FRONTEND (iCamZoomInSoundID, "Camera_Zoom", "Phone_SoundSet_Glasses_Cam")
ENDIF
ELSE
IF NOT HAS_SOUND_FINISHED(iCamZoomInSoundID)
STOP_SOUND(iCamZoomInSoundID)
ENDIF
ENDIF
//In first person mode always rotate the player to match scripted camera
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_ENTITY_ROTATION(PLAYER_PED_ID(), << 0.0, 0.0, v_obj_rot.z >>)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
ENDIF
//Update the camera
SET_CAM_ROT(GlassesCamera, v_obj_rot)
SET_CAM_FOV(GlassesCamera, f_current_cam_fov)
ENDPROC
//PURPOSE:Controls everything required for taking a picture using the glasses cam
PROC TAKING_PIC_CONTROLLER()
// PRINTSTRING("Game Timer = ") PRINTINT(GET_GAME_TIMER()) PRINTNL()
// PRINTSTRING("SecCamIsOnScreenTimer = ") PRINTINT(SecCamIsOnScreenTimer) PRINTNL()
// PRINTSTRING("VentIsOnScreenTimer = ") PRINTINT(VentIsOnScreenTimer) PRINTNL()
// PRINTSTRING("AlarmIsOnScreenTimer = ") PRINTINT(AlarmIsOnScreenTimer) PRINTNL()
// #IF IS_DEBUG_BUILD
//
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_4)
// debugX = (debugX + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_6)
// debugX = (debugX - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_8)
// debugZ = (debugZ + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_2)
// debugZ = (debugZ - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1)
// debugY = (debugY + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_3)
// debugY = (debugY - 0.1)
// ENDIF
//
// PRINTSTRING("Offset Coords are = ") PRINTVECTOR(<<debugX, debugY, debugZ>>) PRINTNL()
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<-0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<0, -0.1, 0.3>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<-0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<0, -0.1, 0.4>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<-0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<0, -0.1, 0.4>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<-0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<0.2, 0, 0>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<0, -0.1, 0.4>>), 0.1)
//
//// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[0], << 0.3, 0.2, -0.1 >>), 0.1)
//// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[0], << -0.1, 0.2, -0.3 >>), 0.1)
//// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[0], <<-0.2, -0.4, 0>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], << 0.3, 0.2, -0.1 >>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], << 0.1, -0.2, -0.3 >>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], <<-0.4, 0.1, 0.1>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<-0.3, 0, 0.2>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<0, -0.3, -0.3>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<0, 0.3, -0.3>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<-0.3, 0.1, -0.3>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<0.3, -0.1, -0.3>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<-0.1, -0.2, 0.3>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<0.1, 0.1, 0.1>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<-0.1, -0.1, 0.1>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<0, 0, -0.1>>), 0.1)
//// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<debugX, debugY, debugZ>>), 0.1)
//
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<0.1, 0.1, 0.1>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<-0.1, -0.1, 0.1>>), 0.1)
// DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<0, 0, -0.1>>), 0.1)
//
// #ENDIF
IF missionStage = STAGE_SCOUT_OUT_STORE
//Check for the security cams being snapped
IF GlassesCamActive = TRUE
IF playerTakingPhoto = TRUE
AND PhotoJustTaken = TRUE
IF DOES_ENTITY_EXIST(ObjBallCam[0])
AND IS_TRACKED_POINT_VISIBLE(iTrackedCamPoint[0])
IF IS_ENTITY_ON_SCREEN(ObjBallCam[0])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<-0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[0], <<0, -0.1, 0.3>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// SecCamIsOnScreenTimer = GET_GAME_TIMER()
CamIsOnScreen[0] = TRUE
SecurityCamObjectiveDone = TRUE
// PRINTSTRING("ObjBallCam[0] = TRUE") PRINTNL()
ELSE
// PRINTSTRING("ObjBallCam[0] = FALSE") PRINTNL()
CamIsOnScreen[0] = FALSE
ENDIF
ELSE
CamIsOnScreen[0] = FALSE
ENDIF
IF DOES_ENTITY_EXIST(ObjBallCam[1])
AND IS_TRACKED_POINT_VISIBLE(iTrackedCamPoint[1])
IF IS_ENTITY_ON_SCREEN(ObjBallCam[1])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<-0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[1], <<0, -0.1, 0.4>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// SecCamIsOnScreenTimer = GET_GAME_TIMER()
CamIsOnScreen[1] = TRUE
SecurityCamObjectiveDone = TRUE
// PRINTSTRING("ObjBallCam[1] = TRUE") PRINTNL()
ELSE
CamIsOnScreen[1] = FALSE
// PRINTSTRING("ObjBallCam[1] = FALSE") PRINTNL()
ENDIF
ELSE
CamIsOnScreen[1] = FALSE
ENDIF
IF DOES_ENTITY_EXIST(ObjBallCam[2])
AND IS_TRACKED_POINT_VISIBLE(iTrackedCamPoint[2])
IF IS_ENTITY_ON_SCREEN(ObjBallCam[2])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<-0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[2], <<0, -0.1, 0.4>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// SecCamIsOnScreenTimer = GET_GAME_TIMER()
CamIsOnScreen[2] = TRUE
SecurityCamObjectiveDone = TRUE
// PRINTSTRING("ObjBallCam[2] = TRUE") PRINTNL()
ELSE
CamIsOnScreen[2] = FALSE
// PRINTSTRING("ObjBallCam[2] = FALSE") PRINTNL()
ENDIF
ELSE
CamIsOnScreen[2] = FALSE
ENDIF
IF DOES_ENTITY_EXIST(ObjBallCam[3])
AND IS_TRACKED_POINT_VISIBLE(iTrackedCamPoint[3])
IF IS_ENTITY_ON_SCREEN(ObjBallCam[3])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<-0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<0.2, 0, 0>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallCam[3], <<0, -0.1, 0.4>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// SecCamIsOnScreenTimer = GET_GAME_TIMER()
CamIsOnScreen[3] = TRUE
SecurityCamObjectiveDone = TRUE
// PRINTSTRING("ObjBallCam[3] = TRUE") PRINTNL()
ELSE
CamIsOnScreen[3] = FALSE
// PRINTSTRING("ObjBallCam[3] = FALSE") PRINTNL()
ENDIF
ELSE
CamIsOnScreen[3] = FALSE
ENDIF
//Check for the vents being snapped
IF DOES_ENTITY_EXIST(ObjBallVent[1])
AND IS_TRACKED_POINT_VISIBLE(iTrackedVentPoint[1])
IF IS_ENTITY_ON_SCREEN(ObjBallVent[1])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], << 0.3, 0.2, -0.1 >>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], << 0.1, -0.2, -0.3 >>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[1], <<-0.4, 0.1, 0.1>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// VentIsOnScreenTimer = GET_GAME_TIMER()
VentIsOnScreen[1] = TRUE
VentObjectiveDone = TRUE
// PRINTSTRING("ObjBallVent[1] = TRUE") PRINTNL()
ELSE
VentIsOnScreen[1] = FALSE
// PRINTSTRING("ObjBallVent[1] = FALSE") PRINTNL()
ENDIF
ELSE
VentIsOnScreen[1] = FALSE
ENDIF
IF DOES_ENTITY_EXIST(ObjBallVent[2])
AND IS_TRACKED_POINT_VISIBLE(iTrackedVentPoint[2])
IF IS_ENTITY_ON_SCREEN(ObjBallVent[2])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<-0.3, 0, 0.2>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<0, -0.3, -0.3>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[2], <<0, 0.3, -0.3>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// VentIsOnScreenTimer = GET_GAME_TIMER()
VentIsOnScreen[2] = TRUE
VentObjectiveDone = TRUE
// PRINTSTRING("ObjBallVent[2] = TRUE") PRINTNL()
ELSE
VentIsOnScreen[2] = FALSE
// PRINTSTRING("ObjBallVent[2] = FALSE") PRINTNL()
ENDIF
ELSE
VentIsOnScreen[2] = FALSE
ENDIF
IF DOES_ENTITY_EXIST(ObjBallVent[3])
AND IS_TRACKED_POINT_VISIBLE(iTrackedVentPoint[3])
IF IS_ENTITY_ON_SCREEN(ObjBallVent[3])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<-0.3, 0.1, -0.3>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<0.3, -0.1, -0.3>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallVent[3], <<-0.1, -0.2, 0.3>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// VentIsOnScreenTimer = GET_GAME_TIMER()
VentIsOnScreen[3] = TRUE
VentObjectiveDone = TRUE
// PRINTSTRING("ObjBallVent[3] = TRUE") PRINTNL()
ELSE
VentIsOnScreen[3] = FALSE
// PRINTSTRING("ObjBallVent[3] = FALSE") PRINTNL()
ENDIF
ELSE
VentIsOnScreen[3] = FALSE
ENDIF
//Check for the alarm being snapped.
IF DOES_ENTITY_EXIST(ObjBallAlarm[0])
// AND IS_OBJECT_VISIBLE(ObjBallAlarm[0])
AND IS_TRACKED_POINT_VISIBLE(iTrackedAlarmPoint[0])
IF IS_ENTITY_ON_SCREEN(ObjBallAlarm[0])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<0.1, 0.1, 0.1>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<-0.1, -0.1, 0.1>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[0], <<0, 0, -0.1>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// AlarmIsOnScreenTimer = GET_GAME_TIMER()
AlarmIsOnScreen[0] = TRUE
AlarmObjectiveDone = TRUE
PRINTSTRING("ObjBallAlarm[0] = TRUE") PRINTNL()
ELSE
AlarmIsOnScreen[0] = FALSE
PRINTSTRING("ObjBallAlarm[0] = FALSE") PRINTNL()
ENDIF
ELSE
AlarmIsOnScreen[0] = FALSE
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-625.017029,-231.450577,36.307037>>, <<-616.516846,-236.969940,39.807037>>, 20.000000)
IF DOES_ENTITY_EXIST(ObjBallAlarm[1])
AND IS_TRACKED_POINT_VISIBLE(iTrackedAlarmPoint[1])
IF IS_ENTITY_ON_SCREEN(ObjBallAlarm[1])
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<0.1, 0.1, 0.1>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<-0.1, -0.1, 0.1>>), 0.1)
AND IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ObjBallAlarm[1], <<0, 0, -0.1>>), 0.1)
iSnapDialogueTimer = GET_GAME_TIMER()
// AlarmIsOnScreenTimer = GET_GAME_TIMER()
AlarmIsOnScreen[1] = TRUE
AlarmObjectiveDone = TRUE
// PRINTSTRING("ObjBallAlarm[1] = TRUE") PRINTNL()
ELSE
AlarmIsOnScreen[1] = FALSE
// PRINTSTRING("ObjBallAlarm[1] = FALSE") PRINTNL()
ENDIF
ELSE
AlarmIsOnScreen[1] = FALSE
ENDIF
ENDIF
PhotoJustTaken = FALSE
ENDIF
//Set flag for if one of the alarms is on screen or not
IF AlarmIsOnScreen[0] = TRUE
OR AlarmIsOnScreen[1] = TRUE
AnAlarmIsOnScreen = TRUE
PRINTSTRING("AnAlarmIsOnScreen = TRUE") PRINTNL()
ELSE
AnAlarmIsOnScreen = FALSE
// PRINTSTRING("AnAlarmIsOnScreen = FALSE") PRINTNL()
ENDIF
//Set flag for if one of the cameras is on screen or not
IF CamIsOnScreen[0] = TRUE
OR CamIsOnScreen[1] = TRUE
OR CamIsOnScreen[2] = TRUE
OR CamIsOnScreen[3] = TRUE
ACamIsOnScreen = TRUE
PRINTSTRING("ACamIsOnScreen = TRUE") PRINTNL()
ELSE
ACamIsOnScreen = FALSE
// PRINTSTRING("ACamIsOnScreen = FALSE") PRINTNL()
ENDIF
//Set flag for if one of the vents is on screen or not
// IF VentIsOnScreen[0] = TRUE
IF VentIsOnScreen[1] = TRUE
OR VentIsOnScreen[2] = TRUE
OR VentIsOnScreen[3] = TRUE
AVentIsOnScreen = TRUE
PRINTSTRING("AVentIsOnScreen = TRUE") PRINTNL()
ELSE
AVentIsOnScreen = FALSE
// PRINTSTRING("AVentIsOnScreen = FALSE") PRINTNL()
ENDIF
ENDIF
//**************DIALOGUE********************
//Only do dialogue when dialogue is needed and the timer is ready for a picture.
IF SnapDialogueNeeded = TRUE
AND GET_GAME_TIMER() > (iSnapDialogueTimer + 500)
// PRINTSTRING("SnapDialogueNeeded = TRUE AND GET_GAME_TIMER() > (iSnapDialogueTimer + 500) ") PRINTNL()
//Make sure everything gets mentioned if player is taking pics too quickly
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//Check for alarm being mentioned
IF AlarmHasBeenMentioned = FALSE
//If all 3 have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = TRUE
IF donePH16Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH16", CONV_PRIORITY_MEDIUM)
//Shot's come through. Camera: check. Alarm: check. Vents: check.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH16Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the alarm and cam have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = FALSE
IF donePH21Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH21", CONV_PRIORITY_MEDIUM)
//Perfect, that's the security cam and alarm. Just need the vents now.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH21Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the alarm and vent have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = FALSE
AND VentHasBeenSnapped = TRUE
IF donePH20Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH20", CONV_PRIORITY_MEDIUM)
//Good, that's the alarm and vents. Just need the security cams now.
AlarmHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH20Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the alarm has been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = FALSE
AND VentHasBeenSnapped = FALSE
IF donePH26Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH26", CONV_PRIORITY_MEDIUM)
//Great, that's the alarm. Now get the vents and security cams.
AlarmHasBeenMentioned = TRUE
SnapDialogueNeeded = FALSE
donePH26Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Check for Cam being mentioned
IF CamHasBeenMentioned = FALSE
//If all 3 have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = TRUE
IF donePH16Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH16", CONV_PRIORITY_MEDIUM)
//Shot's come through. Camera: check. Alarm: check. Vents: check.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH16Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the alarm and cam have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = FALSE
IF donePH21Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH21", CONV_PRIORITY_MEDIUM)
//Perfect, that's the security cam and alarm. Just need the vents now.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH21Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the cam and vent have been snapped
IF AlarmHasBeenSnapped = FALSE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = TRUE
IF donePH22Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH22", CONV_PRIORITY_MEDIUM)
//Great, that's the security cam and the vent. Just need the alarm now.
VentHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH22Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the Cam has been snapped
IF AlarmHasBeenSnapped = FALSE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = FALSE
IF donePH25Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH25", CONV_PRIORITY_MEDIUM)
//Ok got the security camera. Now get the alarm and vents.
CamHasBeenMentioned = TRUE
donePH25Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//Check for Vent being mentioned
IF VentHasBeenMentioned = FALSE
//If all 3 have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = TRUE
IF donePH16Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH16", CONV_PRIORITY_MEDIUM)
//Shot's come through. Camera: check. Alarm: check. Vents: check.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH16Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the alarm and Vent have been snapped
IF AlarmHasBeenSnapped = TRUE
AND CamHasBeenSnapped = FALSE
AND VentHasBeenSnapped = TRUE
IF donePH20Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH20", CONV_PRIORITY_MEDIUM)
//Good, that's the alarm and vents. Just need the security cams now.
AlarmHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH20Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the cam and vent have been snapped
IF AlarmHasBeenSnapped = FALSE
AND CamHasBeenSnapped = TRUE
AND VentHasBeenSnapped = TRUE
IF donePH22Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH22", CONV_PRIORITY_MEDIUM)
//Great, that's the security cam and the vent. Just need the alarm now.
VentHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH22Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If just the Vent has been snapped
IF AlarmHasBeenSnapped = FALSE
AND CamHasBeenSnapped = FALSE
AND VentHasBeenSnapped = TRUE
IF donePH24Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH24", CONV_PRIORITY_MEDIUM)
//Perfect. That's the vents. Now get the alarm and security cams.
VentHasBeenMentioned = TRUE
donePH24Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
// PRINTSTRING("Conversation is ongoing or queued so can't play conversation") PRINTNL()
ENDIF
//IF ALARM ON SCREEN ONLY
IF AnAlarmIsOnScreen = TRUE
AND AVentIsOnScreen = FALSE
AND ACamIsOnScreen = FALSE
AlarmHasBeenSnapped = TRUE
//IF CAMS AND VENT STILL REQUIRED
IF SecurityCamObjectiveDone = FALSE
AND VentObjectiveDone = FALSE
IF donePH26Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH26", CONV_PRIORITY_MEDIUM)
//Great, that's the alarm. Now get the vents and security cams.
AlarmHasBeenMentioned = TRUE
SnapDialogueNeeded = FALSE
donePH26Chat = TRUE
ENDIF
ENDIF
ELSE
IF AlarmHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH40", CONV_PRIORITY_MEDIUM)
//Vents and cameras still required.
//Vents and cameras please.
//My checklist reads ventilation system and CCTV.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF CAMS ONLY STILL REQUIRED
IF SecurityCamObjectiveDone = FALSE
AND VentObjectiveDone = TRUE
IF donePH20Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH20", CONV_PRIORITY_MEDIUM)
//Good, that's the alarm and vents. Just need the security cams now.
AlarmHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH20Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
IF AlarmHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH35", CONV_PRIORITY_MEDIUM)
//Just the cameras left to photograph.
//All we needs a closed circuit tv camera.
//Any of those CCTV cameras'll do.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF VENT ONLY STILL REQUIRED
IF SecurityCamObjectiveDone = TRUE
AND VentObjectiveDone = FALSE
IF donePH21Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH21", CONV_PRIORITY_MEDIUM)
//Perfect, that's the security cam and alarm. Just need the vents now.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH21Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
IF AlarmHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH36", CONV_PRIORITY_MEDIUM)
//If you can get me a shot of the vents, we're done.
//All I needs a shot of the vents.
//If you can just get me a shot of the ventilation...
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF NOTHING ELSE REQUIRED
IF SecurityCamObjectiveDone = TRUE
AND VentObjectiveDone = TRUE
IF VentHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH7", CONV_PRIORITY_MEDIUM)
//Shot of the alarm's come through.
AlarmHasBeenMentioned = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF VENTS ON SCREEN ONLY
IF AnAlarmIsOnScreen = FALSE
AND AVentIsOnScreen = TRUE
AND ACamIsOnScreen = FALSE
VentHasBeenSnapped = TRUE
//IF CAMS AND ALARM STILL REQUIRED
IF SecurityCamObjectiveDone = FALSE
AND AlarmObjectiveDone = FALSE
IF donePH24Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH24", CONV_PRIORITY_MEDIUM)
//Perfect. That's the vents. Now get the alarm and security cams.
VentHasBeenMentioned = TRUE
donePH24Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
IF VentHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH39", CONV_PRIORITY_MEDIUM)
//We've still got the alarm and the cameras on our checklist.
//I'm waiting on a shot of the alarm and a shot of a camera.
//How you getting on with the alarm and the security cameras?
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF CAMS ONLY STILL REQUIRED
IF SecurityCamObjectiveDone = FALSE
AND AlarmObjectiveDone = TRUE
IF donePH20Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH20", CONV_PRIORITY_MEDIUM)
//Good, that's the alarm and vents. Just need the security cams now.
VentHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH20Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
IF VentHasBeenMentioned = TRUE
AND AlarmHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH35", CONV_PRIORITY_MEDIUM)
//Just the cameras left to photograph.
//All we needs a closed circuit tv camera.
//Any of those CCTV cameras'll do.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF ALARM ONLY STILL REQUIRED
IF SecurityCamObjectiveDone = TRUE
AND AlarmObjectiveDone = FALSE
IF donePH22Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH22", CONV_PRIORITY_MEDIUM)
//Great, that's the security cam and the vent. Just need the alarm now.
VentHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH22Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
IF VentHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH37", CONV_PRIORITY_MEDIUM)
//Now, all I need is a shot of the alarm keypad.
//The keypad, and we're done.
//Come on, we need a shot of the alarm console.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF NOTHING ELSE REQUIRED
IF SecurityCamObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF donePH5Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH5", CONV_PRIORITY_MEDIUM)
//Alright, that's the ventilation.
VentHasBeenMentioned = TRUE
SnapDialogueNeeded = FALSE
donePH5Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF CAMS ON SCREEN ONLY
IF AnAlarmIsOnScreen = FALSE
AND AVentIsOnScreen = FALSE
AND ACamIsOnScreen = TRUE
CamHasBeenSnapped = TRUE
//IF VENTS AND ALARM STILL REQUIRED
IF VentObjectiveDone = FALSE
AND AlarmObjectiveDone = FALSE
IF donePH25Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH25", CONV_PRIORITY_MEDIUM)
//Ok got the security camera. Now get the alarm and vents.
CamHasBeenMentioned = TRUE
donePH25Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH38", CONV_PRIORITY_MEDIUM)
//We still need a shot of alarm and air vents.
//Get a snap of the air vent's, Michael.
//Ok we've got enough of the cams and alarm. Get a snap of the vents.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF ALARM ONLY STILL REQUIRED
IF VentObjectiveDone = TRUE
AND AlarmObjectiveDone = FALSE
IF donePH22Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH22", CONV_PRIORITY_MEDIUM)
//Great, that's the security cam and the vent. Just need the alarm now.
CamHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH22Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF VentHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH37", CONV_PRIORITY_MEDIUM)
//We still need a snap of the alarm, Michael.
//Ok now get a snap of the alarm system.
//We've got enough pics of the cams and vents. Get a snap of the alarm, Michael.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF VENTS ONLY STILL REQUIRED
IF VentObjectiveDone = FALSE
AND AlarmObjectiveDone = TRUE
IF donePH21Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH21", CONV_PRIORITY_MEDIUM)
//Perfect, that's the security cam and alarm. Just need the vents now.
CamHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH21Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF AlarmHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH36", CONV_PRIORITY_MEDIUM)
//We still need a shot of the air vents.
//Get a snap of the air vent's, Michael.
//Ok we've got enough of the cams and alarm. Get a snap of the vents.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF NOTHING ELSE REQUIRED
IF VentObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF donePH6Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH6", CONV_PRIORITY_MEDIUM)
//Okay, that's a security camera.
CamHasBeenMentioned = TRUE
SnapDialogueNeeded = FALSE
donePH6Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF ALARM AND VENT ON SCREEN BUT NO CAM
IF AnAlarmIsOnScreen = TRUE
AND AVentIsOnScreen = TRUE
AND ACamIsOnScreen = FALSE
AlarmHasBeenSnapped = TRUE
VentHasBeenSnapped = TRUE
//IF ALL PICS HAVE BEEN TAKEN
IF VentObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
IF donePH17Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH17", CONV_PRIORITY_MEDIUM)
//So, that's the ventilation and the alarm system.
VentHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH17Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//IF CAM STILL REQUIRED
IF VentObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
AND SecurityCamObjectiveDone = FALSE
IF donePH20Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH20", CONV_PRIORITY_MEDIUM)
//Good, that's the alarm and vents. Just need the security cams now.
VentHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH20Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF AlarmHasBeenMentioned = TRUE
AND VentHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH35", CONV_PRIORITY_MEDIUM)
//We still need a shot of the security camera's.
//Get a snap of the security camera's, Michael.
//Ok we've got the vents and alarm, get the security camera's.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF ALARM AND CAM BUT NO VENTS
IF AnAlarmIsOnScreen = TRUE
AND AVentIsOnScreen = FALSE
AND ACamIsOnScreen = TRUE
AlarmHasBeenSnapped = TRUE
CamHasBeenSnapped = TRUE
//IF ALL PICS HAVE BEEN TAKEN
IF AlarmObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND VentObjectiveDone = TRUE
IF donePH18Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH18", CONV_PRIORITY_MEDIUM)
//What we got? A security camera and the alarm system.
CamHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH18Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//IF VENT STILL REQUIRED
IF AlarmObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND VentObjectiveDone = FALSE
IF donePH21Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH21", CONV_PRIORITY_MEDIUM)
//Perfect, that's the security cam and alarm. Just need the vents now.
CamHasBeenMentioned = TRUE
AlarmHasBeenMentioned = TRUE
donePH21Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF AlarmHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH36", CONV_PRIORITY_MEDIUM)
//We still need a shot of the air vents.
//Get a snap of the air vent's, Michael.
//Ok we've got enough of the cams and alarm. Get a snap of the vents.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//IF VENT AND CAM BUT NO ALARM
IF AnAlarmIsOnScreen = FALSE
AND AVentIsOnScreen = TRUE
AND ACamIsOnScreen = TRUE
CamHasBeenSnapped = TRUE
VentHasBeenSnapped = TRUE
//IF ALL PICS HAVE BEEN TAKEN
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
IF donePH19Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH19", CONV_PRIORITY_MEDIUM)
//Great, you got a security camera and the ventilation in that shot.
VentHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH19Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//IF ALARM STILL REQUIRED
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND AlarmObjectiveDone = FALSE
IF donePH22Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH22", CONV_PRIORITY_MEDIUM)
//Great, that's the security cam and the vent. Just need the alarm now.
VentHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
donePH22Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ELSE
//Do random dialogue here
IF VentHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH37", CONV_PRIORITY_MEDIUM)
//We still need a snap of the alarm, Michael.
//Ok now get a snap of the alarm system.
//We've got enough pics of the cams and vents. Get a snap of the alarm, Michael.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//If all are on the screen
IF AnAlarmIsOnScreen = TRUE
AND AVentIsOnScreen = TRUE
AND ACamIsOnScreen = TRUE
CamHasBeenSnapped = TRUE
VentHasBeenSnapped = TRUE
AlarmHasBeenSnapped = TRUE
//Set the stat for perfect shot to true
IF statPicturePerfectSet = FALSE
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(JH1_PERFECT_PIC)
PRINTSTRING("PICTURE PERFECT STAT ACHIEVED") PRINTNL()
statPicturePerfectSet = TRUE
ENDIF
IF donePH16Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH16", CONV_PRIORITY_MEDIUM)
//Shot's come through. Camera: check. Alarm: check. Vents: check.
AlarmHasBeenMentioned = TRUE
CamHasBeenMentioned = TRUE
VentHasBeenMentioned = TRUE
donePH16Chat = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
//If none are on screen have random dialogue telling player that.
IF AnAlarmIsOnScreen = FALSE
AND AVentIsOnScreen = FALSE
AND ACamIsOnScreen = FALSE
//Do random dialogue here
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH49", CONV_PRIORITY_MEDIUM)
//What's this of? Fuck all.
//There's nothing here.
//This shot is useless to us.
//This doesn't help us.
//What am I looking at here?
//I can't see anything helpful.
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ELSE
// PRINTSTRING("SnapDialogueNeeded = FALSE OR GET_GAME_TIMER() < (iSnapDialogueTimer + 500) ") PRINTNL()
ENDIF
ENDIF
//
// //Do random dialogue if the camera needs zoomed in more.
// IF AlarmObjectiveDone = FALSE
// OR VentObjectiveDone = FALSE
// OR SecurityCamObjectiveDone = FALSE
// IF playerTakingPhoto = TRUE
// IF DOES_ENTITY_EXIST(ObjBallAlarm[0])
// IF IS_ENTITY_ON_SCREEN(ObjBallAlarm[0])
// IF fGlassesCamFOV > 30
// KILL_ANY_CONVERSATION()
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH4", CONV_PRIORITY_MEDIUM)
// //Zoom in closer Michael that's no use.
// //I can't make that one out Michael, zoom in a bit more.
// //Use the zoom on the glasses Michael.
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// FOR icount = 0 TO 3
// IF DOES_ENTITY_EXIST(ObjBallVent[icount])
// IF IS_ENTITY_ON_SCREEN(ObjBallVent[icount])
// IF fGlassesCamFOV > 30
// KILL_ANY_CONVERSATION()
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH4", CONV_PRIORITY_MEDIUM)
// //Zoom in closer Michael that's no use.
// //I can't make that one out Michael, zoom in a bit more.
// //Use the zoom on the glasses Michael.
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDFOR
// FOR icount = 0 TO 3
// IF DOES_ENTITY_EXIST(ObjBallCam[icount])
// IF IS_ENTITY_ON_SCREEN(ObjBallCam[icount])
// IF fGlassesCamFOV > 30
// KILL_ANY_CONVERSATION()
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH4", CONV_PRIORITY_MEDIUM)
// //Zoom in closer Michael that's no use.
// //I can't make that one out Michael, zoom in a bit more.
// //Use the zoom on the glasses Michael.
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDFOR
// ENDIF
// ENDIF
ENDPROC
//PURPOSE: creates the invisible balls on the cameras, vents and alarm to be used as a check for if they've had a pic taken of them.
PROC CREATE_INVISIBLE_BALLS()
IF HAS_MODEL_LOADED(PROP_BOWLING_BALL)
//Create the 4 that will cover the security cams
IF NOT DOES_ENTITY_EXIST(ObjBallCam[0])
ObjBallCam[0] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-627.5507, -229.4447, 40.1249>>)
SET_ENTITY_COLLISION(ObjBallCam[0], FALSE)
SET_ENTITY_VISIBLE(ObjBallCam[0], FALSE)
FREEZE_ENTITY_POSITION(ObjBallCam[0], TRUE)
iTrackedCamPoint[0] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedCamPoint[0], <<-627.6, -229.7, 40.3>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallCam[1])
ObjBallCam[1] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-627.4518, -240.0007, 40.1306>>)
SET_ENTITY_COLLISION(ObjBallCam[1], FALSE)
SET_ENTITY_VISIBLE(ObjBallCam[1], FALSE)
FREEZE_ENTITY_POSITION(ObjBallCam[1], TRUE)
iTrackedCamPoint[1] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedCamPoint[1], <<-627.4, -239.7, 40.3>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallCam[2])
ObjBallCam[2] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-622.4700, -236.3400, 40.1371>>)
SET_ENTITY_COLLISION(ObjBallCam[2], FALSE)
SET_ENTITY_VISIBLE(ObjBallCam[2], FALSE)
FREEZE_ENTITY_POSITION(ObjBallCam[2], TRUE)
iTrackedCamPoint[2] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedCamPoint[2], <<-622.4, -236.1, 40.3>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallCam[3])
ObjBallCam[3] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-620.2918, -224.1618, 40.1266>>)
SET_ENTITY_COLLISION(ObjBallCam[3], FALSE)
SET_ENTITY_VISIBLE(ObjBallCam[3], FALSE)
FREEZE_ENTITY_POSITION(ObjBallCam[3], TRUE)
iTrackedCamPoint[3] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedCamPoint[3], <<-620.3, -224.4, 40.3>>, 0.1)
ENDIF
//Create the 3 that will cover the air vents
// IF NOT DOES_ENTITY_EXIST(ObjBallVent[0])
// ObjBallVent[0] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-629.7500, -231.3500, 40.8671>>)
// SET_ENTITY_COLLISION(ObjBallVent[0], FALSE)
// SET_ENTITY_VISIBLE(ObjBallVent[0], FALSE)
// FREEZE_ENTITY_POSITION(ObjBallVent[0], TRUE)
// ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallVent[1])
ObjBallVent[1] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-625.0201, -237.8714, 40.8512>>)
SET_ENTITY_COLLISION(ObjBallVent[1], FALSE)
SET_ENTITY_VISIBLE(ObjBallVent[1], FALSE)
FREEZE_ENTITY_POSITION(ObjBallVent[1], TRUE)
iTrackedVentPoint[1] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedVentPoint[1], <<-625.1, -237.8, 40.8>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallVent[2])
ObjBallVent[2] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-616.7790, -233.1593, 40.9528>>)
SET_ENTITY_COLLISION(ObjBallVent[2], FALSE)
SET_ENTITY_VISIBLE(ObjBallVent[2], FALSE)
FREEZE_ENTITY_POSITION(ObjBallVent[2], TRUE)
iTrackedVentPoint[2] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedVentPoint[2], <<-616.9, -233.2, 41.0>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallVent[3])
ObjBallVent[3] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-622.7000, -224.9900, 40.9571>>)
SET_ENTITY_COLLISION(ObjBallVent[3], FALSE)
SET_ENTITY_VISIBLE(ObjBallVent[3], FALSE)
FREEZE_ENTITY_POSITION(ObjBallVent[3], TRUE)
iTrackedVentPoint[3] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedVentPoint[3], <<-622.8, -225.1, 41.1>>, 0.1)
ENDIF
//Create the 1 that will cover the alarm
IF NOT DOES_ENTITY_EXIST(ObjBallAlarm[0])
ObjBallAlarm[0] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-629.4000, -230.4400, 38.4071>>)
SET_ENTITY_COLLISION(ObjBallAlarm[0], FALSE)
SET_ENTITY_VISIBLE(ObjBallAlarm[0], FALSE)
FREEZE_ENTITY_POSITION(ObjBallAlarm[0], TRUE)
iTrackedAlarmPoint[0] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedAlarmPoint[0], <<-629.4, -230.5, 38.6>>, 0.1)
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjBallAlarm[1])
ObjBallAlarm[1] = CREATE_OBJECT(PROP_BOWLING_BALL, <<-620.1974, -223.7788, 38.4137>>)
SET_ENTITY_COLLISION(ObjBallAlarm[1], FALSE)
SET_ENTITY_VISIBLE(ObjBallAlarm[1], FALSE)
FREEZE_ENTITY_POSITION(ObjBallAlarm[1], TRUE)
iTrackedAlarmPoint[1] = CREATE_TRACKED_POINT()
SET_TRACKED_POINT_INFO(iTrackedAlarmPoint[1], <<-620.2, -223.8, 38.6>>, 0.1)
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_BOWLING_BALL)
AllBallsCreated = TRUE
trackedPointsCreated = TRUE
ENDIF
ENDPROC
//PURPOSE:Shows a short cutscene of Michael speaking to the Shop assistant.
PROC DO_CUTSCENE_OF_MICHAEL_AND_SHOP_ASSISTANT()
biscutsceneActive = TRUE
iCutsceneStage = 0
WHILE biscutsceneActive = TRUE
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP2")
CLEAR_HELP()
ENDIF
SWITCH iCutsceneStage
CASE 0
WHILE NOT HAS_CUTSCENE_LOADED()
PRINTSTRING("Waiting for cutscene to load") PRINTNL()
WAIT(0)
ENDWHILE
// REQUEST_ANIM_DICT("amb@world_human_stand_guard@male@idle_a")
REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
//Register entities with cutscene
//Shop assistant
IF NOT IS_PED_INJURED(shopAssistant)
REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "Jewellery_Assitance", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
//Configure script systems into a safe mode.
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
START_CUTSCENE()
iCutsceneStage ++
BREAK
CASE 1
//Set up exit state for the player
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
// TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), << -631.4476, -237.4267, 37.0589 >>, PEDMOVEBLENDRATIO_WALK, -1)
// TASK_FORCE_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
// SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-625.6043, -231.3043, 37.0570>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 126.2749)
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2000)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
IF VentHasBeenMentioned
AND CamHasBeenMentioned
AND AlarmHasBeenMentioned
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 1000)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jewellery_Assitance")
IF NOT IS_PED_INJURED(shopAssistant)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(shopAssistant, TRUE)
SET_ENTITY_COORDS(shopAssistant, <<-623.0729, -230.0248, 37.0570>>)
SET_ENTITY_HEADING(shopAssistant, 130.6013)
TASK_PLAY_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "idle_storeclerk", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
// TASK_PLAY_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "attendant_idle", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_SECONDARY)
SET_PED_KEEP_TASK(shopAssistant, TRUE)
ENDIF
ENDIF
IF IS_CUTSCENE_PLAYING()
IF GET_CUTSCENE_TIME() > 48000
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
ENDIF
ENDIF
IF NOT IS_CUTSCENE_ACTIVE()
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
//Reset this timer here so Lester doesn't mention about the glasses straight away.
iGlassesActivatedTimer = GET_GAME_TIMER()
//Set Flags
SpokeToStaffObjectiveDone = TRUE
biscutsceneActive = FALSE
ELSE
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
ENDIF
BREAK
ENDSWITCH
WAIT(0)
ENDWHILE
// IF NOT DOES_CAM_EXIST(StaticCam)
// StaticCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA")
// ENDIF
//
// WHILE biscutsceneActive
//
// SWITCH iCutsceneStage
// CASE 0
//
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
// SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-624.7785, -231.1901, 37.0570>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 307.5722)
// SET_CAM_PARAMS(StaticCam, <<-624.919373,-234.357590,39.807911>>,<<-23.170853,-0.000000,-9.687524>>,50.000000)
// SET_CAM_ACTIVE(StaticCam, TRUE)
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// iCutsceneStage ++
//
// BREAK
//
// CASE 1
//
// KILL_ANY_CONVERSATION()
// CLEAR_PRINTS()
// PRINT_NOW("CUT1", DEFAULT_GOD_TEXT_TIME, 1)//~s~PLACEHOLDER - SMALL CUTSCENE WILL GO HERE TO SHOW MICHAEL GETTING INFO OFF THE SHOP ASSISTANT.
// SETTIMERB(0)
// iCutsceneStage ++
//
// BREAK
//
// CASE 2
//
// IF TIMERB() > 2000
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// biscutsceneActive = FALSE
// iCutsceneStage ++
// ENDIF
// ENDIF
//
// BREAK
// ENDSWITCH
//
// WAIT(0)
//
// ENDWHILE
//
// IF biscutsceneActive = FALSE
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
// SET_CAM_ACTIVE(StaticCam, TRUE)
// DESTROY_CAM(StaticCam)
// SpokeToStaffObjectiveDone = TRUE
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// ENDIF
ENDPROC
//PURPOSE:Handles the main objective dialogue between Lester and Michael over earpiece.
PROC DIALOGUE_CONTROLLER()
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
//Do chat over earpiece while Michael heads towards the store.
IF doneGoToStoreText = TRUE
IF donePH1Chat = FALSE
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND NOT DOES_BLIP_EXIST(blipLocate)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-659.6, -269.1, 37>>) > 27
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH1", CONV_PRIORITY_MEDIUM)
//You reading me?
//Mmhmm.
//Okay. We need shots of the security features - the alarm system, ventilation, cameras.
//Okay.
donePH1Chat = TRUE
ENDIF
ENDIF
ENDIF
ELSE
//Do chat from Lester if Michael doesn't get out the car or drives around
IF NOT DOES_BLIP_EXIST(blipLocate)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_INJURED(pedContact)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
AND IS_PED_IN_VEHICLE(pedContact, vehCar)
IF NOT IS_VEHICLE_STOPPED(vehCar)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF GET_GAME_TIMER() > (iAroundChatTimer + 5000)
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_AROUND", CONV_PRIORITY_MEDIUM)
//You got to do this on foot.
//I said, leave me here.
//We don't want to arouse suspicion.
//You got to get out and walk, Michael.
iAroundChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF GET_GAME_TIMER() > (iAroundChatTimer + 5000)
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_NOGO", CONV_PRIORITY_MEDIUM)
//You're up. Vinqueef.
//I thought you wanted a score.
//Go on. Case the joint.
//You're needed in the jewel store.
iAroundChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Have some random dialogue to tell the player to go into the store to take pics.
IF PlayerIsInsideJewellers = FALSE
IF playerTakingPhoto = TRUE
IF GET_GAME_TIMER() > (iShotsBeforeStoreTimer + 5000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH67", CONV_PRIORITY_MEDIUM)
//Go inside the store Michael.
//These shots are lovely but can we focus on the job.
//What are you doing? Get inside the jewellers.
//Come on Michael this store isn't going to rob itself.
iShotsBeforeStoreTimer = GET_GAME_TIMER()
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//*********All the below dialogue should only happen when player is inside the store.**********
//Handle the taking a picture if any pics are still required
IF allpicsTaken = FALSE
IF PlayerIsInsideJewellers = TRUE
TAKING_PIC_CONTROLLER()
ENDIF
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = TRUE
AND CamHasBeenMentioned = TRUE
AND AlarmHasBeenMentioned = TRUE
AND VentHasBeenMentioned = TRUE
PRINTSTRING("AllpicsTaken being set to TRUE") PRINTNL()
AllpicsDoneTimer = GET_GAME_TIMER()
allpicsTaken = TRUE
ENDIF
ELSE
//Allow the pic controller to keep running for a few seconds to finish off all dialogue
IF GET_GAME_TIMER() < (AllpicsDoneTimer+3000)
TAKING_PIC_CONTROLLER()
ENDIF
ENDIF
//Have Lester point out what to take pics of if Michael already hasn't done so. This shouldn't start until the shop assistant has said her bit.
IF PlayerIsInsideJewellers = TRUE
//Do dialogue if Michael takes too long to activate the glasses.
IF glassesHaveBeenActivated = FALSE
IF glassesActivatedTimerStarted = FALSE
iGlassesActivatedTimer = GET_GAME_TIMER()
glassesActivatedTimerStarted = TRUE
ELSE
IF GET_GAME_TIMER() > (iGlassesActivatedTimer + 15000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_ACTIV", CONV_PRIORITY_AMBIENT_MEDIUM)
//Okay, activate the camera.
//Maybe I should have included an instruction manual. Boot up the camera.
//Are you comfortable using this equipment?
glassesActivatedTimerStarted = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do GOD TEXT now to tell player to use glasses to take pics
IF doneGodText2 = FALSE
IF NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("GOD2", DEFAULT_GOD_TEXT_TIME, 1)//~s~Use the glasses to take pictures.
doneGodText2 = TRUE
ENDIF
ENDIF
// //Have the shop assistant greet Michael when he gets close enough to her.
// IF SpokeToStaffObjectiveDone = FALSE
// //Only allow this chat if player hasn't taken all the pics yet
// IF VentObjectiveDone = FALSE
// OR SecurityCamObjectiveDone = FALSE
// OR alarmObjectiveDone = FALSE
// IF DOES_ENTITY_EXIST(shopAssistant)
// IF NOT IS_PED_INJURED(shopAssistant)
// IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopAssistant) < 4
// AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-623.723633,-234.112167,36.557037>>, <<-627.036621,-229.516586,38.557037>>, 3.500000)
// IF donePH15Chat = FALSE
// ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, shopAssistant, "JewelSales")
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH15", CONV_PRIORITY_AMBIENT_MEDIUM)
// REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
// IF HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL_SETUP")
// TASK_PLAY_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "attendant_dialogue", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
// ENDIF
// //Hello, sir. Are you just looking today? Or...
// donePH15Chat = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// IF donePH15Chat = TRUE
// AND IS_ENTITY_PLAYING_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "attendant_dialogue")
// AttendantPlayingSpeachAnim = TRUE
// ENDIF
// //Get the shop assistant to play the idle anim after she's played the dialogue one.
// IF AssistantBackToIdle = FALSE
// IF AttendantPlayingSpeachAnim = TRUE
// IF NOT IS_ENTITY_PLAYING_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "attendant_dialogue")
// REQUEST_ANIM_DICT("MISSHEIST_JEWEL_SETUP")
// IF HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL_SETUP")
// TASK_PLAY_ANIM(shopAssistant, "MISSHEIST_JEWEL_SETUP", "attendant_idle", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
// AssistantBackToIdle = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//First chat with guard saying hi as Michael enters store.
IF NOT IS_PED_INJURED(shopGuard)
IF donePH47Chat = FALSE
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 4, shopGuard, "JewelGuard")
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH47", CONV_PRIORITY_MEDIUM)
//Welcome sir.
//Thanks
donePH47Chat = TRUE
ENDIF
ENDIF
ENDIF
//Have some discriptive dialogue of the alarm keypad
IF donePH47Chat = TRUE
IF AlarmHasBeenMentioned = FALSE
AND AlarmObjectiveDone = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF donePH3Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH3", CONV_PRIORITY_MEDIUM)
//The alarm keypad is on the left when you come in. On the wall by the side door.
donePH3Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Have a timer here to allow for final pic dialogue to play before running the PH8 dialogue.
IF PH8ChatTimerStarted = FALSE
IF CamHasBeenMentioned = TRUE
AND AlarmHasBeenMentioned = TRUE
AND VentHasBeenMentioned = TRUE
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
StartPH8ChatTimer = GET_GAME_TIMER()
PH8ChatTimerStarted = TRUE
ENDIF
ENDIF
IF PH8ChatTimerStarted = TRUE
IF donePH8Chat = FALSE
IF SpokeToStaffObjectiveDone = FALSE
AND VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = TRUE
AND CamHasBeenMentioned = TRUE
AND AlarmHasBeenMentioned = TRUE
AND VentHasBeenMentioned = TRUE
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_GAME_TIMER() > (StartPH8ChatTimer + 1500)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH8", CONV_PRIORITY_MEDIUM)
//Good work. Now, speak to the assistant, and see if there's anything else we need to know.
iAllPicsTakenTimer = GET_GAME_TIMER()
donePH8Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random lines of chat if player is taking too long to speak to the assistant
IF donePH8Chat = TRUE
IF GET_GAME_TIMER() > (iAllPicsTakenTimer + 20000)
IF SpokeToStaffObjectiveDone = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_TALK", CONV_PRIORITY_MEDIUM)
//They remember the window shoppers. Talk to her.
//Charm the woman, and you can get out of there.
//She might tell us something.
iAllPicsTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do god text now to tell player to use glasses to take pics
IF doneGodText3 = FALSE
IF donePH8Chat = TRUE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND SpokeToStaffObjectiveDone = FALSE
PRINT_NOW("GOD3", DEFAULT_GOD_TEXT_TIME, 1)//~s~Speak to the ~b~shop assistant.
iGodText3Timer = GET_GAME_TIMER()
doneGodText3 = TRUE
ENDIF
IF NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("GOD3", DEFAULT_GOD_TEXT_TIME, 1)//~s~Speak to the ~b~shop assistant.
iGodText3Timer = GET_GAME_TIMER()
doneGodText3 = TRUE
ENDIF
ENDIF
ENDIF
//Do dialogue once all objectives have been met
IF donePH9Chat = FALSE
IF AlarmHasBeenMentioned = TRUE
AND VentHasBeenMentioned = TRUE
AND CamHasBeenMentioned = TRUE
IF SpokeToStaffObjectiveDone = TRUE
AND VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = TRUE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH9", CONV_PRIORITY_MEDIUM)
//Come back to me.
donePH9Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF donePH11Chat = FALSE
AND donePH12Chat = FALSE
//Do dialogue if Michael has spoken to shop assistant but hasn't taken any pics yet
IF SpokeToStaffObjectiveDone = TRUE
AND VentObjectiveDone = FALSE
AND SecurityCamObjectiveDone = FALSE
AND alarmObjectiveDone = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JSH1_CHATUP", CONV_PRIORITY_MEDIUM)
//Okay. Now you've got that out the way, can you take the photographs?
donePH11Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Do dialogue if Michael has spoken to shop assistant and has taken some pics but not all.
IF SpokeToStaffObjectiveDone = TRUE
IF VentObjectiveDone = FALSE
OR SecurityCamObjectiveDone = FALSE
OR alarmObjectiveDone = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_CHATUP2", CONV_PRIORITY_MEDIUM)
//Fine. That was what it was, but you're not done taking photographs.
donePH12Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and hasn't taken any correct pics yet.
IF glassesHaveBeenActivated = TRUE
IF VentObjectiveDone = FALSE
AND SecurityCamObjectiveDone = FALSE
AND alarmObjectiveDone = FALSE
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
PRINTSTRING("GET_GAME_TIMER() > iPicTakenTimer + 30000") PRINTNL()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_AVC", CONV_PRIORITY_MEDIUM)
//The alarm, the vents, and the cameras. Come on.
//Alarm, vents, and cameras. Get me some shots.
//Alarm, vents, and cameras remember.
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ELSE
PRINTSTRING("GET_GAME_TIMER() < iPicTakenTimer + 30000") PRINTNL()
PRINTSTRING("GET_GAME_TIMER() = ") PRINTINT(GET_GAME_TIMER()) PRINTNL()
PRINTSTRING("iPicTakenTimer = ") PRINTINT(iPicTakenTimer) PRINTNL()
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the vents and cam.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = FALSE
AND SecurityCamObjectiveDone = FALSE
AND alarmObjectiveDone = TRUE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH40", CONV_PRIORITY_MEDIUM)
//Vents and cameras still required.
//Vents and cameras please.
//My checklist reads ventilation system and CCTV.
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the vents and Alarm.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = FALSE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH38", CONV_PRIORITY_MEDIUM)
//Still need the alarm and the ventilation.
//Alarm and ventilation, Michael.
//Get me a shot of the alarm console, and a vent please.
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the alarm and cams.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = FALSE
AND alarmObjectiveDone = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH39", CONV_PRIORITY_MEDIUM)
//We've still got the alarm and the cameras on our checklist.
//I'm waiting on a shot of the alarm and a shot of a camera.
//How you getting on with the alarm and the security cameras?
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the alarm.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH37", CONV_PRIORITY_MEDIUM)
//Now, all I needs a shot of the alarm keypad.
//The keypad, and we're done.
//Come on, we need a shot of the alarm console.
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the vents.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = FALSE
AND SecurityCamObjectiveDone = TRUE
AND alarmObjectiveDone = TRUE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH36", CONV_PRIORITY_MEDIUM)
//If you can get me a shot of the vents, we're done.
//All I needs a shot of the vents.
//If you can just get me a shot of the ventilation...
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random dialogue if the player is inside the store and is taking too long to get the cams.
IF GET_GAME_TIMER() > (iPicTakenTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF VentObjectiveDone = TRUE
AND SecurityCamObjectiveDone = FALSE
AND alarmObjectiveDone = TRUE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH35", CONV_PRIORITY_MEDIUM)
//Just the cameras left to photograph.
//All we needs a closed circuit tv camera.
//Any of those CCTV cameras'll do.
iPicTakenTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
// PRINTSTRING("glassesHaveBeenActivated = FALSE") PRINTNL()
ENDIF
ENDIF
ENDPROC
PROC GLASSES_CAM_CONTROLLER()
// PRINTSTRING("fCamNewDirectionZCoord = ") PRINTFLOAT(fCamNewDirectionZCoord) PRINTNL()
// PRINTSTRING("fMaxLeftDir = ") PRINTFLOAT(fMaxLeftDir) PRINTNL()
// PRINTSTRING("fMaxRightDir = ") PRINTFLOAT(fMaxRightDir) PRINTNL()
// IF AlarmHasBeenMentioned = FALSE
// PRINTSTRING("AlarmHasBeenMentioned = FALSE") PRINTNL()
// ENDIF
// IF CamHasBeenMentioned = FALSE
// PRINTSTRING("CamHasBeenMentioned = FALSE") PRINTNL()
// ENDIF
// IF VentHasBeenMentioned = FALSE
// PRINTSTRING("VentHasBeenMentioned = FALSE") PRINTNL()
// ENDIF
// PC controls
CONTROL_ACTION caTakePhotoInput = INPUT_FRONTEND_ACCEPT
CONTROL_ACTION caExitGlassesInput = INPUT_FRONTEND_CANCEL
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
caTakePhotoInput = INPUT_ATTACK
caExitGlassesInput = INPUT_AIM
ENDIF
//Run audio for when glasses are active
IF GlassesCamActive = TRUE
AND camSetup = TRUE
IF HAS_SOUND_FINISHED(iBackGroundSoundID)
PLAY_SOUND_FRONTEND (iBackGroundSoundID, "Background_Sound", "Phone_SoundSet_Glasses_Cam")
ENDIF
ELSE
// IF iBackGroundSoundID != 0
// STOP_SOUND(iBackGroundSoundID)
// RELEASE_SOUND_ID(iBackGroundSoundID)
// iBackGroundSoundID = 0
// ENDIF
// IF iCamZoomInSoundID != 0
// STOP_SOUND(iCamZoomInSoundID)
// RELEASE_SOUND_ID(iCamZoomInSoundID)
// iCamZoomInSoundID = 0
// ENDIF
// IF iCamZoomOutSoundID != 0
// STOP_SOUND(iCamZoomOutSoundID)
// RELEASE_SOUND_ID(iCamZoomOutSoundID)
// iCamZoomOutSoundID = 0
// ENDIF
// IF iCamShootSoundID != 0
// STOP_SOUND(iCamShootSoundID)
// RELEASE_SOUND_ID(iCamShootSoundID)
// iCamShootSoundID = 0
// ENDIF
STOP_SOUND(iCamZoomInSoundID)
STOP_SOUND(iCamZoomOutSoundID)
STOP_SOUND(iCamShootSoundID)
STOP_SOUND(iBackGroundSoundID)
ENDIF
//Run this every frame to toggle the camera off and on.
IF GET_GAME_TIMER() > iGlassesCamTimer + 1000
IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CONTEXT)
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CONTEXT) //check for disabled input as we now disable player control
IF GlassesCamActive = FALSE
IF glassesHaveBeenActivated = FALSE
iPicTakenTimer = GET_GAME_TIMER()
glassesHaveBeenActivated = TRUE
ENDIF
iGlassesCamTimer = GET_GAME_TIMER()
fPlayerHeading = GET_ENTITY_HEADING(PLAYER_PED_ID())
GlassesCamActive = TRUE
ELSE
iMeleeTimer = GET_GAME_TIMER()
meleeNeedsDisabled = TRUE
iGlassesCamTimer = GET_GAME_TIMER()
GlassesCamActive = FALSE
ENDIF
ENDIF
IF GlassesCamActive = TRUE
IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, caExitGlassesInput)
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, caExitGlassesInput)
OR bMissionFailed = TRUE
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
iMeleeTimer = GET_GAME_TIMER()
meleeNeedsDisabled = TRUE
iGlassesCamTimer = GET_GAME_TIMER()
GlassesCamActive = FALSE
ENDIF
ENDIF
ENDIF
//Turn camera on and off when requested
IF GlassesCamActive = TRUE
IF camSetup = FALSE
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) //disable player control and freeze the player, needed both for first person mode
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
//Add multihead lateral fade
SET_MULTIHEAD_SAFE(TRUE,TRUE)
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED (SF_Glasses_Shutter_Index)
PRINTSTRING("Waiting for scaleform loading ") PRINTNL()
WAIT(0)
ENDWHILE
IF fPlayerHeading < 181
fCamDirectionZCoord = fPlayerHeading
ELSE
fCamDirectionZCoord = (fPlayerHeading - 360)
ENDIF
fCamNewDirectionZCoord = fCamDirectionZCoord
fCamNewDirectionXCoord = 0
iPlayerTakingPhotoTimer = GET_GAME_TIMER()
f_current_cam_fov = 40
f_scale_rotate_speed_zoom = 10
f_rotate_speed = 60
fGlassesCamFOV = 40
//for first person mode use the current gameplay camera fov
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
fGlassesCamFOV = GET_GAMEPLAY_CAM_FOV()
f_current_cam_fov = GET_GAMEPLAY_CAM_FOV()
ENDIF
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF NOT DOES_CAM_EXIST(GlassesCamera)
GlassesCamera = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA")
ENDIF
SET_CAM_COORD(GlassesCamera, <<vplayerCoords.x, vplayerCoords.y, (vplayerCoords.z + 0.6)>>)
//for first person mode use the current gameplay cam rotation as start rotation of scripted camera
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_CAM_ROT(GlassesCamera, GET_GAMEPLAY_CAM_ROT())
ELSE
SET_CAM_ROT(GlassesCamera, <<0,0,fCamDirectionZCoord>>)
ENDIF
SET_CAM_FOV(GlassesCamera, fGlassesCamFOV)
SET_CAM_ACTIVE(GlassesCamera, TRUE)
// OVERLAY_SET_SECURITY_CAM(TRUE, FALSE, 10, 2)
SET_TIMECYCLE_MODIFIER("secret_camera")
OVERRIDE_MICROPHONE_SETTINGS(HASH("CELL_PHONE_CAMERA_MIC"), TRUE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
iCamZoomInSoundID = GET_SOUND_ID()
iCamZoomOutSoundID = GET_SOUND_ID()
iCamShootSoundID = GET_SOUND_ID()
iBackGroundSoundID = GET_SOUND_ID()
DISABLE_CELLPHONE(TRUE)
CLEAR_HELP()
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
PRINT_HELP_FOREVER("HELP1_KM")//~s~Take Photo ~INPUT_AIM~~n~Zoom ~INPUT_SNIPER_ZOOM~~n~Move ~INPUTGROUP_LOOK~~n~Exit Camera Mode ~INPUT_CONTEXT~
ELSE
PRINT_HELP_FOREVER("HELP1")//~s~Take Photo ~INPUT_FRONTEND_ACCEPT~~n~Zoom ~INPUT_SNIPER_ZOOM~~n~Move ~INPUTGROUP_LOOK~~n~Exit Camera Mode ~INPUT_CONTEXT~
ENDIF
camSetup = TRUE
ELSE
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(PLAYER_CONTROL)
DISABLE_CELLPHONE_CAMERA_APP_THIS_FRAME_ONLY()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_SPECIAL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_SPECIAL_TWO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_LR)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_NEXT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_PREV)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
DISABLE_SELECTOR_THIS_FRAME()
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
IF missionStage = STAGE_SCOUT_OUT_STORE
IF donePH23Chat = FALSE
AND PlayerIsInsideJewellers = TRUE
IF CamHasBeenSnapped = FALSE
AND AlarmHasBeenSnapped = FALSE
AND VentHasBeenSnapped = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH23", CONV_PRIORITY_HIGH)
//Glasses are live. Shoot away.
donePH23Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
UPDATE_GLASSES_CAM()
//Call these every frame to update the camera
// OVERLAY_SET_SECURITY_CAM(TRUE, FALSE, 10, 2)
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP1_KM")
PRINTSTRING("HELP1_KM is not being displayed") PRINTNL()
PRINT_HELP_FOREVER("HELP1_KM")//~s~Take Photo ~INPUT_ATTACK~~n~Zoom ~INPUT_SNIPER_ZOOM~~n~Move ~INPUTGROUP_LOOK~~n~Exit Camera Mode ~INPUT_CONTEXT~
ELSE
PRINTSTRING("HELP1_KM is being displayed") PRINTNL()
ENDIF
ELSE
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP1")
PRINTSTRING("HELP1 is not being displayed") PRINTNL()
PRINT_HELP_FOREVER("HELP1")//~s~Take Photo ~INPUT_FRONTEND_ACCEPT~~n~Zoom ~INPUT_SNIPER_ZOOM~~n~Move ~INPUTGROUP_LOOK~~n~Exit Camera Mode ~INPUT_CONTEXT~
ELSE
PRINTSTRING("HELP1 is being displayed") PRINTNL()
ENDIF
ENDIF
ENDIF
ELSE
IF meleeNeedsDisabled = TRUE
IF GET_GAME_TIMER() < iMeleeTimer + 2000
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
ELSE
meleeNeedsDisabled = FALSE
ENDIF
ENDIF
IF camSetup = TRUE
//Disable multihead fade
SET_MULTIHEAD_SAFE(FALSE,TRUE)
CLEAR_TIMECYCLE_MODIFIER()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
//when exiting scripted camera in first person mode, set the player to match scripted camera rotation
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
VECTOR vGlassesCamRot = GET_CAM_ROT(GlassesCamera)
SET_ENTITY_ROTATION(PLAYER_PED_ID(), << 0.0, 0.0, vGlassesCamRot.z >>)
SET_FIRST_PERSON_SHOOTER_CAMERA_HEADING(0.0)
SET_FIRST_PERSON_SHOOTER_CAMERA_PITCH(vGlassesCamRot.x)
ELSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
ENDIF
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
CLEAR_HELP()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_CAM_ACTIVE(GlassesCamera, FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //enable player control
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
OVERRIDE_MICROPHONE_SETTINGS(0, FALSE)
IF PlayerIsInsideJewellers = FALSE
DISABLE_CELLPHONE(FALSE)
ENDIF
updatedGodText = FALSE
DoneGlassesHelpText = FALSE
camSetup = FALSE
ENDIF
IF missionStage = STAGE_SCOUT_OUT_STORE
//Keep help text on screen if not all pics have been taken
IF PlayerIsInsideJewellers = TRUE
IF VentObjectiveDone = FALSE
OR SecurityCamObjectiveDone = FALSE
OR AlarmObjectiveDone = FALSE
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP2")
CLEAR_HELP()
PRINT_HELP_FOREVER("HELP2")//~s~Press ~INPUT_CONTEXT~ to enter glasses hidden camera.
updatedGodText = TRUE
ENDIF
ENDIF
ELSE
//Do help text for glasses after the god text has been displayed to go to the store.
IF doneGoToStoreText = TRUE
IF doneFirstHelp = FALSE
AND NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_HELP("HELP2")//~s~Press ~INPUT_CONTEXT~ to enter glasses hidden camera.
doneFirstHelp = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF missionStage = STAGE_CHECK_OUT_ROOF
IF playerInPerfectPlace = TRUE
AND GoodShotDone = FALSE
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
IF DoneGlassesHelpText = FALSE
CLEAR_HELP()
PRINT_HELP_FOREVER("HELP2")//~s~Press ~INPUT_CONTEXT~ to enter glasses hidden camera.
DoneGlassesHelpText = TRUE
ENDIF
ELSE
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("HELP2")
CLEAR_HELP()
DoneGlassesHelpText = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF PlayerTakingPicsTooFast = TRUE
// PRINTSTRING("PlayerTakingPicsTooFast = TRUE") PRINTNL()
ELSE
// PRINTSTRING("PlayerTakingPicsTooFast = FALSE") PRINTNL()
ENDIF
//Control the shutter and any timers required for dialogue if player is taking a pic.
IF GlassesCamActive = TRUE
IF playerTakingPhoto = FALSE
IF GET_GAME_TIMER() > (iPlayerTakingPhotoTimer + 500)
// IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SPRINT)
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, caTakePhotoInput)
OR IS_DISABLED_CONTROL_PRESSED(FRONTEND_CONTROL, caTakePhotoInput)
//If the next pic taken is less than 4 seconds after the last pic then the player is taking pics too quickly for the dialogue,
//so dialogue should pause and wait till player has stopped taking so many pics and then play one line to say what the player just got in last few pics
IF PicSpeedTimerStarted = TRUE
IF GET_GAME_TIMER() < (iPicSpeedTimer + 4000)
iPicSpeedTimer = GET_GAME_TIMER()
PlayerTakingPicsTooFast = TRUE
ELSE
//If it's been over 3 seconds since last pic then we can reset the timer and dialogue should be able to play as normal
iPicSpeedTimer = GET_GAME_TIMER()
PlayerTakingPicsTooFast = FALSE
ENDIF
ENDIF
//Start a timer to control how quickly player is taking photos.
IF PicSpeedTimerStarted = FALSE
iPicSpeedTimer = GET_GAME_TIMER()
PicSpeedTimerStarted = TRUE
ENDIF
IF missionStage = STAGE_SCOUT_OUT_STORE
IF PlayerIsInsideJewellers = TRUE
KILL_ANY_CONVERSATION()
ENDIF
ELSE
KILL_ANY_CONVERSATION()
ENDIF
SETTIMERB(0)
LEGACY_SCALEFORM_MOVIE_METHOD_WITH_NUMBER (SF_Glasses_Shutter_Index, "DISPLAY_VIEW", TO_FLOAT(2)) //Shutter screen.
LEGACY_SCALEFORM_MOVIE_METHOD(SF_Glasses_Shutter_Index, "CLOSE_THEN_OPEN_SHUTTER")
// PLAY_SOUND_FRONTEND (-1, "Camera_Shoot", "Phone_SoundSet_Default")
PLAY_SOUND_FRONTEND (iCamShootSoundID, "Camera_Shoot", "Phone_SoundSet_Glasses_Cam")
iPicTakenTimer = GET_GAME_TIMER()
IF missionStage = STAGE_SCOUT_OUT_STORE
IF PlayerIsInsideJewellers = TRUE
SnapDialogueNeeded = TRUE
ENDIF
ELSE
SnapDialogueNeeded = TRUE
ENDIF
//Add stat here for number of photo's taken
iPhotosTaken++
INFORM_MISSION_STATS_OF_INCREMENT(JH1_PHOTOS_TAKEN, iPhotosTaken, TRUE)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
playerTakingPhoto = TRUE
PhotoJustTaken = TRUE
ENDIF
ENDIF
ENDIF
IF playerTakingPhoto = TRUE
DRAW_SCALEFORM_MOVIE_FULLSCREEN(SF_Glasses_Shutter_Index,255,255,255,0)
IF TIMERB() > 1500
iPlayerTakingPhotoTimer = GET_GAME_TIMER()
playerTakingPhoto = FALSE
ENDIF
ENDIF
ELSE
IF playerTakingPhoto = TRUE
IF TIMERB() > 1500
iPlayerTakingPhotoTimer = GET_GAME_TIMER()
playerTakingPhoto = FALSE
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Handles the stage where Michael goes into scout out the store.
PROC DO_STAGE_SCOUT_OUT_STORE()
//Anything that should be run every frame this stage
//Handle ShopBlip
//DEBUG ONLY TO BE REMOVED WHEN SCRIPT IS FINISHED
// #IF IS_DEBUG_BUILD
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
// donePH1Chat = TRUE
// SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-632.8737, -238.7616, 37.0846>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 298.5876)
// ENDIF
// #ENDIF
SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(player_id())
SWEATSHOP_AMBIENT_CONTROLLER()
JEWEL_STORE_AMBIENT_CONTROLLER()
JEWEL_STORE_STAFF_CONTROLLER()
IF PlayerIsInsideJewellers = FALSE
IF GET_GAME_TIMER() > (iSaveHouseCheck + 5000)
IF playerInSafeHouse = FALSE
IF IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = TRUE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
IF playerInSafeHouse = TRUE
IF NOT IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = FALSE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
IF iControlFlag > 0
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
AND NOT IS_PLAYER_IN_ANY_SHOP()
AND NOT IS_PED_JUMPING(PLAYER_PED_ID())
AND NOT IS_PED_CLIMBING(PLAYER_PED_ID())
AND NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID())
AND NOT playerInSafeHouse
AND NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
AND bMissionFailed = FALSE
GLASSES_CAM_CONTROLLER()
ELSE
IF GlassesCamActive = TRUE
GLASSES_CAM_CONTROLLER()
ENDIF
ENDIF
ENDIF
IF PlayerIsInsideJewellers = TRUE
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DUCK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
PlayerIsInsideJewellers = TRUE
ELSE
PlayerIsInsideJewellers = FALSE
ENDIF
IF iControlFlag < 2
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
//Draw locates for these 2 blips when active
// IF DOES_BLIP_EXIST(shopBlip)
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -631.4476, -237.4267, 37.09479>>, <<2, 2, LOCATE_SIZE_HEIGHT>>, TRUE)
// ENDIF
// ENDIF
IF DOES_BLIP_EXIST(blipLocate)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<vParkingSpace.x, vParkingSpace.y, 34.97223>>, <<2.5,2.5,LOCATE_SIZE_HEIGHT>>, TRUE)
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
AND NOT DOES_BLIP_EXIST(BlipVeh)
AND NOT DOES_BLIP_EXIST(blipLocate)
PlayerIsInsideJewellers = TRUE
donePH10Chat = FALSE
//Handle audio inside the store and when using the glasses.
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_ENTER_STORE")
STOP_AUDIO_SCENE("JSH_1_ENTER_STORE")
ENDIF
IF GlassesCamActive = FALSE
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_TAKE_PHOTOS")
STOP_AUDIO_SCENE("JSH_1_TAKE_PHOTOS")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_INSIDE_STORE")
START_AUDIO_SCENE("JSH_1_INSIDE_STORE")
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_INSIDE_STORE")
STOP_AUDIO_SCENE("JSH_1_INSIDE_STORE")
ENDIF
//Audio to be switched on when using glasses
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_TAKE_PHOTOS")
START_AUDIO_SCENE("JSH_1_TAKE_PHOTOS")
ENDIF
ENDIF
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
//Handle shop assistant blip once all the pics have been taken.
IF VentObjectiveDone
AND SecurityCamObjectiveDone
AND AlarmObjectiveDone
IF SpokeToStaffObjectiveDone = FALSE
IF donePH8Chat = TRUE
IF NOT IS_PED_INJURED(shopAssistant)
IF NOT DOES_BLIP_EXIST(shopAssistantBlip)
REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
shopAssistantBlip = CREATE_BLIP_FOR_ENTITY(shopAssistant)
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
ENDIF
ENDIF
ELSE
PlayerIsInsideJewellers = FALSE
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_INSIDE_STORE")
STOP_AUDIO_SCENE("JSH_1_INSIDE_STORE")
ENDIF
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// IF IS_ENTITY_AT_COORD(vehCar, <<vParkingSpace.x, vParkingSpace.y, 34.97223>>, <<7, 7, 4>>)
IF IS_ENTITY_IN_ANGLED_AREA(vehCar, <<-665.884460,-259.601532,34.244663>>, <<-652.584473,-283.042877,38.005383>>, 11.000000)
IF DOES_BLIP_EXIST(shopAssistantBlip)
IF doneGodText3 = TRUE
AND GET_GAME_TIMER() < (iGodText3Timer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
ENDIF
REMOVE_BLIP(shopAssistantBlip)
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF NOT DOES_BLIP_EXIST(shopBlip)
CLEAR_HELP()
shopBlip = CREATE_BLIP_FOR_COORD(<< -631.4476, -237.4267, 37.0589 >>)
ENDIF
//Do dialogue of Lester telling Michael to get back into the store.
// IF michaelInRightClothes = TRUE
IF updatedGodText = TRUE
IF donePH10Chat = FALSE
KILL_ANY_CONVERSATION()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH10", CONV_PRIORITY_MEDIUM)
//Where you going? You're not done yet.
//Go back into the shop.
//You've still got work to do in the jewel store.
//We're not finished. Get back in there.
SETTIMERB(0)
donePH10Chat = TRUE
ENDIF
ENDIF
ENDIF
// ENDIF
//Check timer so dialogue is repeated if player doesnt go back inside shop
IF TIMERB() > 15000
donePH10Chat = FALSE
ENDIF
ELSE
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
IF doneGetBackInCarText = FALSE
PRINT_NOW("GOTO_CAR3", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in your ~b~car.
iBackInCarTimer = GET_GAME_TIMER()
doneGetBackInCarText = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
IF doneGetBackInCarText = TRUE
IF GET_GAME_TIMER() < (iBackInCarTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
ENDIF
ENDIF
ENDIF
// IF IS_ENTITY_AT_COORD(vehCar, <<vParkingSpace.x, vParkingSpace.y, 34.97223>>, <<7, 7, 4>>)
IF IS_ENTITY_IN_ANGLED_AREA(vehCar, <<-665.884460,-259.601532,34.244663>>, <<-652.584473,-283.042877,38.005383>>, 11.000000)
IF IS_ENTITY_IN_ANGLED_AREA(vehCar, <<-661.583679,-267.478821,34.398075>>, <<-657.259460,-274.933685,37.457153>>, 6.250000)
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF NOT DOES_BLIP_EXIST(shopBlip)
shopBlip = CREATE_BLIP_FOR_COORD(<< -631.4476, -237.4267, 37.0589 >>)
ENDIF
ENDIF
ELSE
IF NOT DOES_BLIP_EXIST(blipLocate)
blipLocate = CREATE_BLIP_FOR_COORD(vParkingSpace, TRUE)
ENDIF
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
//If the parking blip exists then the player is fucking about and should have dialogue from Lester telling him to get back to the parking space
// IF michaelInRightClothes = TRUE
IF donchat72 = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH72", CONV_PRIORITY_MEDIUM)
//Where are you going? We need to case out the store.
//Park back up in that space and check out the jewellers Michael.
//We don't have time for this shit.
iChat72Timer = GET_GAME_TIMER()
donchat72 = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF GET_GAME_TIMER() > (iChat72Timer + 7000)
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH72", CONV_PRIORITY_MEDIUM)
//Where are you going? We need to case out the store.
//Park back up in that space and check out the jewellers Michael.
//We don't have time for this shit.
iChat72Timer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
// ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF doneLoseWantedText = FALSE
CLEAR_PRINTS()
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
doneLoseWantedText = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Set the player to only be able to walk while in the store.
//Dont allow player to run if in this area.
IF PlayerIsInsideJewellers = TRUE
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
IF hasPhoneBeenDisabled = FALSE
DISABLE_CELLPHONE(TRUE)
hasPhoneBeenDisabled = TRUE
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.029663,-233.201431,35.846058>>, <<-630.599304,-247.389801,39.151962>>, 12.000000)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_UD)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_SPECIAL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_SPECIAL_TWO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_LR)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_NEXT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_PREV)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DUCK)
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(shopGuard)
IF NOT IS_PED_INJURED(shopGuard)
IF GET_DISTANCE_BETWEEN_ENTITIES(shopGuard, PLAYER_PED_ID()) < 4
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
ELSE
IF GET_ENTITY_HEADING(PLAYER_PED_ID()) > 49.2682
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) < 191.6326
// PRINTSTRING("Player should be ok to run now ") PRINTNL()
ELSE
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF hasPhoneBeenDisabled = TRUE
DISABLE_CELLPHONE(FALSE)
hasPhoneBeenDisabled = FALSE
ENDIF
ENDIF
IF iControlFlag = 0
//**************SET MID MISSION CHECK POINT HERE*******************//
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "STAGE_SCOUT_OUT_STORE")
PRINTSTRING("***********MID MISSION STAGE SET TO 1***********") PRINTNL()
IF MissionStageBeingSkippedTo = TRUE
STAGE_SELECTOR_MISSION_SETUP()
MissionStageBeingSkippedTo = FALSE
ENDIF
//Flags
updatedGodText = FALSE
SecurityCamObjectiveDone = FALSE
VentObjectiveDone = FALSE
SpokeToStaffObjectiveDone = FALSE
GlassesCamActive = FALSE
AlarmObjectiveDone = FALSE
camSetup = FALSE
playerTakingPhoto = FALSE
AllBallsCreated = FALSE
updatedGodText2 = FALSE
doneHintCam = FALSE
donePH1Chat = FALSE
donePH8Chat = FALSE
donePH9Chat = FALSE
donePH10Chat = FALSE
donePH11Chat = FALSE
donePH12Chat = FALSE
doneTOCARChat = FALSE
// donePH14Chat = FALSE
donePH16Chat = FALSE
donePH17Chat = FALSE
donePH18Chat = FALSE
donePH19Chat = FALSE
donePH22Chat = FALSE
donePH20Chat = FALSE
donePH21Chat = FALSE
donePH24Chat = FALSE
donePH25Chat = FALSE
donePH26Chat = FALSE
SnapDialogueNeeded = FALSE
doneGodText2 = FALSE
doneGodText3 = FALSE
donePH28Chat = FALSE
donePH29Chat = FALSE
CanMissionFail = TRUE
GunHolstered = FALSE
PH8ChatTimerStarted = FALSE
doneGetBackInCarText = FALSE
player_coming_from_left = FALSE
player_coming_from_right = FALSE
donePH41Chat = FALSE
MusicStarted[1] = FALSE
timerstartedForRooftopEntranceBlip = FALSE
donePH47Chat = FALSE
meleeNeedsDisabled = FALSE
modelsRequested = FALSE
hasPhoneBeenDisabled = FALSE
JewelStoreModelsRequested = FALSE
customerReadyToMoveOn = FALSE
ShopCustomerFrozen = FALSE
ShopCustomerReadyToLeave = FALSE
playerTookTooLong = FALSE
donePH13Chat = FALSE
// DoneDriveChat = FALSE
glassesHaveBeenActivated = FALSE
glassesActivatedTimerStarted = FALSE
isCamZoomInSoundPlaying = FALSE
isCamZoomOutSoundPlaying = FALSE
doneGoToStoreText = FALSE
donePH23Chat = FALSE
donePH3Chat = FALSE
hasCutsceneBeenRequested = FALSE
CutSceneGoodToStart = FALSE
allpicsTaken = FALSE
PlayerTakingPicsTooFast = FALSE
PicSpeedTimerStarted = FALSE
AlarmHasBeenSnapped = FALSE
CamHasBeenSnapped = FALSE
VentHasBeenSnapped = FALSE
AlarmHasBeenMentioned = FALSE
CamHasBeenMentioned = FALSE
VentHasBeenMentioned = FALSE
donePH6Chat = FALSE
donePH5Chat = FALSE
doneChatPH32 = FALSE
doneFirstHelp = FALSE
doneReturnText = FALSE
donchat72 = FALSE
doneLoseWantedText = FALSE
playerInSafeHouse = FALSE
statPicturePerfectSet = FALSE
ACamIsOnScreen = FALSE
AVentIsOnScreen = FALSE
AnAlarmIsOnScreen = FALSE
AlarmIsOnScreen[0] = FALSE
AlarmIsOnScreen[1] = FALSE
CamIsOnScreen[0] = FALSE
CamIsOnScreen[1] = FALSE
CamIsOnScreen[2] = FALSE
CamIsOnScreen[3] = FALSE
VentIsOnScreen[1] = FALSE
VentIsOnScreen[2] = FALSE
VentIsOnScreen[3] = FALSE
// SyncdSceneDisrupted = FALSE
FOR icount = 0 TO 5
ShopCustomerTaskGiven[icount] = FALSE
ENDFOR
iAroundChatTimer = GET_GAME_TIMER()
iGlassesCamTimer = GET_GAME_TIMER()
iShotsBeforeStoreTimer = GET_GAME_TIMER()
iSaveHouseCheck = GET_GAME_TIMER()
iPlayerNotApproachingTimer = 0
iChat72Timer = 0
iHurryUpTimer = 0
#IF IS_DEBUG_BUILD
jSkipReady = TRUE
pSkipReady = TRUE
#ENDIF
REQUEST_MODEL(PROP_BOWLING_BALL)
REQUEST_WAYPOINT_RECORDING("BB_JEW_1")
REQUEST_WAYPOINT_RECORDING("BB_JEW_2")
REQUEST_MISSION_AUDIO_BANK("JWL_HEIST_SETUP")
SF_Glasses_Shutter_Index = REQUEST_SCALEFORM_MOVIE ("camera_gallery")
LOAD_OVERLAY_EFFECTS() // security camera overlay scaleform
// ePlayersGlasses = GET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_HEAD)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES, FALSE)
IF NOT IS_PED_INJURED(pedContact)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 1, pedContact, "LESTER")
ENDIF
IF NOT IS_PED_INJURED(shopGuard)
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 4, shopGuard, "JewelGuard")
ENDIF
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 0, PLAYER_PED_ID(), "MICHAEL")
CLEAR_AREA(<<-625.6, -233.1, 38>>, 20, TRUE)
SET_PED_NON_CREATION_AREA(<<-627.5, -237.6, 35.9>>, <<-619.6, -223.3, 38.8>>)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ScenarioBlocking[0] = ADD_SCENARIO_BLOCKING_AREA(<<-614.0, -215.6, 39.8>>, <<-636.7, -242.3, 35.8>>)
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehCar)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_STORE")
STOP_AUDIO_SCENE("JSH_1_DRIVE_TO_STORE")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_ENTER_STORE")
START_AUDIO_SCENE("JSH_1_ENTER_STORE")
ENDIF
iControlFlag = 1
ENDIF
IF iControlFlag = 1
//Request the mocap scene once the shop assistant has been created in script to pass on her components to the scene.
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) < DEFAULT_CUTSCENE_LOAD_DIST
IF hasCutsceneBeenRequested = FALSE
IF DOES_ENTITY_EXIST(shopAssistant)
IF NOT IS_PED_INJURED(shopAssistant)
REQUEST_CUTSCENE("JH_1_IG_3")
hasCutsceneBeenRequested = TRUE
ENDIF
ENDIF
ELSE
IF NOT HAS_CUTSCENE_LOADED()
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Jewellery_Assitance", shopAssistant, CS_JEWELASS)
PRINTSTRING("SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED being set") PRINTNL()
ENDIF
ENDIF
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-631.3, -239, 37.4>>) > DEFAULT_CUTSCENE_UNLOAD_DIST
IF hasCutsceneBeenRequested = TRUE
REMOVE_CUTSCENE()
hasCutsceneBeenRequested = FALSE
ENDIF
ENDIF
ENDIF
IF doneGoToStoreText = FALSE
IF IS_SCREEN_FADED_IN()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("GOTO_STORE", 4000, 1) //~s~Go to the ~y~jewelers.
doneGoToStoreText = TRUE
ENDIF
ENDIF
ENDIF
// PRINTSTRING("Offset from player is ") PRINTVECTOR(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PLAYER_PED_ID(), GET_CAM_COORD(GET_DEBUG_CAM()))) PRINTNL()
IF AllBallsCreated = FALSE
CREATE_INVISIBLE_BALLS()
ENDIF
//Only allow glasses to be used once player is inside the store and god text has instructed player to take photo's using the glasses.
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
IF MusicStarted[1] = FALSE
TRIGGER_MUSIC_EVENT("JH1_STORE")
MusicStarted[1] = TRUE
ENDIF
ENDIF
//Only allow this stage to work if these 2 blips are not active
IF NOT DOES_BLIP_EXIST(BlipVeh)
AND NOT DOES_BLIP_EXIST(blipLocate)
// AND michaelInRightClothes = TRUE
DIALOGUE_CONTROLLER()
IF SpokeToStaffObjectiveDone = FALSE
IF GlassesCamActive = FALSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-625.783630,-230.236588,37.057037>>, <<-624.559448,-231.977615,39.057037>>, 2.750000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-624.248291,-231.488724,36.557037>>, <<-623.502380,-232.287186,38.807037>>, 1.000000)
KILL_ANY_CONVERSATION()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF DOES_BLIP_EXIST(shopAssistantBlip)
REMOVE_BLIP(shopAssistantBlip)
ENDIF
CutSceneGoodToStart = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF CutSceneGoodToStart = TRUE
AND SpokeToStaffObjectiveDone = FALSE
AND OfficeFail = FALSE
AND CounterFail = FALSE
//Do cutscene of Michael speaking to shop assistant.
DO_CUTSCENE_OF_MICHAEL_AND_SHOP_ASSISTANT()
ENDIF
//Move stage on once all 3 objectives are complete
IF GlassesCamActive = FALSE
IF SecurityCamObjectiveDone = TRUE
AND VentObjectiveDone = TRUE
AND AlarmObjectiveDone = TRUE
AND SpokeToStaffObjectiveDone = TRUE
AND donePH9Chat = TRUE
//Delete all the bowling balls now
FOR icount = 0 TO 3
IF DOES_ENTITY_EXIST(ObjBallCam[icount])
DELETE_OBJECT(ObjBallCam[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 3
IF DOES_ENTITY_EXIST(ObjBallVent[icount])
DELETE_OBJECT(ObjBallVent[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 1
IF DOES_ENTITY_EXIST(ObjBallAlarm[icount])
DELETE_OBJECT(ObjBallAlarm[icount])
ENDIF
ENDFOR
//Destroy all tracked points
IF trackedPointsCreated = TRUE
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[0])
DESTROY_TRACKED_POINT(iTrackedAlarmPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[1])
DESTROY_TRACKED_POINT(iTrackedVentPoint[2])
DESTROY_TRACKED_POINT(iTrackedVentPoint[3])
DESTROY_TRACKED_POINT(iTrackedCamPoint[0])
DESTROY_TRACKED_POINT(iTrackedCamPoint[1])
DESTROY_TRACKED_POINT(iTrackedCamPoint[2])
DESTROY_TRACKED_POINT(iTrackedCamPoint[3])
trackedPointsCreated = FALSE
ENDIF
iControlFlag = 2
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 2
// PRINTSTRING("All objectives are comeplete, mission can move on now") PRINTNL()
IF DOES_BLIP_EXIST(shopBlip)
REMOVE_BLIP(shopBlip)
ENDIF
//Do some dialogue if the player is leaving the store
IF donePH29Chat = FALSE
IF NOT IS_PED_INJURED(shopGuard)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-630.4255, -236.7872, 37.0570>>, <<2,2,2>>)
IF GET_ENTITY_HEADING(PLAYER_PED_ID()) < 170
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) > 50
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 4, shopGuard, "JewelGuard")
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH29", CONV_PRIORITY_MEDIUM)
//Thank you sir.
donePH29Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF donePH9Chat = TRUE
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_NOW("GOTO_CAR4", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in your ~b~car.
ScenarioBlocking[2] = ADD_SCENARIO_BLOCKING_AREA(<<-603.5, -271.1, 44.2>>, <<-566.5, -298.7, 31.4>>)
SET_ROADS_IN_AREA(<<-611.9, -362.4, 30>>, <<-558.6, -264.5, 45>>, FALSE)
SET_ROADS_IN_AREA(<<-538.9, -296.7, 43.3>>, <<-631.3, -185.2, 30>>, FALSE)
iHurryUpTimer = GET_GAME_TIMER()
iControlFlag = 3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 3
//Do some dialogue if the player is leaving the store
IF donePH29Chat = FALSE
IF NOT IS_PED_INJURED(shopGuard)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-630.4255, -236.7872, 37.0570>>, <<2,2,2>>)
IF GET_ENTITY_HEADING(PLAYER_PED_ID()) < 170
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) > 50
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 4, shopGuard, "JewelGuard")
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH29", CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 7.0, REPLAY_IMPORTANCE_HIGH)
//Thank you sir.
donePH29Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF GET_GAME_TIMER() > (iHurryUpTimer + 20000)
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedContact) > 15
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH48", CONV_PRIORITY_MEDIUM)
//Come on, Michael. Let's go.
//Let's hurry this up, Michael.
//If you take any longer, you're risking blowing this whole thing.
//Let's speed this up, we don't want to draw attention.
iHurryUpTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ELSE
IF GET_GAME_TIMER() > (iHurryUpTimer + 30000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH48", CONV_PRIORITY_MEDIUM)
//Come on, Michael. Let's go.
//Let's hurry this up, Michael.
//If you take any longer, you're risking blowing this whole thing.
//Let's speed this up, we don't want to draw attention.
iHurryUpTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-631.130676,-237.373398,36.556953>>, <<-617.120361,-227.004135,39.915310>>, 17.750000)
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_INSIDE_STORE")
STOP_AUDIO_SCENE("JSH_1_INSIDE_STORE")
ENDIF
//Do some more dialogue over earpiece as Michael is going back to the car.
IF doneTOCARChat = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_TOCAR", CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(2.0, 6.0, REPLAY_IMPORTANCE_HIGH)
//So, we good?
//Almost. I need to get eyes on the roof of the building. See where the ventilation comes out.
doneTOCARChat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
//Clean up previous stage
IF DOES_ENTITY_EXIST(ShopCustomer[0])
IF NOT IS_PED_INJURED(ShopCustomer[0])
SET_PED_AS_NO_LONGER_NEEDED(ShopCustomer[0])
REMOVE_ANIM_DICT("amb@world_human_window_shop@male@idle_a")
ENDIF
ENDIF
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_LEAVE_STORE")
STOP_AUDIO_SCENE("JSH_1_LEAVE_STORE")
ENDIF
//Move stage on
missionStage = STAGE_FIND_ROOF_ENTRANCE
iControlFlag = 0
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Mission stage for player has to drive around the block to find the entrance to the roof
PROC DO_STAGE_FIND_ROOF_ENTRANCE()
//Anything that needs called every fram throughout this stage
SWEATSHOP_AMBIENT_CONTROLLER()
JEWEL_STORE_STAFF_CONTROLLER()
IF GET_GAME_TIMER() > (iSaveHouseCheck + 5000)
IF playerInSafeHouse = FALSE
IF IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = TRUE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
IF playerInSafeHouse = TRUE
IF NOT IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = FALSE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
AND NOT IS_PLAYER_IN_ANY_SHOP()
AND NOT IS_PED_JUMPING(PLAYER_PED_ID())
AND NOT playerInSafeHouse
AND NOT IS_PED_CLIMBING(PLAYER_PED_ID())
AND NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID())
AND NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
AND bMissionFailed = FALSE
GLASSES_CAM_CONTROLLER()
ELSE
IF GlassesCamActive = TRUE
GLASSES_CAM_CONTROLLER()
ENDIF
ENDIF
IF iControlFlag = 0
IF MissionStageBeingSkippedTo = TRUE
STAGE_SELECTOR_MISSION_SETUP()
MissionStageBeingSkippedTo = FALSE
ENDIF
//**************SET MID MISSION CHECK POINT HERE*******************//
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2, "STAGE_FIND_ROOF_ENTRANCE")
PRINTSTRING("***********MID MISSION STAGE SET TO 2***********") PRINTNL()
//FLAGS
timerstartedForRooftopEntranceBlip = FALSE
donePH13Chat = FALSE
updatedGodText2 = FALSE
player_coming_from_left = FALSE
playerTookTooLong = FALSE
player_coming_from_right = FALSE
donePH41Chat = FALSE
doneHintCam = FALSE
doneGetBackInCarText = FALSE
doneChatPH32 = FALSE
clearedText = FALSE
donePH71Chat = FALSE
doneLoseCopsText = FALSE
playerInSafeHouse = FALSE
CanMissionFail = TRUE
// gotPlayersRadioStation = FALSE
iTimerForRoofEntranceBlip = 0
iBackInCarTimer = 0
icopsTextTimer = 0
iSaveHouseCheck = GET_GAME_TIMER()
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehCar)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
iControlFlag = 1
ENDIF
IF iControlFlag = 1
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF clearedText = FALSE
IF doneGetBackInCarText = TRUE
AND GET_GAME_TIMER() < (iBackInCarTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
clearedText = TRUE
ENDIF
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_BACK_ENTRANCE")
START_AUDIO_SCENE("JSH_1_DRIVE_TO_BACK_ENTRANCE")
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF doneLoseCopsText = TRUE
IF GET_GAME_TIMER() < (icopsTextTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
ENDIF
doneLoseCopsText = FALSE
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF timerstartedForRooftopEntranceBlip = FALSE
iTimerForRoofEntranceBlip = GET_GAME_TIMER()
timerstartedForRooftopEntranceBlip = TRUE
ENDIF
// IF NOT DOES_BLIP_EXIST(ScopeOutViewPointBlip)
// ScopeOutViewPointBlip = CREATE_BLIP_FOR_COORD(<< -576.2567, -277.5580, 34.1593 >>, TRUE)
// ENDIF
//1st line of dialogue when Michael gets into the car.
IF donePH13Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH13", CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 5.0)
//Drive us around the block. We got to find a way up to the roof.
//Drive around the block, and look out for a way up to the roof.
donePH13Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Check if player is driving away from the block
IF donePH71Chat = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-623, -254, 38>>) > 145
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH71", CONV_PRIORITY_MEDIUM)
//I said drive around the block, not the city. Turn around.
donePH71Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some dialogue and update god text
IF updatedGodText2 = FALSE
IF donePH13Chat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("GOD1", DEFAULT_GOD_TEXT_TIME, 1)//~s~Find an access point to the roof top.
updatedGodText2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Check for player coming in from the left of the scaffolding
IF player_coming_from_left = FALSE
AND player_coming_from_right = FALSE
IF GET_GAME_TIMER() > (iTimerForRoofEntranceBlip + 30000)
player_coming_from_left = TRUE
playerTookTooLong = TRUE
KILL_ANY_CONVERSATION()
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-578.006958,-264.253021,33.398685>>, <<-599.880920,-225.358902,39.783104>>, 34.500000)
//Do dialogue from Lester pointing out the scaffolding here.
player_coming_from_left = TRUE
KILL_ANY_CONVERSATION()
ENDIF
//Check for player coming in from the right of the scaffolding
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-606.778870,-324.451355,32.634167>>, <<-549.892456,-292.703674,38.186039>>, 36.500000)
//Do dialogue from Lester pointing out the scaffolding here.
player_coming_from_right = TRUE
KILL_ANY_CONVERSATION()
ENDIF
ENDIF
IF NOT DOES_BLIP_EXIST(ScopeOutViewPointBlip)
IF player_coming_from_left = TRUE
ScopeOutViewPointBlip = CREATE_BLIP_FOR_COORD(<< -576.8, -275.6, 34.11925 >>, TRUE)
ENDIF
IF player_coming_from_right = TRUE
ScopeOutViewPointBlip = CREATE_BLIP_FOR_COORD(<<-583.0, -300.1, 33.9756>>, TRUE)
ENDIF
ELSE
IF donePH41Chat = FALSE
IF playerTookTooLong = TRUE
//Do some dialogue of them talking about the scaffolding.
KILL_ANY_CONVERSATION()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH50", CONV_PRIORITY_MEDIUM)
//According to my phone there's a building site on the corner behind the store. Let's go check it out.
donePH41Chat = TRUE
ENDIF
ELSE
KILL_ANY_CONVERSATION()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH41", CONV_PRIORITY_MEDIUM)
//Look. There. Building site.
//Ah, if they're gutting the place, I might be able to get up on the roof.
donePH41Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF player_coming_from_left = TRUE
IF doneHintCam = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-579.7, -280.4, 35.3>>) < 40
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) != CAM_VIEW_MODE_FIRST_PERSON
SET_GAMEPLAY_COORD_HINT(<<-580.5, -280.4, 36>>, DEFAULT_DWELL_TIME, 6000, 2000, HINTTYPE_DEFAULT)
ENDIF
doneHintCam = TRUE
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -576.8, -275.6, 34.11925 >>, <<4,4,LOCATE_SIZE_HEIGHT>>, TRUE, TRUE, TM_IN_VEHICLE)
IF DOES_BLIP_EXIST(ScopeOutViewPointBlip)
REMOVE_BLIP(ScopeOutViewPointBlip)
ENDIF
// IF gotPlayersRadioStation = FALSE
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// playersRadioStation = GET_PLAYER_RADIO_STATION_NAME()
// gotPlayersRadioStation = TRUE
// ENDIF
// ENDIF
iControlFlag = 2
ENDIF
ENDIF
IF player_coming_from_right = TRUE
IF doneHintCam = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-583.2, -292.5, 35.1>>) < 30
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) != CAM_VIEW_MODE_FIRST_PERSON
SET_GAMEPLAY_COORD_HINT(<<-583.6, -291.6, 36>>, DEFAULT_DWELL_TIME, 3000, 2000)
ENDIF
doneHintCam = TRUE
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-583.0, -300.1, 33.9756>>, <<3,3,LOCATE_SIZE_HEIGHT>>, TRUE, TRUE, TM_IN_VEHICLE)
IF DOES_BLIP_EXIST(ScopeOutViewPointBlip)
REMOVE_BLIP(ScopeOutViewPointBlip)
ENDIF
// IF gotPlayersRadioStation = FALSE
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// playersRadioStation = GET_PLAYER_RADIO_STATION_NAME()
// gotPlayersRadioStation = TRUE
// ENDIF
// ENDIF
iControlFlag = 2
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF DOES_BLIP_EXIST(ScopeOutViewPointBlip)
REMOVE_BLIP(ScopeOutViewPointBlip)
ENDIF
IF doneLoseCopsText = FALSE
CLEAR_PRINTS()
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
icopsTextTimer = GET_GAME_TIMER()
doneLoseCopsText = TRUE
ENDIF
ENDIF
ELSE
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_INSIDE_STORE")
STOP_AUDIO_SCENE("JSH_1_INSIDE_STORE")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_LEAVE_STORE")
START_AUDIO_SCENE("JSH_1_LEAVE_STORE")
ENDIF
IF DOES_BLIP_EXIST(ScopeOutViewPointBlip)
REMOVE_BLIP(ScopeOutViewPointBlip)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipVeh)
IF IS_VEHICLE_DRIVEABLE(vehCar)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
ENDIF
ENDIF
IF doneGetBackInCarText = FALSE
ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(FALSE)
PRINT_NOW("GOTO_CAR2", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in your ~b~car.
iBackInCarTimer = GET_GAME_TIMER()
doneGetBackInCarText = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 2
BRING_VEHICLE_TO_HALT(vehCar, 8, 2)
// IF gotPlayersRadioStation = FALSE
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// playersRadioStation = GET_PLAYER_RADIO_STATION_NAME()
// gotPlayersRadioStation = TRUE
// ENDIF
// ENDIF
iControlFlag = 0
missionStage = STAGE_CHECK_OUT_ROOF
ENDIF
ENDPROC
//PURPOSE: Controls everything for the roof top pics being taken.
PROC ROOF_PIC_CONTROLLER()
IF GoodShotDone = FALSE
IF BallsForVentsCreated = FALSE
REQUEST_MODEL(PROP_POOL_BALL_01)
IF HAS_MODEL_LOADED(PROP_POOL_BALL_01)
//Create balls for all corners of vent 1 at coords <<-624.3, -242.4, 55.4>>
//Top 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[0])
Vent1PropBall[0] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-624.5390, -243.4689, 56.1382>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[0], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[1])
Vent1PropBall[1] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-625.2047, -242.0767, 56.1382>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[1], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[2])
Vent1PropBall[2] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-623.8929, -241.4008, 56.1382>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[2], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[3])
Vent1PropBall[3] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-623.1953, -242.7602, 56.1417>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[3], TRUE)
ENDIF
//Bottom 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[4])
Vent1PropBall[4] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-624.5664, -243.5409, 54.9196>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[4], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[5])
Vent1PropBall[5] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-625.3116, -242.0517, 54.9196>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[5], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[6])
Vent1PropBall[6] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-623.8905, -241.2989, 54.9196>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[6], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent1PropBall[7])
Vent1PropBall[7] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-623.1135, -242.7757, 54.9196>>)
FREEZE_ENTITY_POSITION(Vent1PropBall[7], TRUE)
ENDIF
//Create balls for all corners of vent 2 at coords <<-629.8, -227.4, 55.6>>
//Top 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[0])
Vent2PropBall[0] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-630.0252, -228.2989, 56.2472>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[0], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[1])
Vent2PropBall[1] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-630.6877, -227.0615, 56.2472>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[1], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[2])
Vent2PropBall[2] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-629.3130, -226.3524, 56.2472>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[2], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[3])
Vent2PropBall[3] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-628.6467, -227.7106, 56.2472>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[3], TRUE)
ENDIF
//Bottom 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[4])
Vent2PropBall[4] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-630.0801, -228.4265, 55.0286>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[4], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[5])
Vent2PropBall[5] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-630.8126, -227.0237, 55.0286>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[5], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[6])
Vent2PropBall[6] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-629.3090, -226.3575, 55.0286>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[6], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent2PropBall[7])
Vent2PropBall[7] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-628.5722, -227.7299, 55.0286>>)
FREEZE_ENTITY_POSITION(Vent2PropBall[7], TRUE)
ENDIF
//Create balls for all corners of the main vent 3 at coords <<-622.3, -234.2, 56.9>>
//Top 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[0])
Vent3PropBall[0] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-621.6507, -239.7255, 58.2032>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[0], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[1])
Vent3PropBall[1] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-628.7372, -229.9772, 58.1763>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[1], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[2])
Vent3PropBall[2] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-621.4147, -225.7878, 58.1529>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[2], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[3])
Vent3PropBall[3] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-615.3572, -236.0661, 58.1280>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[3], TRUE)
ENDIF
//Bottom 4 corners are
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[4])
Vent3PropBall[4] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-621.6580, -239.7801, 55.1499>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[4], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[5])
Vent3PropBall[5] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-628.7207, -229.9928, 55.0737>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[5], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[6])
Vent3PropBall[6] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-621.3970, -225.7067, 55.0875>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[6], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(Vent3PropBall[7])
Vent3PropBall[7] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-615.3497, -236.0789, 55.1182>>)
FREEZE_ENTITY_POSITION(Vent3PropBall[7], TRUE)
ENDIF
//Create balls for all corners of the South wall at coords <<-619.3, -242.7, 53.6>>
//Have the 4 corners of the wall and 2 in the middle of wall to make sure most of it is in shot for it to count
//Top 2 corners are
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[0])
SouthWallPropBall[0] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-625.3745, -246.0848, 55.6554>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[0], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[1])
SouthWallPropBall[1] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-607.8821, -236.8790, 55.6684>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[1], TRUE)
ENDIF
//Bottom 2 corners are
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[2])
SouthWallPropBall[2] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-625.2039, -245.7673, 51.3461>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[2], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[3])
SouthWallPropBall[3] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-608.2419, -236.9733, 50.3458>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[3], TRUE)
ENDIF
//Middle of wall
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[4])
SouthWallPropBall[4] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-618.4209, -242.1374, 55.6521>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[4], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(SouthWallPropBall[5])
SouthWallPropBall[5] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-618.3972, -242.1671, 51.8769>>)
FREEZE_ENTITY_POSITION(SouthWallPropBall[5], TRUE)
ENDIF
//Create balls for all top corners of the actual vent at <<-622.4, -233.1, 58.1>>
//This should only really be visible from point <<-625.9, -216.9, 59.4>>
//Top 4 corners are
IF NOT DOES_ENTITY_EXIST(MainVentPropBall[0])
MainVentPropBall[0] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-622.7312, -230.0258, 58.1717>>)
FREEZE_ENTITY_POSITION(MainVentPropBall[0], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(MainVentPropBall[1])
MainVentPropBall[1] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-625.4466, -231.6030, 58.1723>>)
FREEZE_ENTITY_POSITION(MainVentPropBall[1], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(MainVentPropBall[2])
MainVentPropBall[2] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-622.1394, -237.3194, 58.1723>>)
FREEZE_ENTITY_POSITION(MainVentPropBall[2], TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(MainVentPropBall[3])
MainVentPropBall[3] = CREATE_OBJECT(PROP_POOL_BALL_01, <<-619.3909, -235.7099, 58.1717>>)
FREEZE_ENTITY_POSITION(MainVentPropBall[3], TRUE)
ENDIF
FOR icount = 0 TO 7
SET_ENTITY_VISIBLE(Vent1PropBall[icount], FALSE)
SET_ENTITY_COLLISION(Vent1PropBall[icount], FALSE)
ENDFOR
FOR icount = 0 TO 7
SET_ENTITY_VISIBLE(Vent2PropBall[icount], FALSE)
SET_ENTITY_COLLISION(Vent2PropBall[icount], FALSE)
ENDFOR
FOR icount = 0 TO 7
SET_ENTITY_VISIBLE(Vent3PropBall[icount], FALSE)
SET_ENTITY_COLLISION(Vent3PropBall[icount], FALSE)
ENDFOR
FOR icount = 0 TO 5
SET_ENTITY_VISIBLE(SouthWallPropBall[icount], FALSE)
SET_ENTITY_COLLISION(SouthWallPropBall[icount], FALSE)
ENDFOR
FOR icount = 0 TO 3
SET_ENTITY_VISIBLE(MainVentPropBall[icount], FALSE)
SET_ENTITY_COLLISION(MainVentPropBall[icount], FALSE)
ENDFOR
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_POOL_BALL_01)
BallsForVentsCreated = TRUE
ENDIF
ENDIF
ENDIF
//Have a control here that player must be higher than 53m to be able to take a valid picture. And if he is on North side of roof he needs to be above 56m
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
IF vplayerCoords.z > 54
AND vplayerCoords.y < -225
playerIsHighEnough = TRUE
ELSE
IF vplayerCoords.z > 56.5
playerIsHighEnough = TRUE
ELSE
playerIsHighEnough = FALSE
ENDIF
ENDIF
IF playerIsHighEnough = TRUE
AND playerTakingPhoto = TRUE
AND SnapDialogueNeeded = TRUE
AND PhotoJustTaken = TRUE
//Run a check for if player is on top of hut next to roof entrance at <<-593, -281.1, 54.5>>
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-593.1058, -281.6116, 53.4842>>, <<4,4,2>>)
//Need to have the left corner of south wall in view and the top south corners of vent3 on screen otherwise no use.
IF DOES_ENTITY_EXIST(SouthWallPropBall[0])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[3])
//Okay, if my calculations are right they must be the vents directly above the store.
DoChatPH57 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run a check for if player is on top of the vents at <<-600.1, -266.1, 54.9>>
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-600.1, -266.1, 54.9>>, <<5,5,5>>)
//If any of the balls are on screen at these coords then he will be blocked off by the large vent in his face so Lester should comment on that
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-596.240173,-268.185150,53.699200>>, <<-597.876953,-265.852783,56.323952>>, 2.250000)
//Run a check here for any balls being on screen before doing chat
IF DOES_ENTITY_EXIST(SouthWallPropBall[4])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[4])
//Move more to the left I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH58 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(Vent1PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[0])
//Move more to the left I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH58 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
//Move more to the left I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH58 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ELSE
//Need to have the left corner of south wall in view and the top south corners of vent3 on screen otherwise no use.
IF DOES_ENTITY_EXIST(SouthWallPropBall[0])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[3])
//Okay, if my calculations are right they must be the vents directly above the store.
DoChatPH57 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run a check for if player is on top of either vents at <<-607.6, -272.1, 52.3>> or if he's on top of the glass dome at <<-610.9, -263.4, 54.4>>
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-607.6, -272.1, 53.1>>, <<4,4,2>>)
OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-610.9, -263.4, 54.4>>, <<4,4,2>>)
//Need to have the left corner of south wall and bottom middle of south wall in view and the top south corners of vent3 on screen otherwise no use.
IF DOES_ENTITY_EXIST(SouthWallPropBall[0])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[3])
IF DOES_ENTITY_EXIST(SouthWallPropBall[5])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[5])
//Okay, if my calculations are right they must be the vents directly above the store.
DoChatPH57 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Tell player to move slightly right if southwall left corner is on screen but not the right southside corner of vent3
IF DOES_ENTITY_EXIST(SouthWallPropBall[0])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[3])
IF NOT IS_ENTITY_ON_SCREEN(Vent3PropBall[3])
//Move more to the right, I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH59 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Tell player to move slightly left if southwall right corner is on screen but not the left southside corner of vent3
IF DOES_ENTITY_EXIST(SouthWallPropBall[1])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[1])
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF NOT IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
//Move more to the left I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH58 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run a check for if player is on top of the vent at <<-608.3, -251.4, 54.3>>
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-608.3, -251.4, 54.3>>, <<3,3,3>>)
//If both middle southwall balls are on screen and the 2 southside corners of vent 3 that should do for here
IF DOES_ENTITY_EXIST(SouthWallPropBall[4])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[4])
IF DOES_ENTITY_EXIST(SouthWallPropBall[5])
IF IS_ENTITY_ON_SCREEN(SouthWallPropBall[5])
IF DOES_ENTITY_EXIST(Vent3PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[0])
IF DOES_ENTITY_EXIST(Vent3PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[3])
//We'll be able to get up to them using those ladders.
DoChatPH61 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run checks for if player is in the area directly above the store.
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-621.3, -232.8, 55.5>>, <<15, 15, 5>>)
//Only allow vent 1 to be a good shot if player is not in these angled areas. Make sure all corners are on screen for a good shot.
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-625.657471,-231.565369,57.904049>>, <<-613.301208,-225.310837,54.217838>>, 17.000000)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-627.125732,-226.431351,53.903927>>, <<-629.548157,-227.507263,58.712666>>, 6.500000)
IF DOES_ENTITY_EXIST(Vent1PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[0])
IF DOES_ENTITY_EXIST(Vent1PropBall[1])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[1])
IF DOES_ENTITY_EXIST(Vent1PropBall[2])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[2])
IF DOES_ENTITY_EXIST(Vent1PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[3])
IF DOES_ENTITY_EXIST(Vent1PropBall[4])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[4])
IF DOES_ENTITY_EXIST(Vent1PropBall[5])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[5])
IF DOES_ENTITY_EXIST(Vent1PropBall[6])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[6])
IF DOES_ENTITY_EXIST(Vent1PropBall[7])
IF IS_ENTITY_ON_SCREEN(Vent1PropBall[7])
//Shot of the small vents has come through.
DoChatPH64 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Only allow vent 2 to be a good shot if player is not in these angled areas. Make sure all corners are on screen for a good shot.
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-627.874512,-229.483047,57.600204>>, <<-623.348755,-244.309509,54.267174>>, 2.250000)
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-624.594482,-237.525116,57.904713>>, <<-610.178711,-230.179276,54.083748>>, 17.000000)
IF DOES_ENTITY_EXIST(Vent2PropBall[0])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[0])
IF DOES_ENTITY_EXIST(Vent2PropBall[1])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[1])
IF DOES_ENTITY_EXIST(Vent2PropBall[2])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[2])
IF DOES_ENTITY_EXIST(Vent2PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[3])
IF DOES_ENTITY_EXIST(Vent2PropBall[4])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[4])
IF DOES_ENTITY_EXIST(Vent2PropBall[5])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[5])
IF DOES_ENTITY_EXIST(Vent2PropBall[6])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[6])
IF DOES_ENTITY_EXIST(Vent2PropBall[7])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[7])
//Shot of the small vents has come through.
DoChatPH64 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//If player is standing on the back vents at coord <<-627, -217.2, 57>>
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-627, -217.2, 57>>, <<4,4,4>>)
//Don't allow any good shots if player is in this zone as his veiw will be completely blocked so should be told to move
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-624.830994,-214.345215,55.705490>>, <<-628.013489,-215.890976,58.207249>>, 1.500000)
IF DOES_ENTITY_EXIST(Vent3PropBall[1])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[1])
//Michael I can't see anything. Climb up onto that vent you should be able to get a better shot.
//Can you climb up this to get a better view?
//You need to get higher, climb on top of this.
DoChatPH65 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(Vent2PropBall[1])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[1])
//Michael I can't see anything. Climb up onto that vent you should be able to get a better shot.
//Can you climb up this to get a better view?
//You need to get higher, climb on top of this.
DoChatPH65 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(Vent3PropBall[2])
IF IS_ENTITY_ON_SCREEN(Vent3PropBall[2])
//Michael I can't see anything. Climb up onto that vent you should be able to get a better shot.
//Can you climb up this to get a better view?
//You need to get higher, climb on top of this.
DoChatPH65 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ELSE
//If vent 2 is on screen with these corners then it's a good shot
IF DOES_ENTITY_EXIST(Vent2PropBall[1])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[1])
IF DOES_ENTITY_EXIST(Vent2PropBall[2])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[2])
IF DOES_ENTITY_EXIST(Vent2PropBall[3])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[3])
IF DOES_ENTITY_EXIST(Vent2PropBall[7])
IF IS_ENTITY_ON_SCREEN(Vent2PropBall[7])
IF DOES_ENTITY_EXIST(MainVentPropBall[1])
IF NOT IS_ENTITY_ON_SCREEN(MainVentPropBall[1])
//Shot of the small vents has come through.
DoChatPH64 = TRUE
GoodShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Run the main check here for moving the stage on
IF playerInPerfectPlace = TRUE
IF DOES_ENTITY_EXIST(MainVentPropBall[0])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[0])
IF DOES_ENTITY_EXIST(MainVentPropBall[1])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[1])
IF DOES_ENTITY_EXIST(MainVentPropBall[2])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[2])
IF DOES_ENTITY_EXIST(MainVentPropBall[3])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[3])
//Shot's come through of the ventalation system, perfect Michael.
DoChatPH60 = TRUE
PerfectShotDialogueRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//If only the left side is on screen tell player to move more to the right
IF DOES_ENTITY_EXIST(MainVentPropBall[3])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[3])
IF DOES_ENTITY_EXIST(MainVentPropBall[0])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[0])
IF DOES_ENTITY_EXIST(MainVentPropBall[1])
IF NOT IS_ENTITY_ON_SCREEN(MainVentPropBall[1])
IF DOES_ENTITY_EXIST(MainVentPropBall[2])
IF NOT IS_ENTITY_ON_SCREEN(MainVentPropBall[2])
//Move slightly more to the right Michael.
//Try and get the whole vent in the shot Michael.
//Can you look more to the right please.
DoChatPH62 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//If only the left side is on screen tell player to move more to the left
IF DOES_ENTITY_EXIST(MainVentPropBall[1])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[1])
IF DOES_ENTITY_EXIST(MainVentPropBall[3])
IF NOT IS_ENTITY_ON_SCREEN(MainVentPropBall[3])
IF DOES_ENTITY_EXIST(MainVentPropBall[0])
IF NOT IS_ENTITY_ON_SCREEN(MainVentPropBall[0])
//Can you move the camera left a bit.
//Try and get the whole vent in the shot Michael.
//Look more to the left Michael.
DoChatPH63 = TRUE
GoodButNotRightChatRequired = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
PhotoJustTaken = FALSE
ENDIF
//DO THE DIALOGUE FOR THE SHOT
IF SnapDialogueNeeded = TRUE
IF GoodShotDone = FALSE
IF PerfectShotDialogueRequired = TRUE
IF DoChatPH60 = TRUE
IF doneChatPH60 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH60", CONV_PRIORITY_MEDIUM)
//Shot's come through of the ventalation system, perfect Michael.
doneChatPH60 = TRUE
PerfectShotDialogueRequired = FALSE
GoodShotDone = TRUE
SnapDialogueNeeded = FALSE
ENDIF
ELSE
//run a check here for the god text being on screen so you can clear it.
IF doneGodTextMainVent = TRUE
IF GET_GAME_TIMER() < (iVentGodTextTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do dialogue for a good shot getting taken
IF GoodShotDialogueRequired = TRUE
AND PerfectShotDialogueRequired = FALSE
IF DoChatPH57 = TRUE
IF doneChatPH57 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH57", CONV_PRIORITY_MEDIUM)
//Okay, if my calculations are right they must be the vents directly above the store.
doneChatPH57 = TRUE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH57 = FALSE
ENDIF
ENDIF
ENDIF
ELSE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH57 = FALSE
ENDIF
ENDIF
IF DoChatPH64 = TRUE
IF doneChatPH64 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH64", CONV_PRIORITY_MEDIUM)
//Shot of the small vents has come through.
doneChatPH64 = TRUE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH64 = FALSE
ENDIF
ENDIF
ENDIF
ELSE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH64 = FALSE
ENDIF
ENDIF
IF DoChatPH61 = TRUE
IF doneChatPH61 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH61", CONV_PRIORITY_MEDIUM)
//We'll be able to get up to them using those ladders.
doneChatPH61 = TRUE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH61 = FALSE
ENDIF
ENDIF
ENDIF
ELSE
GoodShotDialogueRequired = FALSE
HigherChatNeeded = TRUE
DoChatPH61 = FALSE
ENDIF
ENDIF
ENDIF
IF HigherChatNeeded = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH66", CONV_PRIORITY_MEDIUM)
//We could do with a shot of that main vent. Try and get higher up.
//Can you get higher up and get a shot of that main vent that's surrounded with barb wire.
//We need a shot of the main vent above the store. Get higher Michael.
OkShotDone = TRUE
SnapDialogueNeeded = FALSE
HigherChatNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//Do dialogue for a shot being taken in the right direction but just not quite right
IF GoodButNotRightChatRequired = TRUE
AND GoodShotDialogueRequired = FALSE
AND PerfectShotDialogueRequired = FALSE
IF DoChatPH59 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH59", CONV_PRIORITY_MEDIUM)
//Move more to the right, I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH59 = FALSE
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF DoChatPH58 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH58", CONV_PRIORITY_MEDIUM)
//Move more to the left I can't get a clear view.
//Shot's blocked off Michael, move over a bit.
//This shot's no use Michael.
DoChatPH58 = FALSE
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF DoChatPH62 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH62", CONV_PRIORITY_MEDIUM)
//Move slightly more to the right Michael.
//Try and get the whole vent in the shot Michael.
//Can you look more to the right please.
DoChatPH62 = FALSE
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF DoChatPH63 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH63", CONV_PRIORITY_MEDIUM)
//Can you move the camera left a bit.
//Try and get the whole vent in the shot Michael.
//Look more to the left Michael.
DoChatPH63 = FALSE
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF DoChatPH65 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH65", CONV_PRIORITY_MEDIUM)
//Michael I can't see anything. Climb up onto that vent you should be able to get a better shot.
//Can you climb up this to get a better view?
//You need to get higher, climb on top of this.
DoChatPH65 = FALSE
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do chat if the photo is useless
IF GoodButNotRightChatRequired = FALSE
AND GoodShotDialogueRequired = FALSE
AND PerfectShotDialogueRequired = FALSE
AND playerTakingPhoto = TRUE
IF OkShotDone = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_WRONG", CONV_PRIORITY_MEDIUM)
//No, no. Their air conditioning roof unit.
//It's like a big box.. on the roof.
//We need to know where those vents come out.
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ELSE
IF playerInPerfectPlace = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH54", CONV_PRIORITY_MEDIUM)
//You need to get higher up Michael.
//This is no good try and get higher.
//You are not high enough.
NotHighEnoughTimer = GET_GAME_TIMER()
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_WRONG", CONV_PRIORITY_MEDIUM)
//No, no. Their air conditioning roof unit.
//It's like a big box.. on the roof.
//We need to know where those vents come out.
GoodButNotRightChatRequired = FALSE
SnapDialogueNeeded = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GoodShotDone = TRUE
//Do move stage on chat
IF donePH43Chat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH43", CONV_PRIORITY_MEDIUM)
//Okay. That'll do. Come back to me before someone spots you up there.
//Will do.
iHurryUpChatTimer = GET_GAME_TIMER()
donePH43Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Do some random chat from Lester if Michael continues to take photo's after being told to get back to the car
IF playerTakingPhoto = TRUE
IF donePH43Chat = TRUE
IF GET_GAME_TIMER() > (iHurryUpChatTimer + 7000)
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH48", CONV_PRIORITY_MEDIUM)
//Come on, Michael. Let's go.
//Let's hurry this up, Michael.
//If you take any longer, you're risking blowing this whole thing.
//Let's speed this up, we don't want to draw attention.
iHurryUpChatTimer = GET_GAME_TIMER()
donePH43Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Delete all the balls now to clean up memory
IF ballsDeleted = FALSE
IF GoodShotDone = TRUE
FOR icount = 0 TO 7
IF DOES_ENTITY_EXIST(Vent1PropBall[icount])
DELETE_OBJECT(Vent1PropBall[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 7
IF DOES_ENTITY_EXIST(Vent2PropBall[icount])
DELETE_OBJECT(Vent2PropBall[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 7
IF DOES_ENTITY_EXIST(Vent3PropBall[icount])
DELETE_OBJECT(Vent3PropBall[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 5
IF DOES_ENTITY_EXIST(SouthWallPropBall[icount])
DELETE_OBJECT(SouthWallPropBall[icount])
ENDIF
ENDFOR
FOR icount = 0 TO 3
IF DOES_ENTITY_EXIST(MainVentPropBall[icount])
DELETE_OBJECT(MainVentPropBall[icount])
ENDIF
ENDFOR
ballsDeleted = TRUE
ENDIF
ENDIF
ENDPROC
//PURPOSE: Stage where Michael checks out the roof access for getting to the vents.
PROC DO_STAGE_CHECK_OUT_ROOF()
//Anything that needs called every fram throughout this stage
SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(player_id())
SWEATSHOP_AMBIENT_CONTROLLER()
JEWEL_STORE_STAFF_CONTROLLER()
IF GET_GAME_TIMER() > (iSaveHouseCheck + 5000)
IF playerInSafeHouse = FALSE
IF IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = TRUE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
IF playerInSafeHouse = TRUE
IF NOT IS_PLAYER_IN_SAVEHOUSE()
playerInSafeHouse = FALSE
ENDIF
iSaveHouseCheck = GET_GAME_TIMER()
ENDIF
ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
AND NOT IS_PLAYER_IN_ANY_SHOP()
AND NOT IS_PED_JUMPING(PLAYER_PED_ID())
AND NOT playerInSafeHouse
AND NOT IS_PED_CLIMBING(PLAYER_PED_ID())
AND NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID())
AND NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
AND bMissionFailed = FALSE
GLASSES_CAM_CONTROLLER()
ELSE
IF GlassesCamActive = TRUE
GLASSES_CAM_CONTROLLER()
ENDIF
ENDIF
ROOF_PIC_CONTROLLER()
IF iControlFlag = 0
IF MissionStageBeingSkippedTo = TRUE
STAGE_SELECTOR_MISSION_SETUP()
MissionStageBeingSkippedTo = FALSE
ENDIF
//**************SET MID MISSION CHECK POINT HERE*******************//
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "STAGE_CHECK_ROOF")
PRINTSTRING("***********MID MISSION STAGE SET TO 3***********") PRINTNL()
IF IS_VEHICLE_DRIVEABLE(vehCar)
FREEZE_ENTITY_POSITION(vehCar, FALSE)
ENDIF
// SET FLAGS
CanMissionFail = TRUE
donePH44Chat = FALSE
donePH42Chat = FALSE
doneDESCChat = FALSE
playerOnRoof = FALSE
moveStageOnTimerSet = FALSE
donePH43Chat = FALSE
donePH45Chat = FALSE
donePH46Chat = FALSE
DoneGlassesHelpText = FALSE
doneGotoCar2Text = FALSE
modelsRequested = FALSE
MusicStarted[2] = FALSE
donePH23Chat = TRUE
doneOLDCREWChat = FALSE
doneHelp1Text = FALSE
// doneHelp2Text = FALSE
PausedOldCrewChat = FALSE
doneVentChat = FALSE
donePH51Chat = FALSE
playerHasBeenAtPerfectPlace = FALSE
doneVentsBlipText = FALSE
doneVentsGodText = FALSE
updatedGodText3 = FALSE
// SyncdSceneDisrupted = FALSE
PlayerCantFindVentsTimerSet = FALSE
DoChatPH57 = FALSE
GoodShotDialogueRequired = FALSE
GoodButNotRightChatRequired = FALSE
DoChatPH58 = FALSE
DoChatPH59 = FALSE
DoChatPH60 = FALSE
GoodShotDone = FALSE
doneChatPH57 = FALSE
doneChatPH60 = FALSE
ballsDeleted = FALSE
BallsForVentsCreated = FALSE
DoChatPH61 = FALSE
doneChatPH61 = FALSE
playerInPerfectPlace = FALSE
DoChatPH62 = FALSE
DoChatPH63 = FALSE
DoChatPH64 = FALSE
HigherChatNeeded = FALSE
doneChatPH64 = FALSE
PerfectShotDialogueRequired = FALSE
DoChatPH65 = FALSE
OkShotDone = FALSE
hintCamCancelled = FALSE
doneChatPH68 = FALSE
doneChatPH69 = FALSE
doneGodTextMainVent = FALSE
doneReturnText = FALSE
doneChat46 = FALSE
openingDialogueRequired = FALSE
doneChatPH32 = FALSE
playerInSafeHouse = FALSE
iVentGodTextTimer = 0
iChat46Timer = 0
iSaveHouseCheck = GET_GAME_TIMER()
// //Request the worker model here
// REQUEST_MODEL(S_M_Y_CONSTRUCT_01)
// REQUEST_WAYPOINT_RECORDING("BB_JEW_3")
// REQUEST_WAYPOINT_RECORDING("BB_JEW_4")
#IF IS_DEBUG_BUILD
jSkipReady = TRUE
pSkipReady = TRUE
#ENDIF
SETTIMERA(0)
IF NOT IS_PED_INJURED(pedContact)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
ENDIF
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehCar)
openingDialogueRequired = TRUE
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
CLEAR_AREA(<<-587.7646, -287.2640, 49.3291>>, 5, TRUE)
ScenarioBlocking[4] = ADD_SCENARIO_BLOCKING_AREA(<<-590.7, -292.8, 46>>, <<-575.7, -280.4, 54.6>>)
iHurryUpRoofTimer = GET_GAME_TIMER()
NotHighEnoughTimer = GET_GAME_TIMER()
SET_ROADS_IN_AREA(<<-611.9, -362.4, 30>>, <<-558.6, -264.5, 45>>, FALSE)
SET_ROADS_IN_AREA(<<-538.9, -296.7, 43.3>>, <<-631.3, -185.2, 30>>, FALSE)
IF NOT DOES_BLIP_EXIST(BlipRoofCheck)
BlipRoofCheck = CREATE_BLIP_FOR_COORD(<<-591.8343, -291.3900, 49.3270>>)//(<<-593.5949, -292.3533, 40.6863>>)
ENDIF
vplayerStartRoofCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 1
ENDIF
IF iControlFlag = 1
//Allow player to cancel hintcam if he moves the right analogue stick
INT iLeftx, iLefty, iRightX, iRightY
IF hintCamCancelled = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iLeftx, iLefty, iRightX, iRightY)
IF iRightX > 10
OR iRightX < -10
OR iRightX > 10
OR iRightX < -10
STOP_GAMEPLAY_HINT()
hintCamCancelled = TRUE
ENDIF
ELSE
STOP_GAMEPLAY_HINT()
hintCamCancelled = TRUE
ENDIF
ENDIF
IF openingDialogueRequired = TRUE
IF doneChatPH32 = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH32", CONV_PRIORITY_MEDIUM)
//See if you can get up to the roof. We need a shot of their airconditioning unit.
doneChatPH32 = TRUE
ENDIF
ENDIF
ENDIF
IF doneChatPH32 = TRUE
OR openingDialogueRequired = FALSE
IF updatedGodText3 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
PRINT_NOW("GOD6", DEFAULT_GOD_TEXT_TIME, 1)//~s~Go to the ~y~roof top.
updatedGodText3 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Update audio
IF updatedGodText3 = TRUE
IF DOES_ENTITY_EXIST(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_BACK_ENTRANCE")
STOP_AUDIO_SCENE("JSH_1_DRIVE_TO_BACK_ENTRANCE")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_GET_TO_ROOF")
START_AUDIO_SCENE("JSH_1_GET_TO_ROOF")
ENDIF
IF doneOLDCREWChat = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehCar) > 8
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_OLDCREW", CONV_PRIORITY_MEDIUM)
//So, you keep up with the old crew? ....
doneOLDCREWChat = TRUE
ENDIF
ENDIF
ENDIF
ELSE
//Pause this chat if it has started
IF PausedOldCrewChat = FALSE
IF doneOLDCREWChat = TRUE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
JHS1_OLDCREW1 = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
KILL_ANY_CONVERSATION()
PausedOldCrewChat = TRUE
ENDIF
ENDIF
ENDIF
//Have Lester tell Michael to get back and check out the roof if he drives off
IF doneChat46 = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vplayerStartRoofCoords) > 8
OR GET_GAME_TIMER() > (iHurryUpRoofTimer + 8000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH46", CONV_PRIORITY_MEDIUM)
//We need eyes on that roof, Michael.
//If you want me to help you with this, go back and find a way up to the roof.
//You're here, and you're meant to be fifty feet above us.
//You know how I work, I need to see everything. Get up on the roof.
//This job is only half done. Get some images of the roof please.
iChat46Timer = GET_GAME_TIMER()
doneChat46 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF GET_GAME_TIMER() > (iChat46Timer + 10000)
AND bMissionFailed = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH46", CONV_PRIORITY_MEDIUM)
//We need eyes on that roof, Michael.
//If you want me to help you with this, go back and find a way up to the roof.
//You're here, and you're meant to be fifty feet above us.
//You know how I work, I need to see everything. Get up on the roof.
//This job is only half done. Get some images of the roof please.
iChat46Timer = GET_GAME_TIMER()
doneChat46 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
//Pause the chat so Lester can mention the ladders
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-593.5949, -292.3533, 40.68631>>, <<4.5, 4.5, 4.5>>)
IF PausedOldCrewChat = FALSE
IF doneOLDCREWChat = TRUE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
JHS1_OLDCREW1 = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
KILL_ANY_CONVERSATION()
PausedOldCrewChat = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF PausedOldCrewChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_OLDCREW", JHS1_OLDCREW1, CONV_PRIORITY_MEDIUM)
PausedOldCrewChat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-593.5949, -292.3533, 40.68631>>, <<2.5, 2.5, LOCATE_SIZE_HEIGHT>>)
// IF DOES_BLIP_EXIST(BlipRoofCheck)
// REMOVE_BLIP(BlipRoofCheck)
// ENDIF
//Do some help text to tell player he can call his buddies in to help as long as FBI 2 hasn't been done.
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_LAMAR) = FALSE
IF doneHelp1Text = FALSE
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
PRINT_HELP("JH_HELP1")//~s~Walk into ladders to use them.
doneHelp1Text = TRUE
ENDIF
ENDIF
ENDIF
// BlipRoofCheck = CREATE_BLIP_FOR_COORD(<<-591.8343, -291.3900, 49.3270>>)
iControlFlag = 2
ELSE
IF NOT DOES_BLIP_EXIST(BlipRoofCheck)
BlipRoofCheck = CREATE_BLIP_FOR_COORD(<<-593.5949, -292.3533, 40.6863>>)
ENDIF
ENDIF
ELSE
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-593.5949, -292.3533, 40.68631>>, <<2.5, 2.5, LOCATE_SIZE_HEIGHT>>)
iControlFlag = 2
ENDIF
IF DOES_BLIP_EXIST(BlipRoofCheck)
CLEAR_PRINTS()
REMOVE_BLIP(BlipRoofCheck)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
ENDIF
ENDIF
IF iControlFlag = 2
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
// PRINTSTRING("vplayerCoords = ") PRINTVECTOR(vplayerCoords) PRINTNL()
//Dialogue Lester tells Michael to go up the stairs
IF donePH44Chat = FALSE
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-594.163025,-292.805176,40.685013>>, <<-595.490173,-293.655762,44.435013>>, 1.250000)
AND vplayerCoords.z < 42
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH44", CONV_PRIORITY_MEDIUM)
//I saw a ladder. Climb up it and see if you can get to the roof.
donePH44Chat = TRUE
ENDIF
ELSE
donePH44Chat = TRUE
ENDIF
ENDIF
IF donePH44Chat = TRUE
IF PausedOldCrewChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_OLDCREW", JHS1_OLDCREW1, CONV_PRIORITY_MEDIUM)
PausedOldCrewChat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-591.8343, -291.3900, 49.32705>>, <<2, 2, LOCATE_SIZE_HEIGHT>>, TRUE)
ENDIF
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-591.8343, -291.3900, 49.32705>>) < 15
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-594.091919,-298.258606,48.078365>>, <<-599.060669,-289.398438,53.927658>>, 8.750000)
AND vplayerCoords.z > 49
IF DOES_BLIP_EXIST(BlipRoofCheck)
REMOVE_BLIP(BlipRoofCheck)
ENDIF
playerOnRoof = TRUE
iControlFlag = 3
ELSE
IF NOT DOES_BLIP_EXIST(BlipRoofCheck)
BlipRoofCheck = CREATE_BLIP_FOR_COORD(<<-591.8343, -291.3900, 49.3270>>)
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-590.501221,-293.780090,48.827049>>, <<-592.811951,-289.341644,51.577053>>, 3.250000)
iControlFlag = 3
ENDIF
IF DOES_BLIP_EXIST(BlipRoofCheck)
CLEAR_PRINTS()
REMOVE_BLIP(BlipRoofCheck)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
ENDIF
ENDIF
// IF NOT DOES_ENTITY_EXIST(RoofWorker)
// IF HAS_MODEL_LOADED(S_M_Y_CONSTRUCT_01)
// AND GET_IS_WAYPOINT_RECORDING_LOADED("BB_JEW_3")
// AND GET_IS_WAYPOINT_RECORDING_LOADED("BB_JEW_4")
// RoofWorker = CREATE_PED(PEDTYPE_MISSION, S_M_Y_CONSTRUCT_01, <<-586.7599, -285.6788, 34.4548>>, 41.9557)
//
// SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_CONSTRUCT_01)
// OPEN_SEQUENCE_TASK(seqWorker)
// TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "BB_JEW_3", 10)
// TASK_CLIMB_LADDER(NULL, FALSE)
// TASK_CLIMB_LADDER(NULL, FALSE)
// TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "BB_JEW_4", 10)
// CLOSE_SEQUENCE_TASK(seqWorker)
// TASK_PERFORM_SEQUENCE(RoofWorker, seqWorker)
// CLEAR_SEQUENCE_TASK(seqWorker)
//
// //Do dialogue for Lester warning Michael someone is coming..
// KILL_ANY_CONVERSATION()
// iControlFlag = 3
// ENDIF
// ENDIF
IF iControlFlag = 3
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF playerOnRoof = TRUE
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-625.9142, -216.1591, 58.4256>>, <<5,5,5>>)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-624.356567,-215.621429,60.207253>>, <<-627.705872,-217.354919,58.207253>>, 2.750000)
IF DOES_BLIP_EXIST(ventsBlip)
REMOVE_BLIP(ventsBlip)
ENDIF
//have some dialogue for getting to the perfect spot
IF doneChatPH68 = FALSE
IF GoodShotDone = FALSE
AND SnapDialogueNeeded = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH68", CONV_PRIORITY_MEDIUM)
//Right, you should be able to get a good shot of that main vent now.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
doneChatPH68 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Create a blip and have some chat if the player looks at the vent but hasn't taken a pic of it yet.
IF NOT DOES_BLIP_EXIST(MainVentBlip)
IF GoodShotDone = FALSE
AND SnapDialogueNeeded = FALSE
IF DOES_ENTITY_EXIST(MainVentPropBall[0])
IF DOES_ENTITY_EXIST(MainVentPropBall[1])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[1])
IF DOES_ENTITY_EXIST(MainVentPropBall[3])
IF IS_ENTITY_ON_SCREEN(MainVentPropBall[3])
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF doneChatPH69 = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH69", CONV_PRIORITY_MEDIUM)
//Ok Michael, get a pic of that vent and we're done.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
doneChatPH69 = TRUE
ENDIF
ENDIF
MainVentBlip = CREATE_BLIP_FOR_OBJECT(MainVentPropBall[0])
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF GoodShotDone = FALSE
AND GlassesCamActive = FALSE
IF doneGodTextMainVent = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("GOD7", DEFAULT_GOD_TEXT_TIME, 1)
//~s~Take a photo of the ~g~vent.
iVentGodTextTimer = GET_GAME_TIMER()
doneGodTextMainVent = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(MainVentBlip)
REMOVE_BLIP(MainVentBlip)
ENDIF
ENDIF
ENDIF
playerHasBeenAtPerfectPlace = TRUE
playerInPerfectPlace = TRUE
ELSE
IF DOES_BLIP_EXIST(MainVentBlip)
IF GET_GAME_TIMER() < (iVentGodTextTimer + DEFAULT_GOD_TEXT_TIME)
AND IS_MESSAGE_BEING_DISPLAYED()
CLEAR_PRINTS()
ENDIF
REMOVE_BLIP(MainVentBlip)
ENDIF
IF moveStageOnTimerSet = FALSE
IF doneVentsBlipText = TRUE
IF NOT DOES_BLIP_EXIST(ventsBlip)
ventsBlip = CREATE_BLIP_FOR_COORD(<<-625.8755, -216.6342, 58.4256>>)
PRINTSTRING("creating blip as player took too long") PRINTNL()
ELSE
//Draw the locate if the blip exists
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-625.8755, -216.6342, 58.4256>>,<<2, 2, LOCATE_SIZE_HEIGHT>>, TRUE, TRUE, TM_ANY)
ENDIF
ENDIF
ENDIF
ENDIF
playerInPerfectPlace = FALSE
ENDIF
ELSE
IF DOES_BLIP_EXIST(MainVentBlip)
REMOVE_BLIP(MainVentBlip)
ENDIF
IF moveStageOnTimerSet = FALSE
IF doneVentsBlipText = TRUE
IF NOT DOES_BLIP_EXIST(ventsBlip)
ventsBlip = CREATE_BLIP_FOR_COORD(<<-625.8755, -216.6342, 58.4256>>)
PRINTSTRING("creating blip as player took too long") PRINTNL()
ELSE
//Draw the locate if the blip exists
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-625.8755, -216.6342, 58.4256>>,<<2, 2, LOCATE_SIZE_HEIGHT>>, TRUE, TRUE, TM_ANY)
ENDIF
ENDIF
ENDIF
ENDIF
playerInPerfectPlace = FALSE
ENDIF
ENDIF
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
//checking if player is on the rooftop or not.
IF vplayerCoords.z < 48
playerOnRoof = FALSE
ELSE
playerOnRoof = TRUE
ENDIF
//Have a timer to start the hurry up chat from Lester if Michael is taking too long
IF PlayerCantFindVentsTimerSet = FALSE
IF playerOnRoof = TRUE
iPlayerCantFindVents = GET_GAME_TIMER()
PlayerCantFindVentsTimerSet = TRUE
ENDIF
ENDIF
//Add a blip for the vents and some chat if player takes too long to find them
IF GoodShotDone = FALSE
IF playerInPerfectPlace = FALSE
IF donePH51Chat = FALSE
IF playerHasBeenAtPerfectPlace = FALSE
IF PlayerCantFindVentsTimerSet = TRUE
IF GET_GAME_TIMER() > (iPlayerCantFindVents + 40000)
OR doneVentChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH51", CONV_PRIORITY_MEDIUM)
//According to my smart phone, the highest point seems to be at the North West side.
//You should be able to get a good shot from there.
donePH51Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//update God Text
IF playerIsHighEnough = FALSE
IF moveStageOnTimerSet = FALSE
IF doneVentsBlipText = FALSE
IF donePH51Chat = TRUE
OR playerHasBeenAtPerfectPlace = TRUE
// IF DOES_BLIP_EXIST(ventsBlip)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CLEAR_PRINTS()
PRINT_NOW("GOD4", DEFAULT_GOD_TEXT_TIME, -1)//~s~Go to the ~y~vantage point
doneVentsBlipText = TRUE
ENDIF
// ENDIF
ENDIF
ENDIF
ENDIF
IF doneVentsGodText = FALSE
IF donePH42Chat = TRUE
AND doneDESCChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CLEAR_PRINTS()
PRINT_NOW("GOD5", DEFAULT_GOD_TEXT_TIME, -1)// ~s~Get to high ground and take some shots.
doneVentsGodText = TRUE
ENDIF
ENDIF
ENDIF
IF doneVentsGodText = FALSE
IF playerHasBeenAtPerfectPlace = TRUE
IF moveStageOnTimerSet = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CLEAR_PRINTS()
PRINT_NOW("GOD5", DEFAULT_GOD_TEXT_TIME, -1)// ~s~Get to high ground and take some pics.
doneVentsGodText = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Dialogue Lester tells Michael to find the vents
IF donePH42Chat = FALSE
//Pause their chat so Lester can give instructions on what to do on the roof
IF PausedOldCrewChat = FALSE
IF doneOLDCREWChat = TRUE
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
JHS1_OLDCREW1 = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
KILL_ANY_CONVERSATION()
PRINTSTRING("KILL_ANY_CONVO CALLED 1") PRINTNL()
PausedOldCrewChat = TRUE
ENDIF
ENDIF
ENDIF
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH42", CONV_PRIORITY_MEDIUM)
//I'm on the roof.
donePH42Chat = TRUE
ENDIF
ENDIF
IF donePH42Chat = TRUE
IF doneDESCChat = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_DESC", CONV_PRIORITY_MEDIUM)
//Alright, use the glasses to get me a shot of Vangelico's roof unit. It'll be right above the store.
//I need to know where the air coming out those vents in Vangelico originates. There should be a unit above the store.
doneDESCChat = TRUE
ENDIF
ENDIF
ENDIF
ELSE
//Resume the oldcrew chat now
IF playerIsHighEnough = FALSE
AND moveStageOnTimerSet = FALSE
IF doneVentsGodText = TRUE
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF PausedOldCrewChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_OLDCREW", JHS1_OLDCREW1, CONV_PRIORITY_MEDIUM)
PausedOldCrewChat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Do some chat once player gets above the store at the vents
IF doneVentChat = FALSE
IF playerIsHighEnough = TRUE
AND NOT IS_PED_CLIMBING(PLAYER_PED_ID())
// PRINTSTRING("playerIsHighEnough = TRUE") PRINTNL()
KILL_ANY_CONVERSATION()
PRINTSTRING("KILL_ANY_CONVO CALLED 3") PRINTNL()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH52", CONV_PRIORITY_MEDIUM)
//I can see the vents from up here.
//Yeah i'm seeing them. Can't you get any higher up Michael?
PRINTSTRING("Creating conversation PH52") PRINTNL()
doneVentChat = TRUE
ENDIF
ELSE
// PRINTSTRING("playerIsHighEnough = FALSE") PRINTNL()
ENDIF
ELSE
// PRINTSTRING("doneVentChat = TRUE") PRINTNL()
ENDIF
//Start the move stage on timer once the player has taken a photo whilst at the vents location
IF moveStageOnTimerSet = FALSE
IF GoodShotDone = TRUE
iMoveStageOnTimer = GET_GAME_TIMER()
moveStageOnTimerSet = TRUE
ENDIF
ENDIF
//Do some dialogue if player is taking pics from a bad point.
IF GoodShotDone = FALSE
AND playerInPerfectPlace = FALSE
IF playerIsHighEnough = FALSE
IF playerTakingPhoto = TRUE
IF GET_GAME_TIMER() > (NotHighEnoughTimer + 5000)
PRINTSTRING("KILL_ANY_CONVO CALLED 4") PRINTNL()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH54", CONV_PRIORITY_MEDIUM)
//You need to get higher up Michael.
//This is no good try and get higher.
//You are not high enough.
NotHighEnoughTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Update Audio when glasses are being used.
IF GlassesCamActive = FALSE
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_TAKE_PHOTOS")
STOP_AUDIO_SCENE("JSH_1_TAKE_PHOTOS")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_GET_TO_ROOF")
START_AUDIO_SCENE("JSH_1_GET_TO_ROOF")
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_GET_TO_ROOF")
STOP_AUDIO_SCENE("JSH_1_GET_TO_ROOF")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_TAKE_PHOTOS")
START_AUDIO_SCENE("JSH_1_TAKE_PHOTOS")
ENDIF
ENDIF
//Lester should give Michael shit if he is off the roof at this stage
IF moveStageOnTimerSet = FALSE
IF playerOnRoof = FALSE
IF NOT DOES_BLIP_EXIST(BlipRoofCheck)
BlipRoofCheck = CREATE_BLIP_FOR_COORD(<<-591.8343, -291.3900, 49.3270>>)
ENDIF
IF DOES_BLIP_EXIST(ventsBlip)
REMOVE_BLIP(ventsBlip)
ENDIF
//Dialogue Lester tells Michael to get back to the roof
IF donePH45Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH45", CONV_PRIORITY_MEDIUM)
//What are you doing? Get back to the roof Michael. Stop messing around.
//Michael, hurry up. Get a snap of the roof and let's get out of here.
iWarnMichaelChatTimer = GET_GAME_TIMER()
donePH45Chat = TRUE
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF donePH46Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH46", CONV_PRIORITY_MEDIUM)
//What are you doing? We need to find a way up to the rooftop.
//Get out the car and find us a way to the roof. Hurry up.
iWarnMichaelChatTimer = GET_GAME_TIMER()
donePH46Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_GAME_TIMER() > (iWarnMichaelChatTimer + 20000)
donePH45Chat = FALSE
donePH46Chat = FALSE
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipRoofCheck)
REMOVE_BLIP(BlipRoofCheck)
ENDIF
ENDIF
ENDIF
//Move the stage on once player has been to the vents and has taken a photo of the them
IF moveStageOnTimerSet = TRUE
IF GET_GAME_TIMER() > (iMoveStageOnTimer + 10000)
OR donePH43Chat = TRUE
IF DOES_BLIP_EXIST(ventsBlip)
REMOVE_BLIP(ventsBlip)
ENDIF
//Dialogue Lester tells Michael to take some pics
IF donePH43Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH43", CONV_PRIORITY_MEDIUM)
//Okay. That'll do. Come back to me before someone spots you up there.
//Will do.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
donePH43Chat = TRUE
ENDIF
ENDIF
TRIGGER_MUSIC_EVENT("JH1_STOP_TRACK_ACTION")
iHurryUpChatTimer = GET_GAME_TIMER()
iControlFlag = 4
PRINTSTRING("Moving stage on") PRINTNL()
ENDIF
ENDIF
//Have some dialogue if player is taking too long to exit the glasses
IF donePH43Chat = TRUE
IF GET_GAME_TIMER() > (iHurryUpChatTimer + 13000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH48", CONV_PRIORITY_MEDIUM)
//Come on, Michael. Let's go.
//WLet's hurry this up, Michael.
//If you take any longer, you're risking blowing this whole thing.
//Let's speed this up, we don't want to draw attention.
iHurryUpChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipRoofCheck)
CLEAR_PRINTS()
REMOVE_BLIP(BlipRoofCheck)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
IF DOES_BLIP_EXIST(ventsBlip)
REMOVE_BLIP(ventsBlip)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
ENDIF
ENDIF
// //Dialogue Lester warns Michael that someone is coming.
// IF donePH30Chat = FALSE
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH30", CONV_PRIORITY_MEDIUM)
// //Shit, someone's coming Michael, hide quick!
// donePH30Chat = TRUE
// ENDIF
// ENDIF
//
// IF vplayerCoords.z < vworkerCoords.z
// AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), RoofWorker) > 5
// IF donePH31Chat = FALSE
// IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH31", CONV_PRIORITY_MEDIUM)
// //That was close, i'm coming back.
// donePH31Chat = TRUE
// ENDIF
// ENDIF
// IF donePH31Chat = TRUE
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
// IF NOT DOES_BLIP_EXIST(BlipVeh)
// BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
// PRINT_NOW("GOTO_CAR2", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in the ~b~car.
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
IF iControlFlag = 4
IF donePH43Chat = FALSE
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH43", CONV_PRIORITY_MEDIUM)
//Okay. That'll do. Come back to me before someone spots you up there.
//Will do.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
donePH43Chat = TRUE
ENDIF
ENDIF
IF doneGotoCar2Text = FALSE
IF donePH43Chat = TRUE
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
CLEAR_HELP()
PRINT_NOW("GOTO_CAR5", DEFAULT_GOD_TEXT_TIME, 1)//~s~Get back in your ~b~car.
doneGotoCar2Text = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Resume the other chat if required now.
IF doneGotoCar2Text = TRUE
AND donePH43Chat = TRUE
IF doneVentsGodText = TRUE
AND NOT IS_MESSAGE_BEING_DISPLAYED()
IF PausedOldCrewChat = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(MyLocalPedStruct, "JHS1AUD", "JHS1_OLDCREW", JHS1_OLDCREW1, CONV_PRIORITY_MEDIUM)
PausedOldCrewChat = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// //Do some more help text for sliding down ladders here
// IF GET_MISSION_COMPLETE_STATE(SP_MISSION_LAMAR) = FALSE
// IF doneHelp2Text = FALSE
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-594.480164,-294.014130,47.435013>>, <<-595.368652,-292.485565,40.935013>>, 1.500000)
// IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
// PRINT_HELP("JH_HELP2")//~s~Hold ~INPUT_SPRINT~ when going down a ladder to perform a slide.
// doneHelp2Text = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
RELEASE_MISSION_AUDIO_BANK()
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
IF NOT IS_PED_INJURED(pedContact)
TASK_CLEAR_LOOK_AT(pedContact)
ENDIF
SET_ROADS_IN_AREA(<<-611.9, -362.4, 30>>, <<-558.6, -264.5, 45>>, TRUE)
SET_ROADS_IN_AREA(<<-538.9, -296.7, 43.3>>, <<-631.3, -185.2, 30>>, TRUE)
REPLAY_RECORD_BACK_FOR_TIME(8.0, 8.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 0
missionStage = STAGE_DRIVE_TO_WAREHOUSE
ENDIF
ELSE
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
ENDIF
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_GET_TO_ROOF")
STOP_AUDIO_SCENE("JSH_1_GET_TO_ROOF")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_TAKE_PHOTOS")
STOP_AUDIO_SCENE("JSH_1_TAKE_PHOTOS")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH1_RETURN_TO_CAR")
START_AUDIO_SCENE("JSH1_RETURN_TO_CAR")
ENDIF
//Have some random dialogue of Lester telling Michael to hurry up if he's taking too long to get back to the car.
IF GET_GAME_TIMER() > (iHurryUpChatTimer + 40000)
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedContact) > 8
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH48", CONV_PRIORITY_MEDIUM)
//Hurry up Michael, before someone sees you.
//What are you doing? Hurry up and get back to the car.
//Michael are you trying to destroy this job before it's even started? Hurry up!
iHurryUpChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
////PURPOSE: Stage where there is 1 long cutscene of player entering shop with Lester and taking a look around and then leaving
//PROC DO_STAGE_SHOP_CUTSCENE()
//
// IF iControlFlag = 0
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// //**************SET MID MISSION CHECK POINT HERE*******************//
// SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "STAGE_SHOP_CUTSCENE", TRUE)
// PRINTSTRING("***********MID MISSION STAGE SET TO 1***********") PRINTNL()
//
// //DEBUG STAGE SELECTOR
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// MissionStageBeingSkippedTo = FALSE
// ENDIF
//
// CanMissionFail = FALSE
// doneHelpText = FALSE
// doneHelpText2 = FALSE
// doneHelpText3 = FALSE
// Cam1SceneSetup = FALSE
// Cam2SceneSetup = FALSE
// Cam3SceneSetup = FALSE
//// buttonPressed = FALSE
// IcamStage = 0
//
// DELETE_TEMP_STORE_STAFF()
//
// CLEAR_AREA(<<-628.45, -236.06, 38.01>>, 15, TRUE)
// SET_PED_NON_CREATION_AREA(<<-636.08, -240.55, 36>>, <<-616.77, -226.67, 40>>)
//
// WHILE NOT HAS_CUTSCENE_LOADED()
// WAIT(0)
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// ENDWHILE
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// //Register entities for cutscene
// //Lester
// IF NOT IS_PED_INJURED(pedContact)
// REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Players car
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// REGISTER_ENTITY_FOR_CUTSCENE(vehCar, "Michaels_car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Guard
// IF NOT IS_PED_INJURED(shopGuard)
// REGISTER_ENTITY_FOR_CUTSCENE(shopGuard, "Jewellery_security", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Assistant
// IF NOT IS_PED_INJURED(shopAssistant)
// REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "Jewellery_Assitance", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// CLEAR_AREA(<<-682, -236, 36>>, 20, TRUE)
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
//
// START_CUTSCENE()
//
// //For ambient sounds set to 0,0 after cutscene
// SET_PED_WALLA_DENSITY(1, 0.8)
//
//// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
//
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
// REMOVE_PED_FROM_GROUP(pedContact)
// ENDIF
// ENDIF
//
// IF IS_SCREEN_FADED_OUT()
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
// ENDIF
//
// iCutsceneStage ++
//
// BREAK
//
// CASE 1
//
// REQUEST_MODEL(U_M_M_JEWELSEC_01)//security guard
// REQUEST_MODEL(A_F_Y_Business_01)//Shop assistant
// REQUEST_MODEL(CS_JEWELASS)//Shop assistant 2
// REQUEST_MODEL(TAILGATER)
// REQUEST_NPC_PED_MODEL(CHAR_LESTER)
// REQUEST_ANIM_DICT("MISSHEIST_JEWEL")
//// REQUEST_MODEL(A_F_Y_BevHills_03)//High End customer
//
// WHILE NOT HAS_ANIM_DICT_LOADED("MISSHEIST_JEWEL")
// PRINTSTRING("Waiting for anim set to load") PRINTNL()
// WAIT(0)
// ENDWHILE
//
// //Check for skipping cutscene
// IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SPRINT)
// IF IS_HELP_MESSAGE_BEING_DISPLAYED()
// CLEAR_HELP(TRUE)
// ENDIF
// STOP_CUTSCENE()
// ENDIF
//
//// PRINTSTRING("Cutscene time is ") PRINTINT(GET_CUTSCENE_TIME()) PRINTNL()
//
// //Print help text to tell the player to press circle to view other camera angles.
// IF doneHelpText = FALSE
// IF GET_CUTSCENE_TIME() > 20000
// PRINT_HELP("VIEW")//Hold ~INPUT_VEH_CIN_CAM~ to view Lester cam.
// doneHelpText = TRUE
// ENDIF
// ENDIF
// IF doneHelpText2 = FALSE
// IF GET_CUTSCENE_TIME() > 56500
// PRINT_HELP("VIEW")//Hold ~INPUT_VEH_CIN_CAM~ to view Lester cam.
// doneHelpText2 = TRUE
// ENDIF
// ENDIF
// IF doneHelpText3 = FALSE
// IF GET_CUTSCENE_TIME() > 87000
// PRINT_HELP("VIEW")//Hold ~INPUT_VEH_CIN_CAM~ to view Lester cam.
// doneHelpText3 = TRUE
// ENDIF
// ENDIF
//
// //Set up Lester Cam
// IF GET_CUTSCENE_TIME() > 20000
// AND GET_CUTSCENE_TIME() < 121000
//
// SWITCH IcamStage
//
// CASE 0
//
// IF GET_CUTSCENE_TIME() < 56500
// IF NOT DOES_CAM_EXIST(Cam1)
// Cam1 = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
// ELSE
//// PLAY_CAM_ANIM(Cam1, "CAM_JH_1_MCS_1p2_lestercam", "MISSHEIST_JEWEL", <<-632.386, -238.258, 36.997>>, <<0,0,0>>)
//// RENDER_SCRIPT_CAMS(TRUE, FALSE)
//
// IF Cam1SceneSetup = FALSE
// Cam1Scene = CREATE_SYNCHRONIZED_SCENE(<<-632.386, -238.258, 36.997>>, <<0,0,0>>)
// PLAY_SYNCHRONIZED_CAM_ANIM(Cam1, Cam1Scene, "CAM_JH_1_MCS_1p2_lestercam", "MISSHEIST_JEWEL")
// SET_SYNCHRONIZED_SCENE_LOOPED(Cam1Scene, FALSE)
// SET_CAM_ACTIVE(Cam1, TRUE)
// Cam1SceneSetup = TRUE
// ENDIF
//
// ENDIF
//
// ELSE
// IcamStage ++
// ENDIF
//
// BREAK
//
// CASE 1
//
// IF GET_CUTSCENE_TIME() < 85000
// IF NOT DOES_CAM_EXIST(Cam2)
// Cam2 = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
// ELSE
//// PLAY_CAM_ANIM(Cam2, "CAM_JH_1_MCS_2_lestercam", "MISSHEIST_JEWEL", <<-632.386, -238.258, 36.997>>, <<0,0,0>>)
//// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// IF Cam2SceneSetup = FALSE
// Cam2Scene = CREATE_SYNCHRONIZED_SCENE(<<-632.386, -238.258, 36.997>>, <<0,0,0>>)
// PLAY_SYNCHRONIZED_CAM_ANIM(Cam2, Cam2Scene, "CAM_JH_1_MCS_2_lestercam", "MISSHEIST_JEWEL")
// SET_SYNCHRONIZED_SCENE_LOOPED(Cam2Scene, FALSE)
// SET_CAM_ACTIVE(Cam1, FALSE)
// SET_CAM_ACTIVE(Cam2, TRUE)
// Cam2SceneSetup = TRUE
// ENDIF
// ENDIF
// ELSE
// IcamStage ++
// ENDIF
//
// BREAK
//
// CASE 2
//
// IF GET_CUTSCENE_TIME() > 87000
// IF NOT DOES_CAM_EXIST(Cam3)
// Cam3 = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
// ELSE
//// PLAY_CAM_ANIM(Cam3, "CAM_JH_1_MCS_3p1_lestercam", "MISSHEIST_JEWEL", <<-632.386, -238.258, 36.997>>, <<0,0,0>>)
//// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// IF Cam3SceneSetup = FALSE
// Cam3Scene = CREATE_SYNCHRONIZED_SCENE(<<-632.386, -238.258, 36.997>>, <<0,0,0>>)
// PLAY_SYNCHRONIZED_CAM_ANIM(Cam3, Cam3Scene, "CAM_JH_1_MCS_3p1_lestercam", "MISSHEIST_JEWEL")
// SET_SYNCHRONIZED_SCENE_LOOPED(Cam3Scene, FALSE)
// SET_CAM_ACTIVE(Cam2, FALSE)
// SET_CAM_ACTIVE(Cam3, TRUE)
// Cam3SceneSetup = TRUE
// ENDIF
// ENDIF
// ENDIF
//
// BREAK
//
// ENDSWITCH
//
// IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_CANCEL)
//
// //set flags for help text
// doneHelpText = TRUE
// doneHelpText2 = TRUE
// doneHelpText3 = TRUE
//
// IF IS_HELP_MESSAGE_BEING_DISPLAYED()
// CLEAR_HELP(TRUE)
// ENDIF
//
// //INFORM_STAT_JEWELERY_HEIST_SETUP_LESTER_CAM_USED()
//
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// BYPASS_CUTSCENE_CAM_RENDERING_THIS_UPDATE()
//
// ELSE
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
// ENDIF
// ELSE
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
// ENDIF
//
// #IF IS_DEBUG_BUILD
// IF NOT HAS_CUTSCENE_FINISHED()
// IF IS_KEYBOARD_KEY_PRESSED(KEY_J)
// IF IS_HELP_MESSAGE_BEING_DISPLAYED()
// CLEAR_HELP(TRUE)
// ENDIF
// STOP_CUTSCENE()
// ENDIF
// ENDIF
// #ENDIF
//
// IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar, VS_DRIVER)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// ENDIF
// ENDIF
// ENDIF
//
// IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lester")
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// ENDIF
// ENDIF
// ENDIF
//
// IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michaels_car")
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// CLEAR_AREA(<<-662.3000, -265.4466, 34.9446>>, 15, TRUE)
// SET_ENTITY_COORDS(vehCar, <<-662.3000, -265.4466, 34.9446>>)
// SET_ENTITY_HEADING(vehCar, 30.6670)
// SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
// ENDIF
// ENDIF
//
// IF NOT IS_CUTSCENE_ACTIVE()
//
// //Set the ambient sound back to normal
// SET_PED_WALLA_DENSITY(0, 0)
//
// IF IS_HELP_MESSAGE_BEING_DISPLAYED()
// CLEAR_HELP(TRUE)
// ENDIF
//
// REMOVE_ANIM_DICT("MISSHEIST_JEWEL")
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
//// WHILE NOT HAS_MODEL_LOADED(TAILGATER)
//// OR NOT HAS_NPC_PED_MODEL_LOADED(CHAR_LESTER)
//// WAIT(0)
//// ENDWHILE
//
//// IF NOT DOES_ENTITY_EXIST(vehCar)
//// CREATE_PLAYER_VEHICLE(vehCar, CHAR_MICHAEL, << -682.4386, -236.8085, 35.7185 >>, 26.5773)
//// SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER, TRUE)
//// ADD_VEHICLE_UPSIDEDOWN_CHECK(vehCar)
//// ENDIF
////
//// IF NOT DOES_ENTITY_EXIST(pedContact)
//// CREATE_NPC_PED_INSIDE_VEHICLE(pedContact, CHAR_LESTER, vehCar, VS_FRONT_RIGHT, TRUE)
//// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
//// SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
//// ENDIF
//
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
// IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// ENDIF
// ENDIF
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar, VS_DRIVER)
// ENDIF
//// SET_ENTITY_COORDS(vehCar, << -682.4386, -236.8085, 35.7185 >>, FALSE)
//// SET_ENTITY_HEADING(vehCar, 26.5773)
// SET_VEHICLE_ON_GROUND_PROPERLY(vehCar)
// ENDIF
//
//// SET_MODEL_AS_NO_LONGER_NEEDED(TAILGATER)
//// SET_NPC_PED_MODEL_AS_NO_LONGER_NEEDED(CHAR_LESTER)
//
//
//// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//
// PRINTSTRING("CASE 2") PRINTNL()
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// CanMissionFail = TRUE
// CheckpointReplayStarting = FALSE
// iCutsceneStage = 0
// iControlFlag = 0
// missionStage = STAGE_DRIVE_TO_WAREHOUSE
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//
//ENDPROC
////PURPOSE: Cutscene showing Michael and Lester arriving at the jewellers and walking up to the door.
//PROC DO_STAGE_ARRIVAL_CUTSCENE()
//
// IF iControlFlag = 0
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// //DEBUG STAGE SELECTOR
// #IF IS_DEBUG_BUILD
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// MissionStageBeingSkippedTo = FALSE
// ENDIF
// #ENDIF
//
// CanMissionFail = FALSE
//
// WHILE NOT HAS_CUTSCENE_LOADED()
// WAIT(0)
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// ENDWHILE
//
// //temp move car out of shot of mocap, this will be removed once mocap string names have been added
//// IF IS_VEHICLE_DRIVEABLE(vehCar)
//// SET_ENTITY_COORDS(vehCar, << -679.6872, -218.7484, 35.9554 >>)
//// SET_ENTITY_HEADING(vehCar, 303.0053)
//// ENDIF
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// //Register entities for cutscene
// //Lester
// IF NOT IS_PED_INJURED(pedContact)
// REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "A_M_M_Salton_02", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Players car
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// REGISTER_ENTITY_FOR_CUTSCENE(vehCar, "TAILGATER", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Guard
// IF NOT IS_PED_INJURED(shopGuard)
// REGISTER_ENTITY_FOR_CUTSCENE(shopGuard, "U_M_M_JEWELSEC_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Assistant
// IF NOT IS_PED_INJURED(shopAssistant)
// REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "A_F_Y_Business_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// CLEAR_AREA(<<-682, -236, 36>>, 20, TRUE)
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
// START_CUTSCENE()
//
// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
//
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
// REMOVE_PED_FROM_GROUP(pedContact)
// ENDIF
// ENDIF
//
// iCutsceneStage ++
//
// BREAK
//
// CASE 1
//
// REQUEST_MODEL(U_M_M_JEWELSEC_01)//security guard
// REQUEST_MODEL(A_F_Y_Business_01)//Shop assistant
// REQUEST_MODEL(CS_JEWELASS)//Shop assistant 2
// REQUEST_MODEL(A_F_Y_BevHills_03)//High End customer
//
// IF HAS_CUTSCENE_FINISHED()
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//
//// //temp move car out of shot of mocap, this will be removed once mocap string names have been added
//// IF IS_VEHICLE_DRIVEABLE(vehCar)
//// SET_ENTITY_COORDS(vehCar, << -679.5807, -241.5680, 35.6317 >>)
//// SET_ENTITY_HEADING(vehCar, 28.7210)
//// ENDIF
//
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
// //Make sure models have loaded for shop staff
// WHILE NOT HAS_MODEL_LOADED(U_M_M_JEWELSEC_01)
// OR NOT HAS_MODEL_LOADED(A_F_Y_Business_01)
// OR NOT HAS_MODEL_LOADED(CS_JEWELASS)
// OR NOT HAS_MODEL_LOADED(A_F_Y_BevHills_03)
// WAIT(0)
// ENDWHILE
//
// //Set up shop staff and position them for end of cutscene
// IF NOT DOES_ENTITY_EXIST(ShopGuard)
// ShopGuard = CREATE_PED(PEDTYPE_MISSION, U_M_M_JEWELSEC_01, << -630.8696, -235.2035, 37.0570 >>, 248.2723)
// ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, shopGuard, "PED1")
// // RETAIN_ENTITY_IN_INTERIOR(shopGuard, InteriorJewelleryShop)
// ENDIF
// SET_MODEL_AS_NO_LONGER_NEEDED(U_M_M_JEWELSEC_01)
//
// IF NOT DOES_ENTITY_EXIST(ShopAssistant)
// ShopAssistant = CREATE_PED(PEDTYPE_MISSION, CS_JEWELASS, << -622.8374, -229.5900, 37.0570 >>, 314.7467)
// // RETAIN_ENTITY_IN_INTERIOR(ShopAssistant, InteriorJewelleryShop)
// ENDIF
// SET_MODEL_AS_NO_LONGER_NEEDED(CS_JEWELASS)
//
// IF NOT DOES_ENTITY_EXIST(shopAssistant)
// shopAssistant = CREATE_PED(PEDTYPE_MISSION, A_F_Y_Business_01, << -618.6191, -235.5955, 37.0570 >>, 36.0262)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_HEAD, 1, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_BERD, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_HAIR, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_TORSO, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_LEG, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_FEET, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_TEETH, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_DECL, 0, 0)
// SET_PED_COMPONENT_VARIATION(shopAssistant, PED_COMP_JBIB, 0, 0)
//
// CLEAR_PED_PROP(shopAssistant, ANCHOR_HEAD)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_EYES)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_EARS)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_MOUTH)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_LEFT_HAND)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_RIGHT_HAND)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_LEFT_WRIST)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_RIGHT_WRIST)
// CLEAR_PED_PROP(shopAssistant, ANCHOR_HIP)
// ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, shopAssistant, "PED1")
// // RETAIN_ENTITY_IN_INTERIOR(shopAssistant, InteriorJewelleryShop)
// ELSE
// IF NOT IS_PED_INJURED(shopAssistant)
// SET_ENTITY_COORDS(shopAssistant, << -618.6191, -235.5955, 37.0570 >>)
// SET_ENTITY_HEADING(shopAssistant, 36.0262)
// ENDIF
// ENDIF
// SET_MODEL_AS_NO_LONGER_NEEDED(A_F_Y_Business_01)
//
// //Set up high end shop customer
// IF NOT DOES_ENTITY_EXIST(ShopCustomer)
// ShopCustomer = CREATE_PED(PEDTYPE_MISSION, A_F_Y_BevHills_03, << -621.0125, -228.5511, 37.0570 >>, 121.4116)
// ELSE
// IF NOT IS_PED_INJURED(ShopCustomer)
// CLEAR_PED_TASKS(ShopCustomer)
// SET_ENTITY_COORDS(ShopCustomer, << -621.0125, -228.5511, 37.0570 >>)
// SET_ENTITY_HEADING(ShopCustomer, 121.4116)
// ENDIF
// ENDIF
// SET_MODEL_AS_NO_LONGER_NEEDED(A_F_Y_BevHills_03)
//
// IF NOT IS_PED_INJURED(pedContact)
// SET_ENTITY_COORDS(pedContact, << -626.9581, -238.2061, 37.0570 >>)
// SET_ENTITY_HEADING(pedContact, 204.9566)
// ENDIF
//
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// CanMissionFail = TRUE
// iControlFlag = 0
// missionStage = STAGE_LOOK_AT_JEWELLERY_2
// iCutsceneStage ++
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//
////// SETUP
//// IF iControlFlag = 0
////
//// //DEBUG STAGE SELECTOR
//// #IF IS_DEBUG_BUILD
//// IF MissionStageBeingSkippedTo = TRUE
//// STAGE_SELECTOR_MISSION_SETUP()
//// ENDIF
//// #ENDIF
////
//// // SET FLAGS
//// iCutsceneStage = 0
//// iskip_cutscene_flag = 0
//// b_isCutsceneRunning = TRUE
//// pedContactTask3Given = FALSE
//// playerTaskGiven = FALSE
//// pedsMoved = FALSE
//// pedrecordingsRequested = FALSE
//// PedslookingAtEachOther = FALSE
////
//// IF DOES_BLIP_EXIST(blipLocate)
//// REMOVE_BLIP(blipLocate)
//// ENDIF
////
//// //Request and load shop assistant, guard and any peds to be inside the shop.
//// REQUEST_MODEL(U_M_M_JEWELSEC_01)//security guard
//// REQUEST_MODEL(A_F_Y_Business_01)//Shop assistant
//// REQUEST_MODEL(CS_JEWELASS)//Shop assistant 2
//// REQUEST_VEHICLE_RECORDING(002, "H3SET1")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER8")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_BUDDY7")
////
//// WHILE NOT HAS_MODEL_LOADED(U_M_M_JEWELSEC_01)
//// OR NOT HAS_MODEL_LOADED(A_F_Y_Business_01)
//// OR NOT HAS_MODEL_LOADED(CS_JEWELASS)
//// OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(002, "H3SET1")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER8")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_BUDDY7")
//// WAIT(0)
//// ENDWHILE
////
//// SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
////
//// IF HAS_MODEL_LOADED(U_M_M_JEWELSEC_01)
//// AND NOT DOES_ENTITY_EXIST(ShopGuard)
//// ShopGuard = CREATE_PED(PEDTYPE_MISSION, U_M_M_JEWELSEC_01, << -629.2624, -237.6700, 37.0570 >>, 36.7017)
//// ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 2, shopGuard, "PED1")
////// RETAIN_ENTITY_IN_INTERIOR(shopGuard, InteriorJewelleryShop)
//// ENDIF
////
//// IF HAS_MODEL_LOADED(CS_JEWELASS)
//// AND NOT DOES_ENTITY_EXIST(ShopAssistant)
//// ShopAssistant = CREATE_PED(PEDTYPE_MISSION, CS_JEWELASS, << -622.8374, -229.5900, 37.0570 >>, 314.7467)
////// RETAIN_ENTITY_IN_INTERIOR(ShopAssistant, InteriorJewelleryShop)
//// ENDIF
////
//// IF HAS_MODEL_LOADED(A_F_Y_Business_01)
//// AND NOT DOES_ENTITY_EXIST(shopAssistant)
//// shopAssistant = CREATE_PED(PEDTYPE_MISSION, A_F_Y_Business_01, << -624.6881, -232.5531, 37.0570 >>, 125.3657)
//// ADD_PED_FOR_DIALOGUE(MyLocalPedStruct, 3, shopAssistant, "PED1")
////// RETAIN_ENTITY_IN_INTERIOR(shopAssistant, InteriorJewelleryShop)
//// ENDIF
////
//// CLEAR_AREA_OF_VEHICLES(<<-677, -232, 37>>, 20)
////
//// //Create camera's for cutscene
//// camInit = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<-708.124878,-244.401886,47.005543>>,<<-14.045350,-0.000000,-112.931862>>,25.073933, TRUE)
//// camDest = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<-696.199280,-216.212830,47.005543>>,<<-14.045350,-0.000000,-112.931862>>,25.073933, TRUE)
////
//// CLEAR_PRINTS()
////
//// //Reset debug flag for stage selector
//// #IF IS_DEBUG_BUILD
//// MissionStageBeingSkippedTo = FALSE
//// #ENDIF
//// iControlFlag = 1
////
//// ENDIF
////
//// IF iControlFlag = 1
////
//// SETTIMERB(0)
////
//// WHILE b_isCutsceneRunning = TRUE
////
//// DISPLAY_RADAR(FALSE)
//// DISPLAY_HUD(FALSE)
////
//// WAIT(0)
////
//// //Check for skip cutscene
//// IF TIMERB() > 500
//// SkipCutscene()
//// ENDIF
////
//// SWITCH iCutsceneStage
////
//// CASE 0
////
//// IF IS_VEHICLE_DRIVEABLE(vehCar)
//// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
//// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
//// ENDIF
//// IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehCar)
//// START_PLAYBACK_RECORDED_VEHICLE(vehCar, 002, "H3SET1")
//// SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehCar, 5500)
//// ENDIF
//// ENDIF
////
//// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
////
//// SETTIMERA(0)
//// SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 33000, GRAPH_TYPE_SIN_ACCEL_DECEL, GRAPH_TYPE_LINEAR)
//// RENDER_SCRIPT_CAMS(TRUE, FALSE, DEFAULT_INTERP_TO_FROM_GAME)
////
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_BUDDY1")
//// iCutsceneStage++
//// BREAK
////
//// CASE 1
////
//// IF IS_VEHICLE_DRIVEABLE(vehCar)
//// IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehCar)
//// IF pedContactTask3Given = FALSE
//// IF GET_TIME_POSITION_IN_RECORDING(vehCar) > 11300
//// IF NOT IS_PED_INJURED(pedContact)
//// OPEN_SEQUENCE_TASK(seqSequencePedContact)
//// TASK_LEAVE_VEHICLE(NULL, vehCar)
//// TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "H3SET1_BUDDY7", 1)
//// CLOSE_SEQUENCE_TASK(seqSequencePedContact)
//// TASK_PERFORM_SEQUENCE(pedContact, seqSequencePedContact)
//// CLEAR_SEQUENCE_TASK(seqSequencePedContact)
//// CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP2", CONV_PRIORITY_MEDIUM)//Come on. We need to get a feel for this place.
//// pedContactTask3Given = TRUE
//// ENDIF
//// ENDIF
//// ENDIF
//// IF playerTaskGiven = FALSE
//// IF GET_TIME_POSITION_IN_RECORDING(vehCar) > 9800
//// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
//// OPEN_SEQUENCE_TASK(seqSequencePlayer)
//// TASK_LEAVE_VEHICLE(NULL, vehCar)
//// TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "H3SET1_PLAYER8", 1)
//// CLOSE_SEQUENCE_TASK(seqSequencePlayer)
//// TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqSequencePlayer)
//// CLEAR_SEQUENCE_TASK(seqSequencePlayer)
//// playerTaskGiven = TRUE
//// ENDIF
//// ELSE
//// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
//// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
//// ENDIF
//// ENDIF
//// ENDIF
//// ENDIF
//// ENDIF
////
//// IF TIMERA() > 30000
//// REQUEST_INTERIOR_MODELS(V_JEWEL2, "GtaMloRoom01")
//// CLEAR_PRINTS()
//// SET_CAM_PARAMS(camInit, <<-630.003357,-261.884857,41.160511>>, <<-0.484803,-0.000003,13.241154>>, 34.140644)
//// SET_CAM_PARAMS(camDest, <<-629.999573,-261.900482,39.263489>>, <<-0.484803,-0.000003,13.241154>>, 34.140644)
//// SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 11000)
////
//// IF pedsMoved = FALSE
//// IF NOT IS_PED_INJURED(pedContact)
//// CLEAR_PED_TASKS(pedContact)
//// SET_ENTITY_COORDS(pedContact, << -642.2004, -239.6883, 36.8673 >>)
//// SET_ENTITY_HEADING(pedContact, 253.9904)
//// TASK_FOLLOW_WAYPOINT_RECORDING(pedContact, "H3SET1_BUDDY1", 7)
//// ENDIF
//// CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
//// SET_ENTITY_COORDS(PLAYER_PED_ID(), << -642.4644, -237.2986, 36.8623 >>)
//// SET_ENTITY_HEADING(PLAYER_PED_ID(), 233.8376)
//// TASK_FOLLOW_WAYPOINT_RECORDING(PLAYER_PED_ID(), "H3SET1_PLAYER", 7)
//// pedsMoved = TRUE
//// ENDIF
////
//// SETTIMERA(0)
//// iCutsceneStage++
//// ENDIF
////
//// BREAK
////
//// CASE 2
////
//// //Request ped recordings for inside the shop stages.
//// IF pedrecordingsRequested = FALSE
//// REQUEST_WAYPOINT_RECORDING("H3SET1_BUDDY2")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_SHOPASS1")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER3")
//// REQUEST_WAYPOINT_RECORDING("H3SET1Shopass4")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER4")
//// pedrecordingsRequested = TRUE
//// ENDIF
////
//// IF TIMERA() > 3500
//// IF PedslookingAtEachOther = FALSE
//// IF NOT IS_PED_INJURED(pedContact)
//// AND NOT IS_PED_INJURED(shopGuard)
//// TASK_LOOK_AT_ENTITY(pedContact, shopGuard, -1)
//// TASK_LOOK_AT_ENTITY(shopGuard, PLAYER_PED_ID(), -1)
//// PedslookingAtEachOther = TRUE
//// ENDIF
//// ENDIF
//// ENDIF
////
//// IF TIMERA() > 4000
//// AND pedrecordingsRequested = TRUE
//// iCutsceneStage++
//// b_isCutsceneRunning = FALSE
//// ENDIF
////
//// BREAK
////
//// ENDSWITCH
////
//// ENDWHILE
////
//// IF iskip_cutscene_flag = 1
////
//// CLEAR_PRINTS()
//// REQUEST_WAYPOINT_RECORDING("H3Set1_BUDDY2")
//// REQUEST_WAYPOINT_RECORDING("H3Set1_SHOPASS1")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER3")
//// REQUEST_WAYPOINT_RECORDING("H3SET1Shopass4")
//// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER4")
////
//// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3Set1_BUDDY2")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3Set1_SHOPASS1")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER3")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1Shopass4")
//// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER4")
//// WAIT(0)
//// ENDWHILE
////
//// CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
//// SET_ENTITY_COORDS(PLAYER_PED_ID(), << -633.7156, -238.6721, 37.0797 >>, FALSE)
//// SET_ENTITY_HEADING(PLAYER_PED_ID(), 301.1499)
////
//// IF NOT IS_PED_INJURED(pedContact)
//// CLEAR_PED_TASKS_IMMEDIATELY(pedContact)
//// SET_ENTITY_COORDS(pedContact, << -631.7568, -238.4949, 37.0217 >> )
//// SET_ENTITY_HEADING(pedContact, 340.0365)
//// ENDIF
////
//// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
////
//// //Reset Flags
//// b_isCutsceneRunning = FALSE
////
//// ENDIF
////
//// IF b_isCutsceneRunning = FALSE
////
//// IF iskip_cutscene_flag = 0
//// RENDER_SCRIPT_CAMS(FALSE, FALSE)
//// ELSE
//// RENDER_SCRIPT_CAMS(FALSE, FALSE)
//// ENDIF
////
//// //Destroy cams
//// IF DOES_CAM_EXIST(camInit)
//// DESTROY_CAM(camInit)
//// ENDIF
//// IF DOES_CAM_EXIST(camDest)
//// DESTROY_CAM(camDest)
//// ENDIF
////
//// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//// DISPLAY_RADAR(TRUE)
//// DISPLAY_HUD(TRUE)
////
//// iControlFlag = 0
//// iskip_cutscene_flag = 0
//// missionStage = STAGE_LOOK_AT_JEWELLERY_1
////
//// ENDIF
////
//// ENDIF
//
//ENDPROC
//
////PURPOSE: Stage that checks to see if the player is at the coords for triggering mocap cut 1 inside store.
//PROC DO_STAGE_LOOK_AT_JEWELLERY_1()
//
// IF iControlFlag = 0
//
// //**************SET MID MISSION CHECK POINT HERE*******************//
// Set_Replay_Mid_Mission_Stage(1)
// PRINTSTRING("***********MID MISSION STAGE SET TO 1***********") PRINTNL()
//
//
// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER3")
// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER3")
// WAIT(0)
// ENDWHILE
//
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// MissionStageBeingSkippedTo = FALSE
// ENDIF
//
// // SET FLAGS
// Convo2Called = FALSE
// shopAssistantFollowingRecording = FALSE
// pedContactTaskGiven = FALSE
// pedContactwaypointPaused = FALSE
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER3")
// USE_WAYPOINT_RECORDING_AS_ASSISTED_MOVEMENT_ROUTE("H3SET1_PLAYER3", TRUE, 0.5, 1.0)
// ENDIF
//
// //Do enter shop chat between guard and pedcontact
// IF Convo2Called = FALSE
// KILL_ANY_CONVERSATION()
// WAIT(0)
// PLAY_SINGLE_LINE_FROM_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP3", "JHS1_STP3_1", CONV_PRIORITY_MEDIUM)//Afternoon.
// WAIT(0)
// SETTIMERB(0)
// Convo2Called = TRUE
// ENDIF
//
// IF TIMERB() > 6000
// IF Convo2Called = TRUE
// IF NOT DOES_BLIP_EXIST(BlipViewingPoint1)
// BlipViewingPoint1 = CREATE_BLIP_FOR_COORD(<<-626, -235, 37>>)
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// PRINT_NOW("VIEW_1", DEFAULT_GOD_TEXT_TIME, 1)//~s~Look at the ~y~rings.
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// //Sort out Lester
// IF pedContactTaskGiven = FALSE
// IF NOT IS_PED_INJURED(shopAssistant)
// IF NOT IS_PED_INJURED(pedContact)
// TASK_LOOK_AT_ENTITY(pedContact, shopAssistant,-1)
// TASK_FOLLOW_WAYPOINT_RECORDING(pedContact, "H3SET1_BUDDY2", 1)
// pedContactTaskGiven = TRUE
// ENDIF
// ENDIF
// ENDIF
// IF pedContactwaypointPaused = FALSE
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(pedContact)
// IF GET_PED_WAYPOINT_PROGRESS(pedContact) = 3
// CLEAR_PED_TASKS(pedContact)
// OPEN_SEQUENCE_TASK(seqSequencePedContact)
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -627.2033, -238.7574, 37.0570 >>, PEDMOVE_WALK, -1)
// TASK_ACHIEVE_HEADING(NULL, 224.9482)
// TASK_LOOK_AT_COORD(NULL, <<-626, -239, 38>>, -1)
// CLOSE_SEQUENCE_TASK(seqSequencePedContact)
// TASK_PERFORM_SEQUENCE(pedContact, seqSequencePedContact)
// CLEAR_SEQUENCE_TASK(seqSequencePedContact)
// pedContactwaypointPaused = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-631, -237, 37>>, <<1,1,2>>)
// //clean up waypoint recording not needed anymore.
// REMOVE_WAYPOINT_RECORDING("H3SET1_PLAYER")
// REMOVE_WAYPOINT_RECORDING("H3SET1_BUDDY1")
//
// IF DOES_BLIP_EXIST(BlipViewingPoint1)
// REMOVE_BLIP(BlipViewingPoint1)
// ENDIF
//
// IF shopAssistantFollowingRecording = FALSE
// IF NOT IS_PED_INJURED(shopAssistant)
// TASK_FOLLOW_WAYPOINT_RECORDING(shopAssistant, "H3SET1SHOPASS4", 1)
// shopAssistantFollowingRecording = TRUE
// ENDIF
// ENDIF
//
// iControlFlag = 0
// missionStage = STAGE_JS_SCOPESTORE_MOCAP_CUT
//
// ENDIF
//
// ENDIF
//
//ENDPROC
//
////PURPOSE: 1st Mocap cutscene where the player meets the shop assistant as is shown in the 1st cabinet.
//PROC DO_STAGE_JS_SCOPESTORE_MOCAP_CUT()
//
// IF iControlFlag = 0
//
// // SET FLAGS
// iCutsceneStage = 0
// pedContactwaypointPaused = FALSE
// Convo3Called = FALSE
// shopAssistantMoved = FALSE
// shopGuardMoved = FALSE
// Convo5Called = FALSE
//
//
// //request 1st mocap cut
// REQUEST_CUTSCENE("JH_ScopeStore")
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// PRINTSTRING("CASE 0") PRINTNL()
//
// IF pedContactwaypointPaused = FALSE
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(pedContact)
// IF GET_PED_WAYPOINT_PROGRESS(pedContact) = 3
// CLEAR_PED_TASKS(pedContact)
// OPEN_SEQUENCE_TASK(seqSequencePedContact)
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -627.2033, -238.7574, 37.0570 >>, PEDMOVE_WALK, -1)
// TASK_ACHIEVE_HEADING(NULL, 224.9482)
// TASK_LOOK_AT_COORD(NULL, <<-626, -239, 38>>, -1)
// CLOSE_SEQUENCE_TASK(seqSequencePedContact)
// TASK_PERFORM_SEQUENCE(pedContact, seqSequencePedContact)
// CLEAR_SEQUENCE_TASK(seqSequencePedContact)
// pedContactwaypointPaused = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// WHILE NOT HAS_CUTSCENE_LOADED()
// WAIT(0)
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// ENDWHILE
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// IF NOT IS_PED_INJURED(shopAssistant)
// REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "CS_JEWELASS", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// IF NOT IS_PED_INJURED(shopGuard)
// REGISTER_ENTITY_FOR_CUTSCENE(shopGuard, "U_M_M_JEWELSEC_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
// START_CUTSCENE()
// SETTIMERA(0)
// iCutsceneStage++
//
// BREAK
//
// CASE 1
//
// PRINTSTRING("CASE 1") PRINTNL()
//
// IF pedContactwaypointPaused = FALSE
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(pedContact)
// IF GET_PED_WAYPOINT_PROGRESS(pedContact) = 3
// CLEAR_PED_TASKS(pedContact)
// OPEN_SEQUENCE_TASK(seqSequencePedContact)
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -627.2033, -238.7574, 37.0570 >>, PEDMOVE_WALK, -1)
// TASK_ACHIEVE_HEADING(NULL, 224.9482)
// TASK_LOOK_AT_COORD(NULL, <<-626, -239, 38>>, -1)
// CLOSE_SEQUENCE_TASK(seqSequencePedContact)
// TASK_PERFORM_SEQUENCE(pedContact, seqSequencePedContact)
// CLEAR_SEQUENCE_TASK(seqSequencePedContact)
// pedContactwaypointPaused = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF Convo3Called = FALSE
// KILL_ANY_CONVERSATION()
// WAIT(0)
// CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP4", CONV_PRIORITY_MEDIUM)//Hi there. Is there anything we can help you with? ......
// WAIT(0)
// SETTIMERB(0)
// Convo3Called = TRUE
// ENDIF
//
// IF shopAssistantMoved = FALSE
// IF TIMERB() > 4000
// IF NOT IS_PED_INJURED(shopAssistant)
// SET_ENTITY_COORDS(shopAssistant, << -622.3363, -234.8329, 37.0570 >>, FALSE)
// SET_ENTITY_HEADING(shopAssistant, 257.1781)
// shopAssistantMoved = TRUE
// ENDIF
// ENDIF
// ENDIF
//
// IF shopGuardMoved = FALSE
// IF NOT IS_PED_INJURED(shopGuard)
// SET_ENTITY_COORDS(shopGuard, << -630.3765, -241.6091, 37.1754 >>, FALSE)
// shopGuardMoved = TRUE
// ENDIF
// ENDIF
//
// IF Convo5Called = FALSE
// IF TIMERB() > 18000
// //Some dialogue
// KILL_ANY_CONVERSATION()
// WAIT(0)
// CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP5", CONV_PRIORITY_MEDIUM)//Are those diamonds? ...
// WAIT(0)
// Convo5Called = TRUE
// ENDIF
// ENDIF
//
// IF HAS_CUTSCENE_FINISHED()
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
// //move shop guard back to position after mocap cut has finished
// IF NOT IS_PED_INJURED(shopGuard)
// SET_ENTITY_COORDS(shopGuard, << -629.2624, -237.6700, 37.0570 >>, FALSE)
// SET_ENTITY_HEADING(shopGuard, 36.7017)
// shopGuardMoved = TRUE
// ENDIF
//
// PRINTSTRING("CASE 2") PRINTNL()
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// iControlFlag = 0
// iCutsceneStage = 0
// missionStage = STAGE_LOOK_AT_JEWELLERY_2
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//
//ENDPROC
////PURPOSE checks to see if the player is at the right coords to start the 2nd mocap.
//PROC DO_STAGE_LOOK_AT_JEWELLERY_2()
//
// IF iControlFlag = 0
//
// //This will be triggered if the mission checkpoint was reached and a replay text has been used.
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// ENDIF
//
// //**************SET MID MISSION CHECK POINT HERE*******************//
// Set_Replay_Mid_Mission_Stage(1)
// PRINTSTRING("***********MID MISSION STAGE SET TO 1***********") PRINTNL()
//
// //request 2nd mocap cut
// REQUEST_CUTSCENE("jh_1_mcs_2")
// //Request 1st waypoint for shop customer
// REQUEST_WAYPOINT_RECORDING("H3SET1_CUST1")
// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_CUST1")
// WAIT(0)
// ENDWHILE
//
// // SET FLAGS
// checkForLeavingShopToEarly = TRUE
// customerTask1Given = FALSE
// LookAtWatchesTextDone = FALSE
// WaypointActive = FALSE
// waypointSpeedSet = FALSE
//
// //Reset stage selector flag.
// #IF IS_DEBUG_BUILD
// MissionStageBeingSkippedTo = FALSE
// #ENDIF
//
// IF NOT DOES_BLIP_EXIST(BlipViewingPoint2)
// BlipViewingPoint2 = CREATE_BLIP_FOR_COORD(<< -620.5695, -234.1263, 37.0570 >>)
// ENDIF
//
// IF NOT IS_PED_INJURED(ShopCustomer)
// TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer, "H3SET1_CUST1")
// ENDIF
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// IF LookAtWatchesTextDone = FALSE
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// PRINT("VIEW_2", 4000, 1)//~s~Look at the ~y~watches.
// LookAtWatchesTextDone = TRUE
// ENDIF
// ENDIF
//
// IF customerTask1Given = FALSE
// IF NOT IS_PED_INJURED(ShopCustomer)
// IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer)
// IF WaypointActive = TRUE
// PRINTSTRING("Waypoint playback is not going on for shop customer")
// TASK_LOOK_AT_COORD(ShopCustomer, <<-626.56, -233.62, 37>>, 10000, SLF_USE_TORSO)
// customerTask1Given = TRUE
// WaypointActive = FALSE
// ENDIF
// ELSE
// PRINTSTRING("Waypoint playback is going on for shop customer")
// WaypointActive = TRUE
// IF waypointSpeedSet = FALSE
// PRINTSTRING("Waypoint playback speed override being called")
// WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ShopCustomer, 0.5)
// waypointSpeedSet = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -620.5695, -234.1263, 37.0570 >>, <<1,1,2>>)
//
// IF DOES_BLIP_EXIST(BlipViewingPoint2)
// REMOVE_BLIP(BlipViewingPoint2)
// ENDIF
//
// iControlFlag = 0
// missionStage = STAGE_JS_SCOPESTORE_01_MOCAP_CUT
//
// ENDIF
//
// ENDIF
//
//ENDPROC
////PURPOSE: 2nd Mocap cutscene showing shop keeper showing Michael more jewellery.
//PROC DO_STAGE_JS_SCOPESTORE_01_MOCAP_CUT()
//
// IF iControlFlag = 0
//
// // SET FLAGS
// iCutsceneStage = 0
//// Convo6Called = FALSE
//// shopAssistantMoved2 = FALSE
//// shopAssistantRecordingStarted = FALSE
//
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// PRINTSTRING("CASE 0") PRINTNL()
// WHILE NOT HAS_CUTSCENE_LOADED()
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// WAIT(0)
// ENDWHILE
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// //Register entities for cutscene
// //Lester
// IF NOT IS_PED_INJURED(pedContact)
// REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "A_M_M_Salton_02", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Assistant
// IF NOT IS_PED_INJURED(shopAssistant)
// REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "A_F_Y_Business_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
// START_CUTSCENE()
//
// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
//
// SETTIMERA(0)
// iCutsceneStage++
//
//
// BREAK
//
// CASE 1
//
// PRINTSTRING("CASE 1") PRINTNL()
//
// //Request waypoint to be used as assisted lines and 2nd and 3rd waypoint recordings for customer
// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER3")
// REQUEST_WAYPOINT_RECORDING("H3SET1_CUST2")
// REQUEST_WAYPOINT_RECORDING("H3SET1_CUST3")
//
// //Check for customer having moved.
// IF customerTask1Given = FALSE
// IF NOT IS_PED_INJURED(ShopCustomer)
// IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer)
// IF WaypointActive = TRUE
// PRINTSTRING("Waypoint playback is not going on for shop customer")
// TASK_LOOK_AT_COORD(ShopCustomer, <<-626.56, -233.62, 37>>, 10000, SLF_USE_TORSO)
// customerTask1Given = TRUE
// WaypointActive = FALSE
// ENDIF
// ELSE
// PRINTSTRING("Waypoint playback is going on for shop customer")
// WaypointActive = TRUE
// IF waypointSpeedSet = FALSE
// PRINTSTRING("Waypoint playback speed override being called")
// WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ShopCustomer, 0.5)
// waypointSpeedSet = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF HAS_CUTSCENE_FINISHED()
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
// IF NOT IS_PED_INJURED(ShopCustomer)
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_CUST2")
// CLEAR_PED_TASKS(ShopCustomer)
// TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer, "H3SET1_CUST2")
// ENDIF
// ENDIF
//
// //move shop guard back to position after mocap cut has finished
// IF NOT IS_PED_INJURED(shopAssistant)
// SET_ENTITY_COORDS(shopAssistant, << -623.4383, -230.3307, 37.0570 >>, FALSE)
// SET_ENTITY_HEADING(shopAssistant, 120.3058)
// ENDIF
//
// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER3")
// WAIT(0)
// ENDWHILE
//
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER3")
// USE_WAYPOINT_RECORDING_AS_ASSISTED_MOVEMENT_ROUTE("H3SET1_PLAYER3", TRUE, 0.5, 1.0)
// ENDIF
//
//// IF shopAssistantRecordingStarted = FALSE
//// IF NOT IS_PED_INJURED(shopAssistant)
//// CLEAR_PED_TASKS(shopAssistant)
//// TASK_FOLLOW_WAYPOINT_RECORDING(shopAssistant, "H3SET1_SHOPASS1", 10)
//// CLEAR_PED_TASKS(PLAYER_PED_ID())
//// shopAssistantRecordingStarted = TRUE
//// ENDIF
//// ENDIF
//
// PRINTSTRING("CASE 2") PRINTNL()
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// iControlFlag = 0
// iCutsceneStage = 0
// missionStage = STAGE_LOOK_AT_JEWELLERY_3
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//ENDPROC
////PURPOSE: Checks to see if the player is at the coords to start mocap cut 3.
//PROC DO_STAGE_LOOK_AT_JEWELLERY_3()
//
// IF iControlFlag = 0
//
// // SET FLAGS
//// shopAssistantAtCounter3 = FALSE
//
// //DEBUG STAGE SELECTOR
// #IF IS_DEBUG_BUILD
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// MissionStageBeingSkippedTo = FALSE
// ENDIF
// #ENDIF
//
//
// //FLAGS
// customerTask2Given = FALSE
// Waypoint2Active = FALSE
// waypoint2SpeedSet = FALSE
//
// //request 3rd counter cutscene and exit store.
// REQUEST_CUTSCENE("jh_1_mcs_3")
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
//// IF shopAssistantAtCounter3 = TRUE
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// IF NOT DOES_BLIP_EXIST(BlipViewingPoint3)
// BlipViewingPoint3 = CREATE_BLIP_FOR_COORD(<< -624.9990, -230.8543, 37.0570 >>)
// ENDIF
// CLEAR_PRINTS()
// PRINT("VIEW_3", DEFAULT_GOD_TEXT_TIME,1)//~s~Look at the ~y~jewellery.
// iControlFlag = 2
// ENDIF
//// ENDIF
//
// ENDIF
//
// IF iControlFlag = 2
//
// //Check for customer having moved.
// IF customerTask2Given = FALSE
// IF NOT IS_PED_INJURED(ShopCustomer)
// IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(ShopCustomer)
// IF Waypoint2Active = TRUE
// PRINTSTRING("Waypoint playback is not going on for shop customer")
// TASK_LOOK_AT_COORD(ShopCustomer, <<-630.47, -231.74, 37.94>>, 8000, SLF_USE_TORSO)
// customerTask2Given = TRUE
// Waypoint2Active = FALSE
// ENDIF
// ELSE
// PRINTSTRING("Waypoint playback is going on for shop customer")
// Waypoint2Active = TRUE
// IF waypoint2SpeedSet = FALSE
// PRINTSTRING("Waypoint playback speed override being called")
// WAYPOINT_PLAYBACK_OVERRIDE_SPEED(ShopCustomer, 0.5)
// waypoint2SpeedSet = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -624.9990, -230.8543, 37.0570 >>, <<1,1,1.5>>)
//
// IF DOES_BLIP_EXIST(BlipViewingPoint3)
// REMOVE_BLIP(BlipViewingPoint3)
// ENDIF
//
// checkForLeavingShopToEarly = FALSE
//
// iControlFlag = 0
// missionStage = STAGE_JS_SCOPESTORE_02_MOCAP_CUT
//
// ENDIF
//
// ENDIF
//
//ENDPROC
////PURPOSE: 3rd Mocap cut showing the player flirting with the shop assistant and then heading off.
//PROC DO_STAGE_JS_SCOPESTORE_02_MOCAP_CUT()
//
//
// IF iControlFlag = 0
//
// // SET FLAGS
//// Convo7Called = FALSE
// shopAssistantMoved3 = FALSE
// iCutsceneStage = 0
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// PRINTSTRING("CASE 0") PRINTNL()
// WHILE NOT HAS_CUTSCENE_LOADED()
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// WAIT(0)
// ENDWHILE
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// //Register entities for cutscene
// //Lester
// IF NOT IS_PED_INJURED(pedContact)
// REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "A_M_M_Salton_02", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Players car
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// REGISTER_ENTITY_FOR_CUTSCENE(vehCar, "TAILGATER", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Guard
// IF NOT IS_PED_INJURED(shopGuard)
// REGISTER_ENTITY_FOR_CUTSCENE(shopGuard, "U_M_M_JEWELSEC_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
// //Shop Assistant
// IF NOT IS_PED_INJURED(shopAssistant)
// REGISTER_ENTITY_FOR_CUTSCENE(shopAssistant, "A_F_Y_Business_01", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
// IF NOT IS_PED_INJURED(ShopCustomer)
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_CUST3")
// CLEAR_PED_TASKS(ShopCustomer)
// TASK_FOLLOW_WAYPOINT_RECORDING(ShopCustomer, "H3SET1_CUST3")
// ENDIF
// ENDIF
//
// START_CUTSCENE()
//
// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
//
// SETTIMERA(0)
// iCutsceneStage++
//
// BREAK
//
// CASE 1
//
// PRINTSTRING("CASE 1") PRINTNL()
//
//// //Dialogue for mocap
//// IF Convo7Called = FALSE
//// KILL_ANY_CONVERSATION()
//// CLEAR_PRINTS()
//// WAIT(0)
//// CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP7", CONV_PRIORITY_MEDIUM)//I think you're excited already, baby....
//// WAIT(0)
//// Convo7Called = TRUE
//// ENDIF
//
// IF shopAssistantMoved3 = FALSE
// IF NOT IS_PED_INJURED(shopAssistant)
// SET_ENTITY_COORDS(shopAssistant, << -630.3765, -241.6091, 37.1754 >>, FALSE)
// SET_ENTITY_HEADING(shopAssistant, 257.1781)
// shopAssistantMoved3 = TRUE
// ENDIF
// ENDIF
//
// IF HAS_CUTSCENE_FINISHED()
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
// //move shop assistant back to position after mocap cut has finished
// IF NOT IS_PED_INJURED(shopAssistant)
// SET_ENTITY_COORDS(shopAssistant, << -623.4316, -230.2350, 37.0570 >>, FALSE)
// SET_ENTITY_HEADING(shopAssistant, 131.2077)
// ENDIF
//
// //Delete the shop customer
// IF NOT IS_PED_INJURED(ShopCustomer)
// CLEAR_PED_TASKS(ShopCustomer)
// DELETE_PED(ShopCustomer)
// ENDIF
//
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
// IF NOT IS_PED_IN_VEHICLE(pedContact, vehCar)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// ENDIF
// ENDIF
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar, VS_DRIVER)
// ENDIF
//// SET_ENTITY_COORDS(vehCar, << -680.5485, -239.5513, 35.6722 >>, FALSE)
//// SET_ENTITY_HEADING(vehCar, 30.2407)
// ENDIF
//
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//
// PRINTSTRING("CASE 2") PRINTNL()
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// iCutsceneStage = 0
// iControlFlag = 0
// missionStage = STAGE_DRIVE_TO_WAREHOUSE
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//
//ENDPROC
//
////PURPOSE: Checks to see if the player has left the store yet.
//PROC DO_STAGE_LEAVE_STORE()
//
//
//// SETUP
// IF iControlFlag = 0
//
// REQUEST_WAYPOINT_RECORDING("H3SET1_PLAYER2")
// REQUEST_WAYPOINT_RECORDING("H3SET1_BUDDY3")
//
// WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER2")
// OR NOT GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_BUDDY3")
// WAIT(0)
// ENDWHILE
//
// // SET FLAGS
// doneLeaveShopText = FALSE
//
//
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//
// IF NOT IS_PED_INJURED(pedContact)
// IF NOT IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
// CLEAR_PED_TASKS(pedContact)
// SET_PED_AS_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
// ENDIF
// ENDIF
//
// IF NOT IS_PED_INJURED(shopGuard)
// CLEAR_PED_TASKS(shopGuard)
// TASK_LOOK_AT_ENTITY(shopGuard, PLAYER_PED_ID(), -1)
//
// SETTIMERA(0)
// ENDIF
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// IF doneLeaveShopText = FALSE
// IF NOT IS_MESSAGE_BEING_DISPLAYED()
// PRINT("EXIT_STORE", DEFAULT_GOD_TEXT_TIME, 1)//~s~Leave the store when you are ready.
// doneLeaveShopText = TRUE
// ENDIF
// ENDIF
//
// IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-631.93,-237.86, 37>>, <<1,1, 2>>)
// iControlFlag = 0
// missionStage = STAGE_LEAVE_STORE_CUTSCENE
// ENDIF
//
// ENDIF
//
//ENDPROC
//
//
////PURPOSE: cut scene of player and lester leaving the jewellery store and getting back to the car.
//PROC DO_STAGE_LEAVE_STORE_CUTSCENE()
//
//
// IF iControlFlag = 0
//
// // SET FLAGS
// iskip_cutscene_flag = 0
// iCutsceneStage = 0
// camsActivated = FALSE
// interiorpinned = FALSE
// playerAndContactMoved = FALSE
//
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
//
// SETTIMERB(0)
// b_isCutsceneRunning = TRUE
//
// CLEAR_PRINTS()
// KILL_ANY_CONVERSATION()
//
// DISPLAY_RADAR(FALSE)
// DISPLAY_HUD(FALSE)
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// //Camera's
// IF NOT DOES_CAM_EXIST(camInit)
// camInit = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<-633.504150,-264.655304,68.779816>>, <<-51.618248,-0.000002,-2.820225>>, 26.301832)
// ELSE
// SET_CAM_PARAMS(camInit, <<-633.504150,-264.655304,68.779816>>, <<-51.618248,-0.000002,-2.820225>>, 39.998871 )
// ENDIF
//
// IF NOT DOES_CAM_EXIST(camDest)
// camDest = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<-633.504150,-264.655304,68.779816>>, <<-28.308561,-0.000003,-3.796131>>, 19.182617)
// ELSE
// SET_CAM_PARAMS(camDest, <<-633.504150,-264.655304,68.779816>>, <<-28.308561,-0.000003,-3.796131>>, 39.998871 )
// ENDIF
//
// WHILE b_isCutsceneRunning
//
// WAIT(0)
//
// //Check for skip cutscene
// IF TIMERB() > 500
// SkipCutscene()
// ENDIF
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// IF camsActivated = FALSE
// SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 8000)
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// SETTIMERA(0)
// camsActivated = TRUE
// ENDIF
//
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_BUDDY3")
// IF NOT IS_PED_INJURED(pedContact)
// SET_ENTITY_COORDS(pedContact, << -629.6565, -237.5475, 37.0570 >>)
// SET_ENTITY_HEADING(pedContact, 93.0410)
// CLEAR_PED_TASKS(pedContact)
// TASK_FOLLOW_WAYPOINT_RECORDING(pedContact, "H3SET1_BUDDY3", 1)
// pedContactWaypoint3Started = TRUE
// ENDIF
// ENDIF
//
// IF GET_IS_WAYPOINT_RECORDING_LOADED("H3SET1_PLAYER2")
// CLEAR_PED_TASKS(PLAYER_PED_ID())
// TASK_FOLLOW_WAYPOINT_RECORDING(PLAYER_PED_ID(), "H3SET1_PLAYER2", 2)
// playerWaypoint2Started = TRUE
// ENDIF
//
// IF camsActivated = TRUE
// AND pedContactWaypoint3Started = TRUE
// AND playerWaypoint2Started = TRUE
// iCutsceneStage ++
// ENDIF
//
// BREAK
//
// CASE 1
//
// IF interiorpinned = FALSE
// IF TIMERA() > 2500
// WHILE NOT IS_INTERIOR_READY(InteriorJewelleryShop)
// WAIT(0)
// ENDWHILE
// interiorpinned = TRUE
// ENDIF
// ENDIF
//
// IF TIMERA() > 7500
//
// REQUEST_INTERIOR_MODELS(V_JEWEL2, "GtaMloRoom01")
// SET_CAM_PARAMS(camInit, <<-628.194885,-235.829895,39.224934>>, <<7.071847,-0.003521,-25.142834>>, 23.117485)
// SET_CAM_PARAMS(camDest, <<-628.194885,-235.829895,39.224934>>, <<7.071814,-0.003521,-76.560287>>, 23.117485)
//
// SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 5000)
// SETTIMERA(0)
// iCutsceneStage++
//
// ENDIF
//
// BREAK
//
// CASE 2
//
// IF playerAndContactMoved = FALSE
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
// CLEAR_PED_TASKS_IMMEDIATELY(pedContact)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// ENDIF
// CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// playerAndContactMoved = TRUE
// ENDIF
// ENDIF
//
// IF TIMERA() > 5100
//
// b_isCutsceneRunning = FALSE
// iCutsceneStage++
//
// ENDIF
//
// BREAK
//
// ENDSWITCH
//
// ENDWHILE
//
// IF iskip_cutscene_flag = 1
//
// CLEAR_PRINTS()
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
// CLEAR_PED_TASKS_IMMEDIATELY(pedContact)
// SET_PED_INTO_VEHICLE(pedContact, vehCar, VS_FRONT_RIGHT)
// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedContact, TRUE)
// IF IS_PED_IN_GROUP(pedContact)
// REMOVE_PED_FROM_GROUP(pedContact)
// ENDIF
// ENDIF
//
// CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehCar)
// ENDIF
//
// //Reset Flags
// b_isCutsceneRunning = FALSE
//
// ENDIF
//
// IF b_isCutsceneRunning = FALSE
//
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
// SET_CAM_ACTIVE(camInit, FALSE)
// SET_CAM_ACTIVE(camDest, FALSE)
// STOP_CAM_POINTING(camDest)
//
// DISPLAY_HUD(TRUE)
// DISPLAY_RADAR(TRUE)
//
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//
// //Set flags
// iCutsceneStage = 0
// iControlFlag = 0
// missionStage = STAGE_DRIVE_TO_WAREHOUSE
//
// ENDIF
//
// ENDIF
//ENDPROC
//PURPOSE: Stage where player has to drive back to the office planning board.
PROC DO_STAGE_DRIVE_TO_WAREHOUSE()
JEWEL_STORE_STAFF_CONTROLLER()
IF iControlFlag = 0
IF MissionStageBeingSkippedTo = TRUE
STAGE_SELECTOR_MISSION_SETUP()
MissionStageBeingSkippedTo = FALSE
ENDIF
//**************SET MID MISSION CHECK POINT HERE*******************//
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "STAGE_DRIVE_TO_WAREHOUSE", TRUE)
PRINTSTRING("***********MID MISSION STAGE SET TO 3***********") PRINTNL()
// SET FLAGS
doneGetInCarText2 = FALSE
doneWarningText = FALSE
CheckpointReplayStarting = FALSE
CanMissionFail = TRUE
doneGodText = FALSE
modelsRequested = FALSE
donePH28Chat = FALSE
doneSTP14Chat = FALSE
endsceneRequested = FALSE
LoadedInteriorForCut = FALSE
pinnedInterior = FALSE
doneReturnText = FALSE
clearedGetBackin = FALSE
// SyncdSceneDisrupted = FALSE
iGetBackInTimer = 0
iGoToFactoryTimer = 0
#IF IS_DEBUG_BUILD
jSkipReady = TRUE
pSkipReady = TRUE
#ENDIF
SETTIMERA(0)
IF NOT IS_PED_INJURED(pedContact)
SET_PED_CAN_BE_DRAGGED_OUT(pedContact, FALSE)
SET_PED_CAN_BE_TARGETTED(pedContact, FALSE)
SET_PED_RELATIONSHIP_GROUP_HASH(pedContact, RELGROUPHASH_PLAYER)
ENDIF
SET_ROADS_BACK_TO_ORIGINAL(<<-631.51, -332.75, 32>>, <<-692.36, -228.83, 38>>)
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehCar)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehCar)
FREEZE_ENTITY_POSITION(vehCar, FALSE)
// SET_RADIO_RETUNE_UP()
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF donePH28Chat = FALSE
KILL_ANY_CONVERSATION()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH28", CONV_PRIORITY_MEDIUM)
//Here you can have these glasses back.
IF IS_REPEAT_PLAY_ACTIVE()
REMOVE_PED_COMP_ITEM_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES)
ELSE
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
ENDIF
donePH28Chat = TRUE
ENDIF
ENDIF
IF NOT DOES_BLIP_EXIST(BlipWareHouse)
BlipWareHouse = CREATE_BLIP_FOR_COORD(vWareHouse)
// SET_BLIP_SPRITE(BlipWareHouse, RADAR_TRACE_JEWELRY_HEIST)
SET_BLIP_ROUTE(BlipWareHouse, TRUE)
ENDIF
// IF doneHeistBlipHelp = FALSE
// PRINT_HELP("HELP3")
// //The ~BLIP_HEIST_PREP~ represents a Heist.
// doneHeistBlipHelp = TRUE
// ENDIF
ELSE
CLEAR_PRINTS()
REMOVE_BLIP(BlipWareHouse)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
DISABLE_CELLPHONE(FALSE)
//Call this to put the radio back on
// IF gotPlayersRadioStation = TRUE
// SET_INITIAL_PLAYER_STATION(playersRadioStation)
// ELSE
// SET_INITIAL_PLAYER_STATION("RADIO_01_CLASS_ROCK")
// ENDIF
IF GET_PLAYER_RADIO_STATION_INDEX() = 255
SET_RADIO_TO_STATION_NAME("RADIO_01_CLASS_ROCK")
ENDIF
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH1_RETURN_TO_CAR")
STOP_AUDIO_SCENE("JSH1_RETURN_TO_CAR")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_FACTORY")
START_AUDIO_SCENE("JSH_1_DRIVE_TO_FACTORY")
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
iControlFlag = 1
ENDIF
IF iControlFlag = 1
// //Update music
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// IF GET_IS_VEHICLE_ENGINE_RUNNING(vehCar)
// IF MusicEventPrepared = FALSE
// PREPARE_MUSIC_EVENT("JH1_END")
// SETTIMERB(0)
// MusicEventPrepared = TRUE
// ELSE
// IF MusicStarted[2] = FALSE
// IF TIMERB() > 1500
// TRIGGER_MUSIC_EVENT("JH1_END")
// SET_RADIO_RETUNE_DOWN()
// MusicStarted[2] = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
IF donePH28Chat = FALSE
KILL_ANY_CONVERSATION()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_PH28", CONV_PRIORITY_MEDIUM)
//Here you can have these glasses back.
IF IS_REPEAT_PLAY_ACTIVE()
REMOVE_PED_COMP_ITEM_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P0_PROGRAMMER_GLASSES)
ELSE
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
ENDIF
//Clean up the glasses camera scaleform stuff now
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(SF_Glasses_Shutter_Index)
SET_STREAMED_TEXTURE_DICT_AS_NO_LONGER_NEEDED("digitalOverlay")
donePH28Chat = TRUE
ENDIF
ENDIF
ENDIF
//Quick line of dialogue to tell the player to go back to the warehouse.
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF doneSTP14Chat = FALSE
IF donePH28Chat = TRUE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP14", CONV_PRIORITY_MEDIUM)// Let's go back to the garment factory, I called ahead and told them to start setting up the information.
PRINTSTRING("Waiting for dialogue to catch up") PRINTNL()
SETTIMERA(0)
doneSTP14Chat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Handle blips
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF DOES_BLIP_EXIST(BlipWareHouse)
REMOVE_BLIP(BlipWareHouse)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
ENDIF
IF doneGodText = TRUE
IF GET_GAME_TIMER() < (iGoToFactoryTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
ENDIF
ENDIF
IF doneGetInCarText2 = FALSE
CLEAR_PRINTS()
ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(FALSE)
PRINT_NOW("GOTO_CAR2", DEFAULT_GOD_TEXT_TIME, 1)// ~s~Get back in your ~b~car.
iGetBackInTimer = GET_GAME_TIMER()
doneGetInCarText2 = TRUE
ENDIF
ELSE
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF clearedGetBackin = FALSE
IF doneGetInCarText2 = TRUE
AND GET_GAME_TIMER() < (iGetBackInTimer + DEFAULT_GOD_TEXT_TIME)
CLEAR_PRINTS()
clearedGetBackin = TRUE
ENDIF
ENDIF
IF TIMERA() > 3000
IF doneSTP14Chat = TRUE
IF doneGodText = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
KILL_ANY_CONVERSATION()
PRINT_NOW("GO_HOME", DEFAULT_GOD_TEXT_TIME, 1)//~s~Go to the ~y~garment factory.
SETTIMERA(0)
iGoToFactoryTimer = GET_GAME_TIMER()
doneGodText = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF doneGodText = TRUE
AND doneSTP14Chat = TRUE
IF TIMERA() > 2000
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(MyLocalPedStruct, "JHS1AUD", "JHS1_STP13", CONV_PRIORITY_AMBIENT_HIGH)//So, what did you see?....
iControlFlag = 2
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipWareHouse)
BlipWareHouse = CREATE_BLIP_FOR_COORD(vWareHouse, TRUE)
SET_BLIP_ROUTE(BlipWareHouse, TRUE)
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipWareHouse)
CLEAR_PRINTS()
REMOVE_BLIP(BlipWareHouse)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 2
//Request the end cutscene and planning board section once the player gets close enough to the warehouse.
IF endsceneRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWareHouse) < DEFAULT_CUTSCENE_LOAD_DIST
AND GET_DISTANCE_BETWEEN_COORDS(<<723.2, -1089, 22.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) > 20
//Set board intro cutscene to load and save reference to Lester and car
//so the heist controller can grab ownership of them and clean them up.
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE)
PRINTSTRING("SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE)")
g_sTriggerSceneAssets.ped[0] = pedContact
g_sTriggerSceneAssets.veh[0] = vehCar
endsceneRequested = TRUE
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWareHouse) > DEFAULT_CUTSCENE_UNLOAD_DIST
OR GET_DISTANCE_BETWEEN_COORDS(<<723.2, -1089, 22.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 20
//remove cutscene if player then drives further away from the warehouse
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, FALSE)
PRINTSTRING("SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, FALSE)")
endsceneRequested = FALSE
ENDIF
ENDIF
IF LoadedInteriorForCut = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWareHouse) < 200
AND GET_DISTANCE_BETWEEN_COORDS(<<723.2, -1089, 22.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) > 20
IF pinnedInterior = FALSE
WarehouseInterior = GET_INTERIOR_AT_COORDS(<<711.2, -960.2, 30.6>>)
PIN_INTERIOR_IN_MEMORY(WarehouseInterior)
NEW_LOAD_SCENE_START_SPHERE(<<713.1, -963.4, 29.9>>, 15, NEWLOADSCENE_FLAG_LONGSWITCH_CUTSCENE)
pinnedInterior = TRUE
ENDIF
ENDIF
IF pinnedInterior = TRUE
IF IS_INTERIOR_READY(WarehouseInterior)
PRINTSTRING("LoadedInteriorForCut = TRUE") PRINTNL()
LoadedInteriorForCut = TRUE
ENDIF
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWareHouse) > 200
OR GET_DISTANCE_BETWEEN_COORDS(<<723.2, -1089, 22.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 20
IF pinnedInterior = TRUE
UNPIN_INTERIOR(WarehouseInterior)
NEW_LOAD_SCENE_STOP()
pinnedInterior = FALSE
LoadedInteriorForCut = FALSE
ENDIF
ENDIF
ENDIF
//Handle blips
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF DOES_BLIP_EXIST(BlipWareHouse)
REMOVE_BLIP(BlipWareHouse)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipVeh)
BlipVeh = CREATE_BLIP_FOR_VEHICLE(vehCar)
IF doneGetInCarText2 = FALSE
CLEAR_PRINTS()
ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(FALSE)
PRINT_NOW("GOTO_CAR2", DEFAULT_GOD_TEXT_TIME, 1)// ~s~Get back in your ~b~car.
doneGetInCarText2 = TRUE
ENDIF
ENDIF
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
ENDIF
ELSE
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipWareHouse)
BlipWareHouse = CREATE_BLIP_FOR_COORD(vWareHouse, TRUE)
// SET_BLIP_SPRITE(BlipWareHouse, RADAR_TRACE_JEWELRY_HEIST)
SET_BLIP_ROUTE(BlipWareHouse, TRUE)
ENDIF
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
ENDIF
ENDIF
//Run end mocap scene once player gets here without a wanted level
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "veh@std@ds@enter_exit", "jump_out")
IF DOES_BLIP_EXIST(BlipWareHouse)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << vWareHouse.x, vWareHouse.y, 23.13782>>, <<2, 2, LOCATE_SIZE_HEIGHT>>, TRUE)
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << vWareHouse.x, vWareHouse.y, 23.13782>>, <<8.5, 11, LOCATE_SIZE_HEIGHT>>, FALSE, TRUE, TM_IN_VEHICLE)
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF DOES_BLIP_EXIST(BlipWareHouse)
REMOVE_BLIP(BlipWareHouse)
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
iControlFlag = 3
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipWareHouse)
CLEAR_PRINTS()
REMOVE_BLIP(BlipWareHouse)
PRINT_NOW("WANTED", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose your wanted level.
ENDIF
IF DOES_BLIP_EXIST(BlipVeh)
REMOVE_BLIP(BlipVeh)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iControlFlag = 3
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), DEFAULT_VEH_STOPPING_DISTANCE, 1, 0.2)
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
SET_VEHICLE_ENGINE_HEALTH(vehCar, 1000)
ENDIF
ENDIF
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_FACTORY")
STOP_AUDIO_SCENE("JSH_1_DRIVE_TO_FACTORY")
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
SETTIMERA(0)
KILL_ANY_CONVERSATION()
CanMissionFail = FALSE
iControlFlag = 0
missionStage = STAGE_END_MISSION
ENDIF
ELSE
//Update audio
IF IS_AUDIO_SCENE_ACTIVE("JSH_1_DRIVE_TO_FACTORY")
STOP_AUDIO_SCENE("JSH_1_DRIVE_TO_FACTORY")
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
SETTIMERA(0)
KILL_ANY_CONVERSATION()
CanMissionFail = FALSE
iControlFlag = 0
missionStage = STAGE_END_MISSION
ENDIF
ENDIF
ENDPROC
//PURPOSE: Last stage where player and Lester have to go into the office to end the mission.
//PROC DO_STAGE_GO_TO_OFFICE()
//
// IF iControlFlag = 0
// //DEBUG STAGE SELECTOR
// #IF IS_DEBUG_BUILD
// IF MissionStageBeingSkippedTo = TRUE
// STAGE_SELECTOR_MISSION_SETUP()
// ENDIF
// #ENDIF
//
// DELETE_TEMP_STORE_STAFF()
// KILL_ANY_CONVERSATION()
// iControlFlag = 0
// missionStage = STAGE_END_MISSION
// ENDIF
//
// REQUEST_CUTSCENE("JH_1_MCS_4_P1_CONCAT")
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF NOT IS_PED_INJURED(pedContact)
//// OPEN_SEQUENCE_TASK(seqSequencePedContact)
// TASK_LEAVE_VEHICLE(pedContact, vehCar)
//// CLOSE_SEQUENCE_TASK(seqSequencePedContact)
//// TASK_PERFORM_SEQUENCE(pedContact, seqSequencePedContact)
//// CLEAR_SEQUENCE_TASK(seqSequencePedContact)
// ENDIF
// ENDIF
//
// SETTIMERA(0)
//
// //reset stage selector flag
// #IF IS_DEBUG_BUILD
// MissionStageBeingSkippedTo = FALSE
// #ENDIF
//
// CanMissionFail = FALSE
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// IF TIMERA() > 175
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), vehCar)
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// SETTIMERA(0)
// iControlFlag = 2
// ELSE
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// SETTIMERA(0)
// iControlFlag = 2
// ENDIF
// ENDIF
// ENDIF
//
// ENDIF
//
// IF iControlFlag = 2
//
// IF TIMERA() > 1000
// KILL_ANY_CONVERSATION()
//
// iControlFlag = 0
// missionStage = STAGE_JS_SCOPESTORE_03_MOCAP_CUT
//
// ENDIF
//
// ENDIF
//
//ENDPROC
//PROC DO_STAGE_JS_SCOPESTORE_03_MOCAP_CUT()
//
// IF iControlFlag = 0
//
// iCutsceneStage = 0
//
// DELETE_TEMP_STORE_STAFF()
//
//// IF IS_SCREEN_FADED_OUT()
//// LOAD_SCENE(<<706.19, -964.47, 30.40>>)
//// iControlFlag = 1
//// ENDIF
//
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//
// WHILE NOT HAS_CUTSCENE_LOADED()
// WAIT(0)
// PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
// ENDWHILE
//
// //Register entities for cutscene
// //Lester
// IF NOT IS_PED_INJURED(pedContact)
// REGISTER_ENTITY_FOR_CUTSCENE(pedContact, "Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// //Michaels car
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// REGISTER_ENTITY_FOR_CUTSCENE(vehCar, "Michaels_car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// ENDIF
//
// //Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
// DISPLAY_RADAR(FALSE)
//
// CLEAR_PRINTS()
// KILL_ANY_CONVERSATION()
//
// START_CUTSCENE()
//
//// SET_SEAMLESS_CUTS_ACTIVE(bTracker)
//
//// IF NOT IS_PED_INJURED(pedContact)
//// IF IS_PED_GROUP_MEMBER(pedContact, PLAYER_GROUP_ID())
//// REMOVE_PED_FROM_GROUP(pedContact)
//// ENDIF
//// CLEAR_PED_TASKS(pedContact)
//// SET_ENTITY_COORDS(pedContact, << 716.3973, -979.2612, 23.1119 >>)
//// ENDIF
//
//// WHILE NOT IS_CUTSCENE_ACTIVE()
//// WAIT(0)
//// ENDWHILE
////
//// WAIT(1000)
//
// IF NOT IS_SCREEN_FADED_IN()
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
// ENDIF
//
// iCutsceneStage ++
//
// BREAK
//
// CASE 1
//
// #IF IS_DEBUG_BUILD
// IF NOT HAS_CUTSCENE_FINISHED()
// IF IS_KEYBOARD_KEY_PRESSED(KEY_J)
// STOP_CUTSCENE()
// ENDIF
// ENDIF
// #ENDIF
//
// IF HAS_CUTSCENE_FINISHED()
// //Return script systems to normal.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
//
// iCutsceneStage++
// ENDIF
//
// BREAK
//
// CASE 2
//
// IF DOES_ENTITY_EXIST(pedContact)
// IF NOT IS_PED_INJURED(pedContact)
// DELETE_PED(pedContact)
// ENDIF
// ENDIF
//
// SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// iCutsceneStage++
//
// BREAK
//
// CASE 3
//
// iControlFlag = 0
// missionStage = STAGE_END_MISSION
// iCutsceneStage ++
//
// BREAK
//
// ENDSWITCH
//
// ENDIF
//
//ENDPROC
//PURPOSE: Ends mission
PROC DO_STAGE_END_MISSION()
// IF iControlFlag = 0
//
// //Flags
// bCutsceneRunning = FALSE
// LesterLeftVehicle = FALSE
// playerLeftVehicle = FALSE
//
// //destroy these cams as a safety check
// IF DOES_CAM_EXIST(initCam)
// DESTROY_CAM(initCam)
// ENDIF
// IF DOES_CAM_EXIST(destCam)
// DESTROY_CAM(destCam)
// ENDIF
//
// //Create camera's
// IF NOT DOES_CAM_EXIST(initCam)
// initCam = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<724.468201,-992.068420,24.251366>>,<<5.259225,0.000715,25.889177>>,44.131210)
// ENDIF
// IF NOT DOES_CAM_EXIST(destCam)
// destCam = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<724.372742,-991.320496,24.433039>>,<<31.499252,0.000715,-4.206256>>,44.131210)
// ENDIF
//
// iCutsceneStage = 0
// bCutsceneRunning = TRUE
// iControlFlag = 1
//
// ENDIF
//
// IF iControlFlag = 1
//
// WHILE bCutsceneRunning = TRUE
//
// SWITCH iCutsceneStage
//
// CASE 0
//
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
// DISPLAY_RADAR(FALSE)
// DISPLAY_HUD(FALSE)
//
// IF DOES_ENTITY_EXIST(vehCar)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// POINT_CAM_AT_ENTITY(initCam, vehCar, <<0,0,0>>)
// ENDIF
// ENDIF
//
// SET_CAM_ACTIVE_WITH_INTERP(destCam, initCam, 5000)
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// SETTIMERA(0)
// iCutsceneStage ++
//
// BREAK
//
// CASE 1
//
// IF playerLeftVehicle = FALSE
// IF TIMERA() > 1000
// IF DOES_ENTITY_EXIST(vehCar)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
// TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), vehCar)
// playerLeftVehicle = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// IF LesterLeftVehicle = FALSE
// IF TIMERA() > 1800
// IF DOES_ENTITY_EXIST(vehCar)
// IF IS_VEHICLE_DRIVEABLE(vehCar)
// IF DOES_ENTITY_EXIST(pedContact)
// IF NOT IS_PED_INJURED(pedContact)
// IF IS_PED_IN_VEHICLE(pedContact, vehCar)
// TASK_LEAVE_VEHICLE(pedContact, vehCar)
// LesterLeftVehicle = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF TIMERA() > 5000
//
// iControlFlag = 2
// bCutsceneRunning = FALSE
//
// ENDIF
//
// BREAK
//
// ENDSWITCH
//
// WAIT(0)
//
// ENDWHILE
//
// ENDIF
IF iControlFlag = 0
// IF IS_NEW_LOAD_SCENE_ACTIVE()
// IF IS_NEW_LOAD_SCENE_LOADED()
// NEW_LOAD_SCENE_STOP()
// SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE) //Add this in here for to guarantee it's going to get called incase something else breaks
// g_sTriggerSceneAssets.ped[0] = pedContact
// g_sTriggerSceneAssets.veh[0] = vehCar
// MissionPassed()
// ELSE
// PRINTSTRING("waiting on new load scene finishing") PRINTNL()
// ENDIF
// ENDIF
//Have a safety net to make sure mission progresses if new load scene doesn't return true quick enough
NEW_LOAD_SCENE_STOP()
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, TRUE) //Add this in here for to guarantee it's going to get called incase something else breaks
g_sTriggerSceneAssets.ped[0] = pedContact
g_sTriggerSceneAssets.veh[0] = vehCar
MissionPassed()
ENDIF
ENDPROC
//PURPOSE: Handles peds looking at the player
PROC PEDS_LOOK_AT_PLAYER()
//Give Lester a task to look at the player
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(pedContact)
IF NOT IS_PED_INJURED(pedContact)
IF DOES_ENTITY_EXIST(vehCar)
IF IS_VEHICLE_DRIVEABLE(vehCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehCar)
IF LesterLookTaskGiven = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedContact) < 10
TASK_LOOK_AT_ENTITY(pedContact, PLAYER_PED_ID(), -1, SLF_DEFAULT, SLF_LOOKAT_HIGH)
LesterLookTaskGiven = TRUE
ENDIF
ENDIF
IF LesterLookTaskGiven = TRUE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedContact) > 10
TASK_CLEAR_LOOK_AT(pedContact)
LesterLookTaskGiven = FALSE
ENDIF
ENDIF
ELSE
IF LesterLookTaskGiven = TRUE
TASK_CLEAR_LOOK_AT(pedContact)
SET_PED_CAN_HEAD_IK(pedContact, TRUE)
LesterLookTaskGiven = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Give shop assistant a task to look at the player
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(shopAssistant)
IF NOT IS_PED_INJURED(shopAssistant)
IF shopAssistantLookTaskGiven = FALSE
// PRINTSTRING("shopAssistantLookTaskGiven = FALSE") PRINTNL()
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopAssistant) < 5
// PRINTSTRING("distance is less than 5 between shopassistant and player") PRINTNL()
TASK_LOOK_AT_ENTITY(shopAssistant, PLAYER_PED_ID(), -1, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
shopAssistantLookTaskGiven = TRUE
ELSE
// PRINTSTRING("distance is more than 5 between shopassistant and player") PRINTNL()
ENDIF
ENDIF
IF shopAssistantLookTaskGiven = TRUE
// PRINTSTRING("shopAssistantLookTaskGiven = TRUE") PRINTNL()
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopAssistant) > 5
// PRINTSTRING("distance is more than 5 between shopassistant and player") PRINTNL()
TASK_CLEAR_LOOK_AT(shopAssistant)
shopAssistantLookTaskGiven = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Give Guard a task to look at the player
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(shopGuard)
IF NOT IS_PED_INJURED(shopGuard)
IF shopGuardLookTaskGiven = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopGuard) < 10
TASK_LOOK_AT_ENTITY(shopGuard, PLAYER_PED_ID(), -1, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_HIGH)
shopGuardLookTaskGiven = TRUE
ENDIF
ENDIF
IF shopGuardLookTaskGiven = TRUE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), shopGuard) > 10
TASK_CLEAR_LOOK_AT(shopGuard)
shopGuardLookTaskGiven = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// MAIN SCRIPT
SCRIPT
SET_MISSION_FLAG(TRUE)
IF HAS_FORCE_CLEANUP_OCCURRED()
TRIGGER_MUSIC_EVENT("JH1_FAIL")
PRINTSTRING("playing fail music for death arrest") PRINTNL()
//Clear this to ensure the planning board sequence doesn't kick off on death/arrest.
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_JEWEL_PRIME_BOARD_TRANSITION, FALSE)
Mission_Flow_Mission_Force_Cleanup()
MissionCleanup()
ENDIF
//INFORM_MISSION_STATS_OF_MISSION_START_JEWELERY_HEIST_SETUP()
DISABLE_TAXI_HAILING(TRUE)
missionStage = STAGE_INIT_MISSION
WHILE TRUE
//For video recorder
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_TheJewelStoreJobSetup")
PEDS_LOOK_AT_PLAYER()
LESTER_WANTED_CHAT()
RUN_SEAMLESS_CUTSCENE(interpCamera, bTracker)
CHECK_FOR_MOD_SHOP()
VIDEO_RECORDER_MANAGER()
SWITCH MissionStage
CASE STAGE_INIT_MISSION
DO_STAGE_INIT_MISSION()
BREAK
CASE STAGE_OPENING_CUTSCENE
DO_STAGE_OPENING_CUTSCENE()
BREAK
CASE STAGE_DRIVE_TO_STORE
DO_STAGE_DRIVE_TO_STORE()
BREAK
CASE STAGE_SCOUT_OUT_STORE
DO_STAGE_SCOUT_OUT_STORE()
BREAK
CASE STAGE_FIND_ROOF_ENTRANCE
DO_STAGE_FIND_ROOF_ENTRANCE()
BREAK
CASE STAGE_CHECK_OUT_ROOF
DO_STAGE_CHECK_OUT_ROOF()
BREAK
CASE STAGE_DRIVE_TO_WAREHOUSE
DO_STAGE_DRIVE_TO_WAREHOUSE()
BREAK
CASE STAGE_END_MISSION
DO_STAGE_END_MISSION()
BREAK
ENDSWITCH
IF CheckpointReplayStarting = FALSE
FAIL_CHECKS()
ENDIF
//Checks for debug keys being pressed. J-skip, S-Pass, F-Fail, P-Previous
#IF IS_DEBUG_BUILD
Debug_Options()
IF LAUNCH_MISSION_STAGE_MENU(SkipMenuStruct, iReturnStage, 0) = TRUE
IF IS_CUTSCENE_ACTIVE()
PRINTSTRING("Waiting for cutscene to stop") PRINTNL()
STOP_CUTSCENE()
REMOVE_CUTSCENE()
ENDIF
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
iControlFlag = 0
iCutsceneStage = 0
CanMissionFail = FALSE
playerCausedTroubleInsideStore = FALSE
MissionStageBeingSkippedTo = TRUE
IF iReturnStage = 0
missionStage = STAGE_DRIVE_TO_STORE
ENDIF
IF iReturnStage = 1
missionStage = STAGE_SCOUT_OUT_STORE
ENDIF
IF iReturnStage = 2
missionStage = STAGE_FIND_ROOF_ENTRANCE
ENDIF
IF iReturnStage = 3
missionStage = STAGE_CHECK_OUT_ROOF
ENDIF
IF iReturnStage = 4
missionStage = STAGE_DRIVE_TO_WAREHOUSE
ENDIF
ENDIF
#ENDIF
WAIT(0)
ENDWHILE
MissionCleanup()
ENDSCRIPT