diff --git a/README.md b/README.md index f4cc4923..8dab5785 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,9 @@ ## Buildables * Added purchase cost * Parts automatically picked up -* Zombies no longer attack buildables (except Zombie Shield) +* Zombies no longer attack (except Zombie Shield) +* Destroyed by taking 1500 damage +* No longer destroyed by 2 grenades ### Electric Trap * No longer needs to be powered by a Turbine diff --git a/scripts/zm/main/_zm_reimagined.gsc b/scripts/zm/main/_zm_reimagined.gsc index 518a32a1..9ee3ab8e 100644 --- a/scripts/zm/main/_zm_reimagined.gsc +++ b/scripts/zm/main/_zm_reimagined.gsc @@ -8,6 +8,7 @@ main() replaceFunc(maps/mp/zombies/_zm_playerhealth::playerhealthregen, ::playerhealthregen); replaceFunc(maps/mp/zombies/_zm_utility::track_players_intersection_tracker, ::track_players_intersection_tracker); replaceFunc(maps/mp/zombies/_zm_powerups::nuke_powerup, ::nuke_powerup); + replaceFunc(maps/mp/zombies/_zm_equipment::placed_equipment_think, ::placed_equipment_think); } init() @@ -1770,6 +1771,80 @@ nuke_powerup( drop_item, player_team ) } } +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 maps/mp/zombies/_zm_equipment::item_attract_zombies(); + 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 maps/mp/zombies/_zm_equipment::item_damage( amount ); + } +} + setscoreboardcolumns_gametype() { if(getDvar("g_gametype") == "zgrief")