diff --git a/scripts/zm/main/_zm_reimagined.gsc b/scripts/zm/main/_zm_reimagined.gsc index 9ee3ab8e..a9569279 100644 --- a/scripts/zm/main/_zm_reimagined.gsc +++ b/scripts/zm/main/_zm_reimagined.gsc @@ -67,7 +67,6 @@ onplayerspawned() self thread solo_lives_fix(); - self thread on_equipment_placed(); self thread give_additional_perks(); self thread buildable_piece_remove_on_last_stand(); @@ -132,9 +131,9 @@ post_all_players_spawned() wallbuy_increase_trigger_radius(); wallbuy_location_changes(); - zone_changes(); + equipment_no_power_required(); - enemies_ignore_equipments(); + zone_changes(); screecher_spawner_changes(); screecher_remove_near_miss(); @@ -1815,7 +1814,7 @@ placed_equipment_think( model, equipname, origin, angles, tradius, toffset ) pickupmodel.stub.model = pickupmodel; pickupmodel.stub.equipname = equipname; pickupmodel.equipname = equipname; - pickupmodel thread maps/mp/zombies/_zm_equipment::item_attract_zombies(); + //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 ) ) { @@ -3399,14 +3398,11 @@ remove_buildable_pieces( buildable_name ) } } -enemies_ignore_equipments() +equipment_no_power_required() { - equipment = getFirstArrayKey(level.zombie_include_equipment); - while (isDefined(equipment)) - { - maps/mp/zombies/_zm_equipment::enemies_ignore_equipment(equipment); - equipment = getNextArrayKey(level.zombie_include_equipment, equipment); - } + level.equipment_etrap_needs_power = 0; + level.equipment_turret_needs_power = 0; + level.equipment_subwoofer_needs_power = 0; } electric_trap_always_kill() @@ -3587,212 +3583,6 @@ slipgun_disable_reslip() level.zombie_vars["slipgun_reslip_rate"] = 0; } -on_equipment_placed() -{ - self endon( "disconnect" ); - - //level.equipment_etrap_needs_power = 0; - //level.equipment_turret_needs_power = 0; - //level.equipment_subwoofer_needs_power = 0; - - for ( ;; ) - { - self waittill( "equipment_placed", weapon, weapname ); - - if ( (IsDefined(level.turret_name) && weapname == level.turret_name) || (IsDefined(level.electrictrap_name) && weapname == level.electrictrap_name) || (IsDefined(level.subwoofer_name) && weapname == level.subwoofer_name) ) - { - weapon.local_power = maps/mp/zombies/_zm_power::add_local_power( weapon.origin, 16 ); - - weapon thread remove_local_power_on_death(weapon.local_power); - - if ( IsDefined(level.turret_name) && weapname == level.turret_name ) - { - self thread turret_decay(weapon); - - self thread turret_disable_team_damage(weapon); - - self thread turret_stop_loop_sound(weapon); - } - else if ( IsDefined(level.electrictrap_name) && weapname == level.electrictrap_name ) - { - self thread electrictrap_decay(weapon); - } - - wait 0.05; - - weapon.power_on = 1; // removes print statement made by equipment without power - - if ( IsDefined(level.electrictrap_name) && weapname == level.electrictrap_name ) - { - weapon.power_on_time -= 2000; // makes it so trap kills immediately when placed - } - } - } -} - -remove_local_power_on_death( local_power ) -{ - while ( isDefined(self) ) - { - wait 0.05; - } - - maps/mp/zombies/_zm_power::end_local_power( local_power ); -} - -turret_disable_team_damage( weapon ) -{ - self endon ( "death" ); - weapon endon( "death" ); - - while ( !IsDefined( weapon.turret ) ) - { - wait 0.05; - } - - weapon.turret.damage_own_team = 0; -} - -turret_decay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( !isDefined( self.turret_health ) ) - { - self.turret_health = 60; - } - - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.turret_health--; - - if ( self.turret_health <= 0 ) - { - self thread turret_expired( weapon ); - return; - } - } - wait 1; - } -} - -turret_expired( weapon ) -{ - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( weapon.origin ); - self cleanupoldturret(); - self maps/mp/zombies/_zm_equipment::equipment_release( level.turret_name ); - self.turret_health = undefined; -} - -cleanupoldturret() -{ - if ( isDefined( self.buildableturret ) ) - { - if ( isDefined( self.buildableturret.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableturret.stub ); - self.buildableturret.stub = undefined; - } - if ( isDefined( self.buildableturret.turret ) ) - { - if ( isDefined( self.buildableturret.turret.sound_ent ) ) - { - self.buildableturret.turret.sound_ent delete(); - } - self.buildableturret.turret delete(); - } - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } - self.buildableturret delete(); - self.turret_health = undefined; - } - else - { - if ( isDefined( self.turret ) ) - { - self.turret notify( "stop_burst_fire_unmanned" ); - self.turret delete(); - } - } - self.turret = undefined; - self notify( "turret_cleanup" ); -} - -turret_stop_loop_sound( weapon ) -{ - while(isDefined(weapon)) - { - wait 0.05; - } - - if ( isDefined( self.buildableturret.sound_ent ) ) - { - self.buildableturret.sound_ent stoploopsound(); - self.buildableturret.sound_ent playsoundwithnotify( "wpn_zmb_turret_stop", "sound_done" ); - self.buildableturret.sound_ent waittill( "sound_done" ); - self.buildableturret.sound_ent delete(); - self.buildableturret.sound_ent = undefined; - } -} - -electrictrap_decay( weapon ) -{ - self endon( "death" ); - self endon( "disconnect" ); - - if ( !isDefined( self.electrictrap_health ) ) - { - self.electrictrap_health = 60; - } - - while ( isDefined( weapon ) ) - { - if ( weapon.power_on ) - { - self.electrictrap_health--; - - if ( self.electrictrap_health <= 0 ) - { - self thread electrictrap_expired( weapon ); - return; - } - } - wait 1; - } -} - -electrictrap_expired( weapon ) -{ - maps/mp/zombies/_zm_equipment::equipment_disappear_fx( weapon.origin ); - self cleanupoldtrap(); - self maps/mp/zombies/_zm_equipment::equipment_release( level.electrictrap_name ); - self.electrictrap_health = undefined; -} - -cleanupoldtrap() -{ - if ( isDefined( self.buildableelectrictrap ) ) - { - if ( isDefined( self.buildableelectrictrap.stub ) ) - { - thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildableelectrictrap.stub ); - self.buildableelectrictrap.stub = undefined; - } - self.buildableelectrictrap delete(); - } - if ( isDefined( level.electrap_sound_ent ) ) - { - level.electrap_sound_ent delete(); - level.electrap_sound_ent = undefined; - } -} - give_additional_perks() { self endon( "disconnect" ); diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc new file mode 100644 index 00000000..ec90233f --- /dev/null +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -0,0 +1,244 @@ +#include maps/mp/gametypes_zm/_hud_util; +#include maps/mp/zombies/_zm_utility; +#include common_scripts/utility; +#include maps/mp/_utility; + +main() +{ + replaceFunc(maps/mp/zombies/_zm_equip_electrictrap::startelectrictrapdeploy, ::startelectrictrapdeploy); + replaceFunc(maps/mp/zombies/_zm_equip_turret::startturretdeploy, ::startturretdeploy); +} + +startelectrictrapdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + self thread maps/mp/zombies/_zm_equip_electrictrap::watchforcleanup(); + electricradius = 45; + if ( !isDefined( self.electrictrap_health ) ) + { + self.electrictrap_health = 60; + } + if ( isDefined( weapon ) ) + { + weapon trap_power_on(); + if ( !weapon.power_on ) + { + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + } + self thread maps/mp/zombies/_zm_equip_electrictrap::electrictrapthink( weapon, electricradius ); + self thread maps/mp/zombies/_zm_equip_electrictrap::electrictrapdecay( weapon ); + self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); + weapon waittill( "death" ); + if ( isDefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent playsound( "wpn_zmb_electrap_stop" ); + level.electrap_sound_ent delete(); + level.electrap_sound_ent = undefined; + } + self notify( "etrap_cleanup" ); + } +} + +trap_power_on() +{ + self.power_on = 1; + self.power_on_time = getTime() - 2000; // activates the trap right away + self notify( "stop_attracting_zombies" ); + if ( !isDefined( level.electrap_sound_ent ) ) + { + level.electrap_sound_ent = spawn( "script_origin", self.origin ); + } + level.electrap_sound_ent playsound( "wpn_zmb_electrap_start" ); + level.electrap_sound_ent playloopsound( "wpn_zmb_electrap_loop", 2 ); + self thread maps/mp/zombies/_zm_equip_electrictrap::trapfx(); +} + +electrictrapthink( weapon, electricradius ) +{ + weapon endon( "death" ); + radiussquared = electricradius * electricradius; + while ( isDefined( weapon ) ) + { + if ( weapon.power_on ) + { + zombies = getaiarray( level.zombie_team ); + _a354 = zombies; + _k354 = getFirstArrayKey( _a354 ); + while ( isDefined( _k354 ) ) + { + zombie = _a354[ _k354 ]; + if ( isDefined( zombie ) && isalive( zombie ) ) + { + if ( isDefined( zombie.ignore_electric_trap ) && zombie.ignore_electric_trap ) + { + break; + } + else + { + if ( distancesquared( weapon.origin, zombie.origin ) < radiussquared ) + { + weapon maps/mp/zombies/_zm_equip_electrictrap::zap_zombie( zombie ); + wait 0.15; + } + maps/mp/zombies/_zm_equip_electrictrap::etrap_choke(); + } + } + _k354 = getNextArrayKey( _a354, _k354 ); + } + players = get_players(); + _a373 = players; + _k373 = getFirstArrayKey( _a373 ); + while ( isDefined( _k373 ) ) + { + player = _a373[ _k373 ]; + if ( is_player_valid( player ) && distancesquared( weapon.origin, player.origin ) < radiussquared ) + { + player thread maps/mp/zombies/_zm_traps::player_elec_damage(); + maps/mp/zombies/_zm_equip_electrictrap::etrap_choke(); + } + maps/mp/zombies/_zm_equip_electrictrap::etrap_choke(); + _k373 = getNextArrayKey( _a373, _k373 ); + } + } + wait 0.1; + } +} + +electrictrapdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_electrictrap_zm_taken" ); + while ( isDefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.electrictrap_health--; + + if ( self.electrictrap_health <= 0 ) + { + maps/mp/zombies/_zm_equipment::equipment_disappear_fx( weapon.origin, undefined, weapon.angles ); + self maps/mp/zombies/_zm_equip_electrictrap::cleanupoldtrap(); + self.electrictrap_health = undefined; + self thread maps/mp/zombies/_zm_equipment::equipment_release( level.electrictrap_name ); + return; + } + } + wait 1; + } +} + +startturretdeploy( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turret_zm_taken" ); + self thread maps/mp/zombies/_zm_equip_turret::watchforcleanup(); + if ( !isDefined( self.turret_health ) ) + { + self.turret_health = 60; + } + if ( isDefined( weapon ) ) + { + weapon hide(); + wait 0.1; + if ( isDefined( weapon.power_on ) && weapon.power_on ) + { + weapon.turret notify( "stop_burst_fire_unmanned" ); + } + if ( !isDefined( weapon ) ) + { + return; + } + if ( isDefined( self.turret ) ) + { + self.turret notify( "stop_burst_fire_unmanned" ); + self.turret notify( "turret_deactivated" ); + self.turret delete(); + } + turret = spawnturret( "misc_turret", weapon.origin, "zombie_bullet_crouch_zm" ); + turret.turrettype = "sentry"; + turret setturrettype( turret.turrettype ); + turret setmodel( "p6_anim_zm_buildable_turret" ); + turret.origin = weapon.origin; + turret.angles = weapon.angles; + turret linkto( weapon ); + turret makeunusable(); + turret.owner = self; + turret setowner( turret.owner ); + turret maketurretunusable(); + turret setmode( "auto_nonai" ); + turret setdefaultdroppitch( 45 ); + turret setconvergencetime( 0.3 ); + turret setturretteam( self.team ); + turret.team = self.team; + turret.damage_own_team = 0; + turret.turret_active = 1; + weapon.turret = turret; + self.turret = turret; + weapon turret_power_on(); + if ( weapon.power_on ) + { + turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); + } + else + { + self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" ); + } + self thread turretdecay( weapon ); + self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon ); + weapon waittill("death"); + if ( isDefined( self.buildableturret.sound_ent ) ) + { + self.buildableturret.sound_ent playsound( "wpn_zmb_turret_stop" ); + self.buildableturret.sound_ent delete(); + self.buildableturret.sound_ent = undefined; + } + if ( isDefined( turret ) ) + { + turret notify( "stop_burst_fire_unmanned" ); + turret notify( "turret_deactivated" ); + turret delete(); + } + self.turret = undefined; + self notify( "turret_cleanup" ); + } +} + +turret_power_on() +{ + self.power_on = 1; + self.turret thread maps/mp/zombies/_zm_mgturret::burst_fire_unmanned(); + player = self.turret.owner; + if ( !isDefined( player.buildableturret.sound_ent ) ) + { + player.buildableturret.sound_ent = spawn( "script_origin", self.turret.origin ); + } + player.buildableturret.sound_ent playsound( "wpn_zmb_turret_start" ); + player.buildableturret.sound_ent playloopsound( "wpn_zmb_turret_loop", 2 ); +} + +turretdecay( weapon ) +{ + self endon( "death" ); + self endon( "disconnect" ); + self endon( "equip_turret_zm_taken" ); + while ( isDefined( weapon ) ) + { + if ( weapon.power_on ) + { + self.turret_health--; + + if ( self.turret_health <= 0 ) + { + maps/mp/zombies/_zm_equipment::equipment_disappear_fx( weapon.origin, undefined, weapon.angles ); + self maps/mp/zombies/_zm_equip_turret::cleanupoldturret(); + self thread maps/mp/zombies/_zm_equipment::equipment_release( level.turret_name ); + return; + } + } + wait 1; + } +} \ No newline at end of file