260 lines
7.9 KiB
Scheme
Executable File
260 lines
7.9 KiB
Scheme
Executable File
// controller_Trafficking.sch
|
|
USING "commands_script.sch"
|
|
USING "globals.sch"
|
|
USING "flow_public_core.sch"
|
|
USING "flow_public_core_override.sch"
|
|
USING "mission_control_public.sch"
|
|
USING "replay_public.sch"
|
|
USING "commands_task.sch"
|
|
USING "rich_presence_public.sch"
|
|
|
|
CONST_FLOAT TRAF_CONTROLLER_UPDATE_DIST2 62500.0 // 250m2 is when the controller will begin updating.
|
|
CONST_FLOAT TRAF_UPDATE_DIST2 50625.0 // 225m2 is when the actual segments of the controller think you're in range.
|
|
|
|
ENUM TRAFFICKING_STATE
|
|
TKS_INIT = 0,
|
|
TKS_AREA_WAIT,
|
|
TKS_STREAM,
|
|
TKS_STREAM_WAIT,
|
|
TKS_LAUNCH_WAIT,
|
|
TKS_CUTSCENE,
|
|
TKS_LAUNCH,
|
|
TKS_RUN_WAIT,
|
|
TKS_WAIT_FOR_FAILSCREEN_REPLAY,
|
|
|
|
TKS_LEAVE_WAIT
|
|
ENDENUM
|
|
|
|
// **** CONTROLLER GLOBALS ****
|
|
PED_INDEX pedPlayer
|
|
VEHICLE_INDEX vehToSave
|
|
THREADID traffickingThread
|
|
FLOAT fDist2ToLauncher = 9999999.9
|
|
VECTOR vLaunchCoords = <<2134.06, 4780.69, 41.664>>
|
|
INT iMissionCandidateID = NO_CANDIDATE_ID
|
|
BOOL bTriggerWeaponsReset = FALSE
|
|
BOOL bSwitchInProgress = FALSE
|
|
|
|
// TEMP!!! - REMOVE LATER
|
|
BOOL bTempBool[6]
|
|
BOOL bRequestedLaunchedTrafficking
|
|
BOOL bOkayToKeepBlipsActive = FALSE
|
|
|
|
// **** CONTROLLER CORE FUNCTIONALITY ****
|
|
FUNC BOOL IS_TRAFFICKING_ACTIVE()
|
|
IF (g_savedGlobals.sFlow.isGameflowActive)
|
|
|
|
// IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TRAFFICKING_AIR))
|
|
// PRINTLN("MINIGAME_TRAFFICKING_AIR IS ACTIVE")
|
|
// ELSE
|
|
// PRINTLN("MINIGAME_TRAFFICKING_AIR IS NOT ACTIVE")
|
|
// ENDIF
|
|
// IF GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TRAFFICKING_GROUND))
|
|
// PRINTLN("MINIGAME_TRAFFICKING_GROUND IS ACTIVE")
|
|
// ELSE
|
|
// PRINTLN("MINIGAME_TRAFFICKING_GROUND IS NOT ACTIVE")
|
|
// ENDIF
|
|
|
|
RETURN ( GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TRAFFICKING_AIR))
|
|
AND GET_MISSION_FLOW_BITSET_BIT_STATE(FLOWBITSET_MINIGAME_ACTIVE, ENUM_TO_INT(MINIGAME_TRAFFICKING_GROUND)))
|
|
ELSE
|
|
// PRINTLN("DEBUG - TRAFFICKING ACTIVE")
|
|
// We're in debug, but that shouldn't stop the fun.
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
// PRINTLN("FAILING HERE - IS_TRAFFICKING_ACTIVE")
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL TRAFFICKING_CONTROLLER_SHOULD_UPDATE()
|
|
// Don't update if the flowfalg is inactive.
|
|
IF NOT IS_TRAFFICKING_ACTIVE()
|
|
// PRINTLN("TRAFFICKING IS NOT ACTIVE")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT bRequestedLaunchedTrafficking
|
|
IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_T6_TRAF_AIR
|
|
// PRINTLN("WE'RE SWITCHING - GO AHEAD AND RETURN TRUE")
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF NOT CAN_MISSION_TYPE_START_AGAINST_CURRENT_TYPE(MISSION_TYPE_MINIGAME)
|
|
// PRINTLN("NEW CHECK FAIL")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Traffick_Ground")) = 1)
|
|
OR (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Traffick_Air")) = 1)
|
|
// PRINTLN("WE'RE STILL RUNNING AIR OR GROUND")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
// Don't update if the player is dead.
|
|
pedPlayer = PLAYER_PED_ID()
|
|
IF IS_ENTITY_DEAD(pedPlayer)
|
|
// We don't do this anymore. Controller needs to run despite death to handle replays.
|
|
// RETURN FALSE
|
|
ENDIF
|
|
|
|
// need to process if we're setting up a replay
|
|
IF IS_REPLAY_BEING_PROCESSED()
|
|
PRINTLN("IS_REPLAY_BEING_PROCESSED IS TRUE")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
|
|
// PRINTLN("We're not TREVOR, exiting early.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_IT_SAFE_TO_TRIGGER_SCRIPT_TYPE(ST_MINIGAME)
|
|
IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
bOkayToKeepBlipsActive = TRUE
|
|
// PRINTLN("bOkayToKeepBlipsActive = TRUE - 01")
|
|
ENDIF
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
bOkayToKeepBlipsActive = TRUE
|
|
// PRINTLN("bOkayToKeepBlipsActive = TRUE - 02")
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
// PRINTLN("PED IS IN COMBAT")
|
|
ENDIF
|
|
IF NOT IS_PLAYER_READY_FOR_CUTSCENE(PLAYER_ID())
|
|
// PRINTLN("PLAYER IS NOT READY FOR CUTSCENE")
|
|
ENDIF
|
|
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
// PRINTLN("PED HAS WANTED LEVEL GREATER THAN ZERO 01")
|
|
ENDIF
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(),0)
|
|
// PRINTLN("PED HAS WANTED LEVEL GREATER THAN ZERO 02")
|
|
ENDIF
|
|
IF IS_ENTITY_IN_AIR(PLAYER_PED_ID())
|
|
// PRINTLN("PLAYER IS IN THE AIR")
|
|
ENDIF
|
|
IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
// PRINTLN("PLAYER IS GETTING INTO A VEHICLE")
|
|
ENDIF
|
|
IF IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
// PRINTLN("PED IS RAGDOLLING")
|
|
ENDIF
|
|
IF IS_PLAYER_BEING_ARRESTED(PLAYER_ID())
|
|
// PRINTLN("PED IS BEING ARRESTED")
|
|
ENDIF
|
|
IF IS_PLAYER_CLIMBING(PLAYER_ID())
|
|
// PRINTLN("PED IS CLIMBING")
|
|
ENDIF
|
|
IF g_bPlayerIsInTaxi
|
|
// PRINTLN("PLAYER IS IN TAXI")
|
|
ENDIF
|
|
IF g_bIsOnRampage
|
|
// PRINTLN("PLAYER IS IN RAMPAGE")
|
|
ENDIF
|
|
IF IS_TRANSITION_ACTIVE()
|
|
// PRINTLN("SP<->MP TRANSITION IS ACTIVE")
|
|
ENDIF
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
// PRINTLN("SCRIPT HUD IS DISPLAYING")
|
|
ENDIF
|
|
IF IS_RESULT_SCREEN_DISPLAYING()
|
|
// PRINTLN("RESULT SCREEN IS DISPLAYING - GO AHEAD AND RETURN TRUE") // To Fix Bug # 1475703
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ELSE
|
|
bOkayToKeepBlipsActive = FALSE
|
|
// PRINTLN("SETTING bOkayToKeepBlipsActive TO FALSE")
|
|
ENDIF
|
|
|
|
|
|
// PRINTLN("WE'RE GOOD TO UPDATE")
|
|
|
|
// Passed all checks.
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Generic function that'll be called during the launch wait part of a controller.
|
|
/// Basically, checks to see if we need to clean and go to a holding state to wait for the player to be able to relaunch.
|
|
FUNC BOOL TRAFFICKING_SHOULD_CLEAN_AND_WAIT()
|
|
// If there's a mission running, and it's not us, and it's not a cleared mission, we should not update.
|
|
IF IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME)
|
|
// There are several missions for which we should not clean up.
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Trevor2")) = 1)
|
|
IF NOT bTempBool[0]
|
|
PRINTLN("MISSION RUNNING - Trevor2, BUT WE'RE STILL OKAY TO RUN!!!")
|
|
bTempBool[0] = TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("finale_heist2b")) = 1)
|
|
IF NOT bTempBool[1]
|
|
PRINTLN("MISSION RUNNING - finale_heist2b, BUT WE'RE STILL OKAY TO RUN!!!")
|
|
bTempBool[1] = TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Traffick_Air")) = 1)
|
|
IF NOT bTempBool[2]
|
|
PRINTLN("MISSION RUNNING - Traffick_Air, BUT WE'RE STILL OKAY TO RUN!!!")
|
|
bTempBool[2] = TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Traffick_Ground")) = 1)
|
|
IF NOT bTempBool[3]
|
|
PRINTLN("MISSION RUNNING - Traffick_Ground, BUT WE'RE STILL OKAY TO RUN!!!")
|
|
bTempBool[3] = TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF g_bLaunchMinigameReplay
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF (iMissionCandidateID != NO_CANDIDATE_ID)
|
|
// PRINTLN("RETURNING FALSE - NO_CANDIDATE_ID")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_T6_TRAF_AIR
|
|
// PRINTLN("WE'RE SWITCHING - BUT WE'RE STILL OKAY TO RUN!!!")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
// We're good to continue, no need to clean and go into a holding pattern.
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC HANDLE_VEHICLE_STORING()
|
|
MODEL_NAMES mnToTest
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vehToSave)
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), vLaunchCoords) < 2500 // 50m
|
|
|
|
vehToSave = GET_PLAYERS_LAST_VEHICLE()
|
|
// PRINTLN("GRABBING THE PLAYER'S LAST VEHICLE")
|
|
|
|
IF DOES_ENTITY_EXIST(vehToSave)
|
|
mnToTest = GET_ENTITY_MODEL(vehToSave)
|
|
IF mnToTest = DUNE
|
|
PRINTLN("IT THINKS THE DUNE IS THE LAST VEHICLE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// PRINTLN("GOT A CAR")
|
|
ENDIF
|
|
ENDPROC
|