mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 07:08:06 -05:00
191 lines
4.6 KiB
Plaintext
191 lines
4.6 KiB
Plaintext
#include maps\mp\zombies\_zm_equip_springpad;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\zombies\_zm_equipment;
|
|
#include maps\mp\gametypes_zm\_weaponobjects;
|
|
#include maps\mp\zombies\_zm;
|
|
#include maps\mp\zombies\_zm_unitrigger;
|
|
#include maps\mp\zombies\_zm_power;
|
|
#include maps\mp\zombies\_zm_buildables;
|
|
|
|
springpadthink(weapon, electricradius, armed)
|
|
{
|
|
self endon("death");
|
|
self endon("disconnect");
|
|
self endon("equip_springpad_zm_taken");
|
|
weapon endon("death");
|
|
radiussquared = electricradius * electricradius;
|
|
trigger = spawn("trigger_box", weapon getcentroid(), 1, 48, 48, 32);
|
|
trigger.origin += anglestoforward(flat_angle(weapon.angles)) * -15;
|
|
trigger.angles = weapon.angles;
|
|
trigger enablelinkto();
|
|
trigger linkto(weapon);
|
|
weapon.trigger = trigger;
|
|
weapon thread springpadthinkcleanup(trigger);
|
|
direction_forward = anglestoforward(flat_angle(weapon.angles) + vectorscale((-1, 0, 0), 60.0));
|
|
direction_vector = vectorscale(direction_forward, 1024);
|
|
direction_origin = weapon.origin + direction_vector;
|
|
home_angles = weapon.angles;
|
|
weapon.is_armed = 0;
|
|
self thread springpad_fx(weapon);
|
|
self thread springpad_animate(weapon, armed);
|
|
|
|
weapon waittill("armed");
|
|
|
|
weapon.is_armed = 1;
|
|
weapon.fling_targets = [];
|
|
self thread targeting_thread(weapon, trigger);
|
|
|
|
while (isdefined(weapon))
|
|
{
|
|
wait_for_targets(weapon);
|
|
|
|
if (isdefined(weapon.fling_targets) && weapon.fling_targets.size > 0)
|
|
{
|
|
weapon notify("fling", weapon.zombies_only);
|
|
weapon.is_armed = 0;
|
|
weapon.zombies_only = 1;
|
|
|
|
weapon.springpad_kills++;
|
|
|
|
foreach (ent in weapon.fling_targets)
|
|
{
|
|
if (isplayer(ent))
|
|
{
|
|
ent thread player_fling(weapon.origin + vectorscale((0, 0, 1), 30.0), weapon.angles, direction_vector, weapon);
|
|
continue;
|
|
}
|
|
|
|
if (isdefined(ent) && isdefined(ent.custom_springpad_fling))
|
|
{
|
|
if (!isdefined(self.num_zombies_flung))
|
|
self.num_zombies_flung = 0;
|
|
|
|
self.num_zombies_flung++;
|
|
self notify("zombie_flung");
|
|
ent thread [[ent.custom_springpad_fling]](weapon, self);
|
|
continue;
|
|
}
|
|
|
|
if (isdefined(ent))
|
|
{
|
|
if (!isdefined(self.num_zombies_flung))
|
|
self.num_zombies_flung = 0;
|
|
|
|
self.num_zombies_flung++;
|
|
self notify("zombie_flung");
|
|
|
|
if (!isdefined(weapon.fling_scaler))
|
|
weapon.fling_scaler = 1;
|
|
|
|
if (isdefined(weapon.direction_vec_override))
|
|
direction_vector = weapon.direction_vec_override;
|
|
|
|
ent dodamage(ent.health + 666, ent.origin);
|
|
ent startragdoll();
|
|
ent launchragdoll(direction_vector / 4 * weapon.fling_scaler);
|
|
}
|
|
}
|
|
|
|
weapon.fling_targets = [];
|
|
|
|
weapon waittill("armed");
|
|
|
|
weapon.is_armed = 1;
|
|
|
|
if (weapon.springpad_kills >= 15)
|
|
{
|
|
self thread springpad_expired(weapon);
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
player_fling(origin, angles, velocity, weapon)
|
|
{
|
|
torigin = (self.origin[0], self.origin[1], origin[2]);
|
|
aorigin = (origin + torigin) * 0.5;
|
|
trace = physicstrace(origin, torigin, vectorscale((-1, -1, 0), 15.0), (15, 15, 30), self);
|
|
|
|
self setorigin(aorigin);
|
|
wait_network_frame();
|
|
self setvelocity(velocity);
|
|
}
|
|
|
|
wait_for_targets(weapon)
|
|
{
|
|
weapon endon("hi_priority_target");
|
|
|
|
while (isdefined(weapon))
|
|
{
|
|
if (isdefined(weapon.fling_targets) && weapon.fling_targets.size > 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
#using_animtree("zombie_springpad");
|
|
|
|
springpad_animate(weapon, armed)
|
|
{
|
|
self endon("death");
|
|
self endon("disconnect");
|
|
self endon("equip_springpad_zm_taken");
|
|
weapon endon("death");
|
|
weapon useanimtree(#animtree);
|
|
f_animlength = getanimlength(%o_zombie_buildable_tramplesteam_reset_zombie);
|
|
r_animlength = getanimlength(%o_zombie_buildable_tramplesteam_reset);
|
|
l_animlength = getanimlength(%o_zombie_buildable_tramplesteam_launch);
|
|
weapon thread springpad_audio();
|
|
prearmed = 0;
|
|
|
|
if (isdefined(armed) && armed)
|
|
prearmed = 1;
|
|
|
|
fast_reset = 0;
|
|
|
|
while (isdefined(weapon))
|
|
{
|
|
if (!prearmed)
|
|
{
|
|
if (fast_reset)
|
|
{
|
|
weapon setanim(%o_zombie_buildable_tramplesteam_reset_zombie);
|
|
weapon thread playspringpadresetaudio(f_animlength);
|
|
wait(f_animlength);
|
|
}
|
|
else
|
|
{
|
|
weapon setanim(%o_zombie_buildable_tramplesteam_reset);
|
|
weapon thread playspringpadresetaudio(r_animlength);
|
|
wait(r_animlength);
|
|
}
|
|
}
|
|
else
|
|
wait 0.05;
|
|
|
|
prearmed = 0;
|
|
weapon notify("armed");
|
|
fast_reset = 1;
|
|
|
|
if (isdefined(weapon))
|
|
{
|
|
weapon setanim(%o_zombie_buildable_tramplesteam_compressed_idle);
|
|
|
|
weapon waittill("fling", fast);
|
|
}
|
|
|
|
if (isdefined(weapon))
|
|
{
|
|
weapon setanim(%o_zombie_buildable_tramplesteam_launch);
|
|
wait(l_animlength);
|
|
}
|
|
}
|
|
} |