mirror of
https://github.com/ineedbots/iw5_bot_warfare.git
synced 2025-04-25 23:29:12 +00:00
719 lines
21 KiB
Plaintext
719 lines
21 KiB
Plaintext
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\gametypes\_hud_util;
|
|
|
|
init()
|
|
{
|
|
level thread watchNuke();
|
|
|
|
level thread onPlayerConnect();
|
|
|
|
setDvarIfUninitialized("scr_killstreak_print", 0);
|
|
setDvarIfUninitialized("scr_printDamage", 0);
|
|
|
|
level.killstreakPrint = getDvarInt("scr_killstreak_print");
|
|
level.allowPrintDamage = getDvarInt("scr_printDamage");
|
|
}
|
|
|
|
main()
|
|
{
|
|
// fix G-GetPlayereye bug
|
|
replaceFunc( maps\mp\killstreaks\_helicopter::heli_leave, ::heli_leave );
|
|
replaceFunc( maps\mp\killstreaks\_helicopter::heli_explode, ::heli_explode );
|
|
|
|
// allow scr_xpscale to be anything
|
|
replaceFunc( maps\mp\gametypes\_rank::init, ::rank_init );
|
|
replaceFunc( maps\mp\gametypes\_rank::syncXPStat, ::syncXPStat );
|
|
|
|
// add scr_spawnpointfavorweight dvar
|
|
replaceFunc( maps\mp\gametypes\_spawnlogic::getSpawnpoint_NearTeam, ::getSpawnpoint_NearTeam );
|
|
|
|
// add damage numbers
|
|
replaceFunc( maps\mp\gametypes\_damage::finishPlayerDamageWrapper, ::finishPlayerDamageWrapper );
|
|
|
|
// more perks for specialist bonus
|
|
replaceFunc( maps\mp\killstreaks\_killstreaks::giveAllPerks, ::giveAllPerks );
|
|
|
|
// scavenge all types of ammo
|
|
replaceFunc( maps\mp\gametypes\_weapons::handleScavengerBagPickup, ::handleScavengerBagPickup );
|
|
|
|
// only nuke slow mo once
|
|
replaceFunc( maps\mp\killstreaks\_nuke::nukeSlowMo, ::nukeSlowMo );
|
|
|
|
// fix array index issue with remoteuav when gettime is high
|
|
replaceFunc( maps\mp\killstreaks\_remoteuav::remoteUAV_trackEntities, ::remoteUAV_trackEntities );
|
|
replaceFunc( maps\mp\killstreaks\_remoteuav::remoteUAV_unmarkRemovedPlayer, ::remoteUAV_unmarkRemovedPlayer );
|
|
}
|
|
|
|
heli_explode( var_0 )
|
|
{
|
|
self notify( "death" );
|
|
|
|
if ( isdefined( var_0 ) && isdefined( level.chopper_fx["explode"]["air_death"][self.heli_type] ) )
|
|
{
|
|
var_1 = self gettagangles( "tag_deathfx" );
|
|
playfx( level.chopper_fx["explode"]["air_death"][self.heli_type], self gettagorigin( "tag_deathfx" ), anglestoforward( var_1 ), anglestoup( var_1 ) );
|
|
}
|
|
else
|
|
{
|
|
var_2 = self.origin;
|
|
var_3 = self.origin + ( 0, 0, 1 ) - self.origin;
|
|
playfx( level.chopper_fx["explode"]["death"][self.heli_type], var_2, var_3 );
|
|
}
|
|
|
|
self playsound( level.heli_sound[self.team]["crash"] );
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self.killCamEnt ) )
|
|
self.killCamEnt delete ();
|
|
|
|
if ( self.heliType == "osprey_gunner" )
|
|
{
|
|
if ( isDefined( self ) )
|
|
self hide();
|
|
|
|
wait 30;
|
|
|
|
maps\mp\_utility::decrementFauxVehicleCount();
|
|
|
|
if ( isDefined( self ) )
|
|
self delete ();
|
|
}
|
|
else
|
|
{
|
|
maps\mp\_utility::decrementFauxVehicleCount();
|
|
self delete ();
|
|
}
|
|
}
|
|
|
|
heli_leave( var_0 )
|
|
{
|
|
self notify( "leaving" );
|
|
|
|
if ( isdefined( self.heliType ) && self.heliType == "osprey" && isdefined( self.pathGoal ) )
|
|
{
|
|
self setvehgoalpos( self.pathGoal, 1 );
|
|
common_scripts\utility::waittill_any_timeout( 5, "goal" );
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
{
|
|
var_1 = level.heli_leave_nodes[randomint( level.heli_leave_nodes.size )];
|
|
var_0 = var_1.origin;
|
|
}
|
|
|
|
var_2 = spawn( "script_origin", var_0 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
self setlookatent( var_2 );
|
|
var_2 thread maps\mp\killstreaks\_helicopter::wait_and_delete( 3.0 );
|
|
}
|
|
|
|
maps\mp\killstreaks\_helicopter::heli_reset();
|
|
self vehicle_setspeed( 100, 45 );
|
|
self setvehgoalpos( var_0, 1 );
|
|
self waittillmatch( "goal" );
|
|
self notify( "death" );
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self.killCamEnt ) )
|
|
self.killCamEnt delete ();
|
|
|
|
if ( self.heliType == "osprey_gunner" )
|
|
{
|
|
if ( isDefined( self ) )
|
|
self hide();
|
|
|
|
wait 30;
|
|
|
|
maps\mp\_utility::decrementFauxVehicleCount();
|
|
|
|
if ( isDefined( self ) )
|
|
self delete ();
|
|
}
|
|
else
|
|
{
|
|
maps\mp\_utility::decrementFauxVehicleCount();
|
|
self delete ();
|
|
}
|
|
}
|
|
|
|
syncXPStat()
|
|
{
|
|
var_0 = maps\mp\gametypes\_rank::getRankXP();
|
|
maps\mp\gametypes\_persistence::statSet( "experience", var_0 );
|
|
}
|
|
|
|
rank_init()
|
|
{
|
|
level.scoreInfo = [];
|
|
level.xpScale = getdvarint( "scr_xpscale" );
|
|
level.weaponxpscale = getdvarint( "scr_weaponxpscale" );
|
|
level.rankTable = [];
|
|
level.weaponRankTable = [];
|
|
precacheshader( "white" );
|
|
precachestring( &"RANK_PLAYER_WAS_PROMOTED_N" );
|
|
precachestring( &"RANK_PLAYER_WAS_PROMOTED" );
|
|
precachestring( &"RANK_WEAPON_WAS_PROMOTED" );
|
|
precachestring( &"RANK_PROMOTED" );
|
|
precachestring( &"RANK_PROMOTED_WEAPON" );
|
|
precachestring( &"MP_PLUS" );
|
|
precachestring( &"RANK_ROMANI" );
|
|
precachestring( &"RANK_ROMANII" );
|
|
precachestring( &"RANK_ROMANIII" );
|
|
precachestring( &"SPLASHES_LONGSHOT" );
|
|
precachestring( &"SPLASHES_PROXIMITYASSIST" );
|
|
precachestring( &"SPLASHES_PROXIMITYKILL" );
|
|
precachestring( &"SPLASHES_EXECUTION" );
|
|
precachestring( &"SPLASHES_AVENGER" );
|
|
precachestring( &"SPLASHES_ASSISTEDSUICIDE" );
|
|
precachestring( &"SPLASHES_DEFENDER" );
|
|
precachestring( &"SPLASHES_POSTHUMOUS" );
|
|
precachestring( &"SPLASHES_REVENGE" );
|
|
precachestring( &"SPLASHES_DOUBLEKILL" );
|
|
precachestring( &"SPLASHES_TRIPLEKILL" );
|
|
precachestring( &"SPLASHES_MULTIKILL" );
|
|
precachestring( &"SPLASHES_BUZZKILL" );
|
|
precachestring( &"SPLASHES_COMEBACK" );
|
|
precachestring( &"SPLASHES_KNIFETHROW" );
|
|
precachestring( &"SPLASHES_ONE_SHOT_KILL" );
|
|
|
|
if ( level.teamBased )
|
|
{
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "kill", 100 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 100 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "assist", 20 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "proximityassist", 20 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "proximitykill", 20 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "suicide", 0 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "teamkill", 0 );
|
|
}
|
|
else
|
|
{
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "kill", 50 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "headshot", 50 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "assist", 0 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "suicide", 0 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "teamkill", 0 );
|
|
}
|
|
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "win", 1 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "loss", 0.5 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "tie", 0.75 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "capture", 300 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "defend", 300 );
|
|
maps\mp\gametypes\_rank::registerScoreInfo( "challenge", 2500 );
|
|
level.maxRank = int( tablelookup( "mp/rankTable.csv", 0, "maxrank", 1 ) );
|
|
level.maxPrestige = int( tablelookup( "mp/rankIconTable.csv", 0, "maxprestige", 1 ) );
|
|
var_0 = 0;
|
|
var_1 = 0;
|
|
|
|
for ( var_0 = 0; var_0 <= min( 10, level.maxPrestige ); var_0++ )
|
|
{
|
|
for ( var_1 = 0; var_1 <= level.maxRank; var_1++ )
|
|
precacheshader( tablelookup( "mp/rankIconTable.csv", 0, var_1, var_0 + 1 ) );
|
|
}
|
|
|
|
var_2 = 0;
|
|
|
|
for ( var_3 = tablelookup( "mp/ranktable.csv", 0, var_2, 1 ); isdefined( var_3 ) && var_3 != ""; var_3 = tablelookup( "mp/ranktable.csv", 0, var_2, 1 ) )
|
|
{
|
|
level.rankTable[var_2][1] = tablelookup( "mp/ranktable.csv", 0, var_2, 1 );
|
|
level.rankTable[var_2][2] = tablelookup( "mp/ranktable.csv", 0, var_2, 2 );
|
|
level.rankTable[var_2][3] = tablelookup( "mp/ranktable.csv", 0, var_2, 3 );
|
|
level.rankTable[var_2][7] = tablelookup( "mp/ranktable.csv", 0, var_2, 7 );
|
|
precachestring( tablelookupistring( "mp/ranktable.csv", 0, var_2, 16 ) );
|
|
var_2++;
|
|
}
|
|
|
|
var_4 = int( tablelookup( "mp/weaponRankTable.csv", 0, "maxrank", 1 ) );
|
|
|
|
for ( var_5 = 0; var_5 < var_4 + 1; var_5++ )
|
|
{
|
|
level.weaponRankTable[var_5][1] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 1 );
|
|
level.weaponRankTable[var_5][2] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 2 );
|
|
level.weaponRankTable[var_5][3] = tablelookup( "mp/weaponRankTable.csv", 0, var_5, 3 );
|
|
}
|
|
|
|
maps\mp\gametypes\_missions::buildChallegeInfo();
|
|
level thread maps\mp\gametypes\_rank::patientZeroWaiter();
|
|
level thread maps\mp\gametypes\_rank::onPlayerConnect();
|
|
}
|
|
|
|
getSpawnpoint_NearTeam( var_0, var_1 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return undefined;
|
|
|
|
maps\mp\gametypes\_spawnlogic::Spawnlogic_Begin();
|
|
maps\mp\gametypes\_spawnlogic::initWeights( var_0 );
|
|
var_2 = 2;
|
|
var_3 = self.team;
|
|
var_4 = maps\mp\_utility::getOtherTeam( var_3 );
|
|
var_5 = getentarray( "care_package", "targetname" );
|
|
|
|
foreach ( var_7 in var_0 )
|
|
{
|
|
if ( var_7.numPlayersAtLastUpdate > 0 )
|
|
{
|
|
var_8 = var_7.weightedDistSum[var_3];
|
|
var_9 = var_7.distSum[var_4];
|
|
var_7.weight = ( var_9 - var_2 * var_8 ) / var_7.numPlayersAtLastUpdate;
|
|
|
|
if ( isdefined( level.favorCloseSpawnEnt ) )
|
|
{
|
|
if ( !isdefined( level.favorCloseSpawnScalar ) )
|
|
level.favorCloseSpawnScalar = 1;
|
|
|
|
var_10 = distance( var_7.origin, level.favorCloseSpawnEnt.origin );
|
|
var_7.weight = var_7.weight - var_10 * level.favorCloseSpawnScalar;
|
|
}
|
|
|
|
if ( isdefined( level.favorclosespawnentattacker ) )
|
|
{
|
|
if ( !isdefined( level.favorclosespawnscalarattacker ) )
|
|
level.favorclosespawnscalarattacker = 1;
|
|
|
|
var_10 = distance( var_7.origin, level.favorclosespawnentattacker.origin );
|
|
var_7.weight = var_7.weight - var_10 * level.favorclosespawnscalarattacker;
|
|
}
|
|
|
|
if ( isdefined( level.favorclosespawnentdefender ) )
|
|
{
|
|
if ( !isdefined( level.favorclosespawnscalardefender ) )
|
|
level.favorclosespawnscalardefender = 1;
|
|
|
|
var_10 = distance( var_7.origin, level.favorclosespawnentdefender.origin );
|
|
var_7.weight = var_7.weight - var_10 * level.favorclosespawnscalardefender;
|
|
}
|
|
}
|
|
else
|
|
var_7.weight = 0;
|
|
|
|
if ( var_5.size && !canspawn( var_7.origin ) )
|
|
var_7.weight = var_7.weight - 500000;
|
|
}
|
|
|
|
favor_weight = getDVarInt( "scr_spawnpointfavorweight" );
|
|
|
|
if ( favor_weight == 0 )
|
|
favor_weight = 50000;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
for ( var_12 = 0; var_12 < var_1.size; var_12++ )
|
|
var_1[var_12].weight = var_1[var_12].weight + favor_weight;
|
|
}
|
|
|
|
if ( isdefined( self.predictedSpawnPoint ) && isdefined( self.predictedSpawnPoint.weight ) )
|
|
self.predictedSpawnPoint.weight = self.predictedSpawnPoint.weight + 100;
|
|
|
|
maps\mp\gametypes\_spawnlogic::avoidSameSpawn();
|
|
maps\mp\gametypes\_spawnlogic::avoidWeaponDamage( var_0 );
|
|
maps\mp\gametypes\_spawnlogic::avoidVisibleEnemies( var_0, 1 );
|
|
|
|
if ( isdefined( self.lastDeathPos ) && level.gameType != "dom" )
|
|
maps\mp\gametypes\_spawnlogic::avoidRevengeSpawn( var_0, self.lastDeathPos );
|
|
|
|
var_13 = maps\mp\gametypes\_spawnlogic::getSpawnpoint_Final( var_0 );
|
|
return var_13;
|
|
}
|
|
|
|
doPrintDamage( dmg, hitloc, flags )
|
|
{
|
|
huddamage = newclienthudelem( self );
|
|
huddamage.alignx = "center";
|
|
huddamage.horzalign = "center";
|
|
huddamage.x = 10;
|
|
huddamage.y = 235;
|
|
huddamage.fontscale = 1.6;
|
|
huddamage.font = "objective";
|
|
huddamage setvalue( dmg );
|
|
|
|
if ( ( flags & level.iDFLAGS_RADIUS ) != 0 )
|
|
huddamage.color = ( 0.25, 0.25, 0.25 );
|
|
|
|
if ( ( flags & level.iDFLAGS_PENETRATION ) != 0 )
|
|
huddamage.color = ( 1, 1, 0.25 );
|
|
|
|
if ( hitloc == "head" )
|
|
huddamage.color = ( 1, 0.25, 0.25 );
|
|
|
|
huddamage moveovertime( 1 );
|
|
huddamage fadeovertime( 1 );
|
|
huddamage.alpha = 0;
|
|
huddamage.x = randomIntRange( 25, 70 );
|
|
|
|
val = 1;
|
|
|
|
if ( randomInt( 2 ) )
|
|
val = -1;
|
|
|
|
huddamage.y = 235 + randomIntRange( 25, 70 ) * val;
|
|
|
|
wait 1;
|
|
|
|
huddamage destroy();
|
|
}
|
|
|
|
finishPlayerDamageWrapper( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
|
|
{
|
|
if ( isDefined( level.allowPrintDamage ) && level.allowPrintDamage )
|
|
{
|
|
if (!isDefined( var_1 ))
|
|
{
|
|
if (!isDefined(var_0))
|
|
self thread doPrintDamage( var_2, var_8, var_3 );
|
|
}
|
|
else if ( isPlayer( var_1 ) && isDefined( var_1.printDamage ) && var_1.printDamage )
|
|
var_1 thread doPrintDamage( var_2, var_8, var_3 );
|
|
else if ( isDefined( var_1.owner ) && isPlayer( var_1.owner ) && isDefined( var_1.owner.printDamage ) && var_1.owner.printDamage )
|
|
var_1.owner thread doPrintDamage( var_2, var_8, var_3 );
|
|
}
|
|
|
|
if ( maps\mp\_utility::isUsingRemote() && var_2 >= self.health && !( var_3 & level.iDFLAGS_STUN ) )
|
|
{
|
|
if ( !isdefined( var_7 ) )
|
|
var_7 = ( 0, 0, 0 );
|
|
|
|
if ( !isdefined( var_1 ) && !isdefined( var_0 ) )
|
|
{
|
|
var_1 = self;
|
|
var_0 = var_1;
|
|
}
|
|
|
|
maps\mp\gametypes\_damage::PlayerKilled_internal( var_0, var_1, self, var_2, var_4, var_5, var_7, var_8, var_9, 0, 1 );
|
|
}
|
|
else
|
|
{
|
|
if ( !maps\mp\gametypes\_damage::Callback_KillingBlow( var_0, var_1, var_2 - var_2 * var_10, var_3, var_4, var_5, var_6, var_7, var_8, var_9 ) )
|
|
return;
|
|
|
|
if ( !isalive( self ) )
|
|
return;
|
|
|
|
self finishplayerdamage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
|
|
}
|
|
|
|
if ( var_4 == "MOD_EXPLOSIVE_BULLET" )
|
|
self shellshock( "damage_mp", getdvarfloat( "scr_csmode" ) );
|
|
|
|
maps\mp\gametypes\_damage::damageShellshockAndRumble( var_0, var_5, var_4, var_2, var_3, var_1 );
|
|
}
|
|
|
|
giveAllPerks()
|
|
{
|
|
var_0 = [];
|
|
var_0[var_0.size] = "specialty_longersprint";
|
|
var_0[var_0.size] = "specialty_fastreload";
|
|
var_0[var_0.size] = "specialty_scavenger";
|
|
var_0[var_0.size] = "specialty_blindeye";
|
|
var_0[var_0.size] = "specialty_paint";
|
|
var_0[var_0.size] = "specialty_hardline";
|
|
var_0[var_0.size] = "specialty_coldblooded";
|
|
var_0[var_0.size] = "specialty_quickdraw";
|
|
var_0[var_0.size] = "_specialty_blastshield";
|
|
var_0[var_0.size] = "specialty_detectexplosive";
|
|
var_0[var_0.size] = "specialty_autospot";
|
|
var_0[var_0.size] = "specialty_bulletaccuracy";
|
|
var_0[var_0.size] = "specialty_quieter";
|
|
var_0[var_0.size] = "specialty_stalker";
|
|
var_0[var_0.size] = "specialty_marksman";
|
|
var_0[var_0.size] = "specialty_sharp_focus";
|
|
var_0[var_0.size] = "specialty_longerrange";
|
|
var_0[var_0.size] = "specialty_fastermelee";
|
|
var_0[var_0.size] = "specialty_reducedsway";
|
|
var_0[var_0.size] = "specialty_lightweight";
|
|
|
|
// patch_mp removed these? why
|
|
var_0[ var_0.size ] = "specialty_bulletpenetration";
|
|
var_0[ var_0.size ] = "specialty_holdbreathwhileads";
|
|
|
|
// too op?
|
|
var_0[ var_0.size ] = "specialty_moredamage";
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( !maps\mp\_utility::_hasPerk( var_2 ) )
|
|
{
|
|
maps\mp\_utility::givePerk( var_2, 0 );
|
|
|
|
if ( maps\mp\gametypes\_class::isPerkUpgraded( var_2 ) )
|
|
{
|
|
var_3 = tablelookup( "mp/perktable.csv", 1, var_2, 8 );
|
|
maps\mp\_utility::givePerk( var_3, 0 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
handleScavengerBagPickup( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
self waittill( "scavenger", var_1 );
|
|
var_1 notify( "scavenger_pickup" );
|
|
var_1 playlocalsound( "scavenger_pack_pickup" );
|
|
var_2 = var_1 getweaponslistoffhands();
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
var_5 = var_1 getweaponammoclip( var_4 );
|
|
var_1 setweaponammoclip( var_4, var_5 + 1 );
|
|
}
|
|
|
|
var_7 = var_1 getweaponslistprimaries();
|
|
|
|
foreach ( var_9 in var_7 )
|
|
{
|
|
var_10 = var_1 getweaponammostock( var_9 );
|
|
var_11 = weaponclipsize( var_9 );
|
|
var_1 setweaponammostock( var_9, var_10 + var_11 );
|
|
}
|
|
|
|
var_1 maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "scavenger" );
|
|
}
|
|
|
|
nukeSlowMo()
|
|
{
|
|
level endon ( "nuke_cancelled" );
|
|
|
|
if (isDefined(level.nuked))
|
|
return;
|
|
|
|
//SetSlowMotion( <startTimescale>, <endTimescale>, <deltaTime> )
|
|
SetSlowMotion( 1.0, 0.25, 0.5 );
|
|
level waittill( "nuke_death" );
|
|
SetSlowMotion( 0.25, 1, 2.0 );
|
|
|
|
level.nuked = true;
|
|
}
|
|
|
|
remoteUAV_trackEntities( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_3 = undefined;
|
|
|
|
foreach ( var_5 in var_1 )
|
|
{
|
|
if ( level.teamBased && ( !isdefined( var_5.team ) || var_5.team == self.team ) )
|
|
continue;
|
|
|
|
if ( isplayer( var_5 ) )
|
|
{
|
|
if ( !maps\mp\_utility::isReallyAlive( var_5 ) )
|
|
continue;
|
|
|
|
if ( var_5 == self )
|
|
continue;
|
|
|
|
var_6 = var_5.guid + "";
|
|
}
|
|
else
|
|
var_6 = var_5.birthtime + "";
|
|
|
|
if ( isdefined( var_5.sentryType ) || isdefined( var_5.turretType ) )
|
|
{
|
|
var_7 = ( 0, 0, 32 );
|
|
var_8 = "hud_fofbox_hostile_vehicle";
|
|
}
|
|
else if ( isdefined( var_5.uavType ) )
|
|
{
|
|
var_7 = ( 0, 0, -52 );
|
|
var_8 = "hud_fofbox_hostile_vehicle";
|
|
}
|
|
else
|
|
{
|
|
var_7 = ( 0, 0, 26 );
|
|
var_8 = "veh_hud_target_unmarked";
|
|
}
|
|
|
|
if ( isdefined( var_5.UAVRemoteMarkedBy ) )
|
|
{
|
|
if ( !isdefined( var_0.markedPlayers[var_6] ) )
|
|
{
|
|
var_0.markedPlayers[var_6] = [];
|
|
var_0.markedPlayers[var_6]["player"] = var_5;
|
|
var_0.markedPlayers[var_6]["icon"] = var_5 maps\mp\_entityheadicons::setHeadIcon( self, "veh_hud_target_marked", var_7, 10, 10, 0, 0.05, 0, 0, 0, 0 );
|
|
var_0.markedPlayers[var_6]["icon"].shader = "veh_hud_target_marked";
|
|
|
|
if ( !isdefined( var_5.sentryType ) || !isdefined( var_5.turretType ) )
|
|
var_0.markedPlayers[var_6]["icon"] settargetent( var_5 );
|
|
}
|
|
else if ( isdefined( var_0.markedPlayers[var_6] ) && isdefined( var_0.markedPlayers[var_6]["icon"] ) && isdefined( var_0.markedPlayers[var_6]["icon"].shader ) && var_0.markedPlayers[var_6]["icon"].shader != "veh_hud_target_marked" )
|
|
{
|
|
var_0.markedPlayers[var_6]["icon"].shader = "veh_hud_target_marked";
|
|
var_0.markedPlayers[var_6]["icon"] setshader( "veh_hud_target_marked", 10, 10 );
|
|
var_0.markedPlayers[var_6]["icon"] setwaypoint( 0, 0, 0, 0 );
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( isplayer( var_5 ) )
|
|
{
|
|
var_9 = isdefined( var_5.spawnTime ) && ( gettime() - var_5.spawnTime ) / 1000 <= 5;
|
|
var_10 = var_5 maps\mp\_utility::_hasPerk( "specialty_blindeye" );
|
|
var_11 = 0;
|
|
var_12 = 0;
|
|
}
|
|
else
|
|
{
|
|
var_9 = 0;
|
|
var_10 = 0;
|
|
var_11 = isdefined( var_5.carriedBy );
|
|
var_12 = isdefined( var_5.isLeaving ) && var_5.isLeaving == 1;
|
|
}
|
|
|
|
if ( !isdefined( var_0.markedPlayers[var_6] ) && !var_9 && !var_10 && !var_11 && !var_12 )
|
|
{
|
|
var_0.markedPlayers[var_6] = [];
|
|
var_0.markedPlayers[var_6]["player"] = var_5;
|
|
var_0.markedPlayers[var_6]["icon"] = var_5 maps\mp\_entityheadicons::setHeadIcon( self, var_8, var_7, 10, 10, 0, 0.05, 0, 0, 0, 0 );
|
|
var_0.markedPlayers[var_6]["icon"].shader = var_8;
|
|
|
|
if ( !isdefined( var_5.sentryType ) || !isdefined( var_5.turretType ) )
|
|
var_0.markedPlayers[var_6]["icon"] settargetent( var_5 );
|
|
}
|
|
|
|
if ( ( !isdefined( var_3 ) || var_3 != var_5 ) && ( isdefined( var_0.trace["entity"] ) && var_0.trace["entity"] == var_5 && !var_11 && !var_12 ) || distance( var_5.origin, var_2 ) < 200 * var_0.trace["fraction"] && !var_9 && !var_11 && !var_12 || !var_12 && maps\mp\killstreaks\_remoteuav::remoteUAV_canTargetUAV( var_0, var_5 ) )
|
|
{
|
|
var_13 = bullettrace( var_0.origin, var_5.origin + ( 0, 0, 32 ), 1, var_0 );
|
|
|
|
if ( isdefined( var_13["entity"] ) && var_13["entity"] == var_5 || var_13["fraction"] == 1 )
|
|
{
|
|
self playlocalsound( "recondrone_lockon" );
|
|
var_3 = var_5;
|
|
}
|
|
}
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
remoteUAV_unmarkRemovedPlayer( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = common_scripts\utility::waittill_any_return( "death", "disconnect", "carried", "leaving" );
|
|
|
|
if ( var_1 == "leaving" || !isdefined( self.uavType ) )
|
|
self.UAVRemoteMarkedBy = undefined;
|
|
|
|
if ( isdefined( var_0 ) )
|
|
{
|
|
if ( isplayer( self ) )
|
|
var_2 = self.guid + "";
|
|
else if ( isdefined( self.birthtime ) )
|
|
var_2 = self.birthtime + "";
|
|
else
|
|
var_2 = self.birth_time + "";
|
|
|
|
if ( var_1 == "carried" || var_1 == "leaving" )
|
|
{
|
|
var_0.markedPlayers[var_2]["icon"] destroy();
|
|
var_0.markedPlayers[var_2]["icon"] = undefined;
|
|
}
|
|
|
|
if ( isdefined( var_2 ) && isdefined( var_0.markedPlayers[var_2] ) )
|
|
{
|
|
var_0.markedPlayers[var_2] = undefined;
|
|
var_0.markedPlayers = common_scripts\utility::array_removeUndefined( var_0.markedPlayers );
|
|
}
|
|
}
|
|
|
|
if ( isplayer( self ) )
|
|
self unsetperk( "specialty_radarblip", 1 );
|
|
else
|
|
{
|
|
if ( isdefined( self.remoteUAVMarkedObjID01 ) )
|
|
maps\mp\_utility::_objective_delete( self.remoteUAVMarkedObjID01 );
|
|
|
|
if ( isdefined( self.remoteUAVMarkedObjID02 ) )
|
|
maps\mp\_utility::_objective_delete( self.remoteUAVMarkedObjID02 );
|
|
|
|
if ( isdefined( self.remoteUAVMarkedObjID03 ) )
|
|
maps\mp\_utility::_objective_delete( self.remoteUAVMarkedObjID03 );
|
|
}
|
|
}
|
|
|
|
onPlayerConnect()
|
|
{
|
|
for ( ;; )
|
|
{
|
|
level waittill( "connected", player );
|
|
|
|
player thread onChangeKit();
|
|
}
|
|
}
|
|
|
|
watchNuke()
|
|
{
|
|
setDvar( "scr_spawnpointfavorweight", "" );
|
|
level waittill( "nuke_death" );
|
|
setDvar( "scr_spawnpointfavorweight", "499999" );
|
|
}
|
|
|
|
onChangeKit()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
self.printDamage = true;
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "changed_kit" );
|
|
|
|
self thread watchNotifyKSMessage();
|
|
}
|
|
}
|
|
|
|
watchNotifyKSMessage()
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "changed_kit" );
|
|
|
|
for ( lastKs = self.pers["cur_kill_streak_for_nuke"];; )
|
|
{
|
|
wait 0.05;
|
|
|
|
for ( curStreak = lastKs + 1; curStreak <= self.pers["cur_kill_streak_for_nuke"]; curStreak++ )
|
|
{
|
|
//if (curStreak == 5)
|
|
// continue;
|
|
|
|
if ( curStreak % 5 != 0 )
|
|
continue;
|
|
|
|
self thread streakNotify( curStreak );
|
|
}
|
|
|
|
lastKs = self.pers["cur_kill_streak_for_nuke"];
|
|
}
|
|
}
|
|
|
|
streakNotify( streakVal )
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
notifyData = spawnStruct();
|
|
|
|
if ( level.killstreakPrint > 1 )
|
|
{
|
|
xpReward = streakVal * 100;
|
|
|
|
self thread maps\mp\gametypes\_rank::giveRankXP( "killstreak_bonus", xpReward );
|
|
|
|
notifyData.notifyText = "+" + xpReward;
|
|
}
|
|
|
|
wait .05;
|
|
|
|
notifyData.titleLabel = &"MP_KILLSTREAK_N";
|
|
notifyData.titleText = streakVal;
|
|
|
|
self maps\mp\gametypes\_hud_message::notifyMessage( notifyData );
|
|
|
|
iprintln( &"RANK_KILL_STREAK_N", self, streakVal );
|
|
}
|