1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 07:08:06 -05:00
Files
BO2-Reimagined/scripts/zm/zm_transit/zm_transit_reimagined.gsc
2021-12-12 05:40:15 -08:00

244 lines
6.7 KiB
Plaintext

#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;
}
}