mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-26 07:00:25 -05:00
Zombies deleted due to distance always respawn
This commit is contained in:
73
scripts/zm/replaced/zm_alcatraz_distance_tracking.gsc
Normal file
73
scripts/zm/replaced/zm_alcatraz_distance_tracking.gsc
Normal file
@ -0,0 +1,73 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zm_alcatraz_distance_tracking;
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1500;
|
||||
|
||||
if ( !isdefined( how_high ) )
|
||||
how_close = 600;
|
||||
|
||||
distance_squared_check = how_close * how_close;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
|
||||
if ( isdefined( level.zombie_tracking_too_far_dist ) )
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
players = get_players();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||
continue;
|
||||
}
|
||||
|
||||
can_be_seen = self player_can_see_me( players[i] );
|
||||
|
||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||
self.inview++;
|
||||
|
||||
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||
self.player_close++;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||
return;
|
||||
|
||||
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( self.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
99
scripts/zm/replaced/zm_buried_distance_tracking.gsc
Normal file
99
scripts/zm/replaced/zm_buried_distance_tracking.gsc
Normal file
@ -0,0 +1,99 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zombies\_zm_zonemgr;
|
||||
#include maps\mp\zombies\_zm_ai_basic;
|
||||
#include maps\mp\zm_buried_distance_tracking;
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( self can_be_deleted_from_buried_special_zones() )
|
||||
{
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1000;
|
||||
|
||||
if ( !isdefined( how_high ) )
|
||||
how_high = 500;
|
||||
|
||||
if ( !( isdefined( self.has_legs ) && self.has_legs ) )
|
||||
how_close *= 1.5;
|
||||
|
||||
distance_squared_check = how_close * how_close;
|
||||
height_squared_check = how_high * how_high;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
|
||||
if ( isdefined( level.zombie_tracking_too_far_dist ) )
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
players = get_players();
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
if ( player.sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( player.laststand ) && player.laststand && ( isdefined( self.favoriteenemy ) && self.favoriteenemy == player ) )
|
||||
{
|
||||
if ( !self can_zombie_see_any_player() )
|
||||
{
|
||||
self.favoriteenemy = undefined;
|
||||
self.zombie_path_bad = 1;
|
||||
self thread escaped_zombies_cleanup();
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != player )
|
||||
continue;
|
||||
}
|
||||
|
||||
can_be_seen = self player_can_see_me( player );
|
||||
distance_squared = distancesquared( self.origin, player.origin );
|
||||
|
||||
if ( can_be_seen && distance_squared < too_far_dist )
|
||||
self.inview++;
|
||||
|
||||
if ( distance_squared < distance_squared_check && abs( self.origin[2] - player.origin[2] ) < how_high )
|
||||
self.player_close++;
|
||||
}
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
|
||||
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( self.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
|
||||
if ( isdefined( self.anchor ) )
|
||||
self.anchor delete();
|
||||
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
141
scripts/zm/replaced/zm_highrise_distance_tracking.gsc
Normal file
141
scripts/zm/replaced/zm_highrise_distance_tracking.gsc
Normal file
@ -0,0 +1,141 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zombies\_zm_ai_basic;
|
||||
#include maps\mp\zm_highrise_distance_tracking;
|
||||
|
||||
zombie_tracking_init()
|
||||
{
|
||||
level.zombie_respawned_health = [];
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_dist ) )
|
||||
level.zombie_tracking_dist = 1000;
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_high ) )
|
||||
level.zombie_tracking_high = 500;
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_wait ) )
|
||||
level.zombie_tracking_wait = 10;
|
||||
|
||||
building_trigs = getentarray( "zombie_fell_off", "targetname" );
|
||||
|
||||
if ( isdefined( building_trigs ) )
|
||||
array_thread( building_trigs, ::zombies_off_building );
|
||||
|
||||
level.distance_tracker_aggressive_distance = 500;
|
||||
level.distance_tracker_aggressive_height = 200;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
zombies = get_round_enemy_array();
|
||||
|
||||
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
{
|
||||
wait( level.zombie_tracking_wait );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
|
||||
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
||||
}
|
||||
}
|
||||
|
||||
wait( level.zombie_tracking_wait );
|
||||
}
|
||||
}
|
||||
|
||||
zombies_off_building()
|
||||
{
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
|
||||
{
|
||||
if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( who.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
|
||||
}
|
||||
|
||||
who maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
who notify( "zombie_delete" );
|
||||
who dodamage( who.health + 666, who.origin, who );
|
||||
recalc_zombie_array();
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1000;
|
||||
|
||||
if ( !isdefined( how_high ) )
|
||||
how_high = 500;
|
||||
|
||||
distance_squared_check = how_close * how_close;
|
||||
height_squared_check = how_high * how_high;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
|
||||
if ( isdefined( level.zombie_tracking_too_far_dist ) )
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
players = get_players();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||
continue;
|
||||
}
|
||||
|
||||
can_be_seen = self player_can_see_me( players[i] );
|
||||
|
||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||
self.inview++;
|
||||
|
||||
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
|
||||
self.player_close++;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
|
||||
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( self.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
93
scripts/zm/replaced/zm_tomb_distance_tracking.gsc
Normal file
93
scripts/zm/replaced/zm_tomb_distance_tracking.gsc
Normal file
@ -0,0 +1,93 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_zonemgr;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zombies\_zm_ai_basic;
|
||||
#include maps\mp\zm_tomb_chamber;
|
||||
#include maps\mp\zm_tomb_distance_tracking;
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1500;
|
||||
|
||||
if ( !isdefined( how_high ) )
|
||||
how_high = 600;
|
||||
|
||||
distance_squared_check = how_close * how_close;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
|
||||
if ( isdefined( level.zombie_tracking_too_far_dist ) )
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
n_distance_squared = 0;
|
||||
n_height_difference = 0;
|
||||
players = get_players();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||
continue;
|
||||
}
|
||||
|
||||
can_be_seen = self player_can_see_me( players[i] );
|
||||
|
||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||
self.inview++;
|
||||
|
||||
n_modifier = 1.0;
|
||||
|
||||
if ( isdefined( players[i].b_in_tunnels ) && players[i].b_in_tunnels )
|
||||
n_modifier = 2.25;
|
||||
|
||||
n_distance_squared = distancesquared( self.origin, players[i].origin );
|
||||
n_height_difference = abs( self.origin[2] - players[i].origin[2] );
|
||||
|
||||
if ( n_distance_squared < distance_squared_check * n_modifier && n_height_difference < how_high )
|
||||
self.player_close++;
|
||||
}
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || self.animname != "zombie" && self.animname != "mechz_zombie" )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||
return;
|
||||
|
||||
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( self.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
|
||||
if ( isdefined( self.is_mechz ) && self.is_mechz )
|
||||
{
|
||||
self notify( "mechz_cleanup" );
|
||||
level.mechz_left_to_spawn++;
|
||||
wait_network_frame();
|
||||
level notify( "spawn_mechz" );
|
||||
}
|
||||
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
72
scripts/zm/replaced/zm_transit_distance_tracking.gsc
Normal file
72
scripts/zm/replaced/zm_transit_distance_tracking.gsc
Normal file
@ -0,0 +1,72 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zm_transit_distance_tracking;
|
||||
|
||||
delete_zombie_noone_looking( how_close )
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1000;
|
||||
|
||||
distance_squared_check = how_close * how_close;
|
||||
too_far_dist = distance_squared_check * 3;
|
||||
|
||||
if ( isdefined( level.zombie_tracking_too_far_dist ) )
|
||||
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
|
||||
|
||||
self.inview = 0;
|
||||
self.player_close = 0;
|
||||
players = get_players();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
|
||||
continue;
|
||||
}
|
||||
|
||||
can_be_seen = self player_can_see_me( players[i] );
|
||||
|
||||
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
|
||||
self.inview++;
|
||||
|
||||
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check )
|
||||
self.player_close++;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
|
||||
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||
return;
|
||||
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
|
||||
{
|
||||
level.zombie_total++;
|
||||
|
||||
if ( self.health < level.zombie_health )
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user