Files
2025-09-29 00:52:08 +02:00

638 lines
24 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "getaway_vehicle_include.sch"
INT iStoppedTime = -1
/// PURPOSE:
/// Checks to see if the player has the phone cursor over one of the available contacts
/// RETURNS:
/// TRUE if the player is highlighting one of the available contacts
FUNC BOOL IS_PLAYER_HIGHLIGHTING_CONTACT()
IF SAFE_IS_CONTACT_LIST_ON_SCREEN()
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
IF eHighlighted = CHAR_TREVOR
OR eHighlighted = CHAR_FRANKLIN
#IF IS_DEBUG_BUILD
IF eHighlighted = CHAR_TREVOR
SK_PRINT("The player is highlighting CHAR_TREV, can be rang to leave the getaway")
ELIF eHighlighted = CHAR_FRANKLIN
SK_PRINT("The player is highlighting CHAR_FRANK, can be rang to leave the getaway")
ENDIF
#ENDIF
RETURN TRUE
// ELSE
// #IF IS_DEBUG_BUILD
// IF (GET_GAME_TIMER() - iGenericPrintTimer) > 1500
// #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SHARM_STEALTH, "Phone is on screen but player is not highlighting correct contact") #ENDIF
// ENDIF
// #ENDIF
ENDIF
ELSE
IF eHighlighted = CHAR_MICHAEL
#IF IS_DEBUG_BUILD SK_PRINT("The player is highlighting Michael, can be rang to leave the getaway") #ENDIF
RETURN TRUE
// ELSE
// #IF IS_DEBUG_BUILD
// IF (GET_GAME_TIMER() - iGenericPrintTimer) > 1500
// #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_SHARM_STEALTH, "Phone is on screen but player is not highlighting correct contact") #ENDIF
// ENDIF
// #ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_TO_CLOSE_TO_FBI_LOCS()
IF ( VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<855.72577, -2344.49072, 29.33145>>) <= 230*230) //HIEST location
IF SAFE_IS_CONTACT_LIST_ON_SCREEN()
SET_HELP_TEXT_BIT(HTE_LOC_SEC_ROUTE)
ENDIF
// PRINT_HELP("AM_H_FBIC6A", DEFAULT_HELP_TEXT_TIME)//This location isn't discrete enough.
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "TOO CLOSE TO HIEST location RETURN TRUE")
#ENDIF
RETURN TRUE
ELIF ( VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<1383.21021, -2068.01978, 51.87057>>) <= 400*400) //FBI LOT
IF SAFE_IS_CONTACT_LIST_ON_SCREEN()
SET_HELP_TEXT_BIT(HTE_LOC_FIB_LOC)
ENDIF
// PRINT_HELP("AM_H_FBIC6B", DEFAULT_HELP_TEXT_TIME)//This location isn't discrete enough.
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "TOO CLOSE TO FBI LOT() RETURN TRUE")
#ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Performs all checks required to decide if the vehicle is suitable to use as a vehicle
/// PARAMS:
/// Veh - the vehicle perfore the checks on
/// RETURNS:
/// TRUE if the current vehicle is valid
FUNC BOOL IS_CURRENT_VEHICLE_VALID(VEHICLE_INDEX Veh)
IF IS_VEHICLE_ROAD_VEHICLE()
AND DO_VALID_GETAWAY_CAR_CHECK(Veh)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
//SET_PED_ALLOW_MINOR_REACTIONS_AS_MISSION_PED
PROC MONITOR_HIDING_PLACE_VALID()
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
AND g_OnMissionState = MISSION_TYPE_OFF_MISSION
AND NOT IS_MISSION_LEADIN_ACTIVE()
IF eCopMonitor = CM_MONITER
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vPotentialHidingPos, 5)
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE)) ///
OR IS_PLAYER_HIGHLIGHTING_CONTACT()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
AND NOT IS_BIT_SET(iHelpTextBit[0], ENUM_TO_INT(HTE_VEH_CAN_BE_USED_FRANK_TREV))
AND NOT IS_BIT_SET(iHelpTextBit[1], ENUM_TO_INT(HTE_VEH_CAN_BE_USED_MIKE))
IF IS_PED_STOPPED(PLAYER_PED_ID())
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_VEH_STOP)
#IF IS_DEBUG_BUILD SK_PRINT("Player is stopped start vehicle checks") #ENDIF
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
IF NOT IS_PLAYER_TO_CLOSE_TO_FBI_LOCS()
AND IS_AREA_QUIET(GET_ENTITY_COORDS(viVeh))
IF IS_AREA_CLEAR_AROUND_LOCATION_VEHICLE(viVeh)
IF IS_VEHICLE_UPRIGHT_AND_LEVEL(viVeh)
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
IF GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) = CHAR_MICHAEL
SET_HELP_TEXT_BIT(HTE_LOC_SUITABLEFT)
CLEAR_ALL_HELP_BITS(HTE_LOC_SUITABLEFT, TRUE)
ELSE
SET_HELP_TEXT_BIT(HTE_LOC_SUITABLEM)
CLEAR_ALL_HELP_BITS(HTE_LOC_SUITABLEM, TRUE)
ENDIF
vPotentialHidingPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
EXIT
ENDIF
ENDIF
ENDIF
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
CLEAR_ALL_HELP_BITS(NUM_HELP)
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
ENDIF
vPotentialHidingPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_LOC_SUITABLEFT, HTE_LOC_SUITABLEM)
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
ELSE
SET_HELP_TEXT_BIT(HTE_VEH_STOP)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT SAFE_IS_CONTACT_LIST_ON_SCREEN()
IF IS_PED_STOPPED(PLAYER_PED_ID())
AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE)) ///
IF iStoppedTime != -1
IF (GET_GAME_TIMER() - iStoppedTime) > 1000
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
ENDIF
ELSE
iStoppedTime = GET_GAME_TIMER()
ENDIF
ELSE
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
ENDIF
ENDIF
ENDIF
ELSE
IF SAFE_IS_CONTACT_LIST_ON_SCREEN()
vPotentialHidingPos = <<0,0,0>>
ENDIF
ENDIF
ELSE
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vPotentialHidingPos, 10)
#IF IS_DEBUG_BUILD SK_PRINT("Player is 10m away from the vPotentialHidingPos clearing flag") #ENDIF
vPotentialHidingPos = <<0,0,0>>
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
ELIF NOT IS_PED_STOPPED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE)) ///
SET_HELP_TEXT_BIT(HTE_VEH_STOP)
ENDIF
CLEAR_ALL_HELP_BITS(HTE_VEH_STOP, TRUE)
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
vPotentialHidingPos = <<0,0,0>>
#IF IS_DEBUG_BUILD SK_PRINT("Player started moving whilst ringing") #ENDIF
ENDIF
ELIF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_OK(viVeh)
IF GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) != viVeh
CLEAR_ALL_HELP_BITS(NUM_HELP)
HANG_UP_AND_PUT_AWAY_PHONE()
CLEAR_CAR_RELATED_BITS()
vPotentialHidingPos = <<0,0,0>>
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
#IF IS_DEBUG_BUILD SK_PRINT("got in to a different car whilst ringing") #ENDIF
ENDIF
ENDIF
ELIF NOT IS_AREA_CLEAR_AROUND_LOCATION_VEHICLE(viVeh)
CLEAR_ALL_HELP_BITS(HTE_LOC_PUBLIC, TRUE)
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
vPotentialHidingPos = <<0,0,0>>
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_TIME_OUT_HIDING_PLACE))
iStoppedTime = -1
#IF IS_DEBUG_BUILD SK_PRINT("ped walked passed") #ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MONITOR_PLAYERS_CAR()
IF g_OnMissionState = MISSION_TYPE_OFF_MISSION
AND eCopMonitor = CM_MONITER
AND NOT IS_MISSION_LEADIN_ACTIVE()
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT MONITOR_PLAYER_CARGO_BOBBING_CAR()
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
VEHICLE_INDEX viPlayersVeh = GET_PLAYERS_LAST_VEHICLE()
IF IS_VEHICLE_OK(viPlayersVeh)
IF NOT HAS_VEHICLE_BEEN_CHECKED_BEFORE(viPlayersVeh)
#IF IS_DEBUG_BUILD SK_PRINT("3") #ENDIF
IF NOT DECOR_EXIST_ON(viPlayersVeh, "Getaway_Winched")
IF IS_CURRENT_VEHICLE_VALID(viPlayersVeh)
AND NOT IS_PLAYER_PASSENGER_IN_TAXI()
IF NOT IS_ENTITY_A_MISSION_ENTITY(viPlayersVeh)
#IF IS_DEBUG_BUILD SK_PRINT("bIsCarValid = TRUE 1 ") #ENDIF
IF GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) = CHAR_MICHAEL
SET_HELP_TEXT_BIT(HTE_VEH_CAN_BE_USED_FRANK_TREV)
ELSE
SET_HELP_TEXT_BIT(HTE_VEH_CAN_BE_USED_MIKE)
ENDIF
viVeh = viPlayersVeh
SET_ENTITY_AS_MISSION_ENTITY(viVeh, TRUE, TRUE)
IF DECOR_SET_BOOL(viVeh, "GetawayVehicleValid", TRUE)
#IF IS_DEBUG_BUILD SK_PRINT("ADDED decor - GetawayVehicleValid = TRUE") #ENDIF
ENDIF
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
EXIT
ELSE
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("BISCARVALID = FALSE 1 ")
ENDIF
CPRINTLN(DEBUG_MISSION, "Player entered mission vehicle, which was then checked by the getaway vehicle script", GET_THIS_SCRIPT_NAME())
#ENDIF
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR IS_ENTITY_A_MISSION_ENTITY(viPlayersVeh)- SAFE_RELEASE_VEHICLE(VIVEH)") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
#IF IS_DEBUG_BUILD SK_PRINT("bHasCurrentVehicleBeenChecked = TRUE 3 ") #ENDIF
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
EXIT
ENDIF
ENDIF
ENDIF
IF DECOR_SET_BOOL(viPlayersVeh, "GetawayVehicleValid", FALSE)
#IF IS_DEBUG_BUILD SK_PRINT("ADDED decor - GetawayVehicleValid = FALSE ") #ENDIF
ENDIF
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
#IF IS_DEBUG_BUILD SK_PRINT("bHasCurrentVehicleBeenChecked = TRUE 1 ") #ENDIF
ELSE
IF IS_PREVIOUSLY_CHECKED_VEHICLE_VALID(viPlayersVeh)
#IF IS_DEBUG_BUILD SK_PRINT("bIsCarValid = TRUE 2 ") #ENDIF
viVeh = viPlayersVeh
SET_ENTITY_AS_MISSION_ENTITY(viVeh, TRUE, TRUE)
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
EXIT
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("bIsCarValid = FALSE 1 ")
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR 1 - SAFE_RELEASE_VEHICLE(viVeh)") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
#IF IS_DEBUG_BUILD SK_PRINT("bHasCurrentVehicleBeenChecked = TRUE 2 ") #ENDIF
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
ENDIF
ELSE
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
IF NOT IS_VEHICLE_OK(viVeh)
#IF IS_DEBUG_BUILD SK_PRINT("VEHICLE is dead reset bits ") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
VEHICLE_INDEX viPlayersVeh = GET_PLAYERS_LAST_VEHICLE()
IF IS_VEHICLE_OK(viPlayersVeh)
CPRINTLN(DEBUG_MISSION, "GET_PLAYERS_LAST_VEHICLE() is valid in GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE")
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), viPlayersVeh, 10)
AND NOT DECOR_EXIST_ON(viPlayersVeh, "Getaway_Winched")
CPRINTLN(DEBUG_MISSION, "Player has returned to a vaild vehicle, grabbing vehicle")
viVeh = viPlayersVeh
SET_ENTITY_AS_MISSION_ENTITY(viVeh, TRUE, TRUE)
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
SK_PRINT("bHasCurrentVehicleBeenChecked = FALSE 1 ")
ENDIF
#ENDIF
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
ENDIF
ENDIF
ELSE
IF IS_VEHICLE_OK(viVeh)
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), viVeh, 80)
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("bIsCarValid = FALSE 2 ")
ENDIF
#ENDIF
IF NOT DECOR_EXIST_ON(viVeh, "Getaway_Winched")
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR 2 - SAFE_RELEASE_VEHICLE(viVeh)") #ENDIF
SET_BIT(iHelpTextBit[GET_HELP_BIT_ID(ENUM_TO_INT(HTE_LEFT_CAR))], ENUM_TO_INT(HTE_LEFT_CAR))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
ELSE
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_CHECK_IF_PLAYER_RETURNS_TO_VEHICLE))
ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
CLEAR_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_HAS_CURRENT_VEHICLE_BEEN_CHECKED))
ELIF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) != viVeh
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("bIsCarValid = FALSE 3 ")
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR 3 - SAFE_RELEASE_VEHICLE(viVeh)") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_VEH_CAN_BE_USED_FRANK_TREV)
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_VEH_CAN_BE_USED_MIKE)
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_UNSUITABLE_VEH)
#IF IS_DEBUG_BUILD SK_PRINT("bHasCurrentVehicleBeenChecked = FALSE 1 ") #ENDIF
CLEAR_CAR_RELATED_BITS()
ELSE
IF MONITOR_PLAYER_CARGO_BOBBING_CAR()
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("bIsCarValid = FALSE 3 ")
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR 3 - SAFE_RELEASE_VEHICLE(viVeh)") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
#IF IS_DEBUG_BUILD SK_PRINT("bHasCurrentVehicleBeenChecked = FALSE 1 ") #ENDIF
CLEAR_CAR_RELATED_BITS()
ENDIF
ENDIF
ELIF NOT IS_GETAWAY_VEHICLE_HEALTHY(viVeh)
IF DECOR_SET_BOOL(viVeh, "GetawayVehicleValid", FALSE)
#IF IS_DEBUG_BUILD SK_PRINT("ADDED decor - GetawayVehicleValid HEALTH = FALSE ") #ENDIF
ENDIF
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_VEH_CAN_BE_USED_FRANK_TREV)
CLEAR_DISPLAYING_HELP_AND_CLEAR_BIT(HTE_VEH_CAN_BE_USED_MIKE)
SAFE_RELEASE_VEHICLE(viVeh)
CLEAR_CAR_RELATED_BITS()
ENDIF
ELSE
#IF IS_DEBUG_BUILD
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
SK_PRINT("bIsCarValid = FALSE 4 ")
ENDIF
#ENDIF
#IF IS_DEBUG_BUILD SK_PRINT("MONITOR_PLAYERS_CAR 4 - SAFE_RELEASE_VEHICLE(viVeh)") #ENDIF
SAFE_RELEASE_VEHICLE(viVeh)
CLEAR_CAR_RELATED_BITS()
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_CAR_BEEN_PLACED()
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_CAR_VALID))
// VEHICLE_INDEX viPlayersVeh = GET_PLAYERS_LAST_VEHICLE()
IF IS_VEHICLE_OK(viVeh)
IF IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
IF IS_CALLING_CONTACT_FOR_SECONDARY_FUNCTION(CHAR_MICHAEL)
OR IS_CALLING_CONTACT_FOR_SECONDARY_FUNCTION(CHAR_TREVOR)
OR IS_CALLING_CONTACT_FOR_SECONDARY_FUNCTION(CHAR_FRANKLIN)
CLEAR_ALL_HELP_BITS(NUM_HELP, TRUE)
GRAB_CAR_PLACED_INFO()
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC WAIT_PLACE_FIRST_ITEM()
MONITOR_RESTRICTED_AREAS()
MONITOR_PLAYERS_CAR()
MONITOR_HIDING_PLACE_VALID()
MONITOR_PHONE_CALL()
MONITOR_CONTACTS()
IF HAS_CAR_BEEN_PLACED()
MISSION_STATE eNextState
IF PICK_PHONE_CALL_AND_NEXT_STATE(eNextState)
CONTACT_WATCH(FALSE)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND IS_PED_STOPPED(PLAYER_PED_ID())
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, " Telling the player to get out of the getaway vehicle after phone call") #ENDIF
ENDIF
IF IS_VEHICLE_OK(viVeh)
SET_VEHICLE_DOORS_LOCKED(viVeh, VEHICLELOCK_LOCKED)
ENDIF
UPDATE_SAVED_STATE(eNextState)
ENDIF
ENDIF
ENDPROC
PROC MONITOR_GETAWAY()
MAINTAIN_GETAWAY_VEHICLE()
MONITOR_PHONE_CALL()
ENDPROC
PROC MONITOR_PLAYER_ON_FIB4()
IF MISSION_FLOW_GET_RUNNING_MISSION() = SP_MISSION_FBI_4
IF IS_REPLAY_IN_PROGRESS()
AND NOT GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_MISSION_VEH_FBI4_PREP, VEHGEN_S_FLAG_AVAILABLE)
IF mDroppedOffCarStruct.eModel != DUMMY_MODEL_FOR_SCRIPT
CPRINTLN(DEBUG_MISSION, "REINITIALISING - Vehicle gen after replay from ", GET_THIS_SCRIPT_NAME())
UPDATE_DYNAMIC_VEHICLE_GEN_DATA(VEHGEN_MISSION_VEH_FBI4_PREP, mDroppedOffCarStruct, vCarPosition, fCarHeading)
ENDIF
ENDIF
ELIF MISSION_FLOW_GET_RUNNING_MISSION() = SP_MISSION_NONE
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_IS_HIDING_POS_VALID))
IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vPotentialHidingPos, 5)
IF IS_PLAYER_HIGHLIGHTING_CONTACT()
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
IF IS_FRIEND_ACTIVITY_SCRIPT_RUNNING()
SET_HELP_TEXT_BIT(HTE_ON_FRIEND_ACT)
ELIF g_bTaxiProceduralRunning
SET_HELP_TEXT_BIT(HTE_ON_TAXI_MISSION)
ELSE
SET_HELP_TEXT_BIT(HTE_ON_MISSION)
ENDIF
eHelpTextState = HTS_DISPLAY
fHelpDisplayedFor = 0.0
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC DO_ON_MISSION_CHECKS()
MONITOR_PLAYER_MOVING_VEHICLE_ON_MISSION()
MONITOR_PLAYER_ON_FIB4()
ENDPROC
PROC WAIT_ON_MISSION()
// #IF IS_DEBUG_BUILD
// IF iOnMissionTimerCheck != -1
// IF (GET_GAME_TIMER() - iOnMissionTimerCheck) > 5000
// CPRINTLN(DEBUG_SHARM_STEALTH, "In on mission state", GET_THIS_SCRIPT_NAME())
// ENDIF
// ENDIF
// #ENDIF
DO_ON_MISSION_CHECKS()
ENDPROC
SCRIPT
IF NOT REGISTER_SCRIPT_TO_RELAUNCH_LIST(LAUNCH_BIT_FBI4_PREP3)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "Loading from a save - ", GET_THIS_SCRIPT_NAME())
#ENDIF
eMissionState = INT_TO_ENUM(MISSION_STATE, g_savedGlobals.sAmbient.iGetawayState)
IF eMissionState = MS_MONITOR_GETAWAY_AREA
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_AWARDED_PLAYER_PERCENTAGE_PASSED_MISSION))
vCarPosition = GET_VEHICLE_GEN_COORDS(VEHGEN_MISSION_VEH_FBI4_PREP) //talk to kenneth
fCarHeading = GET_VEHICLE_GEN_HEADING(VEHGEN_MISSION_VEH_FBI4_PREP)
IF GET_VEHICLE_GEN_VEHICLE_SETUP_SAVED_DATA(mDroppedOffCarStruct, VEHGEN_MISSION_VEH_FBI4_PREP)
IF NOT IS_BIT_SET(iGetawayFlowFlag, ENUM_TO_INT(GFF_VEHICLE_PLACED))
SET_BIT(iGetawayFlowFlag, ENUM_TO_INT(GFF_VEHICLE_PLACED))
ENDIF
CPRINTLN(DEBUG_MISSION, "Vehicle gen vehicle setup data was found - ")
ELSE
SCRIPT_ASSERT("Vehicle gen data was not found for VEHGEN_MISSION_VEH_FBI4_PREP")
ENDIF
ENDIF
CPRINTLN(DEBUG_MISSION, "Saved state - ", g_savedGlobals.sAmbient.iGetawayState)
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "First time initialisation - ", GET_THIS_SCRIPT_NAME())
#ENDIF
g_savedGlobals.sAmbient.iGetawayState = ENUM_TO_INT(eMissionState)
ENDIF
// Setup callback when player is killed, arrested or goes to multiplayer
IF (HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_REPEAT_PLAY ))
#IF IS_DEBUG_BUILD SK_PRINT("HAS_FORCE_CLEANUP_OCCURRED") #ENDIF
IF GET_CAUSE_OF_MOST_RECENT_FORCE_CLEANUP() = FORCE_CLEANUP_FLAG_SP_TO_MP
CONTACT_WATCH(FALSE)
Script_Cleanup(LAUNCH_BIT_FBI4_PREP3, TRUE)
ELSE
Script_Cleanup(LAUNCH_BIT_FBI4_PREP3)
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF bShowDebugText
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE (TRUE)
ENDIF
SET_PROFILING_OF_THIS_SCRIPT(TRUE)
SET_UP_RAG_WIDGETS()
// BREAK_ON_NATIVE_COMMAND("CLEAR_HELP", FALSE)
#ENDIF
POPULATE_STUFF(FIB4_GETAWAY)
// Loop within here until the mission passes or fails
WHILE(TRUE)
#IF IS_DEBUG_BUILD
IF (GET_GAME_TIMER() - iGenericPrintTimer) > 20000
SK_PRINT("Still looping prep 3 ")
ENDIF
#ENDIF
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_4)
#IF IS_DEBUG_BUILD SK_PRINT("FIB 4 HAS PASSED Clean up Getaway FIB 4 script") #ENDIF
Script_Cleanup(LAUNCH_BIT_FBI4_PREP3)
ENDIF
#IF IS_DEBUG_BUILD
IF iGenericPrintTimer = -1
iGenericPrintTimer = GET_GAME_TIMER()
ELSE
IF (GET_GAME_TIMER() - iGenericPrintTimer) > 20000
iGenericPrintTimer = -1
ENDIF
ENDIF
#ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
MONITOR_PLAYER_IN_MOD_SHOP()
MONITOR_ON_MISSION_STATUS()
MONITOR_FOR_PLAYER_SWITCH()
MONITER_HELP_TEXT()
SWITCH eMissionState
CASE MS_PLACE_FIRST_ITEM
WAIT_PLACE_FIRST_ITEM()
BREAK
CASE MS_MONITOR_GETAWAY_AREA
MONITOR_GETAWAY()
BREAK
CASE MS_WAIT_ON_MISSION
WAIT_ON_MISSION()
BREAK
CASE MS_DISPLAYING_SPLASH
DISPLAY_SPLASH(FLOWFLAG_MISSION_FBI_4_PREP_3_COMPLETED)
BREAK
CASE MS_DONE
BREAK
DEFAULT
SCRIPT_ASSERT("Getaway car mission state is invalid. Add bug and include details about if loaded from a save or if there where any RE's or minigames around at the time")
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
UPDATE_WIDGET()
// Check debug completion/failure
UPDATE_DEBUG_PASS()
#ENDIF
SAFE_MONITOR_CONTACT_HIGHLIGHT()
ELSE
CLEAR_ALL_HELP_BITS(NUM_HELP, TRUE)
ENDIF
// #IF IS_DEBUG_BUILD
// IF (GET_GAME_TIMER() - iGenericPrintTimer) > 2000
// SK_PRINT("B ")
// ENDIF
// #ENDIF
WAIT(0)
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT