Posts
230
Respect
183Add +1
Forum Rank
Mr. Elemental
Primary Group
Member
Login Issues
Forgot password?Activate Issues
Account activation email not received? Wrong account activation email used?Other Problems?
Contact Support - Help Center Get help on the UGX Discord. Join it now!#include maps\_utility;
#include common_scripts\utility;
#include maps\_zombiemode_utility;
#include animscripts\Utility;
#using_animtree( "generic_human" );
init()
{
level.quad_in_round = false;
level.quad_count = 0;
level.quad_limit = 0;
// level.quad_max = 15;
init_quad_zombie_anims();
thread maps\_zombiemode_ai_quad::main();
}
main()
{
flag_wait("all_players_connected");
level thread wait_for_spawn();
level thread spawn_quad();
}
wait_for_spawn()
{
flag_wait( "electricity_on" );
// level.quad_max = level.zombie_total / 5;
thread round_reset();
while( 1 )
{
if( flag("dog_round" ) )
{
level.quad_active_on = undefined;
wait(7);
while( level.dog_intermission )
{
wait(0.5);
}
level.quad_active_on = undefined;
}
else
level.quad_active_on = true;
wait(0.5);
}
}
round_reset()
{
while(1)
{
level waittill("between_round_over");
// level.quad_max = level.zombie_total / 5;
level.quad_count = 0;
level.quad_limit = 0;
wait(0.5);
}
}
spawn_quad()
{
quad_points = GetEntArray( "quad_spawn", "targetname" );
chosen_spot = undefined;
if( !IsDefined( quad_points ) || quad_points.size == 0 )
return;
while( 1 )
{
if( isDefined( level.quad_active_on ) && level.quad_active_on == true )
{
num_zombies = getaiarray( "axis" );
if( level.quad_count < level.quad_max && level.quad_in_round && num_zombies > 10 )
{
wait( level.zombie_vars["zombie_spawn_delay"] );
quad_points = array_randomize( quad_points );
for( i = 0; i < quad_points.size; i++ )
{
_quad = spawn( "script_model", quad_points[i].origin );
_quad SetModel( "tag_origin" );
_quad linkTo( quad_points[i] );
_quad.angles = quad_points[i].angles;
_quad.origin = quad_points[i].origin;
if( zone_active( _quad ) )
{
chosen_spot = quad_points[i];
break;
}
wait 0.01;
_quad delete();
}
level.quad_count++;
level.quad_limit++;
iPrintLnBold("Quad Spawn " + level.quad_count + " -- Limite " + level.quad_limit );
quad = spawn_zombie( chosen_spot );
quad thread maps\_zombiemode::round_spawn_failsafe();
quad thread quad_prespawn();
while( quad_limit( level.quad_limit ) )
{
wait(0.5);
}
}
}
wait(0.5);
}
}
quad_limit( limit )
{
players = get_players();
if( ( players.size == 1 || players.size == 2 ) && limit == 5 )
return true;
else if( ( players.size == 3 || players.size == 4 ) && limit == 10 )
return true;
return false;
}
zone_active( np )
{
quad = Getentarray( "player_zone", "script_noteworthy" );
zone = undefined;
poi = false;
for( i=0; i < quad.size; i++ )
{
if( np istouching( quad[i]) )
{
zone = quad[i].targetname;
if( level.zones[ quad[i].targetname ].is_enabled )
{
poi = true;
}
}
}
return poi;
}
wait_for_leap()
{
while ( 1 )
{
wait( 5 );
self.custom_attack = true;
wait( .5 );
self.custom_attack = false;
}
}
quad_prespawn()
{
PlayFx(level._effect["quad_explo_gas"], self getTagOrigin("J_MainRoot"));
self.animname = "quad_zombie";
self.custom_idle_setup = maps\_zombiemode_ai_quad::quad_zombie_idle_setup;
self.a.idleAnimOverrideArray = [];
self.a.idleAnimOverrideArray["stand"] = [];
self.a.idleAnimOverrideArray["stand"] = [];
self.a.idleAnimOverrideArray["stand"][0][0] = %ai_zombie_quad_idle;
self.a.idleAnimOverrideWeights["stand"][0][0] = 10;
self.a.idleAnimOverrideArray["stand"][0][1] = %ai_zombie_quad_idle_2;
self.a.idleAnimOverrideWeights["stand"][0][1] = 10;
self.no_eye_glow = true;
self maps\_zombiemode_spawner::zombie_spawn_init( true );
self thread maps\_zombiemode_spawner::find_flesh();
self maps\_zombiemode_spawner::zombie_setup_attack_properties();
self.maxhealth = int( self.maxhealth * 0.75 );
self.health = self.maxhealth;
self.meleeDamage = 45;
sound_spawn = "quad_spawn_0" + randomint(4);
self playsound( sound_spawn );
//C. Ayers: This is the TEMP version of the Quad Gas Explosion Mechanic
self.death_explo_radius_zomb = 100; //Radius around the Quad the explosion will affect Zombies
self.death_explo_radius_plr = 100; //Radius around the Quad the explosion will affect Players
self.death_explo_damage_zomb = 1.05; //Damage done to Zombies with explosion, percentage of maxhealth
self.death_gas_radius = 125; //Radius around the Quad the gas will affect Players and Zombies
self.death_gas_time = 7; //Length of time Gas Cloud lasts on a specific quad
if ( isdefined( level.quad_explode ) && level.quad_explode == true )
{
self.deathanimscript = ::quad_post_death;
self.actor_killed_override = ::quad_killed_override;
}
self set_default_attack_properties();
self.pre_teleport_func = ::quad_pre_teleport;
self.post_teleport_func = ::quad_post_teleport;
self.can_explode = false;
self.exploded = false;
self.damagemod_wonder = false;
self thread quad_trail();
self thread quad_vox();
self thread quad_close();
self thread quad_post_death_NEW();
self thread maps\_zombiemode_ai_quad::quad_zombie_think();
if ( isdefined( level.quad_traverse_death_fx ) )
{
self thread [[ level.quad_traverse_death_fx ]]();
}
if ( isdefined( level.quad_prespawn ) )
{
self thread [[ level.quad_prespawn ]]();
}
}
quad_zombie_idle_setup()
{
self.a.array["turn_left_45"] = %exposed_tracking_turn45L;
self.a.array["turn_left_90"] = %exposed_tracking_turn90L;
self.a.array["turn_left_135"] = %exposed_tracking_turn135L;
self.a.array["turn_left_180"] = %exposed_tracking_turn180L;
self.a.array["turn_right_45"] = %exposed_tracking_turn45R;
self.a.array["turn_right_90"] = %exposed_tracking_turn90R;
self.a.array["turn_right_135"] = %exposed_tracking_turn135R;
self.a.array["turn_right_180"] = %exposed_tracking_turn180L;
self.a.array["exposed_idle"] = array( %ai_zombie_quad_idle, %ai_zombie_quad_idle_2 );
self.a.array["straight_level"] = %ai_zombie_quad_idle;
self.a.array["stand_2_crouch"] = %ai_zombie_shot_leg_right_2_crawl;
}
init_quad_zombie_anims()
{
// deaths
level.scr_anim["quad_zombie"]["death1"] = %ai_zombie_quad_death;
level.scr_anim["quad_zombie"]["death2"] = %ai_zombie_quad_death_2;
level.scr_anim["quad_zombie"]["death3"] = %ai_zombie_quad_death_3;
level.scr_anim["quad_zombie"]["death4"] = %ai_zombie_quad_death_4;
// run cycles
level.scr_anim["quad_zombie"]["walk1"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk2"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk3"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk4"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk5"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk6"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk7"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["walk8"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run1"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run2"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run3"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run4"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run5"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["run6"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["sprint1"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["sprint2"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["sprint3"] = %ai_zombie_quad_supersprint;
level.scr_anim["quad_zombie"]["sprint4"] = %ai_zombie_quad_supersprint;
// run cycles in prone
level.scr_anim["quad_zombie"]["crawl1"] = %ai_zombie_quad_crawl_1;
level.scr_anim["quad_zombie"]["crawl2"] = %ai_zombie_quad_crawl_1;
level.scr_anim["quad_zombie"]["crawl3"] = %ai_zombie_quad_crawl_2;
level.scr_anim["quad_zombie"]["crawl4"] = %ai_zombie_quad_crawl_2;
level.scr_anim["quad_zombie"]["crawl5"] = %ai_zombie_quad_crawl_3;
level.scr_anim["quad_zombie"]["crawl6"] = %ai_zombie_quad_crawl_3;
level.scr_anim["quad_zombie"]["crawl_hand_1"] = %ai_zombie_walk_on_hands_a;
level.scr_anim["quad_zombie"]["crawl_hand_2"] = %ai_zombie_walk_on_hands_b;
level.scr_anim["quad_zombie"]["crawl_sprint1"] = %ai_zombie_crawl_sprint;
level.scr_anim["quad_zombie"]["crawl_sprint2"] = %ai_zombie_crawl_sprint_1;
level.scr_anim["quad_zombie"]["crawl_sprint3"] = %ai_zombie_crawl_sprint_2;
if( !isDefined( level._zombie_melee ) )
{
level._zombie_melee = [];
}
if( !isDefined( level._zombie_walk_melee ) )
{
level._zombie_walk_melee = [];
}
if( !isDefined( level._zombie_run_melee ) )
{
level._zombie_run_melee = [];
}
level._zombie_melee["quad_zombie"] = [];
level._zombie_walk_melee["quad_zombie"] = [];
level._zombie_run_melee["quad_zombie"] = [];
level._zombie_melee["quad_zombie"][0] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][1] = %ai_zombie_leaper_attack_v2;
level._zombie_melee["quad_zombie"][2] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][3] = %ai_zombie_leaper_attack_v2;
level._zombie_melee["quad_zombie"][4] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][5] = %ai_zombie_leaper_attack_v2;
level._zombie_melee["quad_zombie"][6] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][7] = %ai_zombie_leaper_attack_v2;
level._zombie_melee["quad_zombie"][8] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][9] = %ai_zombie_leaper_attack_v2;
level._zombie_melee["quad_zombie"][10] = %ai_zombie_leaper_attack_v1;
level._zombie_melee["quad_zombie"][11] = %ai_zombie_leaper_attack_v2;
/*
level._zombie_run_melee["quad_zombie"][0] = %ai_zombie_quad_attack;
level._zombie_run_melee["quad_zombie"][1] = %ai_zombie_quad_attack;
level._zombie_run_melee["quad_zombie"][2] = %ai_zombie_quad_attack;
level._zombie_walk_melee["quad_zombie"][0] = %ai_zombie_quad_attack;
level._zombie_walk_melee["quad_zombie"][1] = %ai_zombie_quad_attack;
level._zombie_walk_melee["quad_zombie"][2] = %ai_zombie_quad_attack;
level._zombie_walk_melee["quad_zombie"][3] = %ai_zombie_quad_attack;
*/
if( isDefined( level.quad_zombie_anim_override ) )
{
[[ level.quad_zombie_anim_override ]]();
}
// melee in crawl
if( !isDefined( level._zombie_melee_crawl ) )
{
level._zombie_melee_crawl = [];
}
level._zombie_melee_crawl["quad_zombie"] = [];
level._zombie_melee_crawl["quad_zombie"][0] = %ai_zombie_attack_crawl;
level._zombie_melee_crawl["quad_zombie"][1] = %ai_zombie_attack_crawl_lunge;
if( !isDefined( level._zombie_stumpy_melee ) )
{
level._zombie_stumpy_melee = [];
}
level._zombie_stumpy_melee["quad_zombie"] = [];
level._zombie_stumpy_melee["quad_zombie"][0] = %ai_zombie_walk_on_hands_shot_a;
level._zombie_stumpy_melee["quad_zombie"][1] = %ai_zombie_walk_on_hands_shot_b;
// tesla deaths
if( !isDefined( level._zombie_tesla_death ) )
{
level._zombie_tesla_death = [];
}
level._zombie_tesla_death["quad_zombie"] = [];
level._zombie_tesla_death["quad_zombie"][0] = %ai_zombie_quad_death_tesla;
level._zombie_tesla_death["quad_zombie"][1] = %ai_zombie_quad_death_tesla_2;
level._zombie_tesla_death["quad_zombie"][2] = %ai_zombie_quad_death_tesla_3;
level._zombie_tesla_death["quad_zombie"][3] = %ai_zombie_quad_death_tesla_4;
if( !isDefined( level._zombie_tesla_crawl_death ) )
{
level._zombie_tesla_crawl_death = [];
}
level._zombie_tesla_crawl_death["quad_zombie"] = [];
level._zombie_tesla_crawl_death["quad_zombie"][0] = %ai_zombie_tesla_crawl_death_a;
level._zombie_tesla_crawl_death["quad_zombie"][1] = %ai_zombie_tesla_crawl_death_b;
// deaths
if( !isDefined( level._zombie_deaths ) )
{
level._zombie_deaths = [];
}
level._zombie_deaths["quad_zombie"] = [];
level._zombie_deaths["quad_zombie"][0] = %ai_zombie_quad_death;
level._zombie_deaths["quad_zombie"][1] = %ai_zombie_quad_death_2;
level._zombie_deaths["quad_zombie"][2] = %ai_zombie_quad_death_3;
level._zombie_deaths["quad_zombie"][3] = %ai_zombie_quad_death_4;
level._zombie_deaths["quad_zombie"][4] = %ai_zombie_quad_death_5;
level._zombie_deaths["quad_zombie"][5] = %ai_zombie_quad_death_6;
/*
ground crawl
*/
if( !isDefined( level._zombie_rise_anims ) )
{
level._zombie_rise_anims = [];
}
// set up the arrays
level._zombie_rise_anims["quad_zombie"] = [];
level._zombie_rise_anims["quad_zombie"][1]["walk"][0] = %ai_zombie_quad_traverse_ground_crawlfast;
level._zombie_rise_anims["quad_zombie"][1]["run"][0] = %ai_zombie_quad_traverse_ground_crawlfast;
level._zombie_rise_anims["quad_zombie"][1]["sprint"][0] = %ai_zombie_quad_traverse_ground_crawlfast;
level._zombie_rise_anims["quad_zombie"][2]["walk"][0] = %ai_zombie_quad_traverse_ground_crawlfast;
// ground crawl death
if( !isDefined( level._zombie_rise_death_anims ) )
{
level._zombie_rise_death_anims = [];
}
level._zombie_rise_death_anims["quad_zombie"] = [];
level._zombie_rise_death_anims["quad_zombie"][1]["in"][0] = %ai_zombie_traverse_ground_v1_deathinside;
level._zombie_rise_death_anims["quad_zombie"][1]["in"][1] = %ai_zombie_traverse_ground_v1_deathinside_alt;
level._zombie_rise_death_anims["quad_zombie"][1]["out"][0] = %ai_zombie_traverse_ground_v1_deathoutside;
level._zombie_rise_death_anims["quad_zombie"][1]["out"][1] = %ai_zombie_traverse_ground_v1_deathoutside_alt;
level._zombie_rise_death_anims["quad_zombie"][2]["in"][0] = %ai_zombie_traverse_ground_v2_death_low;
level._zombie_rise_death_anims["quad_zombie"][2]["in"][1] = %ai_zombie_traverse_ground_v2_death_low_alt;
level._zombie_rise_death_anims["quad_zombie"][2]["out"][0] = %ai_zombie_traverse_ground_v2_death_high;
level._zombie_rise_death_anims["quad_zombie"][2]["out"][1] = %ai_zombie_traverse_ground_v2_death_high_alt;
//taunts
if( !isDefined( level._zombie_run_taunt ) )
{
level._zombie_run_taunt = [];
}
if( !isDefined( level._zombie_board_taunt ) )
{
level._zombie_board_taunt = [];
}
level._zombie_run_taunt["quad_zombie"] = [];
level._zombie_board_taunt["quad_zombie"] = [];
level._zombie_board_taunt["quad_zombie"][0] = %ai_zombie_quad_taunt;
level._zombie_board_taunt["quad_zombie"][1] = %ai_zombie_quad_taunt_2;
level._zombie_board_taunt["quad_zombie"][2] = %ai_zombie_quad_taunt_3;
level._zombie_board_taunt["quad_zombie"][3] = %ai_zombie_quad_taunt_4;
level._zombie_board_taunt["quad_zombie"][4] = %ai_zombie_quad_taunt_5;
level._zombie_board_taunt["quad_zombie"][5] = %ai_zombie_quad_taunt_6;
level._effect[ "quad_trail" ] = LoadFX( "quad/fx_zombie_quad_trail_waw" );
level._effect[ "quad_explo_gas" ] = LoadFX( "quad/fx_zombie_quad_gas_nova6_waw" );
}
quad_vox()
{
self endon( "death" );
wait( 5 );
quad_wait = 5;
while(1)
{
players = getplayers();
for(i=0;i<players.size;i++)
{
if(DistanceSquared(self.origin, players[i].origin) > 1200 * 1200)
{
sound_amb = "quad_ambient_0" + randomint(12);
self playsound( sound_amb );
quad_wait = 7;
}
else if(DistanceSquared(self.origin, players[i].origin) > 200 * 200)
{
sound_attack = "quad_attack_0" + randomint(10);
self playsound( sound_attack );
quad_wait = 5;
}
else if(DistanceSquared(self.origin, players[i].origin) < 150 * 150)
{
wait(.05);
}
}
wait randomfloatrange( 1, quad_wait );
}
}
quad_close()
{
self endon( "death" );
while(1)
{
players = getplayers();
for(i=0;i<players.size;i++)
{
if ( is_player_valid( players[i], true ) )
{
if(DistanceSquared(self.origin, players[i].origin) < 150 * 150)
{
sound_amb = "quad_ambient_0" + randomint(12);
self playsound( sound_amb );
wait randomfloatrange( 1, 2 );
}
}
}
wait_network_frame();
}
}
set_leap_attack_properties()
{
self.pathEnemyFightDist = 320;
// self.meleeAttackDist = 350;
self.goalradius = 320;
self.maxsightdistsqrd = 256 * 256;
self.can_leap = true;
}
set_default_attack_properties()
{
self.pathEnemyFightDist = 64;
self.meleeAttackDist = 64;
self.goalradius = 16;
self.maxsightdistsqrd = 128 * 128;
self.can_leap = false;
}
check_wait()
{
min_dist = 96;
max_dist = 144;
height_tolerance = 32;
if ( isdefined( self.enemy ) )
{
delta = self.enemy.origin - self.origin;
dist = length( delta );
z_check = true;
z_diff = abs( self.enemy.origin[2] - self.origin[2] );
if ( z_diff > height_tolerance )
{
z_check = false;
}
if ( dist > min_dist && dist < max_dist && self.nextSpecial < GetTime() && z_check ) // ideal range for leap attack
{
cansee = SightTracePassed( self.origin, self.enemy.origin, false, undefined );
if( cansee )
self set_leap_attack_properties();
else
self set_default_attack_properties();
}
else
{
self set_default_attack_properties();
}
}
}
quad_zombie_think()
{
self endon( "death" );
// /#
// self animscripts\debug::debugPushState( "quad_zombie_think" );
// #/
self.specialAttack = maps\_zombiemode_ai_quad::TryLeap;
self.state = "waiting";
self.isAttacking = false;
self.nextSpecial = GetTime();
for (;;)
{
switch ( self.state )
{
case "waiting":
check_wait();
break;
case "leaping":
break;
}
wait_network_frame();
}
// /#
// self animscripts\debug::debugPopState();
// #/
}
trackCollision()
{
self endon( "death" );
self endon( "stop_coll" );
while ( 1 )
{
check = self GetHitEntType();
if ( check != "none" )
{
/#
self animscripts\debug::debugPushState( check );
#/
self thread quad_stop_leap();
self notify( "stop_leap" );
self notify( "stop_coll" );
}
wait_network_frame();
}
}
quad_finish_leap()
{
self endon( "death" );
/#
self animscripts\debug::debugPushState( "quad_finish_leap" );
#/
self.state = "waiting";
self.isAttacking = false;
self.nextSpecial = GetTime() + 3000;
self animMode("none");
self.syncedMeleeTarget = undefined;
self OrientMode("face enemy");
self thread animscripts\combat::main();
/#
self animscripts\debug::debugPopState();
#/
}
quad_stop_leap()
{
self endon( "death" );
self SetFlaggedAnimKnobAllRestart("attack",%ai_zombie_quad_attack_leap_loop_out, %body, 1, .1, 1);
self animscripts\shared::DoNoteTracks( "attack" );
self quad_finish_leap();
}
quad_leap_attack()
{
self endon( "death" );
self endon( "stop_leap" );
/#
self animscripts\debug::debugPushState( "quad_leap_attack" );
#/
self.state = "leaping";
self.isAttacking = true;
// self ClearAnim(%stand_and_crouch, 0.1);
if( IsDefined( self.enemy ) )
{
self.syncedMeleeTarget = self.enemy;
angles = VectorToAngles( self.enemy.origin - self.origin );
self OrientMode( "face angle", angles[1] );
}
// restore attack properties to prevent code trying to control animmode
self set_default_attack_properties();
self.goalradius = 4;
self animMode("nogravity");
leap_in = %ai_zombie_quad_attack_leap_loop_in;
delta = GetMoveDelta( leap_in, 0, 1 );
self SetFlaggedAnimKnobAllRestart("attack",%ai_zombie_quad_attack_leap_loop_in, %body, 1, .1, 1);
// animscripts\traverse\shared::wait_anim_length(leap_in, .02);
wait( getanimlength(leap_in) );
// self animscripts\shared::DoNoteTracks( "attack" );
use_loop = false;
if ( use_loop )
{
leap_loop = %ai_zombie_quad_attack_leap_loop;
self thread trackCollision();
self SetFlaggedAnimKnobAllRestart("attack",leap_loop, %body, 1, .1, 1);
delta = GetMoveDelta( leap_loop, 0, 1 );
anim_dist = length( delta );
anim_time = getanimlength( leap_loop );
rate = anim_dist / getanimlength( leap_loop );
goal_dist = length( self.enemy.origin - self.origin );
goal_dist -= 16; // give some room for player radius
//time = goal_dist / rate;
//if ( time > 0 )
//{
// self animscripts\shared::DoNoteTracksForTime( time, "attack" );
//}
// animscripts\traverse\shared::wait_anim_length(leap_loop, .02);
wait( getanimlength(leap_loop) );
// self animscripts\shared::DoNoteTracksForTime( anim_time, "attack" );
}
self notify( "stop_coll" );
leap_out = %ai_zombie_quad_attack_leap_attack;
if ( isdefined(self.enemy) )
{
delta = self.enemy.origin - self.origin;
deltaF = ( delta[0], delta[1], 0 );
attack_dist = length( deltaF );
/#
self animscripts\debug::debugPushState( "attack dist = " + attack_dist );
#/
if ( attack_dist <= 64 )
{
leap_out = %ai_zombie_quad_attack_leap_attack;
}
}
delta = GetMoveDelta( leap_out, 0, 1 );
self SetFlaggedAnimKnobAllRestart("attack",leap_out, %body, 1, .1, 1);
while ( 1 )
{
self waittill("attack", note);
if ( note == "end" )
{
break;
}
else if ( note == "fire" )
{
if ( !IsDefined( self.enemy ) )
{
break;
}
oldhealth = self.enemy.health;
self melee();
}
else if ( note == "gravity on" )
{
self animMode("none");
}
}
/#
self animscripts\debug::debugPopState();
#/
quad_finish_leap();
/#
self animscripts\debug::debugPopState();
#/
}
TryLeap()
{
// prevent other combat until leap is done
if ( self.state == "leaping" )
{
return true;
}
if ( !IsDefined( self.enemy ) )
{
return false;
}
// early out
if ( DistanceSquared( self.origin, self.enemy.origin ) > 512*512 )
{
// animscripts\melee::debug_melee( "Not doing melee - Distance to enemy is more than 512 units." );
return false;
}
if ( self.a.pose == "prone" )
{
return false;
}
if ( !self.can_leap )
{
return false;
}
self thread maps\_zombiemode_ai_quad::quad_leap_attack();
self notify( "special_attack" );
return true;
}
quad_gas_explo_death()
{
death_vars = [];
death_vars["explo_radius_zomb"] = self.death_explo_radius_zomb;
death_vars["explo_radius_plr"] = self.death_explo_radius_plr;
death_vars["explo_damage_zomb"] = self.death_explo_damage_zomb;
death_vars["gas_radius"] = self.death_gas_radius;
death_vars["gas_time"] = self.death_gas_time;
self thread quad_death_explo( self.origin, death_vars );
level thread quad_gas_area_of_effect( self.origin, death_vars );
self Delete();
}
quad_death_explo( origin, death_vars )
{
sound_explo = "explo_0" + randomint(4);
playsoundatposition( sound_explo, origin );
PlayFx( level._effect["dog_gib"], origin );
players = get_players();
zombies = GetAIArray( "axis" );
for(i = 0; i < players.size; i++)
{
if( Distance( origin, players[i].origin ) <= death_vars["explo_radius_plr"] )
{
players[i] ShellShock( "explosion", 2.5 );
}
}
self.exploded = true;
self RadiusDamage( origin, death_vars["explo_radius_zomb"], 30, 20, self, "MOD_EXPLOSIVE" );
}
quad_gas_area_of_effect( origin, death_vars )
{
effectArea = spawn( "trigger_radius", origin, 0, death_vars["gas_radius"], 100 );
PlayFX( level._effect[ "quad_explo_gas" ], origin );
gas_time = 0;
while( gas_time <= death_vars["gas_time"] )
{
players = get_players();
for(i = 0; i < players.size; i++)
{
if( players[i] IsTouching( effectArea ))
{
players[i] setblur( 4, .1 );
}
else
{
players[i] setblur( 0, .5 );
}
}
wait(1);
gas_time = gas_time + 1;
}
players = get_players();
for ( i = 0; i < players.size; i++ )
{
players[i] setblur( 0, .5 );
}
effectArea Delete();
}
quad_trail()
{
self endon( "death" );
// self waittill( "quad_end_traverse_anim" );
//Add in the smoke effect from the dogs
self.fx_quad_trail = Spawn( "script_model", self GetTagOrigin( "tag_origin" ) );
self.fx_quad_trail.angles = self GetTagAngles( "tag_origin" );
self.fx_quad_trail SetModel( "tag_origin" );
self.fx_quad_trail LinkTo( self, "tag_origin" );
maps\_zombiemode_net::network_safe_play_fx_on_tag( "quad_fx", 2, level._effect[ "quad_trail" ], self.fx_quad_trail, "tag_origin" );
}
quad_post_death_NEW()
{
self waittill( "death" );
level.quad_limit--;
if( self.damagemod != "MOD_MELEE" && !self.damagemod_wonder )
{
wait( getanimlength( self.deathanim ) );
self.can_explode = true;
}
self thread quad_post_death();
}
quad_post_death()
{
if ( isdefined( self.fx_quad_trail ) )
{
self.fx_quad_trail unlink();
self.fx_quad_trail delete();
}
if ( self.can_explode )
{
self thread quad_gas_explo_death();
}
}
quad_killed_override( eInflictor, attacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, psOffsetTime )
{
if ( sMeansOfDeath == "MOD_PISTOL_BULLET" || sMeansOfDeath == "MOD_RIFLE_BULLET" )
{
self.can_explode = true;
}
else
{
self.can_explode = false;
if ( isdefined( self.fx_quad_trail ) )
{
self.fx_quad_trail unlink();
self.fx_quad_trail delete();
}
}
if(isDefined(level._override_quad_explosion))
{
[[level._override_quad_explosion]](self);
}
}
quad_pre_teleport()
{
if ( isDefined( self.fx_quad_trail ) )
{
self.fx_quad_trail unlink();
self.fx_quad_trail delete();
wait( .1 );
}
}
quad_post_teleport()
{
if ( isDefined( self.fx_quad_trail ) )
{
self.fx_quad_trail unlink();
self.fx_quad_trail delete();
}
if ( self.health > 0 )
{
self.fx_quad_trail = Spawn( "script_model", self GetTagOrigin( "tag_origin" ) );
self.fx_quad_trail.angles = self GetTagAngles( "tag_origin" );
self.fx_quad_trail SetModel( "tag_origin" );
self.fx_quad_trail LinkTo( self, "tag_origin" );
maps\_zombiemode_net::network_safe_play_fx_on_tag( "quad_fx", 2, level._effect[ "quad_trail" ], self.fx_quad_trail, "tag_origin" );
}
}
![]() | Has released one or more maps to the UGX-Mods community. |
![]() | Has released one or more maps to the UGX-Mods community. |
![]() | Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community. |
![]() BO3 Modtools Alpha | This user has access to the Black Ops 3 Modtools Alpha |
self maps\_zombiemode_spawner::zombie_spawn_init( true );
//you could use self.model instead of self.script_string and "quad_body" instead of "freakshow"
if(IsDefined( self.script_string ) && IsSubStr( self.script_string,"freakshow" )){
self zombie_setup_attack_properties();
self thread find_flesh();
return;
}
//add above this
if( IsDefined( self.script_forcegoal ) && self.script_forcegoal )

// self thread maps\_zombiemode_spawner::find_flesh();
// self maps\_zombiemode_spawner::zombie_setup_attack_properties();