1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-08 06:12:17 -05:00
BO2-Reimagined/scripts/zm/replaced/_zm_weap_blundersplat.gsc

192 lines
4.4 KiB
Plaintext

#include maps\mp\zombies\_zm_weap_blundersplat;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\animscripts\zm_shared;
init()
{
if (!maps\mp\zombies\_zm_weapons::is_weapon_included("blundergat_zm"))
return;
else
{
precacheitem("blundersplat_bullet_zm");
precacheitem("blundersplat_explosive_dart_zm");
precacheitem("blundersplat_bullet_upgraded_zm");
precacheitem("blundersplat_explosive_dart_upgraded_zm");
}
level.zombie_spawners = getentarray("zombie_spawner", "script_noteworthy");
array_thread(level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit);
level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
level._effect["dart_light"] = loadfx("weapon/crossbow/fx_trail_crossbow_blink_grn_os");
onplayerconnect_callback(::blundersplat_on_player_connect);
}
wait_for_blundersplat_fired()
{
self endon("disconnect");
self waittill("spawned_player");
for (;;)
{
self waittill("weapon_fired", str_weapon);
if (str_weapon == "blundersplat_zm")
{
self remove_clip_ammo(str_weapon);
for (i = 0; i < weaponclipsize(str_weapon); i++)
{
_titus_locate_target(1, i);
}
}
}
}
wait_for_blundersplat_upgraded_fired()
{
self endon("disconnect");
self waittill("spawned_player");
for (;;)
{
self waittill("weapon_fired", str_weapon);
if (str_weapon == "blundersplat_upgraded_zm")
{
self remove_clip_ammo(str_weapon);
for (i = 0; i < weaponclipsize(str_weapon); i++)
{
_titus_locate_target(0, i);
}
}
}
}
remove_clip_ammo(str_weapon)
{
self setweaponammoclip(str_weapon, 0);
if (self getammocount(str_weapon) == 0)
{
self thread force_weapon_switch(str_weapon);
}
}
force_weapon_switch(str_weapon)
{
self endon("disconnect");
wait weaponfiretime(str_weapon);
if (self getcurrentweapon() != str_weapon)
{
return;
}
primary_weapons = self getweaponslistprimaries();
str_weapon_ind = 0;
foreach (primary_weapon_ind, primary_weapon in primary_weapons)
{
if (primary_weapon == str_weapon)
{
str_weapon_ind = primary_weapon_ind;
break;
}
}
switch_to_weapon_ind = (str_weapon_ind + 1) % primary_weapons.size;
self switchtoweapon(primary_weapons[switch_to_weapon_ind]);
}
_titus_locate_target(is_not_upgraded = 1, count)
{
fire_angles = self getplayerangles();
fire_origin = self getplayercamerapos();
if (is_not_upgraded)
{
bullet_name = "blundersplat_bullet_zm";
n_fuse_timer = randomfloatrange(1.0, 2.5);
}
else
{
bullet_name = "blundersplat_bullet_upgraded_zm";
n_fuse_timer = randomfloatrange(3.0, 4.0);
}
n_spread = 6;
if (self hasPerk("specialty_deadshot"))
{
n_spread *= getdvarfloat("perk_weapSpreadMultiplier");
}
if (count == 2)
{
fire_angles += (0, n_spread, 0);
}
else if (count == 0)
{
fire_angles += (0, n_spread / 3, 0);
}
else if (count == 1)
{
fire_angles -= (0, n_spread / 3, 0);
}
else if (count == 3)
{
fire_angles -= (0, n_spread, 0);
}
vec = anglestoforward(fire_angles);
trace_end = fire_origin + vec * 20000;
trace = bullettrace(fire_origin, trace_end, 1, self);
offsetpos = trace["position"];
e_dart = magicbullet(bullet_name, fire_origin, offsetpos, self);
e_dart thread _titus_reset_grenade_fuse(n_fuse_timer, is_not_upgraded);
}
_titus_reset_grenade_fuse(n_fuse_timer = randomfloatrange(1, 1.5), is_not_upgraded = 1)
{
self waittill("death");
a_grenades = getentarray("grenade", "classname");
foreach (e_grenade in a_grenades)
{
if (isdefined(e_grenade.model) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined(e_grenade.fuse_reset))
{
e_grenade.fuse_reset = 1;
e_grenade.fuse_time = n_fuse_timer;
e_grenade resetmissiledetonationtime(n_fuse_timer);
if (is_not_upgraded)
e_grenade create_zombie_point_of_interest(250, 5, 10000);
else
e_grenade create_zombie_point_of_interest(500, 10, 10000);
return;
}
}
}
_titus_target_animate_and_die(n_fuse_timer, inflictor)
{
self endon("death");
self endon("titus_target_timeout");
self thread _titus_target_timeout(n_fuse_timer);
self thread _titus_check_for_target_death(inflictor);
self thread _blundersplat_target_acid_stun_anim();
wait(n_fuse_timer);
self notify("killed_by_a_blundersplat", inflictor);
self dodamage(self.health + 1000, self.origin, inflictor);
}