867 lines
30 KiB
Scheme
Executable File
867 lines
30 KiB
Scheme
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : Assassin_Shared.sch //
|
|
// AUTHOR : Mike Bagley //
|
|
// DESCRIPTION : Shared functions for assassinations //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
USING "minigame_stats_tracker_helpers.sch"
|
|
USING "oddjob_aggro.sch"
|
|
USING "script_player.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "script_oddjob_funcs.sch"
|
|
USING "timer_public.sch"
|
|
USING "shop_public.sch"
|
|
USING "cheat_controller_public.sch"
|
|
|
|
// ********************************** Script Globals *************************************
|
|
AGGRO_ARGS aggroArgs
|
|
CUTSCENE_ARGS cutArgs
|
|
EAggro aggroReason
|
|
FLOAT fTimeTaken
|
|
FLOAT fBaseReward
|
|
FLOAT fBonusReward
|
|
BOOL bBonus
|
|
BOOL bHaveRetryOnce = FALSE
|
|
BOOL bResultsCreated
|
|
BOOL bGrabbedDistance = FALSE
|
|
FLOAT fStoredDistance
|
|
//BOOL bWarningHelp
|
|
|
|
//CAMERA_INDEX camKill
|
|
CAMERA_INDEX camHint
|
|
INT iKillCamStage
|
|
INT iCutsceneStartTime
|
|
INT iMissionPercentage = 100 // Default to 100
|
|
INT iMedal = 3 // Default to Gold
|
|
|
|
structTimer assFailTimer
|
|
|
|
END_SCREEN_DATASET assassinationEndScreen
|
|
|
|
//END RESULTS SCREEN STUFF
|
|
STRUCT END_RESULTS_LABELS
|
|
TEXT_LABEL_23 tlMissionPassed
|
|
TEXT_LABEL_23 tlMissionName
|
|
// TEXT_LABEL_23 tlTargetTime
|
|
TEXT_LABEL_23 tlTimeTaken
|
|
TEXT_LABEL_23 tlBaseReward
|
|
TEXT_LABEL_23 tlBonusDesc
|
|
TEXT_LABEL_23 tlCashEarned
|
|
TEXT_LABEL_23 tlCompletionGold
|
|
TEXT_LABEL_23 tlCompletionSilver
|
|
TEXT_LABEL_23 tlCompletionBronze
|
|
TEXT_LABEL_23 tlCompletionNoMedal
|
|
TEXT_LABEL_23 tlContinue
|
|
ENDSTRUCT
|
|
END_RESULTS_LABELS endLabel
|
|
|
|
ENUM PASS_REASON_ENUM
|
|
PASS_STANDARD = 0,
|
|
PASS_BONUS
|
|
ENDENUM
|
|
// ********************************** ************** *************************************
|
|
|
|
// ********************************** DEBUG ONLY FUNCTIONS *************************************
|
|
#IF IS_DEBUG_BUILD
|
|
STRUCT DEBUG_POS_DATA
|
|
BOOL bTurnOnDebugPos
|
|
VECTOR vDebugVector
|
|
FLOAT fDebugFloat
|
|
FLOAT fDebugX
|
|
FLOAT fDebugY
|
|
FLOAT fdebugWidth
|
|
FLOAT fdebugHeight
|
|
FLOAT fRotateX
|
|
FLOAT fRotateY
|
|
FLOAT fRotateZ
|
|
FLOAT fOffsetX
|
|
FLOAT fOffsetY
|
|
FLOAT fOffsetZ
|
|
FLOAT fFOV
|
|
ENTITY_INDEX myObject
|
|
VECTOR myObjectPos
|
|
ENDSTRUCT
|
|
|
|
PROC AddWidgets(DEBUG_POS_DATA& myData)
|
|
// UNUSED_PARAMETER(myData)
|
|
START_WIDGET_GROUP("Assassin")
|
|
ADD_WIDGET_BOOL("turn on positioning", myData.bTurnOnDebugPos)
|
|
ADD_WIDGET_VECTOR_SLIDER("DebugPosition", myData.vDebugVector, -2000, 2000, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("DebugRotation", myData.fDebugFloat, -360, 360, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("DebugX", myData.fDebugX, 0, 1, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("DebugY", myData.fDebugY, 0, 1, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("DebugWidth", myData.fdebugWidth, 0, 2, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("DebugHeight", myData.fdebugHeight, 0, 2, 0.01)
|
|
ADD_WIDGET_FLOAT_SLIDER("RotateX", myData.fRotateX, 0, 360, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("RotateY", myData.fRotateY, 0, 360, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("RotateZ", myData.fRotateZ, 0, 360, 1)
|
|
ADD_WIDGET_FLOAT_SLIDER("OffsetX", myData.fOffsetX, -2000, 2000, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("OffsetY", myData.fOffsetY, -2000, 2000, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("OffsetZ", myData.fOffsetZ, -2000, 2000, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("FOV", myData.fFOV, 0, 125, 0.1)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
#ENDIF
|
|
// ********************************** ************** *************************************
|
|
PROC GIVE_PLAYER_WEAPONS(WEAPON_TYPE wtWeapon, INT iDesiredAmmoCount)
|
|
INT iAmmoCount
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), wtWeapon)
|
|
PRINTLN("PLAYER HAS WEAPON ALREADY")
|
|
iAmmoCount = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtWeapon)
|
|
PRINTLN("NUMBER OF AMMO 01 = ", iAmmoCount)
|
|
IF iAmmoCount < iDesiredAmmoCount
|
|
SET_PED_AMMO(PLAYER_PED_ID(), wtWeapon, iDesiredAmmoCount)
|
|
PRINTLN("GIVING PLAYER WEAPON WITH AMMO")
|
|
ENDIF
|
|
ELSE
|
|
iAmmoCount = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtWeapon)
|
|
PRINTLN("NUMBER OF AMMO 02 = ", iAmmoCount)
|
|
|
|
IF iAmmoCount < iDesiredAmmoCount
|
|
SET_PED_AMMO(PLAYER_PED_ID(), wtWeapon, iDesiredAmmoCount)
|
|
ENDIF
|
|
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), wtWeapon, 0, FALSE, FALSE)
|
|
|
|
PRINTLN("GIVING PLAYER WEAPON")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_PLAYER_READY_FOR_ASSASSINATION_CUTSCENE(FLOAT fVehicleStopDist = 5.0, BOOL bUseExraSecondDelay = TRUE)
|
|
VEHICLE_INDEX vehPlayer
|
|
|
|
IF ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()),
|
|
fVehicleStopDist, 1) AND NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID()))
|
|
OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
|
|
RESTART_TIMER_NOW(cutArgs.cutSceneTimer)
|
|
IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) //handle instance of player trying to ghost ride his vehicle into the scene
|
|
vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
SET_VEHICLE_FORWARD_SPEED(vehPlayer, 0)
|
|
ENDIF
|
|
ENDIF
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ELSE
|
|
//delay intro cutscene for a second so that it isnt such an abrupt transition from gameplay to cutscene
|
|
IF GET_TIMER_IN_SECONDS(cutArgs.cutSceneTimer) > 1
|
|
OR bUseExraSecondDelay = FALSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PLAYER_READY_FOR_ASSASSINATION_CUTSCENE_WASHER()
|
|
VEHICLE_INDEX vehPlayer
|
|
|
|
IF ( IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_ENTITY_IN_AIR(PLAYER_PED_ID()))
|
|
OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_TIMER_STARTED(cutArgs.cutSceneTimer)
|
|
RESTART_TIMER_NOW(cutArgs.cutSceneTimer)
|
|
IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) //handle instance of player trying to ghost ride his vehicle into the scene
|
|
vehPlayer = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_DRIVEABLE(vehPlayer)
|
|
SET_VEHICLE_FORWARD_SPEED(vehPlayer, 0)
|
|
ENDIF
|
|
ENDIF
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ELSE
|
|
//delay intro cutscene for a second so that it isnt such an abrupt transition from gameplay to cutscene
|
|
IF GET_TIMER_IN_SECONDS(cutArgs.cutSceneTimer) > 1
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//removes a specific blip and prints a specified message
|
|
PROC REMOVE_BLIP_AND_PRINT_OBJECTIVE_MSG_IF_WANTED(BLIP_INDEX blipToRemove, STRING msgToDisplay)
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
IF DOES_BLIP_EXIST(blipToRemove)
|
|
REMOVE_BLIP(blipToRemove)
|
|
CLEAR_PRINTS()
|
|
PRINT_NOW(msgToDisplay, DEFAULT_GOD_TEXT_TIME, 1)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC SET_PLAYER_WANTED_LEVEL_NO_DROP_NOW(INT playerWantedLevel = 1, FLOAT fDifficulty = 0.1, FLOAT fWantedMultiplier = 0.3)
|
|
SET_PLAYER_WANTED_LEVEL_NO_DROP(PLAYER_ID(), playerWantedLevel)
|
|
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
|
|
SET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID(), fDifficulty)
|
|
SET_WANTED_LEVEL_MULTIPLIER(fWantedMultiplier)
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL HANDLE_FRANKLIN_PLAYING_TARGET_KILL_LINE(BOOL& bBoolToFlipWhenPlayed, structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DO_NOT_DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE)
|
|
IF NOT bBoolToFlipWhenPlayed
|
|
IF CREATE_CONVERSATION(YourPedStruct, WhichBlockOfTextToLoad, WhichRootLabel, PassedConversationPriority, ShouldDisplaySubtitles, ShouldAddToBriefScreen, cloneConversation)
|
|
PRINTLN("FRANKLIN PLAYING KILL LINE")
|
|
bBoolToFlipWhenPlayed = TRUE
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC UPDATE_STATS()
|
|
|
|
// -------------------------------------------HOTEL-------------------------------------------
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Assassin_Valet")) = 1)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_TIME, FLOOR(fTimeTaken), TRUE)
|
|
PRINTLN("HOTEL STATS: TIME - ", FLOOR(fTimeTaken))
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_SNIPER_USED, 1, TRUE)
|
|
PRINTLN("HOTEL STATS: BONUS IS TRUE")
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_SNIPER_USED, 0, TRUE)
|
|
PRINTLN("HOTEL STATS: BONUS IS FALSE")
|
|
ENDIF
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_CASH, ROUND(fBonusReward + fBaseReward), TRUE)
|
|
PRINTLN("HOTEL STATS: MONEY - ", ROUND(fBonusReward + fBaseReward))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_CASH, ROUND(fBaseReward), TRUE)
|
|
PRINTLN("HOTEL STATS: MONEY - ", ROUND(fBaseReward))
|
|
ENDIF
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_PERCENT, iMissionPercentage, TRUE)
|
|
PRINTLN("HOTEL STATS: PERCENTAGE - ", iMissionPercentage)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS1_MIRROR_MEDAL, iMedal, TRUE)
|
|
PRINTLN("HOTEL STATS: MEDAL - ", iMedal)
|
|
|
|
// -------------------------------------------MULTI-------------------------------------------
|
|
ELIF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Assassin_Multi")) = 1)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_TIME, FLOOR(fTimeTaken), TRUE)
|
|
PRINTLN("MULTI STATS: TIME - ", FLOOR(fTimeTaken))
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_QUICKBOOL, 1, TRUE)
|
|
PRINTLN("MULTI STATS: BONUS IS TRUE")
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_QUICKBOOL, 0, TRUE)
|
|
PRINTLN("MULTI STATS: BONUS IS FALSE")
|
|
ENDIF
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_CASH, ROUND(fBonusReward + fBaseReward), TRUE)
|
|
PRINTLN("MULTI STATS: MONEY - ", ROUND(fBonusReward + fBaseReward))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_CASH, ROUND(fBaseReward), TRUE)
|
|
PRINTLN("MULTI STATS: MONEY - ", ROUND(fBaseReward))
|
|
ENDIF
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_PERCENT, iMissionPercentage, TRUE)
|
|
PRINTLN("MULTI STATS: PERCENTAGE - ", iMissionPercentage)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS2_MIRROR_MEDAL, iMedal, TRUE)
|
|
PRINTLN("MULTI STATS: MEDAL - ", iMedal)
|
|
|
|
// -------------------------------------------VICE-------------------------------------------
|
|
ELIF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Assassin_Hooker")) = 1)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_TIME, FLOOR(fTimeTaken), TRUE)
|
|
PRINTLN("VICE STATS: TIME - ", FLOOR(fTimeTaken))
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_CLEAN_ESCAPE, 1, TRUE)
|
|
PRINTLN("VICE STATS: BONUS IS TRUE")
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_CLEAN_ESCAPE, 0, TRUE)
|
|
PRINTLN("VICE STATS: BONUS IS FALSE")
|
|
ENDIF
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_CASH, ROUND(fBonusReward + fBaseReward), TRUE)
|
|
PRINTLN("VICE STATS: MONEY - ", ROUND(fBonusReward + fBaseReward))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_CASH, ROUND(fBaseReward), TRUE)
|
|
PRINTLN("VICE STATS: MONEY - ", ROUND(fBaseReward))
|
|
ENDIF
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_PERCENTAGE, iMissionPercentage, TRUE)
|
|
PRINTLN("VICE STATS: PERCENTAGE - ", iMissionPercentage)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS3_MIRROR_MEDAL, iMedal, TRUE)
|
|
PRINTLN("VICE STATS: MEDAL - ", iMedal)
|
|
|
|
// -------------------------------------------BUS-------------------------------------------
|
|
ELIF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Assassin_Bus")) = 1)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_TIME, FLOOR(fTimeTaken), TRUE)
|
|
PRINTLN("BUS STATS: TIME - ", FLOOR(fTimeTaken))
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_HIT_AND_RUN, 1, TRUE)
|
|
PRINTLN("BUS STATS: BONUS IS TRUE")
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_HIT_AND_RUN, 0, TRUE)
|
|
PRINTLN("BUS STATS: BONUS IS FALSE")
|
|
ENDIF
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_CASH, ROUND(fBonusReward + fBaseReward), TRUE)
|
|
PRINTLN("BUS STATS: MONEY - ", ROUND(fBonusReward + fBaseReward))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_CASH, ROUND(fBaseReward), TRUE)
|
|
PRINTLN("BUS STATS: MONEY - ", ROUND(fBaseReward))
|
|
ENDIF
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_PERCENTAGE, iMissionPercentage, TRUE)
|
|
PRINTLN("BUS STATS: PERCENTAGE - ", iMissionPercentage)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS4_MIRROR_MEDAL, iMedal, TRUE)
|
|
PRINTLN("BUS STATS: MEDAL - ", iMedal)
|
|
|
|
// -------------------------------------------CONTSTRUCTION-------------------------------------------
|
|
ELIF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Assassin_Construction")) = 1)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_TIME, FLOOR(fTimeTaken), TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: TIME - ", FLOOR(fTimeTaken))
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_NO_FLY, 1, TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: BONUS IS TRUE")
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_NO_FLY, 0, TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: BONUS IS FALSE")
|
|
ENDIF
|
|
|
|
IF bBonus
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_CASH, ROUND(fBonusReward + fBaseReward), TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: MONEY - ", ROUND(fBonusReward + fBaseReward))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_CASH, ROUND(fBaseReward), TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: MONEY - ", ROUND(fBaseReward))
|
|
ENDIF
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_PERCENT, iMissionPercentage, TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: PERCENTAGE - ", iMissionPercentage)
|
|
|
|
INFORM_MISSION_STATS_OF_INCREMENT(ASS5_MIRROR_MEDAL, iMedal, TRUE)
|
|
PRINTLN("CONTSTRUCTION STATS: MEDAL - ", iMedal)
|
|
ELSE
|
|
SCRIPT_ASSERT("We're not running any Assassination script, but we're trying to update stats!")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SETUP_RESULTS_UI()
|
|
IF NOT bResultsCreated
|
|
|
|
SET_ENDSCREEN_DATASET_HEADER(assassinationEndScreen, endLabel.tlMissionPassed, g_sMissionStatsName)
|
|
|
|
fTimeTaken = fTimeTaken * 1000
|
|
|
|
IF g_bShitskipAccepted //Invalidate stats if shit-skipped the mission
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlTimeTaken, "MTPHPERSKI", FLOOR(fTimeTaken), 0, ESCM_INVALIDATED)
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlBonusDesc, "MTPHPERSKI", 0, 0, ESCM_INVALIDATED)
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlCashEarned, "MTPHPERSKI", ROUND(fBonusReward + fBaseReward), 0, ESCM_INVALIDATED)
|
|
|
|
//Reset shitskipped bool
|
|
ResetShitskipVariables()
|
|
ELSE
|
|
IF bHaveRetryOnce
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlTimeTaken, "MTPHPERRET", FLOOR(fTimeTaken), 0, ESCM_INVALIDATED, FALSE)
|
|
PRINTLN("bHaveRetryOnce IS TRUE, INVALIDATING TIME STAT")
|
|
ELSE
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_TIME_M_S, endLabel.tlTimeTaken, "", FLOOR(fTimeTaken), 0, ESCM_NO_MARK, FALSE)
|
|
PRINTLN("bHaveRetryOnce IS FALSE, VALIDATING TIME STAT")
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(endLabel.tlBaseReward)
|
|
// ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_DOLLAR_VALUE, endLabel.tlBaseReward, "", ROUND(fBaseReward), 0, ESCM_NO_MARK, FALSE)
|
|
|
|
IF bBonus
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlBonusDesc, "", 0, 0, ESCM_CHECKED, FALSE)
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_DOLLAR_VALUE, endLabel.tlCashEarned, "", ROUND(fBonusReward + fBaseReward), 0, ESCM_CHECKED, FALSE)
|
|
ELSE
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_RAW_STRING, endLabel.tlBonusDesc, "", 0, 0, ESCM_UNCHECKED, FALSE)
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_DOLLAR_VALUE, endLabel.tlCashEarned, "", ROUND(fBaseReward), 0, ESCM_NO_MARK, FALSE)
|
|
ENDIF
|
|
ELSE
|
|
ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(assassinationEndScreen, ESEF_DOLLAR_VALUE, endLabel.tlCashEarned, "", ROUND(fBaseReward), 0, ESCM_NO_MARK, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL bShitskiped = FALSE
|
|
IF g_bShitskipAccepted
|
|
INT i
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF ENUM_TO_INT(g_MissionStatTrackingArray[i].target) >= 0
|
|
AND NOT g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].bHidden
|
|
IF g_MissionStatTrackingArray[i].invalidationReason = MSSIR_SKIP
|
|
CPRINTLN(DEBUG_MISSION_STATS, "SHITSKIPPED - stat[", i, "] ", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target))
|
|
|
|
bShitskiped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
IF bShitskiped = TRUE
|
|
iMissionPercentage = 50
|
|
iMedal = 1
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(assassinationEndScreen, TRUE, endLabel.tlCompletionBronze, iMissionPercentage, 0, ESC_PERCENTAGE_COMPLETION, ESMS_BRONZE)
|
|
PRINTLN("SHITSKIPPED - NO MEDAL")
|
|
ELSE
|
|
IF bBonus // You get the bonus, you get Gold.
|
|
IF bHaveRetryOnce
|
|
iMissionPercentage = 75
|
|
iMedal = 2
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(assassinationEndScreen, TRUE, endLabel.tlCompletionSilver, iMissionPercentage, 0, ESC_PERCENTAGE_COMPLETION, ESMS_SILVER)
|
|
PRINTLN("AWARDING - ESMS_SILVER, WITH BONUS")
|
|
ELSE
|
|
iMissionPercentage = 100
|
|
iMedal = 3
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(assassinationEndScreen, TRUE, endLabel.tlCompletionGold, iMissionPercentage, 0, ESC_PERCENTAGE_COMPLETION, ESMS_GOLD)
|
|
PRINTLN("AWARDING - ESMS_GOLD")
|
|
ENDIF
|
|
ELIF (NOT bBonus AND NOT bHaveRetryOnce) // No bonus, one retry. Silver
|
|
iMissionPercentage = 75
|
|
iMedal = 2
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(assassinationEndScreen, TRUE, endLabel.tlCompletionSilver, iMissionPercentage, 0, ESC_PERCENTAGE_COMPLETION, ESMS_SILVER)
|
|
PRINTLN("AWARDING - ESMS_SILVER")
|
|
ELSE
|
|
iMissionPercentage = 50
|
|
iMedal = 1
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(assassinationEndScreen, TRUE, endLabel.tlCompletionBronze, iMissionPercentage, 0, ESC_PERCENTAGE_COMPLETION, ESMS_BRONZE)
|
|
PRINTLN("AWARDING - ESMS_BRONZE")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
UPDATE_STATS()
|
|
|
|
PRINTLN("INSIDE - SETUP_RESULTS_UI")
|
|
bResultsCreated = TRUE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC CUTSCENE_SKIP_FADE_OUT()
|
|
DO_SCREEN_FADE_OUT(500)
|
|
WHILE NOT IS_SCREEN_FADED_OUT()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDPROC
|
|
|
|
PROC CUTSCENE_SKIP_FADE_IN()
|
|
DO_SCREEN_FADE_IN(1000)
|
|
WHILE NOT IS_SCREEN_FADED_IN()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_PLAYER_SKIPPING_CUTSCENE()
|
|
IF TIMERA() >= DEFAULT_CAR_STOPPING_TO_CUTSCENE
|
|
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_ASSASSIN_CUTSCENE_START_TIME()
|
|
iCutsceneStartTime = GET_GAME_TIMER()
|
|
|
|
RETURN iCutsceneStartTime
|
|
ENDFUNC
|
|
|
|
FUNC BOOL HAS_TARGET_ESCAPED(PED_INDEX pedToCheck, FLOAT fDistToCheck, FLOAT fFailDistDisregardSightChecks = 0.0)
|
|
VEHICLE_INDEX vehToCheck
|
|
FLOAT fPlayerDistFromPed
|
|
|
|
IF DOES_ENTITY_EXIST(pedToCheck)
|
|
IF NOT IS_PED_INJURED(pedToCheck)
|
|
IF IS_PED_IN_ANY_VEHICLE(pedToCheck)
|
|
vehToCheck = GET_VEHICLE_PED_IS_IN(pedToCheck)
|
|
fPlayerDistFromPed = GET_PLAYER_DISTANCE_FROM_ENTITY(pedToCheck)
|
|
IF fPlayerDistFromPed > fDistToCheck
|
|
IF NOT IS_ENTITY_ON_SCREEN(vehToCheck)
|
|
OR IS_ENTITY_OCCLUDED(vehToCheck)
|
|
RETURN TRUE
|
|
ELSE
|
|
IF fFailDistDisregardSightChecks != 0
|
|
IF fPlayerDistFromPed > fFailDistDisregardSightChecks
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //since the player could potentially be able to make up some ground while they are still in sight
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF GET_PLAYER_DISTANCE_FROM_ENTITY(pedToCheck) > fDistToCheck
|
|
IF NOT IS_ENTITY_ON_SCREEN(pedToCheck)
|
|
OR IS_ENTITY_OCCLUDED(pedToCheck)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
//Return TRUE if the killcam has finished playing
|
|
FUNC BOOL HAS_SLOW_KILLCAM_FINISHED(PED_INDEX pedToFocus, BOOL bPlayCamera = TRUE, BOOL bUseSlowMoEffect = TRUE, FLOAT fSlowestTimeScale = 0.1)
|
|
VECTOR vTempCamPos
|
|
FLOAT fCutsceneTime
|
|
|
|
IF bPlayCamera
|
|
SWITCH iKillCamStage
|
|
CASE 0
|
|
//ecit out early if the target is too far away to render the kill camera
|
|
vTempCamPos = GET_ENTITY_COORDS(pedToFocus, FALSE)
|
|
IF GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS(PLAYER_PED_ID()), vTempCamPos ) >= 250.0
|
|
PRINTLN("OJAS - ASSASSINATIONS - SKIPPING KILL CAM BECAUSE TARGET IS TOO FAR AWAY!")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
GET_ASSASSIN_CUTSCENE_START_TIME()
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
WAIT(0) //wait a frame to make sure that the sniper scope is not displayed on screen during kill cam
|
|
ENDIF
|
|
|
|
// IF NOT DOES_CAM_EXIST(camKill)
|
|
// camKill = CREATE_CAMERA()
|
|
// SET_CAM_PARAMS(camKill, << vTempCamPos.x - 4.0, vTempCamPos.y + 4.0, vTempCamPos.z + 3.5 >>, <<0,0,0>>, 35)
|
|
// ENDIF
|
|
// POINT_CAM_AT_PED_BONE(camKill, pedToFocus, BONETAG_HEAD, <<0,0,0>>, FALSE)
|
|
//
|
|
// SET_CAM_ACTIVE(camKill, TRUE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
|
|
IF bUseSlowMoEffect
|
|
SET_TIME_SCALE(fSlowestTimeScale)
|
|
ENDIF
|
|
SETTIMERB(0)
|
|
iKillCamStage++
|
|
BREAK
|
|
CASE 1
|
|
IF bUseSlowMoEffect
|
|
float fGameSpeed
|
|
fGameSpeed = TO_FLOAT(TIMERB() - 40) / 220.0
|
|
If fGameSpeed > 1.0
|
|
fGameSpeed = 1.0
|
|
ENDIF
|
|
IF fGameSpeed < fSlowestTimeScale
|
|
fGameSpeed = fSlowestTimeScale
|
|
endif
|
|
SET_TIME_SCALE(fGameSpeed)
|
|
fCutsceneTime = 700
|
|
ELSE
|
|
fCutsceneTime = 2000
|
|
ENDIF
|
|
|
|
if TIMERB() > fCutsceneTime
|
|
OR HANDLE_SKIP_CUTSCENE(iCutsceneStartTime)
|
|
OR IS_ENTITY_OCCLUDED(pedToFocus)
|
|
ODDJOB_EXIT_CUTSCENE()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
CLEAR_HELP(TRUE)
|
|
// DESTROY_CAM(camKill)
|
|
PRINTLN("KILL CAM FINISHED")
|
|
|
|
CUTSCENE_SKIP_FADE_IN()
|
|
|
|
SET_TIME_SCALE(1.0)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
SET_TIME_SCALE(1.0)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC KILL_CURRENT_AMBIENT_MISSION_DIALOGUE_IF_TOUCHED(PED_INDEX ped)
|
|
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), ped)
|
|
IF IS_SCRIPTED_SPEECH_PLAYING(ped)
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Only allow the player to aim and shoot from their current position
|
|
PROC DISABLE_PLAYER_ACTIONS()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DETONATE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WHISTLE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PREV_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_LEFT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_RIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_UP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MOVE_DOWN)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DUCK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PICKUP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_OUT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_OUT_ALTERNATE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_RELOAD)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_BLOCK)
|
|
ENDPROC
|
|
|
|
//Cut to a camera shot of the target
|
|
//If bAttachToPed then vCamCoords is used as the offset of the ped you are attaching the camera to (otherwise use world coords)
|
|
PROC CONTROL_CIRCLE_CAM_CUT_FOR_TARGET(ENTITY_INDEX target, VECTOR vCamCoords, VECTOR vCamRot, BOOL bPointCamAtEntity = TRUE, BOOL bSetCamRenderingFalseOnExit = TRUE)
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
|
|
DISABLE_PLAYER_ACTIONS()
|
|
|
|
IF NOT DOES_CAM_EXIST(camHint)
|
|
camHint = CREATE_CAMERA(CAMTYPE_SCRIPTED)
|
|
|
|
SET_CAM_COORD(camHint, vCamCoords)
|
|
IF bPointCamAtEntity
|
|
POINT_CAM_AT_ENTITY(camHint, target, <<0,0,0>>)
|
|
ELSE
|
|
POINT_CAM_AT_COORD(camHint, vCamRot)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_CAM_ACTIVE(camHint)
|
|
SET_CAM_ACTIVE(camHint, TRUE)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
ENDIF
|
|
ELSE
|
|
IF DOES_CAM_EXIST(camHint)
|
|
IF IS_CAM_ACTIVE(camHint)
|
|
SET_CAM_ACTIVE(camHint, FALSE)
|
|
|
|
IF bSetCamRenderingFalseOnExit
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
DISPLAY_HUD(TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
ENDIF
|
|
|
|
DESTROY_CAM(camHint)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC KILL_HINT_CAM_IF_ACTIVE()
|
|
IF DOES_CAM_EXIST(camHint)
|
|
IF IS_CAM_ACTIVE(camHint)
|
|
SET_CAM_ACTIVE(camHint, FALSE)
|
|
DESTROY_CAM(camHint)
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
CLEAR_FOCUS()
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL CAN_ASSASSIN_SPEECH_PLAY(PED_INDEX pedToCheck)
|
|
IF GET_PLAYER_DISTANCE_FROM_ENTITY(pedToCheck) < 50
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PLAYER_NEAR_COORD_AND_NOT_A_TAXI_PASSENGER(VECTOR vLocation, FLOAT fDistToCheck)
|
|
IF GET_PLAYER_DISTANCE_FROM_LOCATION(vLocation) <= fDistToCheck
|
|
AND NOT IS_PLAYER_A_TAXI_PASSENGER()
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PLAYER_NEAR_ENTITY_AND_NOT_A_TAXI_PASSENGER(ENTITY_INDEX myObject, FLOAT fDistToCheck)
|
|
IF GET_PLAYER_DISTANCE_FROM_ENTITY(myObject) <= fDistToCheck
|
|
AND NOT IS_PLAYER_A_TAXI_PASSENGER()
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_VEHICLE_SAFE_FOR_ASSASSIN_MISSION(VEHICLE_INDEX vehToCheck)
|
|
IF DOES_ENTITY_EXIST(vehToCheck)
|
|
IF NOT IS_VEHICLE_DRIVEABLE(vehToCheck)
|
|
RETURN FALSE
|
|
ELSE
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vehToCheck, PLAYER_PED_ID())
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
//remove the wanted check from aggro checks
|
|
PROC DONT_CHECK_FOR_WANTED_IN_AGGRO_CHECKS()
|
|
IF NOT IS_BITMASK_AS_ENUM_SET(aggroArgs.iBitFieldDontCheck, EAggro_Wanted)
|
|
SET_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_Wanted)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//add the wanted bit check for aggro checks
|
|
PROC CHECK_FOR_WANTED_IN_AGGRO_CHECKS()
|
|
IF IS_BITMASK_AS_ENUM_SET(aggroArgs.iBitFieldDontCheck, EAggro_Wanted)
|
|
CLEAR_BITMASK_AS_ENUM(aggroArgs.iBitFieldDontCheck, EAggro_Wanted)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// put out fires near the player and on their car
|
|
PROC STOP_FIRES_AROUND_PLAYER_FOR_CUTSCENE()
|
|
STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 15)
|
|
IF IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE())
|
|
STOP_ENTITY_FIRE(GET_PLAYERS_LAST_VEHICLE())
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC PREP_PLAYER_FOR_CUTSCENE()
|
|
BOOL bPlayerInCar
|
|
VEHICLE_INDEX playerVeh
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
playerVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
bPlayerInCar = TRUE
|
|
ENDIF
|
|
IF bPlayerInCar
|
|
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(playerVeh, 5, 3)
|
|
ELSE
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
//Returns TRUE if the player has abandoned the area -
|
|
FUNC BOOL HAS_PLAYER_ABANDONED_ASSASSINATION_AREA(BOOL & bWarnBoolToCheck, VECTOR vPosToCheck, STRING warnMsg, FLOAT fFailDist)
|
|
FLOAT fCurrentDistance
|
|
|
|
// //TODO: change this! always returning false now!
|
|
// RETURN FALSE
|
|
|
|
IF NOT bGrabbedDistance
|
|
fStoredDistance = GET_PLAYER_DISTANCE_FROM_LOCATION(vPosToCheck)
|
|
PRINTLN("fStoredDistance = ", fStoredDistance)
|
|
bGrabbedDistance = TRUE
|
|
ENDIF
|
|
|
|
fCurrentDistance = GET_PLAYER_DISTANCE_FROM_LOCATION(vPosToCheck)
|
|
// PRINTLN("fCurrentDistance = ", fCurrentDistance)
|
|
|
|
IF NOT bWarnBoolToCheck
|
|
IF fCurrentDistance > (fStoredDistance + (fFailDist/2))
|
|
//warn the player
|
|
IF NOT IS_MESSAGE_BEING_DISPLAYED()
|
|
PRINT_NOW(warnMsg, DEFAULT_GOD_TEXT_TIME, 1)
|
|
bWarnBoolToCheck = TRUE
|
|
RESTART_TIMER_NOW(assFailTimer)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
//fail the player if they have been told to return to the location and have ignored it
|
|
IF fCurrentDistance > fFailDist
|
|
IF NOT IS_MESSAGE_BEING_DISPLAYED()
|
|
IF IS_TIMER_STARTED(assFailTimer)
|
|
IF GET_TIMER_IN_SECONDS(assFailTimer) > 15
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_PLAYER_NEED_SAFE_WARP()
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF IS_PED_IN_ANY_HELI(PLAYER_PED_ID()) OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
|
|
PRINTLN("RETURNING TRUE ON - DOES_PLAYER_NEED_SAFE_WARP")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//functions to fade in and out safely
|
|
PROC FADE_IN(INT iTime = 500)
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
DO_SCREEN_FADE_IN(iTime)
|
|
WHILE NOT IS_SCREEN_FADED_IN()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC FADE_OUT(INT iTime = 500)
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_OUT(iTime)
|
|
WHILE NOT IS_SCREEN_FADED_OUT()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_PLAYER_IN_ANY_SHOP_EXCEPT_AMMUNATION()
|
|
IF IS_PLAYER_IN_ANY_SHOP()
|
|
IF NOT IS_PLAYER_IN_SHOP_OF_TYPE(SHOP_TYPE_GUN)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|