Files
gtav-src/script/dev_ng/singleplayer/scripts/Ambient/Misc/restrictedAreas.sc
T
2025-09-29 00:52:08 +02:00

595 lines
22 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.
// Includes
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_entity.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "area_checks.sch"
USING "script_player.sch"
USING "flow_public_core.sch"
USING "replay_public.sch"
USING "vehicle_gen_private.sch"
USING "properties_public.sch"
// Enums
ENUM restrictedStageFlag
waitingForInteraction = 0,
debugHoldingCase,
onReplayScreen
ENDENUM
restrictedStageFlag restrictedStage = waitingForInteraction
// Constants
CONST_INT NUMBER_OF_AREAS 8
CONST_INT GOLF_COURSE 0
CONST_INT AIRPORT_AIRSIDE 1
CONST_INT MILITARY_BASE 2
CONST_INT PRISON 3
CONST_INT BIOPLANT 4
CONST_INT MILITARY_DOCKS 5
CONST_INT MOVIE_STUDIO 6
CONST_INT DOWNTOWN_POLICE 7
CONST_INT PRISON_DELAY 8000
CONST_FLOAT SQUARE_DISTANCE 1000000.0 // 1000m^2
// Variables
AREA_CHECK_AREAS acArea
BOOL bWithinActiveDistance[NUMBER_OF_AREAS]
BOOL bIsSuppressed[NUMBER_OF_AREAS]
BOOL bAllowedInArea, bWarnedByAirTrafficControl, bRestrictedWantedLevelActive
BOOL bActiveWantedArea[NUMBER_OF_AREAS]
INT iAreaCounter
INT iActiveAreas
INT currentArea
INT restrictedWantedLevel = 3
TEXT_LABEL_23 suppressingScript
INT iTimeInArea[NUMBER_OF_AREAS]
structPedsForConversation dialogueStruct
// Debug
#IF IS_DEBUG_BUILD
BOOL bDisableWanted = FALSE
BOOL bDrawLocate
BOOL bButtonToggle
BOOL bOutput
VECTOR vMin
VECTOR vMax
#ENDIF
PROC SETUP_DEBUG()
#IF IS_DEBUG_BUILD
START_WIDGET_GROUP("Restricted Areas")
ADD_WIDGET_BOOL("Disable Restricted Area Wanted Level", bDisableWanted)
ADD_WIDGET_FLOAT_SLIDER("vMin.x", vMin.x, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("vMin.y", vMin.y, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("vMin.z", vMin.z, -150, 150, 0.1)
ADD_WIDGET_FLOAT_SLIDER("vMax.x", vMax.x, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("vMax.y", vMax.y, -7000, 7000, 0.1)
ADD_WIDGET_FLOAT_SLIDER("vMax.z", vMax.z, -150, 150, 0.1)
ADD_WIDGET_BOOL("bDrawLocate", bDrawLocate)
ADD_WIDGET_BOOL("bOutput", bOutput)
ADD_WIDGET_BOOL("Enable debug spew", bRADebugSpam)
STOP_WIDGET_GROUP()
#ENDIF
ENDPROC
PROC RUN_DEBUG()
#IF IS_DEBUG_BUILD
// Toggle for wanted level
IF bDisableWanted
IF restrictedStage <> debugHoldingCase
restrictedStage = debugHoldingCase
ENDIF
ELSE
IF restrictedStage = debugHoldingCase
restrictedStage = waitingForInteraction
ENDIF
ENDIF
IF bDrawLocate
IS_ENTITY_IN_AREA(PLAYER_PED_ID(), vMin, vMax, TRUE)
ENDIF
IF bOutput
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_VECTOR_TO_DEBUG_FILE(vMin)
SAVE_STRING_TO_DEBUG_FILE(", ")
SAVE_VECTOR_TO_DEBUG_FILE(vMax)
SAVE_NEWLINE_TO_DEBUG_FILE()
bOutput = FALSE
ENDIF
IF NOT bButtonToggle
IF IS_MOUSE_BUTTON_JUST_RELEASED(MB_LEFT_BTN)
vMin = GET_SCRIPT_MOUSE_POINTER_IN_WORLD_COORDS()
bButtonToggle = TRUE
ENDIF
ELSE
IF IS_MOUSE_BUTTON_JUST_RELEASED(MB_LEFT_BTN)
vMax = GET_SCRIPT_MOUSE_POINTER_IN_WORLD_COORDS()
vMax.z += 3
bButtonToggle = FALSE
ENDIF
ENDIF
#ENDIF
ENDPROC
/// PURPOSE:
/// Has the current player character bought the golf course?
/// RETURNS:
/// TRUE if owned
FUNC BOOL IS_GOLF_COURSE_OWNED_BY_CURRENT_PLAYER()
IF GET_CURRENT_PROPERTY_OWNER(PROPERTY_GOLF_CLUB) = GET_CURRENT_PLAYER_PED_ENUM()
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Is the player on the golf course in a vehicle that is not allowed?
/// RETURNS:
/// TRUE if the player is in anything other than a golf cart (CADDY/CADDY2)
FUNC BOOL CHECK_RESTRICTED_VEHICLES_FOR_GOLF_COURSE()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
VEHICLE_INDEX vehIndex = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(vehIndex)
IF IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(vehIndex))
OR GET_ENTITY_MODEL(vehIndex) = CADDY
OR GET_ENTITY_MODEL(vehIndex) = CADDY2
RETURN TRUE
ELSE
RETURN FALSE
ENDIF
ENDIF
ENDIF
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Does the current player have a hangar space at the airport?
/// RETURNS:
/// TRUE if current player owns a hangar
FUNC BOOL IS_AIRPORT_OWNED_BY_CURRENT_PLAYER()
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
CASE CHAR_MICHAEL
IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_MICHAEL, VEHGEN_S_FLAG_ACQUIRED)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_AIRPORT_OWNED_BY_CURRENT_PLAYER(), VEHGEN_WEB_HANGAR_MICHAEL") ENDIF #ENDIF
RETURN TRUE
ENDIF
BREAK
CASE CHAR_FRANKLIN
IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_FRANKLIN, VEHGEN_S_FLAG_ACQUIRED)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_AIRPORT_OWNED_BY_CURRENT_PLAYER(), VEHGEN_WEB_HANGAR_FRANKLIN") ENDIF #ENDIF
RETURN TRUE
ENDIF
BREAK
// CASE CHAR_TREVOR
// IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WEB_HANGAR_TREVOR, VEHGEN_S_FLAG_ACQUIRED)
// #IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_AIRPORT_OWNED_BY_CURRENT_PLAYER(), VEHGEN_WEB_HANGAR_TREVOR") ENDIF #ENDIF
// RETURN TRUE
// ENDIF
// BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL IS_STUDIO_OPEN_FOR_CURRENT_PLAYER()
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
CASE CHAR_MICHAEL
IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - TRUE for MICHAEL") ENDIF #ENDIF
RETURN TRUE
#IF IS_DEBUG_BUILD ELSE IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - FALSE for MICHAEL") ENDIF #ENDIF
ENDIF
// B*1405773 - Don't get a wanted level if Solomon1 is available, even if they don't go to security gates
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH (HASH("ambient_Solomon")) > 0
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - ambient_solomon is running - Michael is allowed in studio") ENDIF #ENDIF
RETURN TRUE
ENDIF
BREAK
CASE CHAR_FRANKLIN
IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN_FRANKLIN)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - TRUE for FRANKLIN") ENDIF #ENDIF
RETURN TRUE
#IF IS_DEBUG_BUILD ELSE IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - FALSE for FRANKLIN") ENDIF #ENDIF
ENDIF
BREAK
CASE CHAR_TREVOR
IF GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - TRUE for TREVOR") ENDIF #ENDIF
RETURN TRUE
#IF IS_DEBUG_BUILD ELSE IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "<", GET_THIS_SCRIPT_NAME(), "> - IS_STUDIO_OPEN_FOR_CURRENT_PLAYER(), FLOWFLAG_MOVIE_STUDIO_OPEN - FALSE for TREVOR") ENDIF #ENDIF
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC APPLY_WANTED_LEVEL()
SWITCH currentArea
CASE GOLF_COURSE
restrictedWantedLevel = 2
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the GOLF_COURSE wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE AIRPORT_AIRSIDE
IF IS_PED_IN_FLYING_VEHICLE(PLAYER_PED_ID())
AND IS_PROJECTILE_IN_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)+<<200,200,200>>, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)-<<200,200,200>>, TRUE)
restrictedWantedLevel = 5
ELSE
restrictedWantedLevel = 3
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the AIRPORT_AIRSIDE wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE MILITARY_BASE
IF IS_PED_IN_FLYING_VEHICLE(PLAYER_PED_ID())
AND IS_PROJECTILE_IN_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)+<<200,200,200>>, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)-<<200,200,200>>, TRUE)
restrictedWantedLevel = 5
ELSE
restrictedWantedLevel = 4
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the MILITARY_BASE wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE PRISON
restrictedWantedLevel = 4
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the PRISON wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE BIOPLANT
restrictedWantedLevel = 4
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the BIOPLANT wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE MILITARY_DOCKS
restrictedWantedLevel = 4 //#1313927 // #1025597
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the MILITARY_DOCKS wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE MOVIE_STUDIO
restrictedWantedLevel = 2
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the MOVIE_STUDIO wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
CASE DOWNTOWN_POLICE
restrictedWantedLevel = 3
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - Setting the DOWNTOWN_POLICE wanted level to ", restrictedWantedLevel)
ENDIF
BREAK
ENDSWITCH
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < restrictedWantedLevel
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), restrictedWantedLevel)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
ENDIF
// Flag for repeat checks
bActiveWantedArea[ENUM_TO_INT(currentArea)] = TRUE
bRestrictedWantedLevelActive = TRUE
ENDPROC
SCRIPT
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_MAGDEMO)
CPRINTLN(DEBUG_AMBIENT, GET_THIS_SCRIPT_NAME(), " - FORCE CLEANUP")
TERMINATE_THIS_THREAD()
ENDIF
SETUP_DEBUG()
ADD_PED_FOR_DIALOGUE(dialogueStruct, 8, NULL, "TANNOY")
WHILE TRUE
WAIT(0)
RUN_DEBUG()
IF IS_PLAYER_PLAYING(PLAYER_ID())
// IF IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-1773.943970,3287.334229,30>>, <<-2029.776489,2845.083252,250>>, 250.000000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2725.889404,3291.098633,30>>, <<-2009.181519,2879.835205,250>>, 180.000000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2442.026123,3326.698730,30>>, <<-2033.927856,3089.048828,250>>, 200.000000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-1917.165405,3374.208984,30>>, <<-2016.790894,3195.058105,250>>, 86.250000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2192.752930,3373.277832,30>>, <<-2191.544434,3150.416504,250>>, 140.500000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2077.663330,3344.514160,30>>, <<-2191.544434,3150.416504,250>>, 140.500000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2861.755371,3352.660645,30>>, <<-2715.870850,3269.915527,250>>, 90.000000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-2005.574463,3364.532715,30>>, <<-1977.568848,3330.888184,250>>, 100.000000)
// OR IS_POINT_IN_ANGLED_AREA(<<0,0,0>>, <<-1682.234985,3004.285156,30>>, <<-1942.746948,2947.441162,250>>, 248.750000)
//
// ENDIF
SWITCH restrictedStage
CASE waitingForInteraction
IF IS_REPLAY_BEING_PROCESSED()
CPRINTLN(DEBUG_REPLAY, "Stopping restricted area checks as a replay is being processed")
restrictedStage = onReplayScreen
ELSE
// If restricted wanted level is active, this check needs to run every frame to prevent wanted level being cleared and reapplied
IF bRestrictedWantedLevelActive
iAreaCounter = 0
iActiveAreas = 0
REPEAT NUMBER_OF_AREAS iAreaCounter
IF bActiveWantedArea[iAreaCounter]
IF IS_COORD_IN_SPECIFIED_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), INT_TO_ENUM(AREA_CHECK_AREAS, (iAreaCounter+ENUM_TO_INT(AC_GOLF_COURSE))))
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "RESTRICTED AREAS: SUPPRESS_LOSING_WANTED_LEVEL_IF_HIDDEN_THIS_FRAME in area ", iAreaCounter+ENUM_TO_INT(AC_GOLF_COURSE)) ENDIF #ENDIF
SUPPRESS_LOSING_WANTED_LEVEL_IF_HIDDEN_THIS_FRAME(PLAYER_ID()) // Prevent constant lose/regain on wanted level
iActiveAreas++
ELSE
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "RESTRICTED AREAS: Stopping calling SUPPRESS_LOSING_WANTED_LEVEL_IF_HIDDEN_THIS_FRAME in area ", iAreaCounter+ENUM_TO_INT(AC_GOLF_COURSE)) ENDIF #ENDIF
bActiveWantedArea[iAreaCounter] = FALSE
ENDIF
ENDIF
ENDREPEAT
IF iActiveAreas = 0
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "RESTRICTED AREAS: Number of wanted active areas is now zero, resetting wanted level general check bool") ENDIF #ENDIF
bRestrictedWantedLevelActive = FALSE
ENDIF
ENDIF
// Check each area only once per second.
IF TIMERA() > (1000/NUMBER_OF_AREAS)
// Get current area
acArea = INT_TO_ENUM(AREA_CHECK_AREAS, (currentArea+ENUM_TO_INT(AC_GOLF_COURSE)))
// Wait until player is within 1000m before starting checks.
IF IS_AREACHECK_IN_ACTIVE_RANGE(acArea, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE))
IF NOT bWithinActiveDistance[currentArea]
CPRINTLN(DEBUG_AMBIENT, "restrictedArea - Within activation range. Current area is ", currentArea)
bWithinActiveDistance[currentArea] = TRUE
ENDIF
// Current area is suppressed by another script
IF IS_RESTRICTED_AREA_WANTED_LEVEL_SUPPRESSED(acArea)
IF NOT bIsSuppressed[currentArea]
CPRINTLN(DEBUG_AMBIENT, "restrictedArea - IF IS_RESTRICTED_AREA_WANTED_LEVEL_SUPPRESSED(acArea). acArea is ", ENUM_TO_INT(acArea))
bIsSuppressed[currentArea] = TRUE
ENDIF
suppressingScript = WANTED_LEVEL_SUPPRESSING_SCRIPT(acArea)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(suppressingScript)) = 0
IF NOT g_bPlayerIsActiveInRestrictedArea[ENUM_TO_INT(acArea)]
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_AMBIENT, "IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(", suppressingScript, ") is no longer running.")
#ENDIF
RELEASE_SUPPRESSED_RESTRICTED_AREA_WANTED_LEVEL(acArea, g_bPlayerIsActiveInRestrictedArea[ENUM_TO_INT(acArea)])
ENDIF
ENDIF
ELSE
// Player isn't currently marked as active in this area ("Active" means "allowed to be here due to another script causing the global to get set")
IF NOT g_bPlayerIsActiveInRestrictedArea[ENUM_TO_INT(acArea)]
// Flight specific checks
IF IS_PED_IN_FLYING_VEHICLE(PLAYER_PED_ID())
// Check to see whether player is allowed to be in this restricted area
bAllowedInArea = FALSE
SWITCH acArea
CASE AC_GOLF_COURSE
IF IS_GOLF_COURSE_OWNED_BY_CURRENT_PLAYER()
OR CHECK_RESTRICTED_VEHICLES_FOR_GOLF_COURSE()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_AIRPORT_AIRSIDE
IF IS_AIRPORT_OWNED_BY_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_MOVIE_STUDIO
IF IS_STUDIO_OPEN_FOR_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
ENDSWITCH
IF NOT bAllowedInArea
IF IS_COORD_IN_SPECIFIED_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), acArea)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "Player in restricted area for ", GET_GAME_TIMER() - iTimeInArea[currentArea], " (Z_P2A)") ENDIF #ENDIF
IF GET_GAME_TIMER() - iTimeInArea[currentArea] > PRISON_DELAY
CPRINTLN(DEBUG_AMBIENT, "restrictedAreas - IS_COORD_IN_SPECIFIED_AREA() - Allowed time exceeded")
APPLY_WANTED_LEVEL()
ELIF IS_PROJECTILE_IN_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)+<<200,200,200>>, GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)-<<200,200,200>>, TRUE)
CPRINTLN(DEBUG_AMBIENT, "restrictedAreas - IS_COORD_IN_SPECIFIED_AREA() - Projectile in area")
APPLY_WANTED_LEVEL()
ELSE
IF acArea != AC_PRISON
IF NOT bWarnedByAirTrafficControl
IF CREATE_CONVERSATION(dialogueStruct, "FH1AUD", "FH1_TANNOY", CONV_PRIORITY_HIGH)
bWarnedByAirTrafficControl = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "Resetting restricted area timer (Z_P2B)") ENDIF #ENDIF
iTimeInArea[currentArea] = GET_GAME_TIMER()
ENDIF
ENDIF
ELSE
// Check to see whether player is allowed to be in this restricted area
bAllowedInArea = FALSE
SWITCH acArea
CASE AC_GOLF_COURSE
IF IS_GOLF_COURSE_OWNED_BY_CURRENT_PLAYER()
OR CHECK_RESTRICTED_VEHICLES_FOR_GOLF_COURSE()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_AIRPORT_AIRSIDE
IF IS_AIRPORT_OWNED_BY_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_MOVIE_STUDIO
IF IS_STUDIO_OPEN_FOR_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
ENDSWITCH
IF NOT bAllowedInArea
IF IS_COORD_IN_SPECIFIED_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), acArea)
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "Player in restricted area for ", GET_GAME_TIMER() - iTimeInArea[currentArea], " (Z_P3A)") ENDIF #ENDIF
IF NOT (acArea = AC_PRISON) OR (GET_GAME_TIMER() - iTimeInArea[currentArea] > PRISON_DELAY)
CPRINTLN(DEBUG_AMBIENT, "restrictedArea - IS_COORD_IN_SPECIFIED_AREA()")
APPLY_WANTED_LEVEL()
ENDIF
ELSE
#IF IS_DEBUG_BUILD IF bRADebugSpam CPRINTLN(DEBUG_AMBIENT, "Resetting restricted area timer (Z_P3B)") ENDIF #ENDIF
iTimeInArea[currentArea] = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ELSE
//IF IS_PED_SHOOTING(PLAYER_PED_ID())
// Check to see whether player is allowed to be in this restricted area
bAllowedInArea = FALSE
SWITCH acArea
CASE AC_GOLF_COURSE
IF IS_GOLF_COURSE_OWNED_BY_CURRENT_PLAYER()
OR CHECK_RESTRICTED_VEHICLES_FOR_GOLF_COURSE()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_AIRPORT_AIRSIDE
IF IS_AIRPORT_OWNED_BY_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
CASE AC_MOVIE_STUDIO
IF IS_STUDIO_OPEN_FOR_CURRENT_PLAYER()
bAllowedInArea = TRUE
ENDIF
BREAK
ENDSWITCH
IF NOT bAllowedInArea
IF IS_COORD_IN_SPECIFIED_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), acArea)
//CPRINTLN(DEBUG_AMBIENT, "restrictedArea - IS_COORD_IN_SPECIFIED_AREA()")
APPLY_WANTED_LEVEL()
ENDIF
ENDIF
//ENDIF
ENDIF
ENDIF
ELSE
// Player has left the area
IF bWithinActiveDistance[currentArea]
IF IS_RESTRICTED_AREA_WANTED_LEVEL_SUPPRESSED(acArea)
suppressingScript = WANTED_LEVEL_SUPPRESSING_SCRIPT(acArea)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(suppressingScript)) = 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_AMBIENT, "IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(", suppressingScript, ") is no longer running. Out of range.")
#ENDIF
RELEASE_SUPPRESSED_RESTRICTED_AREA_WANTED_LEVEL(acArea)
bWithinActiveDistance[currentArea] = FALSE
ENDIF
ELSE
IF g_bPlayerIsActiveInRestrictedArea[ENUM_TO_INT(acArea)]
CPRINTLN(DEBUG_AMBIENT, "restrictedArea - Out of activation range for area ", ENUM_TO_INT(acArea))
g_bPlayerIsActiveInRestrictedArea[ENUM_TO_INT(acArea)] = FALSE
bWithinActiveDistance[currentArea] = FALSE
bIsSuppressed[currentArea] = FALSE
bWarnedByAirTrafficControl = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
// Update next area to check
currentArea++
IF currentArea = NUMBER_OF_AREAS
currentArea = 0
ENDIF
// Reset timer
SETTIMERA(0)
ENDIF
ENDIF
BREAK
CASE debugHoldingCase
// Debug BOOL will jump into here to get out of the wanted level checks
BREAK
CASE onReplayScreen
// Don't do the checks if we are on the replay screen
IF NOT IS_REPLAY_BEING_PROCESSED()
CPRINTLN(DEBUG_REPLAY, "Resuming restricted area checks, replay processing finished.")
restrictedStage = waitingForInteraction // replay finished processing, continue checks
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDWHILE
ENDSCRIPT