mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-11 23:57:59 -05:00
Encounter on Docks: Tower Trap no longer stays targeted on a player
This commit is contained in:
@ -353,19 +353,18 @@ activate_tower_trap()
|
|||||||
foreach ( zombie in zombies )
|
foreach ( zombie in zombies )
|
||||||
{
|
{
|
||||||
if ( zombie istouching( self.range_trigger ) )
|
if ( zombie istouching( self.range_trigger ) )
|
||||||
|
{
|
||||||
zombies_sorted[zombies_sorted.size] = zombie;
|
zombies_sorted[zombies_sorted.size] = zombie;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( zombies_sorted.size <= 0 )
|
if ( zombies_sorted.size <= 0 )
|
||||||
{
|
{
|
||||||
wait_network_frame();
|
wait 0.05;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
self tower_trap_fires( zombies_sorted );
|
||||||
wait_network_frame();
|
|
||||||
self tower_trap_fires( zombies_sorted );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,37 +377,33 @@ tower_trap_fires( a_zombies )
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( a_zombies.size <= 0 )
|
if ( a_zombies.size <= 0 )
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self endon( "tower_trap_off" );
|
self endon( "tower_trap_off" );
|
||||||
e_org = getstruct( self.range_trigger.target, "targetname" );
|
e_org = getstruct( self.range_trigger.target, "targetname" );
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
|
|
||||||
while ( 1 )
|
while ( 1 )
|
||||||
{
|
{
|
||||||
|
if ( a_zombies.size <= 0 )
|
||||||
|
{
|
||||||
|
wait 0.05;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
n_index = randomintrange( 0, a_zombies.size );
|
||||||
e_target = a_zombies[n_index];
|
e_target = a_zombies[n_index];
|
||||||
|
|
||||||
if ( !isalive( e_target ) )
|
if ( !isalive( e_target ) )
|
||||||
{
|
{
|
||||||
arrayremovevalue( a_zombies, e_target, 0 );
|
arrayremovevalue( a_zombies, e_target, 0 );
|
||||||
|
|
||||||
if ( a_zombies.size <= 0 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isplayer( e_target ) && e_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
if ( isplayer( e_target ) && e_target maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||||
{
|
{
|
||||||
arrayremovevalue( a_zombies, e_target, 0 );
|
arrayremovevalue( a_zombies, e_target, 0 );
|
||||||
|
|
||||||
if ( a_zombies.size <= 0 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -417,17 +412,14 @@ tower_trap_fires( a_zombies )
|
|||||||
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
|
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
|
||||||
{
|
{
|
||||||
magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
|
magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
|
||||||
|
|
||||||
wait( self.trap_reload_time );
|
wait( self.trap_reload_time );
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
arrayremovevalue( a_zombies, e_target, 0 );
|
arrayremovevalue( a_zombies, e_target, 0 );
|
||||||
|
|
||||||
if ( a_zombies.size <= 0 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
n_index = randomintrange( 0, a_zombies.size );
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1706,37 +1706,11 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
|
|||||||
|
|
||||||
if ( isDefined( level._effect[ "butterflies" ] ) )
|
if ( isDefined( level._effect[ "butterflies" ] ) )
|
||||||
{
|
{
|
||||||
pos = vpoint;
|
self do_game_mode_stun_fx(einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime);
|
||||||
angle = vectorToAngles(eattacker getCentroid() - self getCentroid());
|
|
||||||
|
|
||||||
angle = (0, angle[1], 0);
|
|
||||||
stun_fx_amount = 3;
|
|
||||||
|
|
||||||
if(!isDefined(self.stun_fx))
|
|
||||||
{
|
|
||||||
// spawning in model right before playfx causes the fx not to play occasionally
|
|
||||||
// stun fx lasts longer than stun time, so alternate between different models
|
|
||||||
self.stun_fx = [];
|
|
||||||
self.stun_fx_ind = 0;
|
|
||||||
|
|
||||||
for(i = 0; i < stun_fx_amount; i++)
|
|
||||||
{
|
|
||||||
self.stun_fx[i] = spawn("script_model", pos);
|
|
||||||
self.stun_fx[i] setModel("tag_origin");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.stun_fx[self.stun_fx_ind] unlink();
|
|
||||||
self.stun_fx[self.stun_fx_ind].origin = pos;
|
|
||||||
self.stun_fx[self.stun_fx_ind].angles = angle;
|
|
||||||
self.stun_fx[self.stun_fx_ind] linkTo(self);
|
|
||||||
|
|
||||||
playFXOnTag(level._effect["butterflies"], self.stun_fx[self.stun_fx_ind], "tag_origin");
|
|
||||||
|
|
||||||
self.stun_fx_ind = (self.stun_fx_ind + 1) % stun_fx_amount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread do_game_mode_shellshock();
|
self thread do_game_mode_shellshock();
|
||||||
|
self playsound( "zmb_player_hit_ding" );
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1875,42 +1849,7 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
|
|||||||
|
|
||||||
if ( isDefined( level._effect[ "butterflies" ] ) )
|
if ( isDefined( level._effect[ "butterflies" ] ) )
|
||||||
{
|
{
|
||||||
pos = vpoint;
|
self do_game_mode_stun_fx(einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime);
|
||||||
angle = vectorToAngles(eattacker getCentroid() - self getCentroid());
|
|
||||||
|
|
||||||
if ( (isDefined( sweapon ) && weapontype( sweapon ) == "grenade") || (isDefined( sweapon ) && weapontype( sweapon ) == "projectile") )
|
|
||||||
{
|
|
||||||
pos_offset = vectorNormalize(vpoint - self getCentroid()) * 8;
|
|
||||||
pos_offset = (pos_offset[0], pos_offset[1], 0);
|
|
||||||
pos = self getCentroid() + pos_offset;
|
|
||||||
angle = vectorToAngles(vpoint - self getCentroid());
|
|
||||||
}
|
|
||||||
|
|
||||||
angle = (0, angle[1], 0);
|
|
||||||
stun_fx_amount = 3;
|
|
||||||
|
|
||||||
if(!isDefined(self.stun_fx))
|
|
||||||
{
|
|
||||||
// spawning in model right before playfx causes the fx not to play occasionally
|
|
||||||
// stun fx lasts longer than stun time, so alternate between different models
|
|
||||||
self.stun_fx = [];
|
|
||||||
self.stun_fx_ind = 0;
|
|
||||||
|
|
||||||
for(i = 0; i < stun_fx_amount; i++)
|
|
||||||
{
|
|
||||||
self.stun_fx[i] = spawn("script_model", pos);
|
|
||||||
self.stun_fx[i] setModel("tag_origin");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.stun_fx[self.stun_fx_ind] unlink();
|
|
||||||
self.stun_fx[self.stun_fx_ind].origin = pos;
|
|
||||||
self.stun_fx[self.stun_fx_ind].angles = angle;
|
|
||||||
self.stun_fx[self.stun_fx_ind] linkTo(self);
|
|
||||||
|
|
||||||
playFXOnTag(level._effect["butterflies"], self.stun_fx[self.stun_fx_ind], "tag_origin");
|
|
||||||
|
|
||||||
self.stun_fx_ind = (self.stun_fx_ind + 1) % stun_fx_amount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread do_game_mode_shellshock(is_melee, is_weapon_upgraded(sweapon));
|
self thread do_game_mode_shellshock(is_melee, is_weapon_upgraded(sweapon));
|
||||||
@ -1933,6 +1872,46 @@ game_module_player_damage_callback( einflictor, eattacker, idamage, idflags, sme
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_game_mode_stun_fx(einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime)
|
||||||
|
{
|
||||||
|
pos = vpoint;
|
||||||
|
angle = vectorToAngles(eattacker getCentroid() - self getCentroid());
|
||||||
|
|
||||||
|
if ( (isDefined( sweapon ) && weapontype( sweapon ) == "grenade") || (isDefined( sweapon ) && weapontype( sweapon ) == "projectile") )
|
||||||
|
{
|
||||||
|
pos_offset = vectorNormalize(vpoint - self getCentroid()) * 8;
|
||||||
|
pos_offset = (pos_offset[0], pos_offset[1], 0);
|
||||||
|
pos = self getCentroid() + pos_offset;
|
||||||
|
angle = vectorToAngles(vpoint - self getCentroid());
|
||||||
|
}
|
||||||
|
|
||||||
|
angle = (0, angle[1], 0);
|
||||||
|
stun_fx_amount = 3;
|
||||||
|
|
||||||
|
if(!isDefined(self.stun_fx))
|
||||||
|
{
|
||||||
|
// spawning in model right before playfx causes the fx not to play occasionally
|
||||||
|
// stun fx lasts longer than stun time, so alternate between different models
|
||||||
|
self.stun_fx = [];
|
||||||
|
self.stun_fx_ind = 0;
|
||||||
|
|
||||||
|
for(i = 0; i < stun_fx_amount; i++)
|
||||||
|
{
|
||||||
|
self.stun_fx[i] = spawn("script_model", pos);
|
||||||
|
self.stun_fx[i] setModel("tag_origin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.stun_fx[self.stun_fx_ind] unlink();
|
||||||
|
self.stun_fx[self.stun_fx_ind].origin = pos;
|
||||||
|
self.stun_fx[self.stun_fx_ind].angles = angle;
|
||||||
|
self.stun_fx[self.stun_fx_ind] linkTo(self);
|
||||||
|
|
||||||
|
playFXOnTag(level._effect["butterflies"], self.stun_fx[self.stun_fx_ind], "tag_origin");
|
||||||
|
|
||||||
|
self.stun_fx_ind = (self.stun_fx_ind + 1) % stun_fx_amount;
|
||||||
|
}
|
||||||
|
|
||||||
do_game_mode_shellshock(is_melee = 0, is_upgraded = 0)
|
do_game_mode_shellshock(is_melee = 0, is_upgraded = 0)
|
||||||
{
|
{
|
||||||
self notify( "do_game_mode_shellshock" );
|
self notify( "do_game_mode_shellshock" );
|
||||||
|
Reference in New Issue
Block a user