lundi 24 mars 2014

StealthFixerV2 topic




Updated for the new Election Day stealth changes, it alters the game behaviour to the way things were prior to the introduction of deathwish (or as it should perhaps now be called, Payday 2: Classic)

  • Unlimited Bodybags

  • No pager on domination

  • Joker (Guard conversion) possible in stealth

  • No guard respawns

I gave it some rudimentary testing on Bank Heist and Framing Frame, works as expected. Only Joker and bodybagging works if you are a client, the remaining functionality requires that you are hosting the game.


It MUST be used as a PersistScript, the TestVar is StealthFixer.



PHP Code:







if not StealthFixer then
    
if not IntimitateInteractionExt or not GroupAIStateBase or not ElementSpawnEnemyDummy or not CopLogicIntimidated then
        
return
    
end
    StealthFixer 
= { firstCall true }
    if 
not managers.interaction or not managers.groupai then
        
return
    
end

    
--Unlimited bodybags
    old_interact_blocked 
old_interact_blocked or IntimitateInteractionExt._interact_blocked
    
function IntimitateInteractionExt:_interact_blockedplayer )
        if 
self.tweak_data == "hostage_convert" then
            
return not (managers.player:has_category_upgrade"player""convert_enemies" ) and not managers.player:chk_minion_limit_reached() )
        else
            return 
old_interact_blocked(selfplayer)
        
end
    end

    managers
.interaction._interact_blocked IntimitateInteractionExt._interact_blocked
    
    
--Joker enabled in stealth
    
function GroupAIStateBase:convert_hostage_to_criminalunitpeer_unit )
        
local player_unit peer_unit or managers.player:player_unit()
        if 
not aliveplayer_unit ) or not self._criminalsplayer_unit:key() ] then
            
return
        
end
        
if not aliveunit then
            
return
        
end
        
        local u_key 
unit:key()
        
local u_data self._policeu_key ]
        
        
local minions self._criminalsplayer_unit:key() ].minions or {}
        
self._criminalsplayer_unit:key() ].minions minions
        
        
        local max_minions 
0
        
if peer_unit then        -- client
            max_minions 
peer_unit:base():upgrade_value"player""convert_enemies_max_minions" ) or 0
        
else                                                    -- server
            max_minions 
managers.player:upgrade_value"player""convert_enemies_max_minions")
        
end
        
        
        Application
:debug"GroupAIStateBase:convert_hostage_to_criminal""Player"player_unit"Minions: "table.sizeminions ).."/"..max_minions )
        
        if 
alive(self._converted_policeu_key ]) or table.sizeminions ) >= max_minions then
            local member 
managers.network:game():member_from_unitplayer_unit )
            if 
member then
                
if member == Global.local_member then
                    managers
.hint:show_hint"convert_enemy_failed" )
                else
                    
managers.network:session():send_to_peermember:peer(), "sync_show_hint""convert_enemy_failed" )
                
end
            end
            
            
return
        
end
        
        local group 
u_data.group
        
if group then
            self
:_remove_group_membergroupu_keynil )
        
end
        
        
-- un-assign from group AI
        self
:set_enemy_assignednilu_key )
        
        -- 
remember the fact that he is converted
        u_data
.is_converted true
        
-- switch AI to criminal
        unit
:brain():convert_to_criminalpeer_unit )
        -- 
unit:character_damage():convert_to_criminal()    -- unit:brain():convert_to_criminal already do this
        unit
:character_damage():add_listener"Converted"..tostring(player_unit:key()), {"death"}, callbackselfself"clbk_minion_dies"player_unit:key() ) )
        -- 
managers.game_play_central:add_friendly_contourunit )
        if 
not unit:contour() then
            debug_pause_unit
unit"[GroupAIStateBase:convert_hostage_to_criminal]: Unit doesn't have Contour Extension" )
        
end
        unit
:contour():add"friendly" )

        
u_data.so_access unit:brain():SO_access()
        
        
self._converted_policeu_key ] = unit
        minions
u_key ] = unit
        
        
        local convert_enemies_health_multiplier_level 
