UGX-Mods Login

or login with an authentication provider below
Sign In with Google
Sign In with Twitter
Sign In with Discord
Sign In with Steam
Sign In with Facebook
Sign In with Twitch

Spawn error

broken avatar :(
Created 8 years ago
by shippuden1592
0 Members and 1 Guest are viewing this topic.
2,091 views
broken avatar :(
×
broken avatar :(
Location: mxGuanajuato
Date Registered: 5 May 2013
Last active: 6 days ago
Posts
225
Respect
Forum Rank
Mr. Elemental
Primary Group
Member
My Contact & Social Links
More
Personal Quote
If you do not take risks, you can not create a fut
×
shippuden1592's Groups
I have a problem with my spawns... They die after a couple of seconds after you spawn.

But if I put on the map a normal zombie (window) zombies do not die. And if I put only zombies risers it is when they die within a few seconds.
The problem is I do not want to put zombies window on the map... there is a way to solve this.

This is my code:

Code Snippet
Plaintext
#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" );
}
}

And this is my spawn:

broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 24 February 2014
Last active: 2 years ago
Posts
240
Respect
Forum Rank
Mr. Elemental
Primary Group
Community Mapper
My Groups
More
×
josemassacre's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
josemassacre's Contact & Social Links
Script_noteworthy find_flesh
You won't have to use Windows then
didnt see the script you posted lol my answer is probably not your problem haha
Last Edit: August 03, 2016, 05:07:02 am by josemassacre
Marked as best answer by shippuden1592 8 years ago
broken avatar :(
×
broken avatar :(
Location: us
Date Registered: 14 September 2013
Last active: 4 years ago
Posts
1,895
Respect
Forum Rank
Zombie Destroyer
Primary Group
Community Scripter
My Groups
More
My Contact & Social Links
More
Personal Quote
BE ORIGINAL
Signature
×
MakeCents's Groups
Community Mapper Has released one or more maps to the UGX-Mods community which have been added to the UGX Map Manager.
Community Scripter Has shown effort and knowledge in the area of scripting while being a part of the UGX-Mods community.
BO3 Modtools Alpha
BO3 Modtools Alpha
This user has access to the Black Ops 3 Modtools Alpha
That is a lot of script to look at, not knowing what everything else looks like will only add to the confusion. Just by skimming, I am not sure you need this:
Code Snippet
Plaintext
self maps\_zombiemode_spawner::zombie_spawn_init( true );
But I don't think that would be your issue either... but if that function is already called somewhere, no need to do it again per quad

One thing I did to overcome the window issue easily was to add a script_string to my spawner and then add this to my _zombiemode_spawner script:
Code Snippet
Plaintext
	//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 )

You could also use the model instead of the script_string if you rather.
Last Edit: August 03, 2016, 02:39:40 am by MakeCents
broken avatar :(
×
broken avatar :(
Location: mxGuanajuato
Date Registered: 5 May 2013
Last active: 6 days ago
Posts
225
Respect
Forum Rank
Mr. Elemental
Primary Group
Member
My Contact & Social Links
More
Personal Quote
If you do not take risks, you can not create a fut
×
shippuden1592's Groups
Thank you so much!! I achieved work properly ;)

I had to comment on these two lines:

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

And use the code "freakshow".... I can use what I said above???

 
Loading ...