#include maps\mp\zombies\_zm_riotshield; #include maps\mp\_utility; #include maps\mp\zombies\_zm_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_weap_riotshield; #include maps\mp\zombies\_zm_buildables; #include maps\mp\zombies\_zm_equipment; #include maps\mp\zombies\_zm_weapons; doriotshielddeploy( origin, angles ) { self endon( "death" ); self endon( "disconnect" ); self endon( "start_riotshield_deploy" ); self notify( "deployed_riotshield" ); self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name ); if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name ) self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name ); zoffset = level.riotshield_placement_zoffset; shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles ); item_ent = deployriotshield( self, shield_ent ); primaries = self getweaponslistprimaries(); self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(self.riotshield_prev_wep); if ( isdefined( level.equipment_planted ) ) self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self ); if ( isdefined( level.equipment_safe_to_drop ) ) { if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) ) { self notify( "destroy_riotshield" ); shield_ent delete(); item_ent delete(); return; } } self.riotshieldretrievetrigger = item_ent; self.riotshieldentity = shield_ent; self thread watchdeployedriotshieldents(); self thread deleteshieldondamage( self.riotshieldentity ); self thread deleteshieldmodelonweaponpickup( self.riotshieldretrievetrigger ); self thread deleteriotshieldonplayerdeath(); self thread watchshieldtriggervisibility( self.riotshieldretrievetrigger ); self.riotshieldentity thread watchdeployedriotshielddamage(); return shield_ent; } trackriotshield() { self endon( "death" ); self endon( "disconnect" ); self.hasriotshield = self hasweapon( level.riotshield_name ); self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name; self.shield_placement = 0; if ( self.hasriotshield ) { if ( self.hasriotshieldequipped ) { self.shield_placement = 1; self updateriotshieldmodel(); } else { self.shield_placement = 2; self updateriotshieldmodel(); } } for (;;) { self waittill( "weapon_change", newweapon ); foreach (wep in self getWeaponsListPrimaries()) { if (wep == newweapon) { self.riotshield_prev_wep = newweapon; break; } } if ( newweapon == level.riotshield_name ) { if ( self.hasriotshieldequipped ) continue; if ( isdefined( self.riotshieldentity ) ) self notify( "destroy_riotshield" ); self.shield_placement = 1; self updateriotshieldmodel(); self.hasriotshield = 1; self.hasriotshieldequipped = 1; continue; } if ( self ismantling() && newweapon == "none" ) continue; if ( self.hasriotshieldequipped ) { assert( self.hasriotshield ); self.hasriotshield = self hasweapon( level.riotshield_name ); if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden ) { } else if ( self.hasriotshield ) self.shield_placement = 2; else if ( isdefined( self.shield_ent ) ) assert( self.shield_placement == 3 ); else self.shield_placement = 0; self updateriotshieldmodel(); self.hasriotshieldequipped = 0; continue; } if ( self.hasriotshield ) { if ( !self hasweapon( level.riotshield_name ) ) { self.shield_placement = 0; self updateriotshieldmodel(); self.hasriotshield = 0; } continue; } if ( self hasweapon( level.riotshield_name ) ) { self.shield_placement = 2; self updateriotshieldmodel(); self.hasriotshield = 1; } } }