mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
uploading _zm_weap_blundersplat as a baseline
This commit is contained in:
parent
09c64d14cf
commit
bcbe7ac589
340
zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc
Normal file
340
zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc
Normal file
@ -0,0 +1,340 @@
|
||||
#include maps/mp/animscripts/zm_shared;
|
||||
#include maps/mp/zombies/_zm_spawner;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_net;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
init()
|
||||
{
|
||||
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "blundergat_zm" ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
precacheitem( "blundersplat_bullet_zm" );
|
||||
precacheitem( "blundersplat_explosive_dart_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 );
|
||||
}
|
||||
|
||||
blundersplat_on_player_connect()
|
||||
{
|
||||
self thread wait_for_blundersplat_fired();
|
||||
self thread wait_for_blundersplat_upgraded_fired();
|
||||
}
|
||||
|
||||
zombie_wait_for_blundersplat_hit()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||
if ( weaponname == "blundersplat_bullet_zm" )
|
||||
{
|
||||
if ( !isDefined( self.titus_tagged ) )
|
||||
{
|
||||
a_grenades = getentarray( "grenade", "classname" );
|
||||
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
self.titus_tagged = 1;
|
||||
_a66 = a_grenades;
|
||||
_k66 = getFirstArrayKey( _a66 );
|
||||
while ( isDefined( _k66 ) )
|
||||
{
|
||||
e_grenade = _a66[ _k66 ];
|
||||
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||
{
|
||||
if ( e_grenade islinkedto( self ) )
|
||||
{
|
||||
while ( 1 )
|
||||
{
|
||||
if ( !isDefined( e_grenade.fuse_time ) )
|
||||
{
|
||||
wait_network_frame();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
n_fuse_timer = e_grenade.fuse_time;
|
||||
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
||||
}
|
||||
}
|
||||
_k66 = getNextArrayKey( _a66, _k66 );
|
||||
}
|
||||
self thread _titus_target_animate_and_die( n_fuse_timer, inflictor );
|
||||
self thread _titus_target_check_for_grenade_hits();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_blundersplat_fired()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self waittill( "spawned_player" );
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "weapon_fired", str_weapon );
|
||||
if ( str_weapon == "blundersplat_zm" )
|
||||
{
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 1 );
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 1 );
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 1 );
|
||||
}
|
||||
wait 0,5;
|
||||
}
|
||||
}
|
||||
|
||||
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" )
|
||||
{
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 0 );
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 0 );
|
||||
wait_network_frame();
|
||||
_titus_locate_target( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_titus_locate_target( is_not_upgraded )
|
||||
{
|
||||
if ( !isDefined( is_not_upgraded ) )
|
||||
{
|
||||
is_not_upgraded = 1;
|
||||
}
|
||||
fire_angles = self getplayerangles();
|
||||
fire_origin = self getplayercamerapos();
|
||||
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
|
||||
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
|
||||
if ( is_not_upgraded )
|
||||
{
|
||||
n_fuse_timer = randomfloatrange( 1, 2,5 );
|
||||
}
|
||||
else
|
||||
{
|
||||
n_fuse_timer = randomfloatrange( 3, 4 );
|
||||
}
|
||||
_a161 = a_targets;
|
||||
_k161 = getFirstArrayKey( _a161 );
|
||||
while ( isDefined( _k161 ) )
|
||||
{
|
||||
target = _a161[ _k161 ];
|
||||
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
|
||||
{
|
||||
if ( isai( target ) )
|
||||
{
|
||||
if ( !isDefined( target.titusmarked ) )
|
||||
{
|
||||
a_tags = [];
|
||||
a_tags[ 0 ] = "j_hip_le";
|
||||
a_tags[ 1 ] = "j_hip_ri";
|
||||
a_tags[ 2 ] = "j_spine4";
|
||||
a_tags[ 3 ] = "j_elbow_le";
|
||||
a_tags[ 4 ] = "j_elbow_ri";
|
||||
a_tags[ 5 ] = "j_clavicle_le";
|
||||
a_tags[ 6 ] = "j_clavicle_ri";
|
||||
str_tag = a_tags[ randomint( a_tags.size ) ];
|
||||
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
|
||||
if ( b_trace_pass )
|
||||
{
|
||||
target thread _titus_marked();
|
||||
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self );
|
||||
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
_k161 = getNextArrayKey( _a161, _k161 );
|
||||
}
|
||||
vec = anglesToForward( fire_angles );
|
||||
trace_end = fire_origin + ( vec * 20000 );
|
||||
trace = bullettrace( fire_origin, trace_end, 1, self );
|
||||
offsetpos = trace[ "position" ] + _titus_get_spread( 80 );
|
||||
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
|
||||
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
|
||||
}
|
||||
|
||||
_titus_get_spread( n_spread )
|
||||
{
|
||||
n_x = randomintrange( n_spread * -1, n_spread );
|
||||
n_y = randomintrange( n_spread * -1, n_spread );
|
||||
n_z = randomintrange( n_spread * -1, n_spread );
|
||||
return ( n_x, n_y, n_z );
|
||||
}
|
||||
|
||||
_titus_marked()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.titusmarked = 1;
|
||||
wait 1;
|
||||
self.titusmarked = undefined;
|
||||
}
|
||||
|
||||
_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" );
|
||||
self dodamage( self.health + 1000, self.origin );
|
||||
}
|
||||
|
||||
_titus_target_check_for_grenade_hits()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "titus_target_timeout" );
|
||||
while ( 1 )
|
||||
{
|
||||
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||
while ( weaponname == "blundersplat_bullet_zm" )
|
||||
{
|
||||
a_grenades = getentarray( "grenade", "classname" );
|
||||
_a317 = a_grenades;
|
||||
_k317 = getFirstArrayKey( _a317 );
|
||||
while ( isDefined( _k317 ) )
|
||||
{
|
||||
e_grenade = _a317[ _k317 ];
|
||||
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
|
||||
{
|
||||
if ( e_grenade islinkedto( self ) )
|
||||
{
|
||||
e_grenade thread _titus_grenade_detonate_on_target_death( self );
|
||||
}
|
||||
}
|
||||
_k317 = getNextArrayKey( _a317, _k317 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_titus_target_timeout( n_fuse_timer )
|
||||
{
|
||||
self endon( "death" );
|
||||
wait n_fuse_timer;
|
||||
self notify( "titus_target_timeout" );
|
||||
}
|
||||
|
||||
_titus_check_for_target_death( inflictor )
|
||||
{
|
||||
self waittill( "death" );
|
||||
self notify( "killed_by_a_blundersplat" );
|
||||
self notify( "titus_target_killed" );
|
||||
}
|
||||
|
||||
_titus_grenade_detonate_on_target_death( target )
|
||||
{
|
||||
self endon( "death" );
|
||||
target endon( "titus_target_timeout" );
|
||||
target waittill( "titus_target_killed" );
|
||||
self.fuse_reset = 1;
|
||||
self resetmissiledetonationtime( 0,05 );
|
||||
}
|
||||
|
||||
_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded )
|
||||
{
|
||||
if ( !isDefined( is_not_upgraded ) )
|
||||
{
|
||||
is_not_upgraded = 1;
|
||||
}
|
||||
if ( !isDefined( n_fuse_timer ) )
|
||||
{
|
||||
n_fuse_timer = randomfloatrange( 1, 1,5 );
|
||||
}
|
||||
self waittill( "death" );
|
||||
a_grenades = getentarray( "grenade", "classname" );
|
||||
_a375 = a_grenades;
|
||||
_k375 = getFirstArrayKey( _a375 );
|
||||
while ( isDefined( _k375 ) )
|
||||
{
|
||||
e_grenade = _a375[ _k375 ];
|
||||
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;
|
||||
}
|
||||
_k375 = getNextArrayKey( _a375, _k375 );
|
||||
}
|
||||
}
|
||||
|
||||
gib_on_blundergat_damage( refs, point, weaponname )
|
||||
{
|
||||
new_gib_ref = [];
|
||||
if ( isDefined( level.no_gib_in_wolf_area ) )
|
||||
{
|
||||
if ( [[ level.no_gib_in_wolf_area ]]() )
|
||||
{
|
||||
return new_gib_ref;
|
||||
}
|
||||
}
|
||||
if ( self.health <= 0 )
|
||||
{
|
||||
return refs;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
|
||||
{
|
||||
new_gib_ref = self maps/mp/zombies/_zm_spawner::derive_damage_refs( point );
|
||||
return new_gib_ref;
|
||||
}
|
||||
}
|
||||
return refs;
|
||||
}
|
||||
|
||||
_blundersplat_target_acid_stun_anim()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
{
|
||||
ground_ent = self getgroundent();
|
||||
if ( isDefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
|
||||
{
|
||||
self linkto( ground_ent );
|
||||
}
|
||||
if ( is_true( self.has_legs ) )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_blundersplat_stun" );
|
||||
}
|
||||
else
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" );
|
||||
}
|
||||
self maps/mp/animscripts/zm_shared::donotetracks( "blundersplat_stunned_anim" );
|
||||
}
|
||||
}
|
@ -21,6 +21,7 @@ zm_prison_patch/maps/mp/zombies/_zm_perk_divetonuke.gsc
|
||||
```
|
||||
### The following scripts are not checked yet, uploaded to setup a baseline:
|
||||
```
|
||||
zm_prison_patch/maps/mp/zombies/_zm_weap_blundersplat.gsc
|
||||
```
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user