iw6-scripts/maps/_dog_control.gsc
2024-02-13 13:20:49 +01:00

926 lines
26 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
#using_animtree("dog");
init_dog_control()
{
precachestring( &"SCRIPT_DOG_NOTARGET" );
precachestring( &"SCRIPT_DOG_NOTREADY" );
createthreatbiasgroup( "dog" );
createthreatbiasgroup( "dog_targets" );
setignoremegroup( "dog_targets", "allies" );
level.scr_anim["dog"]["dog_bark"] = %iw6_dog_attackidle_bark;
common_scripts\utility::flag_init( "enable_dog_pip" );
}
enable_dog_control( var_0 )
{
var_0.animname = "dog";
if ( !var_0 maps\_utility::ent_flag_exist( "dog_no_teleport" ) )
var_0 maps\_utility::ent_flag_init( "dog_no_teleport" );
if ( !var_0 maps\_utility::ent_flag_exist( "dog_cooldown" ) )
var_0 maps\_utility::ent_flag_init( "dog_cooldown" );
if ( !var_0 maps\_utility::ent_flag_exist( "running_dog_command" ) )
var_0 maps\_utility::ent_flag_init( "running_dog_command" );
if ( !var_0 maps\_utility::ent_flag_exist( "pause_dog_command" ) )
var_0 maps\_utility::ent_flag_init( "pause_dog_command" );
if ( !var_0 maps\_utility::ent_flag_exist( "cancel_command_disabled" ) )
var_0 maps\_utility::ent_flag_init( "cancel_command_disabled" );
self.controlled_dog = var_0;
var_0.player_controller = self;
childthread give_laser();
childthread listen_for_dog_commands( var_0 );
if ( !isdefined( self.notargethudelem ) )
{
self.notargethudelem = maps\_hud_util::createclientfontstring( "default", 1.1 );
self.notargethudelem maps\_hud_util::setpoint( "CENTER", "CENTER", 0, -15, 0 );
self.notargethudelem settext( "No Target" );
self.notargethudelem.alpha = 0;
}
self takeweapon( "flash_grenade" );
self.controlled_dog.dog_marker = common_scripts\utility::spawn_tag_origin();
setdvar( "ui_dog_grenade", 1 );
thread ui_dog_grenade_logic();
if ( level.xb3 )
maps\_dog_kinect::speechcommands();
}
disable_dog_control()
{
self notify( "disable_dog_control" );
self.controlled_dog = undefined;
self.controlled_dog.dog_marker delete();
self enableoffhandweapons();
setdvar( "ui_dog_grenade", 0 );
}
listen_for_dog_commands( var_0 )
{
self endon( "death" );
var_0 endon( "death" );
self endon( "disable_dog_control" );
for (;;)
{
self waittill( "issue_dog_command", var_1, var_2, var_3 );
if ( var_0 maps\_utility::ent_flag( "pause_dog_command" ) )
continue;
if ( var_0 maps\_utility::ent_flag( "dog_cooldown" ) || isdefined( var_0.in_melee ) && var_0.in_melee )
{
thread display_no_target( &"SCRIPT_DOG_NOTREADY", 2 );
continue;
}
if ( isdefined( var_0.animnode ) )
{
var_0 stopanimscripted();
var_0.animnode notify( "stop_loop" );
}
var_0 thread run_dog_command( var_1, var_2, var_3 );
}
}
isneargrenade()
{
var_0 = getentarray( "grenade", "classname" );
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
{
var_2 = var_0[var_1];
if ( var_2.model == "weapon_claymore" )
continue;
for ( var_3 = 0; var_3 < level.players.size; var_3++ )
{
var_4 = level.players[var_3];
if ( distancesquared( var_2.origin, var_4.origin ) < 36864 )
return 1;
}
}
return 0;
}
give_laser()
{
level.see_enemy_dot = 0.985;
level.see_enemy_dot_close = 0.99;
self endon( "disable_dog_control" );
self endon( "remove_laser" );
self.lastusedweapon = undefined;
self notifyonplayercommand( "fired_laser", "+smoke" );
childthread laser_designate_target();
childthread listen_for_cancel();
}
laser_designate_target()
{
for (;;)
{
self waittill( "fired_laser" );
var_0 = get_laser_designated_trace();
var_1 = undefined;
var_2 = getaiarray( "axis" );
var_3 = [];
var_4 = self;
var_5 = var_4 get_eye();
if ( isdefined( var_0["entity"] ) && isai( var_0["entity"] ) )
{
if ( isalive( var_0["entity"] ) && var_0["entity"].team != "allies" && var_0["entity"].type != "dog" )
var_1 = var_0["entity"];
}
if ( !isdefined( var_1 ) )
{
var_6 = level.see_enemy_dot_close;
foreach ( var_8 in var_2 )
{
if ( var_8.type == "dog" )
continue;
var_9 = var_8 gettagorigin( "J_SpineUpper" );
var_10 = vectortoangles( var_9 - var_5 );
var_11 = anglestoforward( var_10 );
var_12 = var_4 getplayerangles();
var_13 = anglestoforward( var_12 );
var_14 = vectordot( var_11, var_13 );
if ( var_14 > var_6 )
var_3 = common_scripts\utility::array_add( var_3, var_8 );
}
if ( var_3.size > 0 )
{
var_3 = sortbydistance( var_3, var_5 );
foreach ( var_8 in var_3 )
{
if ( test_trace( var_8 geteye(), var_5, var_4.controlled_dog ) )
{
var_1 = var_8;
break;
}
}
}
}
if ( !isdefined( var_1 ) )
{
var_6 = level.see_enemy_dot;
foreach ( var_8 in var_2 )
{
if ( var_8.type == "dog" )
continue;
var_9 = var_8 gettagorigin( "J_SpineUpper" );
var_10 = vectortoangles( var_9 - var_5 );
var_11 = anglestoforward( var_10 );
var_12 = var_4 getplayerangles();
var_13 = anglestoforward( var_12 );
var_14 = vectordot( var_11, var_13 );
if ( var_14 > var_6 && test_trace( var_8 geteye(), var_5, var_4.controlled_dog ) )
{
var_1 = var_8;
var_6 = var_14;
}
}
}
self notify( "issue_dog_command", var_0, undefined, var_1 );
if ( isdefined( var_1 ) )
wait 2;
}
}
test_trace( var_0, var_1, var_2 )
{
var_3 = bullettrace( var_0, var_1, 0, var_2 );
return var_3["fraction"] == 1;
}
listen_for_cancel()
{
for (;;)
{
self waittill( "cancel_command" );
if ( !self.controlled_dog maps\_utility::ent_flag( "cancel_command_disabled" ) )
{
var_0 = get_laser_designated_trace();
self notify( "issue_dog_command", var_0, self );
}
wait 0.1;
}
}
get_laser_designated_trace()
{
var_0 = get_eye();
var_1 = self getplayerangles();
var_2 = anglestoforward( var_1 );
var_0 = var_0 + var_2 * 20;
var_3 = var_0 + var_2 * 7000;
var_4 = bullettrace( var_0, var_3, 1, self.controlled_dog );
var_5 = var_4["entity"];
if ( isdefined( var_5 ) )
var_4["position"] = var_5.origin;
return var_4;
}
run_dog_command( var_0, var_1, var_2 )
{
self endon( "death" );
if ( var_0["fraction"] >= 0.98 && !isdefined( var_1 ) )
{
if ( !maps\_utility::ent_flag( "running_dog_command" ) )
self.player_controller thread display_no_target( &"SCRIPT_DOG_NOTARGET", 1.75 );
return;
}
var_3 = var_0["position"];
if ( isdefined( var_2 ) )
var_4 = var_2;
else
var_4 = enemy_near_position( var_0["position"] );
var_5 = get_flush_volume( var_3 );
if ( !isdefined( var_2 ) && !isdefined( var_1 ) && !isdefined( var_5 ) )
{
if ( !maps\_utility::ent_flag( "running_dog_command" ) )
self.player_controller thread display_no_target( &"SCRIPT_DOG_NOTARGET", 1.75 );
return;
}
self notify( "new_dog_command" );
self hudoutlinedisable();
self endon( "new_dog_command" );
maps\_utility::ent_flag_set( "running_dog_command" );
var_6 = isdefined( self.script_forcecolor ) || isdefined( self.script_old_forcecolor );
if ( var_6 && isdefined( self.script_forcecolor ) )
self.script_old_forcecolor = self.script_forcecolor;
if ( isdefined( self.current_follow_path ) )
{
self.old_path = self.current_follow_path;
self notify( "stop_path" );
}
if ( isdefined( self.doghandler ) )
{
self.oldhandler = self.doghandler;
self setdoghandler();
}
maps\_utility::disable_ai_color();
self.dog_marker unlink();
self.dog_marker.origin = var_3;
self.dog_marker.angles = vectortoangles( var_0["normal"] );
if ( !isdefined( self.dc_old_moveplaybackrate ) )
self.dc_old_moveplaybackrate = self.moveplaybackrate;
self.moveplaybackrate = 1;
if ( self.a.movement == "walk" )
{
self.was_walking = 1;
maps\_utility::clear_run_anim();
}
if ( isdefined( var_1 ) )
dog_command_cancel( var_1 );
else if ( isdefined( var_5 ) )
dog_command_flush( var_5, var_0 );
else if ( isdefined( var_4 ) )
{
self.script_nostairs = 1;
maps\_utility::set_hudoutline( "friendly", 0 );
self.moveplaybackrate = 1;
maps\_utility::enable_sprint();
var_7 = dog_command_attack( var_4 );
if ( isdefined( var_7 ) && var_7 == "attack" )
{
if ( isalive( var_4 ) )
{
if ( isdefined( self.in_melee ) && self.in_melee )
var_4 waittill( "death" );
}
}
else
{
wait 0.5;
if ( !isdefined( self.in_melee ) || !self.in_melee )
self clearenemy();
}
if ( isdefined( self.old_ai_target ) )
{
self.old_ai_target hudoutlinedisable();
self.favoriteenemy = undefined;
}
maps\_utility::disable_sprint();
self hudoutlinedisable();
}
else
dog_command_goto( var_0 );
self.script_nostairs = undefined;
self hudoutlinedisable();
if ( isdefined( self.oldhandler ) )
{
self setdoghandler( self.oldhandler );
self setgoalentity( self.oldhandler );
}
else if ( var_6 && isdefined( self.script_old_forcecolor ) )
{
var_8 = undefined;
if ( isdefined( self.script_color_delay_override ) )
{
var_8 = self.script_color_delay_override;
self.script_color_delay_override = undefined;
}
maps\_utility::enable_ai_color();
self.script_old_forcecolor = undefined;
self.old_path = undefined;
if ( isdefined( var_8 ) )
self.script_color_delay_override = var_8;
}
else if ( isdefined( self.old_path ) )
{
thread maps\_utility::follow_path_and_animate( self.old_path );
self.old_path = undefined;
}
if ( isdefined( self.dc_old_moveplaybackrate ) )
{
common_scripts\utility::waittill_notify_or_timeout( "goal", 5 );
if ( isdefined( self.dc_old_moveplaybackrate ) )
{
self.moveplaybackrate = self.dc_old_moveplaybackrate;
self.dc_old_moveplaybackrate = undefined;
}
}
if ( isdefined( self.was_walking ) && self.was_walking )
{
self.was_walking = undefined;
maps\_utility::set_dog_walk_anim();
}
self.oldhandler = undefined;
maps\_utility::ent_flag_clear( "running_dog_command" );
self notify( "dog_command_complete" );
}
dog_command_flush( var_0, var_1 )
{
self endon( "new_dog_command" );
var_2 = var_1["position"];
wait 0.05;
playfxontag( common_scripts\utility::getfx( "target_marker_yellow" ), self.dog_marker, "tag_origin" );
thread maps\_utility::play_sound_on_entity( "anml_dog_bark" );
var_3 = level.dog_flush_functions[var_0.script_noteworthy];
self childthread [[ var_3 ]]( var_0, var_1 );
level waittill( "dog_flush_started" );
var_0.done_flushing = 1;
level waittill( "dog_flush_done" );
}
dog_command_cancel( var_0 )
{
if ( isdefined( self.favoriteenemy ) )
{
if ( isdefined( self.favoriteenemy.oldignoreme ) )
self.favoriteenemy.ignoreme = self.favoriteenemy.oldignoreme;
self.favoriteenemy = undefined;
}
if ( isdefined( self.old_moveplaybackrate ) )
{
self.moveplaybackrate = self.old_moveplaybackrate;
self.old_moveplaybackrate = undefined;
}
}
dog_command_attack( var_0 )
{
self endon( "damage" );
self endon( "cancel_dog_attack" );
self notify( "dog_command_attack", var_0 );
self.dog_marker linkto( var_0, "tag_origin", ( 0, 0, 0 ), ( -90, 0, -90 ) );
wait 0.05;
if ( !isalive( var_0 ) )
return "bail";
self.script_nostairs = 1;
if ( isdefined( self.old_ai_target ) && self.old_ai_target != var_0 )
self.old_ai_target hudoutlinedisable();
var_0 thread hud_outlineenable();
if ( isdefined( var_0.dog_attack_alt_func ) )
self [[ var_0.dog_attack_alt_func ]]( var_0 );
else
{
self.old_ai_target = var_0;
var_0.old_ignoreme = var_0.ignoreme;
var_0.ignoreme = 0;
var_0 setthreatbiasgroup( "dog_targets" );
var_0 thread maps\_utility::set_battlechatter( 0 );
self.favoriteenemy = var_0;
if ( common_scripts\utility::flag_exist( "_stealth_spotted" ) && !common_scripts\utility::flag( "_stealth_spotted" ) )
thread maps\_utility::play_sound_on_entity( "anml_dog_growl" );
else
thread maps\_utility::play_sound_on_entity( "anml_dog_bark_attack_start_npc" );
self setgoalentity( var_0, 50 );
thread temporary_disable_pain();
thread dog_attack_damage_tracking();
if ( !maps\_utility::ent_flag( "dog_no_teleport" ) )
{
var_1 = self gettagorigin( "spine2_jnt" );
if ( !maps\_utility::player_looking_at( var_1, 0.5, 1 ) )
{
var_2 = var_0 gettagorigin( "J_SpineUpper" );
var_3 = level.player geteye();
var_4 = distance( var_1, var_2 );
var_5 = distance( var_3, var_2 );
if ( var_4 > var_5 )
{
var_6 = getnodesinradius( var_3, 128, 32, 128, "Path" );
foreach ( var_8 in var_6 )
{
if ( !maps\_utility::player_looking_at( var_8.origin, 0.5, 1 ) )
{
if ( test_trace( var_3, var_8.origin, level.player ) )
{
var_9 = var_2 - var_1;
var_9 = ( var_9[0], var_9[1], 0 );
var_10 = vectortoangles( var_9 );
self forceteleport( var_8.origin, var_10 );
break;
}
}
}
}
}
}
self.player_controller notify( "displaying_no_target" );
self.player_controller notify( "clear_no_target" );
self.player_controller.notargethudelem.alpha = 0;
var_12 = dog_waitfor_attack_or_bail( var_0 );
if ( isdefined( var_12 ) )
self notify( "stop_disable_pain" );
self notify( "dog_attack_damage_tracking" );
if ( !isdefined( var_12 ) || var_12 == "bail" )
return "bail";
}
}
dog_waitfor_attack_or_bail( var_0 )
{
var_0 endon( "death" );
if ( isdefined( self.in_melee ) && self.in_melee )
{
if ( isdefined( self.enemy ) && self.enemy == var_0 )
return "dog_attacks_ai";
return "bail";
}
level waittill( "dog_attacks_ai", var_1, var_2, var_3 );
if ( var_2 == var_0 )
return "dog_attacks_ai";
return "bail";
}
temporary_disable_pain()
{
self endon( "stop_disable_pain" );
self notify( "temporary_disable_pain" );
self endon( "temporary_disable_pain" );
self setcandamage( 0 );
wait 2;
if ( !isdefined( self.in_melee ) || self.in_melee == 0 )
self setcandamage( 1 );
}
dog_attack_damage_tracking()
{
self notify( "dog_attack_damage_tracking" );
self endon( "dog_attack_damage_tracking" );
common_scripts\utility::waittill_either( "damage", "cancel_dog_attack" );
if ( !isdefined( self.in_melee ) || !self.in_melee )
thread dog_got_hit();
}
dog_got_hit()
{
self notify( "dog_got_hit" );
self endon( "dog_got_hit" );
maps\_utility::disable_pain();
maps\_utility::ent_flag_set( "dog_cooldown" );
var_0 = self.ignoreall;
self.ignoreall = 0;
self clearenemy();
wait 8;
self.ignoreall = var_0;
maps\_utility::enable_pain();
maps\_utility::ent_flag_clear( "dog_cooldown" );
}
ai_remove_outline_waiter( var_0 )
{
self endon( "death" );
self endon( "dog_attacks_ai" );
var_0 waittill( "new_dog_command" );
self hudoutlinedisable();
}
dog_command_goto( var_0 )
{
var_1 = var_0["position"];
wait 0.05;
playfxontag( common_scripts\utility::getfx( "target_marker_yellow" ), self.dog_marker, "tag_origin" );
thread maps\_utility::play_sound_on_entity( "anml_dog_bark" );
self setgoalpos( var_1 );
common_scripts\utility::waittill_notify_or_timeout( "goal", 0.2 );
if ( isdefined( self.pathgoalpos ) )
self waittill( "goal" );
else if ( distance2d( self.origin, var_1 ) > self.goalradius )
{
var_2 = getnodesinradius( var_1, 96, 0, 96 );
var_2 = sortbydistance( var_2, level.player get_eye() );
if ( var_2.size > 0 )
{
var_3 = var_2[0];
self setgoalpos( var_3.origin );
self waittill( "goal" );
}
}
wait( randomfloatrange( 1, 3 ) );
}
enemy_near_position( var_0 )
{
var_1 = getaiarray( "axis" );
if ( var_1.size > 0 )
{
var_1 = sortbydistance( var_1, var_0 );
if ( distance( var_1[0].origin, var_0 ) < 196 )
return var_1[0];
}
return undefined;
}
get_flush_volume( var_0 )
{
var_1 = common_scripts\utility::spawn_tag_origin();
var_1.origin = var_0;
var_2 = getentarray( "dog_flush_volume", "targetname" );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.script_noteworthy ) && ( !isdefined( var_4.done_flushing ) || var_4.done_flushing == 0 ) )
{
if ( var_1 istouching( var_4 ) )
{
var_1 delete();
return var_4;
}
}
}
var_1 delete();
return undefined;
}
chopper_air_support_activate()
{
level endon( "air_support_canceled" );
level endon( "air_support_called" );
level.chopperattackarrow = spawn( "script_model", ( 0, 0, 0 ) );
level.chopperattackarrow setmodel( "tag_origin" );
level.chopperattackarrow.angles = ( -90, 0, 0 );
level.chopperattackarrow.offset = 4;
level.playeractivatedairsupport = 1;
var_0 = undefined;
var_1 = 15;
var_2 = 15000;
var_3 = 90000;
var_4 = [];
var_4[0] = spawnstruct();
var_4[0].offsetdir = "vertical";
var_4[0].offsetdist = var_1;
var_4[1] = spawnstruct();
var_4[1].offsetdir = "vertical";
var_4[1].offsetdist = var_1 * -1;
var_4[2] = spawnstruct();
var_4[2].offsetdir = "horizontal";
var_4[2].offsetdist = var_1;
var_4[3] = spawnstruct();
var_4[3].offsetdir = "horizontal";
var_4[3].offsetdist = var_1 * -1;
var_5 = 0;
for (;;)
{
wait 0.05;
var_6 = level.player getplayerangles();
var_7 = anglestoforward( var_6 );
var_8 = level.player get_eye();
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
var_10 = var_8;
var_11 = undefined;
if ( var_4[var_9].offsetdir == "vertical" )
var_11 = anglestoup( var_6 );
else if ( var_4[var_9].offsetdir == "horizontal" )
var_11 = anglestoright( var_6 );
var_10 = var_10 + var_11 * var_4[var_9].offsetdist;
var_4[var_9].trace = bullettrace( var_10, var_10 + var_7 * var_2, 0, undefined );
var_4[var_9].length = distancesquared( var_10, var_4[var_9].trace["position"] );
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( var_10, var_4[var_9].trace["position"], 1, 1, 1, 0.05 );
}
var_12 = [];
var_13 = [];
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
if ( var_4[var_9].length < var_3 )
continue;
var_14 = var_12.size;
var_12[var_14] = var_4[var_9].trace["position"];
var_13[var_14] = var_4[var_9].trace["normal"];
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( level.player get_eye(), var_12[var_14], 0, 1, 0, 0.05 );
}
if ( var_12.size == 0 )
{
for ( var_9 = 0; var_9 < var_4.size; var_9++ )
{
var_12[var_9] = var_4[var_9].trace["position"];
var_13[var_9] = var_4[var_9].trace["normal"];
}
}
if ( var_12.size == 4 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1], var_12[2], var_12[3] );
var_16 = findaveragepointvec( var_13[0], var_13[1], var_13[2], var_13[3] );
}
else if ( var_12.size == 3 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1], var_12[2] );
var_16 = findaveragepointvec( var_13[0], var_13[1], var_13[2] );
}
else if ( var_12.size == 2 )
{
var_15 = findaveragepointvec( var_12[0], var_12[1] );
var_16 = findaveragepointvec( var_13[0], var_13[1] );
}
else
{
var_15 = var_12[0];
var_16 = var_13[0];
}
if ( getdvar( "village_assault_debug_marker" ) == "1" )
thread common_scripts\utility::draw_line_for_time( level.player get_eye(), var_15, 1, 0, 0, 0.05 );
thread drawchopperattackarrow( var_15, var_16, var_5 );
var_5 = 0.2;
}
}
findaveragepointvec( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
{
var_4 = findaveragepoint( var_0[0], var_1[0], var_2[0], var_3[0] );
var_5 = findaveragepoint( var_0[1], var_1[1], var_2[1], var_3[1] );
var_6 = findaveragepoint( var_0[2], var_1[2], var_2[2], var_3[2] );
}
else if ( isdefined( var_2 ) )
{
var_4 = findaveragepoint( var_0[0], var_1[0], var_2[0] );
var_5 = findaveragepoint( var_0[1], var_1[1], var_2[1] );
var_6 = findaveragepoint( var_0[2], var_1[2], var_2[2] );
}
else
{
var_4 = findaveragepoint( var_0[0], var_1[0] );
var_5 = findaveragepoint( var_0[1], var_1[1] );
var_6 = findaveragepoint( var_0[2], var_1[2] );
}
return ( var_4, var_5, var_6 );
}
findaveragepoint( var_0, var_1, var_2, var_3 )
{
if ( isdefined( var_3 ) )
return ( var_0 + var_1 + var_2 + var_3 ) / 4;
else if ( isdefined( var_2 ) )
return ( var_0 + var_1 + var_2 ) / 3;
else
return ( var_0 + var_1 ) / 2;
}
drawchopperattackarrow( var_0, var_1, var_2 )
{
var_0 = var_0 + var_1 * level.chopperattackarrow.offset;
level.chopperattackarrow.origin = var_0;
if ( var_2 > 0 )
level.chopperattackarrow rotateto( vectortoangles( var_1 ), 0.2 );
else
level.chopperattackarrow.angles = vectortoangles( var_1 );
}
get_eye()
{
if ( isdefined( self.controlled_dog.controlling_dog ) && self.controlled_dog.controlling_dog )
{
var_0 = self.controlled_dog gettagorigin( "TAG_CAMERA" );
return var_0;
}
else
return self geteye();
}
hud_outlineenable()
{
if ( !isdefined( self ) )
return;
self notify( "outline_enable" );
self endon( "outline_enable" );
thread hudoutline_blink();
thread hudoutline_wait_death();
self endon( "death" );
self waittill( "dog_attacks_ai" );
wait 0.1;
maps\_utility::set_hudoutline( "enemy", 0 );
wait 5;
if ( isdefined( self ) )
{
self.no_more_outlines = 1;
self hudoutlinedisable();
}
}
hudoutline_blink()
{
self endon( "outline_enable" );
self endon( "dog_attacks_ai" );
self endon( "death" );
maps\_utility::set_hudoutline( "enemy", 0 );
wait 0.8;
self hudoutlinedisable();
wait 0.1;
for ( var_0 = 0; var_0 < 3; var_0++ )
{
maps\_utility::set_hudoutline( "enemy", 0 );
wait 0.1;
self hudoutlinedisable();
wait 0.1;
}
self hudoutlinedisable();
}
hudoutline_wait_death()
{
self endon( "outline_enable" );
self waittill( "death" );
wait 2.5;
if ( isdefined( self ) )
{
self.no_more_outlines = 1;
self hudoutlinedisable();
}
var_0 = getcorpsearray();
foreach ( var_2 in var_0 )
var_2 hudoutlinedisable();
}
display_no_target( var_0, var_1 )
{
self notify( "displaying_no_target" );
self endon( "displaying_no_target" );
self.notargethudelem settext( var_0 );
self.notargethudelem fadeovertime( 0.1 );
self.notargethudelem.alpha = 0.5;
wait 0.1;
thread notargethudelem_pulse();
wait( var_1 );
self notify( "clear_no_target" );
self.notargethudelem fadeovertime( 0.25 );
self.notargethudelem.alpha = 0.0;
}
notargethudelem_pulse()
{
self endon( "displaying_no_target" );
self endon( "clear_no_target" );
for (;;)
{
self.notargethudelem fadeovertime( 0.2 );
self.notargethudelem.alpha = 0.7;
wait 0.2;
self.notargethudelem fadeovertime( 0.2 );
self.notargethudelem.alpha = 0.5;
wait 0.2;
}
}
ui_dog_grenade_logic()
{
self.controlled_dog endon( "death" );
for (;;)
{
self.controlled_dog maps\_utility::ent_flag_wait_either( "pause_dog_command", "dog_cooldown" );
setdvar( "ui_dog_grenade", 0 );
self.controlled_dog maps\_utility::ent_flag_waitopen( "pause_dog_command" );
self.controlled_dog maps\_utility::ent_flag_waitopen( "dog_cooldown" );
setdvar( "ui_dog_grenade", 1 );
}
}