iw6-scripts/animscripts/battlechatter_ai.gsc
2024-02-13 13:20:49 +01:00

1215 lines
29 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
addtosystem( var_0 )
{
self endon( "death" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
if ( self.chatinitialized )
return;
if ( !isdefined( self.squad.chatinitialized ) || !self.squad.chatinitialized )
self.squad animscripts\battlechatter::init_squadbattlechatter();
self.enemyclass = "infantry";
self.calledout = [];
if ( isplayer( self ) )
{
self.battlechatter = 0;
self.flavorbursts = 0;
self.type = "human";
return;
}
if ( self.type == "dog" )
{
self.enemyclass = undefined;
self.battlechatter = 0;
self.flavorbursts = 0;
return;
}
if ( self.team == "neutral" )
{
self.enemyclass = undefined;
self.battlechatter = 0;
self.flavorbursts = 0;
return;
}
if ( forceenglish() )
{
if ( self.team == "allies" )
self.script_battlechatter = 0;
else
self.voice = "american";
}
self.countryid = anim.countryids[self.voice];
assign_npcid();
thread ainameandrankwaiter();
init_aibattlechatter();
thread aithreadthreader();
}
assign_npcid()
{
if ( isdefined( self.script_friendname ) )
{
var_0 = tolower( self.script_friendname );
if ( issubstr( var_0, "hesh" ) )
{
self.npcid = "hsh";
return;
}
if ( issubstr( var_0, "keegan" ) )
{
self.npcid = "kgn";
return;
}
if ( issubstr( var_0, "merrick" ) )
{
self.npcid = "mrk";
return;
}
if ( issubstr( var_0, "elias" ) )
{
self.npcid = "els";
return;
}
if ( issubstr( var_0, "rorke" ) )
{
self.npcid = "rke";
return;
}
if ( issubstr( var_0, "ajax" ) )
{
self.npcid = "1";
return;
}
if ( issubstr( var_0, "kick" ) )
{
self.npcid = "0";
return;
}
setnpcid();
return;
return;
return;
return;
return;
return;
return;
}
else
setnpcid();
}
forceenglish()
{
if ( !getdvarint( "bcs_forceEnglish", 0 ) )
return 0;
switch ( level.script )
{
case "pmc_strike":
return 1;
}
return 0;
}
aithreadthreader()
{
self endon( "death" );
self endon( "removed from battleChatter" );
var_0 = 0.5;
wait( var_0 );
thread aigrenadedangerwaiter();
thread aifolloworderwaiter();
if ( self.team == "allies" )
{
wait( var_0 );
thread aidisplacewaiter();
if ( self.countryid == "CZ" )
thread aihostileburstloop();
}
else if ( ( self.team == "axis" || self.team == "team3" ) && !isalliedcountryid( self.countryid ) )
thread aihostileburstloop();
if ( self.team == level.player.team )
thread player_friendlyfire_waiter();
wait( var_0 );
thread aibattlechatterloop();
}
isalliedcountryid( var_0 )
{
if ( var_0 == "UK" || var_0 == "US" || var_0 == "NS" || var_0 == "TF" || var_0 == "SS" )
return 1;
return 0;
}
setnpcid()
{
var_0 = anim.usedids[self.voice];
var_1 = var_0.size;
var_2 = randomintrange( 0, var_1 );
var_3 = var_2;
for ( var_4 = 0; var_4 <= var_1; var_4++ )
{
if ( var_0[( var_2 + var_4 ) % var_1].count < var_0[var_3].count )
var_3 = ( var_2 + var_4 ) % var_1;
}
thread npcidtracker( var_3 );
self.npcid = var_0[var_3].npcid;
}
npcidtracker( var_0 )
{
anim.usedids[self.voice][var_0].count++;
common_scripts\utility::waittill_either( "death", "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
anim.usedids[self.voice][var_0].count--;
}
aihostileburstloop()
{
self endon( "death" );
self endon( "removed from battleChatter" );
wait 2;
for (;;)
{
if ( distancesquared( self.origin, level.player.origin ) < 1048576 )
{
if ( isdefined( self.squad.membercount ) && self.squad.membercount > 1 )
addreactionevent( "taunt", "hostileburst" );
}
wait( randomfloatrange( 2, 5 ) );
}
}
aibattlechatterloop()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
animscripts\battlechatter::playbattlechatter();
wait( 0.3 + randomfloat( 0.2 ) );
}
}
ainameandrankwaiter()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
self.bcname = animscripts\battlechatter::getname();
self.bcrank = animscripts\battlechatter::getrank();
self waittill( "set name and rank" );
}
}
removefromsystem( var_0 )
{
if ( !isalive( self ) && animscripts\battlechatter::bcsenabled() )
{
if ( isdefined( self ) )
{
aideathfriendly();
aideathenemy();
}
}
if ( isdefined( self ) )
{
self.battlechatter = 0;
self.chatinitialized = 0;
}
self notify( "removed from battleChatter" );
if ( isdefined( self ) )
{
self.chatqueue = undefined;
self.nextsaytime = undefined;
self.nextsaytimes = undefined;
self.isspeaking = undefined;
self.enemyclass = undefined;
self.calledout = undefined;
self.countryid = undefined;
self.npcid = undefined;
}
}
init_aibattlechatter()
{
self.chatqueue = [];
self.chatqueue["threat"] = spawnstruct();
self.chatqueue["threat"].expiretime = 0;
self.chatqueue["threat"].priority = 0.0;
self.chatqueue["response"] = spawnstruct();
self.chatqueue["response"].expiretime = 0;
self.chatqueue["response"].priority = 0.0;
self.chatqueue["reaction"] = spawnstruct();
self.chatqueue["reaction"].expiretime = 0;
self.chatqueue["reaction"].priority = 0.0;
self.chatqueue["inform"] = spawnstruct();
self.chatqueue["inform"].expiretime = 0;
self.chatqueue["inform"].priority = 0.0;
self.chatqueue["order"] = spawnstruct();
self.chatqueue["order"].expiretime = 0;
self.chatqueue["order"].priority = 0.0;
self.chatqueue["custom"] = spawnstruct();
self.chatqueue["custom"].expiretime = 0;
self.chatqueue["custom"].priority = 0.0;
self.nextsaytime = gettime() + 50;
self.nextsaytimes["threat"] = 0;
self.nextsaytimes["reaction"] = 0;
self.nextsaytimes["response"] = 0;
self.nextsaytimes["inform"] = 0;
self.nextsaytimes["order"] = 0;
self.nextsaytimes["custom"] = 0;
self.isspeaking = 0;
self.bcs_minpriority = 0.0;
self.allowedcallouts = [];
if ( common_scripts\utility::get_template_level() == "loki" )
{
animscripts\battlechatter::addallowedthreatcallout( "ai_contact_clock" );
animscripts\battlechatter::addallowedthreatcallout( "ai_obvious" );
}
else
{
animscripts\battlechatter::addallowedthreatcallout( "rpg" );
animscripts\battlechatter::addallowedthreatcallout( "exposed" );
animscripts\battlechatter::addallowedthreatcallout( "ai_contact_clock" );
animscripts\battlechatter::addallowedthreatcallout( "ai_target_clock" );
animscripts\battlechatter::addallowedthreatcallout( "ai_cardinal" );
if ( self.team == "allies" )
{
if ( common_scripts\utility::array_contains( anim.playernameids, self.voice ) )
{
animscripts\battlechatter::addallowedthreatcallout( "player_contact_clock" );
animscripts\battlechatter::addallowedthreatcallout( "player_target_clock" );
animscripts\battlechatter::addallowedthreatcallout( "player_cardinal" );
animscripts\battlechatter::addallowedthreatcallout( "player_obvious" );
animscripts\battlechatter::addallowedthreatcallout( "player_object_clock" );
animscripts\battlechatter::addallowedthreatcallout( "player_location" );
}
animscripts\battlechatter::addallowedthreatcallout( "ai_location" );
animscripts\battlechatter::addallowedthreatcallout( "generic_location" );
if ( self.voice == "delta" || self.voice == "taskforce" || self.voice == "seal" )
{
animscripts\battlechatter::addallowedthreatcallout( "ai_obvious" );
animscripts\battlechatter::addallowedthreatcallout( "ai_casual_clock" );
animscripts\battlechatter::addallowedthreatcallout( "concat_location" );
animscripts\battlechatter::addallowedthreatcallout( "concat_location" );
animscripts\battlechatter::addallowedthreatcallout( "player_distance" );
animscripts\battlechatter::addallowedthreatcallout( "player_target_clock_high" );
animscripts\battlechatter::addallowedthreatcallout( "ai_distance" );
animscripts\battlechatter::addallowedthreatcallout( "ai_target_clock_high" );
}
}
}
if ( isdefined( self.script_battlechatter ) && !self.script_battlechatter )
self.battlechatter = 0;
else
self.battlechatter = level.battlechatter[self.team];
if ( animscripts\battlechatter::voicecanburst() )
self.flavorbursts = 1;
else
self.flavorbursts = 0;
if ( level.friendlyfire_warnings )
maps\_utility::set_friendlyfire_warnings( 1 );
else
maps\_utility::set_friendlyfire_warnings( 0 );
self.chatinitialized = 1;
}
addthreatevent( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::cansay( "threat", var_0, var_2 ) )
return;
if ( animscripts\battlechatter::threatwasalreadycalledout( var_1 ) && !isplayer( var_1 ) )
return;
var_3 = animscripts\battlechatter::createchatevent( "threat", var_0, var_2 );
switch ( var_0 )
{
case "infantry":
var_3.threat = var_1;
break;
}
if ( isdefined( var_1.squad ) )
self.squad animscripts\battlechatter::updatecontact( var_1.squad.squadname, self );
self.chatqueue["threat"] = undefined;
self.chatqueue["threat"] = var_3;
}
addresponseevent( var_0, var_1, var_2, var_3, var_4, var_5 )
{
thread addresponseevent_internal( var_0, var_1, var_2, var_3, var_4, var_5 );
}
addresponseevent_internal( var_0, var_1, var_2, var_3, var_4, var_5 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
self endon( "responseEvent_failsafe" );
thread responseevent_failsafe( var_2 );
var_6 = var_2 common_scripts\utility::waittill_any_return( "death", "done speaking", "cancel speaking" );
if ( var_6 == "cancel speaking" )
return;
if ( !isalive( var_2 ) )
return;
if ( !animscripts\battlechatter::cansay( "response", var_0, var_3, var_1 ) )
return;
if ( !isplayer( var_2 ) )
{
if ( animscripts\battlechatter::isusingsamevoice( var_2 ) )
return;
}
var_7 = animscripts\battlechatter::createchatevent( "response", var_0, var_3 );
if ( isdefined( var_4 ) )
var_7.reportalias = var_4;
if ( isdefined( var_5 ) )
var_7.location = var_5;
var_7.respondto = var_2;
var_7.modifier = var_1;
self.chatqueue["response"] = undefined;
self.chatqueue["response"] = var_7;
}
responseevent_failsafe( var_0 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
var_0 endon( "death" );
var_0 endon( "done speaking" );
var_0 endon( "cancel speaking" );
wait 25;
self notify( "responseEvent_failsafe" );
}
addinformevent( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::cansay( "inform", var_0, var_3, var_1 ) )
return;
var_4 = animscripts\battlechatter::createchatevent( "inform", var_0, var_3 );
switch ( var_0 )
{
case "reloading":
var_4.modifier = var_1;
var_4.informto = var_2;
break;
default:
var_4.modifier = var_1;
}
self.chatqueue["inform"] = undefined;
self.chatqueue["inform"] = var_4;
}
addreactionevent( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !isdefined( self.chatqueue ) )
return;
var_4 = animscripts\battlechatter::createchatevent( "reaction", var_0, var_3 );
var_4.reactto = var_2;
var_4.modifier = var_1;
self.chatqueue["reaction"] = undefined;
self.chatqueue["reaction"] = var_4;
}
addorderevent( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::cansay( "order", var_0, var_3, var_1 ) )
return;
if ( isdefined( var_2 ) && var_2.type == "dog" )
return;
var_4 = animscripts\battlechatter::createchatevent( "order", var_0, var_3 );
var_4.modifier = var_1;
var_4.orderto = var_2;
self.chatqueue["order"] = undefined;
self.chatqueue["order"] = var_4;
}
squadofficerwaiter()
{
anim endon( "battlechatter disabled" );
anim endon( "squad deleted " + self.squadname );
for (;;)
{
var_0 = undefined;
if ( self.officers.size )
var_1 = self.officers;
else
var_1 = self.members;
var_2 = [];
foreach ( var_4 in var_1 )
{
if ( isalive( var_4 ) )
var_2[var_2.size] = var_4;
}
if ( var_2.size )
{
var_0 = common_scripts\utility::getclosest( level.player.origin, var_2 );
var_0 aiofficerorders();
var_0 waittill( "death" );
}
wait 3.0;
}
}
getthreatsovertime( var_0, var_1 )
{
var_2 = var_0.size;
if ( var_2 == 0 )
{
wait( var_1 );
return var_0;
}
var_3 = var_1 * 20;
var_4 = var_2 / var_3;
var_5 = [];
for ( var_6 = 0; var_6 < var_2; var_6++ )
{
var_7 = var_0[var_6];
if ( !isdefined( var_7.enemyclass ) )
continue;
var_5[var_5.size] = var_0[var_6];
}
if ( var_5.size == 0 )
{
wait( var_1 );
return var_5;
}
var_5 = sortbydistance( var_5, level.player.origin );
var_8 = [];
var_9 = [];
var_10 = 0;
foreach ( var_12 in var_5 )
{
if ( isdefined( var_12 ) && threatisviable( var_12 ) )
{
var_13 = var_12 animscripts\battlechatter::getlocation();
if ( isdefined( var_13 ) && !animscripts\battlechatter::location_called_out_recently( var_13 ) )
var_8[var_8.size] = var_12;
else
var_9[var_9.size] = var_12;
}
var_10++;
if ( var_10 >= var_4 )
{
wait 0.05;
var_10 = 0;
}
}
var_5 = [];
foreach ( var_16 in var_8 )
var_5[var_5.size] = var_16;
foreach ( var_16 in var_9 )
var_5[var_5.size] = var_16;
return var_5;
}
threatisviable( var_0 )
{
if ( distancesquared( level.player.origin, var_0.origin ) > level.bcs_maxthreatdistsqrdfromplayer )
return 0;
if ( !level.player animscripts\battlechatter::entinfrontarc( var_0 ) )
return 0;
return 1;
}
squadthreatwaiter()
{
anim endon( "battlechatter disabled" );
anim endon( "squad deleted " + self.squadname );
for (;;)
{
if ( self.team == "allies" )
var_0 = getthreatsovertime( getaiarray( "axis", "team3" ), 0.5 );
else if ( self.team == "team3" )
var_0 = getthreatsovertime( getaiarray( "allies", "axis" ), 0.5 );
else
{
wait 0.5;
var_0 = getaiarray( "allies", "team3" );
var_0[var_0.size] = level.player;
}
if ( !var_0.size )
continue;
var_1 = [];
foreach ( var_11, var_3 in self.members )
{
if ( !isalive( var_3 ) )
continue;
if ( !var_0.size )
{
var_0 = var_1;
var_1 = [];
}
foreach ( var_10, var_5 in var_0 )
{
if ( !isdefined( var_5 ) )
{
if ( var_10 == 0 )
var_0 = [];
continue;
}
if ( !isalive( var_5 ) )
continue;
if ( !isdefined( var_5.enemyclass ) )
continue;
if ( !var_3 cansee( var_5 ) )
{
if ( isplayer( var_5 ) )
continue;
if ( var_5.team == level.player.team )
continue;
if ( !maps\_utility::player_can_see_ai( var_5, 250 ) )
continue;
}
var_3 addthreatevent( var_5.enemyclass, var_5 );
var_1[var_1.size] = var_5;
var_6 = [];
foreach ( var_8 in var_0 )
{
if ( var_8 != var_5 )
var_6[var_6.size] = var_8;
}
var_0 = var_6;
break;
}
wait 0.05;
}
}
}
aideathfriendly()
{
var_0 = self.attacker;
common_scripts\utility::array_thread( self.squad.members, ::aideatheventthread );
if ( isalive( var_0 ) && issentient( var_0 ) && isdefined( var_0.squad ) && var_0.battlechatter )
{
if ( isdefined( var_0.calledout[var_0.squad.squadname] ) )
var_0.calledout[var_0.squad.squadname] = undefined;
if ( !isdefined( var_0.enemyclass ) )
return;
if ( !var_0 animscripts\battlechatter::is_in_callable_location() )
return;
foreach ( var_2 in self.squad.members )
{
if ( gettime() > var_2.lastenemysighttime + 2000 )
continue;
var_2 addthreatevent( var_0.enemyclass, var_0 );
}
}
}
aideatheventthread()
{
if ( !isalive( self ) )
return;
self endon( "death" );
self endon( "removed from battleChatter" );
self notify( "aiDeathEventThread" );
self endon( "aiDeathEventThread" );
wait 1.5;
addreactionevent( "casualty", "generic", self, 0.9 );
}
aideathenemy()
{
var_0 = self.attacker;
if ( !isalive( var_0 ) || !issentient( var_0 ) || !isdefined( var_0.squad ) )
return;
if ( !isdefined( var_0.countryid ) )
return;
if ( !isplayer( var_0 ) )
{
if ( var_0.countryid == "GS" || var_0.countryid == "GM" || var_0.countryid == "GL" )
var_0 thread aikilleventthread();
}
}
aikilleventthread()
{
self endon( "death" );
self endon( "removed from battleChatter" );
wait 1.5;
addinformevent( "killfirm", "generic" );
}
aiofficerorders()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !isdefined( self.squad.chatinitialized ) )
self.squad waittill( "squad chat initialized" );
for (;;)
{
if ( getdvarint( "bcs_enable" ) == 0 )
{
wait 1.0;
continue;
}
addsituationalorder();
wait( randomfloatrange( 3.0, 6.0 ) );
}
}
aigrenadedangerwaiter()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
self waittill( "grenade danger", var_0 );
if ( getdvarint( "bcs_enable" ) == 0 )
continue;
if ( !isdefined( var_0 ) || var_0.model != "projectile_m67fraggrenade" )
continue;
if ( distancesquared( var_0.origin, level.player.origin ) < 262144 )
addinformevent( "incoming", "grenade" );
}
}
aidisplacewaiter()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
self waittill( "trigger" );
if ( getdvarint( "bcs_enable" ) == 0 )
continue;
if ( gettime() < self.a.paintime + 4000 )
continue;
addresponseevent( "ack", "yes", level.player, 1.0 );
}
}
evaluatemoveevent( var_0 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
if ( !isdefined( self.node ) )
return;
if ( distancesquared( self.origin, self.node.origin ) < 262144 )
return;
if ( !animscripts\battlechatter::isnodecoverorconceal() )
return;
if ( !nationalityokformoveorder() )
return;
var_1 = animscripts\battlechatter::getresponder( 24, 1024, "response" );
if ( self.team != "axis" && self.team != "team3" )
{
if ( !isdefined( var_1 ) )
var_1 = level.player;
else if ( randomint( 100 ) < anim.eventchance["moveEvent"]["ordertoplayer"] )
var_1 = level.player;
}
if ( self.combattime > 0.0 )
{
if ( randomint( 100 ) < anim.eventchance["moveEvent"]["coverme"] )
addorderevent( "action", "coverme", var_1 );
else
addorderevent( "move", "combat", var_1 );
}
else if ( nationalityokformoveordernoncombat() )
addorderevent( "move", "noncombat", var_1 );
}
nationalityokformoveorder()
{
if ( self.countryid == "SS" )
return 0;
return 1;
}
nationalityokformoveordernoncombat()
{
if ( self.countryid == "US" )
return 1;
return 0;
}
aifolloworderwaiter()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
level waittill( "follow order", var_0 );
if ( !animscripts\battlechatter::bcsenabled() )
return;
if ( !isdefined( var_0 ) )
continue;
if ( !isalive( var_0 ) || var_0.team != self.team )
continue;
if ( distancesquared( self.origin, var_0.origin ) < 360000 )
addresponseevent( "ack", "yes", var_0, 0.9 );
}
}
player_friendlyfire_waiter()
{
self endon( "death" );
self endon( "removed from battleChatter" );
thread player_friendlyfire_waiter_damage();
for (;;)
{
self waittill( "bulletwhizby", var_0, var_1 );
if ( !animscripts\battlechatter::bcsenabled() )
continue;
if ( !isplayer( var_0 ) )
{
if ( anim.countryids[self.voice] == "GM" && animscripts\battlechatter::cansay( "reaction", "takingfire", 1.0, undefined ) )
addreactionevent( "takingfire", undefined, var_0, 1.0 );
continue;
}
if ( friendlyfire_whizby_distances_valid( var_0, var_1 ) )
{
player_friendlyfire_addreactionevent();
wait 3;
}
}
}
player_friendlyfire_addreactionevent()
{
addreactionevent( "friendlyfire", undefined, level.player, 1.0 );
}
player_friendlyfire_waiter_damage()
{
self endon( "death" );
self endon( "removed from battleChatter" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4 );
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( damage_is_valid_for_friendlyfire_warning( var_4 ) )
player_friendlyfire_addreactionevent();
}
}
}
damage_is_valid_for_friendlyfire_warning( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
switch ( var_0 )
{
case "MOD_IMPACT":
case "MOD_CRUSH":
case "MOD_MELEE":
case "MOD_GRENADE_SPLASH":
case "MOD_GRENADE":
return 0;
}
return 1;
}
friendlyfire_whizby_distances_valid( var_0, var_1 )
{
var_2 = 65536;
var_3 = 42;
if ( distancesquared( var_0.origin, self.origin ) < var_2 )
return 0;
if ( var_1 > var_3 )
return 0;
return 1;
}
evaluatereloadevent()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
addinformevent( "reloading", "generic" );
}
evaluatemeleeevent()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return 0;
if ( !isdefined( self.enemy ) )
return 0;
return 0;
}
evaluatefiringevent()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
if ( !isdefined( self.enemy ) )
return;
}
evaluatesuppressionevent()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
if ( !self.suppressed )
return;
addinformevent( "suppressed", "generic" );
}
evaluateattackevent( var_0 )
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( !animscripts\battlechatter::bcsenabled() )
return;
addinformevent( "attack", "grenade" );
}
addsituationalorder()
{
self endon( "death" );
self endon( "removed from battleChatter" );
if ( self.squad.squadstates["combat"].isactive )
addsituationalcombatorder();
}
addsituationalcombatorder()
{
self endon( "death" );
self endon( "removed from battleChatter" );
var_0 = self.squad;
var_0 animscripts\squadmanager::updatestates();
if ( var_0.squadstates["suppressed"].isactive )
{
if ( var_0.squadstates["cover"].isactive )
{
var_1 = animscripts\battlechatter::getresponder( 96, 512, "response" );
addorderevent( "action", "grenade", var_1 );
}
else
addorderevent( "displace", "generic" );
}
else if ( var_0.squadstates["combat"].isactive )
{
if ( self.countryid != "SS" )
{
var_1 = animscripts\battlechatter::getresponder( 24, 1024, "response" );
addorderevent( "action", "suppress", var_1 );
}
}
}
custom_battlechatter_init_valid_phrases()
{
var_0 = [];
var_0[var_0.size] = "order_move_combat";
var_0[var_0.size] = "order_move_noncombat";
var_0[var_0.size] = "order_action_coverme";
var_0[var_0.size] = "inform_reloading";
level.custombcs_validphrases = var_0;
}
custom_battlechatter_validate_phrase( var_0 )
{
var_1 = 0;
foreach ( var_3 in level.custombcs_validphrases )
{
if ( var_3 == var_0 )
{
var_1 = 1;
break;
}
}
return var_1;
}
get_phraseinvalidstr( var_0 )
{
return anim.bcprintfailprefix + "custom battlechatter phrase '" + var_0 + "' isn't valid. look at _utility::custom_battlechatter_init_valid_phrases(), or the util script documentation for custom_battlechatter(), for a list of valid phrases.";
}
get_badcountryidstr( var_0 )
{
return anim.bcprintfailprefix + "AI at origin " + self.origin + "wasn't able to play custom battlechatter because his nationality is '" + self.countryid + "'.";
}
custom_battlechatter_internal( var_0 )
{
if ( !isdefined( level.custombcs_validphrases ) )
custom_battlechatter_init_valid_phrases();
var_0 = tolower( var_0 );
if ( !custom_battlechatter_validate_phrase( var_0 ) )
{
var_1 = get_phraseinvalidstr( var_0 );
return 0;
}
var_2 = animscripts\battlechatter::getresponder( 24, 512, "response" );
begincustomevent();
switch ( var_0 )
{
case "order_move_combat":
if ( !nationalityokformoveorder() )
return 0;
animscripts\battlechatter::tryorderto( self.customchatphrase, var_2 );
addmovecombataliasex();
break;
case "order_move_noncombat":
if ( !nationalityokformoveordernoncombat() )
return 0;
addmovenoncombataliasex();
break;
case "order_action_coverme":
animscripts\battlechatter::tryorderto( self.customchatphrase, var_2 );
addactioncovermealiasex();
break;
case "inform_reloading":
addinformreloadingaliasex();
break;
default:
var_1 = get_phraseinvalidstr( var_0 );
return 0;
}
endcustomevent( 2000 );
return 1;
}
begincustomevent()
{
if ( !animscripts\battlechatter::bcsenabled() )
return;
self.customchatphrase = animscripts\battlechatter::createchatphrase();
}
addactioncovermealiasex()
{
self.customchatphrase animscripts\battlechatter::addorderalias( "action", "coverme" );
}
addmovecombataliasex()
{
self.customchatphrase animscripts\battlechatter::addorderalias( "move", "combat" );
}
addmovenoncombataliasex()
{
self.customchatphrase animscripts\battlechatter::addorderalias( "move", "noncombat" );
}
addinformreloadingaliasex()
{
self.customchatphrase animscripts\battlechatter::addinformalias( "reloading", "generic" );
}
addnamealiasex( var_0 )
{
if ( !animscripts\battlechatter::bcsenabled() )
return;
self.customchatphrase animscripts\battlechatter::addnamealias( var_0 );
}
endcustomevent( var_0, var_1 )
{
if ( !animscripts\battlechatter::bcsenabled() )
return;
var_2 = animscripts\battlechatter::createchatevent( "custom", "generic", 1.0 );
if ( isdefined( var_0 ) )
var_2.expiretime = gettime() + var_0;
if ( isdefined( var_1 ) )
var_2.type = var_1;
else
var_2.type = "custom";
self.chatqueue["custom"] = undefined;
self.chatqueue["custom"] = var_2;
}