This thread will be updated on MPG, UC, and CE Forums consistently.
How to run lua files on your Payday 2 client:
http://www.mpgh.net/forum/754-payday...dy-set-up.html
Try a really hard bank heist:
http://www.mpgh.net/forum/754-payday...hard-mode.html
Most of the scripts below were discovered by me and I would appreciate credits when you redistribute them as it took a lot of time to find them all. I marked the ones that I didn't discover, they are simply included for completeness.
Level, skill points, money, and all weapons/mods (I take no credit):
Code:
managers.experience:_set_current_level(30) -- level
managers.skilltree:_set_points(1337) -- skill points
managers.money:_add_to_total(5000000000) -- money
-- All weapons unlocked
local wep_arr = {
'new_m4', 'glock_17', 'mp9', 'r870', 'glock_18c', 'amcar', 'm16', 'olympic', 'ak74', 'akm', 'akmsu', 'saiga', 'ak5', 'aug', 'g36', 'p90', 'new_m14', 'deagle', 'new_mp5', 'colt_1911', 'mac10', 'serbu', 'huntsman', 'b92fs', 'new_raging_bull', 'saw'
}
for i, name in ipairs(wep_arr) do
if not managers.upgrades:aquired(name) then
managers.upgrades:aquire(name)
end
end
-- All weapon mods
for mod_id,_ in pairs(tweak_data.blackmarket.weapon_mods) do
tweak_data.blackmarket.weapon_mods[ mod_id ].unlocked = true
managers.blackmarket:add_to_inventory("normal", "weapon_mods", mod_id, false)
end
-- All masks
managers.blackmarket:_setup_masks()
for mask_id,_ in pairs(tweak_data.blackmarket.masks) do
Global.blackmarket_manager.masks[mask_id].unlocked = true
managers.blackmarket:add_to_inventory("normal", "masks", mask_id, false)
end
-- All achievements
if managers.achievment then
for id,_ in pairs(managers.achievment.achievments) do
managers.achievment:award(id)
end
end
-- Message on screen
if managers.hud then
managers.hud:show_hint( { text = "LUA Hack loaded!" } )
end
Masks, materials, textures, colors, weapon mods (I take no credit):
Code:
-------------------------------------------------------------------------
-- GiVE iTEMS ("masks", "materials", "textures", "colors", "weapon_mods")
-------------------------------------------------------------------------
function giveitems( times, type )
for i=1, times do
for mat_id,_ in pairs(tweak_data.blackmarket[type]) do
if _.infamous then
managers.blackmarket:add_to_inventory("infamous", type, mat_id, false)
elseif _.dlc then
managers.blackmarket:add_to_inventory("preorder", type, mat_id, false)
else
managers.blackmarket:add_to_inventory("normal", type, mat_id, false)
end
end
managers.blackmarket:remove_item("normal", "materials", "plastic", false)
managers.blackmarket:remove_item("normal", "colors", "nothing", false)
end
end
-- Example calls to get one of everything:
giveitems(1, "masks")
giveitems(1, "materials")
giveitems(1, "textures")
giveitems(1, "colors")
giveitems(1, "weapon_mods")
God mode (I take no credit), no fall damage (Credits to mikethemak at UC), instant mask on, increased movement speed (I take no credit), infinite stamina, carry mods, super jump (I take no credit), no recoil, no weapon spread, high weapon damage, instant reload, instant weapon swap, fast fire-rate, infinite clip, infinite saw, instant interaction/deploy, other upgrades (eg. Joker) (Credits to RabidFubar at MPG), remove cooldown between picking up bags (Credits to RabidFubar at MPG), infinite cable ties, infinite equipment deployables, sentry ammo/god mode:
Code:
-- God mode
managers.player:player_unit():character_damage():set_invulnerable( true )
-- No fall damage (useless if you have god mode on)
function PlayerDamage:damage_fall( data ) end
-- Instant mask on
tweak_data.player.put_on_mask_time = 0.1
-- Infinite stamina
function PlayerMovement:_change_stamina( value ) end
function PlayerMovement:is_stamina_drained() return false end
function PlayerStandard:_can_run_directional() return true end
-- Carry mods (throwing distance, movement speed, jumping, running)
local car_arr = { 'being', 'mega_heavy', 'heavy', 'medium', 'light', 'coke_light' }
for i, name in ipairs(car_arr) do
tweak_data.carry.types[ name ].throw_distance_multiplier = 1.5
tweak_data.carry.types[ name ].move_speed_modifier = 1
tweak_data.carry.types[ name ].jump_modifier = 1
tweak_data.carry.types[ name ].can_run = true
end
-- Super jump (when running, you jump 1.5x high)
function PlayerStandard:_perform_jump(jump_vec)
local v = math.UP * 470
if self._running then
v = math.UP * 470 * 1.5
end
self._unit:mover():set_velocity( v )
end
-- No movement penalty, change to a larger value than 1 for an increase in speed
PlayerManager.body_armor_movement_penalty = function(self) return 1 end
-- Weapon spread
NewRaycastWeaponBase._get_spread = function(self) return 0 end
-- Weapon recoil
NewRaycastWeaponBase.recoil_multiplier = function(self) return 0 end
-- Weapon reload speed
NewRaycastWeaponBase.reload_speed_multiplier = function(self) return 2000 end
-- Weapon fire rate
NewRaycastWeaponBase.fire_rate_multiplier = function(self) return 10 end
-- Weapon swap speed
PlayerStandard._get_swap_speed_multiplier = function(self) return 2000 end
-- Infinite ammo clip
if not _fireWep then _fireWep = NewRaycastWeaponBase.fire end
function NewRaycastWeaponBase:fire( from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
local result = _fireWep( self, from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
if managers.player:player_unit() == self._setup.user_unit then
self.set_ammo(self, 1.0)
end
return result
end
-- Infinite saw
if not _fireSaw then _fireSaw = SawWeaponBase.fire end
function SawWeaponBase:fire( from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
local result = _fireSaw( self, from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
if managers.player:player_unit() == self._setup.user_unit then
self.set_ammo(self, 1.0)
end
return result
end
-- Infinite cable ties
function PlayerManager:remove_special( name ) end
-- Infinite equipment
function PlayerManager:remove_equipment( equipment_id ) end
-- Infinite equipment (when not the host of a multiplayer game, this doesn't seem to work anymore with Update 3 now.. it should work if the host is using the cheat as well though)
function PlayerManager:remove_equipment_possession( peer_id, equipment ) end
function PlayerManager:clear_equipment() end
function PlayerManager:from_server_equipment_place_result( selected_index, unit ) end
function HUDManager:remove_special_equipment( equipment ) end
-- Allow interaction with anything (ECM jammers, picking locks, deploying shaped charges, etc)
function BaseInteractionExt:_has_required_upgrade() return true end
function BaseInteractionExt:_has_required_deployable() return true end
function BaseInteractionExt:can_interact(player) return true end
function PlayerManager:has_category_upgrade( category, upgrade)
if category == "player" and (upgrade == "civ_harmless_melee" or upgrade == "civ_harmless_bullets") then return false end
return true -- Other upgrades (eg. Joker)
end
function PlayerManager:carry_blocked_by_cooldown() return false end -- Remove cooldown between picking up bags
-- Instant interaction (except for pagers because it doesn't work so well when you are client on multiplayer)
if not _getTimer then _getTimer = BaseInteractionExt._get_timer end
function BaseInteractionExt:_get_timer()
if self.tweak_data == "corpse_alarm_pager" then
return 0.1 -- if pagers don't work properly (eg. when you're a client in multiplayer) use 'return _getTimer(self)' instead.
end
return 0
end
-- Instant deploy
PlayerManager.selected_equipment_deploy_timer = function(self) return 0 end
-- Infinite sentry ammo, no recoil, left the weapon spread in because sentries have a tough time killing if they shoot in one spot
function SentryGunWeapon:fire( blanks, expend_ammo )
local fire_obj = self._effect_align[ self._interleaving_fire ]
local from_pos = fire_obj:position()
local direction = fire_obj:rotation():y()
mvector3.spread( direction, tweak_data.weapon[ self._name_id ].SPREAD * self._spread_mul )
World:effect_manager():spawn( self._muzzle_effect_table[ self._interleaving_fire ] ) -- , normal = col_ray.normal } )
if self._use_shell_ejection_effect then
World:effect_manager():spawn( self._shell_ejection_effect_table )
end
local ray_res = self:_fire_raycast( from_pos, direction, blanks )
if self._alert_events and ray_res.rays then
RaycastWeaponBase._check_alert( self, ray_res.rays, from_pos, direction, self._unit )
end
return ray_res
end
-- Sentry god mode
function SentryGunDamage:damage_bullet( attack_data ) end
-- Message on screen
if managers.hud then
managers.hud:show_hint( { text = "LUA Hack loaded!" } )
end
Demi-god mode (2x health, 2x armor, 2x damage multiplier, instant armor regeneration, unlimited messiah charges (Credits to mikethemak at UC for armor regen & messiah charges)) -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
if not _upgradeValue then _upgradeValue = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "player" and upgrade == "health_multiplier" then
return 2
elseif category == "player" and upgrade == "armor_multiplier" then
return 2
elseif category == "player" and upgrade == "passive_damage_multiplier" then
return 2
else
return _upgradeValue(self, category, upgrade, default)
end
end
managers.player:player_unit():character_damage():replenish()
-- Instant armor regeneration
function PlayerDamage:set_regenerate_timer_to_max()
self._regenerate_timer = 0
end
-- Unlimited messiah charges (self-revive)
function PlayerDamage:consume_messiah_charge() return true end
function PlayerDamage:got_messiah_charges() return true end
Infinite ammo (different from infinite ammo clip, resets ammo on reload & also when ammo runs out, just in case you activate it late):
Code:
-- Infinite ammo (resets ammo on reload & also when ammo runs out, just in case you activate it late)
if not _onReload then _onReload = RaycastWeaponBase.on_reload end
function RaycastWeaponBase:on_reload()
if managers.player:player_unit() == self._setup.user_unit then
self.set_ammo(self, 1.0)
else
_onReload(self)
end
end
if not _fireWep then _fireWep = NewRaycastWeaponBase.fire end
function NewRaycastWeaponBase:fire( from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
local result = _fireWep( self, from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
if managers.player:player_unit() == self._setup.user_unit and self:get_ammo_total() == 0 then
self.set_ammo(self, 1.0)
end
return result
end
100% Dodge (works while standing still or running, also works when you are melee'd, basically it's god mode, pro tip: use just the run_dodge_chance for less OP) -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
-- 100% Dodge
if not _uvDodge then _uvDodge = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "player" and upgrade == "passive_dodge_chance" then
return 1
elseif category == "player" and upgrade == "run_dodge_chance" then
return 1
else
return _uvDodge(self, category, upgrade, default)
end
end
100% Armor piercing for those bitch SWAT AI's with armor plating -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
-- 100% Armor piercing
if not _uvArmorPierce then _uvArmorPierce = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "weapon" and upgrade == "armor_piercing_chance" then
return 1
elseif category == "weapon" and upgrade == "armor_piercing_chance_silencer" then
return 1
else
return _uvArmorPierce(self, category, upgrade, default)
end
end
Set FOV (and keep it there even when you zoom w/ ironsights, etc):
Code:
-- Set FOV to 80
if not _setFOV then _setFOV = Camera.set_fov end
function Camera:set_fov( new_fov )
return _setFOV(self, 80)
end
managers.player:player_unit():camera()._camera_object:set_fov()
No hit disorientation:
Code:
-- No hit disorientation
function CoreEnvironmentControllerManager:hit_feedback_front() end
function CoreEnvironmentControllerManager:hit_feedback_back() end
function CoreEnvironmentControllerManager:hit_feedback_right() end
function CoreEnvironmentControllerManager:hit_feedback_left() end
function CoreEnvironmentControllerManager:hit_feedback_up() end
function CoreEnvironmentControllerManager:hit_feedback_down() end
No flashbangs:
Code:
-- No flashbangs
function CoreEnvironmentControllerManager:set_flashbang( flashbang_pos, line_of_sight, travel_dis, linear_dis ) end
Resist arrest:
Code:
-- Resist arrest
local _arrestedUpdate = Interception.Backup(PlayerArrested, "update")
function PlayerArrested:update( t, dt )
_arrestedUpdate(self, t, dt)
managers.player:set_player_state( "standard" )
end
Don't taze me bro:
Code:
-- Don't taze me bro
function PlayerTased:enter( state_data, enter_data )
PlayerTased.super.enter( self, state_data, enter_data )
self._next_shock = Application:time() + 10
self._taser_value = 1
self._recover_delayed_clbk = "PlayerTased_recover_delayed_clbk"
managers.enemy:add_delayed_clbk( self._recover_delayed_clbk, callback( self, self, "clbk_exit_to_std" ), Application:time() )
end
Increased interaction distance (20x, except on cameras, shaped charges, body bags, burn money & place camera [Firestarters job], or trip mines):
Code:
-- Infinite interact distance (except on cameras, shaped charges, body bags, burn money & place camera [Firestarters job], or trip mines)
function BaseInteractionExt:interact_distance()
if self.tweak_data == "access_camera"
or self.tweak_data == "shaped_sharge"
or tostring(self._unit:name()) == "Idstring(@ID14f05c3d9ebb44b6@)"
or self.tweak_data == "burning_money"
or self.tweak_data == "stn_int_place_camera"
or self.tweak_data == "trip_mine" then
return self._tweak_data.interact_distance or tweak_data.interaction.INTERACT_DISTANCE
end
return 20000 -- default is 200
end
Interact through walls (re-enabled after OVERKILL disabled this for certain units, works at any angle as well now):
Too large to put here..
http://pastebin.com/0grrcUFQ. Hit RAW for a plain text view for copy/pasting into your script files.
Toggle dat slowmo (world only, set SLOWMO_WORLD_ONLY to 'nil' to do world & player slowmo):
Code:
-- Toggle slowmo
SLOWMO_WORLD_ONLY = true -- possible values 'nil' or 'true'
if string.find(game_state_machine:current_state_name(), "game") then
our_id = "_MaskOn_Peer"..tostring( managers.network:session():local_peer():id() )
slowmo_id_world = "world" .. our_id
slowmo_id_player = "player" .. our_id
if not _timeEffectExpired then
-- Enable
_timeEffectExpired = TimeSpeedManager._on_effect_expired
function TimeSpeedManager:_on_effect_expired( effect_id )
local ret = _timeEffectExpired(self, effect_id)
-- Check if we are in-game
if string.find(game_state_machine:current_state_name(), "game") then
-- Restart each effect
if effect_id == slowmo_id_world then
managers.time_speed:play_effect( slowmo_id_world, tweak_data.timespeed.mask_on )
elseif effect_id == slowmo_id_player and not SLOWMO_WORLD_ONLY then
managers.time_speed:play_effect( slowmo_id_player, tweak_data.timespeed.mask_on_player )
end
end
return ret
end
tweak_data.timespeed.mask_on.fade_in_delay = 0
tweak_data.timespeed.mask_on.fade_out = 0
tweak_data.timespeed.mask_on.sync = true
tweak_data.timespeed.mask_on_player.fade_in_delay = 0
tweak_data.timespeed.mask_on_player.fade_out = 0
tweak_data.timespeed.mask_on_player.sync = true
managers.time_speed:play_effect( slowmo_id_world, tweak_data.timespeed.mask_on )
if not SLOWMO_WORLD_ONLY then managers.time_speed:play_effect( slowmo_id_player, tweak_data.timespeed.mask_on_player ) end
else
-- Disable
TimeSpeedManager._on_effect_expired = _timeEffectExpired
_timeEffectExpired = nil
if managers.time_speed._playing_effects then
for id,_ in pairs(managers.time_speed._playing_effects) do
if string.find(id, our_id) then
managers.time_speed:stop_effect(id)
end
end
end
SoundDevice:set_rtpc( "game_speed", 1 )
end
end
Penetrative warp to crosshair (change PENETRATE to 'nil' instead of 'true' if you don't want to penetrate through walls):
Code:
-- Penetrative warp to crosshair
local PENETRATE = true -- set to 'nil' instead of 'true' if you don't want it to penetrate through walls, etc
local player_unit = managers.player:player_unit()
local camera = player_unit:camera()
local mvec_to = Vector3()
local from_pos = camera:position()
mvector3.set( mvec_to, camera:forward() )
mvector3.multiply( mvec_to, 20000 )
mvector3.add( mvec_to, from_pos )
local col_ray = World:raycast( "ray", from_pos, mvec_to, "slot_mask", managers.slot:get_mask( "bullet_impact_targets" ) )
if col_ray then
if PENETRATE then
local offset = Vector3()
mvector3.set(offset, camera:forward())
mvector3.multiply(offset, 100)
mvector3.add(col_ray.hit_position, offset)
end
managers.player:warp_to(col_ray.hit_position, player_unit:rotation())
end
Warp to bullet (call this once before you shoot, then again whenever you want to teleport to your last bullet collision point):
Code:
-- Warp to bullet
if not _lastBullet then _lastBullet = nil end
if _lastBullet then managers.player:warp_to(_lastBullet, managers.player:player_unit():rotation()) end
if not _bulletCollision then _bulletCollision = InstantBulletBase.on_collision end
function InstantBulletBase:on_collision( col_ray, weapon_unit, user_unit, damage, blank )
if user_unit == managers.player:player_unit() then
_lastBullet = col_ray.hit_position
end
return _bulletCollision(self, col_ray, weapon_unit, user_unit, damage, blank)
end
Instant pickup for chemicals from Rats Day 1 (Some credits to gir489 at CE):
Code:
-- Add chems from Rats Day 1
if managers.job:current_level_id() == "alex_1" then
managers.player:add_special( { name = "caustic_soda", silent = true, amount = 1 } )
managers.player:add_special( { name = "hydrogen_chloride", silent = true, amount = 1 } )
managers.player:add_special( { name = "acid", silent = true, amount = 1 } )
end
Toggles enemy/camera highlighting (coloring credits to Yanrishatum at UC, Civilians = Green, Taser = Blue, Shield = Orange, Tank = Yellow, Sniper = Pink, Cop/Other = Purple):
Code:
-- Toggle marking enemies
function setEnemyColor(unit)
local enemyType = unit:base()._tweak_table
local color, target_color
-- Civilians | Green
if enemyType == "civilian" or enemyType == "civilian_female" then
color = Vector3( 0.1687, 0.5529, 0 )
target_color = Vector3( 0.1688, 0.5529, 0 )
-- Taser | Blue
elseif enemyType == "taser" then
color = Vector3(0, 0.3804, 0.6235)
target_color = Vector3(0.001, 0.3804, 0.6235)
-- Shield | Orange
elseif enemyType == "shield" then
color = Vector3(1, 0.5, 0)
target_color = Vector3(1.001, 0.5, 0)
-- Tank | Yellow
elseif enemyType == "tank" then
color = Vector3(1, 1, 0)
target_color = Vector3(1.001, 1, 0)
-- Sniper | Pink
elseif enemyType == "sniper" then
color = Vector3(1, 0.35, 0.35)
target_color = Vector3(1.001, 0.35, 0.35)
-- Cop/unknown | Purple
else
color = Vector3(0.5216, 0, 0.5529)
target_color = Vector3(0.5217, 0, 0.5529)
end
-- Set colors
managers.game_play_central._enemy_contour_units[unit:key()].color = color
managers.game_play_central._enemy_contour_units[unit:key()].target_color = target_color
end
function mark_enemies()
local units = World:find_units_quick( "all", 3, 16, 21, managers.slot:get_mask( "enemies" ) )
for i,unit in ipairs( units ) do
if not unit:brain() or not unit:brain()._logic_data or
not unit:brain()._logic_data.objective or
(unit:brain()._logic_data.objective.type ~= "surrender" and
unit:brain()._logic_data.objective.type ~= "follow") then
if tweak_data.character[ unit:base()._tweak_table ].silent_priority_shout then
managers.game_play_central:add_enemy_contour( unit, true )
managers.network:session():send_to_peers_synched( "mark_enemy", unit, true )
setEnemyColor(unit)
elseif unit:character_damage().on_marked_state then
managers.game_play_central:add_enemy_contour( unit, false )
managers.network:session():send_to_peers_synched( "mark_enemy", unit, false )
setEnemyColor(unit)
end
end
end
for u_key, unit in pairs( managers.groupai:state()._security_cameras ) do
managers.game_play_central:add_marked_contour_unit( unit )
managers.network:session():send_to_peers_synched( "mark_contour_unit", unit )
end
end
function UnitNetworkHandler:mark_enemy( unit, marking_strength, sender ) end
if not _markingToggle then _markingToggle = true
else _markingToggle = nil end
if not _gameUpdate then _gameUpdate = GameSetup.update end
do
local _gameUpdateLastMark
function GameSetup:update( t, dt )
_gameUpdate(self, t, dt)
if _markingToggle and (not _gameUpdateLastMark or t - _gameUpdateLastMark > 4) then
_gameUpdateLastMark = t
mark_enemies()
end
end
end
Ensure alarms aren't tripped by guards / security cams, etc (sometimes causes crash on missions where stealth completion is impossible, eg. Rats: Day 3):
Code:
if not _setCool then _setCool = CopMovement.set_cool end
function CopMovement:set_cool( state, giveaway )
if state == true then _setCool(self, state, giveaway) end
end
if not _setWhisper then _setWhisper = GroupAIStateBase.set_whisper_mode end
function GroupAIStateBase:set_whisper_mode( enabled )
if enabled == true then _setWhisper(self, true) end
end
if not _setObjective then _setObjective = CopBrain.set_objective end
function CopBrain:set_objective( new_objective )
if (not new_objective) or (new_objective.stance ~= "hos" and new_objective.attitude ~= "engage") then _setObjective(self, new_objective) end
end
if not _setStance then _setStance = CopMovement.set_stance end
function CopMovement:set_stance( new_stance_name )
if new_stance_name ~= "hos" then _setStance(self, new_stance_name) end
end
if not _setStanceCode then _setStanceCode = CopMovement.set_stance_by_code end
function CopMovement:set_stance_by_code( new_stance_code )
if new_stance_code == 1 then _setStanceCode(self, new_stance_code) end
end
if not _setInteraction then _setInteraction = CopLogicInactive._set_interaction end
function CopLogicInactive._set_interaction( data, my_data )
data.char_tweak.has_alarm_pager = false
_setInteraction(data, my_data)
end
if not _setAllowFire then _setAllowFire = CopMovement.set_allow_fire end
function CopMovement:set_allow_fire( state )
if state == false then _setAllowFire(self, state) end
end
if not _setAllowFireClient then _setAllowFireClient = CopMovement.set_allow_fire_on_client end
function CopMovement:set_allow_fire_on_client( state, unit )
if state == false then _setAllowFireClient(self, state, unit) end
end
-- Prevents panic buttons & intel burning (intercepting the 'run' action is the only way; for example, if you intercept events such as 'e_so_alarm_under_table' to prevent intel burning, the animation will not happen but the fire will still appear)
if not _actionRequest then _actionRequest = CopMovement.action_request end
function CopMovement:action_request( action_desc )
-- action_desc.variant == "e_so_alarm_under_table": gangsters lighting intel on fire in Big Oil Day 1, etc
-- action_desc.variant == "cmf_so_press_alarm_wall": civilian in Bank Heist pressing panic button, etc
-- action_desc.variant == "cmf_so_press_alarm_table": tellers in Bank Heist pressing panic button, etc
-- action_desc.variant == "cmf_so_call_police": civilians calling the police
-- action_desc.variant == "arrest_call": cops saying they are calling the police
-- Stops panic buttons & intel burning
if action_desc.variant == "run" then return false end
return _actionRequest(self, action_desc)
end
function CopMovement:on_suppressed( state ) end
function CopLogicBase._get_logic_state_from_reaction( data, reaction ) return "idle" end
function CopLogicIdle.on_alert( data, alert_data ) end
function GroupAIStateBase:on_police_called( called_reason ) end
function GroupAIStateBase:on_police_weapons_hot( called_reason ) end
function GroupAIStateBase:on_gangster_weapons_hot( called_reason ) end
function GroupAIStateBase:on_enemy_weapons_hot( is_delayed_callback ) end
function GroupAIStateBase:add_alert_listener( id, clbk, filter_num, types, m_pos ) end
function GroupAIStateBase:criminal_spotted( unit ) end
function GroupAIStateBase:report_aggression( unit ) end
function GroupAIStateBase:propagate_alert( alert_data ) end
function GroupAIStateBase:on_criminal_suspicion_progress( u_suspect, u_observer, status ) end
function PlayerMovement:on_suspicion( observer_unit, status ) end
function SecurityCamera:_upd_suspicion( t ) end
function SecurityCamera:_sound_the_alarm( detected_unit ) end
function SecurityCamera:_set_suspicion_sound( suspicion_level ) end
-- Message on screen
if managers.hud then
managers.hud:show_hint( { text = "LUA Hack loaded!" } )
end
Demi-stealth (alternative to full 'no alarm cheat'; instead alarms won't be triggered and you can use pager infinite amount of times (there is still a risk of failing pager interaction on the first try though, just FYI)) (Some credits to Exerct at UC for helping pull together the necessary code, credits to mikethemak at UC for infinite ECM jammer battery):
Code:
-- Allow infinite pagers
function GroupAIStateBase:on_successful_alarm_pager_bluff() end
-- Infinite ECM jammer battery
function ECMJammerBase:update( unit, t, dt )
self._battery_life = self._max_battery_life
end
-- Allows answer pagers, bag corpses, and spot NPC's with the cameras as well as other features I'm sure
if not _setWhisper then _setWhisper = GroupAIStateBase.set_whisper_mode end
function GroupAIStateBase:set_whisper_mode( enabled )
if enabled == true then _setWhisper(self, true) end
end
-- Make people not fire
if not _setAllowFire then _setAllowFire = CopMovement.set_allow_fire end
function CopMovement:set_allow_fire( state )
if state == false then _setAllowFire(self, state) end
end
if not _setAllowFireClient then _setAllowFireClient = CopMovement.set_allow_fire_on_client end
function CopMovement:set_allow_fire_on_client( state, unit )
if state == false then _setAllowFireClient(self, state, unit) end
end
-- Makes guards & people in general stop calling the cops
function GroupAIStateBase:on_police_called( called_reason ) end
-- Stops civs from reporting you
function CivilianLogicFlee.clbk_chk_call_the_police( ignore_this, data ) end
-- Make cameras not trigger the alarm
function SecurityCamera:_sound_the_alarm( detected_unit ) end
-- Gets rid of the sound of the camera seeing you
function SecurityCamera:_set_suspicion_sound( suspicion_level ) end
-- Stops police from saying they are calling the police all the time
function CopLogicArrest._say_call_the_police( data, my_data ) end
-- Prevents panic buttons & intel burning (intercepting the 'run' action is the only way; for example, if you intercept events such as 'e_so_alarm_under_table' to prevent intel burning, the animation will not happen but the fire will still appear)
if not _actionRequest then _actionRequest = CopMovement.action_request end
function CopMovement:action_request( action_desc )
-- action_desc.variant == "e_so_alarm_under_table": gangsters lighting intel on fire in Big Oil Day 1, etc
-- action_desc.variant == "cmf_so_press_alarm_wall": civilian in Bank Heist pressing panic button, etc
-- action_desc.variant == "cmf_so_press_alarm_table": tellers in Bank Heist pressing panic button, etc
-- action_desc.variant == "cmf_so_call_police": civilians calling the police
-- action_desc.variant == "arrest_call": cops saying they are calling the police
-- Stops panic buttons & intel burning
if action_desc.variant == "run" then return false end
return _actionRequest(self, action_desc)
end
Unlimited & instant intimidations/conversions (works on all units [shields/snipers/etc], 100% accuracy & no spread to your snipers) (Credits to RabidFubar at MPG for initial code, I added shields/snipers) -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
-- Unlimited [500 actually, but who cares] & instant intimidations
if not _upgradeValueIntimidate then _upgradeValueIntimidate = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "player" and upgrade == "convert_enemies" then
return true
elseif category == "player" and upgrade == "convert_enemies_max_minions" then
return 500
elseif category == "player" and upgrade == "convert_enemies_health_multiplier" then
return 0.25
elseif category == "player" and upgrade == "convert_enemies_damage_multiplier" then
return 4.5
else
return _upgradeValueIntimidate(self, category, upgrade, default)
end
end
if not _onIntimidated then _onIntimidated = CopLogicIdle.on_intimidated end
function CopLogicIdle.on_intimidated( data, amount, aggressor_unit )
CopLogicIdle._surrender( data, amount )
return true
end
CopLogicAttack.on_intimidated = CopLogicIdle.on_intimidated
CopLogicArrest.on_intimidated = CopLogicIdle.on_intimidated
CopLogicSniper.on_intimidated = CopLogicIdle.on_intimidated
-- Setup logic for shields to be able to be intimidated
CopBrain._logic_variants.shield.intimidated = CopLogicIntimidated
if not _onIIntimidated then _onIIntimidated = CopLogicIntimidated.on_intimidated end
function CopLogicIntimidated.on_intimidated( data, amount, aggressor_unit )
-- If shield we skip animations, go straight to conversion & spawn a new shield since it was destroyed during intimidation
if data.unit:base()._tweak_table == "shield" then
CopLogicIntimidated._do_tied( data, aggressor_unit )
CopInventory._chk_spawn_shield( data.unit:inventory(), nil )
else
_onIIntimidated(data, amount, aggressor_unit)
end
end
-- Setup a proper sniper-rifle for snipers (100% accuracy, no spread)
CopBrain._logic_variants.sniper = clone( CopBrain._logic_variants.security )
CopBrain._logic_variants.sniper.attack = CopLogicSniper
if not _onSniperEnter then _onSniperEnter = CopLogicSniper.enter end
function CopLogicSniper.enter( data, new_logic_name, enter_params )
if data.unit:brain()._logic_data and data.unit:brain()._logic_data.objective and data.unit:brain()._logic_data.objective.type == "follow" then
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ] = tweak_data.character.presets.weapon.sniper.m4
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].spread = 0
-- Get dat 100% accuracy
for distance=1, 3 do
for interpolate=1,2 do
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].FALLOFF[distance].acc[interpolate] = 1
end
end
end
_onSniperEnter(data, new_logic_name, enter_params)
end
On a side note, here are some other interesting intimidation upgrade values for those who like to experiment: intimidate_range_mul, passive_intimidate_range_mul, civ_intimidation_mul, intimidate_aura.
Unlimited & instant intimidations/conversions only for host (works on all units [shields/snipers/etc], 100% accuracy & no spread to your snipers) (Credits to RabidFubar at MPG for initial code, I added shields/snipers) -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
-- Unlimited [500 actually, but who cares] & instant intimidations
if not _upgradeValueIntimidate then _upgradeValueIntimidate = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "player" and upgrade == "convert_enemies" then
return true
elseif category == "player" and upgrade == "convert_enemies_max_minions" then
return 500
elseif category == "player" and upgrade == "convert_enemies_health_multiplier" then
return 0.25
elseif category == "player" and upgrade == "convert_enemies_damage_multiplier" then
return 4.5
else
return _upgradeValueIntimidate(self, category, upgrade, default)
end
end
if not _onIntimidated then _onIntimidated = CopLogicIdle.on_intimidated end
function CopLogicIdle.on_intimidated( data, amount, aggressor_unit )
if aggressor_unit == managers.player:player_unit() then
CopLogicIdle._surrender( data, amount )
return true
else
return _onIntimidated(data, amount, aggressor_unit)
end
end
CopLogicAttack.on_intimidated = CopLogicIdle.on_intimidated
CopLogicArrest.on_intimidated = CopLogicIdle.on_intimidated
CopLogicSniper.on_intimidated = CopLogicIdle.on_intimidated
-- Setup logic for shields to be able to be intimidated
CopBrain._logic_variants.shield.intimidated = CopLogicIntimidated
if not _onIIntimidated then _onIIntimidated = CopLogicIntimidated.on_intimidated end
function CopLogicIntimidated.on_intimidated( data, amount, aggressor_unit )
-- If shield we skip animations, go straight to conversion & spawn a new shield since it was destroyed during intimidation
if data.unit:base()._tweak_table == "shield" then
CopLogicIntimidated._do_tied( data, aggressor_unit )
CopInventory._chk_spawn_shield( data.unit:inventory(), nil )
else
_onIIntimidated(data, amount, aggressor_unit)
end
end
-- Setup a proper sniper-rifle for snipers (100% accuracy, no spread)
CopBrain._logic_variants.sniper = clone( CopBrain._logic_variants.security )
CopBrain._logic_variants.sniper.attack = CopLogicSniper
if not _onSniperEnter then _onSniperEnter = CopLogicSniper.enter end
function CopLogicSniper.enter( data, new_logic_name, enter_params )
if data.unit:brain()._logic_data and data.unit:brain()._logic_data.objective and data.unit:brain()._logic_data.objective.type == "follow" then
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ] = tweak_data.character.presets.weapon.sniper.m4
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].spread = 0
-- Get dat 100% accuracy
for distance=1, 3 do
for interpolate=1,2 do
data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].FALLOFF[distance].acc[interpolate] = 1
end
end
end
_onSniperEnter(data, new_logic_name, enter_params)
end
No cash penalty for killing civillians (for the homicidal maniac inside all of us) (Credits to mikethemak at UC):
Code:
-- No cash penalty for killing civillians
function MoneyManager.get_civilian_deduction() return 0 end
function MoneyManager.civilian_killed() return end
Kill all AI's currently on the map:
Code:
function nukeunit(pawn)
local col_ray = { }
col_ray.ray = Vector3(1, 0, 0)
col_ray.position = pawn.unit:position()
local action_data = {}
action_data.variant = "explosion"
action_data.damage = 10
action_data.attacker_unit = managers.player:player_unit()
action_dat*****l_ray = col_ray
pawn.unit:character_damage():damage_explosion(action_data)
end
for u_key,u_data in pairs(managers.enemy:all_civilians()) do
nukeunit(u_data)
end
for u_key,u_data in pairs(managers.enemy:all_enemies()) do
u_data.char_tweak.has_alarm_pager = nil
nukeunit(u_data)
end
Unlimited doctor bag uses (Credits to mikethemak at UC):
Code:
-- Unlimited doctor bag uses
function DoctorBagBase:_take( unit )
unit:character_damage():recover_health() -- replenish()
return 0
end
Fast drilling (I take no credit):
Code:
function TimerGui:_set_jamming_values() return end
function TimerGui:start( timer )
timer = 0.01
if self._jammed then
self:_set_jammed( false )
return
end
if not self._powered then
self:_set_powered( true )
return
end
if self._started then
return
end
self:_start( timer )
if managers.network:session() then
managers.network:session():send_to_peers_synched( "start_timer_gui", self._unit, timer )
end
end
Secure bags of loot during a mission (Credits to RabidFubar at MPG):
Code:
function secure(name)
managers.loot:secure( name, managers.money:get_bag_value( name ) )
end
secure("money") -- (Cash)
secure("gold")
secure("diamonds")
secure("coke")
secure("meth")
secure("weapons")
Small loot value multiplier (extra jewelry cash value in jewelry store, deposit boxes in bank heist, etc) (concept credits to mikethemak at UC) -- fully compatible with any existing upgrade_value modifications you have (weapon damage, life, armor, etc):
Code:
-- Small loot value multiplier (extra jewelry cash value in jewelry store, deposit boxes in bank heist, etc)
if not _uvSmallLoot then _uvSmallLoot = PlayerManager.upgrade_value end
function PlayerManager:upgrade_value( category, upgrade, default )
if category == "player" and upgrade == "small_loot_multiplier" then
return 10
else
return _uvSmallLoot(self, category, upgrade, default)
end
end
if not _uvlSmallLoot then _uvlSmallLoot = PlayerManager.upgrade_value_by_level end
function PlayerManager:upgrade_value_by_level( category, upgrade, level, default )
if category == "player" and upgrade == "small_loot_multiplier" then
return 10
else
return _uvlSmallLoot(self, category, upgrade, level, default)
end
end
Add preset jobs (run this while on main menu, then enter crime.net):
Code:
-- Spawning Jobs
-- job_id: "branchbank_cash_prof", etc
-- difficulty: "easy" *Easy*, "normal" *Normal*, "hard" *Hard*, "overkill" *Very Hard*, "overkill_145" *Overkill*
function add_job(job_id, difficulty)
local difficulty_id = tweak_data:difficulty_to_index( difficulty )
table.insert( managers.crimenet._presets, { job_id = job_id, difficulty_id = difficulty_id, difficulty = difficulty, chance = 1 } )
managers.crimenet._MAX_ACTIVE_JOBS = managers.crimenet._MAX_ACTIVE_JOBS + 1
end
-- _NEW_JOB_MIN_TIME/_NEW_JOB_MAX_TIME are a better alternative to managers.crimenet._debug_mass_spawning
managers.crimenet._NEW_JOB_MIN_TIME = 0
managers.crimenet._NEW_JOB_MAX_TIME = 0
managers.crimenet._presets = { }
managers.crimenet._active_jobs = { }
managers.crimenet._MAX_ACTIVE_JOBS = 0
add_job("welcome_to_the_jungle_prof", "overkill_145")
add_job("framing_frame", "overkill_145")
add_job("branchbank_prof", "overkill_145")
add_job("ukrainian_job_prof", "overkill_145")
add_job("watchdogs", "overkill_145")
add_job("alex", "overkill_145")
add_job("firestarter", "overkill_145")
add_job("jewelry_store", "overkill_145")
add_job("four_stores", "overkill_145")
add_job("nightclub", "overkill_145")
add_job("mallcrasher", "overkill_145")
add_job("family", "overkill_145")
Code:
"welcome_to_the_jungle_prof", -- (Big Oil)
"framing_frame", "framing_frame_prof",
"watchdogs", "watchdogs_prof",
"alex", "alex_prof", -- (Rats)
"firestarter", "firestarter_prof",
"ukrainian_job_prof",
"jewelry_store",
"four_stores",
"nightclub",
"mallcrasher",
"branchbank_deposit", "branchbank_cash", "branchbank_gold_prof", "branchbank_prof".
"family" -- (Diamond Heist)
If you use any job_id that isn't listed here, you will have issues on multiplayer (like if you try to do "welcome_to_the_jungle" (not pro job), the mission isn't meant to be played without the pro flag set).
Select missions to add with a menu:
http://www.*************.me/forum/pa...-missions.html
Alternative to spawning preset jobs (works only with Update 10+, this allows you to purchase any job for free) (Credits to v00d00 at UC):
Code:
-- Free job purchase
function MoneyManager:get_cost_of_premium_contract(job_id, difficulty) return 0 end
Free assets (you must activate the script after everyone has loaded to the room where you have the option to purchase assets) (Credits to mikethemak at UC):
Code:
-- Free assets
function MoneyManager:on_buy_mission_asset( asset_id ) return 0 end
function MoneyManager:get_mission_asset_cost() return 0 end
function MoneyManager:get_mission_asset_cost_by_stars( stars ) return 0 end
function MoneyManager:get_mission_asset_cost_by_id( id ) return 0 end
Allow restart on pro jobs:
Code:
-- Allow restart on pro jobs
if not _oldIsProfessional then _oldIsProfessional = JobManager.is_current_job_professional end
if not _newIsProfessional then _newIsProfessional = function(self) return false end end
if not _lobbyStateEnter then _lobbyStateEnter = IngameLobbyMenuState.at_enter end
function IngameLobbyMenuState:at_enter()
JobManager.is_current_job_professional = _newIsProfessional
_lobbyStateEnter(self)
JobManager.is_current_job_professional = _oldIsProfessional
end
if not _lobbyContinue then _lobbyContinue = GameOverState.continue end
function GameOverState:continue()
JobManager.is_current_job_professional = _newIsProfessional
_lobbyContinue(self)
JobManager.is_current_job_professional = _oldIsProfessional
end
if not _lobbyShutDownNetwork then _lobbyShutDownNetwork = GameOverState._shut_down_network end
function GameOverState:_shut_down_network( ... )
JobManager.is_current_job_professional = _newIsProfessional
_lobbyShutDownNetwork(self, ...)
JobManager.is_current_job_professional = _oldIsProfessional
end
if not _lobbyLoadStartMenu then _lobbyLoadStartMenu = GameOverState._load_start_menu end
function GameOverState:_load_start_menu( ... )
JobManager.is_current_job_professional = _newIsProfessional
_lobbyLoadStartMenu(self, ...)
JobManager.is_current_job_professional = _oldIsProfessional
end
if not _lobbySetBtnText then _lobbySetBtnText = GameOverState._set_continue_button_text end
function GameOverState:_set_continue_button_text()
JobManager.is_current_job_professional = _newIsProfessional
_lobbySetBtnText(self)
JobManager.is_current_job_professional = _oldIsProfessional
end
function MenuCallbackHandler:singleplayer_restart() return true end
Force win:
Code:
if managers.platform:presence() == "Playing" then
local num_winners = managers.network:game():amount_of_alive_players()
managers.network:session():send_to_peers( "mission_ended", true, num_winners )
game_state_machine:change_state_by_name( "victoryscreen", { num_winners = num_winners, personal_win = true } )
end
Force loss:
Code:
if managers.platform:presence() == "Playing" then
managers.network:session():send_to_peers( "mission_ended", false, 0 )
game_state_machine:change_state_by_name( "gameoverscreen" )
end
Force specific escape:
Code:
-- Force specific escape ("escape_cafe", "escape_park", "escape_street", "escape_overpass", "escape_garage", "escape_overpass_night")
if not _setInterrupt then _setInterrupt = JobManager.set_next_interupt_stage end
function JobManager:set_next_interupt_stage( interrupt )
_setInterrupt(self, "escape_garage")
end
Force no escape (unlocks Expert Driver asset on any mission except Rats, run this on the Job screen, should work even if not hosting):
Code:
function unlock_asset( asset_id )
local asset = managers.assets:_get_asset_by_id( asset_id )
if asset then
if Network:is_server() and not managers.assets:get_asset_triggered_by_id( asset_id ) then
managers.assets:server_unlock_asset( asset_id )
elseif not managers.assets:get_asset_unlocked_by_id( asset_id ) then
managers.network:session():send_to_host( "server_unlock_asset", asset_id )
end
asset.show = true
else
table.insert( managers.assets._global.assets, { id=asset_id, unlocked=true, show=true, can_unlock=false } )
end
managers.assets:init_finalize()
managers.menu_component:create_asset_mission_briefing_gui()
end
unlock_asset("safe_escape")
Edit (8/18/13): Added weapon damage, alternative to god mode (2x health), and movement speed increase (thanks to EpicYeti).
Edit (8/19/13): Fixed weapon damage, added 2x armor also.
Edit (8/19/13): Added infinite stamina, long throw distance, instant interaction/deploy (no need to even have ECM jammer / C4 in your inventory). Also added gun mods unlocked & masks unlocked.
Edit (8/20/13): Fixed upgrade_value if statements. Also changed default throwing distance to 2.0 instead of 10.0, to help prevent you from chucking your cash too far.
Edit (8/20/13): Removed code to disable cheats (because honestly.. are you going to disable that shit?). Added code to highlight all enemies on map while in stealth mode (without the use of a camera). Updated alarm prevention code with GroupAIStateBase:set_whisper_mode hook. Added infinite pagers to the bottom. Added code for setting preset jobs. Updated the infinite equipment (not host) code, hopefully it works now.
Edit (8/21/13): Added extra carry mods in addition to throwing distance: no movement speed penalty, allows jumping/running.
Edit (8/21/13): Updated the enemy highlighting code so that it re-highlights enemies every ~10 seconds.
Edit (8/23/13): Updated the enemy highlighting to only attempt highlighting when in-game. Otherwise the code errors and doesn't finish the rest of the script. Added sentry gun infinite ammo / no recoil (left the weapon spread in because sentries have a tough time killing if they shoot in one spot) / god mode.
Edit (8/23/13): Updated job spawning, found out there are certain jobs you shouldn't try to play (Big Oil needs to be a pro job, jewelry store can't be pro, etc).
Edit (8/24/13): Updated stealth code to disallow all NPC actions except death (no more intel burning in Big Oil mission, etc). Added 'allow restart on pro jobs'. Added force win. Added force loss.
Edit (8/26/13): Fixed stealth code to work on certain missions (Nightclub was reported case).
Edit (8/27/13): Updated infinite stamina.
Edit (8/28/13): Added 'Allow more enemies to be converted (after they are intimidated)'. Added fast drilling.
Edit (8/28/13): Added demi-stealth mode. Fixed regular stealth mode code as well. I fucked up on the CopMovement:action_request intercept originally.
Edit (8/30/13): Updated job spawning to work with Update 10 (added chance parameter).
Edit (8/30/13): Updated the 'mark enemies' feature to include cameras (should only be used in Update 10+).
Edit (9/1/13): Added 'Free job purchase' script. Updated instant interaction to use 0.1 seconds for pagers. Added 'Instant mask on'.
Edit (9/2/13): Added 'other upgrades (eg. Joker)'. Added 'remove cooldown between picking up bags'.
Edit (9/2/13): Added 'Instant pickup for chemicals from Rats Day 1'. Added 'Instant pickup for server from Firestarter Day 2'.
Edit (9/3/13): Updated highlighting code to highlight civilians a light color (pinkish). Also updated it to sync the 'camera-vision' to other network peers.
Edit (9/4/13): Added 'Unlimited & instant intimidations/conversions'.
Edit (9/5/13): Updated highlighting code to not highlight converted / surrendered enemies.
Edit (9/7/13): Fixed highlighting code to work in multiplayer.
Edit (9/8/13): Added '100% Dodge' and '100% Armor piercing'.
Edit (9/9/13): Added 'Unlimited & instant intimidations/conversions
only for host'.
Edit (9/10/13): Updated highlighting code with coloring, credits to Yanrishatum at UC, it is visible only to the user, Civilians = Green, Taser = Blue, Shield = Orange, Tank = Yellow, Sniper = Pink, Cop/Other = Purple. Added 'Free assets', 'No cash penalty for killing civillians', and 'Unlimited doctor bag uses', credits to mikethemak at UC. Also added 'Masks, materials, textures, colors, weapon mods'.
Edit (9/10/13): Added 'Force specific escape'. Also added 'No fall damage', 'Infinite ECM jammer battery', 'Instant armor regeneration', and 'Unlimited messiah charges', credits to mikethemak at UC. Added 'Small loot value multiplier', concept credits to mikethemak at UC.
Edit (9/11/13): Fixed 'Small loot value multiplier'.
Edit (9/14/13): Added 'Diamond Heist (Pro)' to job spawning code. Added 'Increased interaction distance (20x)'.
Edit (9/15/13): Fixed 'Infinite ammo clip' and 'Infinite saw' (they weren't being hooked properly..). Added 'Infinite ammo' (different from infinite ammo clip). Added 'No hit disorientation'. Added 'No flashbangs'. Updated highlighting code so that multiplayer peers' highlighting won't overwrite your own (so your colors don't get replaced by the standard red). Removed 'Diamond Heist (Pro)', left 'Diamond Heist'. The pro version isn't meant to be played & will cause problems when playing multiplayer with that job.
Edit (9/15/13): Updated 'Increased interaction distance' so that it doesn't work on cameras & C4 charges. Updated 'Infinite ammo' to reset ammo on reload & also when ammo runs out, just in case you activate it late.
Edit (9/15/13): Added 'Secure bags of loot during a mission', credits to RabidFubar at MPG. Fixed 'Infinite ammo' (sorry..).
Edit (9/17/13): Added 'Force no escape'. Added every unit type except Shield to the instant intimidations (credits to RabidFubar at MPG).
Edit (9/17/13): Added 'Dat slowmo (world & player)' and 'Dat slowmo (world only)'.
Edit (9/18/13): Fixed PlayerManager:has_category_upgrade so that it doesn't give you the 'Harmless To Civilians' perk. Updated intimidation code to allow SHIELDS & SNIPERS

Edit (9/18/13): Updated slowmo to toggle.
Edit (9/19/13): Fixed 'Infinite ammo' to allow NPCs to reload properly. Updated interact distance to not affect cameras, shaped charges, body bags, burn money & place camera [Firestarters job], or trip mines. Added 'Interact through walls'.
Edit (9/21/13): Updated highlighting code to toggle. Added 'Don't taze me bro'. Added 'Warp to crosshair'. Added 'Warp to bullet'.
Edit (9/23/13): Fixed 'Don't taze me bro' to prevent occasional crashes. Updated 'Interact through walls' to work at any angle (eg. keyboard in Framing Frame Day 3). Updated slowmo to work on multiplayer (sends slowmo effect to peers now). Updated 'Warp to crosshair' to 'Penetrative warp to crosshair'.
Edit (9/29/13): Added 'Kill all AI's currently on the map'. Fixed 'Interact through walls' to work at any angle (again). Added 'Set FOV'. Added 'Resist arrest'.