338 lines
8.1 KiB
Plaintext
338 lines
8.1 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
if ( isdefined( anim.tank_bc ) )
|
|
return;
|
|
|
|
level.tank_chatter_enabled = 1;
|
|
anim.tank_bc = spawnstruct();
|
|
anim.tank_bc.bc_isspeaking = 0;
|
|
anim.tank_bc.numtankvoices = 1;
|
|
anim.tank_bc.currentassignedvoice = 0;
|
|
anim.tank_bc.lastalias = [];
|
|
anim.tank_bc.bc_eventtypelastusedtime = [];
|
|
anim.tank_bc.bc_eventtypelastusedtimeplr = [];
|
|
anim.tank_bc.eventtypeminwait = [];
|
|
anim.tank_bc.eventtypeminwait["same_alias"] = 15;
|
|
anim.tank_bc.eventtypeminwait["callout_clock"] = 10;
|
|
anim.tank_bc.eventtypeminwait["killfirm"] = 3;
|
|
anim.tank_bc.eventtypeminwait["inform_firing"] = 10;
|
|
anim.tank_bc.eventtypeminwait["inform_taking_fire"] = 30;
|
|
anim.tank_bc.eventtypeminwait["inform_reloading"] = 5;
|
|
anim.tank_bc.eventtypeminwait["inform_loaded"] = 0.5;
|
|
anim.tank_bc.eventtypeminwait["inform_enemy_hit"] = 5;
|
|
anim.tank_bc.eventtypeminwait["inform_enemy_retreat"] = 5;
|
|
anim.tank_bc.bcprintfailprefix = "^3***** BCS FAILURE: ";
|
|
}
|
|
|
|
init_chatter()
|
|
{
|
|
if ( isplayer( self ) )
|
|
{
|
|
self.voiceid = "plr";
|
|
self.bc_isspeaking = 0;
|
|
thread enemy_callout_tracking_plr();
|
|
}
|
|
else
|
|
return;
|
|
|
|
self.bc_enabled = 1;
|
|
thread tank_shoot_tracking();
|
|
thread take_fire_tracking();
|
|
}
|
|
|
|
tank_shoot_tracking()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self.tank waittill( "firing" );
|
|
var_0 = createevent( "inform_firing", "inform_firing" );
|
|
thread play_chatter( var_0 );
|
|
self.tank waittill( "reloading" );
|
|
var_0 = createevent( "inform_reloading", "inform_reloading" );
|
|
thread play_chatter( var_0 );
|
|
self.tank waittill( "reloaded" );
|
|
var_0 = createevent( "inform_loaded", "inform_loaded" );
|
|
thread play_chatter( var_0 );
|
|
}
|
|
}
|
|
|
|
enemy_death_tracking( var_0 )
|
|
{
|
|
var_0 waittill( "death", var_1 );
|
|
wait 0.5;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
if ( var_1.classname == "misc_turret" )
|
|
var_1 = var_1 getturretowner();
|
|
|
|
if ( isdefined( var_1 ) && isdefined( var_1.bc_enabled ) )
|
|
{
|
|
var_2 = createevent( "killfirm", "killfirm" );
|
|
var_1 play_chatter( var_2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
enemy_damage_tracking( var_0 )
|
|
{
|
|
var_0 endon( "death" );
|
|
|
|
while ( isalive( var_0 ) )
|
|
{
|
|
var_0 waittill( "damage", var_1, var_2 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
if ( var_2.classname == "misc_turret" )
|
|
var_2 = var_2 getturretowner();
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_2.bc_enabled ) )
|
|
{
|
|
var_3 = createevent( "inform_enemy_hit", "inform_hit" );
|
|
var_2 play_chatter( var_3 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
enemy_callout_tracking_plr()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = undefined;
|
|
var_1 = [];
|
|
var_2 = maps\_utility::getvehiclearray();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( var_4.script_team != "allies" )
|
|
var_1 = common_scripts\utility::array_add( var_1, var_4 );
|
|
}
|
|
|
|
var_1 = sortbydistance( var_1, self.origin );
|
|
|
|
foreach ( var_7 in var_1 )
|
|
{
|
|
if ( isdefined( var_7.lastplayercallouttime ) && gettime() - var_7.lastplayercallouttime < 9000 )
|
|
continue;
|
|
|
|
if ( distance2d( self.origin, var_7.origin ) > 2000 )
|
|
break;
|
|
|
|
var_0 = var_7;
|
|
break;
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_1 = getaiarray( "axis" );
|
|
var_1 = common_scripts\utility::array_combine( getaiarray( "team3" ), var_1 );
|
|
var_1 = sortbydistance( var_1, self.origin );
|
|
|
|
foreach ( var_7 in var_1 )
|
|
{
|
|
if ( isdefined( var_7.lastplayercallouttime ) && gettime() - var_7.lastplayercallouttime < 9000 )
|
|
continue;
|
|
|
|
if ( distance2d( self.origin, var_7.origin ) > 2000 )
|
|
break;
|
|
|
|
var_0 = var_7;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
var_11 = createevent( "callout_clock", getthreatalias( var_0 ) );
|
|
|
|
if ( play_chatter( var_11 ) )
|
|
{
|
|
if ( isdefined( var_0 ) )
|
|
var_0.lastplayercallouttime = gettime();
|
|
}
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
take_fire_tracking()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1 );
|
|
self.request_move = 1;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
if ( !isplayer( var_1 ) )
|
|
{
|
|
var_2 = createevent( "inform_taking_fire", "inform_taking_fire" );
|
|
play_chatter( var_2 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
createevent( var_0, var_1 )
|
|
{
|
|
var_2 = spawnstruct();
|
|
var_2.eventtype = var_0;
|
|
var_2.alias = var_1;
|
|
return var_2;
|
|
}
|
|
|
|
getthreatalias( var_0 )
|
|
{
|
|
if ( isplayer( self ) )
|
|
var_1 = animscripts\battlechatter::getdirectionfacingclock( self getplayerangles(), self.origin, var_0.origin );
|
|
else
|
|
var_1 = animscripts\battlechatter::getdirectionfacingclock( self.angles, self.origin, var_0.origin );
|
|
|
|
var_2 = "callout_targetclock_" + var_1;
|
|
|
|
if ( common_scripts\utility::cointoss() )
|
|
{
|
|
if ( isai( var_0 ) )
|
|
var_2 = var_2 + "_troops";
|
|
|
|
if ( var_0 maps\_vehicle::isvehicle() )
|
|
{
|
|
if ( var_0 maps\_vehicle::ishelicopter() )
|
|
var_2 = var_2 + "_bird";
|
|
|
|
if ( var_0 istank() )
|
|
var_2 = var_2 + "_tank";
|
|
}
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
istank()
|
|
{
|
|
if ( issubstr( self.classname, "t90" ) )
|
|
return 1;
|
|
|
|
if ( issubstr( self.classname, "t72" ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
play_chatter( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( !can_say_event_type( var_0.eventtype ) )
|
|
return 0;
|
|
|
|
var_2 = get_team_prefix() + self.voiceid + "_" + var_0.alias;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
return 0;
|
|
|
|
if ( !soundexists( var_2 ) )
|
|
return 0;
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = 0;
|
|
|
|
if ( var_1 && !can_say_soundalias( var_2 ) )
|
|
return 0;
|
|
|
|
if ( isplayer( self ) )
|
|
self.bc_isspeaking = 1;
|
|
else
|
|
anim.tank_bc.bc_isspeaking = 1;
|
|
|
|
iprintln( "tank bcs: " + var_2 );
|
|
self playsound( var_2, "bc_done", 1 );
|
|
self waittill( "bc_done" );
|
|
|
|
if ( isplayer( self ) )
|
|
self.bc_isspeaking = 0;
|
|
else
|
|
anim.tank_bc.bc_isspeaking = 0;
|
|
|
|
update_event_type( var_0.eventtype, var_0.alias );
|
|
return 1;
|
|
}
|
|
|
|
can_say_event_type( var_0 )
|
|
{
|
|
if ( !isdefined( level.tank_chatter_enabled ) || !level.tank_chatter_enabled )
|
|
return 0;
|
|
|
|
if ( !self.bc_enabled )
|
|
return 0;
|
|
|
|
if ( !isplayer( self ) && anim.tank_bc.bc_isspeaking )
|
|
return 0;
|
|
else if ( isplayer( self ) && self.bc_isspeaking )
|
|
return 0;
|
|
|
|
if ( isplayer( self ) && !isdefined( anim.tank_bc.bc_eventtypelastusedtimeplr[var_0] ) )
|
|
return 1;
|
|
else if ( !isplayer( self ) && !isdefined( anim.tank_bc.bc_eventtypelastusedtime[var_0] ) )
|
|
return 1;
|
|
|
|
if ( isplayer( self ) )
|
|
var_1 = anim.tank_bc.bc_eventtypelastusedtimeplr[var_0];
|
|
else
|
|
var_1 = anim.tank_bc.bc_eventtypelastusedtime[var_0];
|
|
|
|
var_2 = anim.tank_bc.eventtypeminwait[var_0] * 1000;
|
|
|
|
if ( gettime() - var_1 >= var_2 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
can_say_soundalias( var_0 )
|
|
{
|
|
if ( isdefined( anim.tank_bc.lastalias["alias"] ) && anim.tank_bc.lastalias["alias"] == var_0 )
|
|
{
|
|
var_1 = anim.tank_bc.lastalias["time"];
|
|
var_2 = anim.tank_bc.eventtypeminwait["same_alias"] * 1000;
|
|
|
|
if ( gettime() - var_1 < var_2 )
|
|
return 0;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
update_event_type( var_0, var_1 )
|
|
{
|
|
if ( isplayer( self ) )
|
|
anim.tank_bc.bc_eventtypelastusedtimeplr[var_0] = gettime();
|
|
else
|
|
anim.tank_bc.bc_eventtypelastusedtime[var_0] = gettime();
|
|
|
|
anim.tank_bc.lastalias["time"] = gettime();
|
|
anim.tank_bc.lastalias["alias"] = var_1;
|
|
}
|
|
|
|
check_overrides( var_0, var_1 )
|
|
{
|
|
return var_1;
|
|
}
|
|
|
|
get_team_prefix()
|
|
{
|
|
return "tank_";
|
|
}
|