//╒═════════════════════════════════════════════════════════════════════════════╕ //│ 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(), <>) 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