421 lines
10 KiB
Plaintext
421 lines
10 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level.uplinks = [];
|
|
level.killstreakfuncs["uplink"] = ::tryuseuplink;
|
|
level.killstreakfuncs["uplink_support"] = ::tryuseuplink;
|
|
level.comexpfuncs = [];
|
|
level.comexpfuncs["giveComExpBenefits"] = ::givecomexpbenefits;
|
|
level.comexpfuncs["removeComExpBenefits"] = ::removecomexpbenefits;
|
|
level.comexpfuncs["getRadarStrengthForTeam"] = ::getradarstrengthforteam;
|
|
level.comexpfuncs["getRadarStrengthForPlayer"] = ::getradarstrengthforplayer;
|
|
unblockteamradar( "axis" );
|
|
unblockteamradar( "allies" );
|
|
level thread uplinktracker();
|
|
level thread uplinkupdateeyeson();
|
|
var_0 = spawnstruct();
|
|
var_0.streakname = "uplink";
|
|
var_0.weaponinfo = "ims_projectile_mp";
|
|
var_0.modelbase = "mp_satcom";
|
|
var_0.modelplacement = "mp_satcom_obj";
|
|
var_0.modelplacementfailed = "mp_satcom_obj_red";
|
|
var_0.modelbombsquad = "mp_satcom_bombsquad";
|
|
var_0.hintstring = &"KILLSTREAKS_HINTS_UPLINK_PICKUP";
|
|
var_0.placestring = &"KILLSTREAKS_HINTS_UPLINK_PLACE";
|
|
var_0.cannotplacestring = &"KILLSTREAKS_HINTS_UPLINK_CANNOT_PLACE";
|
|
var_0.headiconheight = 42;
|
|
var_0.splashname = "used_uplink";
|
|
var_0.lifespan = 30;
|
|
var_0.maxhealth = 500;
|
|
var_0.allowmeleedamage = 1;
|
|
var_0.allowempdamage = 1;
|
|
var_0.damagefeedback = "trophy";
|
|
var_0.xppopup = "destroyed_uplink";
|
|
var_0.destroyedvo = "satcom_destroyed";
|
|
var_0.placementheighttolerance = 30.0;
|
|
var_0.placementradius = 16.0;
|
|
var_0.placementoffsetz = 16;
|
|
var_0.onplaceddelegate = ::onplaced;
|
|
var_0.oncarrieddelegate = ::oncarried;
|
|
var_0.placedsfx = "mp_killstreak_satcom_deploy";
|
|
var_0.activesfx = "mp_killstreak_satcom_loop";
|
|
var_0.onmovingplatformcollision = ::uplink_override_moving_platform_death;
|
|
var_0.ondeathdelegate = ::ondeath;
|
|
var_0.ondestroyeddelegate = ::ondestroyed;
|
|
var_0.deathvfx = loadfx( "vfx/gameplay/mp/killstreaks/vfx_ballistic_vest_death" );
|
|
level.placeableconfigs["uplink"] = var_0;
|
|
level.placeableconfigs["uplink_support"] = var_0;
|
|
}
|
|
|
|
uplinktracker()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "update_uplink" );
|
|
level childthread updatealluplinkthreads();
|
|
}
|
|
}
|
|
|
|
updatealluplinkthreads()
|
|
{
|
|
self notify( "updateAllUplinkThreads" );
|
|
self endon( "updateAllUplinkThreads" );
|
|
level childthread comexpnotifywatcher();
|
|
|
|
if ( level.teambased )
|
|
{
|
|
level childthread updateteamuplink( "axis" );
|
|
level childthread updateteamuplink( "allies" );
|
|
}
|
|
else
|
|
level childthread updateplayeruplink();
|
|
|
|
level childthread updatecomexpuplink();
|
|
}
|
|
|
|
comexpnotifywatcher()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( !level.teambased )
|
|
level waittill( "radar_status_change_players" );
|
|
else
|
|
{
|
|
while ( var_0.size < 2 )
|
|
{
|
|
level waittill( "radar_status_change", var_1 );
|
|
var_0[var_0.size] = var_1;
|
|
}
|
|
}
|
|
|
|
level notify( "start_com_exp" );
|
|
}
|
|
|
|
updateteamuplink( var_0 )
|
|
{
|
|
var_1 = getradarstrengthforteam( var_0 );
|
|
var_2 = var_1 == 1;
|
|
var_3 = var_1 >= 2;
|
|
var_4 = var_1 >= 3;
|
|
var_5 = var_1 >= 4;
|
|
|
|
if ( var_3 )
|
|
unblockteamradar( var_0 );
|
|
|
|
if ( var_4 )
|
|
level.radarmode[var_0] = "fast_radar";
|
|
else
|
|
level.radarmode[var_0] = "normal_radar";
|
|
|
|
foreach ( var_7 in level.participants )
|
|
{
|
|
if ( !isdefined( var_7 ) )
|
|
continue;
|
|
|
|
if ( var_7.team != var_0 )
|
|
continue;
|
|
|
|
var_7.shouldbeeyeson = var_2;
|
|
var_7 seteyesonuplinkenabled( var_2 );
|
|
var_7.radarmode = level.radarmode[var_7.team];
|
|
var_7.radarshowenemydirection = var_5;
|
|
var_7 updatesatcomactiveomnvar( var_0 );
|
|
wait 0.05;
|
|
}
|
|
|
|
setteamradar( var_0, var_3 );
|
|
level notify( "radar_status_change", var_0 );
|
|
}
|
|
|
|
updateplayeruplink()
|
|
{
|
|
foreach ( var_1 in level.participants )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
continue;
|
|
|
|
var_2 = getradarstrengthforplayer( var_1 );
|
|
setplayerradareffect( var_1, var_2 );
|
|
var_1 updatesatcomactiveomnvar();
|
|
wait 0.05;
|
|
}
|
|
|
|
level notify( "radar_status_change_players" );
|
|
}
|
|
|
|
updatecomexpuplink()
|
|
{
|
|
level waittill( "start_com_exp" );
|
|
|
|
foreach ( var_1 in level.participants )
|
|
{
|
|
if ( !isdefined( var_1 ) )
|
|
continue;
|
|
|
|
var_1 givecomexpbenefits();
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
givecomexpbenefits()
|
|
{
|
|
if ( maps\mp\_utility::_hasperk( "specialty_comexp" ) )
|
|
{
|
|
var_0 = getradarstrengthforcomexp( self );
|
|
setplayerradareffect( self, var_0 );
|
|
updatesatcomactiveomnvar();
|
|
}
|
|
}
|
|
|
|
updatesatcomactiveomnvar( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_1 = getradarstrengthforteam( var_0 );
|
|
else
|
|
var_1 = getradarstrengthforplayer( self );
|
|
|
|
if ( maps\mp\_utility::_hasperk( "specialty_comexp" ) )
|
|
var_1 = getradarstrengthforcomexp( self );
|
|
|
|
if ( var_1 > 0 )
|
|
self setclientomnvar( "ui_satcom_active", 1 );
|
|
else
|
|
self setclientomnvar( "ui_satcom_active", 0 );
|
|
}
|
|
|
|
removecomexpbenefits()
|
|
{
|
|
self.shouldbeeyeson = 0;
|
|
self seteyesonuplinkenabled( 0 );
|
|
self.radarshowenemydirection = 0;
|
|
self.radarmode = "normal_radar";
|
|
self.hasradar = 0;
|
|
self.isradarblocked = 0;
|
|
}
|
|
|
|
setplayerradareffect( var_0, var_1 )
|
|
{
|
|
var_2 = var_1 == 1;
|
|
var_3 = var_1 >= 2;
|
|
var_4 = var_1 >= 3;
|
|
var_5 = var_1 >= 4;
|
|
var_0.shouldbeeyeson = var_2;
|
|
var_0 seteyesonuplinkenabled( var_2 );
|
|
var_0.radarshowenemydirection = var_5;
|
|
var_0.radarmode = "normal_radar";
|
|
var_0.hasradar = var_3;
|
|
var_0.isradarblocked = 0;
|
|
|
|
if ( var_4 )
|
|
var_0.radarmode = "fast_radar";
|
|
}
|
|
|
|
tryuseuplink( var_0, var_1 )
|
|
{
|
|
var_2 = maps\mp\killstreaks\_placeable::giveplaceable( var_1 );
|
|
|
|
if ( var_2 )
|
|
maps\mp\_matchdata::logkillstreakevent( "uplink", self.origin );
|
|
|
|
self.iscarrying = undefined;
|
|
return var_2;
|
|
}
|
|
|
|
oncarried( var_0 )
|
|
{
|
|
var_1 = self getentitynumber();
|
|
|
|
if ( isdefined( level.uplinks[var_1] ) )
|
|
stopuplink();
|
|
}
|
|
|
|
onplaced( var_0 )
|
|
{
|
|
var_1 = level.placeableconfigs[var_0];
|
|
self.owner notify( "uplink_deployed" );
|
|
self setmodel( var_1.modelbase );
|
|
self.immediatedeath = 0;
|
|
self setotherent( self.owner );
|
|
common_scripts\utility::make_entity_sentient_mp( self.owner.team, 1 );
|
|
self.config = var_1;
|
|
startuplink( 1 );
|
|
thread watchempdamage();
|
|
}
|
|
|
|
startuplink( var_0 )
|
|
{
|
|
adduplinktolevellist( self );
|
|
thread playuplinkanimations( var_0 );
|
|
self playloopsound( self.config.activesfx );
|
|
}
|
|
|
|
stopuplink()
|
|
{
|
|
maps\mp\gametypes\_weapons::stopblinkinglight();
|
|
self scriptmodelclearanim();
|
|
|
|
if ( isdefined( self.bombsquadmodel ) )
|
|
self.bombsquadmodel scriptmodelclearanim();
|
|
|
|
removeuplinkfromlevellist( self );
|
|
self stoploopsound();
|
|
}
|
|
|
|
#using_animtree("animated_props");
|
|
|
|
playuplinkanimations( var_0 )
|
|
{
|
|
self endon( "emp_damage" );
|
|
self endon( "death" );
|
|
self endon( "carried" );
|
|
|
|
if ( var_0 )
|
|
{
|
|
var_1 = getnotetracktimes( %satcom_killstreak, "stop anim" );
|
|
var_2 = getanimlength( %satcom_killstreak );
|
|
self scriptmodelplayanim( "Satcom_killStreak" );
|
|
|
|
if ( isdefined( self.bombsquadmodel ) )
|
|
self.bombsquadmodel scriptmodelplayanim( "Satcom_killStreak" );
|
|
|
|
wait( var_1[0] * var_2 );
|
|
}
|
|
|
|
self scriptmodelplayanim( "Satcom_killStreak_idle" );
|
|
|
|
if ( isdefined( self.bombsquadmodel ) )
|
|
self.bombsquadmodel scriptmodelplayanim( "Satcom_killStreak_idle" );
|
|
|
|
thread maps\mp\gametypes\_weapons::doblinkinglight( "tag_fx" );
|
|
}
|
|
|
|
ondestroyed( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_1 notify( "destroyed_equipment" );
|
|
}
|
|
|
|
ondeath( var_0, var_1, var_2, var_3 )
|
|
{
|
|
maps\mp\gametypes\_weapons::stopblinkinglight();
|
|
maps\mp\gametypes\_weapons::equipmentdeathvfx();
|
|
removeuplinkfromlevellist( self );
|
|
self scriptmodelclearanim();
|
|
|
|
if ( !self.immediatedeath )
|
|
wait 3.0;
|
|
|
|
maps\mp\gametypes\_weapons::equipmentdeletevfx();
|
|
}
|
|
|
|
adduplinktolevellist( var_0 )
|
|
{
|
|
var_1 = var_0 getentitynumber();
|
|
level.uplinks[var_1] = var_0;
|
|
level notify( "update_uplink" );
|
|
}
|
|
|
|
removeuplinkfromlevellist( var_0 )
|
|
{
|
|
var_1 = var_0 getentitynumber();
|
|
level.uplinks[var_1] = undefined;
|
|
level notify( "update_uplink" );
|
|
}
|
|
|
|
getradarstrengthforteam( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in level.uplinks )
|
|
{
|
|
if ( isdefined( var_3 ) && var_3.team == var_0 )
|
|
var_1++;
|
|
}
|
|
|
|
if ( var_1 == 0 && isdefined( level.helisnipereyeson ) && level.helisnipereyeson.team == var_0 )
|
|
var_1++;
|
|
|
|
return clamp( var_1, 0, 4 );
|
|
}
|
|
|
|
getradarstrengthforplayer( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in level.uplinks )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
if ( isdefined( var_3.owner ) )
|
|
{
|
|
if ( var_3.owner.guid == var_0.guid )
|
|
var_1++;
|
|
|
|
continue;
|
|
}
|
|
|
|
var_4 = var_3 getentitynumber();
|
|
level.uplinks[var_4] = undefined;
|
|
}
|
|
}
|
|
|
|
if ( !level.teambased && var_1 > 0 )
|
|
var_1++;
|
|
|
|
return clamp( var_1, 0, 4 );
|
|
}
|
|
|
|
getradarstrengthforcomexp( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
|
|
foreach ( var_3 in level.uplinks )
|
|
{
|
|
if ( isdefined( var_3 ) )
|
|
var_1++;
|
|
}
|
|
|
|
if ( !level.teambased && var_1 > 0 )
|
|
var_1++;
|
|
|
|
return clamp( var_1, 0, 4 );
|
|
}
|
|
|
|
uplink_override_moving_platform_death( var_0 )
|
|
{
|
|
self.immediatedeath = 1;
|
|
self notify( "death" );
|
|
}
|
|
|
|
watchempdamage()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "emp_damage", var_0, var_1 );
|
|
maps\mp\gametypes\_weapons::equipmentempstunvfx();
|
|
stopuplink();
|
|
wait( var_1 );
|
|
startuplink( 0 );
|
|
}
|
|
}
|
|
|
|
uplinkupdateeyeson()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "player_spawned", var_0 );
|
|
var_1 = isdefined( var_0.shouldbeeyeson ) && var_0.shouldbeeyeson;
|
|
var_0 seteyesonuplinkenabled( var_1 );
|
|
}
|
|
}
|