835 lines
21 KiB
Plaintext
835 lines
21 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level.radarviewtime = 23;
|
|
level.uavblocktime = 23;
|
|
level.killstreakfuncs["uav_3dping"] = ::tryuse3dping;
|
|
level.uavsettings = [];
|
|
level.uavsettings["uav_3dping"] = spawnstruct();
|
|
level.uavsettings["uav_3dping"].timeout = 63;
|
|
level.uavsettings["uav_3dping"].streakname = "uav_3dping";
|
|
level.uavsettings["uav_3dping"].highlightfadetime = 1.5;
|
|
level.uavsettings["uav_3dping"].pingtime = 10.0;
|
|
level.uavsettings["uav_3dping"].fxid_ping = loadfx( "vfx/gameplay/mp/killstreaks/vfx_3d_world_ping" );
|
|
level.uavsettings["uav_3dping"].sound_ping_plr = "oracle_radar_pulse_plr";
|
|
level.uavsettings["uav_3dping"].sound_ping_npc = "oracle_radar_pulse_npc";
|
|
level.uavsettings["uav_3dping"].votimeout = "oracle_gone";
|
|
level.uavsettings["uav_3dping"].teamsplash = "used_uav_3dping";
|
|
var_0 = getentarray( "minimap_corner", "targetname" );
|
|
|
|
if ( var_0.size )
|
|
var_1 = maps\mp\gametypes\_spawnlogic::findboxcenter( var_0[0].origin, var_0[1].origin );
|
|
else
|
|
var_1 = ( 0, 0, 0 );
|
|
|
|
level.uavrig = spawn( "script_model", var_1 );
|
|
level.uavrig.angles = ( 0, 115, 0 );
|
|
level.uavrig hide();
|
|
level.uavrig.targetname = "uavrig_script_model";
|
|
level.uavrig thread rotateuavrig();
|
|
|
|
if ( level.multiteambased )
|
|
{
|
|
for ( var_2 = 0; var_2 < level.teamnamelist.size; var_2++ )
|
|
{
|
|
level.radarmode[level.teamnamelist[var_2]] = "normal_radar";
|
|
level.activeuavs[level.teamnamelist[var_2]] = 0;
|
|
level.activecounteruavs[level.teamnamelist[var_2]] = 0;
|
|
level.uavmodels[level.teamnamelist[var_2]] = [];
|
|
}
|
|
}
|
|
else if ( level.teambased )
|
|
{
|
|
level.radarmode["allies"] = "normal_radar";
|
|
level.radarmode["axis"] = "normal_radar";
|
|
level.activeuavs["allies"] = 0;
|
|
level.activeuavs["axis"] = 0;
|
|
level.activecounteruavs["allies"] = 0;
|
|
level.activecounteruavs["axis"] = 0;
|
|
level.uavmodels["allies"] = [];
|
|
level.uavmodels["axis"] = [];
|
|
}
|
|
else
|
|
{
|
|
level.radarmode = [];
|
|
level.activeuavs = [];
|
|
level.activecounteruavs = [];
|
|
level.uavmodels = [];
|
|
level thread onplayerconnect();
|
|
}
|
|
|
|
level thread uavtracker();
|
|
}
|
|
|
|
onplayerconnect()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
level.activeuavs[var_0.guid] = 0;
|
|
level.activeuavs[var_0.guid + "_radarStrength"] = 0;
|
|
level.activecounteruavs[var_0.guid] = 0;
|
|
level.radarmode[var_0.guid] = "normal_radar";
|
|
}
|
|
}
|
|
|
|
rotateuavrig( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
self endon( var_1 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
var_0 = 60;
|
|
|
|
for (;;)
|
|
{
|
|
self rotateyaw( -360, var_0 );
|
|
wait( var_0 );
|
|
}
|
|
}
|
|
|
|
tryuseuav( var_0, var_1 )
|
|
{
|
|
return useuav( var_1 );
|
|
}
|
|
|
|
tryuse3dping( var_0, var_1 )
|
|
{
|
|
var_2 = "uav_3dping";
|
|
thread watch3dping( var_2 );
|
|
thread watch3dpingtimeout( var_2 );
|
|
level thread maps\mp\_utility::teamplayercardsplash( level.uavsettings[var_2].teamsplash, self );
|
|
return 1;
|
|
}
|
|
|
|
useuav( var_0 )
|
|
{
|
|
maps\mp\_matchdata::logkillstreakevent( var_0, self.origin );
|
|
var_1 = self.pers["team"];
|
|
var_2 = level.uavsettings[var_0].timeout;
|
|
level thread launchuav( self, var_2, var_0 );
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "counter_uav":
|
|
self notify( "used_counter_uav" );
|
|
break;
|
|
case "directional_uav":
|
|
self.radarshowenemydirection = 1;
|
|
|
|
if ( level.teambased )
|
|
{
|
|
foreach ( var_4 in level.players )
|
|
{
|
|
if ( var_4.pers["team"] == var_1 )
|
|
var_4.radarshowenemydirection = 1;
|
|
}
|
|
}
|
|
|
|
level thread maps\mp\_utility::teamplayercardsplash( level.uavsettings[var_0].teamsplash, self, var_1 );
|
|
self notify( "used_directional_uav" );
|
|
break;
|
|
default:
|
|
self notify( "used_uav" );
|
|
break;
|
|
}
|
|
|
|
return 1;
|
|
}
|
|
|
|
launchuav( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_0.team;
|
|
var_4 = spawn( "script_model", level.uavrig gettagorigin( "tag_origin" ) );
|
|
var_4 setmodel( level.uavsettings[var_2].modelbase );
|
|
var_4.team = var_3;
|
|
var_4.owner = var_0;
|
|
var_4.timetoadd = 0;
|
|
var_4.uavtype = var_2;
|
|
var_4.health = level.uavsettings[var_2].health;
|
|
var_4.maxhealth = level.uavsettings[var_2].maxhealth;
|
|
|
|
if ( var_2 == "directional_uav" )
|
|
var_4 thread spawnfxdelay( level.uavsettings[var_2].fxid_contrail, level.uavsettings[var_2].fx_contrail_tag );
|
|
|
|
var_4 adduavmodel();
|
|
var_4 thread damagetracker();
|
|
var_4 thread handleincomingstinger();
|
|
var_4 thread removeuavmodelondeath();
|
|
var_5 = randomintrange( 3000, 5000 );
|
|
|
|
if ( isdefined( level.spawnpoints ) )
|
|
var_6 = level.spawnpoints;
|
|
else
|
|
var_6 = level.startspawnpoints;
|
|
|
|
var_7 = var_6[0];
|
|
|
|
foreach ( var_9 in var_6 )
|
|
{
|
|
if ( var_9.origin[2] < var_7.origin[2] )
|
|
var_7 = var_9;
|
|
}
|
|
|
|
var_11 = var_7.origin[2];
|
|
var_12 = level.uavrig.origin[2];
|
|
|
|
if ( var_11 < 0 )
|
|
{
|
|
var_12 = var_12 + var_11 * -1;
|
|
var_11 = 0;
|
|
}
|
|
|
|
var_13 = var_12 - var_11;
|
|
|
|
if ( var_13 + var_5 > 8100.0 )
|
|
var_5 = var_5 - ( var_13 + var_5 - 8100.0 );
|
|
|
|
var_14 = randomint( 360 );
|
|
var_15 = randomint( 2000 ) + 5000;
|
|
var_16 = cos( var_14 ) * var_15;
|
|
var_17 = sin( var_14 ) * var_15;
|
|
var_18 = vectornormalize( ( var_16, var_17, var_5 ) );
|
|
var_18 = var_18 * randomintrange( 6000, 7000 );
|
|
var_4 linkto( level.uavrig, "tag_origin", var_18, ( 0, var_14 - 90, 0 ) );
|
|
var_4 thread updateuavmodelvisibility();
|
|
var_4 [[ level.uavsettings[var_2].addfunc ]]();
|
|
|
|
if ( isdefined( level.activeuavs[var_3] ) )
|
|
{
|
|
foreach ( var_20 in level.uavmodels[var_3] )
|
|
{
|
|
if ( var_20 == var_4 )
|
|
continue;
|
|
|
|
var_20.timetoadd = var_20.timetoadd + 5;
|
|
}
|
|
}
|
|
|
|
level notify( "uav_update" );
|
|
var_4 maps\mp\gametypes\_hostmigration::waittill_notify_or_timeout_hostmigration_pause( "death", var_1 );
|
|
|
|
if ( var_4.damagetaken < var_4.maxhealth )
|
|
{
|
|
var_4 unlink();
|
|
var_22 = var_4.origin + anglestoforward( var_4.angles ) * 20000;
|
|
var_4 moveto( var_22, 60 );
|
|
|
|
if ( isdefined( level.uavsettings[var_2].fxid_leave ) && isdefined( level.uavsettings[var_2].fx_leave_tag ) )
|
|
playfxontag( level.uavsettings[var_2].fxid_leave, var_4, level.uavsettings[var_2].fx_leave_tag );
|
|
|
|
var_4 maps\mp\gametypes\_hostmigration::waittill_notify_or_timeout_hostmigration_pause( "death", 3 );
|
|
|
|
if ( var_4.damagetaken < var_4.maxhealth )
|
|
{
|
|
var_4 notify( "leaving" );
|
|
var_4.isleaving = 1;
|
|
var_4 moveto( var_22, 4, 4, 0.0 );
|
|
}
|
|
|
|
var_4 maps\mp\gametypes\_hostmigration::waittill_notify_or_timeout_hostmigration_pause( "death", 4 + var_4.timetoadd );
|
|
}
|
|
|
|
var_4 [[ level.uavsettings[var_2].removefunc ]]();
|
|
var_4 delete();
|
|
var_4 removeuavmodel();
|
|
|
|
if ( var_2 == "directional_uav" )
|
|
{
|
|
var_0.radarshowenemydirection = 0;
|
|
|
|
if ( level.teambased )
|
|
{
|
|
foreach ( var_24 in level.players )
|
|
{
|
|
if ( var_24.pers["team"] == var_3 )
|
|
var_24.radarshowenemydirection = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
level notify( "uav_update" );
|
|
}
|
|
|
|
updateuavmodelvisibility()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level common_scripts\utility::waittill_either( "joined_team", "uav_update" );
|
|
self hide();
|
|
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( level.teambased )
|
|
{
|
|
if ( var_1.team != self.team )
|
|
self showtoplayer( var_1 );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( self.owner ) && var_1 == self.owner )
|
|
continue;
|
|
|
|
self showtoplayer( var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
damagetracker()
|
|
{
|
|
level endon( "game_ended" );
|
|
self setcandamage( 1 );
|
|
self.damagetaken = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
|
|
|
|
if ( !isplayer( var_1 ) )
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( var_8 ) && var_8 & level.idflags_penetration )
|
|
self.wasdamagedfrombulletpenetration = 1;
|
|
|
|
self.wasdamaged = 1;
|
|
var_10 = var_0;
|
|
|
|
if ( isplayer( var_1 ) )
|
|
{
|
|
var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "" );
|
|
|
|
if ( var_4 == "MOD_RIFLE_BULLET" || var_4 == "MOD_PISTOL_BULLET" )
|
|
{
|
|
if ( var_1 maps\mp\_utility::_hasperk( "specialty_armorpiercing" ) )
|
|
var_10 = var_10 + var_0 * level.armorpiercingmod;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_9 ) )
|
|
{
|
|
switch ( var_9 )
|
|
{
|
|
case "javelin_mp":
|
|
case "stinger_mp":
|
|
self.largeprojectiledamage = 1;
|
|
var_10 = self.maxhealth + 1;
|
|
break;
|
|
case "sam_projectile_mp":
|
|
self.largeprojectiledamage = 1;
|
|
var_11 = 0.25;
|
|
|
|
if ( self.uavtype == "directional_uav" )
|
|
var_11 = 0.15;
|
|
|
|
var_10 = self.maxhealth * var_11;
|
|
break;
|
|
}
|
|
|
|
maps\mp\killstreaks\_killstreaks::killstreakhit( var_1, var_9, self );
|
|
}
|
|
|
|
self.damagetaken = self.damagetaken + var_10;
|
|
|
|
if ( self.damagetaken >= self.maxhealth )
|
|
{
|
|
if ( isplayer( var_1 ) && ( !isdefined( self.owner ) || var_1 != self.owner ) )
|
|
{
|
|
thread maps\mp\_utility::teamplayercardsplash( level.uavsettings[self.uavtype].calloutdestroyed, var_1 );
|
|
thread maps\mp\gametypes\_missions::vehiclekilled( self.owner, self, undefined, var_1, var_0, var_4, var_9 );
|
|
var_1 thread maps\mp\gametypes\_rank::giverankxp( "kill", 50, var_9, var_4 );
|
|
var_1 notify( "destroyed_killstreak" );
|
|
|
|
if ( isdefined( self.uavremotemarkedby ) && self.uavremotemarkedby != var_1 )
|
|
self.uavremotemarkedby thread maps\mp\killstreaks\_remoteuav::remoteuav_processtaggedassist();
|
|
}
|
|
|
|
self hide();
|
|
var_12 = anglestoright( self.angles ) * 200;
|
|
playfx( level.uavsettings[self.uavtype].fxid_explode, self.origin, var_12 );
|
|
self notify( "death" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
uavtracker()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "uav_update" );
|
|
|
|
if ( level.multiteambased )
|
|
{
|
|
for ( var_0 = 0; var_0 < level.teamnamelist.size; var_0++ )
|
|
updateteamuavstatus( level.teamnamelist[var_0] );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( level.teambased )
|
|
{
|
|
updateteamuavstatus( "allies" );
|
|
updateteamuavstatus( "axis" );
|
|
continue;
|
|
}
|
|
|
|
updateplayersuavstatus();
|
|
}
|
|
}
|
|
|
|
_getradarstrength( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in level.uavmodels[var_0] )
|
|
{
|
|
if ( var_4.uavtype == "counter_uav" )
|
|
continue;
|
|
|
|
if ( var_4.uavtype == "remote_mortar" )
|
|
continue;
|
|
|
|
var_1++;
|
|
}
|
|
|
|
if ( level.multiteambased )
|
|
{
|
|
foreach ( var_7 in level.teamnamelist )
|
|
{
|
|
foreach ( var_4 in level.uavmodels[var_7] )
|
|
{
|
|
if ( var_7 == var_0 )
|
|
continue;
|
|
|
|
if ( var_4.uavtype != "counter_uav" )
|
|
continue;
|
|
|
|
var_2++;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_4 in level.uavmodels[level.otherteam[var_0]] )
|
|
{
|
|
if ( var_4.uavtype != "counter_uav" )
|
|
continue;
|
|
|
|
var_2++;
|
|
}
|
|
}
|
|
|
|
if ( var_2 > 0 )
|
|
var_13 = -3;
|
|
else
|
|
var_13 = var_1;
|
|
|
|
var_14 = getuavstrengthmin();
|
|
var_15 = getuavstrengthmax();
|
|
|
|
if ( var_13 <= var_14 )
|
|
var_13 = var_14;
|
|
else if ( var_13 >= var_15 )
|
|
var_13 = var_15;
|
|
|
|
return var_13;
|
|
}
|
|
|
|
updateteamuavstatus( var_0 )
|
|
{
|
|
var_1 = _getradarstrength( var_0 );
|
|
setteamradarstrength( var_0, var_1 );
|
|
|
|
if ( var_1 >= getuavstrengthlevelneutral() )
|
|
unblockteamradar( var_0 );
|
|
else
|
|
blockteamradar( var_0 );
|
|
|
|
if ( var_1 <= getuavstrengthlevelneutral() )
|
|
{
|
|
setteamradarwrapper( var_0, 0 );
|
|
updateteamuavtype( var_0 );
|
|
return;
|
|
}
|
|
|
|
if ( var_1 >= getuavstrengthlevelshowenemyfastsweep() )
|
|
level.radarmode[var_0] = "fast_radar";
|
|
else
|
|
level.radarmode[var_0] = "normal_radar";
|
|
|
|
updateteamuavtype( var_0 );
|
|
setteamradarwrapper( var_0, 1 );
|
|
}
|
|
|
|
updateplayersuavstatus()
|
|
{
|
|
var_0 = getuavstrengthmin();
|
|
var_1 = getuavstrengthmax();
|
|
var_2 = getuavstrengthlevelshowenemydirectional();
|
|
|
|
foreach ( var_4 in level.players )
|
|
{
|
|
var_5 = level.activeuavs[var_4.guid + "_radarStrength"];
|
|
|
|
foreach ( var_7 in level.players )
|
|
{
|
|
if ( var_7 == var_4 )
|
|
continue;
|
|
|
|
var_8 = level.activecounteruavs[var_7.guid];
|
|
|
|
if ( var_8 > 0 )
|
|
{
|
|
var_5 = -3;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_5 <= var_0 )
|
|
var_5 = var_0;
|
|
else if ( var_5 >= var_1 )
|
|
var_5 = var_1;
|
|
|
|
var_4.radarstrength = var_5;
|
|
|
|
if ( var_5 >= getuavstrengthlevelneutral() )
|
|
var_4.isradarblocked = 0;
|
|
else
|
|
var_4.isradarblocked = 1;
|
|
|
|
if ( var_5 <= getuavstrengthlevelneutral() )
|
|
{
|
|
var_4.hasradar = 0;
|
|
var_4.radarshowenemydirection = 0;
|
|
continue;
|
|
}
|
|
|
|
if ( var_5 >= getuavstrengthlevelshowenemyfastsweep() )
|
|
var_4.radarmode = "fast_radar";
|
|
else
|
|
var_4.radarmode = "normal_radar";
|
|
|
|
var_4.radarshowenemydirection = var_5 >= var_2;
|
|
var_4.hasradar = 1;
|
|
}
|
|
}
|
|
|
|
blockplayeruav()
|
|
{
|
|
self endon( "disconnect" );
|
|
self notify( "blockPlayerUAV" );
|
|
self endon( "blockPlayerUAV" );
|
|
self.isradarblocked = 1;
|
|
wait( level.uavblocktime );
|
|
self.isradarblocked = 0;
|
|
}
|
|
|
|
updateteamuavtype( var_0 )
|
|
{
|
|
var_1 = _getradarstrength( var_0 ) >= getuavstrengthlevelshowenemydirectional();
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
if ( var_3.team == "spectator" )
|
|
continue;
|
|
|
|
var_3.radarmode = level.radarmode[var_3.team];
|
|
|
|
if ( var_3.team == var_0 )
|
|
var_3.radarshowenemydirection = var_1;
|
|
}
|
|
}
|
|
|
|
useplayeruav( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
self notify( "usePlayerUAV" );
|
|
self endon( "usePlayerUAV" );
|
|
|
|
if ( var_0 )
|
|
self.radarmode = "fast_radar";
|
|
else
|
|
self.radarmode = "normal_radar";
|
|
|
|
self.hasradar = 1;
|
|
wait( var_1 );
|
|
self.hasradar = 0;
|
|
}
|
|
|
|
setteamradarwrapper( var_0, var_1 )
|
|
{
|
|
setteamradar( var_0, var_1 );
|
|
level notify( "radar_status_change", var_0 );
|
|
}
|
|
|
|
handleincomingstinger()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "stinger_fired", var_0, var_1, var_2 );
|
|
|
|
if ( !isdefined( var_2 ) || var_2 != self )
|
|
continue;
|
|
|
|
var_1 thread stingerproximitydetonate( var_2, var_0 );
|
|
}
|
|
}
|
|
|
|
stingerproximitydetonate( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
var_2 = distance( self.origin, var_0 getpointinbounds( 0, 0, 0 ) );
|
|
var_3 = var_0 getpointinbounds( 0, 0, 0 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
var_4 = var_3;
|
|
else
|
|
var_4 = var_0 getpointinbounds( 0, 0, 0 );
|
|
|
|
var_3 = var_4;
|
|
var_5 = distance( self.origin, var_4 );
|
|
|
|
if ( var_5 < var_2 )
|
|
var_2 = var_5;
|
|
|
|
if ( var_5 > var_2 )
|
|
{
|
|
if ( var_5 > 1536 )
|
|
return;
|
|
|
|
radiusdamage( self.origin, 1536, 600, 600, var_1, "MOD_EXPLOSIVE", "stinger_mp" );
|
|
playfx( level.stingerfxid, self.origin );
|
|
self hide();
|
|
self notify( "deleted" );
|
|
wait 0.05;
|
|
self delete();
|
|
var_1 notify( "killstreak_destroyed" );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
adduavmodel()
|
|
{
|
|
if ( level.teambased )
|
|
level.uavmodels[self.team][level.uavmodels[self.team].size] = self;
|
|
else
|
|
level.uavmodels[self.owner.guid + "_" + gettime()] = self;
|
|
}
|
|
|
|
removeuavmodelondeath()
|
|
{
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( self.uavrig ) )
|
|
self.uavrig delete();
|
|
|
|
if ( isdefined( self ) )
|
|
self delete();
|
|
|
|
removeuavmodel();
|
|
}
|
|
|
|
removeuavmodel()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( level.teambased )
|
|
{
|
|
var_1 = self.team;
|
|
|
|
foreach ( var_3 in level.uavmodels[var_1] )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
level.uavmodels[var_1] = var_0;
|
|
}
|
|
else
|
|
{
|
|
foreach ( var_3 in level.uavmodels )
|
|
{
|
|
if ( !isdefined( var_3 ) )
|
|
continue;
|
|
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
|
|
level.uavmodels = var_0;
|
|
}
|
|
}
|
|
|
|
addactiveuav()
|
|
{
|
|
if ( level.teambased )
|
|
level.activeuavs[self.team]++;
|
|
else
|
|
{
|
|
level.activeuavs[self.owner.guid]++;
|
|
level.activeuavs[self.owner.guid + "_radarStrength"]++;
|
|
}
|
|
}
|
|
|
|
addactivecounteruav()
|
|
{
|
|
if ( level.teambased )
|
|
level.activecounteruavs[self.team]++;
|
|
else
|
|
level.activecounteruavs[self.owner.guid]++;
|
|
}
|
|
|
|
removeactiveuav()
|
|
{
|
|
if ( level.teambased )
|
|
level.activeuavs[self.team]--;
|
|
else if ( isdefined( self.owner ) )
|
|
{
|
|
level.activeuavs[self.owner.guid]--;
|
|
level.activeuavs[self.owner.guid + "_radarStrength"]--;
|
|
}
|
|
}
|
|
|
|
removeactivecounteruav()
|
|
{
|
|
if ( level.teambased )
|
|
level.activecounteruavs[self.team]--;
|
|
else if ( isdefined( self.owner ) )
|
|
level.activecounteruavs[self.owner.guid]--;
|
|
}
|
|
|
|
spawnfxdelay( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
wait 0.5;
|
|
playfxontag( var_0, self, var_1 );
|
|
}
|
|
|
|
watch3dping( var_0, var_1 )
|
|
{
|
|
if ( isdefined( var_1 ) )
|
|
var_1 endon( "death" );
|
|
|
|
self endon( "leave" );
|
|
self endon( "killstreak_disowned" );
|
|
level endon( "game_ended" );
|
|
var_2 = level.uavsettings[var_0];
|
|
var_3 = var_2.pingtime;
|
|
|
|
if ( level.teambased )
|
|
level.activeuavs[self.team]++;
|
|
else
|
|
level.activeuavs[self.guid]++;
|
|
|
|
for (;;)
|
|
{
|
|
playfx( var_2.fxid_ping, self.origin );
|
|
self playlocalsound( var_2.sound_ping_plr );
|
|
playsoundatpos( self.origin + ( 0, 0, 5 ), var_2.sound_ping_npc );
|
|
|
|
foreach ( var_5 in level.participants )
|
|
{
|
|
if ( !maps\mp\_utility::isreallyalive( var_5 ) )
|
|
continue;
|
|
|
|
if ( !maps\mp\_utility::isenemy( var_5 ) )
|
|
continue;
|
|
|
|
if ( var_5 maps\mp\_utility::_hasperk( "specialty_noplayertarget" ) )
|
|
continue;
|
|
|
|
var_5 maps\mp\gametypes\_damagefeedback::hudicontype( "oracle" );
|
|
|
|
foreach ( var_7 in level.participants )
|
|
{
|
|
if ( !maps\mp\_utility::isreallyalive( var_7 ) )
|
|
continue;
|
|
|
|
if ( maps\mp\_utility::isenemy( var_7 ) )
|
|
continue;
|
|
|
|
if ( isai( var_7 ) )
|
|
{
|
|
var_7 common_scripts\utility::ai_3d_sighting_model( var_5 );
|
|
continue;
|
|
}
|
|
|
|
var_8 = maps\mp\_utility::outlineenableforplayer( var_5, "orange", var_7, 0, "killstreak" );
|
|
var_9 = var_2.highlightfadetime;
|
|
var_7 thread watchhighlightfadetime( var_8, var_5, var_9, var_1 );
|
|
}
|
|
}
|
|
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_3 );
|
|
}
|
|
}
|
|
|
|
watch3dpingtimeout( var_0 )
|
|
{
|
|
self endon( "killstreak_disowned" );
|
|
level endon( "game_ended" );
|
|
var_1 = level.uavsettings[var_0];
|
|
var_2 = var_1.timeout;
|
|
var_3 = self.guid;
|
|
|
|
if ( level.teambased )
|
|
var_3 = self.team;
|
|
|
|
thread watch_3dping_killstreakdisowned( var_3 );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_2 );
|
|
maps\mp\_utility::leaderdialogonplayer( var_1.votimeout );
|
|
self notify( "leave" );
|
|
cleanup3dping( var_3 );
|
|
}
|
|
|
|
watch_3dping_killstreakdisowned( var_0 )
|
|
{
|
|
self endon( "leave" );
|
|
self waittill( "killstreak_disowned" );
|
|
cleanup3dping( var_0 );
|
|
}
|
|
|
|
cleanup3dping( var_0 )
|
|
{
|
|
level.activeuavs[var_0]--;
|
|
|
|
if ( level.activeuavs[var_0] < 0 )
|
|
level.activeuavs[var_0] = 0;
|
|
}
|
|
|
|
watchhighlightfadetime( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_3 endon( "death" );
|
|
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
common_scripts\utility::waittill_any_timeout_no_endon_death( var_2, "leave" );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
maps\mp\_utility::outlinedisable( var_0, var_1 );
|
|
}
|