1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 07:08:06 -05:00

Zombies deleted due to distance always respawn

This commit is contained in:
Jbleezy
2023-04-18 13:57:45 -07:00
parent 6f0b3aabd7
commit 7bf1cd4a15
11 changed files with 490 additions and 0 deletions

View File

@ -72,6 +72,7 @@
## Zombies
* Health capped at 100,000
* Amount of zombies scales linearly with the amount of players
* Zombies that are deleted due to being too far away always respawn
* Changed height to 48 on all maps (normally either 48 or 72)
* Attracted towards points of interest immediately
* Removed walkers in high rounds

View 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();
}
}

View 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();
}
}

View 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();
}
}

View 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();
}
}

View 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();
}
}

View File

@ -12,6 +12,7 @@
#include scripts\zm\replaced\zm_buried_sq_tpo;
#include scripts\zm\replaced\zm_buried_sq_ip;
#include scripts\zm\replaced\zm_buried_sq_ows;
#include scripts\zm\replaced\zm_buried_distance_tracking;
#include scripts\zm\replaced\_zm_ai_ghost;
#include scripts\zm\replaced\_zm_ai_sloth;
#include scripts\zm\replaced\_zm_buildables_pooled;
@ -44,6 +45,7 @@ main()
replaceFunc(maps\mp\zm_buried_sq_tpo::init, scripts\zm\replaced\zm_buried_sq_tpo::init);
replaceFunc(maps\mp\zm_buried_sq_ip::init, scripts\zm\replaced\zm_buried_sq_ip::init);
replaceFunc(maps\mp\zm_buried_sq_ows::ows_targets_start, scripts\zm\replaced\zm_buried_sq_ows::ows_targets_start);
replaceFunc(maps\mp\zm_buried_distance_tracking::delete_zombie_noone_looking, scripts\zm\replaced\zm_buried_distance_tracking::delete_zombie_noone_looking);
replaceFunc(maps\mp\zombies\_zm_ai_ghost::should_last_ghost_drop_powerup, scripts\zm\replaced\_zm_ai_ghost::should_last_ghost_drop_powerup);
replaceFunc(maps\mp\zombies\_zm_ai_sloth::sloth_init_start_funcs, scripts\zm\replaced\_zm_ai_sloth::sloth_init_start_funcs);
replaceFunc(maps\mp\zombies\_zm_ai_sloth::sloth_init_update_funcs, scripts\zm\replaced\_zm_ai_sloth::sloth_init_update_funcs);

View File

@ -10,6 +10,7 @@
#include scripts\zm\replaced\zm_highrise_classic;
#include scripts\zm\replaced\zm_highrise_buildables;
#include scripts\zm\replaced\zm_highrise_elevators;
#include scripts\zm\replaced\zm_highrise_distance_tracking;
#include scripts\zm\replaced\_zm_ai_leaper;
#include scripts\zm\replaced\_zm_chugabud;
#include scripts\zm\replaced\_zm_equip_springpad;
@ -36,6 +37,8 @@ main()
replaceFunc(maps\mp\zm_highrise_elevators::init_elevator_perks, scripts\zm\replaced\zm_highrise_elevators::init_elevator_perks);
replaceFunc(maps\mp\zm_highrise_elevators::elevator_think, scripts\zm\replaced\zm_highrise_elevators::elevator_think);
replaceFunc(maps\mp\zm_highrise_elevators::faller_location_logic, scripts\zm\replaced\zm_highrise_elevators::faller_location_logic);
replaceFunc(maps\mp\zm_highrise_distance_tracking::zombie_tracking_init, scripts\zm\replaced\zm_highrise_distance_tracking::zombie_tracking_init);
replaceFunc(maps\mp\zm_highrise_distance_tracking::delete_zombie_noone_looking, scripts\zm\replaced\zm_highrise_distance_tracking::delete_zombie_noone_looking);
replaceFunc(maps\mp\zombies\_zm_ai_leaper::leaper_round_tracker, scripts\zm\replaced\_zm_ai_leaper::leaper_round_tracker);
replaceFunc(maps\mp\zombies\_zm_equip_springpad::springpadthink, scripts\zm\replaced\_zm_equip_springpad::springpadthink);
replaceFunc(maps\mp\zombies\_zm_weap_slipgun::init, scripts\zm\replaced\_zm_weap_slipgun::init);

View File

