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

4013 lines
115 KiB
Python
Executable File

//
// Author: Stephen Robertson Date: 12/01/13
//
//
// Cheat Controller
//
// DESCRIPTION: A basic controller script used to activate and disable
// cheats.
//
//
// Includes
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_streaming.sch"
USING "context_control_public.sch"
USING "drunk_public.sch"
USING "cheat_controller_public.sch"
USING "replay_public.sch"
USING "website_public.sch"
/// PURPOSE: Status for cheat activation. Not all cheats will use all statuses.
///
ENUM CHEAT_STATUS
CHEAT_DISABLED = 0,
CHEAT_INACTIVE,
CHEAT_INITIALISE,
CHEAT_INITIALSE_PT2,
CHEAT_ACTIVATE,
CHEAT_RUNNING,
CHEAT_RUNNING_SLOWMO_LEVEL1,
CHEAT_RUNNING_SLOWMO_LEVEL2,
CHEAT_RUNNING_SLOWMO_LEVEL3,
CHEAT_DEACTIVATE,
CHEAT_CLEANUP
ENDENUM
/// PURPOSE: Overall cheat system status.
ENUM CHEAT_SYSTEM_STATUS
CHEAT_SYSTEM_ACTIVE = 0,
CHEAT_SYSTEM_PLAYER_DEAD,
CHEAT_SYSTEM_CUTSCENE_ACTIVE
ENDENUM
ENUM CHEAT_WEATHER
CHEAT_WEATHER_OFF,
CHEAT_WEATHER_EXTRASUNNY,
CHEAT_WEATHER_CLEAR,
CHEAT_WEATHER_CLOUDS,
CHEAT_WEATHER_SMOG,
CHEAT_WEATHER_CLOUDY,
CHEAT_WEATHER_OVERCAST,
CHEAT_WEATHER_RAIN,
CHEAT_WEATHER_THUNDER,
CHEAT_WEATHER_CLEARING,
CHEAT_WEATHER_NEUTRAL,
CHEAT_WEATHER_SNOW
ENDENUM
CHEAT_STATUS eCheatStatusSpawnVehicle = CHEAT_INACTIVE
// Vehicle cheat status
// General cheats status
CHEAT_STATUS eCheatStatusSuperJump = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusSlideyCars = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusFastRun = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusFastSwim = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusWeapons = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusAdvanceWeather = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusHealthArmor = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusSpecialAbilityRecharge = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusWantedLevelUp = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusWantedLevelDown = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusGiveParachute = CHEAT_INACTIVE
// Off Mission Cheat status
CHEAT_STATUS eCheatStatusBangBang = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusFlamingBullets = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusExplosiveMelee = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatus0Gravity = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusInvincibility = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusSlowMo = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusSkyfall = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusDrunk = CHEAT_INACTIVE
CHEAT_STATUS eCheatStatusAimSlowMo = CHEAT_INACTIVE
MODEL_NAMES eCheatVehicleModel = BMX // Default model.
VEHICLE_INDEX vCheatVehicle
VEHICLE_INDEX vCheatSlideyVehicle = NULL
STRING sCheatVehicleText
CHEAT_WEATHER eCheatWeather = CHEAT_WEATHER_OFF // Default weather cheat
INT iSkyfallTimer
INT iInvincibilityTimeLimit = 5 * 60 * 1000 // 5 mins
INT iInvincibilityStartTime
INT iInvincibilityTimer
INT iSlowMoLevel = 0
INT iAimSlowMoLevel = 0
FLOAT fAimSlowMoValue = 1.0
INT iGravityLevel = 0
CONST_INT MAX_FEED_MESSAGE_IDS 10
CONST_INT MAX_COLLISION_POS 9
INT iFeedMessageIds[MAX_FEED_MESSAGE_IDS]
INT iCurrentFeedMessage = 0
BOOL bFeedCleared = FALSE
BOOL bIsPhoneCheat = FALSE
INT directorModeTimer = 0
#IF IS_DEBUG_BUILD
BOOL bWidgetsCreated = FALSE
#ENDIF
/// PURPOSE:
/// Checks if player is on a mission
/// RETURNS:
/// TRUE if the player is on any of the restricted mission types
FUNC BOOL IS_ANY_MISSION_ACTIVE()
IF IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_STORY )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_RAMPAGE )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_RANDOM_CHAR )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_MINIGAME )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_MINIGAME_FRIENDS )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_STORY_FRIENDS )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_STORY_PREP )
OR GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_HEIST_FINALE_PREPE_PLACING_CAR)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Initialises the cheat feed message ID array
PROC INIT_CHEAT_FEED_MESSAGES()
INT i = 0
WHILE i < MAX_FEED_MESSAGE_IDS
iFeedMessageIds[i] = -1
++ i
ENDWHILE
bFeedCleared = FALSE
iCurrentFeedMessage = 0
ENDPROC
/// PURPOSE:
/// Stores feed message IDs so we can clear them if needed.
/// PARAMS:
/// id - The id of the feed message to be cleared.
PROC STORE_FEED_MESSAGE_ID( INT id )
iFeedMessageIds[iCurrentFeedMessage] = id
++ iCurrentFeedMessage
IF iCurrentFeedMessage >= MAX_FEED_MESSAGE_IDS
iCurrentFeedMessage = 0
ENDIF
ENDPROC
/// PURPOSE:
/// Clears any cheat feed messages.
PROC CLEAR_FEED_MESSAGES()
INT i = 0
WHILE i < MAX_FEED_MESSAGE_IDS
IF iFeedMessageIds[i] != -1
THEFEED_REMOVE_ITEM(iFeedMessageIds[i])
iFeedMessageIds[i] = -1
ENDIF
++i
ENDWHILE
ENDPROC
/// PURPOSE:
/// Increments the times cheated stat.
PROC INCREMENT_CHEAT_CODES_ACTIVATED_STAT()
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
SWITCH ePed
CASE CHAR_MICHAEL
QUICK_INCREMENT_INT_STAT(SP0_TIMES_CHEATED, 1)
CPRINTLN(DEBUG_AMBIENT, "CHEAT CONTROLLER: INCREMENTED MICHAEL TIMES CHEATED STAT")
BREAK
CASE CHAR_FRANKLIN
QUICK_INCREMENT_INT_STAT(SP1_TIMES_CHEATED, 1)
CPRINTLN(DEBUG_AMBIENT, "CHEAT CONTROLLER: INCREMENTED FRANKLIN TIMES CHEATED STAT")
BREAK
CASE CHAR_TREVOR
QUICK_INCREMENT_INT_STAT(SP2_TIMES_CHEATED, 1)
CPRINTLN(DEBUG_AMBIENT, "CHEAT CONTROLLER: INCREMENTED TREVOR TIMES CHEATED STAT")
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL IS_CHEAT_FROM_DIRECTOR_MODE(STRING sText)
IF directorModeTimer != 0
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR) AND IS_SCREEN_FADED_IN()
IF ARE_STRINGS_EQUAL(sText,"CHEAT_SUPER_JUMP") AND IS_INTERIOR_SCENE()
CPRINTLN(DEBUG_DIRECTOR, "CHEAT CONTROLLER: IS_CHEAT_FROM_DIRECTOR_MODE CHEAT_SUPER_JUMP RETURN FALSE")
RETURN FALSE
ENDIF
IF ARE_STRINGS_EQUAL(sText,"CHEAT_GRAVITY_MOON") AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) AND IS_ENTITY_IN_WATER(PLAYER_PED_ID())
CPRINTLN(DEBUG_DIRECTOR, "CHEAT CONTROLLER: IS_CHEAT_FROM_DIRECTOR_MODE CHEAT_GRAVITY_MOON RETURN FALSE")
RETURN FALSE
ENDIF
ENDIF
CPRINTLN(DEBUG_DIRECTOR, "CHEAT CONTROLLER: IS_CHEAT_FROM_DIRECTOR_MODE RETURN TRUE")
RETURN TRUE
ENDIF
CPRINTLN(DEBUG_DIRECTOR, "CHEAT CONTROLLER: IS_CHEAT_FROM_DIRECTOR_MODE RETURN FALSE")
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Registers the specified cheat as being used this session
/// PARAMS:
/// eCheatEnum -
PROC REGISTER_CHEAT_USED( CHEATS_BITSET_ENUM eCheatEnum )
//In director mode, gameplay is very restricted.
//Any cheats activated while in this mode, we do not want affecting SP or MP.
//Do not register that a cheat has been activate while in director mode.
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
AND NOT IS_CHEAT_FROM_DIRECTOR_MODE("")
// This gets set, but not reset, as it lets achievements know if a cheat has been activated this session
SET_BIT( g_iBitsetCheatsUsedThisSession, ENUM_TO_INT(eCheatEnum) )
// This is used by the stats guys to keep track of if any cheats have been used.
g_bHasAnyCheatBeenUsed = TRUE
INCREMENT_CHEAT_CODES_ACTIVATED_STAT()
ELSE
CPRINTLN(DEBUG_AMBIENT, "CHEAT CONTROLLER: DO NOT REGISTER CHEAT (DIRECTOR MODE ACTIVE), eCheatEnum = ",eCheatEnum)
ENDIF
ENDPROC
/// PURPOSE:
/// Registers if a specific cheat is active or inactive
/// PARAMS:
/// eCheatEnum -
/// bActive -
PROC REGISTER_CHEAT_ACTIVE( CHEATS_BITSET_ENUM eCheatEnum, BOOL bActive )
IF bActive
SET_BIT( g_iBitsetCheatsCurrentlyActive, ENUM_TO_INT(eCheatEnum) )
REGISTER_CHEAT_USED(eCheatEnum)
ELSE
CLEAR_BIT( g_iBitsetCheatsCurrentlyActive, ENUM_TO_INT(eCheatEnum) )
ENDIF
ENDPROC
/// =================================================================
/// NOTIFICATIONS
/// =================================================================
///
/// PURPOSE: Displays the cheat activation message
///
/// PARAMS:
/// sText - The cheat text
PROC DISPLAY_CHEAT_ACTIVATION_NOTIFICATION(STRING sText)
IF IS_CHEAT_FROM_DIRECTOR_MODE("")
//If in director mode, do not display this message
CPRINTLN(DEBUG_DIRECTOR, "Cheat Controller: DISPLAY_CHEAT_ACTIVATION_NOTIFICATION - blocked (Director Mode)")
ELSE
BEGIN_TEXT_COMMAND_THEFEED_POST( "CHEAT_ACTIVATED" )
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL( sText )
STORE_FEED_MESSAGE_ID(END_TEXT_COMMAND_THEFEED_POST_TICKER(FALSE))
PLAYSTATS_CHEAT_APPLIED(sText)
ENDIF
ENDPROC
/// PURPOSE: Displays the cheat de-activation message
///
/// PARAMS:
/// sText - The cheat text
PROC DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION(STRING sText)
IF IS_CHEAT_FROM_DIRECTOR_MODE(sText)
//If in director mode, do not display this message
CPRINTLN(DEBUG_DIRECTOR, "Cheat Controller: DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION - blocked (Director Mode)")
ELSE
BEGIN_TEXT_COMMAND_THEFEED_POST( "CHEAT_DEACTIVATED" )
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL( sText )
STORE_FEED_MESSAGE_ID(END_TEXT_COMMAND_THEFEED_POST_TICKER(FALSE))
ENDIF
ENDPROC
/// PURPOSE: Displays the cheat de-activation message
///
/// PARAMS:
/// sText - The cheat text
PROC DISPLAY_CHEAT_DENIED_NOTIFICATION(STRING sText)
//Don't display a help message if in Director mode.
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
BEGIN_TEXT_COMMAND_THEFEED_POST( "CHEAT_DENIED" )
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL( sText )
STORE_FEED_MESSAGE_ID(END_TEXT_COMMAND_THEFEED_POST_TICKER(FALSE))
ELSE
CPRINTLN(DEBUG_DIRECTOR, "Cheat Controller: DISPLAY_CHEAT_DENIED_NOTIFICATION - blocked (Director Mode)")
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if phone is allowed on screen when a cheat is activated
/// RETURNS:
/// TRUE if the phone is onscreen and the cheat hasn't been triggered from a phone
FUNC BOOL IS_PHONE_FORBIDDEN()
IF bIsPhoneCheat
bIsPhoneCheat = FALSE
RETURN FALSE
ENDIF
IF IS_PHONE_ONSCREEN()
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_TIME_PASSED(INT iTimeAmount, INT iTimer)
INT iCurrentTime
INT iTimeDifference
iCurrentTime = GET_GAME_TIMER()
iTimeDifference = iCurrentTime - iTimeAmount
IF iTimeDifference > iTimer
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_CHEAT_VEHICLE_SPAWN_POS_SAFE( MODEL_NAMES eVehicleModel, VECTOR vPos, FLOAT fHeading )
VECTOR vCollCheck[MAX_COLLISION_POS]
VECTOR vehicleSizeMin
VECTOR vehicleSizeMax
VECTOR vVehicleDimensions
VECTOR vResult
VECTOR vNormal
INT iResult
SHAPETEST_INDEX iCollisionBottom1
SHAPETEST_INDEX iCollisionBottom2
SHAPETEST_INDEX iCollisionTop1
SHAPETEST_INDEX iCollisionTop2
SHAPETEST_INDEX iCollisionLeft
SHAPETEST_INDEX iCollisionRight
SHAPETEST_INDEX iCollisionLOS
ENTITY_INDEX entityResult
GET_MODEL_DIMENSIONS(eVehicleModel, vehicleSizeMin, vehicleSizeMax )
vVehicleDimensions.x = ABSF(vehicleSizeMax.x - vehicleSizeMin.x) / 2
vVehicleDimensions.y = ABSF(vehicleSizeMax.y - vehicleSizeMin.y) / 2
vVehicleDimensions.z = ABSF(vehicleSizeMax.z - vehicleSizeMin.z) / 2
vCollCheck[0] = vPos
vCollCheck[1] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << -vVehicleDimensions.x, -vVehicleDimensions.y, -vVehicleDimensions.z >> )
vCollCheck[2] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << vVehicleDimensions.x, -vVehicleDimensions.y, -vVehicleDimensions.z >> )
vCollCheck[3] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << vVehicleDimensions.x, vVehicleDimensions.y, -vVehicleDimensions.z >> )
vCollCheck[4] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << -vVehicleDimensions.x, vVehicleDimensions.y, -vVehicleDimensions.z >> )
vCollCheck[5] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << -vVehicleDimensions.x, -vVehicleDimensions.y, vVehicleDimensions.z >> )
vCollCheck[6] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << vVehicleDimensions.x, -vVehicleDimensions.y, vVehicleDimensions.z >> )
vCollCheck[7] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << vVehicleDimensions.x, vVehicleDimensions.y, vVehicleDimensions.z >> )
vCollCheck[8] = GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(vPos, fHeading, << -vVehicleDimensions.x, vVehicleDimensions.y, vVehicleDimensions.z >> )
/*
INT i = 0
WHILE i < 15
DRAW_DEBUG_LINE( vCollCheck[1], vCollCheck[2])
DRAW_DEBUG_LINE( vCollCheck[2],vCollCheck[3])
DRAW_DEBUG_LINE( vCollCheck[3],vCollCheck[4])
DRAW_DEBUG_LINE( vCollCheck[4], vCollCheck[1])
DRAW_DEBUG_LINE( vCollCheck[5], vCollCheck[6])
DRAW_DEBUG_LINE( vCollCheck[6],vCollCheck[7])
DRAW_DEBUG_LINE( vCollCheck[7],vCollCheck[8])
DRAW_DEBUG_LINE( vCollCheck[8], vCollCheck[5])
DRAW_DEBUG_LINE( vCollCheck[1], vCollCheck[5])
DRAW_DEBUG_LINE( vCollCheck[2],vCollCheck[6])
DRAW_DEBUG_LINE( vCollCheck[3],vCollCheck[7])
DRAW_DEBUG_LINE( vCollCheck[4], vCollCheck[8])
DRAW_DEBUG_LINE( vCollCheck[1], vCollCheck[3])
DRAW_DEBUG_LINE( vCollCheck[2], vCollCheck[4])
DRAW_DEBUG_LINE( vCollCheck[5], vCollCheck[7])
DRAW_DEBUG_LINE( vCollCheck[6], vCollCheck[8])
DRAW_DEBUG_LINE( vCollCheck[5], vCollCheck[1])
DRAW_DEBUG_LINE( vCollCheck[6], vCollCheck[8])
DRAW_DEBUG_LINE( vCollCheck[5], vCollCheck[2])
DRAW_DEBUG_LINE( vCollCheck[6], vCollCheck[7])
++i
WAIT (0)
ENDWHILE
*/
IF NOT IS_COLLISION_MARKED_OUTSIDE(vPos)
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- Inside interior")
RETURN FALSE
ENDIF
iCollisionLOS = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(GET_PLAYER_COORDS(PLAYER_ID()) + <<0.0,0.0,1.0>>, vPos, SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionLOS, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionLOS ray test failed.")
RETURN FALSE
ENDIF
iCollisionBottom1 = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[1], vCollCheck[3], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionBottom1, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionBottom1 ray test failed.")
RETURN FALSE
ENDIF
iCollisionBottom2 = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[2], vCollCheck[4], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionBottom2, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionBottom2 ray test failed.")
RETURN FALSE
ENDIF
iCollisionTop1 = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[5], vCollCheck[7], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionTop1, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionTop1 ray test failed.")
RETURN FALSE
ENDIF
iCollisionTop2 = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[6], vCollCheck[8], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionTop2, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionTop2 ray test failed.")
RETURN FALSE
ENDIF
iCollisionLeft = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[1], vCollCheck[8], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionLeft, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionLeft ray test failed.")
RETURN FALSE
ENDIF
iCollisionRight = START_EXPENSIVE_SYNCHRONOUS_SHAPE_TEST_LOS_PROBE(vCollCheck[2], vCollCheck[7], SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE|SCRIPT_INCLUDE_OBJECT|SCRIPT_INCLUDE_GLASS|SCRIPT_INCLUDE_PED, PLAYER_PED_ID(), 0)
GET_SHAPE_TEST_RESULT(iCollisionRight, iResult, vResult, vNormal, EntityResult)
IF iResult != 0
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - FALSE- iCollisionRight ray test failed.")
RETURN FALSE
ENDIF
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: IS_CHEAT_VEHICLE_SPAWN_POS_SAFE - TRUE")
RETURN TRUE
ENDFUNC
/// PURPOSE:
/// Verifies if a cheat vehicle is unlocked (car spawn available)
/// PARAMS:
/// eVehicleModel - Model of vehicle to check
/// RETURNS:
/// TRUE if the vehicle is available.
///
FUNC BOOL IS_CHEAT_VEHICLE_UNLOCKED(MODEL_NAMES eVehicleModel)
SWITCH eVehicleModel
CASE DODO
IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_RE_SEAPLANE_CITY, VEHGEN_S_FLAG_AVAILABLE) = FALSE
RETURN FALSE
ENDIF
BREAK
CASE DUKES2
IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_RE_DUEL_CITY, VEHGEN_S_FLAG_AVAILABLE) = FALSE
RETURN FALSE
ENDIF
BREAK
CASE SUBMERSIBLE2
IF GET_VEHICLE_GEN_SAVED_FLAG_STATE(VEHGEN_WILDPHOTO_SUB, VEHGEN_S_FLAG_AVAILABLE) = FALSE
RETURN FALSE
ENDIF
BREAK
ENDSWITCH
// Assume vehicles are unlocked by default
RETURN TRUE
ENDFUNC
/// =================================================================
/// TRIGGERS
/// =================================================================
/// PURPOSE: Set the vehicle cheat active.
///
/// PARAMS:
/// eVehicleModel - Vehicle model to spawn
/// sText - Vehicle cheat text
PROC TRIGGER_VEHICLE_CHEAT( MODEL_NAMES eVehicleModel, STRING sText)
IF eCheatStatusSpawnVehicle = CHEAT_INACTIVE
IF IS_CURRENTLY_ON_MISSION_OF_TYPE( MISSION_TYPE_MINIGAME )
OR (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Barry1")) > 0) // Force off for Barry1
OR (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("Tennis")) > 0) // Force off for Tennis
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SPAWN_VEHICLE )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
// Mainly for CG to NG
IF NOT IS_CHEAT_VEHICLE_UNLOCKED( eVehicleModel)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_VEHICLE_LOCKED_DENIED")
EXIT
ENDIF
eCheatVehicleModel = eVehicleModel
sCheatVehicleText = sText
eCheatStatusSpawnVehicle = CHEAT_INITIALISE
ENDIF
ENDPROC
///
/// PURPOSE: Set the slidey cars cheat active (off mission)
///
PROC TRIGGER_SLIDEY_CARS_CHEAT()
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SLIDEY_CARS )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF eCheatStatusSlideyCars = CHEAT_INACTIVE
eCheatStatusSlideyCars = CHEAT_ACTIVATE
ELIF eCheatStatusSlideyCars = CHEAT_RUNNING
eCheatStatusSlideyCars = CHEAT_DEACTIVATE
ENDIF
ENDPROC
///
/// PURPOSE: Set the slowmo cheat active (off mission)
///
PROC TRIGGER_SLOWMO_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SLOWMO )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF eCheatStatusAimSlowMo <> CHEAT_INACTIVE
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
ELSE
eCheatStatusSlowMo = CHEAT_ACTIVATE
ENDIF
ENDPROC
///
/// PURPOSE: Set the aim slowmo cheat active (off mission)
///
PROC TRIGGER_AIM_SLOWMO_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SLOWMO )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF eCheatStatusSlowMo <> CHEAT_INACTIVE
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
ELSE
eCheatStatusAimSlowMo = CHEAT_ACTIVATE
ENDIF
ENDPROC
///
/// PURPOSE: Set the gravity cheat active (off mission)
///
PROC TRIGGER_0GRAVITY_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_0_GRAVITY )
OR IS_CHEAT_ACTIVE(CHEAT_TYPE_SKYFALL)
OR IS_ENTITY_IN_WATER(PLAYER_PED_ID())
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
eCheatStatus0Gravity = CHEAT_ACTIVATE
ENDPROC
/// PURPOSE: Toggle the drunk cheat on/off (Off mission)
///
PROC TRIGGER_DRUNK_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
eCheatStatusDrunk = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
eCheatStatusDrunk = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_DRUNK )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
eCheatStatusDrunk = CHEAT_INACTIVE
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusDrunk = CHEAT_INACTIVE
eCheatStatusDrunk = CHEAT_ACTIVATE
ELIF eCheatStatusDrunk = CHEAT_RUNNING
eCheatStatusDrunk = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_FLAMING_BULLETS_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
eCheatStatusFlamingBullets = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
eCheatStatusFlamingBullets = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FLAMING_BULLETS )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
eCheatStatusFlamingBullets = CHEAT_INACTIVE
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusFlamingBullets = CHEAT_INACTIVE
eCheatStatusFlamingBullets = CHEAT_ACTIVATE
ELIF eCheatStatusFlamingBullets = CHEAT_RUNNING
eCheatStatusFlamingBullets = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_BANG_BANG_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
eCheatStatusBangBang = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
eCheatStatusBangBang = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_BANG_BANG )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
eCheatStatusBangBang = CHEAT_INACTIVE
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusBangBang = CHEAT_INACTIVE
eCheatStatusBangBang = CHEAT_ACTIVATE
ELIF eCheatStatusBangBang = CHEAT_RUNNING
eCheatStatusBangBang = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_EXPLOSIVE_MELEE_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
eCheatStatusExplosiveMelee = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
eCheatStatusExplosiveMelee = CHEAT_INACTIVE
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_EXPLOSIVE_MELEE )
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
eCheatStatusExplosiveMelee = CHEAT_INACTIVE
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusExplosiveMelee = CHEAT_INACTIVE
eCheatStatusExplosiveMelee = CHEAT_ACTIVATE
ELIF eCheatStatusExplosiveMelee = CHEAT_RUNNING
eCheatStatusExplosiveMelee = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_SUPER_JUMP_CHEAT()
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SUPER_JUMP )
OR IS_INTERIOR_SCENE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusSuperJump = CHEAT_INACTIVE
eCheatStatusSuperJump = CHEAT_ACTIVATE
ELIF eCheatStatusSuperJump = CHEAT_RUNNING
eCheatStatusSuperJump = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_INVINCIBILITY_CHEAT()
VECTOR vPlayerPos = GET_PLAYER_COORDS(PLAYER_ID())
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_INVINCIBILITY )
OR vPlayerPos.z <= -170.0 // For submersible crush depth.
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
// Toggle cheat off if already running.
IF eCheatStatusInvincibility = CHEAT_INACTIVE
eCheatStatusInvincibility = CHEAT_ACTIVATE
ELIF eCheatStatusInvincibility = CHEAT_RUNNING
eCheatStatusInvincibility = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_SKYFALL_CHEAT()
IF IS_ANY_MISSION_ACTIVE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_MISSION_DENIED")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_INTERIOR_SCENE()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_HERE")
EXIT
ENDIF
IF eCheatStatusSkyfall != CHEAT_INACTIVE
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_ALREADY_ACTIVE")
EXIT
ENDIF
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SKYFALL)
OR IS_CHEAT_ACTIVE( CHEAT_TYPE_SUPER_JUMP )
OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
OR NOT IS_GAMEPLAY_CAM_RENDERING()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PED_INJURED(PLAYER_PED_ID()) OR IS_PLAYER_BEING_ARRESTED(PLAYER_ID(), FALSE)
OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("respawn_controller")) > 0
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
// Ok to start
eCheatStatusSkyfall = CHEAT_INITIALISE
ENDPROC
PROC TRIGGER_FAST_RUN_CHEAT
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FAST_RUN )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME_FRIENDS)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF eCheatStatusFastRun = CHEAT_INACTIVE
eCheatStatusFastRun = CHEAT_ACTIVATE
ELIF eCheatStatusFastRun = CHEAT_RUNNING
eCheatStatusFastRun = CHEAT_DEACTIVATE
ENDIF
ENDPROC
PROC TRIGGER_FAST_SWIM_CHEAT
IF IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FAST_SWIM )
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME_FRIENDS)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF eCheatStatusFastSwim = CHEAT_INACTIVE
eCheatStatusFastSwim = CHEAT_ACTIVATE
ELIF eCheatStatusFastSwim = CHEAT_RUNNING
eCheatStatusFastSwim = CHEAT_DEACTIVATE
ENDIF
ENDPROC
/// PURPOSE:
/// Checks if the phone has triggered a cheat
/// PARAMS:
/// eCheatEnum - Enum of cheat.
/// RETURNS:
/// TRUE if cheat has been triggered, false if not.
FUNC BOOL HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEATS_BITSET_ENUM eCheatEnum, MODEL_NAMES eVehicle = DUMMY_MODEL_FOR_SCRIPT)
IF IS_BIT_SET( g_iCheatTriggerBitset, ENUM_TO_INT(eCheatEnum))
// Vehicle has been passed in
IF eVehicle != DUMMY_MODEL_FOR_SCRIPT
// Vehicle matches, trigger cheat
IF eVehicle = g_eCheatVehicleModelName
//g_iCheatTriggerBitset = 0
CLEAR_BIT(g_iCheatTriggerBitset, ENUM_TO_INT(eCheatEnum))
bIsPhoneCheat = TRUE
RETURN TRUE
ELSE
//Vehicle doesn't match
RETURN FALSE
ENDIF
ELSE
// No Vehicle passed in, trigger cheat
//g_iCheatTriggerBitset = 0
CLEAR_BIT(g_iCheatTriggerBitset, ENUM_TO_INT(eCheatEnum))
bIsPhoneCheat = TRUE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC CONTROL_DIRECTOR_MODE_CHEAT_TIMER()
//keep track of director mode timer
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
OR (NOT IS_SCREEN_FADED_IN()) AND directorModeTimer != 0
directorModeTimer = GET_GAME_TIMER()
ENDIF
//If director mode is currently running, or cleaning up.
IF directorModeTimer != 0
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
IF GET_GAME_TIMER() - directorModeTimer > 1000
//reset directorModeTimer
CPRINTLN(DEBUG_DIRECTOR,"RESET directorModeTimer")
directorModeTimer = 0
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_CHEAT_CODE_BEEN_ACTIVATED(INT hashOfCheatString, INT lengthOfCheatString)
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
RETURN HAS_CHEAT_WITH_HASH_BEEN_ACTIVATED(hashOfCheatString, lengthOfCheatString)
ENDIF
RETURN FALSE
ENDFUNC
PROC CHECK_CHEAT_CODES()
// Disable the PC cheat code window during the end of mission results screen
// If director mode is running, or just cleaned up, disable cheats
IF IS_RESULT_SCREEN_DISPLAYING()
OR directorModeTimer != 0
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_ENTER_CHEAT_CODE)
ENDIF
CONTROL_DIRECTOR_MODE_CHEAT_TIMER()
// Don't allow player to trigger cheats if they are dead
IF IS_PED_INJURED(PLAYER_PED_ID())
EXIT
ENDIF
// Don't allow player to trigger cheats if they are being arrested
IF IS_PED_BEING_ARRESTED(PLAYER_PED_ID())
EXIT
ENDIF
// Donm
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
EXIT
ENDIF
// Don't allow player to trigger cheats if player controls are disabled.
IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
EXIT
ENDIF
// Don't bother doing anything if switching.
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS() OR IS_PLAYER_SWITCH_IN_PROGRESS()
EXIT
ENDIF
// Don't allow player to trigger cheats if a replay is being processed.
IF IS_REPLAY_BEING_PROCESSED()
IF NOT bFeedCleared
CLEAR_FEED_MESSAGES()
bFeedCleared = TRUE
ENDIF
EXIT
ENDIF
bFeedCleared = FALSE
bIsPhoneCheat = FALSE
// Vehicle spawn cheats
// Buzzard - Circle, Circle, L1, Circle, Circle, Circle, L1, L2, R1, Triangle, Circle, Triangle
// B, B, L1, B, B, B, L1, L2, R1, Y, B, Y
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("BB1BBB123YBY"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("BUZZOFF"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, BUZZARD)
TRIGGER_VEHICLE_CHEAT( BUZZARD, "CHEAT_SPAWN_VEH1" )
ENDIF
// BMX - Left, Left, Right, Right, Left, Right, Square, Circle, Triangle, R1, R2
// Left, Left, Right, Right, Left, Right, X, B, Y, R1, R2
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("LLRRLRXBY34"), 11)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("BANDIT"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, BMX)
TRIGGER_VEHICLE_CHEAT( BMX, "CHEAT_SPAWN_VEH2" )
ENDIF
// Caddy - Circle, L1, Left, R1, L2, X, R1, L1, Circle, X
// B, L1, Left, R1, L2, A, R1, L1, B, A
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("B1L32A31BA"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("HOLEIN1"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, CADDY)
TRIGGER_VEHICLE_CHEAT( CADDY, "CHEAT_SPAWN_VEH3" )
ENDIF
// Comet - R1, Circle, R2, Right, L1, L2, X, X, Square, R1
// R1, B, R2, Right, L1, L2, A, A, X, R1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("3B4R12AAX3"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("COMET"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, COMET2)
TRIGGER_VEHICLE_CHEAT( COMET2, "CHEAT_SPAWN_VEH4" )
ENDIF
//Crop duster - Right, Left, R1, R1, R1, Left, Triangle, Triangle, X, Circle, L1, L1
// Right, Left, R1, R1, R1, Left, Y, Y, A, B, L1, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("RL333LYYAB11"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("FLYSPRAY"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, DUSTER)
TRIGGER_VEHICLE_CHEAT( DUSTER, "CHEAT_SPAWN_VEH5" )
ENDIF
// PCJ - R1, Right, Left, Right, R2, Left, Right, Square, Right, L2, L1, L1
// R1, Right, Left, Right, R2, Left, Right, X, Right, L2, L1, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("3RLR4LRXR211"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("ROCKET"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, PCJ)
TRIGGER_VEHICLE_CHEAT( PCJ, "CHEAT_SPAWN_VEH6" )
ENDIF
// Rapid GT - R2, L1, Circle, Right, L1, R1, Right, Left, Circle, R2
// R2, L1, B, Right, L1, R1, Right, Left, B, R2
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("41BR13RLB4"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("RAPIDGT"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, RAPIDGT)
TRIGGER_VEHICLE_CHEAT( RAPIDGT, "CHEAT_SPAWN_VEH7" )
ENDIF
// Sanchez - Circle, X, L1, Circle, Circle, L1, Circle, R1, R2, L2, L1, L1
// - B, A, L1, B, B, L1, B, R1, R2, L2, L1, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("BA1BB1B34211"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("OFFROAD"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, SANCHEZ )
TRIGGER_VEHICLE_CHEAT( SANCHEZ, "CHEAT_SPAWN_VEH8" )
ENDIF
// Stretch Limo - R2, Right, L2, Left, Left, R1, L1, Circle, Right
// - R2, Right, L2, Left, Left, R1, L1, B, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("4R2LL31BR"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("VINEWOOD"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, STRETCH )
TRIGGER_VEHICLE_CHEAT( STRETCH, "CHEAT_SPAWN_VEH9" )
ENDIF
// Stunt Plane - Circle, Right, L1, L2, Left, R1, L1, L1, Left, Left, X, Triangle
// B, Right, L1, L2, Left, R1, L1, L1, Left, Left, A, Y
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("BR12L311LLAY"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("BARNSTORM"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, STUNT )
TRIGGER_VEHICLE_CHEAT( STUNT, "CHEAT_SPAWN_VEH10" )
ENDIF
// Trashmaster - Circle, R1, Circle, R1, Left, Left, R1, L1, Circle, Right
// B, R1, B, R1, Left, Left, R1, L1, B, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("B3B3LL31BR"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("TRASHED"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, TRASH )
TRIGGER_VEHICLE_CHEAT( TRASH, "CHEAT_SPAWN_VEH11" )
ENDIF
// New vehicle cheats for CG-->NG
IF IS_LAST_GEN_PLAYER()
// Sea Plane - Square, R1, Square, R1, Left, Left, R1, L1, Square, Right
// X, R1, X, R1, Left, Left, R1, L1, X, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("X3X3LL31XR"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("EXTINCT"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE,DODO)
TRIGGER_VEHICLE_CHEAT( DODO, "CHEAT_SPAWN_VEH12" )
ENDIF
// Duel car - Triangle, R1, Triangle, R1, Right, Left, R1, L1, Triange, Right
// Y, R1, Y, R1, Right, Left, R1, L1, Y, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("Y3Y3RL31YR"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("DEATHCAR"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, DUKES2 )
TRIGGER_VEHICLE_CHEAT( DUKES2, "CHEAT_SPAWN_VEH13" )
ENDIF
// Bubble Sub - R2, Left, L2, Right, Right, R1, L1, Square, Right
// - R2, Left, L2, Right, Right, R1, L1, X, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("4L2RR31XR"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("BUBBLES"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED( CHEAT_TYPE_SPAWN_VEHICLE, SUBMERSIBLE2 )
TRIGGER_VEHICLE_CHEAT( SUBMERSIBLE2, "CHEAT_SPAWN_VEH14" )
ENDIF
ENDIF
//-----------------------------------------------------------------
// General cheats
// Super Jump - Left, Left, Triangle, Triangle, Right, Right, Left, Right, Square, R1, R2
// Left, Left, Y, Y, Right, Right, Left, Right, X, R1, R2
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("LLYYRRLRX34"), 11)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("HOPTOIT"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_SUPER_JUMP)
TRIGGER_SUPER_JUMP_CHEAT()
ENDIF
// Slidey Car Mode - Triangle, R1, R1, LEFT, R1, L1, R2, L1
// Y, R1, R1, Left, R1, L1, R2, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("Y33L3141"), 8)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("SNOWDAY"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_SLIDEY_CARS)
TRIGGER_SLIDEY_CARS_CHEAT()
ENDIF
// Fast Run - Triangle, Left, Right, Right, L2, L1, Square
// Y, Left, Right, Right, L2, L1, X
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("YLRR21X"), 7)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("CATCHME"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_FAST_RUN)
TRIGGER_FAST_RUN_CHEAT()
ENDIF
// Fast Swim - Left, Left, L1, Right, Right, R2, Left, L2, Right
// Left, Left, L1, Right, Right, R2, Left, L2, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("LL1RR4L2R"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("GOTGILLS"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_FAST_SWIM)
TRIGGER_FAST_SWIM_CHEAT()
ENDIF
// Give Weapons - R1, R2, L1, R2, Left, Left, Square, Right, Left, Right, Square,
// R1, R2, L1, R2, Left, Left, X, Right, Left, Right, Right, X
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("3414LLXRLRRX"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("TOOLUP"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_GIVE_WEAPONS)
eCheatStatusWeapons = CHEAT_ACTIVATE
ENDIF
// Advance Weather - R2, X, L1, L1, L2, L2, L2, Square
// R2, A, L1, L1, L2, L2, L2, X
// UNKNOWN WEATHER TYPE
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("4A11222X"), 8)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("MAKEITRAIN"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_ADVANCE_WEATHER)
eCheatStatusAdvanceWeather = CHEAT_ACTIVATE
ENDIF
// Health and armour - R1, R2, L1, X, Left, Left, Right, Right, Left, Square, Right, Square
// R1, R2, L1, A, Left, Left, Right, Right, Left, X, Right, X
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("341ALLRRLXRX"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("TURTLE"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_GIVE_HEALTH_ARMOR)
eCheatStatusHealthArmor = CHEAT_ACTIVATE
ENDIF
// Special Ability recharge - X, X, Square, R1, L1, X, Right, Left, X
// A, A, X, R1, L1, A, Right, Left, A
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("AAX31ARLA"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("POWERUP"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE)
eCheatStatusSpecialAbilityRecharge = CHEAT_ACTIVATE
ENDIF
// Wanted Level Up - R1, R1, Circle, R2, Left, Right, Left, Right, Left, Right
// R1, R1, B, R2, Left, Right, Left, Right, Left, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("33B4LRLRLR"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("FUGITIVE"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_WANTED_LEVEL_UP)
eCheatStatusWantedLevelUp = CHEAT_ACTIVATE
ENDIF
// Wanted Level Down - R1, R1, Circle R2, Right, Left, Right, Left,Right, Left
// R1, R1, B, R2, Right, Left, Right, Left, Right, Left
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("33B4RLRLRL"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("LAWYERUP"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_WANTED_LEVEL_DOWN)
eCheatStatusWantedLevelDown = CHEAT_ACTIVATE
ENDIF
// Give Parachute - Left, Right, L1, L2, R1, R2, R2, Left, Left, Right, L1
// Left, Right, L1, L2, R1, R2, R2, Left, Left, Right, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("LR12344LLR1"), 11)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("SKYDIVE"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_GIVE_PARACHUTE)
eCheatStatusGiveParachute = CHEAT_ACTIVATE
ENDIF
//-----------------------------------------------------------------
// Off mission cheats
// Bang Bang - Right, Square, X, Left, R1, R2, Left, Right, Right, L1, L1, L1
// Right, X, A, Left R1, R2, Left, Right, Right, L1, L1, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("RXAL34LRR111"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("HIGHEX"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_BANG_BANG)
TRIGGER_BANG_BANG_CHEAT()
ENDIF
// Flaming Bullets - L1, R1, Square, R1, Left, R2, R1, Left, Square, Right, L1, L1
// L1, R1, X, R1, Left, R2, R1, Left, X, Right, L1, L1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("13X3L43LXR11"), 12)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("INCENDIARY"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_FLAMING_BULLETS)
TRIGGER_FLAMING_BULLETS_CHEAT()
ENDIF
// Explosive Melee Attacks - Right, Left, X, Triangle, R1, Circle, Circle, Circle, L2
// Right, Left, A, Y, R1, B, B, B, L2
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("RLAY3BBB2"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("HOTHANDS"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_EXPLOSIVE_MELEE)
TRIGGER_EXPLOSIVE_MELEE_CHEAT()
ENDIF
// 0 Gravity - Left, Left, L1, R1, L1, Right, Left, L1, Left
// Left, Left, L1, R1, L1, Right, Left, L1, Left
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("LL131RL1L"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("FLOATER"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_0_GRAVITY)
TRIGGER_0GRAVITY_CHEAT()
ENDIF
// Invincibility - Right, X, Right, Left, Right, R1, Right, Left, X, Triangle
// Right, A, Right, Left, Right, R1, Right, Left, A, Y
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("RARLR3RLAY"), 10)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("PAINKILLER"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_INVINCIBILITY)
TRIGGER_INVINCIBILITY_CHEAT()
ENDIF
// Slow-mo mode - Triangle, Left, Right, Right, Square, R2, R1
// Y, Left, Right, Right, X, R2, R1
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("YLRRX43"), 7)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("SLOWMO"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_SLOWMO)
TRIGGER_SLOWMO_CHEAT()
ENDIF
// Skyfall - L1, L2, R1, R2, Left, Right, Left, Right, L1, L2, R1, R2, Left, Right, Left, Right
// L1, L2, R1, R2, Left, Right, Left, Right, L1, L2, R1, R2, Left, Right, Left, Right
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("1234LRLR1234LRLR"), 16)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("SKYFALL"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_SKYFALL)
TRIGGER_SKYFALL_CHEAT()
ENDIF
// Drunk Mode - Triangle, Right, Right, Left, Right, Square, Circle, Left
// Y, Right, Right, Left, Right, X, B, Left
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("YRRLRXBL"), 8)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("LIQUOR"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_DRUNK)
TRIGGER_DRUNK_CHEAT()
ENDIF
// Aim Slow Down Time - Square, L2, R1, Triangle, Left, Square, L2, Right, X
// X, L2, R1, Y, Left, X, L2, Right, A
IF HAS_CHEAT_CODE_BEEN_ACTIVATED( HASH("X23YLX2RA"), 9)
OR HAS_PC_CHEAT_WITH_HASH_BEEN_ACTIVATED( HASH("DEADEYE"))
OR HAS_CHEAT_BEEN_PHONE_TRIGGERED(CHEAT_TYPE_AIM_SLOWMO)
TRIGGER_AIM_SLOWMO_CHEAT()
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
// Basic widget struct
STRUCT sCheatWidget
WIDGET_GROUP_ID groupID
BOOL bToggle
ENDSTRUCT
// Debug widget vars
WIDGET_GROUP_ID mainWidget
WIDGET_GROUP_ID generalCheatWidget
WIDGET_GROUP_ID vehicleCheatWidget
WIDGET_GROUP_ID offMissionCheatWidget
WIDGET_GROUP_ID disableCheatsWidget
sCheatWidget cheatWidgetEnableDebugWidgets
sCheatWidget cheatWidgetEnableDebugDisplay
// Vehicle Spawn cheats
sCheatWidget cheatWidgetSpawnBuzzard
sCheatWidget cheatWidgetSpawnBMX
sCheatWidget cheatWidgetSpawnCaddy
sCheatWidget cheatWidgetSpawnComet
sCheatWidget cheatWidgetSpawnDuster
sCheatWidget cheatWidgetSpawnPCJ
sCheatWidget cheatWidgetSpawnRapidGT
sCheatWidget cheatWidgetSpawnSanchez
sCheatWidget cheatWidgetSpawnStretchLimo
sCheatWidget cheatWidgetSpawnStuntPlane
sCheatWidget cheatWidgetSpawnTrashmaster
sCheatWidget cheatWidgetSpawnSeaPlane
sCheatWidget cheatWidgetSpawnDuel
sCheatWidget cheatWidgetSpawnBubbleSub
// General cheats
sCheatWidget cheatWidgetSuperJump
sCheatWidget cheatWidgetSlideyCars
sCheatWidget cheatWidgetFastRun
sCheatWidget cheatWidgetFastSwim
sCheatWidget cheatWidgetWeapons
sCheatWidget cheatWidgetAdvanceWeather
sCheatWidget cheatWidgetHealthArmor
sCheatWidget cheatWidgetSpecialAbilityRecharge
sCheatWidget cheatWidgetWantedLevelUp
sCheatWidget cheatWidgetWantedLevelDown
sCheatWidget cheatWidgetGiveParachute
// Off mission only cheats
sCheatWidget cheatWidgetBangBang
sCheatWidget cheatWidgetFlamingBullets
sCheatWidget cheatWidgetExplosiveMelee
sCheatWidget cheatWidget0Gravity
sCheatWidget cheatWidgetInvincibility
sCheatWidget cheatWidgetSlowMo
sCheatWidget cheatWidgetSkyfall
sCheatWidget cheatWidgetDrunk
sCheatWidget cheatWidgetAimSloMo
// Disable cheat widgets
sCheatWidget cheatWidgetDisableSuperJump
sCheatWidget cheatWidgetDisableSlideyCars
sCheatWidget cheatWidgetDisableFastRun
sCheatWidget cheatWidgetDisableFastSwim
sCheatWidget cheatWidgetDisableWeapons
sCheatWidget cheatWidgetDisableAdvanceWeather
sCheatWidget cheatWidgetDisableHealthArmor
sCheatWidget cheatWidgetDisableSpecialAbilityRecharge
sCheatWidget cheatWidgetDisableWantedLevelUp
sCheatWidget cheatWidgetDisableWantedLevelDown
sCheatWidget cheatWidgetDisableGiveParachute
sCheatWidget cheatWidgetDisableBangBang
sCheatWidget cheatWidgetDisableFlamingBullets
sCheatWidget cheatWidgetDisableExplosiveMelee
sCheatWidget cheatWidgetDisable0Gravity
sCheatWidget cheatWidgetDisableInvincibility
sCheatWidget cheatWidgetDisableSlowMo
sCheatWidget cheatWidgetDisableSkyfall
sCheatWidget cheatWidgetDisableDrunk
sCheatWidget cheatWidgetDisableAimSloMo
sCheatWidget cheatWidgetDisableVehicleSpawns
sCheatWidget cheatWidgetDisableOffMission
sCheatWidget cheatWidgetDisableGeneral
sCheatWidget cheatWidgetDisableAll
PROC SETUP_BASIC_CHEAT_WIDGETS()
mainWidget = START_WIDGET_GROUP("Cheat Controller")
ADD_WIDGET_BOOL("Toggle cheat widgets", cheatWidgetEnableDebugWidgets.bToggle)
STOP_WIDGET_GROUP()
ENDPROC
/// PURPOSE: Create widget for cheats
PROC SETUP_CHEAT_WIDGETS()
mainWidget = START_WIDGET_GROUP("Cheat Controller")
ADD_WIDGET_BOOL("Toggle cheat widgets", cheatWidgetEnableDebugWidgets.bToggle)
ADD_WIDGET_BOOL("Display cheat debug info", cheatWidgetEnableDebugDisplay.bToggle)
disableCheatsWidget = START_WIDGET_GROUP("Disable cheats")
ADD_WIDGET_BOOL("Disable/Enable ALL cheats ", cheatWidgetDisableAll.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Off Mission cheats ", cheatWidgetDisableOffMission.bToggle)
ADD_WIDGET_BOOL("Disable/Enable General cheats ", cheatWidgetDisableGeneral.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Spawn Vehicle cheats ", cheatWidgetDisableVehicleSpawns.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Advance weather", cheatWidgetDisableAdvanceWeather.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Fast run", cheatWidgetDisableFastRun.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Fast swim", cheatWidgetDisableFastSwim.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Slidey cars", cheatWidgetDisableSlideyCars.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Super jump", cheatWidgetDisableSuperJump.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Give max health and armor", cheatWidgetDisableHealthArmor.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Give parachute", cheatWidgetDisableGiveParachute.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Give weapons", cheatWidgetDisableWeapons.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Recharge special ability", cheatWidgetDisableSpecialAbilityRecharge.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Wanted level down", cheatWidgetDisableWantedLevelDown.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Wanted level up", cheatWidgetDisableWantedLevelUp.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Enable 0 Gravity", cheatWidgetDisable0Gravity.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Enable aim slo-mo mode", cheatWidgetDisableAimSloMo.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Enable drunk mode", cheatWidgetDisableDrunk.bToggle)
ADD_WIDGET_BOOL("Disable Enable explosive melee", cheatWidgetDisableExplosiveMelee.bToggle)
ADD_WIDGET_BOOL("Disable Enable explosive shots", cheatWidgetDisableBangBang.bToggle)
ADD_WIDGET_BOOL("Disable Enable flaming bullets", cheatWidgetDisableFlamingBullets.bToggle)
ADD_WIDGET_BOOL("Disable Enable Invincibility", cheatWidgetDisableInvincibility.bToggle)
ADD_WIDGET_BOOL("Disable Enable skyfall mode", cheatWidgetDisableSkyfall.bToggle)
ADD_WIDGET_BOOL("Disable/Enable Cycle slow-mo", cheatWidgetDisableSlowMo.bToggle)
STOP_WIDGET_GROUP()
// Vehicle spawn cheats
vehicleCheatWidget = START_WIDGET_GROUP("Vehicle Spawn Cheats")
ADD_WIDGET_BOOL("Spawn Buzzard", cheatWidgetSpawnBuzzard.bToggle)
ADD_WIDGET_BOOL("Spawn BMX", cheatWidgetSpawnBMX.bToggle)
ADD_WIDGET_BOOL("Spawn Caddy", cheatWidgetSpawnCaddy.bToggle)
ADD_WIDGET_BOOL("Spawn Comet", cheatWidgetSpawnComet.bToggle)
ADD_WIDGET_BOOL("Spawn Duster", cheatWidgetSpawnDuster.bToggle)
ADD_WIDGET_BOOL("Spawn PCJ", cheatWidgetSpawnPCJ.bToggle)
ADD_WIDGET_BOOL("Spawn Rapid GT", cheatWidgetSpawnRapidGT.bToggle)
ADD_WIDGET_BOOL("Spawn Sanchez", cheatWidgetSpawnSanchez.bToggle)
ADD_WIDGET_BOOL("Spawn Stretch Limo", cheatWidgetSpawnStretchLimo.bToggle)
ADD_WIDGET_BOOL("Spawn Stunt Plane", cheatWidgetSpawnStuntPlane.bToggle)
ADD_WIDGET_BOOL("Spawn Trashmaster", cheatWidgetSpawnTrashmaster.bToggle)
ADD_WIDGET_BOOL("Spawn Dodo Sea Plane: CG to NG only. Must be unlocked in-game.", cheatWidgetSpawnSeaPlane.bToggle)
ADD_WIDGET_BOOL("Spawn Dukes O'Death: CG to NG only. Must be unlocked in-game.", cheatWidgetSpawnDuel.bToggle)
ADD_WIDGET_BOOL("Spawn Kraken Sub: CG to NG only. Must be unlocked in-game.", cheatWidgetSpawnBubbleSub.bToggle)
STOP_WIDGET_GROUP()
// General Cheats
generalCheatWidget = START_WIDGET_GROUP("General Cheats")
ADD_WIDGET_BOOL("Advance weather", cheatWidgetAdvanceWeather.bToggle)
ADD_WIDGET_BOOL("Activate fast run", cheatWidgetFastRun.bToggle)
ADD_WIDGET_BOOL("Activate fast swim", cheatWidgetFastSwim.bToggle)
ADD_WIDGET_BOOL("Activate slidey cars", cheatWidgetSlideyCars.bToggle)
ADD_WIDGET_BOOL("Activate super jump", cheatWidgetSuperJump.bToggle)
ADD_WIDGET_BOOL("Give max health and armor", cheatWidgetHealthArmor.bToggle)
ADD_WIDGET_BOOL("Give parachute", cheatWidgetGiveParachute.bToggle)
ADD_WIDGET_BOOL("Give weapons", cheatWidgetWeapons.bToggle)
ADD_WIDGET_BOOL("Recharge special ability", cheatWidgetSpecialAbilityRecharge.bToggle)
ADD_WIDGET_BOOL("Wanted level down", cheatWidgetWantedLevelDown.bToggle)
ADD_WIDGET_BOOL("Wanted level up", cheatWidgetWantedLevelUp.bToggle)
STOP_WIDGET_GROUP()
// Off mission cheats
offMissionCheatWidget = START_WIDGET_GROUP("Off mission Cheats")
ADD_WIDGET_BOOL("Activate 0 Gravity", cheatWidget0Gravity.bToggle)
ADD_WIDGET_BOOL("Activate aim slo-mo mode", cheatWidgetAimSloMo.bToggle)
ADD_WIDGET_BOOL("Activate drunk mode", cheatWidgetDrunk.bToggle)
ADD_WIDGET_BOOL("Activate explosive melee", cheatWidgetExplosiveMelee.bToggle)
ADD_WIDGET_BOOL("Activate explosive shots", cheatWidgetBangBang.bToggle)
ADD_WIDGET_BOOL("Activate flaming bullets", cheatWidgetFlamingBullets.bToggle)
ADD_WIDGET_BOOL("Activate Invincibility", cheatWidgetInvincibility.bToggle)
ADD_WIDGET_BOOL("Activate skyfall mode", cheatWidgetSkyfall.bToggle)
ADD_WIDGET_BOOL("Activate slow-mo (3 levels)", cheatWidgetSlowMo.bToggle)
STOP_WIDGET_GROUP()
// Stop main widget group
STOP_WIDGET_GROUP()
ENDPROC
PROC CLEANUP_WIDGETS()
IF DOES_WIDGET_GROUP_EXIST(mainWidget)
DELETE_WIDGET_GROUP(mainWidget)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(generalCheatWidget)
DELETE_WIDGET_GROUP(generalCheatWidget)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(offMissionCheatWidget)
DELETE_WIDGET_GROUP(offMissionCheatWidget)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(vehicleCheatWidget)
DELETE_WIDGET_GROUP(vehicleCheatWidget)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(disableCheatsWidget)
DELETE_WIDGET_GROUP(disableCheatsWidget)
ENDIF
ENDPROC
PROC PROCESS_DISABLE_CHEAT_WIDGETS()
IF cheatWidgetDisableAll.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
DISABLE_CHEAT( CHEAT_TYPE_ALL, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_ALL, TRUE )
ENDIF
cheatWidgetDisableAll.bToggle = FALSE
ENDIF
IF cheatWidgetDisableVehicleSpawns.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SPAWN_VEHICLE)
DISABLE_CHEAT( CHEAT_TYPE_SPAWN_VEHICLE, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SPAWN_VEHICLE, TRUE )
ENDIF
cheatWidgetDisableVehicleSpawns.bToggle = FALSE
ENDIF
IF cheatWidgetDisableOffMission.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_OFF_MISSION)
DISABLE_CHEAT( CHEAT_TYPE_OFF_MISSION, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_OFF_MISSION, TRUE )
ENDIF
cheatWidgetDisableOffMission.bToggle = FALSE
ENDIF
IF cheatWidgetDisableGeneral.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
DISABLE_CHEAT( CHEAT_TYPE_GENERAL, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_GENERAL, TRUE )
ENDIF
cheatWidgetDisableGeneral.bToggle = FALSE
ENDIF
IF cheatWidgetDisableSuperJump.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SUPER_JUMP)
DISABLE_CHEAT( CHEAT_TYPE_SUPER_JUMP, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SUPER_JUMP, TRUE )
ENDIF
cheatWidgetDisableSuperJump.bToggle = FALSE
ENDIF
IF cheatWidgetDisableSlideyCars.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SLIDEY_CARS)
DISABLE_CHEAT( CHEAT_TYPE_SLIDEY_CARS, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SLIDEY_CARS, TRUE )
ENDIF
cheatWidgetDisableSlideyCars.bToggle = FALSE
ENDIF
IF cheatWidgetDisableFastRun.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_FAST_RUN)
DISABLE_CHEAT( CHEAT_TYPE_FAST_RUN, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_FAST_RUN, TRUE )
ENDIF
cheatWidgetDisableFastRun.bToggle = FALSE
ENDIF
IF cheatWidgetDisableFastSwim.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_FAST_SWIM)
DISABLE_CHEAT( CHEAT_TYPE_FAST_SWIM, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_FAST_SWIM, TRUE )
ENDIF
cheatWidgetDisableFastSwim.bToggle = FALSE
ENDIF
IF cheatWidgetDisableWeapons.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_WEAPONS)
DISABLE_CHEAT( CHEAT_TYPE_GIVE_WEAPONS, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_GIVE_WEAPONS, TRUE )
ENDIF
cheatWidgetDisableWeapons.bToggle = FALSE
ENDIF
IF cheatWidgetDisableAdvanceWeather.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ADVANCE_WEATHER)
DISABLE_CHEAT( CHEAT_TYPE_ADVANCE_WEATHER, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_ADVANCE_WEATHER, TRUE )
ENDIF
cheatWidgetDisableAdvanceWeather.bToggle = FALSE
ENDIF
IF cheatWidgetDisableHealthArmor.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_HEALTH_ARMOR)
DISABLE_CHEAT( CHEAT_TYPE_GIVE_HEALTH_ARMOR, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_GIVE_HEALTH_ARMOR, TRUE )
ENDIF
cheatWidgetDisableHealthArmor.bToggle = FALSE
ENDIF
IF cheatWidgetDisableSpecialAbilityRecharge.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE)
DISABLE_CHEAT( CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE, TRUE )
ENDIF
cheatWidgetDisableSpecialAbilityRecharge.bToggle = FALSE
ENDIF
IF cheatWidgetDisableWantedLevelUp.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_WANTED_LEVEL_UP)
DISABLE_CHEAT( CHEAT_TYPE_WANTED_LEVEL_UP, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_WANTED_LEVEL_UP, TRUE )
ENDIF
cheatWidgetDisableWantedLevelUp.bToggle = FALSE
ENDIF
IF cheatWidgetDisableWantedLevelDown.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_WANTED_LEVEL_DOWN)
DISABLE_CHEAT( CHEAT_TYPE_WANTED_LEVEL_DOWN, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_WANTED_LEVEL_DOWN, TRUE )
ENDIF
cheatWidgetDisableWantedLevelDown.bToggle = FALSE
ENDIF
IF cheatWidgetDisableGiveParachute.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_PARACHUTE)
DISABLE_CHEAT( CHEAT_TYPE_GIVE_PARACHUTE, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_GIVE_PARACHUTE, TRUE )
ENDIF
cheatWidgetDisableGiveParachute.bToggle = FALSE
ENDIF
IF cheatWidgetDisableBangBang.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_BANG_BANG)
DISABLE_CHEAT( CHEAT_TYPE_BANG_BANG, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_BANG_BANG, TRUE )
ENDIF
cheatWidgetDisableBangBang.bToggle = FALSE
ENDIF
IF cheatWidgetDisableFlamingBullets.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_FLAMING_BULLETS)
DISABLE_CHEAT( CHEAT_TYPE_FLAMING_BULLETS, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_FLAMING_BULLETS, TRUE )
ENDIF
cheatWidgetDisableFlamingBullets.bToggle = FALSE
ENDIF
IF cheatWidgetDisableExplosiveMelee.bToggle = TRUE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_EXPLOSIVE_MELEE)
DISABLE_CHEAT( CHEAT_TYPE_EXPLOSIVE_MELEE, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_EXPLOSIVE_MELEE, TRUE )
ENDIF
cheatWidgetDisableExplosiveMelee.bToggle = FALSE
ENDIF
IF cheatWidgetDisable0Gravity.bToggle = TRUE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_0_GRAVITY)
DISABLE_CHEAT( CHEAT_TYPE_0_GRAVITY, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_0_GRAVITY, TRUE )
ENDIF
cheatWidgetDisable0Gravity.bToggle = FALSE
ENDIF
IF cheatWidgetDisableInvincibility.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_INVINCIBILITY)
DISABLE_CHEAT( CHEAT_TYPE_INVINCIBILITY, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_INVINCIBILITY, TRUE )
ENDIF
cheatWidgetDisableInvincibility.bToggle = FALSE
ENDIF
IF cheatWidgetDisableSlowMo.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SLOWMO)
DISABLE_CHEAT( CHEAT_TYPE_SLOWMO, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SLOWMO, TRUE )
ENDIF
cheatWidgetDisableSlowMo.bToggle = FALSE
ENDIF
IF cheatWidgetDisableSkyfall.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_SKYFALL)
DISABLE_CHEAT( CHEAT_TYPE_SKYFALL, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_SKYFALL, TRUE )
ENDIF
cheatWidgetDisableSkyfall.bToggle = FALSE
ENDIF
IF cheatWidgetDisableDrunk.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_DRUNK)
DISABLE_CHEAT( CHEAT_TYPE_DRUNK, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_DRUNK, TRUE )
ENDIF
cheatWidgetDisableDrunk.bToggle = FALSE
ENDIF
IF cheatWidgetDisableAimSloMo.bToggle
IF IS_CHEAT_DISABLED(CHEAT_TYPE_AIM_SLOWMO)
DISABLE_CHEAT( CHEAT_TYPE_AIM_SLOWMO, FALSE )
ELSE
DISABLE_CHEAT( CHEAT_TYPE_AIM_SLOWMO, TRUE )
ENDIF
cheatWidgetDisableAimSloMo.bToggle = FALSE
ENDIF
ENDPROC
/// PURPOSE: Checks the cheat widget statuses and enables them if the checkboxes are ticked.
///
PROC PROCESS_CHEAT_WIDGETS
// Don't allow player to trigger cheats if they are dead
IF IS_PED_INJURED(PLAYER_PED_ID())
EXIT
ENDIF
// Don't allow player to trigger cheats if player controls are disabled.
IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
EXIT
ENDIF
IF cheatWidgetEnableDebugWidgets.bToggle = TRUE
IF bWidgetsCreated = FALSE
CLEANUP_WIDGETS()
SETUP_CHEAT_WIDGETS()
bWidgetsCreated = TRUE
ENDIF
ELSE
IF bWidgetsCreated
CLEANUP_WIDGETS()
SETUP_BASIC_CHEAT_WIDGETS()
bWidgetsCreated = FALSE
ENDIF
EXIT
ENDIF
// Vehicle spawn cheats
IF cheatWidgetSpawnBuzzard.bToggle = TRUE
cheatWidgetSpawnBuzzard.bToggle = FALSE
//SET_BIT( g_iCheatTriggerBitset, ENUM_TO_INT(CHEAT_TYPE_SPAWN_VEHICLE) )
//g_eCheatVehicleModelName = BUZZARD
TRIGGER_VEHICLE_CHEAT( BUZZARD, "CHEAT_SPAWN_VEH1" )
ENDIF
IF cheatWidgetSpawnBMX.bToggle = TRUE
cheatWidgetSpawnBMX.bToggle = FALSE
//SET_BIT( g_iCheatTriggerBitset, ENUM_TO_INT(CHEAT_TYPE_SPAWN_VEHICLE) )
//g_eCheatVehicleModelName = BMX
TRIGGER_VEHICLE_CHEAT( BMX, "CHEAT_SPAWN_VEH2" )
ENDIF
IF cheatWidgetSpawnCaddy.bToggle = TRUE
cheatWidgetSpawnCaddy.bToggle = FALSE
SET_BIT( g_iCheatTriggerBitset, ENUM_TO_INT(CHEAT_TYPE_SPAWN_VEHICLE) )
g_eCheatVehicleModelName = CADDY
//TRIGGER_VEHICLE_CHEAT( CADDY, "CHEAT_SPAWN_VEH3" )
ENDIF
IF cheatWidgetSpawnComet.bToggle = TRUE
cheatWidgetSpawnComet.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( COMET2, "CHEAT_SPAWN_VEH4" )
ENDIF
IF cheatWidgetSpawnDuster.bToggle = TRUE
cheatWidgetSpawnDuster.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( DUSTER, "CHEAT_SPAWN_VEH5" )
ENDIF
IF cheatWidgetSpawnPCJ.bToggle = TRUE
cheatWidgetSpawnPCJ.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( PCJ, "CHEAT_SPAWN_VEH6" )
ENDIF
IF cheatWidgetSpawnRapidGT.bToggle = TRUE
cheatWidgetSpawnRapidGT.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( RAPIDGT, "CHEAT_SPAWN_VEH7" )
ENDIF
IF cheatWidgetSpawnSanchez.bToggle = TRUE
cheatWidgetSpawnSanchez.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( SANCHEZ, "CHEAT_SPAWN_VEH8" )
ENDIF
IF cheatWidgetSpawnStretchLimo.bToggle = TRUE
cheatWidgetSpawnStretchLimo.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( STRETCH, "CHEAT_SPAWN_VEH9" )
ENDIF
IF cheatWidgetSpawnStuntPlane.bToggle = TRUE
cheatWidgetSpawnStuntPlane.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( STUNT, "CHEAT_SPAWN_VEH10" )
ENDIF
IF cheatWidgetSpawnTrashmaster.bToggle = TRUE
cheatWidgetSpawnTrashmaster.bToggle = FALSE
TRIGGER_VEHICLE_CHEAT( TRASH, "CHEAT_SPAWN_VEH11" )
ENDIF
// New NG vehicle cheats
IF cheatWidgetSpawnSeaPlane.bToggle = TRUE
cheatWidgetSpawnSeaPlane.bToggle = FALSE
IF IS_LAST_GEN_PLAYER()
TRIGGER_VEHICLE_CHEAT( DODO, "CHEAT_SPAWN_VEH12" )
ENDIF
ENDIF
IF cheatWidgetSpawnDuel.bToggle = TRUE
cheatWidgetSpawnDuel.bToggle = FALSE
IF IS_LAST_GEN_PLAYER()
TRIGGER_VEHICLE_CHEAT( DUKES2, "CHEAT_SPAWN_VEH13" )
ENDIF
ENDIF
IF cheatWidgetSpawnBubbleSub.bToggle = TRUE
cheatWidgetSpawnBubbleSub.bToggle = FALSE
IF IS_LAST_GEN_PLAYER()
TRIGGER_VEHICLE_CHEAT( SUBMERSIBLE2, "CHEAT_SPAWN_VEH14" )
ENDIF
ENDIF
//-----------------------------------------------------------------
// General cheats
IF cheatWidgetSuperJump.bToggle = TRUE
cheatWidgetSuperJump.bToggle = FALSE
TRIGGER_SUPER_JUMP_CHEAT()
ENDIF
IF cheatWidgetSlideyCars.bToggle = TRUE
cheatWidgetSlideyCars.bToggle = FALSE
TRIGGER_SLIDEY_CARS_CHEAT()
ENDIF
IF cheatWidgetFastRun.bToggle = TRUE
cheatWidgetFastRun.bToggle = FALSE
TRIGGER_FAST_RUN_CHEAT()
ENDIF
IF cheatWidgetFastSwim.bToggle = TRUE
cheatWidgetFastSwim.bToggle = FALSE
TRIGGER_FAST_SWIM_CHEAT()
ENDIF
IF cheatWidgetWeapons.bToggle = TRUE
cheatWidgetWeapons.bToggle = FALSE
eCheatStatusWeapons = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetAdvanceWeather.bToggle = TRUE
cheatWidgetAdvanceWeather.bToggle = FALSE
eCheatStatusAdvanceWeather = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetHealthArmor.bToggle = TRUE
cheatWidgetHealthArmor.bToggle = FALSE
eCheatStatusHealthArmor = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetSpecialAbilityRecharge.bToggle = TRUE
cheatWidgetSpecialAbilityRecharge.bToggle = FALSE
eCheatStatusSpecialAbilityRecharge = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetWantedLevelUp.bToggle = TRUE
cheatWidgetWantedLevelUp.bToggle = FALSE
eCheatStatusWantedLevelUp = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetWantedLevelDown.bToggle = TRUE
cheatWidgetWantedLevelDown.bToggle = FALSE
eCheatStatusWantedLevelDown = CHEAT_ACTIVATE
ENDIF
IF cheatWidgetGiveParachute.bToggle = TRUE
cheatWidgetGiveParachute.bToggle = FALSE
eCheatStatusGiveParachute = CHEAT_ACTIVATE
ENDIF
//-----------------------------------------------------------------
// Off mission cheats
IF cheatWidgetBangBang.bToggle = TRUE
cheatWidgetBangBang.bToggle = FALSE
TRIGGER_BANG_BANG_CHEAT()
ENDIF
IF cheatWidgetFlamingBullets.bToggle = TRUE
cheatWidgetFlamingBullets.bToggle = FALSE
TRIGGER_FLAMING_BULLETS_CHEAT()
ENDIF
IF cheatWidgetExplosiveMelee.bToggle = TRUE
cheatWidgetExplosiveMelee.bToggle = FALSE
TRIGGER_EXPLOSIVE_MELEE_CHEAT()
ENDIF
IF cheatWidget0Gravity.bToggle = TRUE
cheatWidget0Gravity.bToggle = FALSE
TRIGGER_0GRAVITY_CHEAT()
ENDIF
IF cheatWidgetInvincibility.bToggle = TRUE
cheatWidgetInvincibility.bToggle = FALSE
TRIGGER_INVINCIBILITY_CHEAT()
ENDIF
IF cheatWidgetSlowMo.bToggle = TRUE
cheatWidgetSlowMo.bToggle = FALSE
TRIGGER_SLOWMO_CHEAT()
ENDIF
IF cheatWidgetSkyfall.bToggle = TRUE
cheatWidgetSkyfall.bToggle = FALSE
TRIGGER_SKYFALL_CHEAT()
ENDIF
IF cheatWidgetDrunk.bToggle = TRUE
cheatWidgetDrunk.bToggle = FALSE
TRIGGER_DRUNK_CHEAT()
ENDIF
IF cheatWidgetAimSloMo.bToggle = TRUE
cheatWidgetAimSloMo.bToggle = FALSE
TRIGGER_AIM_SLOWMO_CHEAT()
ENDIF
PROCESS_DISABLE_CHEAT_WIDGETS()
ENDPROC
/// PURPOSE: Constants
CONST_FLOAT DEBUG_TEXT_SCALE_X 0.25
CONST_FLOAT DEBUG_TEXT_SCALE_Y 0.3
CONST_FLOAT DEBUG_TEXT_WRAP_XPOS_START 0.0
CONST_FLOAT DEBUG_TEXT_WRAP_XPOS_END 1.0
CONST_FLOAT DEBUG_START_XPOS 0.075
CONST_FLOAT DEBUG_START_YPOS 0.075
CONST_FLOAT DEBUG_ADD_Y 0.02
CONST_FLOAT DEBUG_NAME_XSPACE 0.11
CONST_FLOAT DEBUG_STRING_XSPACE 0.065
CONST_FLOAT DEBUG_INT_XSPACE 0.040
CONST_FLOAT DEBUG_GAP_XSPACE 0.08
FLOAT fX = DEBUG_START_XPOS
FLOAT fY = DEBUG_START_YPOS
PROC SETUP_DEBUG_TEXT_DISPLAY(HUD_COLOURS paramColour)
INT theR, theG, theB, theA
GET_HUD_COLOUR(paramColour, theR, theG, theB, theA)
SET_TEXT_COLOUR(theR, theG, theB, theA)
SET_TEXT_SCALE(DEBUG_TEXT_SCALE_X, DEBUG_TEXT_SCALE_Y)
SET_TEXT_WRAP(DEBUG_TEXT_WRAP_XPOS_START, DEBUG_TEXT_WRAP_XPOS_END)
SET_TEXT_DROPSHADOW(0, 0, 0, 0, 255)
ENDPROC
PROC DISPLAY_DEBUG_LITERAL_TEXT(HUD_COLOURS paramColour, FLOAT paramXPos, FLOAT paramYPos, STRING paramText)
SETUP_DEBUG_TEXT_DISPLAY(paramColour)
DISPLAY_TEXT_WITH_LITERAL_STRING(paramXPos, paramYPos, "STRING", paramText)
ENDPROC
PROC DISPLAY_DEBUG_BACKGROUND()
// Calculate the background rectangle height
FLOAT textBoxYSize = DEBUG_ADD_Y * 20
FLOAT boxYBorder = DEBUG_START_YPOS + (DEBUG_ADD_Y * 0.5)
FLOAT totalBoxYSize = textBoxYSize + boxYBorder
FLOAT boxYCentre = (totalBoxYSize * 0.5) + 0.06
DRAW_RECT(0.235, boxYCentre, 0.35, totalBoxYSize, 0, 0, 0, 175)
ENDPROC
PROC DISPLAY_DEBUG_LINE( CHEATS_BITSET_ENUM eCheat, CHEATS_BITSET_ENUM eCheatCategory )
fX = DEBUG_START_XPOS
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_WHITE, fX, fY, GET_CHEAT_NAME_FROM_ENUM(eCheat) )
fX += DEBUG_NAME_XSPACE
IF IS_CHEAT_ACTIVE(eCheat)
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_RED, fX, fY, "ACTIVE" )
ELSE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_GREEN, fX, fY, "INACTIVE" )
ENDIF
fX += DEBUG_STRING_XSPACE
IF IS_CHEAT_DISABLED(eCheat)
OR IS_CHEAT_DISABLED(eCheatCategory)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_RED, fX, fY, "DISABLED" )
ELSE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_GREEN, fX, fY, "ENABLED" )
ENDIF
fX += DEBUG_STRING_XSPACE
IF HAS_CHEAT_BEEN_USED_THIS_SESSION(eCheat)
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_RED, fX, fY, "USED" )
ELSE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_GREEN, fX, fY, "NOT USED" )
ENDIF
fY += DEBUG_ADD_Y
ENDPROC
PROC DISPLAY_DEBUG_INFO()
IF cheatWidgetEnableDebugDisplay.bToggle = FALSE
EXIT
ENDIF
DISPLAY_DEBUG_BACKGROUND()
fX = DEBUG_START_XPOS
fY = DEBUG_START_YPOS
// Title
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_WHITE, fX, fY, "CHEAT" )
fX += DEBUG_NAME_XSPACE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_WHITE, fX, fY, "ACTIVE" )
fX += DEBUG_STRING_XSPACE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_WHITE, fX, fY, "DISABLED" )
fX += DEBUG_STRING_XSPACE
DISPLAY_DEBUG_LITERAL_TEXT( HUD_COLOUR_WHITE, fX, fY, "USED THIS SESSION" )
fY += DEBUG_ADD_Y
//DISPLAY_DEBUG_LINE(CHEAT_TYPE_ALL, CHEAT_TYPE_ALL )
//DISPLAY_DEBUG_LINE(CHEAT_TYPE_GENERAL, CHEAT_TYPE_GENERAL )
//DISPLAY_DEBUG_LINE(CHEAT_TYPE_OFF_MISSION, CHEAT_TYPE_OFF_MISSION )
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SPAWN_VEHICLE, CHEAT_TYPE_SPAWN_VEHICLE )
DISPLAY_DEBUG_LINE(CHEAT_TYPE_ADVANCE_WEATHER, CHEAT_TYPE_GENERAL )
DISPLAY_DEBUG_LINE(CHEAT_TYPE_FAST_RUN, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_FAST_SWIM, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SLIDEY_CARS, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SUPER_JUMP, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_GIVE_HEALTH_ARMOR, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_GIVE_PARACHUTE, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_GIVE_WEAPONS, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_WANTED_LEVEL_DOWN, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_WANTED_LEVEL_UP, CHEAT_TYPE_GENERAL)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_0_GRAVITY, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_AIM_SLOWMO, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_DRUNK, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_EXPLOSIVE_MELEE, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_BANG_BANG, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_FLAMING_BULLETS, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_INVINCIBILITY, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SKYFALL, CHEAT_TYPE_OFF_MISSION)
DISPLAY_DEBUG_LINE(CHEAT_TYPE_SLOWMO, CHEAT_TYPE_OFF_MISSION)
ENDPROC
#ENDIF
//////////////////////////////////////////////////////////////
/// CAR SPAWN CHEATS
///
/// PURPOSE: Pre-loads the cheat vehicle model
///
/// PARAMS:
/// eVehicleModel - Vehicle model name
PROC LOAD_CHEAT_VEHICLE( MODEL_NAMES eVehicleModel )
IF IS_MODEL_IN_CDIMAGE(eVehicleModel)
REQUEST_MODEL(eVehicleModel)
IF HAS_MODEL_LOADED(eVehicleModel)
eCheatStatusSpawnVehicle = CHEAT_ACTIVATE
ENDIF
ENDIF
ENDPROC
/// PURPOSE: Creates the cheat vehicle
///
/// PARAMS:
/// eVehicleModel - Vehicle model name
PROC CREATE_CHEAT_VEHICLE( MODEL_NAMES eVehicleModel )
VECTOR vehiclePosition
FLOAT vehicleHeading
BOOL playerWasInCar = FALSE
IF HAS_MODEL_LOADED( eVehicleModel )
IF IS_PLAYER_PLAYING(PLAYER_ID())
IF DOES_ENTITY_EXIST(vCheatVehicle)
IF NOT IS_ENTITY_DEAD(vCheatVehicle)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vCheatVehicle)
vehiclePosition = GET_ENTITY_COORDS(vCheatVehicle)
vehicleHeading = GET_ENTITY_HEADING(vCheatVehicle)
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<vehiclePosition.x, vehiclePosition.y, vehiclePosition.z+4.0>>)
playerWasInCar = TRUE
ENDIF
ENDIF
DELETE_VEHICLE(vCheatVehicle)
ENDIF
IF NOT playerWasInCar
// Spawn duster slightly off to one side to prevent the player being clipped by the wing.
IF eVehicleModel = DUSTER
OR eVehicleModel = STUNT
vehiclePosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << -1.5, 3.5, 1.0 >>)
ELIF eVehicleModel = BUZZARD
vehiclePosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 6.0, 2.0 >>)
ELSE
vehiclePosition = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), << 0.0, 3.5, 1.0 >>)
ENDIF
vehicleHeading = (GET_ENTITY_HEADING(PLAYER_PED_ID()) + 90.0)
ENDIF
IF IS_CHEAT_VEHICLE_SPAWN_POS_SAFE(eVehicleModel, vehiclePosition, vehicleHeading)
vCheatVehicle = CREATE_VEHICLE(eVehicleModel, vehiclePosition, vehicleHeading, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vCheatVehicle)
SET_MODEL_AS_NO_LONGER_NEEDED(eVehicleModel)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vCheatVehicle)
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION(sCheatVehicleText)
REGISTER_CHEAT_USED( CHEAT_TYPE_SPAWN_VEHICLE )
ELSE
SET_MODEL_AS_NO_LONGER_NEEDED(eVehicleModel)
DISPLAY_CHEAT_DENIED_NOTIFICATION( "CHEAT_VEHICLE_SPAWN_DENIED" )
ENDIF
eCheatStatusSpawnVehicle = CHEAT_INACTIVE
ENDIF
ENDIF
ENDPROC
/// PURPOSE: Runs the vehicle spawn cheat.
///
/// PARAMS:
/// eVehicleModel -
PROC PROCESS_VEHICLE_SPAWN_CHEATS( MODEL_NAMES eVehicleModel )
SWITCH eCheatStatusSpawnVehicle
CASE CHEAT_DISABLED
BREAK
CASE CHEAT_INACTIVE
BREAK
CASE CHEAT_INITIALISE
// Can't spawn a vehicle in an interior.
IF IS_INTERIOR_SCENE()
DISPLAY_CHEAT_DENIED_NOTIFICATION( "CHEAT_VEHICLE_SPAWN_DENIED" )
eCheatStatusSpawnVehicle = CHEAT_INACTIVE
ELSE
LOAD_CHEAT_VEHICLE(eVehicleModel)
ENDIF
BREAK
CASE CHEAT_ACTIVATE
CREATE_CHEAT_VEHICLE(eVehicleModel)
BREAK
DEFAULT
// Should not get here
SCRIPT_ASSERT( "Cheat controller: Reached an invalid case in the vehicle spawn cheat.")
BREAK
ENDSWITCH
ENDPROC
//////////////////////////////////////////////////////////////
/// GENERAL CHEATS
///
///
PROC CHEAT_SUPER_JUMP()
SWITCH eCheatStatusSuperJump
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SUPER_JUMP")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SUPER_JUMP, TRUE )
eCheatStatusSuperJump = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
// Deactivate if the player dies/is arrested/cutscene, etc.
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SUPER_JUMP )
OR IS_INTERIOR_SCENE()
eCheatStatusSuperJump = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_SUPER_JUMP_THIS_FRAME(PLAYER_ID())
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableParachuting, TRUE) // Fix for B* 1948122
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_SUPER_JUMP")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SUPER_JUMP, FALSE )
eCheatStatusSuperJump = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Super jump cheat has entered a default case, not allowed!")
break
ENDSWITCH
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_SLIDEY_CARS()
VEHICLE_INDEX tempVehicle
SWITCH eCheatStatusSlideyCars
CASE CHEAT_INACTIVE
// Do Nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SLIDEY_CARS")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SLIDEY_CARS, TRUE )
eCheatStatusSlideyCars = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SLIDEY_CARS )
eCheatStatusSlideyCars = CHEAT_DEACTIVATE
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
tempVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID(),FALSE)
IF NOT IS_ENTITY_DEAD(tempVehicle)
IF GET_PED_IN_VEHICLE_SEAT(tempVehicle) = PLAYER_PED_ID()
IF vCheatSlideyVehicle = NULL
vCheatSlideyVehicle = tempVehicle
IF NOT IS_ENTITY_DEAD(vCheatSlideyVehicle)
IF IS_PLAYERS_VEHICLE_OF_TYPE( PV_CAR )
SET_VEHICLE_REDUCE_GRIP( vCheatSlideyVehicle, TRUE )
ELSE
vCheatSlideyVehicle = NULL
ENDIF
ENDIF
ELSE
//If player changed vehicles, disable slidey cars on
IF vCheatSlideyVehicle != tempVehicle
IF NOT IS_ENTITY_DEAD(vCheatSlideyVehicle)
SET_VEHICLE_REDUCE_GRIP( vCheatSlideyVehicle, FALSE )
ENDIF
vCheatSlideyVehicle = NULL
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_SLIDEY_CARS")
eCheatStatusSlideyCars = CHEAT_CLEANUP
BREAK
CASE CHEAT_CLEANUP
IF NOT IS_ENTITY_DEAD(vCheatSlideyVehicle)
SET_VEHICLE_REDUCE_GRIP( vCheatSlideyVehicle, FALSE )
vCheatSlideyVehicle = NULL
ENDIF
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SLIDEY_CARS, FALSE )
eCheatStatusSlideyCars = CHEAT_INACTIVE
BREAK
DEFAULT // Shouldn't get here
SCRIPT_ASSERT("cheat controller: Cheat slidey cars has entered a default case, not allowed!")
break
ENDSWITCH
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_FAST_RUN()
SWITCH eCheatStatusFastRun
CASE CHEAT_INACTIVE
// Do Nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_FAST_RUN")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FAST_RUN, TRUE )
eCheatStatusFastRun = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_PED_INJURED(PLAYER_PED_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FAST_RUN )
eCheatStatusFastRun = CHEAT_DEACTIVATE
ELSE
IF IS_PED_RUNNING(PLAYER_PED_ID())
OR IS_PED_SPRINTING(PLAYER_PED_ID())
AND NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(PLAYER_ID(), 1.49)
ELSE
SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(PLAYER_ID(), 1.0)
ENDIF
STAT_SET_CHEAT_IS_ACTIVE()
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(PLAYER_ID(), 1.0)
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_FAST_RUN")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FAST_RUN, FALSE )
eCheatStatusFastRun = CHEAT_INACTIVE
BREAK
DEFAULT // Shouldn't get here
SCRIPT_ASSERT("cheat controller: Cheat fast run has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_FAST_SWIM()
SWITCH eCheatStatusFastSwim
CASE CHEAT_INACTIVE
// Do Nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_FAST_SWIM")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FAST_SWIM, TRUE )
eCheatStatusFastSwim = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_GENERAL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FAST_SWIM )
eCheatStatusFastSwim = CHEAT_DEACTIVATE
ELSE
SET_SWIM_MULTIPLIER_FOR_PLAYER(PLAYER_ID(),1.49)
STAT_SET_CHEAT_IS_ACTIVE()
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
SET_SWIM_MULTIPLIER_FOR_PLAYER(PLAYER_ID(),1.0)
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_FAST_SWIM")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FAST_SWIM, FALSE )
eCheatStatusFastSwim = CHEAT_INACTIVE
BREAK
DEFAULT // Shouldn't get here
SCRIPT_ASSERT("cheat controller: Cheat fast swim has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_GIVE_WEAPONS()
IF eCheatStatusWeapons = CHEAT_ACTIVATE
eCheatStatusWeapons = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_WEAPONS)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_GIVE_WEAPONS")
REGISTER_CHEAT_USED( CHEAT_TYPE_GIVE_WEAPONS )
IF IS_PLAYER_PLAYING( PLAYER_ID())
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_KNIFE, INFINITE_AMMO ,FALSE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_SMG, 300, FALSE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, 300, TRUE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PUMPSHOTGUN, 150, FALSE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_SNIPERRIFLE, 30, FALSE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_GRENADE, 5, FALSE )
GIVE_DELAYED_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_RPG, 5, FALSE )
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_ADVANCE_WEATHER()
IF eCheatStatusAdvanceWeather = CHEAT_ACTIVATE
eCheatStatusAdvanceWeather = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_ADVANCE_WEATHER)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
REGISTER_CHEAT_USED( CHEAT_TYPE_ADVANCE_WEATHER )
SWITCH eCheatWeather
CASE CHEAT_WEATHER_OFF
eCheatWeather = CHEAT_WEATHER_EXTRASUNNY
FALLTHRU
CASE CHEAT_WEATHER_EXTRASUNNY
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_EXTRA_SUNNY")
eCheatWeather = CHEAT_WEATHER_CLEAR
BREAK
CASE CHEAT_WEATHER_CLEAR
SET_WEATHER_TYPE_NOW_PERSIST("CLEAR")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_CLEAR")
eCheatWeather = CHEAT_WEATHER_CLOUDS
BREAK
CASE CHEAT_WEATHER_CLOUDS
SET_WEATHER_TYPE_NOW_PERSIST("CLOUDS")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_CLOUDY")
eCheatWeather = CHEAT_WEATHER_SMOG
BREAK
CASE CHEAT_WEATHER_SMOG
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_SMOGGY")
//eCheatWeather = CHEAT_WEATHER_CLOUDY
eCheatWeather = CHEAT_WEATHER_OVERCAST
BREAK
/*
Commented out because it's asserting. Will check later.
CASE CHEAT_WEATHER_CLOUDY
SET_WEATHER_TYPE_NOW_PERSIST("CLOUDY")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_CLOUDY")
eCheatWeather = CHEAT_WEATHER_OVERCAST
BREAK
*/
CASE CHEAT_WEATHER_OVERCAST
SET_WEATHER_TYPE_NOW_PERSIST("OVERCAST")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_OVERCAST")
eCheatWeather = CHEAT_WEATHER_RAIN
BREAK
CASE CHEAT_WEATHER_RAIN
SET_WEATHER_TYPE_NOW_PERSIST("RAIN")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_RAIN")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_ADVANCE_WEATHER, TRUE )
eCheatWeather = CHEAT_WEATHER_THUNDER
BREAK
CASE CHEAT_WEATHER_THUNDER
SET_WEATHER_TYPE_NOW_PERSIST("THUNDER")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_THUNDER")
eCheatWeather = CHEAT_WEATHER_CLEARING
BREAK
CASE CHEAT_WEATHER_CLEARING
SET_WEATHER_TYPE_NOW_PERSIST("CLEARING")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_CLEARING")
eCheatWeather = CHEAT_WEATHER_SNOW
BREAK
CASE CHEAT_WEATHER_SNOW
SET_WEATHER_TYPE_NOW_PERSIST("XMAS")
CLEAR_WEATHER_TYPE_PERSIST()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_ADVANCE_WEATHER_SNOW")
eCheatWeather = CHEAT_WEATHER_OFF
BREAK
DEFAULT
// Should not get here
SCRIPT_ASSERT( "cheat controller: unknown weather type in weather cheat")
BREAK
ENDSWITCH
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_GIVE_HEALTH_ARMOR()
IF eCheatStatusHealthArmor = CHEAT_ACTIVATE
eCheatStatusHealthArmor = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_HEALTH_ARMOR)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME_FRIENDS)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_HEALTH_ARMOR")
REGISTER_CHEAT_USED( CHEAT_TYPE_GIVE_HEALTH_ARMOR )
SET_ENTITY_HEALTH(PLAYER_PED_ID(), GET_ENTITY_MAX_HEALTH(PLAYER_PED_ID()))
ADD_ARMOUR_TO_PED(PLAYER_PED_ID(), (GET_PLAYER_MAX_ARMOUR(PLAYER_ID())-GET_PED_ARMOUR(PLAYER_PED_ID())))
// Repair vehicle if necessary.
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
VEHICLE_INDEX playerVehicle = GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(playerVehicle)
IF NOT IS_ENTITY_DEAD(playerVehicle)
SET_VEHICLE_FIXED(playerVehicle)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_SPECIAL_ABILITY_RECHARGE()
IF eCheatStatusSpecialAbilityRecharge = CHEAT_ACTIVATE
eCheatStatusSpecialAbilityRecharge = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME)
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_MINIGAME_FRIENDS)
OR NOT IS_SPECIAL_ABILITY_UNLOCKED(GET_PLAYER_MODEL())
OR NOT IS_SPECIAL_ABILITY_ENABLED(PLAYER_ID())
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
SPECIAL_ABILITY_FILL_METER(PLAYER_ID(), TRUE)
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SPECIAL_ABILITY")
REGISTER_CHEAT_USED( CHEAT_TYPE_SPECIAL_ABILITY_RECHARGE )
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_WANTED_LEVEL_UP()
INT iWantedLevel
IF eCheatStatusWantedLevelUp = CHEAT_ACTIVATE
eCheatStatusWantedLevelUp = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_WANTED_LEVEL_UP)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
// If the max wanted level is 0, then they're probably faking the wanted level, so we can't activate the cheat.
IF GET_MAX_WANTED_LEVEL() = 0
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
iWantedLevel = GET_PLAYER_WANTED_LEVEL(PLAYER_ID())
IF iWantedLevel < GET_MAX_WANTED_LEVEL()
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), iWantedLevel + 1 )
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_WANTED_UP")
REGISTER_CHEAT_USED( CHEAT_TYPE_WANTED_LEVEL_UP )
ELSE
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_WANTED_UP_DENIED")
ENDIF
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_WANTED_LEVEL_DOWN()
INT iWantedLevel
IF eCheatStatusWantedLevelDown = CHEAT_ACTIVATE
eCheatStatusWantedLevelDown = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_WANTED_LEVEL_DOWN)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
// If the max wanted level is 0, then they're probably faking the wanted level, so we can't activate the cheat.
IF GET_MAX_WANTED_LEVEL() = 0
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
iWantedLevel = GET_PLAYER_WANTED_LEVEL(PLAYER_ID())
IF iWantedLevel > 0
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_WANTED_DOWN")
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), iWantedLevel - 1)
REGISTER_CHEAT_USED( CHEAT_TYPE_WANTED_LEVEL_DOWN )
ELSE
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_WANTED_DOWN_DENIED")
ENDIF
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
PROC CHEAT_GIVE_PARACHUTE()
IF eCheatStatusGiveParachute = CHEAT_ACTIVATE
eCheatStatusGiveParachute = CHEAT_INACTIVE
IF IS_CHEAT_DISABLED(CHEAT_TYPE_ALL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GENERAL)
OR IS_CHEAT_DISABLED(CHEAT_TYPE_GIVE_PARACHUTE)
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_NOT_NOW")
EXIT
ENDIF
IF IS_PHONE_FORBIDDEN()
DISPLAY_CHEAT_DENIED_NOTIFICATION("CHEAT_PHONE_DENIED")
EXIT
ENDIF
IF IS_PLAYER_PLAYING(PLAYER_ID())
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_GIVE_PARACHUTE")
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE, 1,TRUE,TRUE)
REGISTER_CHEAT_USED( CHEAT_TYPE_GIVE_PARACHUTE )
ENDIF
ENDIF
ENDPROC
//-----------------------------------------------------------------------------
/// PURPOSE: Processes all the general cheats
///
PROC PROCESS_GENERAL_CHEATS()
CHEAT_SUPER_JUMP()
CHEAT_SLIDEY_CARS()
CHEAT_FAST_RUN()
CHEAT_FAST_SWIM()
CHEAT_GIVE_WEAPONS()
CHEAT_ADVANCE_WEATHER()
CHEAT_GIVE_HEALTH_ARMOR()
CHEAT_SPECIAL_ABILITY_RECHARGE()
CHEAT_WANTED_LEVEL_UP()
CHEAT_WANTED_LEVEL_DOWN()
CHEAT_GIVE_PARACHUTE()
ENDPROC
//////////////////////////////////////////////////////////////////
/// OFF MISSION CHEATS
///
///
PROC CHEAT_BANG_BANG()
SWITCH eCheatStatusBangBang
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_BANG_BANG")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_BANG_BANG, TRUE )
eCheatStatusBangBang = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
// Deactivate if a mission activates, or the player dies/is arrested/cutscene, etc.
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_BANG_BANG )
eCheatStatusBangBang = CHEAT_DEACTIVATE
EXIT
ENDIF
IF IS_ANY_MISSION_ACTIVE()
eCheatStatusBangBang = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_EXPLOSIVE_AMMO_THIS_FRAME(PLAYER_ID())
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_BANG_BANG")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_BANG_BANG, FALSE )
eCheatStatusBangBang = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Bang Bang cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Does the flaming bullets cheat
PROC CHEAT_FLAMING_BULLETS()
SWITCH eCheatStatusFlamingBullets
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_FLAMING_BULLETS")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FLAMING_BULLETS, TRUE )
eCheatStatusFlamingBullets = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
// Deactivate if a mission activates, or the player dies/is arrested/cutscene, etc.
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_FLAMING_BULLETS )
eCheatStatusFlamingBullets = CHEAT_DEACTIVATE
EXIT
ENDIF
IF IS_ANY_MISSION_ACTIVE()
eCheatStatusFlamingBullets = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_FIRE_AMMO_THIS_FRAME(PLAYER_ID())
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_FLAMING_BULLETS")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_FLAMING_BULLETS, FALSE )
eCheatStatusFlamingBullets = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Explosive melee cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Does the explosive melee cheat
PROC CHEAT_EXPLOSIVE_MELEE()
SWITCH eCheatStatusExplosiveMelee
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_EXPLOSIVE_MELEE")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_EXPLOSIVE_MELEE, TRUE )
eCheatStatusExplosiveMelee = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
// Deactivate if a mission activates, or the player dies/is arrested/cutscene, etc.
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_EXPLOSIVE_MELEE )
OR IS_ANY_MISSION_ACTIVE()
eCheatStatusExplosiveMelee = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_EXPLOSIVE_MELEE_THIS_FRAME(PLAYER_ID())
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_EXPLOSIVE_MELEE")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_EXPLOSIVE_MELEE, FALSE )
eCheatStatusExplosiveMelee = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Explosive melee cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Activates the 0gravity cheat
PROC ACTIVATE_0GRAVITY()
++iGravityLevel
IF iGravityLevel > 1 // Originally 3 - Only moon gravity allowed now due to B* 1354692
eCheatStatus0Gravity = CHEAT_DEACTIVATE
EXIT
ENDIF
SWITCH iGravityLevel
CASE 1
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_GRAVITY_MOON")
SET_GRAVITY_LEVEL(GRAV_MOON)
BREAK
/*
CASE 2
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_GRAVITY_MICRO")
SET_GRAVITY_LEVEL(GRAV_LOW)
BREAK
CASE 3
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_GRAVITY_ZERO")
SET_GRAVITY_LEVEL(GRAV_ZERO)
BREAK
*/
DEFAULT
SCRIPT_ASSERT("cheat controller: Gravity cheat has out of bounds iGravityLevel value")
BREAK
ENDSWITCH
eCheatStatus0Gravity = CHEAT_RUNNING
ENDPROC
/// PURPOSE:
/// Does the 0 gravity cheat - 3 levels.
PROC CHEAT_0GRAVITY()
SWITCH eCheatStatus0Gravity
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
REGISTER_CHEAT_USED( CHEAT_TYPE_0_GRAVITY )
REGISTER_CHEAT_ACTIVE(CHEAT_TYPE_0_GRAVITY,TRUE)
ACTIVATE_0GRAVITY()
BREAK
CASE CHEAT_RUNNING
if not IS_PED_INJURED(PLAYER_PED_ID())
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_ANY_MISSION_ACTIVE()
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_0_GRAVITY )
OR IS_CHEAT_ACTIVE(CHEAT_TYPE_SKYFALL)
OR IS_ENTITY_IN_WATER(PLAYER_PED_ID())
eCheatStatus0Gravity = CHEAT_DEACTIVATE
ENDIF
else
eCheatStatus0Gravity = CHEAT_DEACTIVATE
endif
BREAK
CASE CHEAT_DEACTIVATE
//DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_GRAVITY_NORM")
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_GRAVITY_MOON")
REGISTER_CHEAT_ACTIVE(CHEAT_TYPE_0_GRAVITY,FALSE)
SET_GRAVITY_LEVEL(GRAV_EARTH)
iGravityLevel = 0
eCheatStatus0Gravity = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Gravity cheat has entered a default case, not allowed!")
break
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Does the invincibility cheat
PROC CHEAT_INVINCIBILITY()
VECTOR vPlayerPos
SWITCH eCheatStatusInvincibility
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_INVINCIBILITY")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_INVINCIBILITY, TRUE )
eCheatStatusInvincibility = CHEAT_RUNNING
iInvincibilityStartTime = GET_GAME_TIMER()
SET_PLAYER_INVINCIBLE(PLAYER_ID(), TRUE)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE)
BREAK
CASE CHEAT_RUNNING
// Deactivate if a mission activates, or the player dies/is arrested/cutscene, etc.
IF NOT IS_PLAYER_PLAYING(PLAYER_ID()) OR IS_PED_INJURED(PLAYER_PED_ID())
CPRINTLN(DEBUG_AMBIENT, "CHEAT_INVINCIBILITY: CHEAT_RUNNING disabling cheat")
eCheatStatusInvincibility = CHEAT_DEACTIVATE
EXIT
ENDIF
vPlayerPos = GET_PLAYER_COORDS(PLAYER_ID())
IF IS_ANY_MISSION_ACTIVE()
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_INVINCIBILITY )
OR vPlayerPos.z <= -170.0 // For submersible crush depth.
eCheatStatusInvincibility = CHEAT_DEACTIVATE
EXIT
ENDIF
iInvincibilityTimer = GET_GAME_TIMER() - iInvincibilityStartTime
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("appInternet")) = 0
DRAW_GENERIC_TIMER( iInvincibilityTimeLimit - iInvincibilityTimer , "CHEAT_INV", 0, TIMER_STYLE_DONTUSEMILLISECONDS, 1000, PODIUMPOS_NONE, HUDORDER_DONTCARE, FALSE, HUD_COLOUR_RED)
ENDIF
IF iInvincibilityTimer >= (iInvincibilityTimeLimit - 1000)
eCheatStatusInvincibility = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_PLAYER_INVINCIBLE(PLAYER_ID(), TRUE)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE)
STAT_SET_CHEAT_IS_ACTIVE()
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_INVINCIBILITY_OFF")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_INVINCIBILITY, FALSE )
eCheatStatusInvincibility = CHEAT_INACTIVE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE)
ENDIF
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Invincibility cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Activates the slowmo cheat
PROC ACTIVATE_SLOWMO()
// This cheat cycles through three levels.
++iSlowMoLevel
IF iSlowMoLevel > 3
eCheatStatusSlowMo = CHEAT_DEACTIVATE
EXIT
ENDIF
SWITCH iSlowMoLevel
CASE 1
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SLOW_MO1")
SET_TIME_SCALE( 0.6 )
BREAK
CASE 2
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SLOW_MO2")
SET_TIME_SCALE( 0.4 )
BREAK
CASE 3
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SLOW_MO3")
SET_TIME_SCALE( 0.2 )
BREAK
DEFAULT
SCRIPT_ASSERT("cheat controller: Slowmo cheat has out of bounds iSlowMoLevel value")
BREAK
ENDSWITCH
eCheatStatusSlowMo = CHEAT_RUNNING
ENDPROC
/// PURPOSE:
/// Runs the slowmo cheat
PROC CHEAT_SLOWMO()
SWITCH eCheatStatusSlowMo
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SLOWMO, TRUE )
ACTIVATE_SLOWMO()
BREAK
CASE CHEAT_RUNNING
// Suppress actual inputs for weapon wheel and character wheel
// as they play with the time step which causes issues with the cheat
// Instead we'll check the disabled controls and quit the cheats
// when the buttons are pressed, so we can deactivate the cheats safely.
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SELECT_WEAPON )
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CHARACTER_WHEEL )
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_ANY_MISSION_ACTIVE()
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
OR IS_SELECTOR_ONSCREEN()
OR IS_DISABLED_CONTROL_JUST_PRESSED( FRONTEND_CONTROL, INPUT_SELECT_WEAPON )
OR IS_DISABLED_CONTROL_JUST_PRESSED( FRONTEND_CONTROL, INPUT_CHARACTER_WHEEL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SLOWMO )
eCheatStatusSlowMo = CHEAT_DEACTIVATE
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SELECT_WEAPON )
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_CHARACTER_WHEEL )
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_SLOW_MO")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SLOWMO, FALSE )
iSlowMoLevel = 0
SET_TIME_SCALE(1.0)
eCheatStatusSlowMo = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Slowmo cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:Cleans up the skyfall cheat
///
PROC CLEANUP_SKYFALL_CHEAT()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REMOVE_WEAPON_FROM_PED(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE)
ENDIF
// Don't turn off invincibility if the invincible cheat is running
IF eCheatStatusInvincibility != CHEAT_RUNNING
SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE)
ENDIF
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
ENDPROC
/// PURPOSE: Runs the skyfall cheat
///
PROC CHEAT_SKYFALL()
VECTOR vPos
FLOAT fRot
FLOAT fGroundHeight
SWITCH eCheatStatusSkyfall
CASE CHEAT_INACTIVE
BREAK
CASE CHEAT_INITIALISE
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SKYFALL, TRUE )
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), TRUE)
SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE)
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), GADGETTYPE_PARACHUTE, 1)
vPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
fRot = GET_ENTITY_HEADING(PLAYER_PED_ID())
GET_GROUND_Z_FOR_3D_COORD(vPos, fGroundHeight )
fGroundHeight = fGroundHeight + 500
SET_ENTITY_COORDS(PLAYER_PED_ID(), << vPos.x, vPos.y, fGroundHeight >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fRot)
iSkyfallTimer = GET_GAME_TIMER()
DO_SCREEN_FADE_OUT(0)
eCheatStatusSkyfall = CHEAT_INITIALSE_PT2
BREAK
CASE CHEAT_INITIALSE_PT2
IF HAS_TIME_PASSED(1000, iSkyfallTimer)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
iSkyfallTimer = GET_GAME_TIMER()
eCheatStatusSkyfall = CHEAT_ACTIVATE
ENDIF
BREAK
CASE CHEAT_ACTIVATE
IF HAS_TIME_PASSED(1000, iSkyfallTimer)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PARACHUTE_DEPLOY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PARACHUTE_PITCH_UD)
// Disable parachute. For some reason it's in a different slot for Michael.
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 0, 0, 0)
ELSE
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL, 0, 0, 0)
ENDIF
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT)
iSkyfallTimer = GET_GAME_TIMER()
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_SKYFALL")
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING)
eCheatStatusSkyfall = CHEAT_RUNNING
ENDIF
BREAK
CASE CHEAT_RUNNING
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_ANY_MISSION_ACTIVE()
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_SKYFALL )
eCheatStatusSkyfall = CHEAT_DEACTIVATE
BREAK
ENDIF
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PARACHUTE_DEPLOY)
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_ICON)
IF IS_PED_IN_PARACHUTE_FREE_FALL(PLAYER_PED_ID())
APPLY_FORCE_TO_ENTITY(PLAYER_PED_ID(), APPLY_TYPE_IMPULSE, << 0.0, 200.0, 2.5 >>, << 0.0, 0.0, 0.0 >>, 0, TRUE, FALSE, FALSE)
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(PLAYER_PED_ID())
eCheatStatusSkyfall = CHEAT_DEACTIVATE
ENDIF
ELSE
eCheatStatusSkyfall = CHEAT_DEACTIVATE
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
CLEANUP_SKYFALL_CHEAT()
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_SKYFALL")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_SKYFALL, FALSE )
eCheatStatusSkyfall = CHEAT_INACTIVE
BREAK
DEFAULT
BREAK
ENDSWITCH
ENDPROC
PROC CHEAT_DRUNK()
SWITCH eCheatStatusDrunk
CASE CHEAT_INACTIVE
// Do Nothing
BREAK
CASE CHEAT_ACTIVATE
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_DRUNK")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_DRUNK, TRUE )
Make_Ped_Drunk_Constant(PLAYER_PED_ID())
Activate_Drunk_Camera_Constant()
eCheatStatusDrunk = CHEAT_RUNNING
BREAK
CASE CHEAT_RUNNING
IF IS_ANY_MISSION_ACTIVE()
OR NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_DRUNK )
eCheatStatusDrunk = CHEAT_DEACTIVATE
ENDIF
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_DRUNK")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_DRUNK, FALSE )
Make_Ped_Sober(PLAYER_PED_ID())
Quit_Drunk_Camera_Gradually(1000)
eCheatStatusDrunk = CHEAT_INACTIVE
BREAK
CASE CHEAT_CLEANUP
Quit_Drunk_Camera_Immediately()
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_DRUNK, FALSE )
eCheatStatusDrunk = CHEAT_INACTIVE
BREAK
DEFAULT // Shouldn't get here
SCRIPT_ASSERT("cheat controller: Cheat drunk has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
PROC ACTIVATE_AIM_SLOWMO()
++iAimSlowMoLevel
IF iAimSlowMoLevel > 3
iAimSlowMoLevel = 0
eCheatStatusAimSlowMo = CHEAT_DEACTIVATE
EXIT
ENDIF
SWITCH iAimSlowMoLevel
CASE 1
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_AIM_SLOW_MO1")
fAimSlowMoValue = 0.6
BREAK
CASE 2
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_AIM_SLOW_MO2")
fAimSlowMoValue = 0.4
BREAK
CASE 3
DISPLAY_CHEAT_ACTIVATION_NOTIFICATION("CHEAT_AIM_SLOW_MO3")
fAimSlowMoValue = 0.2
BREAK
DEFAULT
SCRIPT_ASSERT("cheat controller: Aim slowmo cheat has out of bounds iAimSlowMoLevel value")
BREAK
ENDSWITCH
eCheatStatusAimSlowMo = CHEAT_RUNNING
ENDPROC
PROC SET_SLOW_MO_AIM()
// Check the player is on foot
IF IS_PED_ON_FOOT(PLAYER_PED_ID())
//IF IS_PLAYER_TARGETTING_ANYTHING(PLAYER_ID())
//OR IS_PLAYER_FREE_AIMING(PLAYER_ID())
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_AIM )
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_OBJECT //CHECK FOR MOBILE PHONE AS THIS WILL TRIGGER
SET_TIME_SCALE( fAimSlowMoValue )
ELSE
SET_TIME_SCALE( 1.0 )
ENDIF
ELSE
SET_TIME_SCALE( 1.0 )
ENDIF
ENDIF
ENDPROC
PROC CHEAT_AIM_SLOWMO()
SWITCH eCheatStatusAimSlowMo
CASE CHEAT_INACTIVE
// Do nothing
BREAK
CASE CHEAT_ACTIVATE
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_AIM_SLOWMO, TRUE )
ACTIVATE_AIM_SLOWMO()
BREAK
CASE CHEAT_RUNNING
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
OR IS_ANY_MISSION_ACTIVE()
OR IS_CHEAT_DISABLED( CHEAT_TYPE_ALL )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_OFF_MISSION )
OR IS_CHEAT_DISABLED( CHEAT_TYPE_AIM_SLOWMO )
eCheatStatusAimSlowMo = CHEAT_DEACTIVATE
EXIT
ENDIF
SET_SLOW_MO_AIM()
BREAK
CASE CHEAT_DEACTIVATE
DISPLAY_CHEAT_DEACTIVATION_NOTIFICATION("CHEAT_AIM_SLOW_MO")
REGISTER_CHEAT_ACTIVE( CHEAT_TYPE_AIM_SLOWMO, FALSE )
SET_TIME_SCALE(1.0)
iAimSlowMoLevel = 0
eCheatStatusAimSlowMo = CHEAT_INACTIVE
BREAK
DEFAULT
// Should never get here
SCRIPT_ASSERT("cheat controller: Aim slowmo cheat has entered a default case, not allowed!")
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE: Processes all the off-mission cheats
///
PROC PROCESS_OFF_MISSION_CHEATS()
CHEAT_0GRAVITY()
CHEAT_BANG_BANG()
CHEAT_DRUNK()
CHEAT_EXPLOSIVE_MELEE()
CHEAT_FLAMING_BULLETS()
CHEAT_INVINCIBILITY()
CHEAT_SKYFALL()
CHEAT_SLOWMO()
CHEAT_AIM_SLOWMO()
ENDPROC
/// PURPOSE: Processes all the cheats
///
PROC PROCESS_CHEATS()
#IF IS_DEBUG_BUILD
PROCESS_CHEAT_WIDGETS()
DISPLAY_DEBUG_INFO()
#ENDIF
CHECK_CHEAT_CODES()
PROCESS_GENERAL_CHEATS()
PROCESS_OFF_MISSION_CHEATS()
PROCESS_VEHICLE_SPAWN_CHEATS( eCheatVehicleModel )
ENDPROC
/// PURPOSE: Cleanup cheats and terminate script
PROC CLEANUP_SCRIPT()
#IF IS_DEBUG_BUILD
// Cleanup widgets
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: Deleting debug widgets...")
CLEANUP_WIDGETS()
#ENDIF
SET_RIOT_MODE_ENABLED(FALSE)
IF eCheatStatusSkyfall = CHEAT_RUNNING
CLEANUP_SKYFALL_CHEAT()
ENDIF
IF eCheatStatusDrunk = CHEAT_RUNNING
Quit_Drunk_Camera_Immediately()
ENDIF
IF eCheatStatusSlowMo = CHEAT_RUNNING
OR eCheatStatusAimSlowMo = CHEAT_RUNNING
SET_TIME_SCALE(1.0)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF eCheatStatusInvincibility = CHEAT_RUNNING
SET_PLAYER_INVINCIBLE( PLAYER_ID(), FALSE )
SET_ENTITY_PROOFS(PLAYER_PED_ID(), FALSE, FALSE, FALSE, FALSE, FALSE)
ENDIF
SET_RUN_SPRINT_MULTIPLIER_FOR_PLAYER(PLAYER_ID(), 1.0)
SET_SWIM_MULTIPLIER_FOR_PLAYER(PLAYER_ID(),1.0)
ENDIF
SET_GRAVITY_LEVEL(GRAV_EARTH)
// Reset globals
g_iBitsetCheatsCurrentlyActive = 0
g_iBitsetCheatsCurrentlyDisabled = 0
g_iBitsetCheatsUsedThisSession = 0
g_iCheatTriggerBitset = 0
g_bHasAnyCheatBeenUsed = FALSE
g_eCheatVehicleModelName = DUMMY_MODEL_FOR_SCRIPT
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: Terminated")
// End script
TERMINATE_THIS_THREAD()
ENDPROC
//////////////////////////////////
/// MAIN LOOP
//////////////////////////////////
///
SCRIPT
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: Starting...")
// This script needs to cleanup only when the game moves from SP to MP
IF (HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_MAGDEMO))
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller: Forced to cleanup (SP to MP)")
CLEANUP_SCRIPT()
ENDIF
// Setup debug widgets.
#IF IS_DEBUG_BUILD
SETUP_BASIC_CHEAT_WIDGETS()
bWidgetsCreated = FALSE
#ENDIF
// Initialise globals
g_iBitsetCheatsCurrentlyActive = 0
g_iBitsetCheatsCurrentlyDisabled = 0
g_iBitsetCheatsUsedThisSession = 0
g_iCheatTriggerBitset = 0
g_bHasAnyCheatBeenUsed = FALSE
g_eCheatVehicleModelName = DUMMY_MODEL_FOR_SCRIPT
INIT_CHEAT_FEED_MESSAGES()
// Main loop
WHILE TRUE
PROCESS_CHEATS()
IF NETWORK_IS_GAME_IN_PROGRESS()
AND IS_NET_PLAYER_OK(PLAYER_ID(), TRUE, TRUE)
AND NOT g_b_TransitionActive
AND g_Private_Gamemode_Current = GAMEMODE_FM
CPRINTLN(DEBUG_AMBIENT, "Cheat Controller active in MP, cleaning up")
CLEANUP_SCRIPT()
ENDIF
WAIT(0)
ENDWHILE
ENDSCRIPT