//Compile out Title Update changes to header functions. //Must be before includes. CONST_INT USE_TU_CHANGES 1 // Always include these two files at the top of each script USING "script_player.sch" USING "controller_assassination_lib.sch" USING "Assassination_briefing_lib.sch" USING "script_oddjob_funcs.sch" USING "building_control_public.sch" USING "assassination_support_lib.sch" USING "Assassin_shared.sch" USING "Chase_hint_cam.sch" USING "shared_hud_displays.sch" USING "script_oddjob_funcs.sch" USING "taxi_functions.sch" USING "oddjob_aggro.sch" USING "completionpercentage_public.sch" USING "replay_public.sch" USING "clearMissionArea.sch" USING "minigame_big_message.sch" USING "replay_private.sch" USING "commands_recording.sch" #IF IS_DEBUG_BUILD USING "shared_debug.sch" USING "script_debug.sch" USING "select_mission_stage.sch" #ENDIF CONST_INT NUM_LIMO_GUARDS 3 CONST_INT NUM_GUARDS 5 //bad name for this but it is used in other places in teh script so I dont want to remove entirely CONST_INT NUM_ESCORT_PEDS 2 CONST_INT NUM_BODYGUARDS 2 CONST_INT NUM_POLICE_BLOCKADE_POSITIONS 7 CONST_INT NUM_AIRLOCK_SPAWN_LOCATIONS 3 ENUM Assassin_Stages STAGE_BRIEF_INIT, STAGE_BRIEF_UPDATE, STAGE_BRIEF_EXIT, STAGE_INTRO_CUTSCENE, STAGE_INIT, STAGE_STREAMING, STAGE_SPAWNING, STAGE_GET_TO_HOTEL, STAGE_GUARD_CUTSCENE, STAGE_PLANT_BOMB, STAGE_GUARDS_GO_TO_POSTS, STAGE_TARGET_LEAVE_LOBBY, STAGE_ENTER_LIMO, STAGE_LEAVE_HOTEL, STAGE_ESCAPING, STAGE_KILL_CAM, STAGE_EVADE_POLICE, STAGE_LEAVE_AREA, STAGE_MISSION_PASSED ENDENUM Assassin_Stages MainStage = STAGE_INTRO_CUTSCENE //kill types ENUM eKillType KT_STANDARD, KT_BONUS ENDENUM eKillType killType = KT_STANDARD //Limo Guard states ENUM assLimoGuardState LGS_WALK_TO_POSTS = 0, LGS_STAND_GUARD, LGS_WARNING_CHECK, LGS_RESPOND_TO_PLAYER, LGS_ENTER_LIMO, LGS_LEAVE_IN_LIMO, LGS_DRIVE_TO_END, LGS_DRIVING, LGS_ALERTED, LGS_ALERTED2, LGS_PANIC, LGS_ATTACKING ENDENUM assLimoGuardState LimoGuardState[NUM_LIMO_GUARDS] //Motorcade ped states ENUM assEscortState ES_WAITING = 0, ES_DRIVE_TO_LIMO, ES_DRIVING_TO_LIMO, ES_PROTECT, ES_RESPOND_TO_PLAYER, ES_WARNING_CHECK, ES_ALERTED, ES_ALERTED2, ES_PANIC, ES_ATTACKING ENDENUM assEscortState EscortState[NUM_ESCORT_PEDS] //Target State ENUM assTargetState TS_ENTER_LIMO = 0, TS_LEAVE_IN_LIMO, TS_ALERTED, TS_ALERTED2, TS_FLEE ENDENUM assTargetState TargetState ENUM assBodyGuardState BS_WALK_WITH_TARGET = 0, BS_ENTER_VEHICLE, BS_RIDE_IN_VEHICLE, BS_ALERTED, BS_ALERTED2, BS_PANIC, BS_ATTACKING ENDENUM assBodyGuardState BodyGuardState[NUM_BODYGUARDS] //kill types ENUM eFailType FT_FAILED, FT_VEHICLE, FT_BLOWN_COVER, FT_BLOWN_COVER_WANTED, FT_BLOWN_COVER_HIT_PARKED_CAR, FT_DISREGARDED_WARNINGS, FT_ESCAPED, FT_ABANDONED, FT_STICKY, FT_LESTER_ATTACKED ENDENUM eFailType failType = FT_FAILED // ----------------------------------- // VARIABLES // ----------------------------------- PED_INDEX Player PED_INDEX piTarget PED_INDEX piBodyguard[NUM_BODYGUARDS] PED_INDEX piLimoGuard[NUM_LIMO_GUARDS] PED_INDEX piEscortPed[NUM_ESCORT_PEDS] //PED_INDEX piCutsceneGuard[NUM_LIMO_GUARDS] PED_INDEX piWalkingGuard PED_INDEX piLester ENTITY_INDEX LesterCane AI_BLIP_STRUCT blipCombatLimoGuards[NUM_LIMO_GUARDS] AI_BLIP_STRUCT blipCombatEscort[NUM_ESCORT_PEDS] AI_BLIP_STRUCT blipBodyguard[NUM_BODYGUARDS] BLIP_INDEX bHotelBlip BLIP_INDEX bTargetBlip BLIP_INDEX bLimoGuardBlip[NUM_LIMO_GUARDS] BLIP_INDEX bEscortBlip[NUM_ESCORT_PEDS] SCENARIO_BLOCKING_INDEX sbiHotel, sbiHotel01 STREAMVOL_ID svIntroCutscene BOOL bGuardAttendingTarget = FALSE BOOL bLoadSceneRequested = FALSE BOOL bObjectivePrinted BOOL bPanicking BOOL bWarned BOOL bGuardWalkingTowardsPlayer BOOL bLeftHotel BOOL bWarningLinePlayed BOOL bFailMissionForCloseVehicle BOOL bHotelTimerStarted BOOL bHotelTimerExpired BOOL bReplaying = FALSE BOOL bMissionFailed = FALSE BOOL bPlayerInTowTruck = FALSE //BOOL bLimoDestroyed = FALSE BOOL bLeaveInLimo BOOL bLimoStuck BOOL bDriveToLimo BOOL bCombatSubtaskSet BOOL bLimoCruisingStreets BOOL bTargetDead = FALSE BOOL bPlayerIsInFlyingVehicle = FALSE //BOOL bFirstCheckpointSceneLoad = FALSE //BOOL bSecondCheckpointSceneLoad = FALSE //BOOL bThirdCheckpointSceneLoad = FALSE //BOOL bFourthCheckpointSceneLoad = FALSE BOOL bIsPlayerInHotelArea = FALSE BOOL bReplayVehicleAvailable = FALSE BOOL bTaxiLeave = FALSE BOOL bLimoGuardsTaskedToEnterVehicle = FALSE BOOL bPlayerUsedSniperRifle = FALSE BOOL bPlayerUsedStickyBomb = FALSE BOOL bAlerted = FALSE BOOL bAlertedSpecial = FALSE BOOL bPlayedTargetLine = FALSE BOOL bTargetLeaving = FALSE BOOL bInPursuit = FALSE //BOOL bDebugSkipping = FALSE BOOL bPathIsBlocked = FALSE BOOL bTargetFleeing = FALSE BOOL bTriggerAlertMusic = FALSE BOOL bTriggerAlertMessage = FALSE //BOOL bPlayedCellPhoneCall = FALSE BOOL bLeftArea = FALSE //BOOL bGaveSecondWarning = FALSE //BOOL bDoNotRunPanicCheck = FALSE BOOL bTriggerGuardWalk = FALSE BOOL bPanickedExtras = FALSE BOOL bTaskedGuyToAim = FALSE BOOL bPlayedSearchDialogue = FALSE BOOL bPrintLastObjective = FALSE BOOL bPlayIntialDialogue = FALSE BOOL bEnterVehicle = FALSE BOOL bPrepareLostCue = FALSE BOOL bTriggeredLastCue = FALSE BOOL bGuardsTellExtrasToLeave = FALSE BOOL bBufferHit = FALSE BOOL bTargetPanicLinePlayed = FALSE BOOL bGuardPanicLinePlayed = FALSE BOOL bTargetDeadLinePlayed = FALSE BOOL bGaveAbandondedWarning = FALSE BOOL bPrintLoseWantedLevel = FALSE BOOL bTargetKillLinePlayed = FALSE BOOL bSkippedEndingScreen = FALSE BOOL bResetAbandonCheck = FALSE BOOL bPlayMusic = FALSE BOOL bPlayerTriggeredExplosionFromParkingGarage = FALSE BOOL bPlayerParkedCarInAlley = FALSE BOOL bDoFlash = FALSE INT iLesterUpdateStages = 0 INT i INT iStageNum INT iCutsceneStage INT iNumSafeLocations INT iGuardAnim[NUM_GUARDS] INT iTargetAirlockSpawn INT iHotelTimerStart //INT iTimeSoFar //INT iBombCount INT iFrameCountAsn INT iExtraCreationStages INT iExtraUpdateStages INT iHandleSniperAttackStages INT iGuardAimingState INT iStageToUse INT iGuardTimeToTellExtrasToLeave = 37000 INT iNumVehiclesInArea = 0 INT iNumVehiclesFound = 0 INT iTimeRemaining = 0 INT iTargetPanicLine = 0 INT iEndingScreenStages = 0 INT iLastStoredVehicleIdx = -1 INT iTimeToCut FLOAT fBombTime = 90000 FLOAT fTargetCarHeading FLOAT fTargetCarLobbyHead FLOAT fGuardHead[NUM_GUARDS] FLOAT fWarnTime[NUM_GUARDS] FLOAT fEscortCarHead FLOAT fSightDist FLOAT fAirlockHead[NUM_AIRLOCK_SPAWN_LOCATIONS] FLOAT fAirlockSpawnHead[NUM_AIRLOCK_SPAWN_LOCATIONS] FLOAT fAreaWidth = 135.000 //FLOAT fEscortCarHeading = 256.543091 FLOAT fPanicTime FLOAT fToHotelDistance = 0 INT iIndexToUse FLOAT fClosestVector = 0 VECTOR vAirlockPos[NUM_AIRLOCK_SPAWN_LOCATIONS] VECTOR vAirlockSpawnPos[NUM_AIRLOCK_SPAWN_LOCATIONS] //VECTOR vHotelStart VECTOR vGuardPos[NUM_GUARDS] VECTOR vEscortCarPos VECTOR vTargetCarPos VECTOR vTargetCarLobbyPos VECTOR vAreaCoord01 = << -1162.985, -161.715, -38.221 >> VECTOR vAreaCoord02 = << -1327.630, -266.202, 38.221 >> VECTOR vCenterPoint = << -1236.6611, -197.3160, 39.6313 >> VECTOR vNewBlipPosition = << -1266.02734, -218.98291, 41.44594 >> //<<-1261.5192, -225.5875, 41.4460>> //VECTOR vEscortCarPosition = << -1230.39, -182.561, 38.726 >> VECTOR vTargetLastPosition VECTOR vHotelCenterPos = << -1237.73145, -189.54518, 40.63728 >> FLOAT fHotelCenterRadius = 40 VEHICLE_INDEX viTargetCar VEHICLE_INDEX viEscortCar VEHICLE_INDEX viCarThatTriggeredAlert VEHICLE_INDEX vehPlaneVehicle // if the player is in a plane or heli when triggering cutscene VEHICLE_INDEX viParkedCar[2] VEHICLE_INDEX viReplayVehicle VEHICLE_INDEX viLastDriven[3] SEQUENCE_INDEX seqIndex MODEL_NAMES TargetModel = A_M_Y_BEACHVESP_02 MODEL_NAMES TargetCarModel = FBI2 MODEL_NAMES GuardModel = S_M_M_HIGHSEC_01 MODEL_NAMES GuardModel_01 = S_M_M_HIGHSEC_02 MODEL_NAMES EscortCarModel = WASHINGTON CAMERA_INDEX camInit CAMERA_INDEX camDest REL_GROUP_HASH relGroupGuards structTimer warnTimer structTimer tMissionTimer structTimer tBufferTimer structTimer tTargetSpeakTimer structTimer tBlockingTimer structTimer tExtrasTimer structTimer tCheckoutTimer structTimer tFailTimer structTimer tLesterTimer //structTimer tAudioCueTimer structTimer tBeepTimer BOOL bLoadedSoundSet = FALSE structPedsForConversation hotelConv CHASE_HINT_CAM_STRUCT localChaseHintCamStruct SIMPLE_USE_CONTEXT cucEndScreen VECTOR vCheckpointRetryPosition = <<-1263.6769, -222.2767, 41.4460>> FLOAT fCheckpointRetryHeading = 304.2010 // Lead In variables VECTOR vWaitingPosition = <<-1507.2521, -934.3307, 8.6562>> FLOAT fWaitingHeading = 137.9228 CAMERA_INDEX camLeadIn01, camLeadIn02 VECTOR vCameraPosition01 = <<-1510.733276,-935.959961,10.902136>> VECTOR vCameraRotation01 = <<15.074911,-0.024198,-71.861885>> VECTOR vCameraPosition02 = <<-1510.877563,-936.115479,9.798549>> VECTOR vCameraRotation02 = <<4.686822,-0.024198,-72.459717>> structTimer tLeadinTimer OBJECT_INDEX oFailSafeBench #IF IS_DEBUG_BUILD BOOL bDoingPSkip BOOL bDoingJSkip DEBUG_POS_DATA myDebugData MissionStageMenuTextStruct sSkipMenu[2] INT iDebugJumpStage = 0 #ENDIF STRUCT STRUCT_EXTRAS PED_INDEX pedTaxiGuys[2] PED_INDEX pedTaxiDriver VEHICLE_INDEX vehTaxi PED_INDEX pedSmokers[2] PED_INDEX pedTalkers[2] BOOL bGuysCreated ENDSTRUCT STRUCT_EXTRAS stExtras PROC SETUP_DEBUG() #IF IS_DEBUG_BUILD sSkipMenu[0].sTxtLabel = "TRAVEL_STAGE" sSkipMenu[1].sTxtLabel = "ASSASSINATION_STAGE" #ENDIF ENDPROC /// PURPOSE: /// Checks if the entity exists and is not dead. /// PARAMS: /// mEntity - the entity we are checking. /// RETURNS: /// True if the entity exists and is not dead. FUNC BOOL IS_ENTITY_ALIVE(ENTITY_INDEX mEntity) IF DOES_ENTITY_EXIST(mEntity) IF NOT IS_ENTITY_DEAD(mEntity) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC CREATE_EXTRAS() SEQUENCE_INDEX iSeq SWITCH iExtraCreationStages CASE 0 REQUEST_MODEL(A_M_M_BEVHILLS_01) REQUEST_MODEL(A_F_M_BEVHILLS_01) REQUEST_MODEL(A_F_M_BEVHILLS_02) REQUEST_MODEL(A_M_Y_HIPSTER_01) REQUEST_MODEL(TAXI) REQUEST_WAYPOINT_RECORDING("OJAS_HotelTaxi01") PRINTLN("REQUESTING EXTRAS") REQUEST_ANIM_DICT("oddjobs@assassinate@hotel@") IF HAS_MODEL_LOADED(A_M_M_BEVHILLS_01) AND HAS_MODEL_LOADED(A_F_M_BEVHILLS_01) AND HAS_MODEL_LOADED(A_F_M_BEVHILLS_02) AND HAS_MODEL_LOADED(TAXI) AND HAS_MODEL_LOADED(A_M_Y_HIPSTER_01) AND HAS_ANIM_DICT_LOADED("oddjobs@assassinate@hotel@") AND GET_IS_WAYPOINT_RECORDING_LOADED("OJAS_HotelTaxi01") iExtraCreationStages++ PRINTLN("iExtraCreationStages = ", iExtraCreationStages) ELSE PRINTLN("WAITING ON EXTRAS") ENDIF BREAK //======================================================================================================================= CASE 1 stExtras.pedTaxiGuys[0] = CREATE_PED(PEDTYPE_CIVMALE, A_F_M_BEVHILLS_01, << -1220.6788, -203.2689, 38.3251 >>, 321.2841) stExtras.pedTaxiGuys[1] = CREATE_PED(PEDTYPE_CIVMALE, A_F_M_BEVHILLS_02, << -1219.5959, -201.3663, 38.3251 >>, 110.7199) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedTaxiGuys[0], TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedTaxiGuys[1], TRUE) OPEN_SEQUENCE_TASK(iSeq) TASK_LOOK_AT_ENTITY(NULL, stExtras.pedTaxiGuys[1], -1) // TASK_PLAY_ANIM(NULL, "oddjobs@assassinate@hotel@", "idle_a", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_START_SCENARIO_AT_POSITION(NULL, "WORLD_HUMAN_TOURIST_MOBILE", << -1220.6788, -203.2689, 38.3251 >>, 321.2841) CLOSE_SEQUENCE_TASK(iSeq) IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[0]) TASK_PERFORM_SEQUENCE(stExtras.pedTaxiGuys[0], iSeq) ENDIF CLEAR_SEQUENCE_TASK(iSeq) OPEN_SEQUENCE_TASK(iSeq) TASK_LOOK_AT_ENTITY(NULL, stExtras.pedTaxiGuys[0], -1) TASK_START_SCENARIO_AT_POSITION(NULL, "WORLD_HUMAN_TOURIST_MAP", << -1219.5959, -201.3663, 38.3251 >>, 110.7199) CLOSE_SEQUENCE_TASK(iSeq) IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[1]) TASK_PERFORM_SEQUENCE(stExtras.pedTaxiGuys[1], iSeq) ENDIF CLEAR_SEQUENCE_TASK(iSeq) stExtras.vehTaxi = CREATE_VEHICLE(TAXI, << -1221.7302, -199.0665, 38.1751 >>, 152.5038) SET_VEHICLE_ON_GROUND_PROPERLY(stExtras.vehTaxi) // SET_VEHICLE_DOORS_LOCKED(stExtras.vehTaxi, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) stExtras.pedTaxiDriver = CREATE_PED_INSIDE_VEHICLE(stExtras.vehTaxi, PEDTYPE_CIVMALE, A_M_Y_HIPSTER_01) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedTaxiDriver, TRUE) TASK_LOOK_AT_ENTITY(stExtras.pedTaxiDriver, stExtras.pedTaxiGuys[0], -1) stExtras.pedTalkers[0] = CREATE_PED(PEDTYPE_CIVMALE, A_M_M_BEVHILLS_01, << -1211.5972, -184.5331, 38.3255 >>, 4.5193) stExtras.pedTalkers[1] = CREATE_PED(PEDTYPE_CIVMALE, A_M_Y_HIPSTER_01, << -1211.6544, -182.7625, 38.3255 >>, 166.2532) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedTalkers[0], TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedTalkers[1], TRUE) TASK_PLAY_ANIM(stExtras.pedTalkers[0], "oddjobs@assassinate@hotel@", "idle_a", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_PLAY_ANIM(stExtras.pedTalkers[1], "oddjobs@assassinate@hotel@", "argue_b", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) stExtras.pedSmokers[0] = CREATE_PED(PEDTYPE_CIVMALE, A_M_M_BEVHILLS_01, << -1229.0994, -176.3197, 38.3255 >>, 231.8036) stExtras.pedSmokers[1] = CREATE_PED(PEDTYPE_CIVMALE, A_F_M_BEVHILLS_02, << -1249.7793, -162.4767, 39.4131 >>, 220.1651) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedSmokers[0], TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(stExtras.pedSmokers[1], TRUE) TASK_PLAY_ANIM(stExtras.pedSmokers[0], "oddjobs@assassinate@hotel@","base", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) TASK_PLAY_ANIM(stExtras.pedSmokers[1], "oddjobs@assassinate@hotel@","base", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) stExtras.bGuysCreated = TRUE SET_MODEL_AS_NO_LONGER_NEEDED(A_M_M_BEVHILLS_01) SET_MODEL_AS_NO_LONGER_NEEDED(A_F_M_BEVHILLS_01) SET_MODEL_AS_NO_LONGER_NEEDED(A_F_M_BEVHILLS_02) SET_MODEL_AS_NO_LONGER_NEEDED(A_M_Y_HIPSTER_01) SET_MODEL_AS_NO_LONGER_NEEDED(TAXI) iExtraCreationStages++ PRINTLN("iExtraCreationStages = ", iExtraCreationStages) BREAK //======================================================================================================================= CASE 2 BREAK ENDSWITCH ENDPROC PROC REMOVE_PED(PED_INDEX& pedToRemove) IF DOES_ENTITY_EXIST(pedToRemove) IF IS_ENTITY_OCCLUDED(pedToRemove) DELETE_PED(pedToRemove) PRINTLN("DELETING PED") ELSE SET_PED_AS_NO_LONGER_NEEDED(pedToRemove) PRINTLN("SETTING PED AS NO LONGER NEEDED") ENDIF ENDIF ENDPROC PROC REMOVE_VEHICLE(VEHICLE_INDEX& vehToRemove) IF DOES_ENTITY_EXIST(vehToRemove) IF IS_ENTITY_OCCLUDED(vehToRemove) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehToRemove) PRINTLN("SETTING VEHICLE AS NO LONGER NEEDED") // ELSE // DELETE_VEHICLE(vehToRemove) // PRINTLN("DELETING VEHICLE") ENDIF ENDIF ENDPROC PROC CLEANUP_EXTRAS() REMOVE_VEHICLE(stExtras.vehTaxi) REMOVE_PED(stExtras.pedTaxiGuys[0]) REMOVE_PED(stExtras.pedTaxiGuys[1]) REMOVE_PED(stExtras.pedTalkers[0]) REMOVE_PED(stExtras.pedTalkers[1]) REMOVE_PED(stExtras.pedSmokers[0]) REMOVE_PED(stExtras.pedSmokers[1]) REMOVE_PED(stExtras.pedTaxiDriver) ENDPROC /// PURPOSE: /// Called when the mission is failed. /// Sets the fail reason and tells replay controller to start setting up the replay /// (showing fail reason, fading out etc) PROC SET_MISSION_FAILED(eFailType eFail) IF bMissionFailed = FALSE // (should only do this failed stuff once) failType = eFail KILL_ANY_CONVERSATION() CLEAR_PRINTS() TRIGGER_MUSIC_EVENT("ASS1_FAIL") PRINTLN("TRIGGERING MUSIC - ASS1_FAIL - 01") IF DOES_PLAYER_NEED_SAFE_WARP() MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<-1698.5100, -1067.7682, 12.1417>>, 316.3502) ENDIF //to fix bug 1212108 - Starting on foot having driven there in previous attempt- (3/23/13) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) g_replay.iReplayInt[0] = 1 //set this integer to true that we will check later in GO_TO_CHECKPOINT_X ELSE g_replay.iReplayInt[0] = 0 //reset this value ENDIF STRING strFailReason SWITCH failType CASE FT_FAILED strFailReason = "ASS_VA_FAILED" PRINTLN("FAIL REASON - FT_FAILED") BREAK CASE FT_VEHICLE strFailReason = "ASS_VA_VEHICLE" PRINTLN("FAIL REASON - FT_VEHICLE") BREAK CASE FT_BLOWN_COVER CASE FT_DISREGARDED_WARNINGS strFailReason = "ASS_VA_COVER" PRINTLN("FAIL REASON - FT_BLOWN_COVER") BREAK CASE FT_STICKY strFailReason = "ASS_VA_COVER" PRINTLN("FAIL REASON - FT_STICKY") BREAK CASE FT_BLOWN_COVER_WANTED strFailReason = "ASS_VA_WANTED" PRINTLN("FAIL REASON - ASS_VA_WANTED") BREAK CASE FT_ESCAPED strFailReason = "ASS_VA_ESCAPED" PRINTLN("FAIL REASON - ASS_VA_ESCAPED") BREAK CASE FT_ABANDONED strFailReason = "ASS_VA_ABAND" PRINTLN("FAIL REASON - ASS_VA_ABAND") BREAK CASE FT_LESTER_ATTACKED strFailReason = "ASS_VA_LATTACK" PRINTLN("FAIL REASON - ASS_VA_LATTACK") BREAK ENDSWITCH bMissionFailed = TRUE ASSASSIN_MISSION_MarkMissionFailed(strFailReason) MISSION_FLOW_MISSION_FAILED() ENDIF ENDPROC FUNC BOOL CHECK_FOR_PLAYER_RAMMING_VEHICLE(VEHICLE_INDEX vehToCheck) VEHICLE_INDEX vehTemp FLOAT fSpeed IF DOES_ENTITY_EXIST(vehToCheck) IF IS_VEHICLE_DRIVEABLE(vehToCheck) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) IF DOES_ENTITY_EXIST(vehTemp) AND IS_VEHICLE_DRIVEABLE(vehTemp) fSpeed = GET_ENTITY_SPEED(vehTemp) // PRINTLN("PLAYER'S VEHICLE SPEED = ", fSpeed) IF fSpeed > 7.0 IF IS_ENTITY_TOUCHING_ENTITY(vehTemp, vehToCheck) OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vehTemp, vehToCheck) PRINTLN("CHECK_FOR_PLAYER_RAMMING_VEHICLE RETURNED TRUE!") // IF IS_ENTITY_TOUCHING_ENTITY(vehTemp, vehToCheck) // PRINTLN("ENTITY TOUCHING ENTITY CHECK RETURNED TRUE") // ENDIF // IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vehTemp, vehToCheck) // PRINTLN("ENTITY DAMAGED ENTITY CHECK RETURNED TRUE") // ENDIF RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL RUN_AGGRO_CHECK_ON_EXTRAS() IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiDriver) IF IS_PED_BEING_JACKED(stExtras.pedTaxiDriver) IF GET_PEDS_JACKER(stExtras.pedTaxiDriver) = PLAYER_PED_ID() PRINTLN("RETURNING TRUE, PLAYER IS JACKING TAXI DRIVER") RETURN TRUE ENDIF ENDIF ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(stExtras.vehTaxi) IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), stExtras.vehTaxi) PRINTLN("RETURNING TRUE, PLAYER GOT IN TAXI") RETURN TRUE ENDIF ENDIF IF DO_AGGRO_CHECK(stExtras.pedTaxiGuys[0], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedTaxiGuys[0]") RETURN TRUE ENDIF IF DO_AGGRO_CHECK(stExtras.pedTaxiGuys[1], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedTaxiGuys[1]") RETURN TRUE ENDIF IF DO_AGGRO_CHECK(stExtras.pedTalkers[0], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedTalkers[0]") RETURN TRUE ENDIF IF DO_AGGRO_CHECK(stExtras.pedTalkers[1], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedTalkers[1]") RETURN TRUE ENDIF IF DO_AGGRO_CHECK(stExtras.pedSmokers[0], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedSmokers[0]") RETURN TRUE ENDIF IF DO_AGGRO_CHECK(stExtras.pedSmokers[1], NULL, aggroArgs, aggroReason, FALSE, FALSE, FALSE, TRUE, FALSE) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.pedSmokers[1]") RETURN TRUE ENDIF IF CHECK_FOR_PLAYER_RAMMING_VEHICLE(stExtras.vehTaxi) PRINTLN("AGGRO CHECK RETURNING TRUE ON stExtras.vehTaxi") RETURN TRUE ENDIF //Performance of this? IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, <<-1231.3260, -201.7195, 38.2114>>, 20.0) // AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DIR_STEAM, <<-1231.3260, -201.7195, 38.2114>>, 20.0) // AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DIR_WATER_HYDRANT, <<-1231.3260, -201.7195, 38.2114>>, 20.0) PRINTLN("AGGRO CHECK RETURNING TRUE ON UPDATE PED EXTRAS") RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC HANDLE_FLEE() IF DOES_ENTITY_EXIST(stExtras.pedTaxiDriver) AND NOT IS_ENTITY_DEAD(stExtras.pedTaxiDriver) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedTaxiDriver, PLAYER_PED_ID(), 1000, -1) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedTaxiGuys[0]) AND NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[0]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedTaxiGuys[0], PLAYER_PED_ID(), 1000, -1) SET_PED_FLEE_ATTRIBUTES(stExtras.pedTaxiGuys[0], FA_USE_VEHICLE, FALSE) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedTaxiGuys[1]) AND NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[1]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedTaxiGuys[1], PLAYER_PED_ID(), 1000, -1) SET_PED_FLEE_ATTRIBUTES(stExtras.pedTaxiGuys[1], FA_USE_VEHICLE, FALSE) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedTalkers[0]) AND NOT IS_ENTITY_DEAD(stExtras.pedTalkers[0]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedTalkers[0], PLAYER_PED_ID(), 1000, -1) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedTalkers[1]) AND NOT IS_ENTITY_DEAD(stExtras.pedTalkers[1]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedTalkers[1], PLAYER_PED_ID(), 1000, -1) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedSmokers[0]) AND NOT IS_ENTITY_DEAD(stExtras.pedSmokers[0]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedSmokers[0], PLAYER_PED_ID(), 1000, -1) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedSmokers[1]) AND NOT IS_ENTITY_DEAD(stExtras.pedSmokers[1]) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) TASK_SMART_FLEE_PED(stExtras.pedSmokers[1], PLAYER_PED_ID(), 1000, -1) ENDIF ENDPROC /// PURPOSE: /// Loops through LimoGuard, EscortPed, and Bodyguard arrays and returns the closest ped index /// PARAMS: /// fDistToCheck - Probe distance around the player /// RETURNS: /// FUNC PED_INDEX GET_CLOSEST_GUARD(FLOAT fDistToCheck = 70.0, BOOL bCheckGuysInVehicles = TRUE) INT tempInt FLOAT fCurDist FLOAT fCloseDist = fDistToCheck PED_INDEX closestPed FOR tempInt = 0 TO NUM_LIMO_GUARDS - 1 IF NOT IS_PED_INJURED(piLimoGuard[tempInt]) IF bCheckGuysInVehicles OR ( NOT bCheckGuysInVehicles AND NOT IS_PED_IN_ANY_VEHICLE(piLimoGuard[tempInt]) ) fCurDist = GET_PLAYER_DISTANCE_FROM_ENTITY(piLimoGuard[tempInt], TRUE) // PRINTLN("LIMO GUARDS: DISTANCE TO PLAYER FOR INDEX: ", tempInt, " DISTANCE = ", fCurDist) IF fCurDist < fCloseDist // PRINTLN("BEFORE: fCloseDist = ", fCloseDist) // PRINTLN("BEFORE: fCurDist = ", fCurDist) fCloseDist = fCurDist // PRINTLN("AFTER: fCloseDist = ", fCloseDist) // PRINTLN("AFTER: fCurDist = ", fCurDist) closestPed = piLimoGuard[tempInt] // PRINTLN("CLOSEST piLimoGuard INDEX: ", tempInt) ENDIF ENDIF ENDIF ENDFOR FOR tempInt = 0 TO NUM_ESCORT_PEDS - 1 IF NOT IS_PED_INJURED(piEscortPed[tempInt]) IF bCheckGuysInVehicles OR ( NOT bCheckGuysInVehicles AND NOT IS_PED_IN_ANY_VEHICLE(piEscortPed[tempInt]) ) fCurDist = GET_PLAYER_DISTANCE_FROM_ENTITY(piEscortPed[tempInt], TRUE) // PRINTLN("ESCORT GUARDS: DISTANCE TO PLAYER FOR INDEX: ", tempInt, " DISTANCE = ", fCurDist) IF fCurDist < fCloseDist fCloseDist = fCurDist closestPed = piEscortPed[tempInt] // PRINTLN("CLOSEST piEscortPed INDEX: ", tempInt) ENDIF ENDIF ENDIF ENDFOR FOR tempInt = 0 TO NUM_BODYGUARDS - 1 IF NOT IS_PED_INJURED(piBodyguard[tempInt]) IF bCheckGuysInVehicles OR ( NOT bCheckGuysInVehicles AND NOT IS_PED_IN_ANY_VEHICLE(piEscortPed[tempInt]) ) fCurDist = GET_PLAYER_DISTANCE_FROM_ENTITY(piBodyguard[tempInt], TRUE) // PRINTLN("BODYGUARDS: DISTANCE TO PLAYER FOR INDEX: ", tempInt, " DISTANCE = ", fCurDist) IF fCurDist < fCloseDist fCloseDist = fCurDist closestPed = piBodyguard[tempInt] // PRINTLN("CLOSEST piBodyguard INDEX: ", tempInt) ENDIF ENDIF ENDIF ENDFOR RETURN closestPed ENDFUNC FUNC PED_INDEX GET_CLOSEST_GUARD_TO_LIMO(FLOAT fDistToCheck) INT tempInt FOR tempInt = 0 TO NUM_LIMO_GUARDS - 1 IF NOT IS_PED_INJURED(piLimoGuard[tempInt]) IF GET_ENTITY_DISTANCE_FROM_LOCATION(piLimoGuard[tempInt], vTargetCarLobbyPos) < fDistToCheck RETURN piLimoGuard[tempInt] ENDIF ENDIF ENDFOR FOR tempInt = 0 TO NUM_ESCORT_PEDS - 1 IF NOT IS_PED_INJURED(piEscortPed[tempInt]) IF GET_ENTITY_DISTANCE_FROM_LOCATION(piEscortPed[tempInt], vTargetCarLobbyPos) < fDistToCheck RETURN piEscortPed[tempInt] ENDIF ENDIF ENDFOR RETURN NULL ENDFUNC /// PURPOSE: /// Fill ped struct data for dialogue PROC SETUP_PED_FOR_DIALOGUE(PED_INDEX ped, INT intPedNumber, STRING strVoiceIdentifier) IF NOT IS_PED_INJURED(ped) ADD_PED_FOR_DIALOGUE(hotelConv, intPedNumber, ped, strVoiceIdentifier) ENDIF ENDPROC /// PURPOSE: /// Gives a ped a task sequence to walk to the front of the hotel and wander /// PARAMS: /// pedToTask - ped /// bOnlyTaskIfNotAlreadyUsingSequence - if TRUE will only give the ped a task to do this is not already using a sequence. Set to FALSE to task regardless. PROC TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(PED_INDEX pedToTask, BOOL bOnlyTaskIfNotAlreadyUsingSequence = TRUE) SEQUENCE_INDEX tempSeq IF NOT IS_PED_INJURED(pedToTask) IF ( bOnlyTaskIfNotAlreadyUsingSequence AND GET_SCRIPT_TASK_STATUS(pedToTask, SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK ) OR NOT bOnlyTaskIfNotAlreadyUsingSequence OPEN_SEQUENCE_TASK(tempSeq) TASK_GO_TO_COORD_ANY_MEANS(NULL, << -1214.3433, -132.1107, 40.2416 >>, PEDMOVEBLENDRATIO_WALK, NULL) TASK_WANDER_STANDARD(NULL) CLOSE_SEQUENCE_TASK(tempSeq) TASK_PERFORM_SEQUENCE(pedToTask, tempSeq) CLEAR_SEQUENCE_TASK(tempSeq) ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks to see if a ped is running a ragdoll task and is not already tasked with TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER and tasks them with it if not /// PARAMS: /// pedToTask - ped to check/task /// bForce - defaults to FALSE. Set the TRUE if you want to explicitly give the task without the ped having to ragdoll first PROC HANDLE_PLAYER_APPROACHING_EXTRA(PED_INDEX pedToTask, BOOL bForce = FALSE) IF NOT IS_PED_INJURED(pedToTask) IF GET_SCRIPT_TASK_STATUS(pedToTask, SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK IF GET_PLAYER_DISTANCE_FROM_ENTITY(pedToTask, FALSE) < 1.0 OR bForce TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(pedToTask) ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// State machine for controlling teh bahvior of the peds that stand outside the taxi and the taxi driver PROC UPDATE_TAXI_EXTRAS() PED_INDEX tempGuard SWITCH iExtraUpdateStages CASE 0 IF bTaxiLeave OR bWarningLinePlayed OR GET_PLAYER_DISTANCE_FROM_ENTITY(stExtras.pedTaxiGuys[0], FALSE) < 1.0 OR GET_PLAYER_DISTANCE_FROM_ENTITY(stExtras.pedTaxiGuys[1], FALSE) < 1.0 IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[0]) AND NOT IS_ENTITY_DEAD(stExtras.pedTaxiGuys[1]) TASK_LOOK_AT_ENTITY(stExtras.pedTaxiGuys[0], stExtras.pedTaxiGuys[1], -1) TASK_LOOK_AT_ENTITY(stExtras.pedTaxiGuys[1], stExtras.pedTaxiGuys[0], -1) ENDIF IF DOES_ENTITY_EXIST(stExtras.pedTaxiGuys[1]) AND DOES_ENTITY_EXIST(stExtras.vehTaxi) AND NOT IS_PED_INJURED(stExtras.pedTaxiGuys[1]) AND IS_VEHICLE_DRIVEABLE(stExtras.vehTaxi) CLEAR_PED_TASKS(stExtras.pedTaxiGuys[1]) TASK_ENTER_VEHICLE(stExtras.pedTaxiGuys[1], stExtras.vehTaxi, DEFAULT_TIME_BEFORE_WARP, VS_BACK_RIGHT, PEDMOVEBLENDRATIO_WALK) PRINTLN("UPDATE_EXTRAS: TASKING GUYS TO ENTER VEHICLE - 02") ENDIF IF NOT IS_TIMER_STARTED(tExtrasTimer) START_TIMER_NOW(tExtrasTimer) PRINTLN("STARTING TIMER - tExtrasTimer") ENDIF iExtraUpdateStages++ PRINTLN("iExtraUpdateStages = ", iExtraUpdateStages) ENDIF BREAK //======================================================================================================================= CASE 1 IF NOT bEnterVehicle IF IS_TIMER_STARTED(tExtrasTimer) IF GET_TIMER_IN_SECONDS(tExtrasTimer) > 3.0 IF DOES_ENTITY_EXIST(stExtras.pedTaxiGuys[0]) AND DOES_ENTITY_EXIST(stExtras.vehTaxi) AND NOT IS_PED_INJURED(stExtras.pedTaxiGuys[0]) AND IS_VEHICLE_DRIVEABLE(stExtras.vehTaxi) IF GET_SCRIPT_TASK_STATUS(stExtras.pedTaxiGuys[0], SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK CLEAR_PED_TASKS(stExtras.pedTaxiGuys[0]) TASK_ENTER_VEHICLE(stExtras.pedTaxiGuys[0], stExtras.vehTaxi, DEFAULT_TIME_BEFORE_WARP, VS_BACK_LEFT, PEDMOVEBLENDRATIO_WALK) PRINTLN("UPDATE_EXTRAS: TASKING GUYS TO ENTER VEHICLE - 01") bEnterVehicle = TRUE ENDIF ENDIF ENDIF ELSE START_TIMER_NOW(tExtrasTimer) ENDIF ENDIF IF NOT IS_PED_INJURED(stExtras.pedTaxiGuys[0]) AND NOT IS_PED_INJURED(stExtras.pedTaxiGuys[1]) IF IS_PED_IN_VEHICLE(stExtras.pedTaxiGuys[0], stExtras.vehTaxi) AND IS_PED_IN_VEHICLE(stExtras.pedTaxiGuys[1], stExtras.vehTaxi) IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiDriver) AND NOT IS_ENTITY_DEAD(stExtras.vehTaxi) TASK_CLEAR_LOOK_AT(stExtras.pedTaxiDriver) RESTART_TIMER_NOW(tExtrasTimer) ENDIF iExtraUpdateStages++ PRINTLN("iExtraUpdateStages = ", iExtraUpdateStages) ENDIF ENDIF BREAK //======================================================================================================================= CASE 2 IF IS_TIMER_STARTED(tExtrasTimer) IF GET_TIMER_IN_SECONDS(tExtrasTimer) > 3.0 IF NOT IS_PED_INJURED(stExtras.pedTaxiDriver) AND IS_VEHICLE_DRIVEABLE(stExtras.vehTaxi) TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(stExtras.pedTaxiDriver, stExtras.vehTaxi, "OJAS_HotelTaxi01", DRIVINGMODE_AVOIDCARS | DF_SteerAroundPeds, 0, EWAYPOINT_VEHICLES_USE_AI_SLOWDOWN, -1, 10) iExtraUpdateStages++ PRINTLN("iExtraUpdateStages = ", iExtraUpdateStages) ENDIF ENDIF ENDIF BREAK //======================================================================================================================= CASE 3 IF NOT IS_ENTITY_DEAD(stExtras.pedTaxiDriver) AND NOT IS_ENTITY_DEAD(stExtras.vehTaxi) IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(stExtras.vehTaxi) OR bGuardsTellExtrasToLeave TASK_VEHICLE_DRIVE_WANDER(stExtras.pedTaxiDriver, stExtras.vehTaxi, 10.0, DRIVINGMODE_STOPFORCARS) PRINTLN("TASKING TO WANDER") iExtraUpdateStages++ PRINTLN("iExtraUpdateStages = ", iExtraUpdateStages) ENDIF ENDIF BREAK //======================================================================================================================= CASE 4 IF bGuardsTellExtrasToLeave IF NOT IS_PED_INJURED(piEscortPed[0]) tempGuard = piEscortPed[0] ELSE tempGuard = GET_CLOSEST_GUARD_TO_LIMO(25.0) ENDIF IF DOES_ENTITY_EXIST(tempGuard) IF NOT IS_PED_INJURED(tempGuard) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() SETUP_PED_FOR_DIALOGUE(tempGuard, 5, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_LEAVE", CONV_PRIORITY_VERY_HIGH) //tells extras to leave ENDIF ENDIF ENDIF RESTART_TIMER_NOW(tExtrasTimer) iExtraUpdateStages++ PRINTLN("iExtraUpdateStages = ", iExtraUpdateStages) ENDIF BREAK //======================================================================================================================= CASE 5 //empty - already tasked BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Handles updating of talker and smoker extra peds PROC UPDATE_NON_TAXI_EXTRAS() IF bHotelTimerStarted IF iTimeRemaining < (iGuardTimeToTellExtrasToLeave - 5.0) // TALKER PEDS - 2 TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(stExtras.pedTalkers[0]) TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(stExtras.pedTalkers[1]) // SMOKING PEDS - 2 TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(stExtras.pedSmokers[0]) TASK_WALK_TO_HOTEL_ENTRANCE_AND_WANDER(stExtras.pedSmokers[1]) ELSE //if either one of these peds are approached, we want to force them both to walk away IF GET_PLAYER_DISTANCE_FROM_ENTITY(stExtras.pedTalkers[0], FALSE) < 1.0 OR GET_PLAYER_DISTANCE_FROM_ENTITY(stExtras.pedTalkers[1], FALSE) < 1.0 OR bWarningLinePlayed HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedTalkers[0], TRUE) HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedTalkers[1], TRUE) ENDIF IF NOT bWarningLinePlayed HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedSmokers[0]) HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedSmokers[1]) ELSE HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedSmokers[0], TRUE) HANDLE_PLAYER_APPROACHING_EXTRA(stExtras.pedSmokers[1], TRUE) ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Main update loop for the extra peds PROC UPDATE_EXTRAS() PED_INDEX pedSpeaker VECTOR vSpeakerPos IF stExtras.bGuysCreated IF NOT bPanickedExtras IF MainStage < STAGE_GUARDS_GO_TO_POSTS IF RUN_AGGRO_CHECK_ON_EXTRAS() pedSpeaker = GET_CLOSEST_GUARD() IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(pedSpeaker) IF GET_PLAYER_DISTANCE_FROM_ENTITY(pedSpeaker, FALSE) < 10 vSpeakerPos = GET_ENTITY_COORDS(pedSpeaker) vSpeakerPos = vSpeakerPos PRINTLN("pedSpeaker located at << ", vSpeakerPos.x, ", ", vSpeakerPos.y, ", ", vSpeakerPos.z, " >>.") ADD_PED_FOR_DIALOGUE(hotelConv, 3, pedSpeaker, "OJAvaGuard") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_AT_EX", CONV_PRIORITY_VERY_HIGH) ENDIF ENDIF HANDLE_FLEE() PRINTLN("bPanickedExtras = TRUE - 01") bPanickedExtras = TRUE ENDIF IF bPanicking HANDLE_FLEE() PRINTLN("bPanickedExtras = TRUE - 02") bPanickedExtras = TRUE ELSE UPDATE_TAXI_EXTRAS() UPDATE_NON_TAXI_EXTRAS() ENDIF ENDIF ENDIF ENDIF ENDPROC PROC SETUP_UI_LABELS() endLabel.tlMissionPassed = "ASS_VA_PASSED" endLabel.tlMissionName = g_sMissionStatsName endLabel.tlTimeTaken = "ASS_VA_TIMER" endLabel.tlBaseReward = "ASS_VA_BASE" endLabel.tlBonusDesc = "ASS_VA_BDESC" endLabel.tlCashEarned = "ASS_VA_CASH" endLabel.tlCompletionGold = "ASS_VA_COMP"//"ASS_VA_COMPG" endLabel.tlCompletionSilver = "ASS_VA_COMP"//"ASS_VA_COMPS" endLabel.tlCompletionBronze = "ASS_VA_COMP"//"ASS_VA_COMPB" endLabel.tlCompletionNoMedal = "ASS_VA_COMP"//"ASS_VA_COMPN" ENDPROC //set bPanicking to TRUE and set fail type PROC FAIL_MISSION_FOR_CLOSE_VEHICLE() // bPanicking = TRUE failType = FT_VEHICLE bFailMissionForCloseVehicle = TRUE PRINTLN("OJASHOTEL - bFailMissionForCloseVehicle = TRUE") ENDPROC FUNC BOOL IS_PLAYER_IN_AIR_VEHICLE() MODEL_NAMES mnAirVehicle IF IS_PED_INJURED(PLAYER_PED_ID()) RETURN FALSE ENDIF IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) RETURN FALSE ENDIF IF IS_PED_IN_ANY_PLANE(PLAYER_PED_ID()) OR IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) vehPlaneVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) mnAirVehicle = GET_ENTITY_MODEL(vehPlaneVehicle) IF mnAirVehicle != BLIMP AND mnAirVehicle != blimp2 bPlayerIsInFlyingVehicle = TRUE PRINTLN("PLAYER IS IN A PLANE OR HELICOPTER") RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC MOVE_PLAYER_AND_PLANE() IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) // SET_ENTITY_COORDS(PLAYER_PED_ID(), << -1264.0720, -223.5235, 59.6540 >>) // SET_ENTITY_HEADING(PLAYER_PED_ID(), 313.420) SET_ENTITY_COORDS(PLAYER_PED_ID(), vNewBlipPosition) SET_ENTITY_HEADING(PLAYER_PED_ID(), 299.4985) PRINTLN("MOVING PLAYER TO CUTSCENE BLIP POSITION FROM MOVE_PLAYER_AND_PLANE") ENDIF IF DOES_ENTITY_EXIST(vehPlaneVehicle) IF IS_VEHICLE_DRIVEABLE(vehPlaneVehicle) SET_VEHICLE_ENGINE_ON(vehPlaneVehicle, FALSE, TRUE) SET_ENTITY_COORDS(vehPlaneVehicle, <<-1251.8732, -256.7999, 38.2695>>) SET_ENTITY_HEADING(vehPlaneVehicle, 296.7603) SET_VEHICLE_ON_GROUND_PROPERLY(vehPlaneVehicle) PRINTLN("MOVING PLANE TO POSITION IN WIDE ALLEY ON GROUND") ENDIF ENDIF ENDPROC PROC REPOSITION_PLAYER_AND_VEHICLE_FOR_GUARD_CUTSCENE() RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-1252.462769,-227.589386,39.032867>>, <<-1267.238770,-207.992447,44.673515>>, 17.000000, <<-1266.4049, -219.1991, 41.4459>>, 304.8644, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR()) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1266.1729, -214.0011, 41.4459>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 310.0126) PRINTLN("MOVING PLAYER TO CUTSCENE BLIP POSITION FROM MOVE_PLAYER_AND_PLANE") ENDIF ENDPROC //check if player is withing range of triggering cutscene FUNC BOOL IS_PLAYER_IN_RANGE_OF_HOTEL() FLOAT fDistanceToStart BOOL bTriggerdInFlyingVehicle = FALSE fDistanceToStart = GET_ENTITY_DISTANCE_FROM_LOCATION(Player, vNewBlipPosition) IF fDistanceToStart < 200 CREATE_EXTRAS() ENDIF IF IS_PLAYER_IN_AIR_VEHICLE() IF IS_ENTITY_AT_COORD(Player, vNewBlipPosition, <<25,25,90>>, TRUE) bTriggerdInFlyingVehicle = TRUE PRINTLN("bTriggerdInFlyingVehicle = TRUE") ENDIF ENDIF IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0 IF fDistanceToStart < 2 OR IS_ENTITY_AT_COORD(Player, vNewBlipPosition, <<2,2,LOCATE_SIZE_HEIGHT>>, TRUE) OR bTriggerdInFlyingVehicle IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << -1141.085, -192.660, 75.756 >>, << -1246.085, -192.660, 100.756 >>, 115, FALSE, TRUE) // If the player is in a helicopter or plane and is too close, fail IF IS_PLAYER_IN_AIR_VEHICLE() AND bTriggerdInFlyingVehicle PRINTLN("RETURNING TRUE ON IS_PLAYER_IN_RANGE_OF_HOTEL - IN AIR VEHICLE") RETURN TRUE ELSE IF NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID()) PRINTLN("RETURNING TRUE ON IS_PLAYER_IN_RANGE_OF_HOTEL") RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Release all peds PROC CLEANUP_PEDS() INT idx REPEAT NUM_BODYGUARDS idx IF DOES_ENTITY_EXIST(piBodyguard[idx]) IF NOT IS_PED_INJURED(piBodyguard[idx]) CLEANUP_AI_PED_BLIP(blipBodyguard[idx]) CLEAR_PED_TASKS(piBodyguard[idx]) SET_PED_AS_NO_LONGER_NEEDED(piBodyguard[idx]) PRINTLN("SETTING PED AS NO LONGER NEEDED - piBodyguard[", idx, "].") ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(piTarget) IF NOT IS_PED_INJURED(piTarget) CLEAR_PED_TASKS(piTarget) SET_PED_AS_NO_LONGER_NEEDED(piTarget) PRINTLN("SETTING PED AS NO LONGER NEEDED - piTarget") ENDIF ENDIF REPEAT NUM_LIMO_GUARDS idx IF DOES_ENTITY_EXIST(piLimoGuard[idx]) IF NOT IS_PED_INJURED(piLimoGuard[idx]) CLEANUP_AI_PED_BLIP(blipCombatLimoGuards[idx]) CLEAR_PED_TASKS(piLimoGuard[idx]) SET_PED_AS_NO_LONGER_NEEDED(piLimoGuard[idx]) PRINTLN("SETTING PED AS NO LONGER NEEDED - piLimoGuard") ENDIF ENDIF ENDREPEAT REPEAT NUM_ESCORT_PEDS idx IF DOES_ENTITY_EXIST(piEscortPed[idx]) IF NOT IS_PED_INJURED(piEscortPed[idx]) CLEANUP_AI_PED_BLIP(blipCombatEscort[idx]) CLEAR_PED_TASKS(piEscortPed[idx]) SET_PED_AS_NO_LONGER_NEEDED(piEscortPed[idx]) PRINTLN("SETTING PED AS NO LONGER NEEDED - piEscortPed[", idx, "].") ENDIF ENDIF ENDREPEAT SET_MODEL_AS_NO_LONGER_NEEDED(TargetModel) ENDPROC /// PURPOSE: /// Setup initial camera parameters for intro cutscene PROC CREATE_CAMERAS() camInit = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<-1244.3435, -251.5660, 50.3194>>, <<-9.2001, 0.0498, 6.3064>>, 38.000000) camDest = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<-1243.5876, -251.4826, 50.3187>>, <<-9.2001, 0.0498, 6.3064>>, 38.000000) ENDPROC /// PURPOSE: /// Cleanup all enemy ped blips PROC CLEANUP_PED_BLIPS(BOOL bIncludeTarget = TRUE) INT idx IF bIncludeTarget IF DOES_BLIP_EXIST(bTargetBlip) REMOVE_BLIP(bTargetBlip) ENDIF ENDIF REPEAT NUM_LIMO_GUARDS idx IF DOES_BLIP_EXIST(bLimoGuardBlip[idx]) REMOVE_BLIP(bLimoGuardBlip[idx]) ENDIF ENDREPEAT REPEAT NUM_ESCORT_PEDS idx IF DOES_BLIP_EXIST(bEscortBlip[idx]) REMOVE_BLIP(bEscortBlip[idx]) ENDIF ENDREPEAT REPEAT NUM_BODYGUARDS idx IF DOES_BLIP_EXIST(bEscortBlip[idx]) REMOVE_BLIP(bEscortBlip[idx]) ENDIF ENDREPEAT ENDPROC /// PURPOSE: /// cleanup all COORD blips PROC CLEANUP_DEST_BLIPS() IF DOES_BLIP_EXIST(bHotelBlip) REMOVE_BLIP(bHotelBlip) ENDIF ENDPROC /// PURPOSE: /// Release all vehicles PROC CLEANUP_VEHICLES() IF DOES_ENTITY_EXIST(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) SET_VEHICLE_DOORS_LOCKED(viTargetCar, VEHICLELOCK_UNLOCKED) ENDIF SET_VEHICLE_AS_NO_LONGER_NEEDED(viTargetCar) PRINTLN("SETTING VEHICLE AS NO LONGER NEEDED: viTargetCar") ENDIF IF DOES_ENTITY_EXIST(viEscortCar) IF NOT IS_ENTITY_DEAD(viEscortCar) IF IS_ENTITY_ON_SCREEN(viEscortCar) AND NOT IS_ENTITY_OCCLUDED(viEscortCar) AND NOT IS_SCREEN_FADED_OUT() SET_VEHICLE_AS_NO_LONGER_NEEDED(viEscortCar) PRINTLN("SETTING VEHICLE AS NO LONGER NEEDED: viEscortCar") ELSE IF DOES_ENTITY_EXIST(piEscortPed[0]) AND NOT IS_ENTITY_DEAD(piEscortPed[0]) IF NOT IS_ENTITY_DEAD(viEscortCar) IF IS_PED_IN_VEHICLE(piEscortPed[0], viEscortCar) CLEAR_PED_TASKS_IMMEDIATELY(piEscortPed[0]) PRINTLN("DETACHING PED FROM WITHIN VEHICLE - piEscortPed[0]") ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(piEscortPed[1]) AND NOT IS_ENTITY_DEAD(piEscortPed[1]) IF NOT IS_ENTITY_DEAD(viEscortCar) IF IS_PED_IN_VEHICLE(piEscortPed[1], viEscortCar) CLEAR_PED_TASKS_IMMEDIATELY(piEscortPed[1]) PRINTLN("DETACHING PED FROM WITHIN VEHICLE - piEscortPed[1]") ENDIF ENDIF ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), viEscortCar) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) PRINTLN("PLAYER IS IN THE ESCORT CAR - CLEARING PED TASKS IMMEDIATELY") ENDIF ENDIF SET_VEHICLE_AS_NO_LONGER_NEEDED(viEscortCar) PRINTLN("SETTING VEHICLE: viEscortCar as no longer needed") // DELETE_VEHICLE(viEscortCar) // PRINTLN("DELETING VEHICLE: viEscortCar") ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(viParkedCar[0]) SET_VEHICLE_AS_NO_LONGER_NEEDED(viParkedCar[0]) ENDIF IF DOES_ENTITY_EXIST(viParkedCar[1]) SET_VEHICLE_AS_NO_LONGER_NEEDED(viParkedCar[1]) ENDIF IF DOES_ENTITY_EXIST(viReplayVehicle) AND NOT IS_ENTITY_DEAD(viReplayVehicle) IF IS_ENTITY_A_MISSION_ENTITY(viReplayVehicle) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(viReplayVehicle) SET_VEHICLE_AS_NO_LONGER_NEEDED(viReplayVehicle) ENDIF ENDIF ENDPROC /// PURPOSE: /// Release all vehicle recording requests PROC CLEANUP_VEH_RECORDINGS() REMOVE_VEHICLE_RECORDING(102, "ASSOJva") REMOVE_VEHICLE_RECORDING(107, "ASSOJva") REMOVE_WAYPOINT_RECORDING("OJASva_101") REMOVE_WAYPOINT_RECORDING("OJASva_101a") REMOVE_WAYPOINT_RECORDING("OJASva_104") ENDPROC /// PURPOSE: /// define all the variables PROC INITIALIZE_VARIABLES() //important vectors used around the hotel location // vHotelStart = << -1226.4880, -185.6017, 38.1758 >> // <<-1243.275, -194.76, 39.155>> //hotel circle area vEscortCarPos = <<-1343.4927, -153.1990, 47.1825>> //location where the motorcade vehicle is spawned fEscortCarHead = 260.3612 //motorcade car heading vTargetCarPos = <<-1242.2126, -241.5975, 38.7100>> //spawn location of limo vehicle fTargetCarHeading = 96.8755 //limo car spawn heading vTargetCarLobbyPos = <<-1221.631348, -186.881943, 38.799603 >> //location where the limo parks outside of the lobby doors fTargetCarLobbyHead = 201.076294 //heading of the limo when it is parked outside the lobby doors fSightDist = 40 //distance that a guard will detect the player (if they have proper LOS) aggroArgs.fAimRange = 40 // USE FOR 3 AIR LOCK POSITIONS vAirlockPos[0] = << -1221.1538, -170.9907, 38.3253 >> //left airlock vAirlockPos[1] = << -1210.5562, -192.8820, 38.3253 >> //center airlock vAirlockPos[2] = << -1216.3691, -203.6806, 38.3253 >> //right airlock fAirlockHead[0] = 157.3177 fAirlockHead[1] = 58.3594 fAirlockHead[2] = 65.6443 // 2 AIR LOCK POSITIONS // vAirlockPos[0] = << -1210.5562, -192.8820, 38.3253 >> //center airlock // vAirlockPos[1] = << -1216.3691, -203.6806, 38.3253 >> //right airlock // // fAirlockHead[0] = 58.3594 // fAirlockHead[1] = 65.6443 //guard post positions / headings vGuardPos[0] = << -1220.3773, -169.4070, 38.3253 >> //left airlock vGuardPos[1] = << -1208.9630, -193.8791, 38.3253 >> //center airlock vGuardPos[2] = << -1214.9547, -205.0824, 38.3253 >> //right airlock vGuardPos[3] = << -1217.5182, -197.1300, 38.3254 >> //outside lobby doors (left) vGuardPos[4] = << -1231.8916, -194.3820, 38.1753 >> //near fountain fGuardHead[0] = 160.0748 fGuardHead[1] = 58.3365 fGuardHead[2] = 58.0214 fGuardHead[3] = 97.6664 fGuardHead[4] = 225.8689 //ped reaction time - randomize these times so that ped's don't all play their alert behavior at the same frame if they detect the player FOR i = 0 TO 4 fWarnTime[i] = GET_RANDOM_FLOAT_IN_RANGE(0, 2) ENDFOR //mission rewards fBaseReward = 7000 fBonusReward = 2000 failType = FT_FAILED bGuardPanicLinePlayed = FALSE bTargetDeadLinePlayed = FALSE bTriggerAlertMessage = FALSE bPlayerParkedCarInAlley = FALSE bPlayerTriggeredExplosionFromParkingGarage = FALSE ENDPROC PROC SETUP_MISSION_PARAMS() VECTOR vOutsideHotel = <<-1220.3440, -193.4014, 38.1754>> VECTOR vParkingGarage = <<-1279.6578, -222.0533, 41.4460>> ADD_PED_FOR_DIALOGUE(hotelConv, 1, Player, "FRANKLIN") SET_WANTED_LEVEL_MULTIPLIER(0.2) ADD_RELATIONSHIP_GROUP("Guards", relGroupGuards) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_COP, relGroupGuards) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupGuards, RELGROUPHASH_COP) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupGuards, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, relGroupGuards) //clear the area around the hotel of peds // CLEAR_AREA_OF_PEDS(<<-1220.57, -185.96, 38.40>>, 200) CLEAR_AREA(<<-1220.57, -185.96, 38.40>>, 200, TRUE) SET_PED_NON_CREATION_AREA(<< -1298.6843, -324.0442, -35.5780 >>, << -1113.3724, -46.1583, 55.6090 >>) sbiHotel = ADD_SCENARIO_BLOCKING_AREA( (vOutsideHotel - << 15, 15, 15 >>), (vOutsideHotel + << 15, 15, 15 >>) ) // Removing peds sbiHotel01 = ADD_SCENARIO_BLOCKING_AREA( (vParkingGarage - << 35, 35, 45 >>), (vParkingGarage + << 35, 35, 45 >>) ) // Parking garage ENDPROC /// PURPOSE: /// do all streaming requests PROC REQUEST_STREAMS() REQUEST_MODEL(TargetCarModel) REQUEST_MODEL(EscortCarModel) // REQUEST_MODEL(GuardModel) // REQUEST_MODEL(GuardModel_01) // REQUEST_MODEL(TargetModel) REQUEST_ANIM_DICT("ODDJOBS@ASSASSINATE@GUARD") REQUEST_ANIM_DICT("oddjobs@assassinate@hotel@") REQUEST_ADDITIONAL_TEXT("ASS_VA", MINIGAME_TEXT_SLOT) //limo pulling up to the hotel REQUEST_VEHICLE_RECORDING(102, "ASSOJva") //limo driving into the hotel REQUEST_VEHICLE_RECORDING(107, "ASSOJva") //leaving the hotel REQUEST_WAYPOINT_RECORDING("OJASva_101") REQUEST_WAYPOINT_RECORDING("OJASva_101a") //motorcade pulling up to the limo REQUEST_WAYPOINT_RECORDING("OJASva_104") ENDPROC /// PURPOSE: /// Returns TRUE when all streaming requests are complete FUNC BOOL VEHICLES_RECORDINGS_AND_ANIMS_LOADED() BOOL returnBool = FALSE IF HAS_MODEL_LOADED(TargetCarModel) AND HAS_MODEL_LOADED(EscortCarModel) // AND HAS_MODEL_LOADED(GuardModel) // AND HAS_MODEL_LOADED(GuardModel_01) // AND HAS_MODEL_LOADED(TargetModel) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(102, "ASSOJva") //limo pulling up to the hotel lobby AND HAS_VEHICLE_RECORDING_BEEN_LOADED(107, "ASSOJva") //limo driving up to the hotel AND GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101") AND GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101a") AND GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_104") AND HAS_ANIM_DICT_LOADED("ODDJOBS@ASSASSINATE@GUARD") AND HAS_ANIM_DICT_LOADED("oddjobs@assassinate@hotel@") AND HAS_ADDITIONAL_TEXT_LOADED(MINIGAME_TEXT_SLOT) PRINTLN("OJASHOTEL - Streams loaded") returnBool = TRUE ELSE PRINTLN("OJASHOTEL - Loading Streams") ENDIF RETURN returnBool ENDFUNC PROC REQUEST_GUARD_MODELS() REQUEST_MODEL(GuardModel) REQUEST_MODEL(GuardModel_01) ENDPROC FUNC BOOL ARE_MODELS_LOADED_FOR_GUARDS() BOOL bLoaded REQUEST_GUARD_MODELS() IF HAS_MODEL_LOADED(GuardModel) AND HAS_MODEL_LOADED(GuardModel_01) PRINTLN("MODELS_LOADED_FOR_GUARDS") bLoaded = TRUE ELSE bLoaded = FALSE ENDIF RETURN bLoaded ENDFUNC FUNC BOOL ARE_MODELS_LOADED_FOR_TARGET() BOOL bLoaded REQUEST_MODEL(TargetModel) IF HAS_MODEL_LOADED(TargetModel) PRINTLN("MODELS_LOADED_FOR_TARGET") bLoaded = TRUE ELSE bLoaded = FALSE ENDIF RETURN bLoaded ENDFUNC PROC UNLOAD_GUARD_MODELS() SET_MODEL_AS_NO_LONGER_NEEDED(GuardModel) SET_MODEL_AS_NO_LONGER_NEEDED(GuardModel_01) ENDPROC PROC UNLOAD_TARGET_MODEL() SET_MODEL_AS_NO_LONGER_NEEDED(TargetModel) ENDPROC /// PURPOSE: /// Setup ped attributes for ped PROC SET_PED_PARAMS(PED_INDEX ped, BOOL bAggressive = TRUE) IF ped <> piTarget GIVE_WEAPON_TO_PED(ped, WEAPONTYPE_PISTOL, INFINITE_AMMO) ENDIF IF NOT bAggressive SET_PED_COMBAT_MOVEMENT(ped, CM_DEFENSIVE) SET_PED_COMBAT_ATTRIBUTES(ped, CA_USE_COVER, TRUE) ELSE SET_PED_COMBAT_MOVEMENT(ped, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(ped, CA_AGGRESSIVE, TRUE) ENDIF SET_PED_ACCURACY(ped, 60) SET_PED_COMBAT_ABILITY(ped, CAL_PROFESSIONAL) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped, TRUE) SET_PED_AS_ENEMY(ped, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(ped, relGroupGuards) ENDPROC /// PURPOSE: /// Set traffic params around the htoel while the mission is running PROC SET_LOW_DENSITY_HOTEL_TRAFFIC(BOOL bSet) IF bSet SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA((<<-1237.3966, -193.9340, 39.1642>> - <<150,150,150>>), (<<-1237.3966, -193.9340, 39.1642>> + <<150,150,150>>), FALSE) // SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -1272.1578, -207.0374, -100.3460 >>, << -1317.5679, -285.4805, 100.6734 >>, TRUE) SET_ROADS_IN_AREA(<< -1349.1761, -39.0123, -100.7554 >>, << -1173.2150, -297.7677, 100.8606 >>, FALSE) PRINTLN("CALLING OFF GENERATORS") ELSE SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -1340.9053, -68.1138, -100.7554 >>, << -1176.6222, -287.8646, 100.8606 >>, TRUE) // SET_ROADS_IN_AREA(<< -1349.1761, -39.0123, -100.7554 >>, << -1173.2150, -297.7677, 100.8606 >>, TRUE) SET_ROADS_BACK_TO_ORIGINAL(<< -1349.1761, -39.0123, -100.7554 >>, << -1173.2150, -297.7677, 100.8606 >>) ENDIF ENDPROC /// PURPOSE: /// Grab a random animation string (defaults to grabbing an idle animation) PROC PLAY_RANDOM_ANIM(PED_INDEX ped, INT& iAnimToExclude) INT tempInt tempInt = SCRIPT_GET_RANDOM_INT_NOT_LAST(0, 3, iAnimToExclude) IF tempInt = 0 TASK_PLAY_ANIM(ped, "ODDJOBS@ASSASSINATE@GUARD", "unarmed_earpiece_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING, GET_RANDOM_FLOAT_IN_RANGE(), TRUE) ELIF tempInt = 1 TASK_PLAY_ANIM(ped, "ODDJOBS@ASSASSINATE@GUARD", "unarmed_earpiece_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING, GET_RANDOM_FLOAT_IN_RANGE(), TRUE) ELIF tempInt = 2 TASK_PLAY_ANIM(ped, "ODDJOBS@ASSASSINATE@GUARD", "unarmed_fold_arms", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING, GET_RANDOM_FLOAT_IN_RANGE(), TRUE) ELIF tempInt = 3 TASK_PLAY_ANIM(ped, "ODDJOBS@ASSASSINATE@GUARD", "unarmed_look", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING, GET_RANDOM_FLOAT_IN_RANGE(), TRUE) ENDIF iAnimToExclude = tempInt ENDPROC /// PURPOSE: /// Have a ped play an animation (defaults to random idle if not specified) PROC UPDATE_GUARD_ANIMS(PED_INDEX ped, INT& iAnimToExclude, BOOL idleAnim = TRUE) IF NOT IS_PED_INJURED(ped) IF idleAnim PLAY_RANDOM_ANIM(ped, iAnimToExclude) ENDIF ENDIF ENDPROC /// PURPOSE: see if the entity passed is in a location deemed "safe" by the script FUNC BOOL IS_ENTITY_IN_SAFE_LOCATION(ENTITY_INDEX entity) IF DOES_ENTITY_EXIST(entity) // IF NOT IS_ENTITY_IN_ANGLED_AREA(entity, <<-1252.143311,-212.687668,35.351608>>, <<-1216.625488,-185.542618,45.424759>>, 63.250000) IF NOT IS_ENTITY_IN_ANGLED_AREA(entity, <<-1252.301514,-213.903275,35.112217>>, <<-1205.807617,-183.068085,45.325413>>, 51.000000) AND NOT IS_ENTITY_IN_ANGLED_AREA(entity, <<-1250.809326,-192.521835,35.331249>>, <<-1231.866333,-161.365524,45.025352>>, 12.800000) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_VEHICLE_BLOCKING_THIS_AIRLOCK(INT iAirlockToCheck, FLOAT fDist) IF IS_ANY_VEHICLE_NEAR_POINT(vAirlockPos[iAirlockToCheck], fDist) PRINTLN("RETURNING TRUE ON AIRLOCK CHECK") RETURN TRUE ENDIF RETURN FALSE ENDFUNC //RETURNS TRUE if there is a vehicle blocking any of the airlock lobby door locations FUNC BOOL IS_VEHICLE_BLOCKING_ANY_AIRLOCK(FLOAT fDist) INT tempInt REPEAT NUM_AIRLOCK_SPAWN_LOCATIONS tempInt IF IS_VEHICLE_BLOCKING_THIS_AIRLOCK(tempInt, fDist) RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC //checks to see if any vehicle is inside of the hotel circle area driveway where the target pulls out FUNC BOOL IS_NON_SCRIPT_CREATED_VEHICLE_IN_HOTEL_AREA(VEHICLE_INDEX& vehToAssign) VECTOR tempVec vehToAssign = GET_CLOSEST_VEHICLE(<< -1221.954, -210.746, 38.638 >>, 27.000, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES) IF vehToAssign != NULL AND (vehToAssign != viTargetCar) AND (vehToAssign != viEscortCar) AND (vehToAssign != stExtras.vehTaxi) IF DOES_ENTITY_EXIST(vehToAssign) AND NOT IS_ENTITY_DEAD(vehToAssign) IF GET_PED_IN_VEHICLE_SEAT(vehToAssign) = NULL tempVec = GET_ENTITY_COORDS(vehToAssign) PRINTLN("CLOSE VEHICLE LOCATED AT: <<", tempVec.x, ", ", tempVec.y, ", ", tempVec.z, ">>.") tempVec = tempVec RETURN TRUE ENDIF ENDIF ENDIF IF viReplayVehicle != NULL IF DOES_ENTITY_EXIST(viReplayVehicle) AND NOT IS_ENTITY_DEAD(viReplayVehicle) IF NOT IS_ENTITY_IN_SAFE_LOCATION(viReplayVehicle) tempVec = GET_ENTITY_COORDS(viReplayVehicle) PRINTLN("REPLAY VEHICLE LOCATED AT: <<", tempVec.x, ", ", tempVec.y, ", ", tempVec.z, ">>.") RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL DID_PLAYER_BLOCK_ALLEY_WITH_A_PARKED_CAR(VEHICLE_INDEX& vehToCheck, BOOL& bBoolToFlip) IF NOT DOES_ENTITY_EXIST(vehToCheck) RETURN FALSE ENDIF IF NOT DOES_ENTITY_EXIST(viEscortCar) RETURN FALSE ENDIF // IF IS_ENTITY_IN_ANGLED_AREA(vehToCheck, <<-1253.50000, -218.57869,39.329353>>, <<-1288.232178,-172.406372,46.207092>>, 8.000000, FALSE) //main alley // OR IS_ENTITY_IN_ANGLED_AREA(vehToCheck, <<-1287.918213,-173.088760,41.658070>>, <<-1316.612305,-153.279510,48.951576>>, 8.000000, FALSE) //alley extension // OR IS_ENTITY_IN_ANGLED_AREA(vehToCheck, <<-1287.918213,-173.088760,41.658070>>, <<-1316.612305,-153.279510,48.951576>>, 8.000000, FALSE) //right near the motorcade PRINTLN("PLAYER LEFT A PARKED CAR IN THE MOTORCADE ALLEY THAT IS BLOCKING THE ESCORT CAR!!") IF GET_DISTANCE_BETWEEN_ENTITIES(vehToCheck, viEscortCar) <= 5 viCarThatTriggeredAlert = vehToCheck bBoolToFlip = TRUE RETURN TRUE ENDIF // ENDIF RETURN FALSE ENDFUNC PROC GRAB_FURTHEST_VECTOR() INT idx VECTOR vPlayerPosition FLOAT fTempDistance IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) vPlayerPosition = GET_ENTITY_COORDS(PLAYER_PED_ID()) ENDIF REPEAT NUM_AIRLOCK_SPAWN_LOCATIONS idx fTempDistance = VDIST(vPlayerPosition, vAirlockPos[idx]) PRINTLN("fTempDistance = ", fTempDistance) PRINTLN("fClosestVector = ", fClosestVector) IF fTempDistance > fClosestVector fClosestVector = fTempDistance iIndexToUse = idx PRINTLN("iIndexToUse = ", idx) ENDIF ENDREPEAT vAirlockSpawnPos[0] = vAirlockPos[iIndexToUse] fAirlockSpawnHead[0] = fAirlockHead[iIndexToUse] ENDPROC FUNC BOOL IS_PLAYER_WAITING_NEAR_HOTEL_STEPS_FOR_TARGET() //uses coords from bug 1526664 - (hiding near steps and can see target spawn in) IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), << -1237.56604, -156.88245, 39.41317 >>) < 13 PRINTLN("IS_PLAYER_WAITING_NEAR_HOTEL_STEPS_FOR_TARGET() RETURNED TRUE") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PLAYER_IN_PARKING_GARAGE() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1272.181030,-241.254532,62.904064>>, <<-1300.203491,-201.396820,40.404076>>, 44.5, FALSE, FALSE) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1270.125488,-253.932114,62.904072>>, <<-1311.413818,-193.658829,38.232914>>, 44.5, FALSE, FALSE) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Locate safe airlock spawn locations based on checks to make sure the player wont be able to see the target spawn on screen PROC LOCATE_SAFE_SPAWN_LOCATIONS() INT tempInt iNumSafeLocations = 0 //initialize this REPEAT NUM_AIRLOCK_SPAWN_LOCATIONS tempInt IF NOT IS_SPHERE_VISIBLE(vAirlockPos[tempInt], 5) AND NOT IS_VEHICLE_BLOCKING_THIS_AIRLOCK(tempInt, 6.0) vAirlockSpawnPos[iNumSafeLocations] = vAirlockPos[tempInt] fAirlockSpawnHead[iNumSafeLocations] = fAirlockHead[tempInt] iNumSafeLocations++ PRINTLN("OJASHOTEL - vAirlockPos[", tempInt, "]. Is safe - SPHERE NOT VISIBLE.") ELSE PRINTLN("OJASHOTEL - vAirlockPos[", tempInt, "]. NOT safe - SPHERE IS VISIBLE or vehicle blocking airlock") ENDIF ENDREPEAT //check to make sure at least one location has been deemed as safe IF iNumSafeLocations = 0 IF IS_PLAYER_IN_PARKING_GARAGE() vAirlockSpawnPos[0] = vAirlockPos[1] fAirlockSpawnHead[0] = fAirlockHead[1] iNumSafeLocations++ PRINTLN("No safe spawn locations. Player is in parking garage - setting to 1.") ELIF IS_PLAYER_WAITING_NEAR_HOTEL_STEPS_FOR_TARGET() vAirlockSpawnPos[0] = vAirlockPos[0] fAirlockSpawnHead[0] = fAirlockHead[0] iNumSafeLocations++ PRINTLN("No safe spawn locations. Player is near the steps - setting to 0.") ELSE //just do what we always did REPEAT NUM_AIRLOCK_SPAWN_LOCATIONS tempInt IF GET_PLAYER_DISTANCE_FROM_LOCATION(vAirlockPos[tempInt]) > 30 AND NOT IS_VEHICLE_BLOCKING_THIS_AIRLOCK(tempInt, 6.0) vAirlockSpawnPos[iNumSafeLocations] = vAirlockPos[tempInt] fAirlockSpawnHead[iNumSafeLocations] = fAirlockHead[tempInt] iNumSafeLocations++ PRINTLN("OJASHOTEL - vAirlockPos[", tempInt, "]. Is safe - DISTANCE.") ENDIF ENDREPEAT ENDIF ENDIF //if for some reason we still dont have a safe one, just grab the one furthest from the player IF iNumSafeLocations = 0 GRAB_FURTHEST_VECTOR() ENDIF PRINTLN("OJASHOTEL - Number of safe spawn locations = ", iNumSafeLocations) ENDPROC /// PURPOSE: /// Create the assassination target and setup attributes PROC CREATE_TARGET() // iTargetAirlockSpawn = GET_RANDOM_INT_IN_RANGE() % 3 // // //first try using the airlock based on the player's save data // IF iTargetAirlockSpawn <> -1 AND NOT IS_SPHERE_VISIBLE(vAirlockPos[iTargetAirlockSpawn], 5) AND NOT IS_VEHICLE_BLOCKING_THIS_AIRLOCK(iTargetAirlockSpawn, 6.0) // piTarget = CREATE_PED(PEDTYPE_MISSION, TargetModel, vAirlockPos[iTargetAirlockSpawn], fAirlockHead[iTargetAirlockSpawn]) // PRINTLN("OJASHOTEL - CREATING TARGET FROM SAVEDATA AT vAirlockSpawnPos[", iTargetAirlockSpawn, "].") // ELSE // //otherwise find a new safe airlock to spawn him LOCATE_SAFE_SPAWN_LOCATIONS() iTargetAirlockSpawn = GET_RANDOM_INT_IN_RANGE(0, iNumSafeLocations) piTarget = CREATE_PED(PEDTYPE_MISSION, TargetModel, vAirlockSpawnPos[iTargetAirlockSpawn], fAirlockSpawnHead[iTargetAirlockSpawn]) PRINTLN("OJASHOTEL - CREATING TARGET SAFE SPAWN LOGIC DATA AT vAirlockSpawnPos[", iTargetAirlockSpawn, "].") // ENDIF SET_ENTITY_LOAD_COLLISION_FLAG(piTarget, TRUE) SET_PED_DEFAULT_COMPONENT_VARIATION(piTarget) SET_PED_PARAMS(piTarget) SET_MODEL_AS_NO_LONGER_NEEDED(TargetModel) //blip the target IF NOT DOES_BLIP_EXIST(bTargetBlip) bTargetBlip = CREATE_BLIP_ON_ENTITY(piTarget, FALSE) ENDIF SET_BLIP_SCALE(bTargetBlip, 1) ENDPROC /// PURPOSE: /// Create the Limo PROC CREATE_TARGET_CAR() IF NOT DOES_ENTITY_EXIST(viTargetCar) viTargetCar = CREATE_VEHICLE(TargetCarModel, vTargetCarPos, fTargetCarHeading) SET_MODEL_AS_NO_LONGER_NEEDED(TargetCarModel) SET_VEHICLE_DISABLE_TOWING(viTargetCar, TRUE) SET_ENTITY_LOAD_COLLISION_FLAG(viTargetCar, TRUE) SET_VEHICLE_PROVIDES_COVER(viTargetCar, TRUE) ENDIF ENDPROC //create peds that drive the limo PROC CREATE_LIMO_GUARDS() MODEL_NAMES mnModelToUse INT idx REPEAT NUM_LIMO_GUARDS idx IF NOT DOES_ENTITY_EXIST(piLimoGuard[idx]) IF idx = 2 mnModelToUse = GuardModel_01 PRINTLN("mnModelToUse = GuardModel_01") ELSE mnModelToUse = GuardModel PRINTLN("mnModelToUse = GuardModel") ENDIF piLimoGuard[idx] = CREATE_PED(PEDTYPE_MISSION, mnModelToUse, vGuardPos[idx], fGuardHead[idx]) IF idx = 0 SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,0), 0, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,11), 0, 0, 0) //(jbib) ELIF idx = 1 SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,3), 0, 1, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,11), 0, 2, 0) //(jbib) ELIF idx = 2 SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[idx], INT_TO_ENUM(PED_COMPONENT,11), 1, 1, 0) //(jbib) ENDIF ENDIF IF NOT IS_PED_INJURED(piLimoGuard[idx]) SET_PED_CAN_BE_TARGETTED(piLimoGuard[idx], FALSE) //so player cannot target guards through airlock doors SET_PED_KEEP_TASK(piLimoGuard[idx], TRUE) SET_PED_COMBAT_ATTRIBUTES(piLimoGuard[idx], CA_REQUIRES_LOS_TO_SHOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(piLimoGuard[idx], CA_CAN_SHOOT_WITHOUT_LOS , FALSE) SET_PED_TARGET_LOSS_RESPONSE(piLimoGuard[idx], TLR_SEARCH_FOR_TARGET) SET_PED_CONFIG_FLAG(piLimoGuard[idx], PCF_OpenDoorArmIK, TRUE) SET_PED_PARAMS(piLimoGuard[idx], TRUE) ENDIF ENDREPEAT ENDPROC //creates the limo guards that are used spefically used in the intro cutscene PROC CREATE_CUTSCENE_PEDS() IF DOES_ENTITY_EXIST(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) REPEAT NUM_LIMO_GUARDS i IF NOT DOES_ENTITY_EXIST(piLimoGuard[i]) IF i = 0 piLimoGuard[i] = CREATE_PED_INSIDE_VEHICLE(viTargetCar, PEDTYPE_MISSION, GuardModel) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,0), 0, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,11), 0, 0, 0) //(jbib) ELIF i = 1 piLimoGuard[i] = CREATE_PED_INSIDE_VEHICLE(viTargetCar, PEDTYPE_MISSION, GuardModel, VS_FRONT_RIGHT) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,3), 0, 1, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,11), 0, 2, 0) //(jbib) ELIF i = 2 piLimoGuard[i] = CREATE_PED_INSIDE_VEHICLE(viTargetCar, PEDTYPE_MISSION, GuardModel_01, VS_BACK_LEFT) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,0), 1, 2, 0) //(head) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs) SET_PED_COMPONENT_VARIATION(piLimoGuard[i], INT_TO_ENUM(PED_COMPONENT,11), 1, 1, 0) //(jbib) ENDIF ENDIF ENDREPEAT ENDIF ENDIF ENDPROC /// PURPOSE: Create the motorcade car and bike vehicles PROC CREATE_MOTORCADE_FOLLOW_CAR() IF NOT DOES_ENTITY_EXIST(viEscortCar) viEscortCar = CREATE_VEHICLE(EscortCarModel, vEscortCarPos, fEscortCarHead) SET_VEHICLE_COLOUR_COMBINATION(viEscortCar, 0) PRINTLN("CREATING ESCORT CAR") ENDIF ENDPROC /// PURPOSE: Create the motorcade peds PROC CREATE_MOTORCADE_PEDS() INT tempInt REPEAT NUM_ESCORT_PEDS tempInt IF NOT DOES_ENTITY_EXIST(piEscortPed[tempInt]) IF tempInt = 0 //driver piEscortPed[tempInt] = CREATE_PED_INSIDE_VEHICLE(viEscortCar, PEDTYPE_MISSION, GuardModel) PRINTLN("CREATING ESCORT PED 01") ELIF tempInt = 1 //passenger piEscortPed[tempInt] = CREATE_PED_INSIDE_VEHICLE(viEscortCar, PEDTYPE_MISSION, GuardModel_01, VS_FRONT_RIGHT) PRINTLN("CREATING ESCORT PED 02") ELSE SCRIPT_ASSERT("TRYING TO CREATE A MOTORCADE PED AT A VALUE HIGHER THAN ALLOWED - INCREASE NUM_ESCORT_PEDS!" ) ENDIF SET_PED_PARAMS(piEscortPed[tempInt], TRUE) SET_PED_COMBAT_ATTRIBUTES(piEscortPed[tempInt], CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(piEscortPed[tempInt], CA_REQUIRES_LOS_TO_SHOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(piEscortPed[tempInt], CA_CAN_SHOOT_WITHOUT_LOS , FALSE) SET_PED_TARGET_LOSS_RESPONSE(piEscortPed[tempInt], TLR_SEARCH_FOR_TARGET) SET_PED_KEEP_TASK(piEscortPed[tempInt], TRUE) ENDIF ENDREPEAT ENDPROC // creates the vehicle and guards that are in the motorcade follow car PROC CREATE_MOTORCADE_ACTORS_AND_VEHICLE() CREATE_MOTORCADE_FOLLOW_CAR() CREATE_MOTORCADE_PEDS() SET_MODEL_AS_NO_LONGER_NEEDED(EscortCarModel) ENDPROC PROC CREATE_BODYGUARDS() //grab airlock position that target was created and spawn the bodyguard inside that at an offset to the target VECTOR tempVec[2] VECTOR vTargetPosition FLOAT fTargetHead IF DOES_ENTITY_EXIST(piTarget) AND NOT IS_ENTITY_DEAD(piTarget) vTargetPosition = GET_ENTITY_COORDS(piTarget) PRINTLN("TARGET SPAWN POSITION = ", vTargetPosition) fTargetHead = GET_ENTITY_HEADING(piTarget) PRINTLN("TARGET SPAWN HEADING = ", fTargetHead) ELSE PRINTLN("TARGET DOES NOT EXIST!!!") ENDIF tempVec[0] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vTargetPosition, fTargetHead, <<1, -1, 0>>) PRINTLN("BODYGUARD[0] SPAWN POSITION = ", tempVec[0]) tempVec[1] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vTargetPosition, fTargetHead, <<-1, -1, 0>>) PRINTLN("BODYGUARD[1] SPAWN POSITION = ", tempVec[1]) INT idx REPEAT NUM_BODYGUARDS idx IF idx = 0 piBodyguard[idx] = CREATE_PED(PEDTYPE_MISSION, GuardModel, << tempVec[0].x, tempVec[0].y, 38.3253>>, fAirlockSpawnHead[iTargetAirlockSpawn]) ELSE piBodyguard[idx] = CREATE_PED(PEDTYPE_MISSION, GuardModel_01, << tempVec[1].x, tempVec[1].y, 38.3253>>, fAirlockSpawnHead[iTargetAirlockSpawn]) ENDIF SET_ENTITY_LOAD_COLLISION_FLAG(piBodyguard[idx], TRUE) SET_PED_DEFAULT_COMPONENT_VARIATION(piBodyguard[idx]) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[idx], CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[idx], CA_REQUIRES_LOS_TO_SHOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[idx], CA_CAN_SHOOT_WITHOUT_LOS , FALSE) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[idx], CA_AGGRESSIVE, TRUE) SET_PED_TARGET_LOSS_RESPONSE(piBodyguard[idx], TLR_SEARCH_FOR_TARGET) SET_PED_KEEP_TASK(piBodyguard[idx], TRUE) SET_PED_PARAMS(piBodyguard[idx]) SET_PED_TO_LOAD_COVER(piBodyguard[idx], TRUE) PRINTLN("CREATING BODYGUARD[", idx, "]") ENDREPEAT ENDPROC PROC REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() IF STREAMVOL_IS_VALID(svIntroCutscene) STREAMVOL_DELETE(svIntroCutscene) ENDIF ENDPROC /// PURPOSE: /// Handles the loading and unloading of the intro cutscene STREAMVOL so that we make sure it is loaded in when close to the hotel and unloads if the player dirves away PROC HANDLE_STREAMVOL_AND_GUARD_MODEL_LOADING_UNLOADING() IF NOT bLoadSceneRequested IF GET_PLAYER_DISTANCE_FROM_LOCATION(vNewBlipPosition) <= DEFAULT_CUTSCENE_LOAD_DIST REQUEST_GUARD_MODELS() svIntroCutscene = STREAMVOL_CREATE_FRUSTUM(<<-1244.3435, -251.5660, 50.3194>>, <<-9.2001, 0.0498, 6.3064>>, 80, FLAG_MAPDATA) bLoadSceneRequested = TRUE ENDIF ELSE IF GET_PLAYER_DISTANCE_FROM_LOCATION(vNewBlipPosition) > DEFAULT_CUTSCENE_UNLOAD_DIST IF STREAMVOL_IS_VALID(svIntroCutscene) STREAMVOL_DELETE(svIntroCutscene) UNLOAD_GUARD_MODELS() bLoadSceneRequested = FALSE ENDIF ELSE IF NOT STREAMVOL_IS_VALID(svIntroCutscene) IF NOT IS_PLAYER_A_TAXI_PASSENGER() bLoadSceneRequested = FALSE PRINTLN("RESETTING bLoadSceneRequested = FALSE") ENDIF ENDIF ENDIF ENDIF ENDPROC PROC HANDLE_SPECIAL_CASE_AUDIO_CUE() VEHICLE_INDEX vehTemp IF NOT bPrepareLostCue IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) IF DOES_ENTITY_EXIST(vehTemp) AND NOT IS_ENTITY_DEAD(vehTemp) IF GET_IS_VEHICLE_ENGINE_RUNNING(vehTemp) IF PREPARE_MUSIC_EVENT("ASS1_LOST") PRINTLN("PREPARING MUSIC - ASS1_LOST") bPrepareLostCue = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC PROC HANDLE_PLAYER_IN_AIRLOCK() INT idx REPEAT NUM_AIRLOCK_SPAWN_LOCATIONS idx IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_PED_INJURED(PLAYER_PED_ID()) IF GET_PLAYER_DISTANCE_FROM_LOCATION(vAirlockPos[idx]) < 5.0 SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1223.1853, -185.4723, 38.1753>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 119.5633) ENDIF ENDIF ENDREPEAT ENDPROC // Cleanup the script on termination – must not include any WAITs PROC Script_Cleanup() IF IS_TIMER_STARTED(tMissionTimer) g_savedGlobals.sAssassinData.fHotelMissionTime = GET_TIMER_IN_SECONDS(tMissionTimer) PRINTLN("CLEANUP: missionTimer = ", g_savedGlobals.sAssassinData.fHotelMissionTime) ELSE PRINTLN("CLEANUP: missionTimer WAS NOT STARTED!!!") ENDIF IF NOT bTriggeredLastCue TRIGGER_MUSIC_EVENT("ASS1_LOST") PRINTLN("TRIGGERING MUSIC - ASS1_LOST - VIA CLEANUP") ENDIF RELEASE_NAMED_SCRIPT_AUDIO_BANK("SCRIPT\\ASSASSINATION_MULTI") PRINTLN("RELEASING AUDIO BANK - SCRIPT\\ASSASSINATION_MULTI") CLEANUP_EXTRAS() CLEANUP_PEDS() CLEANUP_VEHICLES() CLEANUP_PED_BLIPS() CLEANUP_DEST_BLIPS() CLEANUP_VEH_RECORDINGS() // CLEAR_AREA(<< -1220.57, -185.96, 38.40 >>, 50, TRUE) SET_LOW_DENSITY_HOTEL_TRAFFIC(FALSE) KILL_ANY_CONVERSATION() IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0]) SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[0], TRUE, TRUE) SET_OBJECT_AS_NO_LONGER_NEEDED(g_sTriggerSceneAssets.object[0]) ENDIF REMOVE_SCENARIO_BLOCKING_AREA(sbiHotel) REMOVE_SCENARIO_BLOCKING_AREA(sbiHotel01) REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() KILL_CHASE_HINT_CAM(localChaseHintCamStruct) // SET_AUDIO_FLAG("AllowScoreAndRadio", FALSE) // PRINTLN("SETTING FLAG TO FALSE - AllowScoreAndRadio") IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) Store_Fail_Weapon(PLAYER_PED_ID(), 1) PRINTLN("ATTEMPTING TO STORE THE PLAYER'S LAST WEAPON") SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE, -1) ENDIF SET_WANTED_LEVEL_MULTIPLIER(1) CLEAR_PED_NON_CREATION_AREA() SET_PED_MODEL_IS_SUPPRESSED(GuardModel, FALSE) SET_PED_MODEL_IS_SUPPRESSED(GuardModel_01, FALSE) HANDLE_PLAYER_IN_AIRLOCK() TERMINATE_THIS_THREAD() ENDPROC // Perform any special commands if the script passes // NOTE: This can include WAITs prior to the Mission_Cleanup() call PROC Script_Passed() HANDLE_SPECIAL_CASE_AUDIO_CUE() SWITCH iEndingScreenStages CASE 0 IF NOT bResultsCreated IF killType = KT_BONUS bBonus = TRUE ASSASSIN_MISSION_MarkMissionPassedWithBonus() PRINTLN("HOTEL - PLAYER GOT BONUS") ENDIF g_savedGlobals.sAssassinData.fHotelMissionTime = GET_TIMER_IN_SECONDS(tMissionTimer) PRINTLN("GLOBAL HOTEL MISSION TIME = ", g_savedGlobals.sAssassinData.fHotelMissionTime) fTimeTaken = g_savedGlobals.sAssassinData.fHotelMissionTime PRINTLN("fTimeTaken = ", fTimeTaken) SETUP_RESULTS_UI() bResultsCreated = TRUE PRINTLN("iEndingScreenStages = 1") iEndingScreenStages = 1 ENDIF BREAK CASE 1 IF NOT bPlayMusic PLAY_MISSION_COMPLETE_AUDIO("FRANKLIN_BIG_01") bPlayMusic = TRUE ENDIF IF ENDSCREEN_PREPARE(assassinationEndScreen) AND IS_MISSION_COMPLETE_READY_FOR_UI() INIT_SIMPLE_USE_CONTEXT(cucEndScreen, FALSE, FALSE, FALSE, TRUE) ADD_SIMPLE_USE_CONTEXT_INPUT(cucEndScreen, "ASS_VA_CONT", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT) ADD_SIMPLE_USE_CONTEXT_INPUT(cucEndScreen, "ES_XPAND", FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_EXPAND) SETTIMERA(0) PRINTLN("iEndingScreenStages = 2") iEndingScreenStages = 2 ENDIF BREAK CASE 2 IF RENDER_ENDSCREEN(assassinationEndScreen, FALSE) bSkippedEndingScreen = TRUE ENDIF IF NOT bSkippedEndingScreen UPDATE_SIMPLE_USE_CONTEXT(cucEndScreen) ENDIF IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ENDSCREEN_ACCEPT) OR IS_DISABLED_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // B*2276517 - Player can now press esc to close endscreen, if player control is on during endscreen IF NOT bSkippedEndingScreen PRINTLN("bSkippedEndingScreen = TRUE") bSkippedEndingScreen = TRUE //Start anim-out ENDSCREEN_START_TRANSITION_OUT(assassinationEndScreen) ENDIF ENDIF IF bSkippedEndingScreen //Wait until the end screen stops transition-out IF RENDER_ENDSCREEN(assassinationEndScreen) ENDSCREEN_SHUTDOWN(assassinationEndScreen) ++g_savedGlobals.sAssassinData.iCurrentAssassinRank ASSASSIN_MISSION_MarkMissionPassed() ASSASSIN_MISSION_AwardAssReward(missionData) MISSION_FLOW_MISSION_PASSED() ODDJOB_AUTO_SAVE() Script_Cleanup() ENDIF ENDIF BREAK ENDSWITCH ENDPROC // Perform any special commands if the script fails PROC Script_Failed() // this is now called once the screen has faded out for the fail screen. // 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 Script_Cleanup() // must only take 1 frame and terminate the thread ENDPROC PROC ADD_PARKED_CARS_TO_GARAGE() viParkedCar[0] = CREATE_VEHICLE(EscortCarModel , << -1270.0448, -251.4953, 41.4459 >>, 214.63) viParkedCar[1] = CREATE_VEHICLE(EscortCarModel, << -1265.1992, -218.4823, 45.9981 >>, 127.85) ENDPROC /// PURPOSE: Call this before advancing stages PROC INITIALIZE_NEXT_STAGE() iStageNum = 0 ENDPROC //PURPOSE: Skip the intro cutscene and advance to the next stage cleanly PROC HANDLE_GUARD_CUTSCENE_SKIP(BOOL bDoScreenFadeIn) // //delete cutscene peds if they still exist // REPEAT NUM_LIMO_GUARDS i // IF DOES_ENTITY_EXIST(piCutsceneGuard[i]) // DELETE_PED(piCutsceneGuard[i]) // ENDIF // ENDREPEAT SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() //setup the limo properly in front of the hotel and exit out of the cutscene IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar) STOP_PLAYBACK_RECORDED_VEHICLE(viTargetCar) ENDIF REMOVE_VEHICLE_RECORDING(102, "ASSOJva") REMOVE_VEHICLE_RECORDING(107, "ASSOJva") //warp the vehicle to the proper position SET_ENTITY_COORDS(viTargetCar, vTargetCarLobbyPos) SET_ENTITY_HEADING(viTargetCar, fTargetCarLobbyHead) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_FRONT_LEFT) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_FRONT_RIGHT) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_REAR_LEFT) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_REAR_LEFT) //shut down the cutscene camera and return to gameplay cam iCutsceneStage = 0 //re-initialize this for the kill camera CLEAR_PRINTS() RENDER_SCRIPT_CAMS(FALSE, FALSE) ODDJOB_EXIT_CUTSCENE() IF bDoScreenFadeIn CUTSCENE_SKIP_FADE_IN() ENDIF ENDIF ENDPROC /// PURPOSE: Play intro cutscene explaining the mission when the player gets within range of the htoel FUNC BOOL HAS_INTRO_CUTSCENE_FINISHED() INT iTemp SWITCH iCutsceneStage CASE 0 ODDJOB_ENTER_CUTSCENE() GET_ASSASSIN_CUTSCENE_START_TIME() SHAKE_CAM(camInit, "HAND_SHAKE", 0.2) SHAKE_CAM(camDest, "HAND_SHAKE", 0.2) SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 6000, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR) RENDER_SCRIPT_CAMS(TRUE, FALSE) CLEAR_HELP() CLEAR_PRINTS() PRINT_NOW("ASS_VA_SNIPE1", DEFAULT_GOD_TEXT_TIME, 1) IF bPlayerIsInFlyingVehicle MOVE_PLAYER_AND_PLANE() SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() PRINTLN("bPlayerIsInFlyingVehicle IS TRUE, NEED TO REPOSITION THE PLAYER") ELSE REPOSITION_PLAYER_AND_VEHICLE_FOR_GUARD_CUTSCENE() PRINTLN("repositioning player and car for guard cutscene") ENDIF SETTIMERA(0) iCutsceneStage++ BREAK //close up of car pulling up and guys getting out CASE 1 IF NOT IS_ENTITY_DEAD(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF TIMERA() > 6000 //Switch back to the original recording of the car parking up. IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar) STOP_PLAYBACK_RECORDED_VEHICLE(viTargetCar) ENDIF START_PLAYBACK_RECORDED_VEHICLE(viTargetCar, 102, "ASSOJva") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(viTargetCar, 4500) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(viTargetCar) PRINT_NOW("ASS_VA_SNIPE2", DEFAULT_GOD_TEXT_TIME, 1) SET_CAM_PARAMS(camInit, <<-1218.860718,-191.049606,38.836159>>,<<3.519839,-0.000706,42.271080>>,38.000000) SET_CAM_NEAR_DOF(camInit, 0.5) SET_CAM_FAR_DOF(camInit, 7.0) SHAKE_CAM(camInit, "HAND_SHAKE", 0.2) SET_CAM_PARAMS(camDest, <<-1218.909668,-190.879135,38.845852>>,<<3.519839,-0.000706,43.338146>>,38.000000) SET_CAM_NEAR_DOF(camDest, 0.7) SET_CAM_FAR_DOF(camDest, 10.0) SHAKE_CAM(camDest, "HAND_SHAKE", 0.2) SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 2000, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) iCutsceneStage++ ENDIF ENDIF ENDIF BREAK //have guys leave limo and pause vehicle recording playback when they arrive at the lobby CASE 2 IF NOT IS_ENTITY_DEAD(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF GET_TIME_POSITION_IN_RECORDING(viTargetCar) >= 7000.0 //limo pulling up to the hotel PAUSE_PLAYBACK_RECORDED_VEHICLE(viTargetCar) //have cutscene peds exit the vehicle REPEAT NUM_LIMO_GUARDS i //delay tasking guards to exit all at once so it wont look so robotic - tell em to exit and go to center airlock IF NOT IS_ENTITY_DEAD(piLimoGuard[i]) IF i = 0 iTemp = 1250 ELIF i = 1 iTemp = 400 ELSE iTemp = 0 ENDIF IF GET_SCRIPT_TASK_STATUS(piLimoGuard[i], SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK CLEAR_SEQUENCE_TASK(seqIndex) OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL, iTemp) // TASK_GO_TO_COORD_ANY_MEANS(NULL, vAirlockPos[1], PEDMOVEBLENDRATIO_WALK, NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, vAirlockPos[i], PEDMOVEBLENDRATIO_WALK) CLOSE_SEQUENCE_TASK(seqIndex) TASK_PERFORM_SEQUENCE(piLimoGuard[i], seqIndex) CLEAR_SEQUENCE_TASK(seqIndex) ENDIF ENDIF ENDREPEAT SETTIMERA(0) iCutsceneStage ++ ENDIF ENDIF ENDIF BREAK CASE 3 IF TIMERA() >= 2000 IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON SET_CAM_PARAMS(camInit, <<-1265.5488, -213.4919, 43.0913>>, <<-0.0550, 0.0543, -50.0795>>,38.000000) SHAKE_CAM(camInit, "HAND_SHAKE", 0.2) SET_CAM_PARAMS(camDest, <<-1266.0629, -213.9220, 43.0918>>, <<-0.0550, 0.0543, -50.0795>>,38.000000) SHAKE_CAM(camDest, "HAND_SHAKE", 0.2) SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 4000, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) iTimeToCut = 4000 PRINTLN("iTimeToCut = ", iTimeToCut) ELSE SET_CAM_PARAMS(camInit, <<-1266.1925, -215.2170, 43.2442>>, <<-3.1088, 0.0498, -48.5594>>,38.000000) SHAKE_CAM(camInit, "HAND_SHAKE", 0.2) SET_CAM_PARAMS(camDest, <<-1267.5302, -215.7824, 43.1067>>, <<-9.2365, 0.0498, -48.3561>>,38.000000) SHAKE_CAM(camDest, "HAND_SHAKE", 0.2) SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 4000, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) iTimeToCut = 4000 PRINTLN("iTimeToCut = ", iTimeToCut) ENDIF SETTIMERA(0) iCutsceneStage ++ ENDIF BREAK CASE 4 IF NOT bDoFlash IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON IF TIMERA() >= iTimeToCut - 300 ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") PRINTLN("bDoFlash = TRUE") bDoFlash = TRUE ENDIF ENDIF ENDIF IF TIMERA() >= iTimeToCut IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar) STOP_PLAYBACK_RECORDED_VEHICLE(viTargetCar) ENDIF ENDIF REMOVE_VEHICLE_RECORDING(102, "ASSOJva") REMOVE_VEHICLE_RECORDING(107, "ASSOJva") SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_FRONT_RIGHT) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_FRONT_LEFT) SET_VEHICLE_DOOR_SHUT(viTargetCar, SC_DOOR_REAR_LEFT) CLEAR_HELP(TRUE) IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON RENDER_SCRIPT_CAMS(FALSE, FALSE) PRINTLN("CALLING RENDER SCRIPT CAMS - FALSE, TRUE") ELSE STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(TRUE, 0, CAM_SPLINE_SLOW_IN_SMOOTH) PRINTLN("CALLING STOP RENDERING CAMS USING CATCH UP") ENDIF ODDJOB_EXIT_CUTSCENE() RETURN TRUE ENDIF BREAK ENDSWITCH //handle cutscene skipping and make sure that the player's vehicle doesn't explode in the cutscene if entered while on fire IF HANDLE_SKIP_CUTSCENE(iCutsceneStartTime) CLEAR_HELP(TRUE) HANDLE_GUARD_CUTSCENE_SKIP(TRUE) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_BODYGUARDS_IN_VEHICLES() INT idx BOOL bInVehicles = TRUE FOR idx = 0 TO NUM_BODYGUARDS - 1 IF NOT IS_PED_INJURED(piBodyguard[idx]) IF NOT IS_PED_IN_ANY_VEHICLE(piBodyguard[idx]) bInVehicles = FALSE ENDIF ENDIF ENDFOR RETURN bInVehicles ENDFUNC /// PURPOSE: RETURN true if the target is in the limo FUNC BOOL IS_TARGET_IN_LIMO() IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF NOT IS_PED_INJURED(piTarget) IF NOT bPanicking IF IS_PED_IN_VEHICLE(piTarget, viTargetCar) AND ARE_BODYGUARDS_IN_VEHICLES() RETURN TRUE ENDIF ELSE IF IS_PED_IN_VEHICLE(piTarget, viTargetCar) RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: Tell ped to exit a vehicle if they are in one and aim at the player PROC EXIT_VEHICLE_AND_AIM_GUN_AT_PLAYER(PED_INDEX ped) SEQUENCE_INDEX tempSeq IF NOT IS_PED_INJURED(Player) AND NOT IS_PED_INJURED(ped) IF NOT IS_ENTITY_DEAD(ped) SET_PED_COMBAT_ATTRIBUTES(ped, CA_LEAVE_VEHICLES, TRUE) ENDIF CLEAR_SEQUENCE_TASK(tempSeq) OPEN_SEQUENCE_TASK(tempSeq) TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR) TASK_AIM_GUN_AT_ENTITY(NULL, Player, -1) CLOSE_SEQUENCE_TASK(tempSeq) TASK_PERFORM_SEQUENCE(ped, tempSeq) CLEAR_SEQUENCE_TASK(tempSeq) PRINTLN("Tasking ped to exit vehicle and aim gun at player!") ENDIF ENDPROC /// PURPOSE: Tell ped to exit a vehicle if they are in one and attack the player PROC EXIT_VEHICLE_AND_ATTACK_PLAYER(PED_INDEX ped) IF NOT IS_ENTITY_DEAD(Player) IF NOT IS_PED_IN_ANY_VEHICLE(Player) IF NOT IS_ENTITY_DEAD(ped) SET_PED_COMBAT_ATTRIBUTES(ped, CA_LEAVE_VEHICLES, TRUE) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR) TASK_COMBAT_PED(NULL, Player) CLOSE_SEQUENCE_TASK(seqIndex) IF NOT IS_ENTITY_DEAD(ped) TASK_PERFORM_SEQUENCE(ped, seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) PRINTLN("THE PLAYER IS NOT IN A CAR, WE SHOULD BE LEAVING!!!") ELSE IF NOT IS_PED_INJURED(ped) IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_COMBAT) <> PERFORMING_TASK CLEAR_PED_TASKS(ped) TASK_COMBAT_PED(ped, Player) PRINTLN("TASKING TO USE COMBAT - PLAYER MUST BE IN A CAR") ENDIF ENDIF ENDIF ENDIF ENDPROC FUNC BOOL IS_VEHICLE_STUCK(VEHICLE_INDEX veh, INT iStuckTimeToCheck) IF IS_VEHICLE_DRIVEABLE(veh) IF IS_VEHICLE_STUCK_TIMER_UP(veh, VEH_STUCK_ON_ROOF, iStuckTimeToCheck) OR IS_VEHICLE_STUCK_TIMER_UP(veh, VEH_STUCK_HUNG_UP, iStuckTimeToCheck) OR IS_VEHICLE_STUCK_TIMER_UP(veh, VEH_STUCK_JAMMED, iStuckTimeToCheck) OR IS_VEHICLE_STUCK_TIMER_UP(veh, VEH_STUCK_ON_SIDE, iStuckTimeToCheck ) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// limo is not driveable - guards should fight the player and target should flee FUNC BOOL CHECK_FOR_DESTROYED_LIMO() IF ( DOES_ENTITY_EXIST(viTargetCar) AND NOT IS_VEHICLE_DRIVEABLE(viTargetCar) ) OR ( DOES_ENTITY_EXIST(piLimoGuard[0]) AND IS_PED_INJURED(piLimoGuard[0]) ) //driver has been killed RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_BOTH_ESCORT_PEDS_IN_VEHICLE() IF NOT IS_PED_INJURED(piEscortPed[0]) AND NOT IS_PED_INJURED(piEscortPed[1]) IF IS_PED_IN_VEHICLE(piEscortPed[0], viEscortCar) AND IS_PED_IN_VEHICLE(piEscortPed[1], viEscortCar) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: RETURN handle the escape behavior of the peds entering the limo FUNC BOOL HAS_HOTEL_TARGET_ESCAPED(eFailType& fail) FLOAT fDistToCheck BOOL bCheckCarVisibility //check to see if the target is in the vehicle IF MainStage > STAGE_TARGET_LEAVE_LOBBY IF NOT IS_PED_INJURED(piTarget) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_PED_IN_VEHICLE(piTarget, viTargetCar) bCheckCarVisibility = TRUE ENDIF ENDIF ENDIF //alter distances to check based on whether the target is in a vehicle or not IF bTargetFleeing fDistToCheck = 100 ELSE fDistToCheck = 200 ENDIF //check to see if target escaped IF DOES_ENTITY_EXIST(piTarget) IF NOT IS_PED_INJURED(piTarget) IF GET_DISTANCE_BETWEEN_ENTITIES (Player, piTarget) >= fDistToCheck IF bCheckCarVisibility IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_ENTITY_OCCLUDED(viTargetCar) OR NOT IS_ENTITY_ON_SCREEN(viTargetCar) fail = FT_ESCAPED PRINTLN("Lost target in vehicle") RETURN TRUE ENDIF ENDIF ELSE IF IS_ENTITY_OCCLUDED(piTarget) fail = FT_ESCAPED PRINTLN("Lost target on foot") RETURN TRUE // ELSE // PRINTLN("TARGET CAN BE SEEN") ENDIF ENDIF ELSE IF DOES_BLIP_EXIST(bTargetBlip) IF GET_DISTANCE_BETWEEN_ENTITIES (Player, piTarget) >= fDistToCheck * 0.5 IF NOT IS_BLIP_FLASHING(bTargetBlip) SET_BLIP_FLASHES(bTargetBlip, TRUE) ENDIF ELSE IF IS_BLIP_FLASHING(bTargetBlip) SET_BLIP_FLASHES(bTargetBlip, FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELSE // //fail the player if they abandon the hotel area after the intro cutscene has played // IF MainStage >= STAGE_PLANT_BOMB // IF HAS_PLAYER_ABANDONED_ASSASSINATION_AREA(bWarningHelp, vHotelStart, "ASS_VA_RETURN", 175) // fail = FT_ABANDONED // RETURN TRUE // ENDIF // ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: Fail the mission if the target escapes PROC FAIL_IF_TARGET_ESCAPES() IF HAS_HOTEL_TARGET_ESCAPED(failType) SET_MISSION_FAILED(FT_ESCAPED) PRINTLN("OJASHOTEL - Target escaped") ENDIF ENDPROC /// PURPOSE: /// Checks to see if the player alerted the guards but was not seen and sets the appropriate bool if we detect that alert state should be set /// PARAMS: /// vPositionToCheck - Vector to check player's distance away from PROC DO_ALERTED_CHECK(VECTOR vPositionToCheck, FLOAT fKillDistanceAlerted = 15.0, FLOAT fKillDistanceAlertedSpecial = 70.0) BOOL bShotAlerted FLOAT fKillDistance IF NOT DOES_ENTITY_EXIST(piTarget) EXIT ENDIF IF NOT DOES_ENTITY_EXIST(viTargetCar) EXIT ENDIF IF IS_ENTITY_DEAD(viTargetCar) OR bPlayerTriggeredExplosionFromParkingGarage bPlayerUsedStickyBomb = TRUE PRINTLN("bPlayerUsedStickyBomb = TRUE") ENDIF IF DOES_ENTITY_EXIST(piTarget) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(piTarget, WEAPONTYPE_SNIPERRIFLE) OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(piTarget, WEAPONTYPE_HEAVYSNIPER) OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(piTarget, WEAPONTYPE_REMOTESNIPER) OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(piTarget, WEAPONTYPE_DLC_MARKSMANRIFLE) DEBUG_MESSAGE("BONUS AWARDED - SNIPER KILL") bPlayerUsedSniperRifle = TRUE PRINTLN("bPlayerUsedSniperRifle = TRUE") killType = KT_BONUS ENDIF ENDIF IF aggroReason = EAggro_ShotNear OR aggroReason = EAggro_HeardShot IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar) //only go to alert state if the car hasn't left yet fKillDistanceAlerted *= 2 //double the distance to check for alerted bShotAlerted = TRUE PRINTLN("bShotAlerted = TRUE") ENDIF ENDIF //set the appropriate bool if we detect that alert state should be set IF NOT bPanicking IF bPlayerUsedSniperRifle OR bPlayerUsedStickyBomb OR bShotAlerted fKillDistance = GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), vPositionToCheck) PRINTLN("fKillDistance = ", fKillDistance) IF fKillDistance > fKillDistanceAlerted bAlerted = TRUE PRINTLN("bAlerted = TRUE") IF fKillDistance > fKillDistanceAlertedSpecial bAlertedSpecial = TRUE PRINTLN("bAlertedSpecial = TRUE") ENDIF ENDIF ENDIF ELSE PRINTLN("WE PANICKED EARLY, SOMEHOW") ENDIF ENDPROC /// PURPOSE: /// Checks to see if the player alerted the guards but they do not know the player's position /// RETURNS: /// TRUE if bAlertedor bAlertedSpecial has been set FUNC BOOL SHOULD_TRIGGER_ALERT() IF bAlerted OR bAlertedSpecial RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: Check for Target Kill PROC CHECK_FOR_TARGET_KILL() // VECTOR vTempCamPos IF DOES_ENTITY_EXIST(piTarget) IF IS_PED_INJURED(piTarget) //award a bonus if the player killed via sniper rifle IF IS_ENTITY_DEAD(piTarget) bTargetDead = TRUE PRINTLN("bTargetDead = TRUE") IF DOES_BLIP_EXIST(bTargetBlip) REMOVE_BLIP(bTargetBlip) PRINTLN("REMOVING TARGETS BLIP") ENDIF //check to see how we should respond DO_ALERTED_CHECK(vTargetLastPosition) ENDIF REPLAY_RECORD_BACK_FOR_TIME(3.0) INITIALIZE_NEXT_STAGE() MainStage = STAGE_KILL_CAM PRINTLN("OJASHOTEL - MainStage = STAGE_KILL_CAM") ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks to see if bGuardPanicLinePlayed is set to FALSE and if so plays the appropriate panic line /// PARAMS: /// ped - speaker PROC PLAY_GUARD_PANIC_LINE(PED_INDEX ped) TEXT_LABEL_23 tlCurrentConvoRoot IF NOT bGuardPanicLinePlayed IF DOES_ENTITY_EXIST(ped) AND NOT IS_PED_INJURED(ped) AND GET_PLAYER_DISTANCE_FROM_ENTITY(ped) < 50 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF failType = FT_BLOWN_COVER_HIT_PARKED_CAR SETUP_PED_FOR_DIALOGUE(ped, 3, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_LIMO", CONV_PRIORITY_VERY_HIGH) PRINTLN("OJASHOTEL - PLAY_GUARD_PANIC_LINE - OJASva_LIMO") ELIF failType = FT_STICKY SETUP_PED_FOR_DIALOGUE(GET_CLOSEST_GUARD_TO_LIMO(25.0), 6, "OJAvaGUARD2") PLAY_SINGLE_LINE_FROM_CONVERSATION (hotelConv, "OJASAUD", "OJASva_CAR3", "OJASva_CAR3_1", CONV_PRIORITY_VERY_HIGH) ELSE SETUP_PED_FOR_DIALOGUE(ped, 3, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_GTFO3", CONV_PRIORITY_VERY_HIGH) PRINTLN("OJASHOTEL - PLAY_GUARD_PANIC_LINE - GTFO3") ENDIF bGuardPanicLinePlayed = TRUE ELSE tlCurrentConvoRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() IF NOT ARE_STRINGS_EQUAL(tlCurrentConvoRoot, "OJAS_FEED") KILL_ANY_CONVERSATION() ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks to see if bGuardPanicLinePlayed is set to FALSE and if so plays the appropriate panic line /// PARAMS: /// ped - speaker PROC PLAY_TARGET_DEAD_LINE(PED_INDEX ped) IF NOT bTargetDeadLinePlayed IF DOES_ENTITY_EXIST(piTarget) AND IS_PED_INJURED(piTarget) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF DOES_ENTITY_EXIST(ped) AND NOT IS_PED_INJURED(ped) AND GET_PLAYER_DISTANCE_FROM_ENTITY(ped) < 75 SETUP_PED_FOR_DIALOGUE(ped, 3, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJAS_FEED", CONV_PRIORITY_VERY_HIGH) PRINTLN("OJASHOTEL - PLAY_GUARD_PANIC_LINE - OJAS_FEED") bTargetDeadLinePlayed = TRUE ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: instantly trigger panic if these conditions are true PROC TRIGGER_PANIC_NEAR_GUARDS_IF_PREV_WARNED(PED_INDEX testPed, VECTOR vGuardDistance) IF NOT bPanicking IF NOT IS_PED_INJURED(testPed) IF IS_ENTITY_AT_ENTITY(Player, testPed, vGuardDistance) IF IS_PED_FACING_PED(testPed, Player, 160) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(testPed, Player) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(testPed, Player, Player, PEDMOVE_WALK, FALSE, -1) failType = FT_DISREGARDED_WARNINGS bPanicking = TRUE PRINTLN("OJASHOTEL - TRIGGERING PANIC - PLAYER HAS DISREGARDED PREVIOUS WARNINGS - FT_DISREGARDED_WARNINGS") // PLAY_GUARD_PANIC_LINE(testPed) ENDIF ENDIF ELSE IF NOT IS_PED_IN_ANY_VEHICLE(testPed) IF GET_SCRIPT_TASK_STATUS(testPed, SCRIPT_TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY) != PERFORMING_TASK TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(testPed, Player, Player, PEDMOVE_WALK, FALSE, -1) PRINTLN("OJASHOTEL - TRIGGER_PANIC_NEAR_GUARDS_IF_PREV_WARNED - Walk while aiming!") ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: Ped should warn the player if they are seen FUNC BOOL IS_PLAYER_SEEN_BY_HOTEL_PED(PED_INDEX testPed, FLOAT fDistToSee) IF NOT bPanicking IF NOT IS_ENTITY_IN_SAFE_LOCATION(Player) IF DOES_ENTITY_EXIST(testPed) IF NOT IS_PED_INJURED(testPed) IF GET_PLAYER_DISTANCE_FROM_ENTITY(testPed, FALSE) <= fDistToSee IF IS_PED_FACING_PED(testPed, Player, 120) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(testPed, Player/*, LOS_FLAGS_BOUNDING_BOX*/) //TODO - Ask Dave if he knows what these angled areas are (2/19/13 - MB) IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << -1251.791, -147.043, 42.679 >>, << -1197.245, -212.232, 50.679 >>, 35.000, TRUE, TRUE) AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << -1259.282, -204.172, -60.654 >>, << -1304.335, -235.719, 60.654 >>, 85.000, TRUE, TRUE) PRINTLN("TRIGGERING IS_PLAYER_SEEN_BY_HOTEL_PED 01") // PRINTLN("fDistToSee = ", fDistToSee) RETURN TRUE ELSE PRINTLN("PLAYER IS IN ANGLED AREA") ENDIF ELSE PRINTLN("LOS CHECK HAS FAILED IN CHECK 01") ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF DOES_ENTITY_EXIST(testPed) IF NOT IS_PED_INJURED(testPed) IF IS_ENTITY_AT_ENTITY(Player, testPed, << 5, 5, 1 >>) // OR IS_NON_SCRIPT_CREATED_VEHICLE_IN_HOTEL_AREA(viCarThatTriggeredAlert) AND IS_PED_ON_SPECIFIC_VEHICLE(Player, viCarThatTriggeredAlert) AND GET_PLAYER_DISTANCE_FROM_ENTITY(testPed, FALSE) <= fDistToSee IF IS_PED_FACING_PED(testPed, Player, 120) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(testPed, Player) PRINTLN("TRIGGERING IS_PLAYER_SEEN_BY_HOTEL_PED 02") RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL DID_PED_SEE_PLAYER_PLANTING_BOMB(PED_INDEX testPed) //do these checks if after the player has been warned or the guards are leaving the lobby IF bWarningLinePlayed OR MainStage >= STAGE_GUARDS_GO_TO_POSTS IF IS_PED_PLANTING_BOMB(Player) IF GET_PLAYER_DISTANCE_FROM_ENTITY(testPed) < 10 IF IS_PED_FACING_PED(testPed, Player, 90) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(testPed, Player) RETURN TRUE ENDIF ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: Event trap to see if the player is attacking the target, guards, or the target's escort FUNC BOOL HAS_PLAYER_AGGROED_HOTEL_PED(PED_INDEX testPed) VEHICLE_INDEX tempVehicle IF NOT bPanicking IF DOES_ENTITY_EXIST(testPed) IF NOT IS_PED_INJURED(testPed) IF IS_PED_IN_ANY_VEHICLE(testPed) tempVehicle = GET_VEHICLE_PED_IS_IN(testPed) ELSE tempVehicle = NULL ENDIF ENDIF IF DO_AGGRO_CHECK(testPed, tempVehicle, aggroArgs, aggroReason, FALSE, FALSE) OR IS_PED_RAGDOLL(testPed) AND GET_PLAYER_DISTANCE_FROM_ENTITY(testPed) < 1.5 RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC PROC DETACH_TOW_TRUCK_FROM_LIMO_IF_ATTACHED() VEHICLE_INDEX tempVeh //checks to see if player is trying to mess with the target car in a tow truck IF IS_PED_IN_ANY_VEHICLE(Player) tempVeh = GET_VEHICLE_PED_IS_IN(Player) IF GET_ENTITY_MODEL(tempVeh) = TOWTRUCK OR GET_ENTITY_MODEL(tempVeh) = TOWTRUCK2 bPlayerInTowTruck = TRUE ENDIF ELSE bPlayerInTowTruck = FALSE ENDIF IF bPlayerInTowTruck IF IS_VEHICLE_ATTACHED_TO_TOW_TRUCK(tempVeh, viTargetCar) DETACH_VEHICLE_FROM_TOW_TRUCK(tempVeh, viTargetCar) ENDIF ENDIF ENDPROC // Stickybomb checks on the limo while parked FUNC BOOL IS_STICKYBOMB_VISIBLE_ON_PARKED_LIMO(eFailType& failReason) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF HAS_VEHICLE_GOT_PROJECTILE_ATTACHED(PLAYER_PED_ID(), viTargetCar, WEAPONTYPE_STICKYBOMB) // checks the entire limo area above the bumper to the roof IF IS_PROJECTILE_TYPE_IN_ANGLED_AREA(<<-1223.024170,-187.307602,39.025375>>, <<-1220.311157,-186.248093,40.425377>>, 6.500000, WEAPONTYPE_STICKYBOMB) // excludes the front/rear bumpers - checks the limo area from the bottom of the limo to the roof OR IS_PROJECTILE_TYPE_IN_ANGLED_AREA(<<-1223.024170,-187.307602,38.025375>>, <<-1220.311157,-186.248093,40.425377>>, 4.500000, WEAPONTYPE_STICKYBOMB) PRINTLN("Projectile detected in obvious location on limo.") failReason = FT_STICKY RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC //FUNC BOOL IS_PLAYER_THROWING_STICKYBOMBS_AT_VEHICLE(VEHICLE_INDEX vehToCheck) // WEAPON_TYPE wtReturn // ENTITY_INDEX entFreeAim // // IF DOES_ENTITY_EXIST(vehToCheck) // IF IS_VEHICLE_DRIVEABLE(vehToCheck) // IF GET_PED_IN_VEHICLE_SEAT(vehToCheck) != NULL //make sure there are peds inside // IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wtReturn) // IF wtReturn = WEAPONTYPE_STICKYBOMB // IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehToCheck) < 40 //player throwing range // IF GET_ENTITY_PLAYER_IS_FREE_AIMING_AT(PLAYER_ID(), entFreeAim) // IF IS_ENTITY_A_VEHICLE(entFreeAim) // AND GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entFreeAim) = vehToCheck // OR GET_PED_INDEX_FROM_ENTITY_INDEX(entFreeAim) = GET_PED_IN_VEHICLE_SEAT(vehToCheck) // IF ( IS_PED_ON_FOOT(PLAYER_PED_ID()) AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_ATTACK) ) // OR ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ATTACK) ) // PRINTLN("IS_PLAYER_THROWING_STICKYBOMBS_AT_VEHICLE - RETURNED TRUE!") // RETURN TRUE // ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // ENDIF // // RETURN FALSE //ENDFUNC FUNC BOOL IS_PLAYER_ATTEMPTING_JACK_ON_LOCKED_CAR(VEHICLE_INDEX vehToCheck) IF DOES_ENTITY_EXIST(vehToCheck) IF IS_VEHICLE_DRIVEABLE(vehToCheck) IF GET_VEHICLE_DOOR_LOCK_STATUS(vehToCheck) = VEHICLELOCK_LOCKOUT_PLAYER_ONLY AND GET_VEHICLE_PED_IS_ENTERING(Player) = vehToCheck PRINTLN("PLAYER ATTEMPTING JACK ON CAR RETURNING TRUE") RETURN TRUE ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC //Set panic states for each ped group FUNC BOOL DO_ADDITIONAL_HOTEL_PANIC_CHECKS(eFailType & failReason) VEHICLE_INDEX tempVeh FLOAT fShootDistance WEAPON_TYPE wtReturn IF NOT bPanicking //check to see if the guards noticed C4 on the car IF bTriggerGuardWalk AND NOT bLeftHotel //maybe add a bool here to only check once so that it doesn't try to check this every frame? IF IS_STICKYBOMB_VISIBLE_ON_PARKED_LIMO(failType) failReason = FT_STICKY PRINTLN("IS_STICKYBOMB_VISIBLE_ON_PARKED_LIMO IS RETURNING TRUE") RETURN TRUE ENDIF ENDIF IF IS_PED_ARMED(Player, ENUM_TO_INT(WF_INCLUDE_GUN)) IF IS_PED_SHOOTING(Player) fShootDistance = GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), <<-1230.5994, -196.5408, 38.1528>>) //next to fountain PRINTLN("fShootDistance = ", fShootDistance) GET_CURRENT_PED_WEAPON(Player, wtReturn) IF fShootDistance > 15 AND (wtReturn = WEAPONTYPE_SNIPERRIFLE) OR (wtReturn = WEAPONTYPE_HEAVYSNIPER) OR (wtReturn = WEAPONTYPE_REMOTESNIPER) OR (wtReturn = WEAPONTYPE_DLC_MARKSMANRIFLE) IF DOES_ENTITY_EXIST(piTarget) bAlerted = TRUE bPlayerUsedSniperRifle = TRUE PRINTLN("SETTING bAlerted AND bPlayerUsedSniperRifle BECAUSE PLAYER IS FIRING WITH A SNIPER RIFLE") ENDIF ELSE IF fShootDistance < 50 PRINTLN("OJASHOTEL - Ped panicking because player is shooting near lobby!") RETURN TRUE ENDIF ENDIF ENDIF ENDIF IF IS_PLAYER_THROWING_STICKYBOMBS_AT_VEHICLE(viTargetCar) OR IS_PLAYER_ATTEMPTING_JACK_ON_LOCKED_CAR(viTargetCar) OR ( DOES_ENTITY_EXIST(viTargetCar) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(viTargetCar, Player) ) PRINTLN("ADDITONAL PANIC CHECKS ON LIMO RETURNED TRUE") RETURN TRUE ENDIF IF IS_PLAYER_THROWING_STICKYBOMBS_AT_VEHICLE(viEscortCar) OR ( DOES_ENTITY_EXIST(viEscortCar) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(viEscortCar, Player) ) PRINTLN("ADDITONAL PANIC CHECKS ON ESCORT CAR RETURNED TRUE") RETURN TRUE ENDIF IF DOES_ENTITY_EXIST(viTargetCar) AND NOT IS_ENTITY_DEAD(viTargetCar) IF IS_PED_IN_VEHICLE(Player, viTargetCar) SET_VEHICLE_ALARM(viTargetCar, TRUE) START_VEHICLE_ALARM(viTargetCar) PRINTLN("TRIGGERING PANIC, BECAUSE THE PLAYER IS IN THE TARGET CAR") RETURN TRUE ENDIF ENDIF //check to see if player is messing with target's vehicle IF DOES_ENTITY_EXIST(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_PED_IN_ANY_VEHICLE(Player) tempVeh = GET_VEHICLE_PED_IS_IN(Player) IF IS_ENTITY_TOUCHING_ENTITY(tempVeh, viTargetCar) OR ( bPlayerInTowTruck AND IS_VEHICLE_ATTACHED_TO_TOW_TRUCK(tempVeh, viTargetCar) ) failReason = FT_BLOWN_COVER_HIT_PARKED_CAR PRINTLN("OJASHOTEL - Ped panicking because player is touching the target's car or has attaching a tow truck to it") RETURN TRUE ENDIF ENDIF ENDIF ENDIF //stage where target is told to enter limo IF MainStage = STAGE_ENTER_LIMO IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF GET_DISTANCE_BETWEEN_ENTITIES(Player, viTargetCar) <= 15 PRINTLN("OJASHOTEL - PANIC - Player approached the limo after target has left - immedidately trigger panic") RETURN TRUE ENDIF ENDIF ENDIF //check to see if the player is throwing stickybombs inside of the hotel area after being warned by one of the limo guards //we need to run this check here to ensure that it gets hit every frame since it does a check for just pressed IF LimoGuardState[0] = LGS_WARNING_CHECK OR LimoGuardState[1] = LGS_WARNING_CHECK OR LimoGuardState[2] = LGS_WARNING_CHECK IF IS_PLAYER_THROWING_STICKYBOMBS() PRINTLN("OJASHOTEL - PANIC - PLAYER THROWING STICKYBOMBS AFTER BEING WARNED IN THE HOTEL AREA") RETURN TRUE ENDIF ENDIF //check the hotel area for an explosion and don't worry about the alert state if an explosion happens prior to the target exiting IF Mainstage < STAGE_TARGET_LEAVE_LOBBY IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vHotelCenterPos, fHotelCenterRadius) PRINTLN("OJASHOTEL - PANIC - Explosion near the hotel!!") RETURN TRUE ENDIF ELSE //otherwise if the player is inside of the parking garage and causes an explosion after the target leaves, lets set a bool to make the alerted check kick in IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vHotelCenterPos, fHotelCenterRadius) IF IS_PLAYER_IN_PARKING_GARAGE() bPlayerTriggeredExplosionFromParkingGarage = TRUE PRINTLN("bPlayerTriggeredExplosionFromParkingGarage = TRUE") ELSE //if the player isnt in the parking garage trigger straight up panic PRINTLN("OJASHOTEL - PANIC - Explosion near the hotel and player not in the garage!") RETURN TRUE ENDIF ENDIF ENDIF // //check a central vector near the fountain // IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vHotelStart, 30) // AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DIR_STEAM, vHotelStart, 45) // AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DIR_WATER_HYDRANT, vHotelStart, 45) // PRINTLN("OJASHOTEL - PANIC - Explosion near the hotel!!") // RETURN TRUE // ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: Remove an enemy's blip if he is killed PROC REMOVE_ENEMY_BLIP_IF_KILLED(PED_INDEX ped, BLIP_INDEX blip) IF DOES_ENTITY_EXIST(ped) IF IS_PED_INJURED(ped) IF DOES_BLIP_EXIST(blip) REMOVE_BLIP(blip) ENDIF ENDIF ENDIF ENDPROC FUNC VECTOR GET_RANDOM_COORDINATE() VECTOR vToReturn INT iRand iRand = GET_RANDOM_INT_IN_RANGE() % 3 SWITCH iRand CASE 0 vToReturn = <<-1270.2063, -200.3586, 40.8333>> PRINTLN("vToReturn = ", vToReturn) BREAK CASE 1 vToReturn = <<-1268.4390, -215.9683, 59.6540>> PRINTLN("vToReturn = ", vToReturn) BREAK CASE 2 vToReturn = <<-1241.5585, -239.3237, 38.7884>> PRINTLN("vToReturn = ", vToReturn) BREAK ENDSWITCH RETURN vToReturn ENDFUNC /// PURPOSE: Switch the ped's move state to run if panic is triggered while walking to the limo or if the player has been warned and is not in a safe location FUNC BOOL MAKE_PED_RUN_IF_PANICKING(PED_INDEX ped) SEQUENCE_INDEX iSeq // IF DO_AGGRO_CHECK(ped, NULL, aggroArgs, aggroReason, TRUE, FALSE) IF bPanicking OR bAlerted OR bAlertedSpecial IF NOT IS_PED_INJURED(ped) PRINTLN("SETTING PEDMOVEBLENDRATIO_RUN ON PED") IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() STOP_SCRIPTED_CONVERSATION(FALSE) PRINTLN("STOPPING CONVERSATIONS VIA MAKE_PED_RUN_IF_PANICKING") ENDIF IF NOT IS_PED_IN_ANY_VEHICLE(ped) IF NOT bTargetFleeing CLEAR_SEQUENCE_TASK(iSeq) OPEN_SEQUENCE_TASK(iSeq) TASK_PLAY_ANIM(NULL, "oddjobs@assassinate@hotel@", "alert_gunshot", NORMAL_BLEND_IN, SLOW_BLEND_OUT, 1000) TASK_SMART_FLEE_PED(NULL, Player, 200, -1) CLOSE_SEQUENCE_TASK(iSeq) IF NOT IS_ENTITY_DEAD(piTarget) TASK_PERFORM_SEQUENCE(piTarget, iSeq) PRINTLN("TASKING TARGET TO PERFORM SEQUENCE VIA MAKE_PED_RUN_IF_PANICKING") ENDIF CLEAR_SEQUENCE_TASK(iSeq) bTargetFleeing = TRUE RETURN TRUE ENDIF ELSE PRINTLN("OUR PED IS NOT IN A VEHICLE") ENDIF ENDIF ELSE // PRINTLN("OUR CHECKS ARE FAILING!!") ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PLAYER_NEAR_CAR() VECTOR vPlayerPosition, vCarPosition FLOAT fDistanceToCar IF NOT IS_PED_INJURED(PLAYER_PED_ID()) vPlayerPosition = GET_ENTITY_COORDS(PLAYER_PED_ID()) IF NOT IS_ENTITY_DEAD(viTargetCar) vCarPosition = GET_ENTITY_COORDS(viTargetCar) ENDIF fDistanceToCar = VDIST2(vPlayerPosition, vCarPosition) PRINTLN("fDistanceToCar = ", fDistanceToCar) IF fDistanceToCar <= 25 // 5m PRINTLN("RETURNING TRUE - IS_PLAYER_NEAR_CAR") RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC PLAY_SINGLE_LINE_WARNING() PED_INDEX pedSpeaker IF NOT bWarningLinePlayed IF NOT bLimoCruisingStreets IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() pedSpeaker = GET_CLOSEST_GUARD() SETUP_PED_FOR_DIALOGUE(pedSpeaker, 3, "OJAvaGUARD") IF IS_PLAYER_NEAR_CAR() CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_CAR", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING LINE TO GET AWAY FROM THE CAR") bWarningLinePlayed = TRUE ELSE PLAY_SINGLE_LINE_FROM_CONVERSATION (hotelConv, "OJASAUD", "OJASva_GTFO2", "OJASva_GTFO2_1", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING LINE TO LEAVE THE AREA") bWarningLinePlayed = TRUE ENDIF ENDIF ENDIF ENDIF ENDPROC //tell guard to exit a vehicle if in one and warn the player by aiming their gun and possibly approaching them PROC WARN_PLAYER_AND_WALK_TOWARDS(PED_INDEX& ped) SEQUENCE_INDEX iSeq IF piWalkingGuard = NULL piWalkingGuard = GET_CLOSEST_GUARD(70, FALSE) ENDIF IF NOT IS_PED_INJURED(ped) IF NOT IS_PED_IN_ANY_VEHICLE(ped) IF NOT bGuardWalkingTowardsPlayer //we only want one guard to walk towards the player IF ped = piWalkingGuard CLEAR_SEQUENCE_TASK(iSeq) OPEN_SEQUENCE_TASK(iSeq) TASK_GO_TO_ENTITY(NULL, Player, DEFAULT_TIME_BEFORE_WARP, 2.0, PEDMOVEBLENDRATIO_WALK) TASK_TURN_PED_TO_FACE_ENTITY(NULL, Player, -1) CLOSE_SEQUENCE_TASK(iSeq) TASK_PERFORM_SEQUENCE(ped, iSeq) CLEAR_SEQUENCE_TASK(iSeq) bGuardWalkingTowardsPlayer = TRUE VECTOR tempVec = GET_ENTITY_COORDS(ped) PRINTLN("bGuardWalkingTowardsPlayer = TRUE. Guard located at << ", tempVec.x, ", ", tempVec.y, ", ", tempVec.z, " >>.") ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_GO_TO_ENTITY) <> PERFORMING_TASK TASK_TURN_PED_TO_FACE_ENTITY(ped, Player, -1) PRINTLN("TASKING PED TO TURN TOWARD THE PLAYER") ELSE PRINTLN("PED IS PERFORMING WALK TO TASK") ENDIF ENDIF ELSE IF ped != piWalkingGuard IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_GO_TO_ENTITY) <> PERFORMING_TASK TASK_TURN_PED_TO_FACE_ENTITY(ped, Player, -1) PRINTLN("TASKING PED TO TURN TOWARD THE PLAYER") ELSE PRINTLN("PED IS PERFORMING WALK TO TASK") ENDIF ENDIF ENDIF ENDIF //sets them targetable SET_PED_CAN_BE_TARGETTED(ped, TRUE) //will handle playing of warning line if not already played PLAY_SINGLE_LINE_WARNING() ENDIF ENDPROC //PURPOSE: Have the motorcade ped return to his vehicle ; 0 = guy in passenger seat, 1 = guy incar PROC RETASK_MOTORCADE_PED_TO_RETURN_TO_VEHICLE(INT iEscort) VEHICLE_SEAT vsEscort //set this to true as player has been warned bWarned = TRUE PRINTLN("bWarned = TRUE 02") IF iEscort = 0 vsEscort = VS_DRIVER ELIF iEscort = 1 vsEscort = VS_FRONT_RIGHT ENDIF IF NOT IS_ENTITY_DEAD(piEscortPed[iEscort]) IF IS_VEHICLE_DRIVEABLE(viEscortCar) IF NOT IS_PED_IN_VEHICLE(piEscortPed[iEscort], viEscortCar) IF GET_SCRIPT_TASK_STATUS(piEscortPed[iEscort], SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK TASK_ENTER_VEHICLE(piEscortPed[iEscort], viEscortCar, DEFAULT_TIME_BEFORE_WARP, vsEscort) PRINTLN("TASKING PED TO ENTER VEHICLE") ENDIF ENDIF ENDIF ENDIF ENDPROC //ensures that the ped that has been tasked to advance on the player while aiming retains their task PROC RETASK_PED_TO_WALK_WHILE_AIMING_AT_PLAYER(PED_INDEX ped) IF NOT IS_PED_INJURED(ped) IF GET_PLAYER_DISTANCE_FROM_ENTITY(ped) < 5 IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY) <> PERFORMING_TASK AND GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK TASK_AIM_GUN_AT_ENTITY(ped, Player, -1) PRINTLN("OJASHOTEL - RETASK_PED_TO_WALK_WHILE_AIMING_AT_PLAYER - RETASKING PED TO STAND AND AIM!") ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY) <> PERFORMING_TASK //make sure we only have one guy doing this IF ped = piWalkingGuard TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(ped, Player, Player, PEDMOVE_WALK, FALSE, -1) ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK TASK_AIM_GUN_AT_ENTITY(ped, Player, -1) ENDIF ENDIF PRINTLN("OJASHOTEL - RETASK_PED_TO_WALK_WHILE_AIMING_AT_PLAYER - RETASKING PED TO WALK AND AIM") ENDIF ENDIF ENDIF ENDPROC PROC TASK_LIMO_GUARDS_TO_ENTER_VEHICLES() INT idx REPEAT NUM_LIMO_GUARDS idx LimoGuardState[idx] = LGS_ENTER_LIMO ENDREPEAT PRINTLN("bLimoGuardsTaskedToEnterVehicle = TRUE") bLimoGuardsTaskedToEnterVehicle = TRUE ENDPROC /// PURPOSE: /// Ensures that the vehicle's driver uses their vehicle to try and attack the player (to help fix a bug about guards not getting to the player fast enough) /// PARAMS: /// veh - vehicle to use to combat player with /// ped - driver of the vehicle /// fDistFromPlayerBeforeEnteringVeh - Threshold distance that the ped is away from the player before being told to enter the vehicle /// fDistanceFromVehSafeToEnter - distance between the ped and his vehicle to be safe to enter the vehice /// fDistToPlayerToExitVehAndAttackOnFoot - once the ped reaches the player (and the player is on foot) exit the vehicle and attack at this distance PROC UPDATE_PED_ATTACKING_IN_VEHICLE(VEHICLE_INDEX veh, PED_INDEX ped, FLOAT fDistFromPlayerBeforeEnteringVeh = 50.0, FLOAT fDistanceFromVehSafeToEnter = 50.0, FLOAT fDistToPlayerToExitVehAndAttackOnFoot = 10.0) IF NOT IS_PED_INJURED(ped) IF IS_VEHICLE_DRIVEABLE(veh) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_DISTANCE_BETWEEN_ENTITIES(ped, veh, FALSE) > fDistFromPlayerBeforeEnteringVeh AND GET_PLAYER_DISTANCE_FROM_ENTITY(ped) < fDistanceFromVehSafeToEnter IF NOT IS_PED_IN_VEHICLE(ped, veh) IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK TASK_ENTER_VEHICLE(ped, veh) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - enter vehicle") ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_VEHICLE_MISSION) != PERFORMING_TASK TASK_VEHICLE_MISSION(ped, veh, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), MISSION_ATTACK, 35.0, DRIVINGMODE_AVOIDCARS, -1, -1) ADD_VEHICLE_SUBTASK_ATTACK_PED(ped, PLAYER_PED_ID()) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - TASK_VEHICLE_MISSION") ENDIF ENDIF ELSE IF NOT IS_PED_IN_VEHICLE(ped, veh) IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_COMBAT) != PERFORMING_TASK TASK_COMBAT_PED(ped, PLAYER_PED_ID()) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - TASK_COMBAT_PED - not far enough away to try and enter vehicle") ENDIF ENDIF ENDIF ELSE IF IS_PED_IN_VEHICLE(ped, veh) IF GET_PLAYER_DISTANCE_FROM_ENTITY(ped) > fDistToPlayerToExitVehAndAttackOnFoot IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_VEHICLE_MISSION) != PERFORMING_TASK TASK_VEHICLE_MISSION_PED_TARGET(ped, veh, PLAYER_PED_ID(), MISSION_ATTACK, 35.0, DRIVINGMODE_AVOIDCARS, -1, -1) ADD_VEHICLE_SUBTASK_ATTACK_PED(ped, PLAYER_PED_ID()) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - TASK_VEHICLE_MISSION_PED_TARGET") ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_COMBAT) != PERFORMING_TASK TASK_COMBAT_PED(ped, PLAYER_PED_ID()) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - TASK_COMBAT_PED < fDistToPlayerToExitVehAndAttackOnFoot") ENDIF ENDIF ENDIF ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_COMBAT) != PERFORMING_TASK TASK_COMBAT_PED(ped, PLAYER_PED_ID()) PRINTLN("OJASHOTEL - UPDATE_PED_ATTACKING_IN_VEHICLE - TASK_COMBAT_PED") ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: Update the target state PROC UPDATE_ESCORT_STATE(INT iEscort) PED_INDEX escortPed escortPed = piEscortPed[iEscort] SWITCH EscortState[iEscort] CASE ES_WAITING IF bDriveToLimo EscortState[iEscort] = ES_DRIVE_TO_LIMO PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_DRIVE_TO_LIMO") ELIF bLeaveInLimo EscortState[iEscort] = ES_PROTECT PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_PROTECT") // ELSE // IF bPanicking // IF NOT IS_ENTITY_DEAD(escortPed) // IF GET_SCRIPT_TASK_STATUS(escortPed, SCRIPT_TASK_COMBAT) != PERFORMING_TASK // PRINTLN("OJASHOTEL - TASK LIMO GUARD TO COMBAT IN LGS_LEAVE_IN_LIMO") // TASK_COMBAT_PED(escortPed, Player) // ENDIF // ENDIF // ENDIF ENDIF BREAK CASE ES_DRIVE_TO_LIMO //play the vehicle recordings and wait IF IS_VEHICLE_DRIVEABLE(viEscortCar) IF ARE_BOTH_ESCORT_PEDS_IN_VEHICLE() IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(viEscortCar) IF GET_PED_IN_VEHICLE_SEAT(viEscortCar) = piEscortPed[iEscort] TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(piEscortPed[iEscort], viEscortCar, "OJASva_104", DF_SwerveAroundAllCars|DF_StopAtLights|DF_SteerAroundObjects|DF_SteerAroundPeds|DF_GoOffRoadWhenAvoiding|DF_DriveIntoOncomingTraffic, 0, EWAYPOINT_VEHICLES_USE_AI_SLOWDOWN, 18, 6) PRINTLN("OJASHOTEL - TASKING piEscortPed[", iEscort, "] TO DRIVE TO LIMO - using AI_SLOWDOWN") ENDIF ENDIF EscortState[iEscort] = ES_DRIVING_TO_LIMO PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_DRIVING_TO_LIMO - TASKED TO FOLLOW WAYPOINT RECORDING") ELSE PRINTLN("HERE 02") RETASK_MOTORCADE_PED_TO_RETURN_TO_VEHICLE(iEscort) ENDIF ENDIF BREAK CASE ES_DRIVING_TO_LIMO IF IS_VEHICLE_DRIVEABLE(viEscortCar) IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(viEscortCar) VECTOR vTemp FLOAT fTemp vTemp = GET_ENTITY_COORDS(viEscortCar) fTemp = GET_ENTITY_HEADING(viEscortCar) PRINTLN("VECTOR = ", vTemp) PRINTLN("HEADING = ", fTemp) bDriveToLimo = FALSE EscortState[iEscort] = ES_WAITING PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_WAITING 01") ENDIF ENDIF BREAK CASE ES_PROTECT //tell the motorcade to escort the limo IF IS_VEHICLE_DRIVEABLE(viEscortCar) IF NOT IS_ENTITY_DEAD(piEscortPed[iEscort]) IF IS_PED_IN_VEHICLE(piEscortPed[iEscort], viEscortCar) AND IS_VEHICLE_DRIVEABLE(viTargetCar) IF NOT bPanicking IF GET_PED_IN_VEHICLE_SEAT(viEscortCar) = piEscortPed[iEscort] IF GET_SCRIPT_TASK_STATUS(piEscortPed[iEscort], SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK // TASK_VEHICLE_MISSION(piEscortPed[iEscort], viEscortCar, viTargetCar, MISSION_ESCORT_REAR, 45, DRIVINGMODE_AVOIDCARS, -1, -1) TASK_VEHICLE_ESCORT(piEscortPed[iEscort], viEscortCar, viTargetCar, VEHICLE_ESCORT_REAR, 45, DRIVINGMODE_AVOIDCARS|DF_DriveIntoOncomingTraffic, 10, -1, 10) PRINTLN("TASKING - TASK_VEHICLE_MISSION ON ESCORT PED DRIVER") ENDIF ENDIF ELSE // Driver only IF GET_PED_IN_VEHICLE_SEAT(viEscortCar) = piEscortPed[iEscort] IF NOT bCombatSubtaskSet IF IS_ENTITY_DEAD(piTarget) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) TASK_COMBAT_PED(escortPed, PLAYER_PED_ID()) PRINTLN("PLAYER IS IN A VEHICLE - TASKING ESCORT DRIVER GUARD TO COMBAT") ELSE PRINTLN("PLAYER IS NOT IN A VEHICLE - SENDING ESCORT GUARD[", iEscort, "] TO PANIC") EscortState[iEscort] = ES_PANIC ENDIF ELSE // TASK_VEHICLE_MISSION(escortPed, viEscortCar, viTargetCar, MISSION_ESCORT_REAR, 45, DRIVINGMODE_AVOIDCARS, -1, -1) TASK_VEHICLE_ESCORT(piEscortPed[iEscort], viEscortCar, viTargetCar, VEHICLE_ESCORT_REAR, 45, DRIVINGMODE_AVOIDCARS|DF_DriveIntoOncomingTraffic, 10, -1, 10) ADD_VEHICLE_SUBTASK_ATTACK_PED(escortPed, PLAYER_PED_ID()) PRINTLN("TASKING ESCORT GUARD DRIVER TO VEHICLE ESCORT") bCombatSubtaskSet = TRUE ENDIF ENDIF ELSE IF NOT bTargetFleeing IF GET_SCRIPT_TASK_STATUS(piEscortPed[iEscort], SCRIPT_TASK_COMBAT) <> PERFORMING_TASK IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_ENTITY_SPEED(viEscortCar) < 5.0 EscortState[iEscort] = ES_PANIC PRINTLN("PLAYER IS NOT IN A VEHICLE - SENDING ESCORT GUARD PASSENGER TO PANIC - CAR NOT MOVING FAST") ENDIF ENDIF TASK_COMBAT_PED(escortPed, PLAYER_PED_ID()) PRINTLN("ESCORT: TARGET NOT FLEEING, TASKING ESCORT PED TO COMBAT WITH INDEX = ", iEscort) ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(piEscortPed[iEscort], SCRIPT_TASK_COMBAT) <> PERFORMING_TASK TASK_COMBAT_PED(escortPed, PLAYER_PED_ID()) // PRINTLN("ESCORT: TARGET FLEEING, TASKING TO COMBAT INDEX = ", iEscort) ENDIF ENDIF ENDIF ENDIF ELSE IF NOT bAlerted EscortState[iEscort] = ES_PANIC PRINTLN("OJASHOTEL - EscortState[", iEscort, "SENDING TO ES_PANIC VIA TARGET CAR IS NOT DRIVEABLE") ENDIF ENDIF ENDIF ENDIF BREAK CASE ES_RESPOND_TO_PLAYER IF NOT IS_TIMER_STARTED(warnTimer) RESTART_TIMER_NOW(warnTimer) PRINTLN("OJASHOTEL - ES_RESPOND_TO_PLAYER - restarting timer") ENDIF //peds in vehicles will only play the warning line and not leave their vehicle currently (just say warning line) WARN_PLAYER_AND_WALK_TOWARDS(piEscortPed[iEscort]) EscortState[iEscort] = ES_WARNING_CHECK PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_WARNING_CHECK") BREAK CASE ES_WARNING_CHECK IF NOT IS_ENTITY_IN_SAFE_LOCATION(Player) IF GET_TIMER_IN_SECONDS(warnTimer) >= 27 OR IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) IF NOT IS_PED_INJURED(escortPed) IF IS_ENTITY_AT_ENTITY(Player, escortPed, <<5,5,3>>) PRINTLN("ESCORT STATE - TRIGGERING PANIC") TRIGGER_PANIC_NEAR_GUARDS_IF_PREV_WARNED(escortPed, <<5,5,3>>) ELSE PRINTLN("HERE 03") RETASK_MOTORCADE_PED_TO_RETURN_TO_VEHICLE(iEscort) ENDIF ENDIF // ELSE // RETASK_PED_TO_WALK_WHILE_AIMING_AT_PLAYER(escortPed) ENDIF ELSE EscortState[iEscort] = ES_WAITING PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_WAITING 02") ENDIF BREAK CASE ES_ALERTED // IF NOT IS_PED_INJURED(piEscortPed[iEscort]) // VECTOR vTempPos = GET_ENTITY_COORDS(piEscortPed[iEscort]) // //sets a peds defensive area around the target // SET_PED_SPHERE_DEFENSIVE_AREA(piEscortPed[iEscort], vTempPos, 15.0) // SET_PED_COMBAT_MOVEMENT(piEscortPed[iEscort], CM_DEFENSIVE) // SET_PED_COMBAT_ATTRIBUTES(piEscortPed[iEscort], CA_USE_COVER, TRUE) // ENDIF IF bAlertedSpecial OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_LOOK_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(1000, 1500), SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) TASK_LOOK_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(2000, 2500), SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) TASK_GO_TO_ENTITY(NULL, PLAYER_PED_ID(), GET_RANDOM_INT_IN_RANGE(10000, 11000), 30, PEDMOVEBLENDRATIO_WALK) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_COORD(NULL, PLAYER_PED_ID(), GET_RANDOM_COORDINATE(), PEDMOVEBLENDRATIO_WALK, FALSE) CLOSE_SEQUENCE_TASK(seqIndex) IF NOT IS_PED_INJURED(piEscortPed[iEscort]) TASK_PERFORM_SEQUENCE(piEscortPed[iEscort], seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) ELSE OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) // TASK_SEEK_COVER_FROM_POS(NULL, vTempPos, -1) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500), TRUE) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500)) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500)) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500)) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), -1) CLOSE_SEQUENCE_TASK(seqIndex) IF NOT IS_PED_INJURED(piEscortPed[iEscort]) TASK_PERFORM_SEQUENCE(piEscortPed[iEscort], seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) ENDIF EscortState[iEscort] = ES_ALERTED2 PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_ALERTED2") BREAK CASE ES_ALERTED2 //ped has been tasked with alert tasks - wait here and retask should he lose his current task (bug 1511746 - 6/25/13 - MB) IF NOT IS_PED_INJURED(piEscortPed[iEscort]) IF GET_SCRIPT_TASK_STATUS(piEscortPed[iEscort], SCRIPT_TASK_ANY) != PERFORMING_TASK TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(piEscortPed[iEscort], Player, Player, PEDMOVE_WALK, FALSE, -1) ENDIF ENDIF BREAK //guard is panicked - handle attack response CASE ES_PANIC IF failType != FT_BLOWN_COVER_HIT_PARKED_CAR AND failType != FT_DISREGARDED_WARNINGS EXIT_VEHICLE_AND_ATTACK_PLAYER(escortPed) ELSE EXIT_VEHICLE_AND_AIM_GUN_AT_PLAYER(escortPed) ENDIF EscortState[iEscort] = ES_ATTACKING PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_ATTACKING") BREAK CASE ES_ATTACKING IF iEscort = 0 IF failType != FT_BLOWN_COVER_HIT_PARKED_CAR UPDATE_PED_ATTACKING_IN_VEHICLE(viEscortCar, escortPed) ENDIF ELSE //empty state - ped has already been tasked to combat the player ENDIF PLAY_GUARD_PANIC_LINE(escortPed) PLAY_TARGET_DEAD_LINE(escortPed) BREAK ENDSWITCH /////// ALWAYS RUN THESE PANIC/WARNING CHECKS IF NOT bPanicking IF bAlerted IF EscortState[iEscort] <> ES_ALERTED AND EscortState[iEscort] <> ES_ALERTED2 EscortState[iEscort] = ES_ALERTED PRINTLN("OJASHOTEL - EscortState[", iEscort, "] = ES_ALERTED") ENDIF ELSE IF DO_AGGRO_CHECK(escortPed, viEscortCar, aggroArgs, aggroReason, FALSE, FALSE) OR CHECK_FOR_PLAYER_RAMMING_VEHICLE(viEscortCar) // OR bPlayerTriggeredExplosionFromParkingGarage PED_INDEX tempPed = GET_CLOSEST_GUARD() IF tempPed != NULL DO_ALERTED_CHECK(GET_ENTITY_COORDS(tempPed)) ENDIF IF NOT SHOULD_TRIGGER_ALERT() bPanicking = TRUE PRINTLN("bPanicking = TRUE VIA HAS_PLAYER_AGGROED_HOTEL_PED - UPDATE_ESCORT_STATE") // IF NOT IS_PED_INJURED(escortPed) // PLAY_GUARD_PANIC_LINE(escortPed) // ENDIF PRINTLN("OJASHOTEL - PLAYER AGGROED EscortPED") ENDIF ELSE IF NOT bLeftHotel IF IS_PLAYER_SEEN_BY_HOTEL_PED(escortPed, 10) IF EscortState[iEscort] <> ES_RESPOND_TO_PLAYER AND EscortState[iEscort] <> ES_WARNING_CHECK IF NOT bWarned CLEAR_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_ShotNear) // IF NOT DOES_BLIP_EXIST(bEscortBlip[iEscort]) // IF NOT IS_PED_INJURED(escortPed) // bEscortBlip[iEscort] = CREATE_BLIP_ON_ENTITY(escortPed, FALSE) // ENDIF // ENDIF EscortState[iEscort] = ES_RESPOND_TO_PLAYER PRINTLN("OJASHOTEL - EscortState[", iEscort, " = ES_RESPOND_TO_PLAYER") ELSE IF NOT IS_ENTITY_IN_SAFE_LOCATION(Player) bPanicking = TRUE // PLAY_GUARD_PANIC_LINE(escortPed) IF NOT DOES_ENTITY_EXIST(piTarget) failType = FT_DISREGARDED_WARNINGS ENDIF EscortState[iEscort] = ES_PANIC PRINTLN("OJASHOTEL - PANIC - IS_PLAYER_SEEN_BY_HOTEL_PED IN ESCORT UPDATE. EscortState[", iEscort, "] = ES_PANIC") ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(escortPed) IF IS_PED_IN_VEHICLE(escortPed, viEscortCar) IF NOT IS_VEHICLE_DRIVEABLE(viEscortCar) OR NOT IS_VEHICLE_DRIVEABLE(viTargetCar) OR bLimoStuck // OR bLimoDestroyed OR NOT bLeftHotel IF EscortState[iEscort] < ES_PANIC EscortState[iEscort] = ES_PANIC PRINTLN("OJASHOTEL - EscortState[", iEscort, " = ES_PANIC VIA PANIC BOOL BEING SET") ENDIF ENDIF ELSE IF EscortState[iEscort] < ES_PANIC EscortState[iEscort] = ES_PANIC PRINTLN("OJASHOTEL - EscortState[", iEscort, " = ES_PANIC VIA PANIC BOOL BEING SET") ENDIF ENDIF ENDIF ENDIF //handle escort blips REMOVE_ENEMY_BLIP_IF_KILLED(escortPed, bEscortBlip[iEscort]) ENDPROC PROC UPDATE_GUARDS_AIMING(PED_INDEX testPed) SWITCH iGuardAimingState CASE 0 IF NOT IS_ENTITY_DEAD(testPed) // AND testPed = piWalkingGuard IF GET_SCRIPT_TASK_STATUS(testPed, SCRIPT_TASK_AIM_GUN_AT_ENTITY) <> PERFORMING_TASK TASK_AIM_GUN_AT_ENTITY(testPed, PLAYER_PED_ID(), -1) PRINTLN("TASKING LIMO GUY TO AIM") ENDIF SETUP_PED_FOR_DIALOGUE(testPed, 3, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_FWARN", CONV_PRIORITY_VERY_HIGH) bWarningLinePlayed = TRUE PRINTLN("bWarningLinePlayed = TRUE - VIA UPDATE_GUARDS_AIMING") iGuardAimingState = 1 // bGaveSecondWarning = TRUE // ELSE // PRINTLN("STILL PERFORMING AIMING TASK") // ENDIF ENDIF BREAK CASE 1 RETASK_PED_TO_WALK_WHILE_AIMING_AT_PLAYER(testPed) BREAK ENDSWITCH ENDPROC FUNC BOOL IS_PATH_BLOCKED() INT idx VEHICLE_INDEX vehArray[10] iNumVehiclesFound = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), vehArray) iNumVehiclesFound = iNumVehiclesFound iNumVehiclesFound = COUNT_OF(vehArray) PRINTLN("iNumVehiclesFound = ", iNumVehiclesFound) REPEAT COUNT_OF(vehArray) idx IF DOES_ENTITY_EXIST(vehArray[idx]) AND NOT IS_ENTITY_DEAD(vehArray[idx]) IF IS_ENTITY_IN_ANGLED_AREA(vehArray[idx], <<-1218.843506,-278.622986,36.819595>>, <<-1248.403320,-225.846725,43.156059>>, 8.500000) iNumVehiclesInArea++ PRINTLN("NUMBER VEHICLES IN AREA = ", iNumVehiclesInArea) ELSE PRINTLN("NEARBY VEHICLES NOT IN ANGLED AREA: INDEX = ", idx) ENDIF ENDIF ENDREPEAT IF iNumVehiclesInArea >= 1 bPathIsBlocked = TRUE PRINTLN("RETURNING TRUE - IS_PATH_BLOCKED") RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_ALL_GUARDS_DEAD_IN_LIMO() PED_INDEX tempPed IF IS_VEHICLE_DRIVEABLE(viTargetCar) tempPed = GET_PED_IN_VEHICLE_SEAT(viTargetCar, VS_DRIVER) IF tempPed = NULL OR ( tempPed != NULL AND IS_PED_INJURED(tempPed) ) tempPed = GET_PED_IN_VEHICLE_SEAT(viTargetCar, VS_FRONT_RIGHT) IF tempPed = NULL OR ( tempPed != NULL AND IS_PED_INJURED(tempPed) ) tempPed = GET_PED_IN_VEHICLE_SEAT(viTargetCar, VS_BACK_RIGHT) IF tempPed = NULL OR ( tempPed != NULL AND IS_PED_INJURED(tempPed) ) RETURN TRUE ENDIF ENDIF ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAS_TARGET_PLAYED_ALL_PANIC_LINES() SWITCH iTargetPanicLine CASE 0 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PLAY_SINGLE_LINE_FROM_CONVERSATION(hotelConv, "OJASAUD", "OJASva_PANIC", "OJASva_PANIC_1", CONV_PRIORITY_HIGH) RESTART_TIMER_NOW(tTargetSpeakTimer) iTargetPanicLine ++ ENDIF BREAK CASE 1 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND GET_TIMER_IN_SECONDS(tTargetSpeakTimer) > 7.0 PLAY_SINGLE_LINE_FROM_CONVERSATION(hotelConv, "OJASAUD", "OJASva_PANIC", "OJASva_PANIC_2", CONV_PRIORITY_HIGH) RESTART_TIMER_NOW(tTargetSpeakTimer) iTargetPanicLine ++ ENDIF BREAK CASE 2 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND GET_TIMER_IN_SECONDS(tTargetSpeakTimer) > 8.0 PLAY_SINGLE_LINE_FROM_CONVERSATION(hotelConv, "OJASAUD", "OJASva_PANIC", "OJASva_PANIC_3", CONV_PRIORITY_HIGH) RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC /// PURPOSE: State machine for the peds who drive with the target in the SUV(formerly a limo) PROC UPDATE_LIMO_GUARD_STATE(INT iLimoGuard) PED_INDEX limoPed FLOAT fCheckDist limoPed = piLimoGuard[iLimoGuard] // // Adding a flag, so if the player is given the final warning... leaves, then returns, we don't care anymore about being seen. // IF bGaveSecondWarning // IF IS_ENTITY_IN_SAFE_LOCATION(Player) // bDoNotRunPanicCheck = TRUE //// PRINTLN("bDoNotRunPanicCheck = TRUE") // ENDIF // ENDIF SWITCH LimoGuardState[iLimoGuard] //task limo peds to enter the target vehicle - ensure that one follows the target on his way //tell the guard to go to their assigned post CASE LGS_WALK_TO_POSTS IF NOT IS_PED_INJURED(limoPed) CLEAR_SEQUENCE_TASK(seqIndex) OPEN_SEQUENCE_TASK(seqIndex) TASK_GO_TO_COORD_ANY_MEANS(NULL, vGuardPos[iLimoGuard], PEDMOVE_WALK, NULL) TASK_ACHIEVE_HEADING(NULL, fGuardHead[iLimoGuard]) CLOSE_SEQUENCE_TASK(seqIndex) TASK_PERFORM_SEQUENCE(limoPed, seqIndex) CLEAR_SEQUENCE_TASK(seqIndex) LimoGuardState[iLimoGuard] = LGS_STAND_GUARD PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_STAND_GUARD") ENDIF BREAK //have guards cycle through idle animations when not currently tasked with an anim or sequence task CASE LGS_STAND_GUARD IF DOES_ENTITY_EXIST(limoPed) IF NOT IS_ENTITY_DEAD(limoPed) IF NOT bPanickedExtras // We're going to fail the player, no need to stay in animation IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_PLAY_ANIM) <> PERFORMING_TASK AND GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK IF IS_ENTITY_AT_COORD(limoPed, vGuardPos[iLimoGuard], <<3,3,3>>) UPDATE_GUARD_ANIMS(limoPed, iGuardAnim[iLimoGuard]) ELSE LimoGuardState[iLimoGuard] = LGS_WALK_TO_POSTS PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_WALK_TO_POSTS") ENDIF ENDIF ENDIF ENDIF ENDIF BREAK //handle guard reaction to spotting the player ped CASE LGS_RESPOND_TO_PLAYER // PRINTLN("INSIDE - LGS_RESPOND_TO_PLAYER !!!!!!!!!!") IF NOT IS_TIMER_STARTED(warnTimer) RESTART_TIMER_NOW(warnTimer) PRINTLN("RESTART TIMER NOW - warnTimer") WARN_PLAYER_AND_WALK_TOWARDS(limoPed) LimoGuardState[iLimoGuard] = LGS_WARNING_CHECK PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_WARNING_CHECK - Timer not started") ELSE //wait until delay time for the ped has been reached if set (we don't want all the guys snapping at once) IF GET_TIMER_IN_SECONDS(warnTimer) > fWarnTime[iLimoGuard] OR IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) WARN_PLAYER_AND_WALK_TOWARDS(limoPed) LimoGuardState[iLimoGuard] = LGS_WARNING_CHECK PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_WARNING_CHECK") ENDIF ENDIF BREAK //give player time to get away from the guard and handle the guard's reposnse based on the player's actions CASE LGS_WARNING_CHECK IF NOT IS_ENTITY_IN_SAFE_LOCATION(Player) bInPursuit = TRUE IF bTargetLeaving LimoGuardState[iLimoGuard] = LGS_ENTER_LIMO PRINTLN("SETTING STATE TO LGS_ENTER_LIMO ON GUARD: ", iLimoGuard) BREAK ELSE IF ( GET_TIMER_IN_SECONDS(warnTimer) >= 27 AND bWarningLinePlayed ) TRIGGER_PANIC_NEAR_GUARDS_IF_PREV_WARNED(limoPed, <<15,15,3>>) PRINTLN("TRIGGERING PANIC - TIME IS UP!") ELIF GET_TIMER_IN_SECONDS(warnTimer) >= 15 UPDATE_GUARDS_AIMING(limoPed) PRINTLN("UPDATE_GUARDS_AIMING - LimoGuardState[", iLimoGuard, "].") // ELSE // PRINTLN("UPDATE_GUARDS_AIMING - LimoGuardState[", iLimoGuard, "]. Doing nothing") ENDIF ENDIF ELSE bInPursuit = FALSE bWarned = TRUE PRINTLN("bWarned!!!") IF NOT bLimoGuardsTaskedToEnterVehicle LimoGuardState[iLimoGuard] = LGS_WALK_TO_POSTS PRINTLN("SENDING LIMO GUARD[", iLimoGuard, "] TO STATE - LGS_WALK_TO_POSTS") ELSE LimoGuardState[iLimoGuard] = LGS_ENTER_LIMO PRINTLN("SENDING LIMO GUARD[", iLimoGuard, "] TO STATE - LGS_ENTER_LIMO") ENDIF ENDIF BREAK CASE LGS_ENTER_LIMO //sets them targetable IF NOT IS_PED_INJURED(limoPed) SET_PED_CAN_BE_TARGETTED(limoPed, TRUE) SET_PED_RESET_FLAG(limoPed, PRF_SearchForClosestDoor, TRUE) ENDIF IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF NOT IS_PED_INJURED(limoPed) PRINTLN("OJASHOTEL - TASK_LIMO_PEDS_TO_ENTER_LIMO") IF iLimoGuard = 0 TASK_LOOK_AT_ENTITY(piLimoGuard[0], piLimoGuard[1], -1) IF NOT IS_PED_IN_VEHICLE(limoPed, viTargetCar) TASK_ENTER_VEHICLE(limoPed, viTargetCar, 30000, VS_DRIVER, PEDMOVE_WALK) PRINTLN("TASKING LIMO GUARD 0 TO ENTER VEHICLE") ENDIF ELIF iLimoGuard = 1 TASK_LOOK_AT_ENTITY(piLimoGuard[1], piLimoGuard[0], -1) IF NOT IS_PED_IN_VEHICLE(limoPed, viTargetCar) TASK_ENTER_VEHICLE(limoPed, viTargetCar, 30000, VS_FRONT_RIGHT, PEDMOVE_WALK) PRINTLN("TASKING LIMO GUARD 1 TO ENTER VEHICLE") ENDIF ELIF iLimoGuard = 2 IF IS_VEHICLE_DRIVEABLE(viEscortCar) IF NOT IS_PED_IN_VEHICLE(limoPed, viEscortCar) TASK_ENTER_VEHICLE(limoPed, viEscortCar, 30000, VS_BACK_LEFT, PEDMOVE_WALK) PRINTLN("TASKING LIMO GUARD 2 TO ENTER VEHICLE") ENDIF ENDIF ENDIF ENDIF LimoGuardState[iLimoGuard] = LGS_LEAVE_IN_LIMO PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_LEAVE_IN_LIMO") ELSE LimoGuardState[iLimoGuard] = LGS_PANIC PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_PANIC - from LGS_ENTER_LIMO") ENDIF BREAK //change peds walk speed to run if panicking CASE LGS_LEAVE_IN_LIMO //sets them targetable IF NOT IS_PED_INJURED(limoPed) SET_PED_RESET_FLAG(limoPed, PRF_SearchForClosestDoor, TRUE) ENDIF IF NOT IS_ENTITY_DEAD(limoPed) IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_LOOK_AT_ENTITY) != PERFORMING_TASK IF iLimoGuard = 0 TASK_LOOK_AT_ENTITY(piLimoGuard[iLimoGuard], piLimoGuard[1], -1, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) ELIF iLimoGuard = 1 TASK_LOOK_AT_ENTITY(piLimoGuard[iLimoGuard], piLimoGuard[0], -1, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) ENDIF ENDIF ENDIF IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF NOT IS_TARGET_IN_LIMO() IF bPanicking IF NOT IS_PED_INJURED(limoPed) IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_COMBAT) != PERFORMING_TASK IF IS_ENTITY_ALIVE(piLimoGuard[0]) // url:bugstar:2344952 TASK_CLEAR_LOOK_AT(piLimoGuard[0]) ENDIF IF IS_ENTITY_ALIVE(piLimoGuard[1]) // url:bugstar:2344952 TASK_CLEAR_LOOK_AT(piLimoGuard[1]) ENDIF PRINTLN("OJASHOTEL - TASK LIMO GUARD TO COMBAT IN LGS_LEAVE_IN_LIMO") TASK_COMBAT_PED(limoPed, Player) ENDIF ENDIF ENDIF ELSE LimoGuardState[iLimoGuard] = LGS_DRIVE_TO_END PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_DRIVE_TO_END 01") ENDIF ELSE LimoGuardState[iLimoGuard] = LGS_PANIC PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_PANIC! - from LGS_LEAVE_IN_LIMO") ENDIF IF bTargetDead IF LimoGuardState[iLimoGuard] <> LGS_PANIC AND LimoGuardState[iLimoGuard] <> LGS_ATTACKING LimoGuardState[iLimoGuard] = LGS_PANIC PRINTLN("TARGET IS DEAD SENDING TO PANIC STATE: ", iLimoGuard) ENDIF ENDIF BREAK //task the limo driver to exit the hotel area based on whether panic has been triggered or not CASE LGS_DRIVE_TO_END IF NOT bPanicking IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF GET_PED_IN_VEHICLE_SEAT(viTargetCar) = limoPed IF NOT IS_PED_INJURED(limoPed) SET_VEHICLE_ENGINE_ON(viTargetCar, TRUE, TRUE) IF IS_PATH_BLOCKED() TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(limoPed, viTargetCar, "OJASva_101a", DF_SwerveAroundAllCars|DF_StopAtLights|DF_SteerAroundObjects|DF_StopForCars|DF_SteerAroundPeds, 0, EWAYPOINT_VEHICLES_USE_AI_SLOWDOWN, -1, 10) PRINTLN("OJASHOTEL - Tasking driver to drive to end position - path blocked") ELSE TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING(limoPed, viTargetCar, "OJASva_101", DF_SwerveAroundAllCars|DF_StopAtLights|DF_SteerAroundObjects|DF_StopForCars|DF_SteerAroundPeds) PRINTLN("OJASHOTEL - Tasking driver to drive to end position") ENDIF ENDIF ENDIF LimoGuardState[iLimoGuard] = LGS_DRIVING PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_DRIVING") ENDIF ELSE IF IS_ENTITY_ALIVE(piLimoGuard[0]) // url:bugstar:2344952 TASK_CLEAR_LOOK_AT(piLimoGuard[0]) ENDIF IF IS_ENTITY_ALIVE(piLimoGuard[1]) // url:bugstar:2344952 TASK_CLEAR_LOOK_AT(piLimoGuard[1]) ENDIF LimoGuardState[iLimoGuard] = LGS_DRIVING PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_DRIVE_TO_END 02") ENDIF BREAK //peds have been tasked to drive the streets - monitor for panic and handle response accordingly CASE LGS_DRIVING IF bPanicking IF IS_VEHICLE_DRIVEABLE(viTargetCar) AND GET_PED_IN_VEHICLE_SEAT(viTargetCar) = limoPed AND GET_PED_IN_VEHICLE_SEAT(viTargetCar, VS_BACK_LEFT) = piTarget IF NOT IS_PED_INJURED(limoPed) IF bLimoCruisingStreets OR (bPathIsBlocked AND NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar)) CLEAR_PED_TASKS(limoPed) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_VEHICLE_MISSION) != PERFORMING_TASK TASK_VEHICLE_MISSION(limoPed, viTargetCar, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), MISSION_FLEE, 35.0, DRIVINGMODE_AVOIDCARS, -1, -1) ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_VEHICLE_MISSION) != PERFORMING_TASK TASK_VEHICLE_MISSION_PED_TARGET(limoPed, viTargetCar, PLAYER_PED_ID(), MISSION_FLEE, 35.0, DRIVINGMODE_AVOIDCARS, -1, -1) ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(limoPed) IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_COMBAT) != PERFORMING_TASK TASK_COMBAT_PED(limoPed, Player) PRINTLN("LIMO: TARGET FLEEING, TASKING iLimoGuard TO COMBAT with index = ", iLimoGuard) ENDIF ENDIF ENDIF ELSE IF bLimoCruisingStreets OR (bPathIsBlocked AND NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_VEHICLE(viTargetCar)) IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF GET_PED_IN_VEHICLE_SEAT(viTargetCar) = limoPed IF NOT IS_ENTITY_DEAD(limoPed) IF GET_SCRIPT_TASK_STATUS(limoPed, SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK TASK_VEHICLE_MISSION_COORS_TARGET(limoPed, viTargetCar, vTargetCarLobbyPos, MISSION_FLEE, 25.0, DRIVINGMODE_STOPFORCARS, -1, -1) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE LGS_ALERTED IF bAlertedSpecial OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_LOOK_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(1000, 1500), SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) // TASK_LOOK_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(2000, 2500), SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) TASK_GO_TO_ENTITY(NULL, PLAYER_PED_ID(), GET_RANDOM_INT_IN_RANGE(15000, 16000), 30, PEDMOVEBLENDRATIO_WALK) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_COORD(NULL, PLAYER_PED_ID(), GET_RANDOM_COORDINATE(), PEDMOVEBLENDRATIO_WALK, FALSE) CLOSE_SEQUENCE_TASK(seqIndex) IF NOT IS_ENTITY_DEAD(piLimoGuard[iLimoGuard]) TASK_PERFORM_SEQUENCE(piLimoGuard[iLimoGuard], seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) ELSE OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500), TRUE) // TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(3000, 3500)) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_COORD(NULL, PLAYER_PED_ID(), GET_RANDOM_COORDINATE(), PEDMOVEBLENDRATIO_WALK, FALSE) CLOSE_SEQUENCE_TASK(seqIndex) IF NOT IS_ENTITY_DEAD(piLimoGuard[iLimoGuard]) TASK_PERFORM_SEQUENCE(piLimoGuard[iLimoGuard], seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) ENDIF LimoGuardState[iLimoGuard] = LGS_ALERTED2 PRINTLN("OJASHOTEL - LimoGuardState[ ", iLimoGuard, "] = LGS_ALERTED2") BREAK CASE LGS_ALERTED2 //ped has been tasked with alert tasks - wait here and retask should he lose his current task (bug 1511746 - 6/25/13 - MB) IF NOT IS_PED_INJURED(piLimoGuard[iLimoGuard]) IF GET_SCRIPT_TASK_STATUS(piLimoGuard[iLimoGuard], SCRIPT_TASK_ANY) != PERFORMING_TASK TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(piLimoGuard[iLimoGuard], Player, Player, PEDMOVE_WALK, FALSE, -1) ENDIF ENDIF BREAK CASE LGS_PANIC IF failType = FT_BLOWN_COVER_HIT_PARKED_CAR OR failType = FT_DISREGARDED_WARNINGS EXIT_VEHICLE_AND_AIM_GUN_AT_PLAYER(limoPed) ELIF failType <> FT_STICKY EXIT_VEHICLE_AND_ATTACK_PLAYER(limoPed) LimoGuardState[iLimoGuard] = LGS_ATTACKING PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_ATTACKING") ELSE PRINTLN("FAIL TYPE DOES EQUAL STICKY") ENDIF BREAK CASE LGS_ATTACKING IF iLimoGuard = 0 UPDATE_PED_ATTACKING_IN_VEHICLE(viTargetCar, limoPed) ENDIF PLAY_GUARD_PANIC_LINE(limoPed) PLAY_TARGET_DEAD_LINE(limoPed) BREAK ENDSWITCH /////// ALWAYS RUN THESE PANIC CHECKS IF MainStage < STAGE_GUARDS_GO_TO_POSTS fCheckDist = 5 //so that they can only see in the airlock areas ELSE fCheckDist = fSightDist ENDIF IF NOT bPanicking IF bAlerted IF LimoGuardState[iLimoGuard] <> LGS_ALERTED AND LimoGuardState[iLimoGuard] <> LGS_ALERTED2 LimoGuardState[iLimoGuard] = LGS_ALERTED PRINTLN("OJASHOTEL - LimoGuardState[ ", iLimoGuard, "] = LGS_ALERTED") ENDIF ELSE IF HAS_PLAYER_AGGROED_HOTEL_PED(limoPed) // OR bPlayerTriggeredExplosionFromParkingGarage PED_INDEX tempPed = GET_CLOSEST_GUARD() IF tempPed != NULL DO_ALERTED_CHECK(GET_ENTITY_COORDS(tempPed)) ENDIF IF NOT SHOULD_TRIGGER_ALERT() bPanicking = TRUE PRINTLN("bPanicking = TRUE VIA HAS_PLAYER_AGGROED_HOTEL_PED - UPDATE_LIMO_GUARD_STATE") ENDIF //new stuff testing ELSE IF NOT bLeftHotel IF IS_PLAYER_SEEN_BY_HOTEL_PED(limoPed, fCheckDist) IF LimoGuardState[iLimoGuard] <> LGS_RESPOND_TO_PLAYER AND LimoGuardState[iLimoGuard] <> LGS_WARNING_CHECK AND NOT bTargetLeaving IF NOT bWarned CLEAR_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_ShotNear) LimoGuardState[iLimoGuard] = LGS_RESPOND_TO_PLAYER PRINTLN("OJASHOTEL - LimoGuardState[", iLimoGuard, "] = LGS_RESPOND_TO_PLAYER. ", "fDistToCheck is ", fCheckDist) ELSE IF NOT IS_ENTITY_IN_SAFE_LOCATION(Player) // AND NOT bDoNotRunPanicCheck PRINTLN("OJASHOTEL - PANIC - IS_PLAYER_SEEN_BY_HOTEL_PED - 02") bPanicking = TRUE IF NOT DOES_ENTITY_EXIST(piTarget) failType = FT_DISREGARDED_WARNINGS ENDIF PRINTLN("bPanicking = TRUE VIA IS_PLAYER_SEEN_BY_HOTEL_PED - UPDATE_LIMO_GUARD_STATE") ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ELSE // IF bLimoDestroyed // IF LimoGuardState[iLimoGuard] < LGS_PANIC // LimoGuardState[iLimoGuard] = LGS_PANIC // PRINTLN("OJASHOTEL - LimoGuardState[iLimoGuard] = LGS_PANIC!!!!!") // ENDIF // ELSE IF LimoGuardState[iLimoGuard] <> LGS_PANIC AND LimoGuardState[iLimoGuard] <> LGS_ATTACKING AND LimoGuardState[iLimoGuard] <> LGS_DRIVING LimoGuardState[iLimoGuard] = LGS_PANIC PRINTLN("GENERAL PANIC CHECK - SENDING TO LGS_PANIC: ", iLimoGuard) ENDIF // ENDIF ENDIF //blip handling REMOVE_ENEMY_BLIP_IF_KILLED(limoPed, bLimoGuardBlip[iLimoGuard]) ENDPROC /// PURPOSE: Update the target state PROC UPDATE_TARGET_STATE() SEQUENCE_INDEX iSeq IF DOES_ENTITY_EXIST(piTarget) vTargetLastPosition = GET_ENTITY_COORDS(piTarget, FALSE) ENDIF SWITCH TargetState CASE TS_ENTER_LIMO IF NOT IS_ENTITY_DEAD(piTarget) IF IS_VEHICLE_DRIVEABLE(viTargetCar) AND NOT IS_ENTITY_DEAD(piLimoGuard[0]) //limo driver IF NOT IS_PED_IN_VEHICLE(piTarget, viTargetCar) IF GET_SCRIPT_TASK_STATUS(piTarget, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK IF NOT bPanicking AND NOT bAlerted TASK_ENTER_VEHICLE(piTarget, viTargetCar, 30000, VS_BACK_LEFT, PEDMOVE_WALK) PRINTLN("piTarget ENTER VEHICLE - WALK!") ELSE TASK_ENTER_VEHICLE(piTarget, viTargetCar, 30000, VS_BACK_LEFT, PEDMOVE_RUN) PRINTLN("PANIC! - TARGET ENTERING VEHICLE!!") ENDIF IF NOT IS_TIMER_STARTED(tTargetSpeakTimer) START_TIMER_NOW(tTargetSpeakTimer) PRINTLN("STARTING TIMER - tTargetSpeakTimer") ELSE RESTART_TIMER_NOW(tTargetSpeakTimer) PRINTLN("RESTARTING TIMER - tTargetSpeakTimer") ENDIF ENDIF IF NOT bPlayedTargetLine IF IS_TIMER_STARTED(tTargetSpeakTimer) IF GET_TIMER_IN_SECONDS(tTargetSpeakTimer) > 3.5 IF NOT IS_PED_INJURED(piTarget) ADD_PED_FOR_DIALOGUE(hotelConv, 4, piTarget, "OJAva_TARGET") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_TARG", CONV_PRIORITY_HIGH) PRINTLN("PLAYING TARGET'S LINE") bPlayedTargetLine = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF MAKE_PED_RUN_IF_PANICKING(piTarget) KILL_ANY_CONVERSATION() TargetState = TS_FLEE PRINTLN("GOING TO STATE - TS_FLEE VIA TARGET PANIC CHECK - 01") ENDIF ELSE bLeftHotel = TRUE TargetState = TS_LEAVE_IN_LIMO PRINTLN("OJASHOTEL - TargetState = TS_LEAVE_IN_LIMO") ENDIF ELSE TargetState = TS_FLEE PRINTLN("OJASHOTEL - TargetState = TS_FLEE") ENDIF ENDIF BREAK CASE TS_LEAVE_IN_LIMO //stay here until the target reaches the destination - he should just be riding until then //insert panic in car anims here when we get them IF NOT bPlayedTargetLine IF NOT IS_PED_INJURED(piTarget) ADD_PED_FOR_DIALOGUE(hotelConv, 4, piTarget, "OJAva_TARGET") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_TARG", CONV_PRIORITY_HIGH) PRINTLN("PLAYING TARGET'S LINE") bPlayedTargetLine = TRUE ENDIF ENDIF ENDIF IF NOT bTargetPanicLinePlayed IF ARE_ALL_GUARDS_DEAD_IN_LIMO() IF GET_DISTANCE_BETWEEN_ENTITIES(piTarget, PLAYER_PED_ID()) <= 5 AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF GET_CLOSEST_GUARD(25.0) = NULL IF HAS_TARGET_PLAYED_ALL_PANIC_LINES() bTargetPanicLinePlayed = TRUE PRINTLN("OJASHOTEL - Played all target panic lines in car") ENDIF ENDIF ENDIF ENDIF ENDIF // IF bLimoDestroyed = TRUE // TargetState = TS_FLEE // PRINTLN("OJASHOTEL - bLimoDestroyed - TargetState = TS_FLEE") // ENDIF BREAK CASE TS_FLEE IF NOT IS_ENTITY_DEAD(piTarget) IF IS_PED_IN_VEHICLE(piTarget, viTargetCar) IF GET_SCRIPT_TASK_STATUS(piTarget, SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> PERFORMING_TASK TASK_LEAVE_ANY_VEHICLE(piTarget, 0, ECF_DONT_CLOSE_DOOR) ENDIF ELSE IF NOT bTargetFleeing SET_PED_MAX_MOVE_BLEND_RATIO(piTarget, PEDMOVEBLENDRATIO_RUN) CLEAR_SEQUENCE_TASK(iSeq) OPEN_SEQUENCE_TASK(iSeq) TASK_PLAY_ANIM(NULL, "oddjobs@assassinate@hotel@", "alert_gunshot", NORMAL_BLEND_IN, SLOW_BLEND_OUT, 1000) TASK_SMART_FLEE_PED(NULL, Player, 200, -1) CLOSE_SEQUENCE_TASK(iSeq) IF NOT IS_ENTITY_DEAD(piTarget) TASK_PERFORM_SEQUENCE(piTarget, iSeq) PRINTLN("TASKING TARGET TO PERFORM SEQUENCE") ENDIF CLEAR_SEQUENCE_TASK(iSeq) bTargetFleeing = TRUE PRINTLN("bTargetFleeing = TRUE") ELSE //safeguard to fix bug 1526704 if bTargetFleeing previously got set to true while the target was entering the vheicle IF GET_SCRIPT_TASK_STATUS(piTarget, SCRIPT_TASK_ANY) != PERFORMING_TASK TASK_SMART_FLEE_PED(piTarget, Player, 200, -1) ENDIF ENDIF ENDIF IF NOT bTargetPanicLinePlayed IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT IS_MESSAGE_BEING_DISPLAYED() CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_TARG2", CONV_PRIORITY_VERY_HIGH) bTargetPanicLinePlayed = TRUE ENDIF ENDIF ENDIF BREAK ENDSWITCH /////// ALWAYS RUN THESE PANIC CHECKS IF NOT bPanicking IF bAlerted // handle this ELSE IF HAS_PLAYER_AGGROED_HOTEL_PED(piTarget) OR bPlayerTriggeredExplosionFromParkingGarage //call this here since UPDATE_TARGET_STATE gets called every frame PED_INDEX tempPed = GET_CLOSEST_GUARD() IF tempPed != NULL DO_ALERTED_CHECK(GET_ENTITY_COORDS(tempPed)) ENDIF IF NOT SHOULD_TRIGGER_ALERT() bPanicking = TRUE PRINTLN("TARGET PANICKED!") ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: Update the target state PROC UPDATE_BODYGUARD_STATE(INT iBodyGuard) VEHICLE_INDEX bodyGuardVehicle VEHICLE_SEAT bodyGuardSeat SEQUENCE_INDEX tempSeq FLOAT fAnimTime IF NOT DOES_ENTITY_EXIST(piBodyguard[iBodyGuard]) EXIT ENDIF SWITCH BodyGuardState[iBodyGuard] CASE BS_WALK_WITH_TARGET IF NOT IS_ENTITY_DEAD(piTarget) IF NOT IS_PED_IN_ANY_VEHICLE(piTarget) IF NOT IS_PED_INJURED(piBodyguard[iBodyGuard]) IF iBodyGuard = 0 TASK_FOLLOW_TO_OFFSET_OF_ENTITY(piBodyguard[iBodyGuard], piTarget, << 1.5, 0, 0 >>, PEDMOVEBLENDRATIO_WALK) ELIF iBodyGuard = 1 IF IS_VEHICLE_DRIVEABLE(viEscortCar) OPEN_SEQUENCE_TASK(tempSeq) TASK_GO_TO_COORD_ANY_MEANS(NULL, << -1222.99207, -191.09319, 38.17538 >>, PEDMOVEBLENDRATIO_WALK, NULL) TASK_START_SCENARIO_IN_PLACE(NULL, "WORLD_HUMAN_GUARD_STAND", 0) TASK_ENTER_VEHICLE(NULL, viEscortCar, 30000, VS_BACK_RIGHT, PEDMOVE_WALK) CLOSE_SEQUENCE_TASK(tempSeq) TASK_PERFORM_SEQUENCE(piBodyguard[iBodyGuard], tempSeq) CLEAR_SEQUENCE_TASK(tempSeq) ENDIF ENDIF BodyGuardState[iBodyGuard] = BS_ENTER_VEHICLE PRINTLN("BodyGuardState[", iBodyGuard, "] = BS_ENTER_VEHICLE") ENDIF ENDIF ENDIF BREAK CASE BS_ENTER_VEHICLE IF iBodyGuard = 0 bodyGuardVehicle = viTargetCar bodyGuardSeat = VS_BACK_RIGHT ELIF iBodyGuard = 1 bodyGuardVehicle = viEscortCar bodyGuardSeat = VS_BACK_RIGHT ENDIF IF NOT IS_ENTITY_DEAD(piBodyguard[iBodyGuard]) IF IS_VEHICLE_DRIVEABLE(bodyGuardVehicle) IF NOT IS_ENTITY_DEAD(piBodyguard[iBodyGuard]) IF NOT IS_PED_IN_VEHICLE(piBodyguard[iBodyGuard], bodyGuardVehicle) IF IS_PED_IN_ANY_VEHICLE(piTarget) IF GET_SCRIPT_TASK_STATUS(piBodyguard[iBodyGuard], SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK TASK_ENTER_VEHICLE(piBodyguard[iBodyGuard], bodyGuardVehicle, 30000, bodyGuardSeat, PEDMOVE_WALK) ENDIF ENDIF ELSE BodyGuardState[iBodyGuard] = BS_RIDE_IN_VEHICLE PRINTLN("BodyGuardState[", iBodyGuard, "] = BS_RIDE_IN_VEHICLE") ENDIF ENDIF ENDIF ENDIF BREAK CASE BS_RIDE_IN_VEHICLE IF iBodyGuard = 0 bodyGuardVehicle = viTargetCar ELIF iBodyGuard = 1 bodyGuardVehicle = viEscortCar ENDIF //tell the motorcade to escort the limo IF IS_VEHICLE_DRIVEABLE(bodyGuardVehicle) IF NOT IS_ENTITY_DEAD(piBodyguard[iBodyGuard]) IF IS_PED_IN_VEHICLE(piBodyguard[iBodyGuard], bodyGuardVehicle) AND IS_VEHICLE_DRIVEABLE(viTargetCar) IF bPanicking IF NOT bTargetFleeing IF GET_SCRIPT_TASK_STATUS(piBodyguard[iBodyGuard], SCRIPT_TASK_COMBAT) <> PERFORMING_TASK IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_ENTITY_SPEED(bodyGuardVehicle) < 5.0 BodyGuardState[iBodyGuard] = BS_PANIC PRINTLN("PLAYER IS NOT IN A VEHICLE - BodyGuardState[", iBodyGuard, "] = BS_PANIC") ENDIF ENDIF TASK_COMBAT_PED(piBodyguard[iBodyGuard], PLAYER_PED_ID()) PRINTLN("BODYGUARD: TARGET NOT FLEEING, TASKING BODYGUARD TO COMBAT WITH INDEX = ", iBodyGuard) ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(piBodyguard[iBodyGuard], SCRIPT_TASK_COMBAT) <> PERFORMING_TASK TASK_COMBAT_PED(piBodyguard[iBodyGuard], PLAYER_PED_ID()) // PRINTLN("BODYGUARD: TARGET FLEEING, TASKING TO COMBAT INDEX = ", iBodyGuard) ENDIF ENDIF ENDIF ELSE IF NOT bAlerted BodyGuardState[iBodyGuard] = BS_PANIC PRINTLN("BODYGUARD: SENDING TO BS_PANIC VIA TARGET CAR IS NOT DRIVEABLE") ENDIF ENDIF ENDIF ENDIF BREAK CASE BS_ALERTED IF NOT IS_PED_INJURED(piBodyguard[iBodyGuard]) IF IS_PED_USING_ANY_SCENARIO(piBodyguard[iBodyGuard]) SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(piBodyguard[iBodyGuard]) ENDIF ENDIF IF bAlertedSpecial OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) TASK_LOOK_AT_COORD(NULL, GET_RANDOM_COORDINATE(), GET_RANDOM_INT_IN_RANGE(2000, 2500), SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) TASK_GO_TO_ENTITY(NULL, PLAYER_PED_ID(), GET_RANDOM_INT_IN_RANGE(15000, 16000), 30, PEDMOVEBLENDRATIO_WALK) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_COORD(NULL, PLAYER_PED_ID(), GET_RANDOM_COORDINATE(), PEDMOVEBLENDRATIO_WALK, FALSE) CLOSE_SEQUENCE_TASK(seqIndex) TASK_PERFORM_SEQUENCE(piBodyguard[iBodyGuard], seqIndex) CLEAR_SEQUENCE_TASK(seqIndex) ELSE IF NOT IS_PED_INJURED(piBodyguard[iBodyGuard]) //sets a peds defensive area around the target SET_PED_SPHERE_DEFENSIVE_AREA(piBodyguard[iBodyGuard], vTargetLastPosition, 15.0) SET_PED_COMBAT_MOVEMENT(piBodyguard[iBodyGuard], CM_DEFENSIVE) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[iBodyGuard], CA_USE_COVER, TRUE) SET_PED_MAX_MOVE_BLEND_RATIO(piBodyguard[iBodyGuard], PEDMOVEBLENDRATIO_RUN) IF NOT bGuardAttendingTarget AND NOT IS_PED_IN_ANY_VEHICLE(piBodyGuard[iBodyGuard]) OPEN_SEQUENCE_TASK(seqIndex) IF IS_PED_INJURED(piTarget) TASK_PLAY_ANIM(NULL, "oddjobs@assassinate@hotel@", "alert_gunshot", NORMAL_BLEND_IN, SLOW_BLEND_OUT, 1250) TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), 3000, FALSE, TRUE) TASK_AIM_GUN_AT_ENTITY(NULL, PLAYER_PED_ID(), -1) ELSE TASK_PLAY_ANIM(NULL, "oddjobs@assassinate@hotel@", "alert_gunshot", NORMAL_BLEND_IN, SLOW_BLEND_OUT, 700) TASK_FOLLOW_TO_OFFSET_OF_ENTITY(NULL, piTarget, << 1.5, 0, 0 >>, PEDMOVEBLENDRATIO_RUN) ENDIF CLOSE_SEQUENCE_TASK(seqIndex) bGuardAttendingTarget = TRUE PRINTLN("OJASHOTEL - BodyGuard[", iBodyGuard, " attending target") ELSE VECTOR vWheelPos VECTOR vLimoCoords IF DOES_ENTITY_EXIST(viTargetCar) AND IS_VEHICLE_DRIVEABLE(viTargetCar) vWheelPos = GET_WORLD_POSITION_OF_ENTITY_BONE(viTargetCar, GET_ENTITY_BONE_INDEX_BY_NAME(viTargetCar, "wheel_lr") ) vLimoCoords = GET_ENTITY_COORDS(viTargetCar) vLimoCoords = vWheelPos - vLimoCoords SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(piBodyguard[iBodyGuard], viTargetCar, vLimoCoords, 1.5) PRINTLN("OJASHOTEL - BodyGuard found defensive area position - 1.5 m") ELSE PRINTLN("Unable to set ped_defensive_sphere_for ped") ENDIF OPEN_SEQUENCE_TASK(seqIndex) TASK_LEAVE_ANY_VEHICLE(NULL) IF IS_PED_INJURED(piTarget) AND NOT ARE_VECTORS_EQUAL(NULL_VECTOR(), vWheelPos) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, vWheelPos, GET_RANDOM_COORDINATE(), PEDMOVEBLENDRATIO_RUN, FALSE) TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, vWheelPos, -1, FALSE, SLOW_BLEND_DURATION, FALSE, FALSE, NULL, TRUE) PRINTLN("OJASHOTEL - BodyGuard[", iBodyGuard, " seeking cover to coords") ELSE TASK_AIM_GUN_AT_COORD(NULL, GET_RANDOM_COORDINATE(), 1500, TRUE) IF NOT IS_ENTITY_DEAD(piTarget) TASK_FOLLOW_TO_OFFSET_OF_ENTITY(NULL, piTarget, << 0, -1.5, 0 >>, PEDMOVEBLENDRATIO_RUN) ENDIF ENDIF CLOSE_SEQUENCE_TASK(seqIndex) ENDIF IF NOT IS_ENTITY_DEAD(piBodyguard[iBodyGuard]) TASK_PERFORM_SEQUENCE(piBodyguard[iBodyGuard], seqIndex) ENDIF CLEAR_SEQUENCE_TASK(seqIndex) ENDIF ENDIF BodyGuardState[iBodyGuard] = BS_ALERTED2 PRINTLN("OJASHOTEL - BodyGuardState[", iBodyGuard, "] = BS_ALERTED2") BREAK CASE BS_ALERTED2 IF NOT IS_ENTITY_DEAD(piBodyguard[iBodyGuard]) IF IS_ENTITY_PLAYING_ANIM(piBodyguard[iBodyGuard], "oddjobs@assassinate@hotel@", "enter") fAnimTime = GET_ENTITY_ANIM_CURRENT_TIME(piBodyguard[iBodyGuard], "oddjobs@assassinate@hotel@", "enter") PRINTLN("fAnimTime = ", fAnimTime) IF fAnimTime < 0.5 SET_ENTITY_ANIM_SPEED(piBodyguard[iBodyGuard], "oddjobs@assassinate@hotel@", "enter", 3.5) ELSE SET_ENTITY_ANIM_SPEED(piBodyguard[iBodyGuard], "oddjobs@assassinate@hotel@", "enter", 1.0) ENDIF ENDIF ENDIF //note that in UPDATE_PED_STATES() that PRF_BlockWeaponFire is being called every frame so that the ped doesnt try to fire since he has a combat task (but we want him to seek cover BREAK CASE BS_PANIC IF iBodyGuard = 0 bodyGuardVehicle = viTargetCar ELIF iBodyGuard = 1 bodyGuardVehicle = viEscortCar ENDIF IF NOT IS_PED_INJURED(piTarget) IF NOT IS_PED_INJURED(piBodyguard[iBodyGuard]) IF IS_PED_IN_ANY_VEHICLE(piTarget) TASK_COMBAT_PED(piBodyguard[iBodyGuard], Player) ELSE TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(piBodyguard[iBodyGuard], piTarget, PLAYER_PED_ID(), PEDMOVEBLENDRATIO_SPRINT, TRUE, 0.005) ENDIF ENDIF BodyGuardState[iBodyGuard] = BS_ATTACKING PRINTLN("BodyGuard[", iBodyGuard, "] = BS_ATTACKING - target dead") ELSE IF IS_VEHICLE_DRIVEABLE(bodyGuardVehicle) IF GET_ENTITY_SPEED(bodyGuardVehicle) < 5.0 EXIT_VEHICLE_AND_ATTACK_PLAYER(piBodyguard[iBodyGuard]) BodyGuardState[iBodyGuard] = BS_ATTACKING PRINTLN("BodyGuard[", iBodyGuard, "] = BS_ATTACKING1") ELSE IF GET_SCRIPT_TASK_STATUS(piBodyguard[iBodyGuard], SCRIPT_TASK_COMBAT) != PERFORMING_TASK TASK_COMBAT_PED(piBodyguard[iBodyGuard], Player) PRINTLN("BodyGuard[", iBodyGuard, "] - TASK_COMBAT_PED2") ENDIF ENDIF ELSE EXIT_VEHICLE_AND_ATTACK_PLAYER(piBodyguard[iBodyGuard]) BodyGuardState[iBodyGuard] = BS_ATTACKING PRINTLN("BodyGuard[", iBodyGuard, "] = BS_ATTACKING - vehicle undriveable") ENDIF ENDIF BREAK CASE BS_ATTACKING //ped has been tasked to attack on foot at this point PLAY_GUARD_PANIC_LINE(piBodyguard[iBodyGuard]) PLAY_TARGET_DEAD_LINE(piBodyguard[iBodyGuard]) BREAK ENDSWITCH /////// ALWAYS RUN THESE PANIC CHECKS IF NOT bPanicking // AND NOT IS_ENTITY_DEAD(piTarget) IF bAlerted IF BodyGuardState[iBodyGuard] <> BS_ALERTED AND BodyGuardState[iBodyGuard] <> BS_ALERTED2 BodyGuardState[iBodyGuard] = BS_ALERTED PRINTLN("OJASHOTEL - BodyGuardState[ ", iBodyGuard, "] = BS_ALERTED") ENDIF ELSE IF HAS_PLAYER_AGGROED_HOTEL_PED(piBodyguard[iBodyGuard]) bPanicking = TRUE PRINTLN("PLAYER AGGROED BODYGUARD!") ENDIF ENDIF ELSE // IF BodyGuardState[iBodyGuard] < BS_RIDE_IN_VEHICLE // AND NOT bLeftHotel IF BodyGuardState[iBodyGuard] < BS_PANIC IF NOT IS_PED_INJURED(piBodyguard[iBodyGuard]) IF IS_PED_USING_ANY_SCENARIO(piBodyguard[iBodyGuard]) SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(piBodyguard[iBodyGuard]) ENDIF TASK_CLEAR_DEFENSIVE_AREA(piBodyguard[iBodyGuard]) SET_PED_COMBAT_MOVEMENT(piBodyguard[iBodyGuard], CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(piBodyguard[iBodyGuard], CA_AGGRESSIVE, TRUE) ENDIF BodyGuardState[iBodyGuard] = BS_PANIC PRINTLN("BodyGuardState[", iBodyGuard, "] = BS_PANIC") ENDIF ENDIF ENDPROC //update the hotel timer at the bottom of the screen PROC UPDATE_HOTEL_TIMER(INT& startTime, FLOAT& fPickupTime, BOOL& bTimerStarted, BOOL& bTimeExpired) FLOAT fTimer // Grab starting game time IF NOT bTimerStarted startTime = GET_GAME_TIMER() PRINTLN("startTime = ", startTime) fPickupTime = (fPickupTime/1000) PRINTLN("OJASHOTEL - fPickupTime = ", fPickupTime) IF NOT IS_TIMER_STARTED(tCheckoutTimer) START_TIMER_NOW(tCheckoutTimer) PRINTLN("STARTING TIMER - tCheckoutTimer") ENDIF bTimerStarted = TRUE ENDIF IF IS_TIMER_STARTED(tCheckoutTimer) fTimer = GET_TIMER_IN_SECONDS(tCheckoutTimer) // PRINTLN("fTimer = ", fTimer) IF fTimer >= fPickupTime bTimeExpired = TRUE PRINTLN("bTimeExpired = TRUE") ENDIF ENDIF iTimeRemaining = ROUND((fPickupTime - fTimer)) // PRINTLN("iTimeRemaining = ", iTimeRemaining) iTimeRemaining = iTimeRemaining * 1000 IF iTimeRemaining < 63000 bDriveToLimo = TRUE // PRINTLN("SETTING bDriveToLimo = TRUE") ENDIF IF iTimeRemaining < 65000 bTaxiLeave = TRUE // PRINTLN("SETTING bTaxiLeave = TRUE") ENDIF IF iTimeRemaining < iGuardTimeToTellExtrasToLeave bGuardsTellExtrasToLeave = TRUE ENDIF IF NOT REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\ASSASSINATION_MULTI") bLoadedSoundSet = FALSE ELSE bLoadedSoundSet = TRUE ENDIF IF iTimeRemaining < 30000 bTriggerGuardWalk = TRUE IF bLoadedSoundSet IF IS_TIMER_STARTED(tBeepTimer) IF GET_TIMER_IN_SECONDS(tBeepTimer) > 1 PLAY_SOUND_FRONTEND(-1, "ASSASSINATIONS_HOTEL_TIMER_COUNTDOWN", "ASSASSINATION_MULTI") RESTART_TIMER_NOW(tBeepTimer) PRINTLN("PLAYING BEEP") ENDIF ELSE PLAY_SOUND_FRONTEND(-1, "ASSASSINATIONS_HOTEL_TIMER_COUNTDOWN", "ASSASSINATION_MULTI") START_TIMER_NOW(tBeepTimer) PRINTLN("STARTING TIMER - tBeepTimer - 01") ENDIF ENDIF DRAW_GENERIC_TIMER(iTimeRemaining, "ASS_VA_TIMERED", 0, TIMER_STYLE_DONTUSEMILLISECONDS, -1, PODIUMPOS_NONE, HUDORDER_DONTCARE, FALSE, HUD_COLOUR_RED) ELSE DRAW_GENERIC_TIMER(iTimeRemaining, "ASS_VA_TIMELEFT") ENDIF // DRAW_CLOCK("ASS_VA_TIMELEFT", TRUE, iWarningRedTimeHours, iWarningRedTimeMinutes) ENDPROC //checks to see if a vehicle has safely exited the hotel area and reached the street FUNC BOOL IS_CAR_AT_STREET(VEHICLE_INDEX vehToCheck, FLOAT fDistToCheck) IF DOES_ENTITY_EXIST(vehToCheck) IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehToCheck, << -1217.4419, -281.5099, 36.7495 >>) <= fDistToCheck RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL ARE_GUARDS_IN_VEHICLE() IF DOES_ENTITY_EXIST(piLimoGuard[0]) AND DOES_ENTITY_EXIST(piLimoGuard[1]) AND NOT IS_PED_INJURED(piLimoGuard[0]) AND NOT IS_PED_INJURED(piLimoGuard[1]) IF IS_PED_IN_VEHICLE(piLimoGuard[0], viTargetCar) AND IS_PED_IN_VEHICLE(piLimoGuard[1], viTargetCar) PRINTLN("GUARDS ARE IN VEHICLE, BRING OUT THE TARGET") RETURN TRUE ELSE PRINTLN("GUARDS ARE NOT IN VEHICLE") ENDIF ELSE PRINTLN("GUARDS DO NOT EXIST OR ARE INJURED") ENDIF RETURN FALSE ENDFUNC PROC CHECK_FOR_PLAYER_BLOCKING_WITH_VEHICLES() VEHICLE_INDEX vehTempVehicle IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehTempVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) // PRINTLN("PLAYER IS IN A VEHICLE") ENDIF IF DOES_ENTITY_EXIST(vehTempVehicle) IF IS_ENTITY_IN_ANGLED_AREA(vehTempVehicle, << -1214.517, -158.910, -39.165 >>, << -1243.589, -238.784, 39.165 >>, 15.000, FALSE, FALSE) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehTempVehicle) // PRINTLN("VEHICLE IS IN ANGLED AREA") IF GET_ENTITY_SPEED(vehTempVehicle) <= 0.5 IF NOT IS_TIMER_STARTED(tBlockingTimer) START_TIMER_NOW(tBlockingTimer) // PRINTLN("STARTING TIMER NOW") ENDIF ELSE IF IS_TIMER_STARTED(tBlockingTimer) RESTART_TIMER_NOW(tBlockingTimer) // PRINTLN("PLAYER IS MOVING: RE-STARTING TIMER NOW") ENDIF ENDIF IF IS_TIMER_STARTED(tBlockingTimer) IF GET_TIMER_IN_SECONDS(tBlockingTimer) > 10.0 PRINTLN("FAILING: PLAYER HAS A VEHICLE IN ANGLED AREA AND IT SEEMS TO BE STOPPED") SET_MISSION_FAILED(FT_BLOWN_COVER) ENDIF ENDIF ELSE IF IS_TIMER_STARTED(tBlockingTimer) RESTART_TIMER_NOW(tBlockingTimer) // PRINTLN("PLAYER LEFT AREA: RE-STARTING TIMER NOW") ENDIF // PRINTLN("VEHICLE IS NOT IN ANGLED AREA") ENDIF ENDIF ENDIF ENDPROC FUNC BOOL HAS_ENDING_CELL_PHONE_CALL_COMPLETED() // IF NOT bPlayedCellPhoneCall // SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) // IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //// SET_AUDIO_FLAG("AllowScoreAndRadio", TRUE) //// PRINTLN("SETTING FLAG - AllowScoreAndRadio") // ENDIF // ENDIF IF bPrepareLostCue TRIGGER_MUSIC_EVENT("ASS1_LOST") PRINTLN("TRIGGERING MUSIC - ASS1_LOST") bTriggeredLastCue = TRUE ELSE PRINTLN("UNABLE TO PREPARE MUSIC CUE - ASS1_LOST") ENDIF CLEANUP_PEDS() // ADD_PED_FOR_DIALOGUE(hotelConv, 3, NULL, "LESTER") // // ADD_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS(TRUE) // PLAYER_CALL_CHAR_CELLPHONE(hotelConv, CHAR_LESTER, "OJASAUD", "OJAS_HOTEL_C", CONV_MISSION_CALL) // PRINTLN("CELL PHONE CALL") // bPlayedCellPhoneCall = TRUE // ENDIF // // IF bPlayedCellPhoneCall AND HAS_CELLPHONE_CALL_FINISHED() PRINTLN("RETURNING TRUE - HAS_ENDING_CELL_PHONE_CALL_COMPLETED") RETURN TRUE // IF DOES_BLIP_EXIST(blipRadius) // REMOVE_BLIP(blipRadius) // PRINTLN("REMOVING blipRadius") // ENDIF // IF bPrepareLostCue // TRIGGER_MUSIC_EVENT("ASS1_LOST") // PRINTLN("TRIGGERING MUSIC - ASS1_LOST - LATE") // bTriggeredLastCue = TRUE // ELSE // PRINTLN("UNABLE TO PREPARE MUSIC CUE - ASS1_LOST - LATE") // IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) // IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // TRIGGER_MUSIC_EVENT("ASS1_STOP") // PRINTLN("TRIGGERING MUSIC - ASS1_STOP") // bTriggeredLastCue = TRUE // ENDIF // ENDIF // ENDIF // // ELSE // PRINTLN("WAITING FOR CELL PHONE CALL TO FINISH") // ENDIF // RETURN FALSE ENDFUNC PROC DO_STAGE_INTRO_CUTSCENE() SWITCH iStageNum CASE 0 REQUEST_CUTSCENE("ASS_INT_2_ALT1") REQUEST_MODEL(IG_LESTERCREST) REQUEST_MODEL(PROP_CS_WALKING_STICK) REQUEST_ANIM_DICT("oddjobs@assassinate@hotel@leadin") REQUEST_ANIM_DICT("oddjobs@assassinate@hotel@leaning@") REQUEST_CLIP_SET("move_lester_CaneUp") //to fix Bug 1173621 - (3/12/13) - MB SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) IF HAS_MODEL_LOADED(IG_LESTERCREST) AND HAS_MODEL_LOADED(PROP_CS_WALKING_STICK) AND HAS_ANIM_DICT_LOADED("oddjobs@assassinate@hotel@leadin") AND HAS_ANIM_DICT_LOADED("oddjobs@assassinate@hotel@leaning@") AND HAS_CLIP_SET_LOADED("move_lester_CaneUp") iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ELSE PRINTLN("Requesting model for Lester and his walking stick piLester for Cutscene") ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 1 IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) ODDJOB_ENTER_CUTSCENE(SPC_REMOVE_FIRES|SPC_REMOVE_EXPLOSIONS|SPC_REMOVE_PROJECTILES) // Do stuff here RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1514.611450,-927.466675,7.133712>>, <<-1496.948120,-942.223999,16.187229>>, 30.000000, <<-1523.1742, -924.6732, 9.1221>>, 53.0177, TRUE, TRUE, TRUE, TRUE) CLEAR_AREA(<< -1507.71497, -941.13135, 8.37286 >>, 10, TRUE) SET_ENTITY_COORDS(PLAYER_PED_ID(), vWaitingPosition) SET_ENTITY_HEADING(PLAYER_PED_ID(), fWaitingHeading) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) TASK_PLAY_ANIM(PLAYER_PED_ID(), "oddjobs@assassinate@hotel@leaning@", "idle_a", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING | AF_TURN_OFF_COLLISION) IF NOT DOES_CAM_EXIST(camLeadIn01) camLeadIn01 = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vCameraPosition01, vCameraRotation01, 42.203197, TRUE) PRINTLN("CREATING CAMERA - camLeadIn01") SHAKE_CAM(camLeadIn01, "HAND_SHAKE", 0.3) ENDIF IF NOT DOES_CAM_EXIST(camLeadIn02) camLeadIn02 = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vCameraPosition02, vCameraRotation02, 42.203197, FALSE) SET_CAM_ACTIVE_WITH_INTERP(camLeadIn02, camLeadIn01, 5000) SHAKE_CAM(camLeadIn01, "HAND_SHAKE", 0.3) ENDIF RENDER_SCRIPT_CAMS(TRUE, FALSE) IF IS_REPEAT_PLAY_ACTIVE() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) PRINTLN("REPEAT PLAY ACTIVE - FADING IN") ENDIF iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 2 IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "oddjobs@assassinate@hotel@leaning@", "idle_a") IF NOT IS_TIMER_STARTED(tLeadinTimer) START_TIMER_NOW(tLeadinTimer) PRINTLN("STARTING TIMER - tLeadinTimer") ENDIF ENDIF // IF HAS_MODEL_LOADED(prop_bench_08) // IF NOT DOES_ENTITY_EXIST(oFailSafeBench) // oFailSafeBench = CREATE_OBJECT(prop_bench_08, << -1510.1029, -947.7194, 8.2332 >>) // SET_ENTITY_HEADING(oFailSafeBench, 142.29) // SET_ENTITY_COLLISION(oFailSafeBench, FALSE) // ENDIF // ENDIF IF IS_TIMER_STARTED(tLeadinTimer) IF GET_TIMER_IN_SECONDS(tLeadinTimer) > 6.0 iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ENDIF ENDIF ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 3 IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE() iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 4 SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF REGISTER_ENTITY_FOR_CUTSCENE(piLester, "Lester", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, IG_LESTERCREST) PRINTLN("REGISTERING LESTER FOR CUTSCENE") REGISTER_ENTITY_FOR_CUTSCENE(NULL, "WalkingStick_Lester", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PROP_CS_WALKING_STICK) PRINTLN("REGISTERING LESTER'S CANE") START_CUTSCENE() //to fix bug 1528120 - Clear player wanted level CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID()) // FADE_IN() SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 5 IF IS_CUTSCENE_PLAYING() DESTROY_ALL_CAMS() RENDER_SCRIPT_CAMS(FALSE, FALSE) iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 6 IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT() ENDIF IF NOT DOES_ENTITY_EXIST(piLester) // PRINTLN("piLester DOES NOT EXIST") IF DOES_CUTSCENE_ENTITY_EXIST("Lester") // PRINTLN("CUTSCENE ENTITY - Lester EXISTS") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lester")) //, IG_LESTERCREST)) piLester = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lester")) PRINTLN("CREATING PED - piLester") // ELSE // PRINTLN("NOT FINDING LESTER") ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(LesterCane) IF DOES_CUTSCENE_ENTITY_EXIST("WalkingStick_Lester") IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("WalkingStick_Lester")) LesterCane = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("WalkingStick_Lester") PRINTLN("CREATING LESTER'S CANE") ENDIF ENDIF ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin") // Do other stuff here ENDIF IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lester")) IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lester") //, IG_LESTERCREST) IF DOES_ENTITY_EXIST(piLester) AND NOT IS_PED_INJURED(piLester) SET_ENTITY_COORDS(piLester, << -1509.458, -948.195, 7.750 >>) SET_ENTITY_HEADING(piLester, -11.000) TASK_PLAY_ANIM(piLester, "oddjobs@assassinate@hotel@leadin", "lester_leadin", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0, FALSE, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(piLester) PRINTLN("TASKING LESTER TO PLAY IDLE ANIMATION") ELSE PRINTLN("LESTER DOES NOT EXIST") ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lester")) IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("WalkingStick_Lester") IF DOES_ENTITY_EXIST(piLester) AND NOT IS_PED_INJURED(piLester) // re-attach the cane to his hand at an angle that looks good when he walks away ATTACH_ENTITY_TO_ENTITY(LesterCane, piLester, GET_PED_BONE_INDEX(piLester, BONETAG_PH_R_HAND), << 0,0,0 >>, << 0,0,0 >>) ENDIF ENDIF ENDIF IF HAS_CUTSCENE_FINISHED() AND NOT IS_CUTSCENE_PLAYING() SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) IF NOT IS_PED_INJURED(piLester) SET_ENTITY_PROOFS(piLester, FALSE, FALSE, FALSE, FALSE, FALSE) SET_PED_CAN_RAGDOLL(piLester, TRUE) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() IF IS_SCREEN_FADED_OUT() WAIT(0) DO_SCREEN_FADE_IN(500) ENDIF ODDJOB_EXIT_CUTSCENE() iStageNum ++ PRINTLN("DO_STAGE_INTRO_CUTSCENE, iStageNum = ", iStageNum) ENDIF BREAK //---------------------------------------------------------------------------------------------------------------------- CASE 7 RESTART_TIMER_NOW(tLesterTimer) INITIALIZE_NEXT_STAGE() MainStage = STAGE_INIT PRINTLN("GOING TO STATE - STAGE_INIT") BREAK ENDSWITCH ENDPROC PROC HANDLE_PLAYER_ABANDON_MISSION() VECTOR vPlayerPos IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0 bResetAbandonCheck = TRUE EXIT ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID()) ENDIF IF bResetAbandonCheck IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) fToHotelDistance = VDIST(GET_ENTITY_COORDS(PLAYER_PED_ID()), vNewBlipPosition) PRINTLN("RESET: HOTEL DISTANCE = ", fToHotelDistance) bResetAbandonCheck = FALSE ENDIF ELSE IF fToHotelDistance = 0 fToHotelDistance = VDIST(<<-1510.2909, -946.9932, 8.2780>>, vNewBlipPosition) PRINTLN("HOTEL DISTANCE = ", fToHotelDistance) ENDIF ENDIF IF VDIST(vPlayerPos, vNewBlipPosition) > (fToHotelDistance + 400) PRINTLN("FAILING - MISSION ABANDONED") SET_MISSION_FAILED(FT_ABANDONED) ELIF VDIST(vPlayerPos, vNewBlipPosition) > (fToHotelDistance + 200) IF NOT bGaveAbandondedWarning PRINT_NOW("ASS_VA_RHOTEL", DEFAULT_GOD_TEXT_TIME, 1) PRINTLN("bGaveAbandondedWarning = TRUE") bGaveAbandondedWarning = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: /// Handle blip behavior in first stage PROC DO_STAGE_GET_TO_HOTEL() VEHICLE_INDEX tempVeh SWITCH iStageNum // do wanted checks immediately CASE 0 FADE_IN() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0, "assassin_hotel_go_to_hotel") IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) PRINT_NOW("ASS_VA_LOSECOPS", DEFAULT_GOD_TEXT_TIME, 1) ENDIF CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) //area around where the limo pulls up iStageNum ++ BREAK //create blip for hotel once player is not wanted CASE 1 HANDLE_PLAYER_ABANDON_MISSION() IF NOT DOES_ENTITY_EXIST(viReplayVehicle) IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) tempVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) IF GET_PED_IN_VEHICLE_SEAT(tempVeh, VS_DRIVER) = PLAYER_PED_ID() viReplayVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) PRINTLN("FOUND REPLAY VEHICLE") IF DOES_ENTITY_EXIST(viReplayVehicle) AND NOT IS_ENTITY_DEAD(viReplayVehicle) OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(viReplayVehicle) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) IF NOT IS_PLAYER_IN_RANGE_OF_HOTEL() IF NOT DOES_BLIP_EXIST(bHotelBlip) bHotelBlip = CREATE_BLIP_FOR_COORD(vNewBlipPosition, TRUE) SET_BLIP_NAME_FROM_TEXT_FILE(bHotelBlip, "ASS_VA_DESTBLIP") //if the player hails a taxi it will drop them off in front of the hotel SET_TAXI_DROPOFF_LOCATION_FOR_BLIP(bHotelBlip, <<-1234.3065, -250.6783, 38.2238>>, 28.9140) IF NOT bObjectivePrinted PRINT_NOW("ASS_VA_GOHOTEL", DEFAULT_GOD_TEXT_TIME, 1) bObjectivePrinted = TRUE ELSE IF IS_THIS_PRINT_BEING_DISPLAYED("ASS_VA_LOSECOPS") CLEAR_PRINTS() ENDIF ENDIF ENDIF ELSE IF STREAMVOL_HAS_LOADED(svIntroCutscene) AND ARE_MODELS_LOADED_FOR_GUARDS() CLEANUP_DEST_BLIPS() INITIALIZE_NEXT_STAGE() MainStage = STAGE_GUARD_CUTSCENE PRINTLN("OJASHOTEL - MainStage = STAGE_GUARD_CUTSCENE") ENDIF ENDIF ELSE IF NOT IS_PLAYER_IN_RANGE_OF_HOTEL() //remove destination blip and tell player to lose cops again REMOVE_BLIP_AND_PRINT_OBJECTIVE_MSG_IF_WANTED(bHotelBlip, "ASS_VA_LOSECOPS") ELSE //otherwise fail the mission for being wanted near the hotel PRINTLN("OJASHOTEL - FAILING THE MISSION BECAUSE PLAYER IS WANTED NEAR THE HOTEL PRIOR TO TRIGGERING INTRO CUTSCENE") SET_MISSION_FAILED(FT_BLOWN_COVER_WANTED) ENDIF ENDIF HANDLE_STREAMVOL_AND_GUARD_MODEL_LOADING_UNLOADING() BREAK ENDSWITCH ENDPROC /// PURPOSE: Handle cutscene of guards pulling up to the hotel when player arrives PROC DO_STAGE_GUARD_CUTSCENE() SWITCH iStageNum CASE 0 //bring car to a stop gracefully or wait until player isnt ragdolling to enter the cutscene IF IS_PLAYER_READY_FOR_ASSASSINATION_CUTSCENE() OR bPlayerIsInFlyingVehicle AND STREAMVOL_HAS_LOADED(svIntroCutscene) //clear area around hotel and create limo and limo guards RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1248.397583,-183.366013,37.728809>>, <<-1216.436768,-196.872726,44.075413>>, 59.250000, vCheckpointRetryPosition, fCheckpointRetryHeading) CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) //area around where the limo pulls up CLEAR_AREA_OF_PROJECTILES(<< -1220.57, -185.96, 38.40 >>, 50) CREATE_TARGET_CAR() CREATE_CUTSCENE_PEDS() IF NOT IS_ENTITY_DEAD(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) START_PLAYBACK_RECORDED_VEHICLE(viTargetCar, 107, "ASSOJva") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(viTargetCar, 2500) ENDIF ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) SET_VEH_RADIO_STATION(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), "OFF") ENDIF ENDIF iStageNum ++ ELSE IF STREAMVOL_HAS_LOADED(svIntroCutscene) PRINTLN("STREAMVOL HAS LOADED") ELSE PRINTLN("STREAMVOL HAS NOT LOADED") ENDIF ENDIF BREAK CASE 1 IF HAS_INTRO_CUTSCENE_FINISHED() //re-initialize iCutsceneStage variable for Kill Camera iCutsceneStage = 0 SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() INITIALIZE_NEXT_STAGE() PRINTLN("OJASHOTEL - MainStage = STAGE_PLANT_BOMB") MainStage = STAGE_PLANT_BOMB ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Allow the player to place a bomb on the target's vehicle if they arrive before the target exits the hotel PROC DO_STAGE_PLANT_BOMB() // IF IS_VEHICLE_BLOCKING_ANY_AIRLOCK(6.0) // PRINTLN("GOING TO FAIL FOR BLOCKING AIRLOCK") // FAIL_MISSION_FOR_CLOSE_VEHICLE() // ENDIF SWITCH iStageNum //wait for player to plant a bomb on the limo CASE 0 SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "assassin_hotel_plan_attack") //re-enable wanted as an aggro check CLEAR_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_Wanted) IF IS_VEHICLE_DRIVEABLE(viTargetCar) SET_VEHICLE_ENGINE_ON(viTargetCar, FALSE, TRUE) ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF DOES_ENTITY_EXIST(viReplayVehicle) AND NOT IS_ENTITY_DEAD(viReplayVehicle) OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(viReplayVehicle) PRINTLN("OVERRIDING CHECKPOINT VEHICLE IF THE PLAYER WAS IN A VEHICLE BUT NOT AT CHECKPOINT") ENDIF ENDIF ENDIF //create motorcade peds and peds guarding airlock door positions CREATE_MOTORCADE_ACTORS_AND_VEHICLE() CREATE_LIMO_GUARDS() // CREATE_DOOR_GUARDS() TRIGGER_MUSIC_EVENT("ASS1_START") PRINTLN("TRIGGERING MUSIC - ASS1_START") //don't check this bit until the player has been warned previously or until guards are ready to leave their posts (DO_ADDITIONAL_HOTEL_PANIC_CHECKS should cover shotnear) //this will allow the player to safely plant a bomb on the targets vehicle SET_BIT(aggroArgs.iBitFieldDontCheck, ENUM_TO_INT(EAggro_ShotNear)) // //store this number to check if bombs have been planted later in the script // iBombCount = GET_AMMO_IN_PED_WEAPON(Player, WEAPONTYPE_STICKYBOMB) PRINT_NOW("ASS_VA_PLANT", DEFAULT_GOD_TEXT_TIME, 1) iStageNum++ BREAK CASE 1 //60% of time has passed - start telling the guards to exit the hotel and guard their posts IF bTriggerGuardWalk IF NOT IS_NON_SCRIPT_CREATED_VEHICLE_IN_HOTEL_AREA(viCarThatTriggeredAlert) AND NOT DID_PLAYER_BLOCK_ALLEY_WITH_A_PARKED_CAR(viLastDriven[0], bPlayerParkedCarInAlley) AND NOT DID_PLAYER_BLOCK_ALLEY_WITH_A_PARKED_CAR(viLastDriven[1], bPlayerParkedCarInAlley) AND NOT DID_PLAYER_BLOCK_ALLEY_WITH_A_PARKED_CAR(viLastDriven[2], bPlayerParkedCarInAlley) SETTIMERA(0) INITIALIZE_NEXT_STAGE() MainStage = STAGE_GUARDS_GO_TO_POSTS PRINTLN("OJASHOTEL - MainStage = STAGE_GUARDS_GO_TO_POSTS") ELSE PRINTLN("VEHICLES MUST BE IN THE AREA") FAIL_MISSION_FOR_CLOSE_VEHICLE() ENDIF ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: Tell the guards to walk to their guardposts PROC DO_STAGE_GUARDS_GO_TO_POSTS() SWITCH iStageNum CASE 0 IF NOT bInPursuit CLEAR_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_ShotNear) //re-allow all aggro checks //Tell guards to enter the limo TASK_LIMO_GUARDS_TO_ENTER_VEHICLES() SETTIMERA(0) iStageNum++ ENDIF BREAK CASE 1 //only advance to the next stage once the timer expires and we know that the player hasn't parked their vehicle close enough to fail the mission IF bHotelTimerExpired AND NOT bFailMissionForCloseVehicle AND ARE_GUARDS_IN_VEHICLE() AND ARE_MODELS_LOADED_FOR_TARGET() INITIALIZE_NEXT_STAGE() MainStage = STAGE_TARGET_LEAVE_LOBBY PRINTLN("OJASHOTEL - MainStage = STAGE_TARGET_LEAVE_LOBBY") ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: have the target and limo guards walk to the limo PROC DO_STAGE_TARGET_LEAVE_LOBBY() //remove any existing blips CLEANUP_PED_BLIPS(FALSE) //create and blip target, set his update loop to enter the vehicle, and task player to kill him CREATE_TARGET() CREATE_BODYGUARDS() //release models now that they are no longer needed CLEANUP_EXTRAS() UNLOAD_GUARD_MODELS() PRINT_NOW("ASS_VA_KILL", DEFAULT_GOD_TEXT_TIME, -1) // //check to see if there is undetonated C4 that the player planted so we can properly display help messages to explain how to detonate later // IF GET_AMMO_IN_PED_WEAPON(Player, WEAPONTYPE_STICKYBOMB) < iBombCount // IF IS_PROJECTILE_TYPE_IN_AREA(<< -1298.6843, -324.0442, -35.5780 >>, << -1113.3724, -46.1583, 55.6090 >>, WEAPONTYPE_STICKYBOMB) // bPlantMsg = TRUE // bPlayerHasPlantedBomb = TRUE // ENDIF // ENDIF SETTIMERA(0) bTargetLeaving = TRUE INITIALIZE_NEXT_STAGE() MainStage = STAGE_ENTER_LIMO PRINTLN("OJASHOTEL - MainStage = STAGE_ENTER_LIMO") ENDPROC /// PURPOSE: Target is escorted to the limo by armed security PROC DO_STAGE_ENTER_LIMO() SWITCH iStageNum CASE 0 //make sure the driver, target, and limo are alive/driveable before leaving the hotel //otherwise have the surviving peds exit the vehicle, attack the player, and have the target flee on foot IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_TARGET_IN_LIMO() IF NOT IS_PED_INJURED(piLimoGuard[0]) // Driver ped IF IS_VEHICLE_DRIVEABLE(viTargetCar) IF IS_PED_IN_VEHICLE(piLimoGuard[0], viTargetCar) bLeaveInLimo = TRUE INITIALIZE_NEXT_STAGE() MainStage = STAGE_LEAVE_HOTEL PRINTLN("OJASHOTEL - MainStage = STAGE_LEAVE_HOTEL") ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH //remind the player how to use stickybombs if they have attached any to the target's car. // REMIND_PLAYER_HOW_TO_USE_STICKYBOMBS() ENDPROC /// PURPOSE: Target drives out of hotel area PROC DO_STAGE_LEAVE_HOTEL() IF NOT bLimoCruisingStreets IF DOES_ENTITY_EXIST(viTargetCar) IF IS_VEHICLE_DRIVEABLE(viTargetCar) SET_VEHICLE_DOORS_LOCKED(viTargetCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY) // To prevent the player from jacking the target car IF IS_CAR_AT_STREET(viTargetCar, 5) // OR IS_TARGET_CAR_AT_PLAYER_CAR(5.0) bLimoCruisingStreets = TRUE ENDIF ENDIF ENDIF ENDIF IF NOT bLimoStuck IF IS_VEHICLE_STUCK(viTargetCar, 10000) bLimoStuck = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: Play a kill camera of the target PROC DO_STAGE_KILL_CAM() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vAreaCoord01, vAreaCoord02, fAreaWidth, TRUE, FALSE) PRINTLN("PLAYER IS IN ANGLED AREA") bIsPlayerInHotelArea = TRUE ELSE PRINTLN("PLAYER IS NOT IN ANGLED AREA") bIsPlayerInHotelArea = FALSE ENDIF IF DOES_BLIP_EXIST(bTargetBlip) REMOVE_BLIP(bTargetBlip) PRINTLN("REMOVING bTargetBlip IN DO_STAGE_KILL_CAM") ENDIF SET_WANTED_LEVEL_MULTIPLIER(0.5) PRINTLN("SETTING WANTED MULTIPLIER TO 0.5") IF bIsPlayerInHotelArea INITIALIZE_NEXT_STAGE() MainStage = STAGE_LEAVE_AREA PRINTLN("OJASHOTEL - MainStage = STAGE_LEAVE_AREA") ELSE INITIALIZE_NEXT_STAGE() MainStage = STAGE_EVADE_POLICE PRINTLN("OJASHOTEL - MainStage = STAGE_EVADE_POLICE") ENDIF KILL_CHASE_HINT_CAM(localChaseHintCamStruct) ENDPROC /// PURPOSE: Target is escaping the player after having been alerted PROC DO_STAGE_EVADE_POLICE() // HANDLE_SPECIAL_CASE_AUDIO_CUE() HANDLE_FRANKLIN_PLAYING_TARGET_KILL_LINE(bTargetKillLinePlayed, hotelConv, "OJASAUD", "OJAS_HOCOM", CONV_PRIORITY_VERY_HIGH) SWITCH iStageNum CASE 0 IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) IF NOT bPrintLoseWantedLevel IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_MESSAGE_BEING_DISPLAYED() PRINTLN("EVADE POLICE - PLAYER IS WANTED") PRINT_NOW("ASS_VA_LOSECOPS", DEFAULT_GOD_TEXT_TIME, 1) iStageNum++ bPrintLoseWantedLevel = TRUE ENDIF ENDIF ENDIF ELIF GET_CLOSEST_GUARD() != NULL IF NOT bPrintLastObjective IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_MESSAGE_BEING_DISPLAYED() PRINT_NOW("ASS_VA_GO", DEFAULT_GOD_TEXT_TIME, -1) PRINTLN("EVADE POLICE - LEAVE AREA") iStageNum++ bPrintLastObjective = TRUE ENDIF ENDIF ENDIF ELSE IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) AND GET_CLOSEST_GUARD(125) = NULL PRINTLN("FAIL SAFE: EVADE POLICE - GOING TO CASE 1") iStageNum++ ENDIF ENDIF BREAK CASE 1 IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) AND GET_CLOSEST_GUARD(125.0) = NULL //player has evaded all peds HANDLE_SPECIAL_CASE_AUDIO_CUE() CLEANUP_PEDS() CLEANUP_PED_BLIPS() CLEANUP_VEHICLES() PRINTLN("EVADE POLICE - NO LONGER WANTED AND NOT GUARDS AROUND") iStageNum++ ENDIF BREAK CASE 2 HANDLE_SPECIAL_CASE_AUDIO_CUE() PRINTLN("EVADE POLICE - GOING TO STATE - STAGE_MISSION_PASSED") MainStage = STAGE_MISSION_PASSED BREAK ENDSWITCH ENDPROC PROC DO_STAGE_LEAVE_AREA() FLOAT fDistanceFromLocation IF NOT bPrintLastObjective IF NOT IS_MESSAGE_BEING_DISPLAYED() IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PRINT_NOW("ASS_VA_GO", DEFAULT_GOD_TEXT_TIME, -1) bPrintLastObjective = TRUE ENDIF ENDIF ENDIF HANDLE_FRANKLIN_PLAYING_TARGET_KILL_LINE(bTargetKillLinePlayed, hotelConv, "OJASAUD", "OJAS_HOCOM", CONV_PRIORITY_VERY_HIGH) SWITCH iStageNum CASE 0 PRINTLN("GOING TO STATE 1 IN DO_STAGE_LEAVE_AREA") iStageNum++ BREAK CASE 1 IF NOT IS_PED_INJURED(PLAYER_PED_ID()) fDistanceFromLocation = GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), vCenterPoint) IF fDistanceFromLocation > 155 AND GET_CLOSEST_GUARD() = NULL //player has evaded all peds bLeftArea = TRUE PRINTLN("bLeftArea = TRUE") CLEANUP_PEDS() iStageNum++ ELSE //ensure the player cannot lose their wanted level if they haven't left the area SUPPRESS_LOSING_WANTED_LEVEL_IF_HIDDEN_THIS_FRAME(PLAYER_ID()) ENDIF ENDIF BREAK CASE 2 // If we're not wanted, go ahead and make the phone call IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) IF GET_CLOSEST_GUARD() = NULL //player has evaded all peds HANDLE_SPECIAL_CASE_AUDIO_CUE() IF HAS_ENDING_CELL_PHONE_CALL_COMPLETED() PRINTLN("GOING TO STATE - STAGE_MISSION_PASSED") MainStage = STAGE_MISSION_PASSED ENDIF ENDIF ELSE // If we're wanted, go to a state and check until we lose it.. IF NOT bPrintLoseWantedLevel IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_MESSAGE_BEING_DISPLAYED() PRINTLN("WE'RE WANTED - GO TO CASE 3") PRINT_NOW("ASS_VA_LOSECOPS", DEFAULT_GOD_TEXT_TIME, 1) iStageNum++ bPrintLoseWantedLevel = TRUE ENDIF ENDIF ENDIF ENDIF BREAK CASE 3 IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0) PRINTLN("WE'RE NO LONGER WANTED, GOING TO CASE 2") iStageNum = 2 ENDIF BREAK ENDSWITCH ENDPROC PROC DO_STAGE_MISSION_PASSED() CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID()) Script_Passed() ENDPROC PROC TRIGGER_PANIC_IF_BOMB_IN_AIRLOCK_IF_NOT_ALREADY_PANICKED(VECTOR vecAngledAreaPoint1, VECTOR vecAngledAreaPoint2, FLOAT DistanceOfOppositeFace) IF NOT bPanicking IF IS_PROJECTILE_TYPE_IN_ANGLED_AREA(vecAngledAreaPoint1, vecAngledAreaPoint2, DistanceOfOppositeFace, WEAPONTYPE_STICKYBOMB) bPanicking = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: Handle all of the enemy ped loops - only check one ped per frame for performance reasons PROC UPDATE_MISSION_PED_STATES() INT idx //check the target every frame UPDATE_TARGET_STATE() // IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piLimoGuard[0], Player) // OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piLimoGuard[1], Player) // OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piLimoGuard[2], Player) // SCRIPT_ASSERT("DAMAGED A LIMO GUARD!") // ELSE // PRINTLN("PLAYER HAS NOT DAMAGED ANY LIMO GUARDS") // ENDIF //TODO - put the loops below into the update states so it isnt doing this every frame? REPEAT NUM_LIMO_GUARDS idx IF DOES_ENTITY_EXIST(piLimoGuard[idx]) IF bPanicking AND NOT bLeftArea UPDATE_AI_PED_BLIP(piLimoGuard[idx], blipCombatLimoGuards[idx], -1, NULL, FALSE, FALSE, 150) ENDIF ENDIF ENDREPEAT REPEAT NUM_ESCORT_PEDS idx IF DOES_ENTITY_EXIST(piEscortPed[idx]) IF bPanicking AND NOT bLeftArea UPDATE_AI_PED_BLIP(piEscortPed[idx], blipCombatEscort[idx], -1, NULL, FALSE, FALSE, 150) ENDIF ENDIF ENDREPEAT REPEAT NUM_BODYGUARDS idx IF DOES_ENTITY_EXIST(piBodyguard[idx]) IF bPanicking AND NOT bLeftArea UPDATE_AI_PED_BLIP(piBodyguard[idx], blipBodyguard[idx], -1, NULL, FALSE, FALSE, 150) ENDIF IF NOT IS_PED_INJURED(piBodyguard[idx]) IF BodyGuardState[idx] = BS_ALERTED2 //constantly call this every time since the ped has been tasked to combat BS_ALERTED but we just want them to look like they are in cover, but not shoot //this needs to be called here bcause UPDATE_BODYGUARD_STATE doesnt get called every frame (see later in this function) SET_PED_RESET_FLAG(piBodyguard[idx], PRF_BlockWeaponFire, TRUE) ENDIF ENDIF ENDIF ENDREPEAT IF iFrameCountAsn = 0 UPDATE_BODYGUARD_STATE(0) ELIF iFrameCountAsn = 1 UPDATE_BODYGUARD_STATE(1) ELIF iFrameCountAsn = 2 IF MainStage >= STAGE_PLANT_BOMB UPDATE_LIMO_GUARD_STATE(0) ENDIF ELIF iFrameCountAsn = 3 IF MainStage >= STAGE_PLANT_BOMB UPDATE_LIMO_GUARD_STATE(1) ENDIF ELIF iFrameCountAsn = 4 IF MainStage >= STAGE_PLANT_BOMB UPDATE_LIMO_GUARD_STATE(2) TRIGGER_PANIC_IF_BOMB_IN_AIRLOCK_IF_NOT_ALREADY_PANICKED(<<-1222.557617,-173.747086,38.325413>>, <<-1220.101196,-169.053146,42.075413>>, 4.000000) ENDIF ELIF iFrameCountAsn = 5 UPDATE_ESCORT_STATE(0) TRIGGER_PANIC_IF_BOMB_IN_AIRLOCK_IF_NOT_ALREADY_PANICKED(<<-1213.432251,-191.326141,38.325413>>, <<-1208.552856,-193.861816,42.075344>>, 4.000000) ELIF iFrameCountAsn = 6 UPDATE_ESCORT_STATE(1) TRIGGER_PANIC_IF_BOMB_IN_AIRLOCK_IF_NOT_ALREADY_PANICKED(<<-1219.140259,-202.312424,38.325344>>, <<-1214.269287,-204.903503,42.075344>>, 4.000000) ENDIF //increment it by one - reset it if it exceeds the checks iFrameCountAsn ++ IF iFrameCountAsn > 6 iFrameCountAsn = 0 ENDIF IF bPanicking IF NOT IS_ENTITY_DEAD(piTarget) SET_PED_RESET_FLAG(piTarget, PRF_PanicInVehicle, TRUE) // PRINTLN("SETTING PANIC FLAG ON TARGET VIA PANIC CHECK") ENDIF ENDIF ENDPROC PROC UPDATE_HINT_CAMERAS() IF DOES_ENTITY_EXIST(piTarget) IF NOT IS_PED_INJURED(piTarget) CONTROL_PED_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, piTarget) ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles all ped update states PROC UPDATE_PED_STATES() //updates guard states and panic checks for the guards - throttles these to update one ped per frame for performance reasons UPDATE_MISSION_PED_STATES() IF NOT bAlerted IF NOT bPanicking //check for the player aggressively approaching the limo or setting off explosions around the hotel lobby IF DO_ADDITIONAL_HOTEL_PANIC_CHECKS(failType) bPanicking = TRUE PRINTLN("bPanicking = TRUE VIA DO_ADDITIONAL_HOTEL_PANIC_CHECKS - UPDATE_PED_STATES") ENDIF ENDIF ENDIF ENDPROC FUNC BOOL CHECK_FOR_PED_SEEING_PLAYER() INT idx REPEAT NUM_LIMO_GUARDS idx IF DOES_ENTITY_EXIST(piLimoGuard[idx]) AND NOT IS_ENTITY_DEAD(piLimoGuard[idx]) SET_PED_RESET_FLAG(piLimoGuard[idx], PRF_IgnoreTargetsCoverForLOS, TRUE) IF CAN_PED_SEE_HATED_PED(piLimoGuard[idx], PLAYER_PED_ID()) PRINTLN("LIMO GUARD HAS SPOTTED THE PLAYER: ", idx) RETURN TRUE ENDIF ENDIF ENDREPEAT REPEAT NUM_ESCORT_PEDS idx IF DOES_ENTITY_EXIST(piEscortPed[idx]) AND NOT IS_ENTITY_DEAD(piEscortPed[idx]) SET_PED_RESET_FLAG(piEscortPed[idx], PRF_IgnoreTargetsCoverForLOS, TRUE) IF CAN_PED_SEE_HATED_PED(piEscortPed[idx], PLAYER_PED_ID()) PRINTLN("ESCORT GUARD HAS SPOTTED THE PLAYER: ", idx) RETURN TRUE ENDIF ENDIF ENDREPEAT REPEAT NUM_BODYGUARDS idx IF DOES_ENTITY_EXIST(piBodyguard[idx]) AND NOT IS_ENTITY_DEAD(piBodyguard[idx]) SET_PED_RESET_FLAG(piBodyguard[idx], PRF_IgnoreTargetsCoverForLOS, TRUE) IF CAN_PED_SEE_HATED_PED(piBodyguard[idx], PLAYER_PED_ID()) PRINTLN("BODY GUARD HAS SPOTTED THE PLAYER: ", idx) RETURN TRUE ENDIF ENDIF ENDREPEAT RETURN FALSE ENDFUNC FUNC PED_INDEX GRAB_ANY_GUARD() PED_INDEX pedToSpeak INT idx REPEAT NUM_LIMO_GUARDS idx IF DOES_ENTITY_EXIST(piLimoGuard[idx]) AND NOT IS_PED_INJURED(piLimoGuard[idx]) pedToSpeak = piLimoGuard[idx] PRINTLN("FOUND PED TO SPEAK, LIMO GUARD INDEX = ", idx) ENDIF ENDREPEAT IF pedToSpeak = NULL REPEAT NUM_ESCORT_PEDS idx IF DOES_ENTITY_EXIST(piEscortPed[idx]) AND NOT IS_PED_INJURED(piEscortPed[idx]) pedToSpeak = piEscortPed[idx] PRINTLN("FOUND PED TO SPEAK, ESCORT GUARD INDEX = ", idx) ENDIF ENDREPEAT ENDIF IF pedToSpeak = NULL REPEAT NUM_BODYGUARDS idx IF DOES_ENTITY_EXIST(piBodyguard[idx]) AND NOT IS_PED_INJURED(piBodyguard[idx]) pedToSpeak = piBodyguard[idx] PRINTLN("FOUND PED TO SPEAK, BODY GUARD INDEX = ", idx) ENDIF ENDREPEAT ENDIF RETURN pedToSpeak ENDFUNC PROC HANDLE_SNIPER_ATTACK_BUFFER() // INT idx PED_INDEX pedToSpeak SWITCH iHandleSniperAttackStages CASE 0 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_ENTITY_DEAD(piLimoGuard[0]) TASK_CLEAR_LOOK_AT(piLimoGuard[0]) ENDIF IF NOT IS_ENTITY_DEAD(piLimoGuard[1]) TASK_CLEAR_LOOK_AT(piLimoGuard[1]) ENDIF pedToSpeak = GRAB_ANY_GUARD() // Try playing initial dialgoue first here. IF bPlayerUsedStickyBomb IF NOT bPlayIntialDialogue SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_EXPLO", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING EXPLOSION CONVO") bPlayIntialDialogue = TRUE ENDIF ENDIF ELSE IF NOT bTargetFleeing AND IS_PED_INJURED(piTarget) IF NOT bPlayIntialDialogue SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_SNIPE", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING SNIPE CONVO IN SNIPER ATTACK BUFFER CASE 0") bPlayIntialDialogue = TRUE ENDIF ENDIF ENDIF ENDIF IF NOT IS_TIMER_STARTED(tBufferTimer) START_TIMER_NOW(tBufferTimer) PRINTLN("STARTING TIMER - tBufferTimer") ELSE RESTART_TIMER_NOW(tBufferTimer) PRINTLN("RESTARTING TIMER - tBufferTimer") ENDIF PRINTLN("iHandleSniperAttackStages = 1") iHandleSniperAttackStages = 1 ENDIF BREAK //------------------------------------------------------------------------------------------------------------------- CASE 1 PRINTLN("iHandleSniperAttackStages = 2") iHandleSniperAttackStages = 2 BREAK //------------------------------------------------------------------------------------------------------------------- CASE 2 IF bPlayIntialDialogue OR NOT IS_PED_INJURED(piTarget) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT bPlayerUsedStickyBomb // Dialogue doesn't quite work with stick bomb kill IF NOT bPlayedSearchDialogue pedToSpeak = GRAB_ANY_GUARD() SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_LOOK", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING LOOK CONVO") bPlayedSearchDialogue = TRUE ENDIF ELSE IF NOT bTargetDeadLinePlayed AND IS_PED_INJURED(piTarget) pedToSpeak = GRAB_ANY_GUARD() PLAY_TARGET_DEAD_LINE(pedToSpeak) //bTargetDeadLinePlayed = TRUE gets set inside this function ENDIF ENDIF ENDIF ELSE IF bPlayerUsedStickyBomb IF NOT bPlayIntialDialogue SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_EXPLO", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING EXPLOSION CONVO") bPlayIntialDialogue = TRUE ENDIF ENDIF ELSE IF NOT bTargetFleeing IF NOT bPlayIntialDialogue SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") IF CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_SNIPE", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING SNIPE CONVO IN SNIPER ATTACK BUFFER CASE 2") bPlayIntialDialogue = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF // IF bAlertedSpecial // fPanicTime = 22.0 //// PRINTLN("fPanicTime = 22.0") // ELSE // fPanicTime = 15.0 //// PRINTLN("fPanicTime = 15.0") // ENDIF IF IS_ENTITY_IN_SAFE_LOCATION(Player) fPanicTime = 2.5 ELSE fPanicTime = 5.0 ENDIF IF IS_TIMER_STARTED(tBufferTimer) IF (GET_TIMER_IN_SECONDS(tBufferTimer) > fPanicTime AND CHECK_FOR_PED_SEEING_PLAYER()) OR IS_PED_SHOOTING(PLAYER_PED_ID()) KILL_ANY_CONVERSATION() // CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_SPOT", CONV_PRIORITY_VERY_HIGH) //moved this to the part where we trigger the score IF NOT bPanicking bPanicking = TRUE bBufferHit = TRUE PRINTLN("bPanicking = TRUE VIA - HANDLE_SNIPER_ATTACK_BUFFER") ENDIF bAlerted = FALSE PRINTLN("bAlerted = FALSE") ENDIF ENDIF BREAK //------------------------------------------------------------------------------------------------------------------- CASE 3 BREAK ENDSWITCH ENDPROC PROC REMOVE_LIMO_GUARDS() INT idx REPEAT NUM_LIMO_GUARDS idx IF DOES_ENTITY_EXIST(piLimoGuard[idx]) // DELETE_PED(piLimoGuard[idx]) SET_PED_AS_NO_LONGER_NEEDED(piLimoGuard[idx]) PRINTLN("SETTING NO LONGER NEEDED - LIMO PED: ", idx) ENDIF ENDREPEAT ENDPROC PROC REMOVE_TARGET_CAR() IF DOES_ENTITY_EXIST(viTargetCar) // DELETE_VEHICLE(viTargetCar) SET_VEHICLE_AS_NO_LONGER_NEEDED(viTargetCar) PRINTLN("SETTING viTargetCar as no longer needed!") ENDIF ENDPROC PROC REMOVE_TARGET_AND_BLIP() IF DOES_ENTITY_EXIST(piTarget) // DELETE_PED(piTarget) SET_PED_AS_NO_LONGER_NEEDED(piTarget) PRINTLN("SETTING TARGET NO LONGER NEEDED") ENDIF IF DOES_BLIP_EXIST(bTargetBlip) REMOVE_BLIP(bTargetBlip) PRINTLN("REMOVING bTargetBlip") ENDIF ENDPROC PROC REMOVE_BODYGUARDS() INT idx REPEAT NUM_BODYGUARDS idx IF DOES_ENTITY_EXIST(piBodyguard[idx]) // DELETE_PED(piBodyguard[idx]) SET_PED_TO_LOAD_COVER(piBodyguard[idx], FALSE) SET_PED_AS_NO_LONGER_NEEDED(piBodyguard[idx]) PRINTLN("SETTING piBodyguard[idx] No Longer Needed!") ENDIF ENDREPEAT ENDPROC /// PURPOSE: Create the motorcade car and bike vehicles PROC REMOVE_MOTORCADE_FOLLOW_CAR() IF DOES_ENTITY_EXIST(viEscortCar) // DELETE_VEHICLE(viEscortCar) SET_VEHICLE_AS_NO_LONGER_NEEDED(viEscortCar) PRINTLN("SETTING viEscortCar as no longer needed!") ENDIF ENDPROC PROC REMOVE_MOTORCADE_PEDS() INT tempInt REPEAT NUM_ESCORT_PEDS tempInt IF DOES_ENTITY_EXIST(piEscortPed[tempInt]) // DELETE_PED(piEscortPed[tempInt]) SET_PED_AS_NO_LONGER_NEEDED(piEscortPed[tempInt]) PRINTLN("SETTING piEscortPed[idx] No Longer Needed!") ENDIF ENDREPEAT ENDPROC PROC GO_TO_CHECKPOINT_1() // If we're skipping to this stage load all that's needed or delete what's not. #IF IS_DEBUG_BUILD IF bDoingPSkip OR bDoingJSkip SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1510.1810, -946.9595, 8.2738>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 325.8271) PRINTLN("REPOSITIONING PLAYER FOR GO_TO_CHECKPOINT_1") SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() // bDebugSkipping = TRUE //limo pulling up to the hotel REQUEST_VEHICLE_RECORDING(102, "ASSOJva") //limo driving into the hotel REQUEST_VEHICLE_RECORDING(107, "ASSOJva") REQUEST_MODEL(FBI2) INITIALIZE_NEXT_STAGE() bHotelTimerStarted = FALSE bHotelTimerExpired = FALSE bTaxiLeave = FALSE bDriveToLimo = FALSE bAlerted = FALSE bBufferHit = FALSE bPlayerUsedSniperRifle = FALSE bGaveAbandondedWarning = FALSE REMOVE_LIMO_GUARDS() REMOVE_TARGET_CAR() REMOVE_TARGET_AND_BLIP() REMOVE_BODYGUARDS() REMOVE_MOTORCADE_FOLLOW_CAR() REMOVE_MOTORCADE_PEDS() iHandleSniperAttackStages = 0 // IF bFirstCheckpointSceneLoad // bFirstCheckpointSceneLoad = FALSE // ENDIF iCutsceneStage = 0 WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(102, "ASSOJva") //limo pulling up to the hotel lobby OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(107, "ASSOJva") //limo driving up to the hotel OR NOT HAS_MODEL_LOADED(FBI2) WAIT(0) PRINTLN("P-SKIPPING: WAITING RECORDING TO LOAD") ENDWHILE bDoingPSkip = FALSE ENDIF #ENDIF // HANDLE_REPLAY_WEAPON_EQUIP() END_REPLAY_SETUP() SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() //fade in the game from the mission retry screen FADE_IN() PRINTLN("GOING TO STAGE - STAGE_GET_TO_HOTEL") MainStage = STAGE_GET_TO_HOTEL ENDPROC PROC GO_TO_CHECKPOINT_2() INT idx // If we're skipping to this stage load all that's needed or delete what's not. #IF IS_DEBUG_BUILD IF bDoingPSkip OR bDoingJSkip SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1266.1729, -214.0011, 41.4459>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 310.0126) PRINTLN("REPOSITIONING PLAYER FOR GO_TO_CHECKPOINT_2") // bDebugSkipping = TRUE CLEANUP_DEST_BLIPS() //limo pulling up to the hotel REQUEST_WAYPOINT_RECORDING("OJASva_101") REQUEST_WAYPOINT_RECORDING("OJASva_101a") REQUEST_WAYPOINT_RECORDING("OJASva_104") INITIALIZE_NEXT_STAGE() REMOVE_LIMO_GUARDS() REMOVE_TARGET_CAR() REMOVE_TARGET_AND_BLIP() REMOVE_BODYGUARDS() REMOVE_MOTORCADE_FOLLOW_CAR() REMOVE_MOTORCADE_PEDS() iCutsceneStage = 0 bHotelTimerStarted = FALSE bHotelTimerExpired = FALSE bTaxiLeave = FALSE bDriveToLimo = FALSE bLeaveInLimo = FALSE bAlerted = FALSE bBufferHit = FALSE bPlayerUsedSniperRifle = FALSE // bDoNotRunPanicCheck = FALSE // bGaveSecondWarning = FALSE bPanickedExtras = FALSE bPlayedSearchDialogue = FALSE bPlayIntialDialogue = FALSE bAlertedSpecial = FALSE bPrepareLostCue = FALSE bTriggeredLastCue = FALSE iHandleSniperAttackStages = 0 iGuardAimingState = 0 iTargetPanicLine = 0 fPanicTime = 0 bPanicking = FALSE bInPursuit = FALSE bTargetLeaving = FALSE TargetState = TS_ENTER_LIMO REPEAT NUM_LIMO_GUARDS idx LimoGuardState[idx] = LGS_WALK_TO_POSTS ENDREPEAT REPEAT NUM_ESCORT_PEDS idx EscortState[idx] = ES_WAITING ENDREPEAT REPEAT NUM_BODYGUARDS idx BodyGuardState[idx] = BS_WALK_WITH_TARGET ENDREPEAT // IF bSecondCheckpointSceneLoad // bSecondCheckpointSceneLoad = FALSE // ENDIF WHILE NOT ARE_MODELS_LOADED_FOR_GUARDS() WAIT(0) ENDWHILE CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) //area around where the limo pulls up CREATE_TARGET_CAR() CREATE_CUTSCENE_PEDS() WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101") //limo pulling up to the hotel lobby AND NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101a") OR iExtraCreationStages < 2 CREATE_EXTRAS() WAIT(0) PRINTLN("P-SKIPPING: WAITING FOR SCENE TO LOAD") ENDWHILE bDoingPSkip = FALSE ENDIF #ENDIF WHILE iExtraCreationStages < 2 CREATE_EXTRAS() WAIT(0) PRINTLN("P-SKIPPING: WAITING FOR SCENE TO LOAD") ENDWHILE CREATE_TARGET_CAR() HANDLE_GUARD_CUTSCENE_SKIP(FALSE) IF NOT IS_BIT_SET(g_replay.iReplayBits, ENUM_TO_INT(RB_REPLAY_SETUP_STARTED)) REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() ENDIF bPlayedTargetLine = FALSE bTargetKillLinePlayed = FALSE // HANDLE_REPLAY_WEAPON_EQUIP() CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0) SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID()) TRIGGER_MUSIC_EVENT("ASS1_RESTART1") PRINTLN("TRIGGERING MUSIC - ASS1_RESTART1") WHILE NOT ARE_MODELS_LOADED_FOR_GUARDS() WAIT(0) ENDWHILE END_REPLAY_SETUP() SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() //fade in the game from the mission retry screen MainStage = STAGE_PLANT_BOMB PRINTLN("MainStage = STAGE_PLANT_BOMB") FADE_IN() ENDPROC PROC PLACE_TARGET_IN_CAR() IF DOES_ENTITY_EXIST(piTarget) AND DOES_ENTITY_EXIST(viTargetCar) IF NOT IS_ENTITY_DEAD(piTarget) AND IS_VEHICLE_DRIVEABLE(viTargetCar) SET_PED_INTO_VEHICLE(piTarget, viTargetCar, VS_BACK_LEFT) PRINTLN("PLACING TARGET INTO CAR") ENDIF ENDIF ENDPROC PROC PLACE_BODYGUARD_IN_CAR() IF DOES_ENTITY_EXIST(piBodyguard) AND DOES_ENTITY_EXIST(viTargetCar) IF NOT IS_ENTITY_DEAD(piBodyguard) AND IS_VEHICLE_DRIVEABLE(viTargetCar) SET_PED_INTO_VEHICLE(piBodyguard, viTargetCar, VS_BACK_RIGHT) PRINTLN("PLACING BODYGUARD INTO CAR") ENDIF ENDIF ENDPROC PROC PLACE_ESCORTS_IN_CAR() IF DOES_ENTITY_EXIST(piEscortPed[0]) AND DOES_ENTITY_EXIST(viEscortCar) IF NOT IS_ENTITY_DEAD(piEscortPed[0]) AND IS_VEHICLE_DRIVEABLE(viEscortCar) SET_PED_INTO_VEHICLE(piEscortPed[0], viEscortCar) PRINTLN("SETTING ESCORT PED 0 INTO VEHICLE") ENDIF ENDIF IF DOES_ENTITY_EXIST(piEscortPed[1]) AND DOES_ENTITY_EXIST(viEscortCar) IF NOT IS_ENTITY_DEAD(piEscortPed[1]) AND IS_VEHICLE_DRIVEABLE(viEscortCar) SET_PED_INTO_VEHICLE(piEscortPed[1], viEscortCar, VS_FRONT_RIGHT) PRINTLN("SETTING ESCORT PED 0 INTO VEHICLE") ENDIF ENDIF ENDPROC PROC PLACE_LIMO_GUARDS_IN_CAR() IF DOES_ENTITY_EXIST(piLimoGuard[0]) AND NOT IS_ENTITY_DEAD(piLimoGuard[0]) AND DOES_ENTITY_EXIST(viTargetCar) AND IS_VEHICLE_DRIVEABLE(viTargetCar) SET_PED_INTO_VEHICLE(piLimoGuard[0], viTargetCar, VS_DRIVER) PRINTLN("SETTING piLimoGuard[0] INTO VEHICLE") ENDIF IF DOES_ENTITY_EXIST(piLimoGuard[1]) AND NOT IS_ENTITY_DEAD(piLimoGuard[1]) AND DOES_ENTITY_EXIST(viTargetCar) AND IS_VEHICLE_DRIVEABLE(viTargetCar) SET_PED_INTO_VEHICLE(piLimoGuard[1], viTargetCar, VS_FRONT_RIGHT) PRINTLN("SETTING piLimoGuard[1] INTO VEHICLE") ENDIF IF DOES_ENTITY_EXIST(piLimoGuard[2]) AND NOT IS_ENTITY_DEAD(piLimoGuard[2]) AND DOES_ENTITY_EXIST(viEscortCar) AND IS_VEHICLE_DRIVEABLE(viEscortCar) SET_PED_INTO_VEHICLE(piLimoGuard[2], viEscortCar, VS_BACK_RIGHT) PRINTLN("SETTING piLimoGuard[3] INTO VEHICLE") ENDIF ENDPROC //PROC GO_TO_CHECKPOINT_3() // INT idx // // SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1262.3417, -245.4084, 41.4460>>) // SET_ENTITY_HEADING(PLAYER_PED_ID(), 295.7458) // SET_GAMEPLAY_CAM_RELATIVE_HEADING() // // // If we're skipping to this stage load all that's needed or delete what's not. // #IF IS_DEBUG_BUILD // IF bDoingPSkip OR bDoingJSkip // // bDebugSkipping = TRUE // // PRINTLN("INSIDE P-SKIP") // // CLEANUP_DEST_BLIPS() // // //limo pulling up to the hotel // REQUEST_WAYPOINT_RECORDING("OJASva_101") // REQUEST_WAYPOINT_RECORDING("OJASva_101a") // REQUEST_WAYPOINT_RECORDING("OJASva_104") // REQUEST_MODEL(FBI2) // // INITIALIZE_NEXT_STAGE() // REMOVE_LIMO_GUARDS() // REMOVE_TARGET_CAR() // REMOVE_TARGET_AND_BLIP() // REMOVE_BODYGUARDS() // REMOVE_MOTORCADE_FOLLOW_CAR() // REMOVE_MOTORCADE_PEDS() // CLEANUP_EXTRAS() // iCutsceneStage = 0 // // bHotelTimerExpired = TRUE // bAlerted = FALSE // bPlayerUsedSniperRifle = FALSE // // iHandleSniperAttackStages = 0 // // IF bThirdCheckpointSceneLoad // bThirdCheckpointSceneLoad = FALSE // ENDIF // // CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) //area around where the limo pulls up // // WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101") //limo pulling up to the hotel lobby // AND NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101a") // OR NOT HAS_MODEL_LOADED(FBI2) // WAIT(0) // PRINTLN("P-SKIPPING: WAITING FOR SCENE TO LOAD") // ENDWHILE // // bDoingPSkip = FALSE // ENDIF // #ENDIF // // IF NOT bDebugSkipping // IF NOT bThirdCheckpointSceneLoad // IF IS_SCREEN_FADED_OUT() // NEW_LOAD_SCENE_START_SPHERE(<< -635.2563, -1212.3376, 11.4140 >>, 10.0) // bThirdCheckpointSceneLoad = TRUE // PRINTLN("ASSASSINATION HOTEL CHECKPOINT 3: CALLING NEW_LOAD_SCENE_START_SPHERE") // ELSE // PRINTLN("ASSASSINATION HOTEL CHECKPOINT 3: SCREEN IS NOT FADED OUT") // ENDIF // ELSE // PRINTLN("ASSASSINATION HOTEL CHECKPOINT 3: bFirstCheckpointSceneLoad IS TRUE") // ENDIF // // WHILE NOT IS_NEW_LOAD_SCENE_LOADED() // WAIT(0) // PRINTLN("WAITING FOR SCENE TO LOAD - 3") // ENDWHILE // // PRINTLN("ASSASSINATION HOTEL: SCENE HAS LOADED") // NEW_LOAD_SCENE_STOP() // ENDIF // // // Target // CREATE_TARGET_CAR() // SET_ENTITY_COORDS(viTargetCar, vTargetCarLobbyPos) // SET_ENTITY_HEADING(viTargetCar, fTargetCarLobbyHead) // // // Escort Peds // CREATE_MOTORCADE_ACTORS_AND_VEHICLE() // SET_ENTITY_COORDS(viEscortCar, vEscortCarPosition) // SET_ENTITY_HEADING(viEscortCar, fEscortCarHeading) // // // Limo Guards // CREATE_LIMO_GUARDS() // PLACE_LIMO_GUARDS_IN_CAR() // // bPanicking = FALSE // bAlerted = FALSE // // TargetState = TS_ENTER_LIMO // // REPEAT NUM_LIMO_GUARDS idx // LimoGuardState[idx] = LGS_LEAVE_IN_LIMO // ENDREPEAT // REPEAT NUM_ESCORT_PEDS idx // EscortState[idx] = ES_PROTECT // ENDREPEAT // REPEAT NUM_BODYGUARDS idx // BodyGuardState[idx] = BS_WALK_WITH_TARGET // ENDREPEAT // // bLeftHotel = TRUE // //// HANDLE_REPLAY_WEAPON_EQUIP() // // //fade in the game from the mission retry screen // // MainStage = STAGE_TARGET_LEAVE_LOBBY // PRINTLN("MainStage = STAGE_TARGET_LEAVE_LOBBY") // FADE_IN() //ENDPROC PROC GO_TO_CHECKPOINT_4() // If we're skipping to this stage load all that's needed or delete what's not. #IF IS_DEBUG_BUILD IF bDoingPSkip OR bDoingJSkip SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1184.2440, -319.2575, 36.7445>>) SET_ENTITY_HEADING(PLAYER_PED_ID(), 26.0711) PRINTLN("REPOSITIONING PLAYER FOR GO_TO_CHECKPOINT_4") // bDebugSkipping = TRUE PRINTLN("INSIDE P-SKIP") CLEANUP_DEST_BLIPS() //limo pulling up to the hotel REQUEST_WAYPOINT_RECORDING("OJASva_101") REQUEST_WAYPOINT_RECORDING("OJASva_101a") REQUEST_WAYPOINT_RECORDING("OJASva_104") REQUEST_MODEL(FBI2) // INITIALIZE_NEXT_STAGE() REMOVE_LIMO_GUARDS() REMOVE_TARGET_CAR() REMOVE_TARGET_AND_BLIP() REMOVE_BODYGUARDS() REMOVE_MOTORCADE_FOLLOW_CAR() REMOVE_MOTORCADE_PEDS() iCutsceneStage = 0 bHotelTimerExpired = TRUE bAlerted = FALSE bPlayerUsedSniperRifle = FALSE bBufferHit = FALSE iHandleSniperAttackStages = 0 CLEAR_AREA_OF_VEHICLES(<< -1220.57, -185.96, 38.40 >>, 50) //area around where the limo pulls up WHILE NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101") //limo pulling up to the hotel lobby AND NOT GET_IS_WAYPOINT_RECORDING_LOADED("OJASva_101a") OR NOT HAS_MODEL_LOADED(FBI2) WAIT(0) PRINTLN("P-SKIPPING: WAITING FOR SCENE TO LOAD") ENDWHILE bDoingPSkip = FALSE ENDIF #ENDIF TRIGGER_MUSIC_EVENT("ASS1_STOP") PRINTLN("TRIGGERING MUSIC - ASS1_STOP") IF NOT IS_BIT_SET(g_replay.iReplayBits, ENUM_TO_INT(RB_REPLAY_SETUP_STARTED)) REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() ENDIF //fade in the game from the mission retry screen END_REPLAY_SETUP() SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() MainStage = STAGE_MISSION_PASSED PRINTLN("MainStage = STAGE_MISSION_PASSED") FADE_IN() ENDPROC PROC CHECK_FOR_LESTER_DEATH() IF DOES_ENTITY_EXIST(piLester) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piLester, PLAYER_PED_ID()) // IF IS_ENTITY_DEAD(pedLester) OR IS_PED_INJURED(pedLester) PRINTLN("FAILING - FT_LESTER_ATTACKED") SET_MISSION_FAILED(FT_LESTER_ATTACKED) // ELSE // PRINTLN("LESTER IS OKAY") // ENDIF ELSE // PRINTLN("PLAYER HAS NOT DAMAGED LESTER") ENDIF ELSE PRINTLN("LESTER DOES NOT EXIST") ENDIF ENDPROC PROC DELETE_LESTER() IF DOES_ENTITY_EXIST(piLester) DELETE_PED(piLester) ENDIF ENDPROC PROC UPDATE_LESTER() SEQUENCE_INDEX tempSeq IF DOES_ENTITY_EXIST(piLester) CHECK_FOR_LESTER_DEATH() IF NOT IS_PED_INJURED(piLester) FLOAT fLesterDistFromPlayer = GET_PLAYER_DISTANCE_FROM_ENTITY(piLester) SET_PED_CAN_PLAY_AMBIENT_ANIMS(piLester, FALSE) SET_PED_CAN_PLAY_AMBIENT_BASE_ANIMS(piLester, FALSE) SET_PED_CAN_BE_TARGETTED(piLester, FALSE) SET_RAGDOLL_BLOCKING_FLAGS(piLester, RBF_PLAYER_IMPACT) SET_PED_CONFIG_FLAG(piLester, PCF_DisableExplosionReactions, TRUE) IF fLesterDistFromPlayer < 5 IF IS_TIMER_STARTED(tLesterTimer) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF TIMER_DO_ONCE_WHEN_READY(tLesterTimer, 10) ADD_PED_FOR_DIALOGUE(hotelConv, 3, piLester, "LESTER") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJAS_FOLLOW", CONV_PRIORITY_VERY_HIGH) ENDIF ENDIF ENDIF ELIF fLesterDistFromPlayer > 100 IF IS_ENTITY_OCCLUDED(piLester) OR NOT IS_ENTITY_ON_SCREEN(piLester) DELETE_LESTER() ENDIF ENDIF SWITCH iLesterUpdateStages CASE 0 IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF IS_PED_SHOOTING(PLAYER_PED_ID()) OR ( DOES_ENTITY_EXIST(piLester) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piLester, PLAYER_PED_ID()) ) OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(oFailSafeBench, PLAYER_PED_ID()) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(oFailSafeBench, PLAYER_PED_ID()) PRINTLN("WE DAMAGED THE BENCH") ENDIF SET_PED_MOVEMENT_CLIPSET(piLester, "move_lester_CaneUp") TASK_PLAY_ANIM(piLester, "oddjobs@assassinate@hotel@leadin", "Lester_Getup", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION) PRINTLN("iLesterUpdateStages = 1") iLesterUpdateStages = 1 ENDIF ENDIF BREAK CASE 1 IF IS_ENTITY_PLAYING_ANIM(piLester, "oddjobs@assassinate@hotel@leadin", "Lester_Getup") IF GET_ENTITY_ANIM_CURRENT_TIME(piLester, "oddjobs@assassinate@hotel@leadin", "Lester_Getup") >= 0.376 OPEN_SEQUENCE_TASK(tempSeq) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1502.02856, -948.68701, 7.65061>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, 1.0, ENAV_NO_STOPPING) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1462.3389, -964.1780, 6.3394>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_NEVER_WARP, 1.0, ENAV_NO_STOPPING) TASK_WANDER_STANDARD(NULL, GET_ENTITY_HEADING(piLester)) CLOSE_SEQUENCE_TASK(tempSeq) TASK_PERFORM_SEQUENCE(piLester, tempSeq) CLEAR_SEQUENCE_TASK(tempSeq) FORCE_PED_MOTION_STATE(piLester, MS_ON_FOOT_WALK) PRINTLN("iLesterUpdateStages = 2") iLesterUpdateStages = 2 ENDIF ENDIF BREAK CASE 2 BREAK ENDSWITCH ENDIF ENDIF ENDPROC PROC PLAY_SPOTTED_DIALOGUE_FROM_CLOSEST_GUARD() PED_INDEX pedToSpeak IF bBufferHit pedToSpeak = GET_CLOSEST_GUARD() IF NOT IS_PED_INJURED(pedToSpeak) SETUP_PED_FOR_DIALOGUE(pedToSpeak, 3, "OJAvaGUARD") CREATE_CONVERSATION(hotelConv, "OJASAUD", "OJASva_SPOT", CONV_PRIORITY_VERY_HIGH) ENDIF ENDIF ENDPROC /// PURPOSE: /// Make sure that the player's last vehicle is set as a mission entity so that it wont get cleared up aggeressively by garbage collection while on the mission /// Stores off the last 3 vehicles so that we can also use this function to detect if the player haws parked any cars inside the alley to try and break the escort car pulling up PROC SAVE_LAST_PLAYER_VEHICLES() VEHICLE_INDEX vehLast IF MainStage > STAGE_GET_TO_HOTEL IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehLast = GET_LAST_DRIVEN_VEHICLE() IF DOES_ENTITY_EXIST(vehLast) IF IS_VEHICLE_DRIVEABLE(vehLast) IF vehLast != viLastDriven[0] AND vehLast != viLastDriven[1] AND vehLast != viLastDriven[2] //reset this if we've already stored off 3 vehicles IF iLastStoredVehicleIdx >= 2 iLastStoredVehicleIdx = -1 ENDIF viLastDriven[iLastStoredVehicleIdx + 1] = vehLast SET_ENTITY_AS_MISSION_ENTITY(viLastDriven[iLastStoredVehicleIdx + 1]) SET_VEHICLE_HAS_BEEN_DRIVEN_FLAG(viLastDriven[iLastStoredVehicleIdx + 1], FALSE) PRINTLN("SETTING PLAYERS LAST VEHICLE_AS MISSION ENTITY") //increment this iLastStoredVehicleIdx += 1 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC PROC HANDLE_FIND_BENCH() IF NOT DOES_ENTITY_EXIST(oFailSafeBench) oFailSafeBench = GET_CLOSEST_OBJECT_OF_TYPE(<< -1510.1029, -947.7194, 8.2332 >>, 5, prop_bench_08) PRINTLN("FOUND BENCH") ENDIF ENDPROC // ----------------------------------- // MAIN SCRIPT // ----------------------------------- PROC Update_Loop() //handles triggering of musical score change on target kill IF NOT bTriggerAlertMusic IF MainStage > STAGE_KILL_CAM TRIGGER_MUSIC_EVENT("ASS1_ALERT") PRINTLN("TRIGGERING MUSIC - ASS1_ALERT") bTriggerAlertMusic = TRUE ENDIF ENDIF //handles guard line if spotted and triggers musical score change IF NOT bTriggerAlertMessage IF bPanicking AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PLAY_SPOTTED_DIALOGUE_FROM_CLOSEST_GUARD() bTriggerAlertMessage = TRUE IF NOT bTriggerAlertMusic TRIGGER_MUSIC_EVENT("ASS1_ALERT") PRINTLN("TRIGGERING MUSIC - ASS1_ALERT - 1") bTriggerAlertMusic = TRUE ENDIF ENDIF ENDIF //handles the saving of vehicles driven by the player so that they don't get aggressively cleaned up while the mission is active (to fix bug 1505704 - 6/24/13 - MB) //also stores off the last 3 vehicles the player has driven to check if they've parked them in teh alley SAVE_LAST_PLAYER_VEHICLES() SWITCH MainStage CASE STAGE_INTRO_CUTSCENE IF Is_Replay_In_Progress() MainStage = STAGE_INIT BREAK ENDIF HANDLE_FIND_BENCH() DO_STAGE_INTRO_CUTSCENE() BREAK CASE STAGE_INIT IF Is_Replay_In_Progress() IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() PRINTLN("REPLAY VEHICLE IS AVAILABLE - HOTEL") bReplayVehicleAvailable = TRUE ELSE PRINTLN("REPLAY VEHICLE IS NOT AVAILABLE") ENDIF bReplaying = TRUE ENDIF INITIALIZE_VARIABLES() SETUP_UI_LABELS() SETUP_MISSION_PARAMS() SET_LOW_DENSITY_HOTEL_TRAFFIC(TRUE) REQUEST_STREAMS() //don't do wanted checks in aggro en route to the hotel(to fix Bug 1202878 - 3/18/13 - MB) SET_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_Wanted) MainStage = STAGE_STREAMING PRINTLN("OJASHOTEL - MainStage = STAGE_STREAMING") BREAK CASE STAGE_STREAMING IF VEHICLES_RECORDINGS_AND_ANIMS_LOADED() MainStage = STAGE_SPAWNING PRINTLN("OJASHOTEL - MainStage = STAGE_SPAWNING") ENDIF BREAK CASE STAGE_SPAWNING CREATE_CAMERAS() ADD_PARKED_CARS_TO_GARAGE() IF bReplaying IF g_savedGlobals.sAssassinData.fHotelMissionTime <> 0 RESTART_TIMER_AT(tMissionTimer, g_savedGlobals.sAssassinData.fHotelMissionTime) PRINTLN("RESTARTING TIMER - tMissionTimer AT: ", g_savedGlobals.sAssassinData.fHotelMissionTime) ENDIF iStageToUse = Get_Replay_Mid_Mission_Stage() PRINTLN("iStageToUse = ", iStageToUse) IF g_bShitskipAccepted IF iStageToUse <= 2 iStageToUse = (iStageToUse + 1) PRINTLN("SHIT SKIP: iStageToUse = ", iStageToUse) ENDIF ENDIF //player has accepted package IF iStageToUse = 0 GO_TO_CHECKPOINT_1() ELIF iStageToUse = 1 GO_TO_CHECKPOINT_2() ELIF iStageToUse = 2 GO_TO_CHECKPOINT_4() ENDIF ELSE IF NOT IS_TIMER_STARTED(tMissionTimer) START_TIMER_NOW(tMissionTimer) PRINTLN("STARTING TIMER - tMissionTimer") g_savedGlobals.sAssassinData.fHotelMissionTime = 0 PRINTLN("HOTEL GLOBAL MISSION TIMER = ", g_savedGlobals.sAssassinData.fHotelMissionTime) ENDIF MainStage = STAGE_GET_TO_HOTEL PRINTLN("OJASHOTEL - MainStage = STAGE_GET_TO_HOTEL") ENDIF BREAK CASE STAGE_GET_TO_HOTEL UPDATE_LESTER() DO_STAGE_GET_TO_HOTEL() BREAK CASE STAGE_GUARD_CUTSCENE DO_STAGE_GUARD_CUTSCENE() BREAK CASE STAGE_PLANT_BOMB UPDATE_LESTER() CHECK_FOR_PLAYER_BLOCKING_WITH_VEHICLES() DO_STAGE_PLANT_BOMB() BREAK CASE STAGE_GUARDS_GO_TO_POSTS CHECK_FOR_PLAYER_BLOCKING_WITH_VEHICLES() DO_STAGE_GUARDS_GO_TO_POSTS() BREAK CASE STAGE_TARGET_LEAVE_LOBBY DO_STAGE_TARGET_LEAVE_LOBBY() CHECK_FOR_TARGET_KILL() BREAK CASE STAGE_ENTER_LIMO DO_STAGE_ENTER_LIMO() CHECK_FOR_TARGET_KILL() BREAK CASE STAGE_LEAVE_HOTEL DO_STAGE_LEAVE_HOTEL() CHECK_FOR_TARGET_KILL() BREAK CASE STAGE_KILL_CAM DO_STAGE_KILL_CAM() BREAK CASE STAGE_EVADE_POLICE DO_STAGE_EVADE_POLICE() BREAK CASE STAGE_LEAVE_AREA DO_STAGE_LEAVE_AREA() BREAK CASE STAGE_MISSION_PASSED DO_STAGE_MISSION_PASSED() BREAK ENDSWITCH ENDPROC PROC DO_FADE_OUT_WITH_WAIT() IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME) WHILE NOT IS_SCREEN_FADED_OUT() WAIT(0) ENDWHILE ENDIF ENDPROC PROC JUMP_TO_STAGE(Assassin_Stages stage, BOOL bIsDebugJump = FALSE) DO_FADE_OUT_WITH_WAIT() //Update mission checkpoint in case they skipped the stages where it gets set. IF bIsDebugJump SWITCH STAGE CASE STAGE_GET_TO_HOTEL GO_TO_CHECKPOINT_1() BREAK CASE STAGE_PLANT_BOMB GO_TO_CHECKPOINT_2() BREAK CASE STAGE_MISSION_PASSED GO_TO_CHECKPOINT_4() BREAK ENDSWITCH ENDIF ENDPROC // debug only #IF IS_DEBUG_BUILD PROC INITIALIZE_JSKIP() RENDER_SCRIPT_CAMS(FALSE, TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) CLEAR_HELP(TRUE) ENDPROC // debug: skips PROC DO_DEBUG_SKIPS() Assassin_Stages eStage IF LAUNCH_MISSION_STAGE_MENU(sSkipMenu, iDebugJumpStage) IF iDebugJumpStage = 0 eStage = STAGE_GET_TO_HOTEL PRINTLN("Z MENU: eStage = STAGE_GET_TO_HOTEL") ELIF iDebugJumpStage = 1 eStage = STAGE_PLANT_BOMB PRINTLN("Z MENU: eStage = STAGE_PLANT_BOMB") ENDIF bDoingPSkip = TRUE JUMP_TO_STAGE(eStage, TRUE) ENDIF // Debug Key: Check for Pass IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID()) MainStage = STAGE_MISSION_PASSED ENDIF // Debug Key: Check for Fail IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) SET_MISSION_FAILED(FT_ABANDONED) ENDIF // skip stage P IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P) bDoingPSkip = TRUE IF MainStage > STAGE_SPAWNING AND MainStage < STAGE_MISSION_PASSED IF MainStage > STAGE_SPAWNING AND MainStage <= STAGE_GUARDS_GO_TO_POSTS eStage = STAGE_GET_TO_HOTEL PRINTLN("eStage = STAGE_GET_TO_HOTEL") ELIF MainStage > STAGE_GUARDS_GO_TO_POSTS AND MainStage < STAGE_MISSION_PASSED eStage = STAGE_PLANT_BOMB PRINTLN("eStage = STAGE_PLANT_BOMB") ENDIF //TODO add cleanup JUMP_TO_STAGE(eStage, TRUE) ENDIF ENDIF // skip stage J IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J) bDoingJSkip = TRUE IF MainStage > STAGE_SPAWNING AND MainStage < STAGE_MISSION_PASSED IF MainStage = STAGE_GET_TO_HOTEL eStage = STAGE_PLANT_BOMB PRINTLN("J-SKIP: eStage = STAGE_PLANT_BOMB") ELIF MainStage >= STAGE_PLANT_BOMB eStage = STAGE_MISSION_PASSED PRINTLN("J-SKIP: eStage = STAGE_MISSION_PASSED") ENDIF //TODO add cleanup JUMP_TO_STAGE(eStage, TRUE) ENDIF ENDIF ENDPROC #ENDIF //PROC CHECK_FOR_ACTION_MODE() // IF NOT bSetActionMode // IF bPanicking // IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND NOT IS_PED_INJURED(PLAYER_PED_ID()) // SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE, -1) // ENDIF // PRINTLN("SETTING ACTION MODE ON THE PLAYER") // bSetActionMode = TRUE // ENDIF // ENDIF //ENDPROC //FUNC BOOL IS_PLAYER_ARMED() // WEAPON_TYPE wtCurrentWeapon // // IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wtCurrentWeapon) // IF wtCurrentWeapon = WEAPONTYPE_UNARMED // OR wtCurrentWeapon = WEAPONTYPE_INVALID // PRINTLN("PLAYER IS UNARMED") // RETURN FALSE // ELSE // PRINTLN("PLAYER IS ARMED") // ENDIF // ELSE // PRINTLN("PLAYER HAS NOTHING") // ENDIF // // RETURN TRUE //ENDFUNC // Initialisation and the script loop SCRIPT // Handles the player being busted or arrested, or if the player // jumps into Multiplayer from Singleplayer – ensures the script // gets cleaned up properly under the correct circumstances IF (HAS_FORCE_CLEANUP_OCCURRED()) DEBUG_MESSAGE("FORCE CLEANUP HAS OCCURRED!!!") TRIGGER_MUSIC_EVENT("ASS1_FAIL") PRINTLN("TRIGGERING MUSIC - ASS1_FAIL - 02") SET_BITMASK_AS_ENUM(g_savedGlobals.sAssassinData.iGenericData, ACD_FAILED) Mission_Flow_Mission_Force_Cleanup() Script_Cleanup() ENDIF SET_MISSION_FLAG(TRUE) Player = PLAYER_PED_ID() //to fix bug 1549652 - Clear player wanted level IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID()) ENDIF IF Is_Replay_In_Progress() IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() PRINTLN("REPLAY VEHICLE IS AVAILABLE - CONSTRUCTION") bReplayVehicleAvailable = TRUE ELSE PRINTLN("REPLAY VEHICLE IS NOT AVAILABLE - CONSTRUCTION") ENDIF bReplaying = TRUE ELSE bReplaying = FALSE ENDIF #IF IS_DEBUG_BUILD AddWidgets(myDebugData) #ENDIF SETUP_DEBUG() // Fix Bug # 712684 IF NOT IS_PED_INJURED(PLAYER_PED_ID()) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, FALSE) ENDIF ASSASSINATION_ClearUnneededGenericData() iCurAssassinRank = ENUM_TO_INT(ASSASSINATION_Hotel) //g_savedGlobals.sAssassinData.iCurrentAssassinRank missionData = ASSASSINATION_GetMissionData(iCurAssassinRank) PRINTLN("Current rank is... ", iCurAssassinRank) SET_PED_MODEL_IS_SUPPRESSED(GuardModel, TRUE) SET_PED_MODEL_IS_SUPPRESSED(GuardModel_01, TRUE) PRINTLN("ya it worked.. ", iCurAssassinRank) INVALIDATE_IDLE_CAM() //HANDLE STREAMING AROUND REPLAY START POSITION IF IS_REPLAY_IN_PROGRESS() bHaveRetryOnce = TRUE PRINTLN("HOTEL: SETTING - bHaveRetryOnce = TRUE") iStageToUse = Get_Replay_Mid_Mission_Stage() PRINTLN("iStageToUse = ", iStageToUse) IF g_bShitskipAccepted IF iStageToUse <= 1 iStageToUse = (iStageToUse + 1) PRINTLN("SHIT SKIP: iStageToUse = ", iStageToUse) ENDIF ENDIF // Due to url:bugstar:2105614, this needs to be called before START_REPLAY_SETUP REMOVE_STREAMVOL_FOR_INTRO_CUTSCENE() IF iStageToUse = 0 IF bReplayVehicleAvailable REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL() WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED() PRINTLN("CONSTRUCTION: Waiting for HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED - 01") WAIT(0) ENDWHILE //create the replay vehicle but make sure it isnt a water based vehicle (sso we dont spawn it on land) VEHICLE_INDEX vehPlayer vehPlayer = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-1523.1742, -924.6732, 9.1221>>, 53.0177) IF NOT IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_BIG_VEHICLE(vehPlayer) SET_VEHICLE_ON_GROUND_PROPERLY(vehPlayer) ELSE DELETE_VEHICLE(vehPlayer) ENDIF ENDIF START_REPLAY_SETUP(<< -1510.1810, -946.9595, 8.2738 >>, 10.0) PRINTLN("CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ELIF iStageToUse = 1 IF bReplayVehicleAvailable REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL() WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED() PRINTLN("CONSTRUCTION: Waiting for HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED - 02") WAIT(0) ENDWHILE //create the replay vehicle but make sure it isnt a water based vehicle (sso we dont spawn it on land) VEHICLE_INDEX vehPlayer vehPlayer = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-1266.4049, -219.1991, 41.4459>>, 304.8644) IF NOT IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_BIG_VEHICLE(vehPlayer) SET_VEHICLE_ON_GROUND_PROPERLY(vehPlayer) ELSE DELETE_VEHICLE(vehPlayer) ENDIF ENDIF START_REPLAY_SETUP(<<-1266.1729, -214.0011, 41.4459>>, 310.0126) PRINTLN("CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ELIF iStageToUse = 2 IF bReplayVehicleAvailable REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL() WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED() PRINTLN("CONSTRUCTION: Waiting for HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED - 02") WAIT(0) ENDWHILE //create the replay vehicle but make sure it isnt a water based vehicle (sso we dont spawn it on land) VEHICLE_INDEX vehPlayer vehPlayer = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-1188.4861, -316.9884, 36.6841>>, 29.9702) IF NOT IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(vehPlayer)) AND NOT IS_BIG_VEHICLE(vehPlayer) SET_VEHICLE_ON_GROUND_PROPERLY(vehPlayer) ELSE DELETE_VEHICLE(vehPlayer) ENDIF ENDIF START_REPLAY_SETUP(<<-1184.2440, -319.2575, 36.7445>>, 26.0711) PRINTLN("CALLING START REPLAY SETUP FOR CHECKPOINT = ", iStageToUse) ENDIF ENDIF // The script loop WHILE (TRUE) REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_ASS1") IF bMissionFailed IF GET_MISSION_FLOW_SAFE_TO_CLEANUP() Script_Failed() ENDIF ELIF NOT IS_PED_INJURED(Player) UPDATE_EXTRAS() IF MainStage < STAGE_GUARDS_GO_TO_POSTS aggroArgs.iShotIRange = 1 ELSE aggroArgs.iShotIRange = 5 ENDIF //main update loop for script stages Update_Loop() UPDATE_PED_STATES() IF bAlerted HANDLE_SNIPER_ATTACK_BUFFER() ENDIF //update the on screen timer representation IF NOT bHotelTimerExpired IF MainStage >= STAGE_PLANT_BOMB AND MainStage < STAGE_TARGET_LEAVE_LOBBY UPDATE_HOTEL_TIMER(iHotelTimerStart, fBombTime, bHotelTimerStarted, bHotelTimerExpired) ENDIF ENDIF //handle circle/hint cam cuts throughout the mission UPDATE_HINT_CAMERAS() //MISSION FAIL CHECKS FAIL_IF_TARGET_ESCAPES() //fail mission if player triggers panic prior to the target leaving the hotel IF ( bPanicking OR bFailMissionForCloseVehicle ) AND MainStage < STAGE_TARGET_LEAVE_LOBBY OR (bPanickedExtras AND MainStage < STAGE_TARGET_LEAVE_LOBBY) IF NOT IS_TIMER_STARTED(tFailTimer) AND MainStage > STAGE_GUARD_CUTSCENE START_TIMER_NOW(tFailTimer) PRINTLN("STARTING TIMER - tFailTimer") ELSE IF MainStage < STAGE_GUARD_CUTSCENE //to fix bug 1207388 - need to immediately fail in this case - 3/21/13 MB) OR GET_TIMER_IN_SECONDS(tFailTimer) > 5.0 IF failType = FT_VEHICLE SET_MISSION_FAILED(FT_VEHICLE) ELIF failType = FT_DISREGARDED_WARNINGS SET_MISSION_FAILED(FT_DISREGARDED_WARNINGS) ELSE SET_MISSION_FAILED(FT_BLOWN_COVER) PRINTLN("OJASHOTEL - FAILING SCRIPT BECAUSE THE PLAYER HAS BLOWN THEIR COVER EARLY") ENDIF ELIF GET_TIMER_IN_SECONDS(tFailTimer) > 2.5 IF NOT bTaskedGuyToAim IF NOT bPlayerParkedCarInAlley piWalkingGuard = GET_CLOSEST_GUARD(70.0, FALSE) ELSE piWalkingGuard = GET_CLOSEST_GUARD(70.0) ENDIF IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) IF NOT IS_PED_INJURED(piWalkingGuard) CLEAR_PED_TASKS(piWalkingGuard) IF failType = FT_VEHICLE IF DOES_ENTITY_EXIST(viCarThatTriggeredAlert) IF NOT IS_PED_IN_ANY_VEHICLE(piWalkingGuard) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(piWalkingGuard, viCarThatTriggeredAlert, viCarThatTriggeredAlert, PEDMOVEBLENDRATIO_RUN, FALSE) ENDIF ENDIF // PED_INDEX pedClosest = GET_CLOSEST_GUARD(50.0) IF DOES_ENTITY_EXIST(piWalkingGuard) AND NOT IS_PED_INJURED(piWalkingGuard) SETUP_PED_FOR_DIALOGUE(piWalkingGuard, 6, "OJAvaGUARD2") PLAY_SINGLE_LINE_FROM_CONVERSATION (hotelConv, "OJASAUD", "OJASva_CAR2", "OJASva_CAR2_1", CONV_PRIORITY_VERY_HIGH) PRINTLN("PLAYING CONVO - OJASva_CAR2") ELSE PRINTLN("WE COULD NOT FIND PED WITH CALL - GET_CLOSEST_GUARD") ENDIF PRINTLN("FAIL REASON: failType = FT_VEHICLE") ELIF failType = FT_STICKY IF DOES_ENTITY_EXIST(viTargetCar) AND IS_VEHICLE_DRIVEABLE(viTargetCar) TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(piWalkingGuard, viTargetCar, viTargetCar, PEDMOVEBLENDRATIO_RUN, FALSE) ENDIF SETUP_PED_FOR_DIALOGUE(GET_CLOSEST_GUARD_TO_LIMO(25.0), 6, "OJAvaGUARD2") PLAY_SINGLE_LINE_FROM_CONVERSATION (hotelConv, "OJASAUD", "OJASva_CAR3", "OJASva_CAR3_1", CONV_PRIORITY_VERY_HIGH) PRINTLN("FAIL REASON: failType = FT_STICKY") ELSE TASK_AIM_GUN_AT_ENTITY(piWalkingGuard, PLAYER_PED_ID(), -1) PRINTLN("TASKING CLOSEST LIMO GUARD TO AIM AT PLAYER") PLAY_GUARD_PANIC_LINE(piWalkingGuard) ENDIF ENDIF ENDIF bTaskedGuyToAim = TRUE ENDIF ENDIF ENDIF ENDIF //handles player trying to mess with the limo with a tow truck vehicle at any point in the mission DETACH_TOW_TRUCK_FROM_LIMO_IF_ATTACHED() // IF IS_STICKYBOMB_VISIBLE_ON_PARKED_LIMO(failType) // SCRIPT_ASSERT("BOMB NOT SAFE!") // ENDIF //DEBUG ONLY #IF IS_DEBUG_BUILD DO_DEBUG_SKIPS() #ENDIF ENDIF WAIT(0) ENDWHILE // Script should never reach here. Always terminate with cleanup function. ENDSCRIPT