0
        local passive_convert_enemies_health_multiplier_level 
0
        
if alivepeer_unit then        -- client
            convert_enemies_health_multiplier_level 
peer_unit:base():upgrade_level"player""convert_enemies_health_multiplier" ) or 0
            passive_convert_enemies_health_multiplier_level 
peer_unit:base():upgrade_level"player""passive_convert_enemies_health_multiplier" ) or 0
        
else                                                    -- server
            convert_enemies_health_multiplier_level 
managers.player:upgrade_level"player""convert_enemies_health_multiplier" )
            
passive_convert_enemies_health_multiplier_level managers.player:upgrade_level"player""passive_convert_enemies_health_multiplier" )
        
end
        
        local owner_peer_id 
managers.network:game():member_from_unitplayer_unit ):peer():id()
        
managers.network:session():send_to_peers"mark_minion"unitowner_peer_idconvert_enemies_health_multiplier_levelpassive_convert_enemies_health_multiplier_level )
        
        if 
not peer_unit then    -- server did it!, iam the server
            managers
.player:count_up_player_minions()
        
end
    end

    managers
.groupai:state().convert_hostage_to_criminal GroupAIStateBase.convert_hostage_to_criminal
    
    
--//don't count jokered guards
    
function GroupAIStateBase:has_room_for_police_hostage()
        
local global_limit 1

        
for u_keyu_data in pairsself._player_criminals ) do
            
local limit
            
if u_data.unit:base().is_local_player then
                limit 
managers.player:upgrade_value"player""ene_hostage_lim_1")
            else
                
limit u_data.unit:base():upgrade_value"player""ene_hostage_lim_1" )
            
end
            global_limit 
limit and math.maxglobal_limitlimit ) or global_limit
        end

        
return ( self._police_hostage_headcount global_limit )
    
end
    
    managers
.groupai:state().has_room_for_police_hostage GroupAIStateBase.has_room_for_police_hostage
    
    
--No pager for dominated guards
    
function CopLogicIntimidated._do_tieddataaggressor_unit )
        
local my_data data.internal_data

        
if my_data.surrender_clbk_registered then
            managers
.groupai:state():remove_from_surrendereddata.unit )
            
my_data.surrender_clbk_registered nil
        end
        my_data
.tied true
        data
.unit:inventory():destroy_all_items()
        
data.unit:brain():set_update_enabled_statefalse )
        
        if 
my_data.update_task_key then
            managers
.enemy:unqueue_taskmy_data.update_task_key )
            
my_data.update_task_key nil
        end
        
        local rsrv_pos 
my_data.rsrv_pos
        
if rsrv_pos and rsrv_pos.stand then
            managers
.navigation:unreserve_posrsrv_pos.stand )
            
rsrv_pos.stand nil
        end
        managers
.groupai:state():on_enemy_tieddata.unit:key() )
        
data.unit:base():set_slotdata.unit22 )    --22. Bound Hostages civilian and police handcuffed players are in slot 4
        
        data
.unit:interaction():set_tweak_data"hostage_convert" )
        
data.unit:interaction():set_activetruetruefalse )
        
        
my_data.is_hostage true
        managers
.groupai:state():on_hostage_statetruedata.keytrue )
        
        if 
aggressor_unit then
            data
.unit:character_damage():drop_pickup() -- Steal his things
            data
.unit:character_damage():set_pickupnil )
                
            if 
aggressor_unit == managers.player:player_unit() then -- Its methe server
                managers
.statistics:tied( { name data.unit:base()._tweak_table } )
            else -- 
It was one of the clients
                aggressor_unit
:network():send_to_unit( { "statistics_tied"data.unit:base()._tweak_table } )
            
end
        end
    end
    
    
for _script in pairs(managers.mission:scripts()) do
        for 
idelement in pairs(script:elements()) do
            
local name element:editor_name()
            if 
name == "spawnCopPatrol" or name == "spawn_guard" or name == "respawn_guard" then
                element
:set_enabled(false)
            
end
        end
    end
end 














Aucun commentaire:

Enregistrer un commentaire