#include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; show_equipment_hint( equipment ) { if ( is_true( self.do_not_display_equipment_pickup_hint ) ) { return; } self notify( "kill_previous_show_equipment_hint_thread" ); self endon( "kill_previous_show_equipment_hint_thread" ); self endon( "death" ); self endon( "disconnect" ); wait 0.5; text = maps\mp\zombies\_zm_equipment::get_equipment_howto_hint( equipment ); self maps\mp\zombies\_zm_equipment::show_equipment_hint_text( text ); } placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) { pickupmodel = spawn( "script_model", origin ); if ( isDefined( angles ) ) { pickupmodel.angles = angles; } pickupmodel setmodel( model ); if ( isDefined( level.equipment_safe_to_drop ) ) { if ( !( self [[ level.equipment_safe_to_drop ]]( pickupmodel ) ) ) { maps\mp\zombies\_zm_equipment::equipment_disappear_fx( pickupmodel.origin, undefined, pickupmodel.angles ); pickupmodel delete(); self maps\mp\zombies\_zm_equipment::equipment_take( equipname ); return undefined; } } watchername = getsubstr( equipname, 0, equipname.size - 3 ); if ( isDefined( level.retrievehints[ watchername ] ) ) { hint = level.retrievehints[ watchername ].hint; } else { hint = &"MP_GENERIC_PICKUP"; } icon = maps\mp\zombies\_zm_equipment::get_equipment_icon( equipname ); if ( !isDefined( tradius ) ) { tradius = 32; } torigin = origin; if ( isDefined( toffset ) ) { tforward = anglesToForward( angles ); torigin += toffset * tforward; } tup = anglesToUp( angles ); eq_unitrigger_offset = 12 * tup; pickupmodel.stub = maps\mp\zombies\_zm_equipment::generate_equipment_unitrigger( "trigger_radius_use", torigin + eq_unitrigger_offset, angles, 0, tradius, 64, hint, equipname, maps\mp\zombies\_zm_equipment::placed_equipment_unitrigger_think, pickupmodel.canmove ); pickupmodel.stub.model = pickupmodel; pickupmodel.stub.equipname = equipname; pickupmodel.equipname = equipname; pickupmodel thread item_watch_damage(); if ( maps\mp\zombies\_zm_equipment::is_limited_equipment( equipname ) ) { if ( !isDefined( level.dropped_equipment ) ) { level.dropped_equipment = []; } if ( isDefined( level.dropped_equipment[ equipname ] ) && isDefined( level.dropped_equipment[ equipname ].model ) ) { level.dropped_equipment[ equipname ].model maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); } level.dropped_equipment[ equipname ] = pickupmodel.stub; } maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( pickupmodel ); return pickupmodel; } item_watch_damage() { self endon( "death" ); self setcandamage( 1 ); while ( 1 ) { self.health = 1000000; self waittill( "damage", amount ); self item_damage( amount ); } } item_damage( damage ) { if ( isdefined( self.isriotshield ) && self.isriotshield ) { if ( isdefined( level.riotshield_damage_callback ) && isdefined( self.owner ) ) self.owner [[ level.riotshield_damage_callback ]]( damage, 0 ); else if ( isdefined( level.deployed_riotshield_damage_callback ) ) self [[ level.deployed_riotshield_damage_callback ]]( damage ); } else if ( isdefined( self.owner ) ) { self.owner player_damage_equipment( self.equipname, damage, self.origin, self.stub ); } else { if ( !isdefined( self.damage ) ) self.damage = 0; self.damage += damage; if ( self.damage > 1500 ) self thread maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 ); } } player_damage_equipment( equipment, damage, origin, stub ) { if ( !isdefined( self.equipment_damage ) ) self.equipment_damage = []; if ( !isdefined( self.equipment_damage[equipment] ) ) self.equipment_damage[equipment] = 0; self.equipment_damage[equipment] += damage; if ( self.equipment_damage[equipment] > 1500 ) { thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub ); if ( isdefined( level.placeable_equipment_destroy_fn[equipment] ) ) self [[ level.placeable_equipment_destroy_fn[equipment] ]](); else equipment_disappear_fx( origin ); self equipment_release( equipment ); } }