Code:
-- Free job purchase
function MoneyManager:get_cost_of_premium_contract(job_id, difficulty) return 0 end
-- 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_prof", "overkill_145")
add_job("branchbank_prof", "overkill_145")
add_job("ukrainian_job_prof", "overkill_145")
add_job("watchdogs_prof", "overkill_145")
add_job("alex_prof", "overkill_145")
add_job("firestarter_prof", "overkill_145")
add_job("nightclub_prof", "overkill_145")
-- 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
local player = managers.player:player_unit()
if managers.hud then
managers.hud:show_hint( { text = "Fap fap fap fap fap." } )
end
-- Long timer for defusing C4 on Rats Day 3
tweak_data.interaction.c4_diffusible.timer = 1000
-- Stops civs from reporting you
function CivilianLogicFlee.clbk_chk_call_the_police( ignore_this, data ) end
-- Prevents panic buttons
if not _actionRequest then _actionRequest = CopMovement.action_request end
function CopMovement:action_request( action_desc )
-- 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
return _actionRequest(self, action_desc)
end
NewRaycastWeaponBase.recoil_multiplier = function(self) return 0 end
NewRaycastWeaponBase.reload_speed_multiplier = function(self) return 3.5 end
NewRaycastWeaponBase._get_spread = function(self) return .2 end
PlayerManager.spread_multiplier = function(self) return .2 end
PlayerStandard._can_run_directional = function(self) return true end
PlayerStandard._can_stand = function(self) return true end
PlayerMovement.is_stamina_drained = function(self) return false end
function PlayerMovement:_change_stamina( value ) end
PlayerStandard._get_swap_speed_multiplier = function(self) return 6 end
function PlayerManager:carry_blocked_by_cooldown() return false end
PlayerManager.body_armor_movement_penalty = function(self) return 1 end
function PlayerManager:has_category_upgrade( category, upgrade) return true end
PlayerManager.chk_minion_limit_reached = function(self) return false end
-- MASTERRRRR INTIMIDATOR
if not _has_category_upgrade then _has_category_upgrade =
PlayerManager.has_category_upgrade end
function PlayerManager:has_category_upgrade( category, upgrade)
if category == "player" and upgrade == "convert_enemies" then
return true
elseif category == "player" and upgrade == "convert_enemies_max_minions" then
return 5
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 _has_category_upgrade(self, category, upgrade)
end
end
if not _on_intimidated then _on_intimidated = CopLogicIdle.on_intimidated end
function CopLogicIdle.on_intimidated( data, amount, aggressor_unit )
if not managers.groupai:state():is_enemy_special( data.unit ) and managers.groupai:state():police_hostage_count() < 1 and aggressor_unit:base().is_local_player then
CopLogicIdle._surrender( data, amount )
return true
end
return _on_intimidated( data, amount, aggressor_unit )
end
CopLogicAttack.on_intimidated = CopLogicIdle.on_intimidated
CopLogicArrest.on_intimidated = CopLogicIdle.on_intimidated
-- MASTERRRRRR INTIMIDATOR END
BaseInteractionExt._get_timer = function(self) return 0 end
BaseInteractionExt._has_required_upgrade = function(self) return true end
BaseInteractionExt._has_required_deployable = function(self) return true end
BaseInteractionExt.can_interact = function(self, player) 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
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
-- Instant deploy
PlayerManager.selected_equipment_deploy_timer = function(self) return 0.1 end
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
-- Perfect Pagers
function GroupAIStateBase:on_successful_alarm_pager_bluff() end
-- PLAYER BUFFS
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 5
elseif category == "player" and upgrade == "armor_multiplier" then
return 3
elseif category == "player" and upgrade == "passive_damage_multiplier" then
return 4
else
return _upgradeValue(self, category, upgrade, default)
end
end
managers.player:player_unit():character_damage():replenish()
-- 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 )
_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
end
-- Infinite cable ties
function PlayerManager:remove_special( name ) end
-- Infinite Equipment
if not _rmEquipment then
_rmEquipment = PlayerManager.remove_equipment
end
function PlayerManager:remove_equipment( equipment_id ) end
if not _rmSpecial then
_rmSpecial = PlayerManager.remove_special
end
function PlayerManager:remove_special( name ) end
-- INF equiptment Host/non-host below
PlayerManager.remove_equipment = function(self, equipment_id) end
function PlayerManager:clear_equipment() end
function PlayerManager:from_server_equipment_place_result( selected_index, unit ) end
function PlayerManager:remove_equipment_possession( peer_id, equipment ) end
function HUDManager:remove_special_equipment( equipment ) end
MoneyManager.get_civilian_deduction = function(self) return 0 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) return true end -- Other upgrades (eg. Joker)
function PlayerManager:carry_blocked_by_cooldown() return false end -- Remove cooldown between picking up bags
-- 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
putting jobs first also made it start working for me (thx random poster somewhere on here - so tired ;( )