//╔═════════════════════════════════════════════════════════════════════════════╗ //║ ║ //║ 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(), <>, <<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(), <>, <<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 +@ <> 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(<>) 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], <>), 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, <>) //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(), <>, <<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, <>, <<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, <>, <<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