252 lines
7.0 KiB
Plaintext
252 lines
7.0 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level.killstreakfuncs["guard_dog"] = ::tryusedog;
|
|
}
|
|
|
|
setup_callbacks()
|
|
{
|
|
level.agent_funcs["dog"] = level.agent_funcs["player"];
|
|
level.agent_funcs["dog"]["spawn"] = ::spawn_dog;
|
|
level.agent_funcs["dog"]["on_killed"] = ::on_agent_dog_killed;
|
|
level.agent_funcs["dog"]["on_damaged"] = maps\mp\agents\_agents::on_agent_generic_damaged;
|
|
level.agent_funcs["dog"]["on_damaged_finished"] = ::on_damaged_finished;
|
|
level.agent_funcs["dog"]["think"] = maps\mp\agents\dog\_dog_think::main;
|
|
}
|
|
|
|
tryusedog( var_0, var_1 )
|
|
{
|
|
return usedog();
|
|
}
|
|
|
|
usedog()
|
|
{
|
|
if ( isdefined( self.hasdog ) && self.hasdog )
|
|
{
|
|
var_0 = self getcommonplayerdatareservedint( "mp_dog_type" );
|
|
|
|
if ( var_0 == 1 )
|
|
self iprintlnbold( &"KILLSTREAKS_ALREADY_HAVE_WOLF" );
|
|
else
|
|
self iprintlnbold( &"KILLSTREAKS_ALREADY_HAVE_DOG" );
|
|
|
|
return 0;
|
|
}
|
|
|
|
if ( maps\mp\agents\_agent_utility::getnumactiveagents( "dog" ) >= 5 )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_DOGS" );
|
|
return 0;
|
|
}
|
|
|
|
if ( maps\mp\agents\_agent_utility::getnumownedactiveagents( self ) >= 2 )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_AGENT_MAX" );
|
|
return 0;
|
|
}
|
|
|
|
var_1 = getmaxagents();
|
|
|
|
if ( maps\mp\agents\_agent_utility::getnumactiveagents() >= var_1 )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE" );
|
|
return 0;
|
|
}
|
|
|
|
if ( !maps\mp\_utility::isreallyalive( self ) )
|
|
return 0;
|
|
|
|
var_2 = maps\mp\agents\_agent_utility::getvalidspawnpathnodenearplayer( 1 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
return 0;
|
|
|
|
var_3 = maps\mp\agents\_agent_common::connectnewagent( "dog", self.team );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return 0;
|
|
|
|
self.hasdog = 1;
|
|
var_3 maps\mp\agents\_agent_utility::set_agent_team( self.team, self );
|
|
var_4 = var_2.origin;
|
|
var_5 = vectortoangles( self.origin - var_2.origin );
|
|
var_3 thread [[ var_3 maps\mp\agents\_agent_utility::agentfunc( "spawn" ) ]]( var_4, var_5, self );
|
|
var_3 maps\mp\_utility::_setnameplatematerial( "player_name_bg_green_dog", "player_name_bg_red_dog" );
|
|
|
|
if ( isdefined( self.balldrone ) && self.balldrone.balldronetype == "ball_drone_backup" )
|
|
maps\mp\gametypes\_missions::processchallenge( "ch_twiceasdeadly" );
|
|
|
|
maps\mp\_matchdata::logkillstreakevent( "guard_dog", self.origin );
|
|
return 1;
|
|
}
|
|
|
|
on_agent_dog_killed( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
|
{
|
|
self.isactive = 0;
|
|
self.hasdied = 0;
|
|
|
|
if ( isdefined( self.owner ) )
|
|
self.owner.hasdog = 0;
|
|
|
|
var_1.lastkilldogtime = gettime();
|
|
|
|
if ( isdefined( self.animcbs.onexit[self.aistate] ) )
|
|
self [[ self.animcbs.onexit[self.aistate] ]]();
|
|
|
|
if ( isplayer( var_1 ) && isdefined( self.owner ) && var_1 != self.owner )
|
|
{
|
|
self.owner maps\mp\_utility::leaderdialogonplayer( "dog_killed" );
|
|
maps\mp\gametypes\_damage::onkillstreakkilled( var_1, var_4, var_3, var_2, "destroyed_guard_dog" );
|
|
|
|
if ( isplayer( var_1 ) )
|
|
{
|
|
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_notsobestfriend" );
|
|
|
|
if ( !self isonground() )
|
|
var_1 maps\mp\gametypes\_missions::processchallenge( "ch_hoopla" );
|
|
}
|
|
}
|
|
|
|
self setanimstate( "death" );
|
|
var_9 = self getanimentry();
|
|
var_10 = getanimlength( var_9 );
|
|
var_8 = int( var_10 * 1000 );
|
|
self.body = self cloneagent( var_8 );
|
|
self playsound( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_shot_death", "anml_dog_shot_death" ) );
|
|
maps\mp\agents\_agent_utility::deactivateagent();
|
|
self notify( "killanimscript" );
|
|
}
|
|
|
|
on_damaged_finished( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
|
|
{
|
|
if ( !isdefined( self.playing_pain_sound ) )
|
|
thread play_pain_sound( 2.5 );
|
|
|
|
var_10 = var_2;
|
|
|
|
if ( isdefined( var_8 ) && var_8 == "head" && level.gametype != "horde" )
|
|
{
|
|
var_10 = int( var_10 * 0.6 );
|
|
|
|
if ( var_2 > 0 && var_10 <= 0 )
|
|
var_10 = 1;
|
|
}
|
|
|
|
if ( self.health - var_10 > 0 )
|
|
maps\mp\agents\dog\_dog_think::ondamage( var_0, var_1, var_10, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
|
|
|
|
if ( isplayer( var_1 ) )
|
|
{
|
|
if ( isdefined( self.attackstate ) && self.attackstate != "attacking" )
|
|
{
|
|
if ( distancesquared( self.origin, var_1.origin ) <= self.dogdamagedradiussq )
|
|
{
|
|
self.favoriteenemy = var_1;
|
|
self.forceattack = 1;
|
|
thread maps\mp\agents\dog\_dog_think::watchfavoriteenemydeath();
|
|
}
|
|
}
|
|
}
|
|
|
|
maps\mp\agents\_agents::agent_damage_finished( var_0, var_1, var_10, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
|
|
}
|
|
|
|
play_pain_sound( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self playsound( common_scripts\utility::ter_op( self.biswolf, "anml_wolf_shot_pain", "anml_dog_shot_pain" ) );
|
|
self.playing_pain_sound = 1;
|
|
wait( var_0 );
|
|
self.playing_pain_sound = undefined;
|
|
}
|
|
|
|
spawn_dog( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 0;
|
|
var_4 = 0;
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( isdefined( var_2.squad_bot_dog_type ) )
|
|
var_3 = var_2.squad_bot_dog_type;
|
|
else
|
|
var_3 = var_2 getcommonplayerdatareservedint( "mp_dog_type" );
|
|
}
|
|
|
|
var_5 = "mp_fullbody_dog_a";
|
|
|
|
if ( var_3 == 1 )
|
|
{
|
|
if ( var_4 == 0 )
|
|
var_5 = "mp_fullbody_wolf_b";
|
|
else
|
|
var_5 = "mp_fullbody_wolf_c";
|
|
}
|
|
|
|
if ( ishairrunning() )
|
|
var_5 = var_5 + "_fur";
|
|
|
|
self setmodel( var_5 );
|
|
self.species = "dog";
|
|
self.onenteranimstate = maps\mp\agents\dog\_dog_think::onenteranimstate;
|
|
|
|
if ( isdefined( var_0 ) && isdefined( var_1 ) )
|
|
{
|
|
var_6 = var_0;
|
|
var_7 = var_1;
|
|
}
|
|
else
|
|
{
|
|
var_8 = self [[ level.getspawnpoint ]]();
|
|
var_6 = var_8.origin;
|
|
var_7 = var_8.angles;
|
|
}
|
|
|
|
maps\mp\agents\_agent_utility::activateagent();
|
|
self.spawntime = gettime();
|
|
self.lastspawntime = gettime();
|
|
self.biswolf = var_3 == 1;
|
|
maps\mp\agents\dog\_dog_think::init();
|
|
|
|
if ( var_3 == 1 )
|
|
var_9 = "wolf_animclass";
|
|
else
|
|
var_9 = "dog_animclass";
|
|
|
|
self spawnagent( var_6, var_7, var_9, 15, 40, var_2 );
|
|
level notify( "spawned_agent", self );
|
|
maps\mp\agents\_agent_common::set_agent_health( 250 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
maps\mp\agents\_agent_utility::set_agent_team( var_2.team, var_2 );
|
|
|
|
self setthreatbiasgroup( "Dogs" );
|
|
self takeallweapons();
|
|
|
|
if ( isdefined( self.owner ) )
|
|
{
|
|
self hide();
|
|
wait 1.0;
|
|
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
self show();
|
|
}
|
|
|
|
self thread [[ maps\mp\agents\_agent_utility::agentfunc( "think" ) ]]();
|
|
wait 0.1;
|
|
|
|
if ( ishairrunning() )
|
|
{
|
|
if ( var_3 == 1 )
|
|
var_10 = level.wolffurfx[var_4];
|
|
else
|
|
var_10 = level.furfx;
|
|
|
|
playfxontag( var_10, self, "tag_origin" );
|
|
}
|
|
}
|