diff --git a/README.md b/README.md index b08a5264..fb5dccdf 100644 --- a/README.md +++ b/README.md @@ -152,6 +152,7 @@ * Disables player's perks for 30 seconds * Added fx to EMP'd players * Decreased zombie EMP radius by 30% (same radius as perk EMP) +* Can destroy placed Zombie Shields * Sprinting no longer wakes up EMP'd zombies ### Claymore diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index d9526b36..f922280a 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -227,8 +227,14 @@ post_all_players_spawned() level.equipment_subwoofer_needs_power = 0; level.limited_weapons["ray_gun_zm"] = undefined; level.limited_weapons["raygun_mark2_zm"] = 1; - level.zombie_weapons["slipgun_zm"].upgrade_name = "slipgun_upgraded_zm"; - level.zombie_weapons_upgraded["slipgun_upgraded_zm"] = "slipgun_zm"; + + if (isDefined(level.zombie_weapons["slipgun_zm"])) + { + level.zombie_weapons["slipgun_zm"].upgrade_name = "slipgun_upgraded_zm"; + level.zombie_weapons_upgraded["slipgun_upgraded_zm"] = "slipgun_zm"; + } + + level.zombie_vars["riotshield_hit_points"] = 1500; level.zombie_vars["emp_stun_range"] = 420; level.zombie_vars["slipgun_reslip_rate"] = 0; level.zombie_ai_limit_screecher = 1; diff --git a/scripts/zm/replaced/_zm_equipment.gsc b/scripts/zm/replaced/_zm_equipment.gsc index 881c1187..f4792eee 100644 --- a/scripts/zm/replaced/_zm_equipment.gsc +++ b/scripts/zm/replaced/_zm_equipment.gsc @@ -103,7 +103,9 @@ item_damage( damage ) self [[ level.deployed_riotshield_damage_callback ]]( damage ); } else if ( isdefined( self.owner ) ) - self.owner player_damage_equipment( self.equipname, damage, self.origin, self.stub ); + { + self.owner player_damage_equipment( self.equipname, damage, self.origin, self.stub ); + } else { if ( !isdefined( self.damage ) ) diff --git a/scripts/zm/replaced/_zm_weap_emp_bomb.gsc b/scripts/zm/replaced/_zm_weap_emp_bomb.gsc index 2be7f804..5d6600e9 100644 --- a/scripts/zm/replaced/_zm_weap_emp_bomb.gsc +++ b/scripts/zm/replaced/_zm_weap_emp_bomb.gsc @@ -1,6 +1,7 @@ #include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +#include maps\mp\zombies\_zm_weap_emp_bomb; emp_detonate(grenade) { @@ -32,7 +33,7 @@ emp_detonate(grenade) if ( isDefined( grenade_owner ) ) { - grenade_owner thread maps\mp\zombies\_zm_weap_emp_bomb::destroyequipment( origin, emp_radius ); + grenade_owner thread destroyequipment( origin, emp_radius ); } emp_players( origin, emp_radius, grenade_owner ); @@ -43,6 +44,65 @@ emp_detonate(grenade) maps\mp\zombies\_zm_power::revert_power_to_list( 1, origin, emp_radius, disabled_list ); } +destroyequipment( origin, radius ) +{ + grenades = getentarray( "grenade", "classname" ); + rsquared = radius * radius; + + for ( i = 0; i < grenades.size; i++ ) + { + item = grenades[i]; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + if ( !isdefined( item.name ) ) + continue; + + if ( !is_offhand_weapon( item.name ) ) + continue; + + watcher = item.owner getwatcherforweapon( item.name ); + + if ( !isdefined( watcher ) ) + continue; + + watcher thread waitanddetonate( item, 0.0, self, "emp_grenade_zm" ); + } + + equipment = maps\mp\zombies\_zm_equipment::get_destructible_equipment_list(); + + for ( i = 0; i < equipment.size; i++ ) + { + item = equipment[i]; + + if ( !isdefined( item ) ) + continue; + + if ( distancesquared( origin, item.origin ) > rsquared ) + continue; + + waitanddamage( item, 1505 ); + } +} + +waitanddamage( object, damage ) +{ + object endon( "death" ); + object endon( "hacked" ); + object.stun_fx = 1; + + if ( isdefined( level._equipment_emp_destroy_fx ) ) + playfx( level._equipment_emp_destroy_fx, object.origin + vectorscale( ( 0, 0, 1 ), 5.0 ), ( 0, randomfloat( 360 ), 0 ) ); + + delay = 1.1; + + if ( delay ) + wait( delay ); + + object thread scripts\zm\replaced\_zm_equipment::item_damage( damage ); +} + emp_players(origin, radius, owner) { rsquared = radius * radius;