@ -13,6 +13,7 @@
#include scripts\zm\replaced\zm_alcatraz_traps;
#include scripts\zm\replaced\zm_alcatraz_travel;
#include scripts\zm\replaced\zm_alcatraz_weap_quest;
#include scripts\zm\replaced\zm_alcatraz_distance_tracking;
#include scripts\zm\replaced\zm_prison_sq_bg;
#include scripts\zm\replaced\zm_prison_sq_final;
#include scripts\zm\replaced\_zm_afterlife;
@ -42,6 +43,7 @@ main()
replaceFunc(maps\mp\zm_alcatraz_traps::tower_trap_trigger_think, scripts\zm\replaced\zm_alcatraz_traps::tower_trap_trigger_think);
replaceFunc(maps\mp\zm_alcatraz_travel::move_gondola, scripts\zm\replaced\zm_alcatraz_travel::move_gondola);
replaceFunc(maps\mp\zm_alcatraz_weap_quest::grief_soul_catcher_state_manager, scripts\zm\replaced\zm_alcatraz_weap_quest::grief_soul_catcher_state_manager);
replaceFunc(maps\mp\zm_alcatraz_distance_tracking::delete_zombie_noone_looking, scripts\zm\replaced\zm_alcatraz_distance_tracking::delete_zombie_noone_looking);
replaceFunc(maps\mp\zm_prison_sq_bg::give_sq_bg_reward, scripts\zm\replaced\zm_prison_sq_bg::give_sq_bg_reward);
replaceFunc(maps\mp\zm_prison_sq_final::stage_one, scripts\zm\replaced\zm_prison_sq_final::stage_one);
replaceFunc(maps\mp\zm_prison_sq_final::final_flight_trigger, scripts\zm\replaced\zm_prison_sq_final::final_flight_trigger);

View File

@ -20,6 +20,7 @@
#include scripts\zm\replaced\zm_tomb_tank;
#include scripts\zm\replaced\zm_tomb_teleporter;
#include scripts\zm\replaced\zm_tomb_utility;
#include scripts\zm\replaced\zm_tomb_distance_tracking;
#include scripts\zm\replaced\_zm_ai_mechz;
#include scripts\zm\replaced\_zm_craftables;
#include scripts\zm\replaced\_zm_powerup_zombie_blood;
@ -65,6 +66,7 @@ main()
replaceFunc(maps\mp\zm_tomb_teleporter::teleporter_init, scripts\zm\replaced\zm_tomb_teleporter::teleporter_init);
replaceFunc(maps\mp\zm_tomb_utility::update_staff_accessories, scripts\zm\replaced\zm_tomb_utility::update_staff_accessories);
replaceFunc(maps\mp\zm_tomb_utility::check_solo_status, scripts\zm\replaced\zm_tomb_utility::check_solo_status);
replaceFunc(maps\mp\zm_tomb_distance_tracking::delete_zombie_noone_looking, scripts\zm\replaced\zm_tomb_distance_tracking::delete_zombie_noone_looking);
replaceFunc(maps\mp\zombies\_zm_ai_mechz::mechz_set_starting_health, scripts\zm\replaced\_zm_ai_mechz::mechz_set_starting_health);
replaceFunc(maps\mp\zombies\_zm_ai_mechz::mechz_round_tracker, scripts\zm\replaced\_zm_ai_mechz::mechz_round_tracker);
replaceFunc(maps\mp\zombies\_zm_craftables::choose_open_craftable, scripts\zm\replaced\_zm_craftables::choose_open_craftable);

View File

@ -8,6 +8,7 @@
#include scripts\zm\replaced\zm_transit_utility;
#include scripts\zm\replaced\zm_transit_ai_screecher;
#include scripts\zm\replaced\zm_transit_bus;
#include scripts\zm\replaced\zm_transit_distance_tracking;
#include scripts\zm\replaced\_zm_riotshield;
#include scripts\zm\replaced\_zm_ai_avogadro;
#include scripts\zm\replaced\_zm_ai_screecher;
@ -36,6 +37,7 @@ main()
replaceFunc(maps\mp\zm_transit_ai_screecher::player_wait_land, scripts\zm\replaced\zm_transit_ai_screecher::player_wait_land);
replaceFunc(maps\mp\zm_transit_bus::bussetup, scripts\zm\replaced\zm_transit_bus::bussetup);
replaceFunc(maps\mp\zm_transit_bus::busscheduleadd, scripts\zm\replaced\zm_transit_bus::busscheduleadd);
replaceFunc(maps\mp\zm_transit_distance_tracking::delete_zombie_noone_looking, scripts\zm\replaced\zm_transit_distance_tracking::delete_zombie_noone_looking);
replaceFunc(maps\mp\zombies\_zm_ai_avogadro::check_range_attack, scripts\zm\replaced\_zm_ai_avogadro::check_range_attack);
replaceFunc(maps\mp\zombies\_zm_ai_avogadro::avogadro_exit, scripts\zm\replaced\_zm_ai_avogadro::avogadro_exit);
replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_spawning_logic, scripts\zm\replaced\_zm_ai_screecher::screecher_spawning_logic);