mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-07 21:59:49 -05:00
Claymore: increase explosion radius Move certain vars to not exceed canonical string table limit
330 lines
7.5 KiB
Plaintext
330 lines
7.5 KiB
Plaintext
#include maps\mp\zombies\_zm_ai_screecher;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\_visionset_mgr;
|
|
#include maps\mp\animscripts\zm_shared;
|
|
#include maps\mp\zombies\_zm_spawner;
|
|
#include maps\mp\gametypes_zm\_hud_util;
|
|
#include maps\mp\zombies\_zm_laststand;
|
|
#include maps\mp\zombies\_zm_audio;
|
|
#include maps\mp\zombies\_zm_stats;
|
|
|
|
screecher_spawning_logic()
|
|
{
|
|
level endon("intermission");
|
|
|
|
if (level.intermission)
|
|
return;
|
|
|
|
if (level.screecher_spawners.size < 1)
|
|
{
|
|
return;
|
|
}
|
|
|
|
while (true)
|
|
{
|
|
while (!isdefined(level.zombie_screecher_locations) || level.zombie_screecher_locations.size <= 0)
|
|
wait 0.1;
|
|
|
|
while (getdvarint("scr_screecher_ignore_player"))
|
|
wait 0.1;
|
|
|
|
if (!flag("spawn_zombies"))
|
|
flag_wait("spawn_zombies");
|
|
|
|
valid_players_in_screecher_zone = 0;
|
|
valid_players = [];
|
|
|
|
while (valid_players_in_screecher_zone <= level.zombie_screecher_count)
|
|
{
|
|
players = getplayers();
|
|
valid_players_in_screecher_zone = 0;
|
|
|
|
for (p = 0; p < players.size; p++)
|
|
{
|
|
if (is_player_valid(players[p]) && player_in_screecher_zone(players[p]) && !isdefined(players[p].screecher))
|
|
{
|
|
valid_players_in_screecher_zone++;
|
|
valid_players[valid_players.size] = players[p];
|
|
}
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
|
|
if (!isdefined(level.zombie_screecher_locations) || level.zombie_screecher_locations.size <= 0)
|
|
continue;
|
|
|
|
valid_players = array_randomize(valid_players);
|
|
|
|
spawn_points = get_array_of_closest(valid_players[0].origin, level.zombie_screecher_locations);
|
|
spawn_point = undefined;
|
|
|
|
if (!isdefined(spawn_points) || spawn_points.size == 0)
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
if (!isdefined(level.last_spawn))
|
|
{
|
|
level.last_spawn_index = 0;
|
|
level.last_spawn = [];
|
|
level.last_spawn[level.last_spawn_index] = spawn_points[0];
|
|
level.last_spawn_index = 1;
|
|
spawn_point = spawn_points[0];
|
|
}
|
|
else
|
|
{
|
|
foreach (point in spawn_points)
|
|
{
|
|
if (point == level.last_spawn[0])
|
|
continue;
|
|
|
|
if (isdefined(level.last_spawn[1]) && point == level.last_spawn[1])
|
|
continue;
|
|
|
|
spawn_point = point;
|
|
level.last_spawn[level.last_spawn_index] = spawn_point;
|
|
level.last_spawn_index++;
|
|
|
|
if (level.last_spawn_index > 1)
|
|
level.last_spawn_index = 0;
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (!isdefined(spawn_point))
|
|
spawn_point = spawn_points[0];
|
|
|
|
if (isdefined(level.screecher_spawners))
|
|
{
|
|
spawner = random(level.screecher_spawners);
|
|
ai = spawn_zombie(spawner, spawner.targetname, spawn_point);
|
|
}
|
|
|
|
if (isdefined(ai))
|
|
{
|
|
ai.spawn_point = spawn_point;
|
|
level.zombie_screecher_count++;
|
|
}
|
|
|
|
wait 5;
|
|
}
|
|
}
|
|
|
|
screecher_attacking()
|
|
{
|
|
player = self.favoriteenemy;
|
|
|
|
if (!isdefined(player))
|
|
{
|
|
self thread screecher_detach(player);
|
|
return;
|
|
}
|
|
|
|
if (screecher_should_runaway(player))
|
|
{
|
|
self thread screecher_detach(player);
|
|
player thread do_player_general_vox("general", "screecher_jumpoff");
|
|
return;
|
|
}
|
|
|
|
if (self.attack_time < gettime())
|
|
{
|
|
scratch_score = 5;
|
|
players = get_players();
|
|
self.screecher_score = self.screecher_score + scratch_score;
|
|
killed_player = self screecher_check_score();
|
|
|
|
if (player.health > 0 && !(isdefined(killed_player) && killed_player))
|
|
{
|
|
self.attack_delay = self.attack_delay_base + randomint(self.attack_delay_offset);
|
|
self.attack_time = gettime() + self.attack_delay;
|
|
self thread claw_fx(player, self.attack_delay * 0.001);
|
|
self playsound("zmb_vocals_screecher_attack");
|
|
player playsoundtoplayer("zmb_screecher_scratch", player);
|
|
player thread do_player_general_vox("general", "screecher_attack");
|
|
players = get_players();
|
|
}
|
|
}
|
|
}
|
|
|
|
screecher_melee_damage(player)
|
|
{
|
|
melee_score = 0;
|
|
|
|
if (player hasweapon("tazer_knuckles_zm"))
|
|
{
|
|
melee_score = 30;
|
|
}
|
|
else if (player hasweapon("bowie_knife_zm"))
|
|
{
|
|
melee_score = 15;
|
|
}
|
|
else
|
|
{
|
|
melee_score = 10;
|
|
}
|
|
|
|
if (self.screecher_score > 0)
|
|
{
|
|
if (melee_score > self.screecher_score)
|
|
{
|
|
self.screecher_score = 0;
|
|
}
|
|
else
|
|
{
|
|
self.screecher_score -= melee_score;
|
|
}
|
|
}
|
|
|
|
if (self.screecher_score <= 0)
|
|
{
|
|
self.player_score += melee_score;
|
|
}
|
|
|
|
self playsound("zmb_vocals_screecher_pain");
|
|
|
|
if (level.zombie_vars[player.team]["zombie_insta_kill"])
|
|
self.player_score = 30;
|
|
else
|
|
player thread do_player_general_vox("general", "screecher_cut");
|
|
|
|
self screecher_check_score();
|
|
}
|
|
|
|
screecher_detach(player)
|
|
{
|
|
self endon("death");
|
|
self.state = "detached";
|
|
|
|
if (!isdefined(self.linked_ent))
|
|
return;
|
|
|
|
if (isdefined(player))
|
|
{
|
|
player clientnotify("scrEnd");
|
|
|
|
player allowprone(1);
|
|
|
|
player takeweapon("screecher_arms_zm");
|
|
|
|
// if ( !getdvarint( _hash_E7EF8EB7 ) )
|
|
player stoppoisoning();
|
|
|
|
if (!player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !(isdefined(player.intermission) && player.intermission))
|
|
player decrement_is_drinking();
|
|
|
|
if (isdefined(player.screecher_weapon) && player.screecher_weapon != "none" && is_player_valid(player) && !is_equipment_that_blocks_purchase(player.screecher_weapon))
|
|
player switchtoweapon(player.screecher_weapon);
|
|
else if (!player maps\mp\zombies\_zm_laststand::player_is_in_laststand())
|
|
{
|
|
primaryweapons = player getweaponslistprimaries();
|
|
|
|
if (isdefined(primaryweapons) && primaryweapons.size > 0)
|
|
player switchtoweapon(primaryweapons[0]);
|
|
}
|
|
|
|
player.screecher_weapon = undefined;
|
|
}
|
|
|
|
self unlink();
|
|
self setclientfield("render_third_person", 0);
|
|
|
|
if (isdefined(self.linked_ent))
|
|
{
|
|
self.linked_ent.screecher = undefined;
|
|
self.linked_ent setmovespeedscale(1);
|
|
self.linked_ent = undefined;
|
|
}
|
|
|
|
self.green_light = player.green_light;
|
|
self animcustom(::screecher_jump_down);
|
|
|
|
self waittill("jump_down_done");
|
|
|
|
maps\mp\_visionset_mgr::vsmgr_deactivate("overlay", "zm_ai_screecher_blur", player);
|
|
self animmode("normal");
|
|
self.ignoreall = 1;
|
|
self setplayercollision(1);
|
|
|
|
if (isdefined(level.screecher_should_burrow))
|
|
{
|
|
if (self [[level.screecher_should_burrow]]())
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
|
|
self thread screecher_runaway();
|
|
}
|
|
|
|
screecher_cleanup()
|
|
{
|
|
self waittill("death", attacker);
|
|
|
|
if (isdefined(attacker) && isplayer(attacker))
|
|
{
|
|
if (isdefined(self.damagelocation) && isdefined(self.damagemod))
|
|
level thread maps\mp\zombies\_zm_audio::player_zombie_kill_vox(self.damagelocation, attacker, self.damagemod, self);
|
|
}
|
|
|
|
if (isdefined(self.loopsoundent))
|
|
{
|
|
self.loopsoundent delete();
|
|
self.loopsoundent = undefined;
|
|
}
|
|
|
|
player = self.linked_ent;
|
|
|
|
if (isdefined(player))
|
|
{
|
|
player playsound("zmb_vocals_screecher_death");
|
|
player setmovespeedscale(1);
|
|
maps\mp\_visionset_mgr::vsmgr_deactivate("overlay", "zm_ai_screecher_blur", player);
|
|
|
|
if (isdefined(player.screecher_weapon))
|
|
{
|
|
player clientnotify("scrEnd");
|
|
|
|
player allowprone(1);
|
|
|
|
player takeweapon("screecher_arms_zm");
|
|
|
|
// if ( !getdvarint( _hash_E7EF8EB7 ) )
|
|
player stoppoisoning();
|
|
|
|
if (!player maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !(isdefined(player.intermission) && player.intermission))
|
|
player decrement_is_drinking();
|
|
|
|
if (player.screecher_weapon != "none" && is_player_valid(player))
|
|
player switchtoweapon(player.screecher_weapon);
|
|
else
|
|
{
|
|
primaryweapons = player getweaponslistprimaries();
|
|
|
|
if (isdefined(primaryweapons) && primaryweapons.size > 0)
|
|
player switchtoweapon(primaryweapons[0]);
|
|
}
|
|
|
|
player.screecher_weapon = undefined;
|
|
}
|
|
}
|
|
|
|
if (isdefined(self.claw_fx))
|
|
self.claw_fx destroy();
|
|
|
|
if (isdefined(self.anchor))
|
|
self.anchor delete();
|
|
|
|
if (isdefined(level.screecher_cleanup))
|
|
self [[level.screecher_cleanup]]();
|
|
|
|
if (level.zombie_screecher_count > 0)
|
|
{
|
|
level.zombie_screecher_count--;
|
|
}
|
|
} |