Advertisement
Guest User

Payday2 Lua

a guest
Sep 29th, 2013
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.13 KB | None | 0 0
  1. -- Infinite interact distance (except on cameras, shaped charges, body bags, burn money & place camera [Firestarters job], or trip mines)
  2. function BaseInteractionExt:interact_distance()
  3. if self.tweak_data == "access_camera"
  4. or self.tweak_data == "shaped_sharge"
  5. or tostring(self._unit:name()) == "Idstring(@ID14f05c3d9ebb44b6@)"
  6. or self.tweak_data == "burning_money"
  7. or self.tweak_data == "stn_int_place_camera"
  8. or self.tweak_data == "trip_mine" then
  9. return self._tweak_data.interact_distance or tweak_data.interaction.INTERACT_DISTANCE
  10. end
  11. return 20000 -- default is 200
  12. end
  13.  
  14. -- Infinite equipment
  15. function PlayerManager:remove_equipment_possession( peer_id, equipment ) end
  16.  
  17. --Force no escape
  18. function unlock_asset( asset_id )
  19. local asset = managers.assets:_get_asset_by_id( asset_id )
  20. if asset then
  21. if Network:is_server() and not managers.assets:get_asset_triggered_by_id( asset_id ) then
  22. managers.assets:server_unlock_asset( asset_id )
  23. elseif not managers.assets:get_asset_unlocked_by_id( asset_id ) then
  24. managers.network:session():send_to_host( "server_unlock_asset", asset_id )
  25. end
  26. asset.show = true
  27. else
  28. table.insert( managers.assets._global.assets, { id=asset_id, unlocked=true, show=true, can_unlock=false } )
  29. end
  30. managers.assets:init_finalize()
  31. managers.menu_component:create_asset_mission_briefing_gui()
  32. end
  33. unlock_asset("safe_escape")
  34.  
  35. -- Demi-God Mode
  36. if not _upgradeValue then _upgradeValue = PlayerManager.upgrade_value end
  37. function PlayerManager:upgrade_value( category, upgrade, default )
  38. if category == "player" and upgrade == "health_multiplier" then
  39. return 2
  40. elseif category == "player" and upgrade == "armor_multiplier" then
  41. return 2
  42. elseif category == "player" and upgrade == "passive_damage_multiplier" then
  43. return 2
  44. else
  45. return _upgradeValue(self, category, upgrade, default)
  46. end
  47. end
  48. managers.player:player_unit():character_damage():replenish()
  49.  
  50. -- Weapon spread
  51. NewRaycastWeaponBase._get_spread = function(self) return 0 end
  52.  
  53. -- Instant mask on
  54. tweak_data.player.put_on_mask_time = 0.1
  55.  
  56. -- Remove cooldown between picking up bags
  57. function PlayerManager:carry_blocked_by_cooldown() return false end
  58.  
  59. -- No cash penalty for killing civillians
  60. function MoneyManager.get_civilian_deduction() return 0 end
  61. function MoneyManager.civilian_killed() return end
  62.  
  63. -- Super jump (when running, you jump 1.5x high)
  64. function PlayerStandard:_perform_jump(jump_vec)
  65. local v = math.UP * 700
  66. if self._running then
  67. v = math.UP * 4000 * 1.5
  68. end
  69. self._unit:mover():set_velocity( v )
  70. end
  71.  
  72. -- Sentry God Mode
  73. function SentryGunDamage:damage_bullet( attack_data ) end
  74. function SentryGunWeapon:fire( blanks, expend_ammo )
  75. local fire_obj = self._effect_align[ self._interleaving_fire ]
  76. local from_pos = fire_obj:position()
  77. local direction = fire_obj:rotation():y()
  78. mvector3.spread( direction, tweak_data.weapon[ self._name_id ].SPREAD * self._spread_mul )
  79. World:effect_manager():spawn( self._muzzle_effect_table[ self._interleaving_fire ] ) -- , normal = col_ray.normal } )
  80. if self._use_shell_ejection_effect then
  81. World:effect_manager():spawn( self._shell_ejection_effect_table )
  82. end
  83. local ray_res = self:_fire_raycast( from_pos, direction, blanks )
  84. if self._alert_events and ray_res.rays then
  85. RaycastWeaponBase._check_alert( self, ray_res.rays, from_pos, direction, self._unit )
  86. end
  87. return ray_res
  88. end
  89.  
  90. -- No Weapon Recoil
  91. NewRaycastWeaponBase.recoil_multiplier = function(self) return 0 end
  92.  
  93. -- Unlimited messiah charges (self-revive)
  94. function PlayerDamage:consume_messiah_charge() return true
  95. end
  96. function PlayerDamage:got_messiah_charges() return true
  97. end
  98.  
  99. -- Carry mods (throwing distance, movement speed, jumping, running)
  100. local car_arr = { 'being', 'mega_heavy', 'heavy', 'medium', 'light', 'coke_light' }
  101. for i, name in ipairs(car_arr) do
  102. tweak_data.carry.types[ name ].can_run = true
  103. tweak_data.carry.types[ name ].jump_modifier = 10
  104. end
  105.  
  106. -- Allow more enemies to be converted (after they are intimidated)
  107. function PlayerManager:chk_minion_limit_reached() return false end
  108.  
  109. -- Player mode
  110. PlayerStandard._get_walk_headbob = function(self) return 0 end
  111. PlayerStandard._can_stand = function(self) return true end
  112. PlayerManager.remove_equipment = function(self, equipment_id) end
  113. PlayerManager.selected_equipment_deploy_timer = function(self) return 0.1 end
  114. PlayerManager.chk_minion_limit_reached = function(self) return false end
  115. PlayerManager.spread_multiplier = function(self) return 0 end
  116. PlayerManager.spread_multiplier = function(self) return 0 end
  117. PlayerMovement.is_stamina_drained = function(self) return false end
  118. PlayerStandard._can_run_directional = function(self) return true end
  119. BaseInteractionExt._get_timer = function(self) return 0.7 end
  120. BaseInteractionExt.can_interact = function(self, player) return true end
  121. function BaseInteractionExt:_has_required_upgrade() return true end
  122. function BaseInteractionExt:_has_required_deployable() return true end
  123. function BaseInteractionExt:can_interact(player) return true end
  124. function PlayerManager:has_category_upgrade( category, upgrade)
  125. if category == "player" and (upgrade == "civ_harmless_melee" or upgrade == "civ_harmless_bullets") then return false end
  126. return true -- Other upgrades (eg. Joker)
  127. end
  128.  
  129. --Interact
  130. BaseInteractionExt._has_required_upgrade = function(self) return true end
  131. BaseInteractionExt._has_required_deployable = function(self) return true end
  132. BaseInteractionExt.can_interact = function(self, player) return true end
  133.  
  134. -- Unlimited [500 actually, but who cares] & instant intimidations
  135. if not _upgradeValueIntimidate then _upgradeValueIntimidate = PlayerManager.upgrade_value end
  136. function PlayerManager:upgrade_value( category, upgrade, default )
  137. if category == "player" and upgrade == "convert_enemies" then
  138. return true
  139. elseif category == "player" and upgrade == "convert_enemies_max_minions" then
  140. return 500
  141. elseif category == "player" and upgrade == "convert_enemies_health_multiplier" then
  142. return 0.25
  143. elseif category == "player" and upgrade == "convert_enemies_damage_multiplier" then
  144. return 4.5
  145. else
  146. return _upgradeValueIntimidate(self, category, upgrade, default)
  147. end
  148. end
  149. if not _onIntimidated then _onIntimidated = CopLogicIdle.on_intimidated end
  150. function CopLogicIdle.on_intimidated( data, amount, aggressor_unit )
  151. CopLogicIdle._surrender( data, amount )
  152. return true
  153. end
  154. CopLogicAttack.on_intimidated = CopLogicIdle.on_intimidated
  155. CopLogicArrest.on_intimidated = CopLogicIdle.on_intimidated
  156. CopLogicSniper.on_intimidated = CopLogicIdle.on_intimidated
  157.  
  158. -- Setup logic for shields to be able to be intimidated
  159. CopBrain._logic_variants.shield.intimidated = CopLogicIntimidated
  160. if not _onIIntimidated then _onIIntimidated = CopLogicIntimidated.on_intimidated end
  161. function CopLogicIntimidated.on_intimidated( data, amount, aggressor_unit )
  162. -- If shield we skip animations, go straight to conversion & spawn a new shield since it was destroyed during intimidation
  163. if data.unit:base()._tweak_table == "shield" then
  164. CopLogicIntimidated._do_tied( data, aggressor_unit )
  165. CopInventory._chk_spawn_shield( data.unit:inventory(), nil )
  166. else
  167. _onIIntimidated(data, amount, aggressor_unit)
  168. end
  169. end
  170.  
  171. -- Setup a proper sniper-rifle for snipers (100% accuracy, no spread)
  172. CopBrain._logic_variants.sniper = clone( CopBrain._logic_variants.security )
  173. CopBrain._logic_variants.sniper.attack = CopLogicSniper
  174. if not _onSniperEnter then _onSniperEnter = CopLogicSniper.enter end
  175. function CopLogicSniper.enter( data, new_logic_name, enter_params )
  176. if data.unit:brain()._logic_data and data.unit:brain()._logic_data.objective and data.unit:brain()._logic_data.objective.type == "follow" then
  177. data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ] = tweak_data.character.presets.weapon.sniper.m4
  178. data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].spread = 0
  179. -- Get dat 100% accuracy
  180. for distance=1, 3 do
  181. for interpolate=1,2 do
  182. data.char_tweak.weapon[ data.unit:inventory():equipped_unit():base():weapon_tweak_data().usage ].FALLOFF[distance].acc[interpolate] = 1
  183. end
  184. end
  185. end
  186. _onSniperEnter(data, new_logic_name, enter_params)
  187. end
  188.  
  189. -- No fall damage (useless if you have god mode on)
  190. function PlayerDamage:damage_fall( data ) end
  191.  
  192. -- Infinite stamina
  193. function PlayerMovement:_change_stamina( value ) end
  194. function PlayerMovement:is_stamina_drained() return false end
  195. function PlayerStandard:_can_run_directional() return true end
  196.  
  197. -- debug menu
  198. if managers.menu then
  199. managers.menu:set_debug_menu_enabled(true)
  200. end
  201.  
  202. -- Allow restart on pro jobs
  203. if not _oldIsProfessional then _oldIsProfessional = JobManager.is_current_job_professional end
  204. if not _newIsProfessional then _newIsProfessional = function(self) return false end end
  205. if not _lobbyStateEnter then _lobbyStateEnter = IngameLobbyMenuState.at_enter end
  206. function IngameLobbyMenuState:at_enter()
  207. JobManager.is_current_job_professional = _newIsProfessional
  208. _lobbyStateEnter(self)
  209. JobManager.is_current_job_professional = _oldIsProfessional
  210. end
  211. if not _lobbyContinue then _lobbyContinue = GameOverState.continue end
  212. function GameOverState:continue()
  213. JobManager.is_current_job_professional = _newIsProfessional
  214. _lobbyContinue(self)
  215. JobManager.is_current_job_professional = _oldIsProfessional
  216. end
  217. if not _lobbyShutDownNetwork then _lobbyShutDownNetwork = GameOverState._shut_down_network end
  218. function GameOverState:_shut_down_network( ... )
  219. JobManager.is_current_job_professional = _newIsProfessional
  220. _lobbyShutDownNetwork(self, ...)
  221. JobManager.is_current_job_professional = _oldIsProfessional
  222. end
  223. if not _lobbyLoadStartMenu then _lobbyLoadStartMenu = GameOverState._load_start_menu end
  224. function GameOverState:_load_start_menu( ... )
  225. JobManager.is_current_job_professional = _newIsProfessional
  226. _lobbyLoadStartMenu(self, ...)
  227. JobManager.is_current_job_professional = _oldIsProfessional
  228. end
  229. if not _lobbySetBtnText then _lobbySetBtnText = GameOverState._set_continue_button_text end
  230. function GameOverState:_set_continue_button_text()
  231. JobManager.is_current_job_professional = _newIsProfessional
  232. _lobbySetBtnText(self)
  233. JobManager.is_current_job_professional = _oldIsProfessional
  234. end
  235. function MenuCallbackHandler:singleplayer_restart() return true end
  236.  
  237. -- Fast Drilling
  238. function TimerGui:_set_jamming_values() return end
  239. function TimerGui:start( timer )
  240. timer = 0.1
  241. if self._jammed then
  242. self:_set_jammed( false )
  243. return
  244. end
  245.  
  246. if not self._powered then
  247. self:_set_powered( true )
  248. return
  249. end
  250.  
  251. if self._started then
  252. return
  253. end
  254.  
  255. self:_start( timer )
  256. if managers.network:session() then
  257. managers.network:session():send_to_peers_synched( "start_timer_gui", self._unit, timer )
  258. end
  259. end
  260.  
  261. -- Allow infinite pagers
  262. function GroupAIStateBase:on_successful_alarm_pager_bluff() end
  263.  
  264. -- No flashbangs
  265. function CoreEnvironmentControllerManager:set_flashbang( flashbang_pos, line_of_sight, travel_dis, linear_dis ) end
  266.  
  267. -- Don't taze me bro
  268. function PlayerTased:enter( state_data, enter_data )
  269. PlayerTased.super.enter( self, state_data, enter_data )
  270. self._next_shock = Application:time() + 10
  271. self._taser_value = 1
  272. self._recover_delayed_clbk = "PlayerTased_recover_delayed_clbk"
  273. managers.enemy:add_delayed_clbk( self._recover_delayed_clbk, callback( self, self, "clbk_exit_to_std" ), Application:time() )
  274. end
  275.  
  276. -- No hit disorientation
  277. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_front")
  278. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_back")
  279. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_right")
  280. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_left")
  281. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_up")
  282. Interception.Backup(CoreEnvironmentControllerManager, "hit_feedback_down")
  283. function CoreEnvironmentControllerManager:hit_feedback_front() end
  284. function CoreEnvironmentControllerManager:hit_feedback_back() end
  285. function CoreEnvironmentControllerManager:hit_feedback_right() end
  286. function CoreEnvironmentControllerManager:hit_feedback_left() end
  287. function CoreEnvironmentControllerManager:hit_feedback_up() end
  288. function CoreEnvironmentControllerManager:hit_feedback_down() end
  289.  
  290. -- Infinite reload
  291. if not _onReload then _onReload = RaycastWeaponBase.on_reload end
  292. function RaycastWeaponBase:on_reload()
  293. if managers.player:player_unit() == self._setup.user_unit then
  294. self.set_ammo(self, 1.0)
  295. else
  296. _onReload(self)
  297. end
  298. end
  299.  
  300. if not _fireWep then _fireWep = NewRaycastWeaponBase.fire end
  301. function NewRaycastWeaponBase:fire( from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
  302. local result = _fireWep( self, from_pos, direction, dmg_mul, shoot_player, spread_mul, autohit_mul, suppr_mul, target_unit )
  303.  
  304. if managers.player:player_unit() == self._setup.user_unit and self:get_ammo_total() == 0 then
  305. self.set_ammo(self, 1.0)
  306. end
  307.  
  308. return result
  309. end
  310.  
  311. -- Interact through walls
  312. function ObjectInteractionManager:interact( player )
  313. if( alive( self._active_object ) ) then
  314. local interacted,timer = self._active_object:interaction():interact_start( player )
  315. if timer then
  316. self._active_object_locked_data = true
  317. end
  318. return interacted or interacted == nil or false, timer, self._active_object
  319. end
  320. return false
  321. end
  322. local mvec1 = Vector3()
  323. function ObjectInteractionManager:_update_targeted( player_pos, player_unit )
  324. local mvec3_dis = mvector3.distance
  325. --clean out far away objects
  326. if( #self._close_objects > 0 ) then
  327. for k, v in pairs( self._close_objects ) do
  328. if( alive( v ) and v:interaction():active() ) then
  329. if mvec3_dis( player_pos, v:interaction():interact_position() ) > v:interaction():interact_distance() then
  330. table.remove( self._close_objects, k )
  331. end
  332. else
  333. table.remove( self._close_objects, k )
  334. end
  335. end
  336. end
  337.  
  338. --check for new objects
  339. for i = 1, self._close_freq, 1 do
  340. if( self._close_index >= self._interactive_count ) then
  341. self._close_index = 1
  342. else
  343. self._close_index = self._close_index + 1
  344. end
  345.  
  346. local obj = self._interactive_objects[ self._close_index ]
  347. if( alive(obj) and obj:interaction():active() and not self:_in_close_list( obj ) ) then
  348. if( mvec3_dis(player_pos, obj:interaction():interact_position()) <= obj:interaction():interact_distance() ) then
  349. table.insert( self._close_objects, obj )
  350. end
  351. end
  352. end
  353.  
  354. -- local locked = self._active_object_locked_data and alive( self._active_object )
  355. local locked = false
  356. if self._active_object_locked_data then
  357. if not alive( self._active_object ) or not self._active_object:interaction():active() then
  358. self._active_object_locked_data = nil
  359. else
  360. -- print( "dist", mvec3_dis(player_pos, self._active_object:interaction():interact_position()) )
  361. -- locked = ( mvec3_dis(player_pos, self._active_object:interaction():interact_position()) - self._active_object_locked_data.distance ) < 20
  362. locked = ( mvec3_dis(player_pos, self._active_object:interaction():interact_position()) <= self._active_object:interaction():interact_distance() )
  363. end
  364. end
  365.  
  366. if locked then
  367. return
  368. end
  369.  
  370. local last_active = self._active_object
  371. local blocked = player_unit:movement():object_interaction_blocked()
  372. if( #self._close_objects > 0 ) and not blocked then
  373. --find the one the player is looking at
  374. local active_obj = nil
  375. local current_dot = 0.9
  376.  
  377. local player_fwd = player_unit:camera():forward()
  378. local camera_pos = player_unit:camera():position()
  379. for k, v in pairs( self._close_objects ) do
  380. if( alive( v ) ) then
  381. mvector3.set( mvec1, v:interaction():interact_position() )
  382. mvector3.subtract( mvec1, camera_pos )
  383. mvector3.normalize( mvec1 )
  384. local dot = mvector3.dot( player_fwd, mvec1 )
  385. if( dot > current_dot ) then
  386. local interact_axis = v:interaction():interact_axis()
  387. -- Check if we only are allowed to access it from one side
  388. if not interact_axis or mvector3.dot( mvec1, interact_axis ) < 0.0 then
  389. current_dot = dot
  390. active_obj = v
  391. end
  392. end
  393. end
  394. end
  395.  
  396. if( active_obj and self._active_object ~= active_obj ) then
  397. if alive( self._active_object ) then
  398. self._active_object:interaction():unselect()
  399. end
  400. if not active_obj:interaction():selected( player_unit ) then
  401. active_obj = nil
  402. end
  403. end
  404. self._active_object = active_obj
  405. else
  406. self._active_object = nil
  407. end
  408.  
  409. --unselect the last one
  410. if( alive( last_active ) ) then
  411. if( not self._active_object ) then
  412. self._active_object = nil
  413. last_active:interaction():unselect()
  414. end
  415. end
  416. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement