mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-07 21:59:49 -05:00
155 lines
4.5 KiB
Plaintext
155 lines
4.5 KiB
Plaintext
#include maps\mp\zombies\_zm_weap_slowgun;
|
|
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\zombies\_zm_weapons;
|
|
#include maps\mp\zombies\_zm_spawner;
|
|
#include maps\mp\zombies\_zm_powerups;
|
|
#include maps\mp\zombies\_zm_score;
|
|
#include maps\mp\zombies\_zm_audio;
|
|
|
|
init()
|
|
{
|
|
if (!maps\mp\zombies\_zm_weapons::is_weapon_included("slowgun_zm"))
|
|
return;
|
|
|
|
registerclientfield("actor", "slowgun_fx", 12000, 3, "int");
|
|
registerclientfield("actor", "anim_rate", 7000, 5, "float");
|
|
registerclientfield("allplayers", "anim_rate", 7000, 5, "float");
|
|
registerclientfield("toplayer", "sndParalyzerLoop", 12000, 1, "int");
|
|
registerclientfield("toplayer", "slowgun_fx", 12000, 1, "int");
|
|
level.sliquifier_distance_checks = 0;
|
|
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic(::slowgun_on_zombie_spawned);
|
|
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback(::slowgun_zombie_damage_response);
|
|
maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback(::slowgun_zombie_death_response);
|
|
level._effect["zombie_slowgun_explosion"] = loadfx("weapon/paralyzer/fx_paralyzer_body_disintegrate");
|
|
level._effect["zombie_slowgun_explosion_ug"] = loadfx("weapon/paralyzer/fx_paralyzer_body_disintegrate_ug");
|
|
level._effect["zombie_slowgun_sizzle"] = loadfx("weapon/paralyzer/fx_paralyzer_hit_dmg");
|
|
level._effect["zombie_slowgun_sizzle_ug"] = loadfx("weapon/paralyzer/fx_paralyzer_hit_dmg_ug");
|
|
level._effect["player_slowgun_sizzle"] = loadfx("weapon/paralyzer/fx_paralyzer_hit_noharm");
|
|
level._effect["player_slowgun_sizzle_ug"] = loadfx("weapon/paralyzer/fx_paralyzer_hit_noharm");
|
|
level._effect["player_slowgun_sizzle_1st"] = loadfx("weapon/paralyzer/fx_paralyzer_hit_noharm_view");
|
|
onplayerconnect_callback(::slowgun_player_connect);
|
|
level.slowgun_damage = 40;
|
|
level.slowgun_damage_ug = 60;
|
|
level.slowgun_damage_mod = "MOD_PROJECTILE_SPLASH";
|
|
precacherumble("damage_heavy");
|
|
}
|
|
|
|
slowgun_on_zombie_spawned()
|
|
{
|
|
self set_anim_rate(1.0);
|
|
self.paralyzer_hit_callback = ::zombie_paralyzed;
|
|
self.paralyzer_damaged_multiplier = 1;
|
|
self.paralyzer_score_time_ms = gettime();
|
|
self.paralyzer_slowtime = 0;
|
|
self setclientfield("slowgun_fx", 0);
|
|
}
|
|
|
|
zombie_paralyzed(player, upgraded)
|
|
{
|
|
if (!can_be_paralyzed(self))
|
|
return;
|
|
|
|
insta = player maps\mp\zombies\_zm_powerups::is_insta_kill_active();
|
|
|
|
if (upgraded)
|
|
self setclientfield("slowgun_fx", 5);
|
|
else
|
|
self setclientfield("slowgun_fx", 1);
|
|
|
|
if (self.slowgun_anim_rate <= 0.1 || insta && self.slowgun_anim_rate <= 0.5)
|
|
{
|
|
if (upgraded)
|
|
damage = level.slowgun_damage_ug;
|
|
else
|
|
damage = level.slowgun_damage;
|
|
|
|
damage *= randomfloatrange(0.667, 1.5);
|
|
damage *= self.paralyzer_damaged_multiplier;
|
|
|
|
if (!isdefined(self.paralyzer_damage))
|
|
self.paralyzer_damage = 0;
|
|
|
|
// if ( self.paralyzer_damage > 47073 )
|
|
// damage *= 47073 / self.paralyzer_damage;
|
|
|
|
self.paralyzer_damage += damage;
|
|
|
|
if (insta)
|
|
damage = self.health + 666;
|
|
|
|
if (isalive(self))
|
|
self dodamage(damage, player.origin, player, player, "none", level.slowgun_damage_mod, 0, "slowgun_zm");
|
|
|
|
self.paralyzer_damaged_multiplier *= 1.15;
|
|
self.paralyzer_damaged_multiplier = min(self.paralyzer_damaged_multiplier, 50);
|
|
}
|
|
else
|
|
self.paralyzer_damaged_multiplier = 1;
|
|
|
|
self zombie_slow_for_time(0.2);
|
|
}
|
|
|
|
player_slow_for_time(time)
|
|
{
|
|
if (is_true(self._being_shellshocked))
|
|
{
|
|
return;
|
|
}
|
|
|
|
self notify("player_slow_for_time");
|
|
self endon("player_slow_for_time");
|
|
self endon("disconnect");
|
|
|
|
if (!is_true(self.slowgun_flying))
|
|
{
|
|
self thread player_fly_rumble();
|
|
}
|
|
|
|
self setclientfieldtoplayer("slowgun_fx", 1);
|
|
self set_anim_rate(0.1);
|
|
|
|
wait(time);
|
|
|
|
self set_anim_rate(1.0);
|
|
self setclientfieldtoplayer("slowgun_fx", 0);
|
|
self.slowgun_flying = 0;
|
|
}
|
|
|
|
watch_reset_anim_rate()
|
|
{
|
|
self set_anim_rate(1.0);
|
|
self setclientfieldtoplayer("slowgun_fx", 0);
|
|
|
|
while (1)
|
|
{
|
|
self waittill_any("spawned_player", "entering_last_stand", "player_revived", "player_suicide");
|
|
self setclientfieldtoplayer("slowgun_fx", 0);
|
|
self set_anim_rate(1.0);
|
|
}
|
|
}
|
|
|
|
slowgun_zombie_death_response()
|
|
{
|
|
if (!self is_slowgun_damage(self.damagemod, self.damageweapon))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
level maps\mp\zombies\_zm_spawner::zombie_death_points(self.origin, self.damagemod, self.damagelocation, self.attacker, self);
|
|
self thread explode_into_dust(self.attacker, self.damageweapon == "slowgun_upgraded_zm");
|
|
|
|
self slowgun_zombie_death_wait();
|
|
|
|
return true;
|
|
}
|
|
|
|
// fixes spawn delay for next zombies
|
|
slowgun_zombie_death_wait()
|
|
{
|
|
self set_anim_rate(1.0);
|
|
self.ignore_slowgun_anim_rates = 1;
|
|
|
|
wait 0.1;
|
|
} |