Code:
sentry_handleDamage()
{
self endon( "death" );
level endon( "game_ended" );
self.health = level.sentrySettings[ self.sentryType ].health;
self.maxHealth = level.sentrySettings[ self.sentryType ].maxHealth;
self.damageTaken = 0; // how much damage has it taken
while ( true )
{
self waittill( "damage", damage, attacker, direction_vec, point, meansOfDeath, modelName, tagName, partName, iDFlags, weapon );
// don't allow people to destroy equipment on their team if FF is off
if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, attacker ) )
continue;
if ( IsDefined( iDFlags ) && ( iDFlags & level.iDFLAGS_PENETRATION ) )
self.wasDamagedFromBulletPenetration = true;
// up the damage for airstrikes, stealth bombs, and bomb sites
switch( weapon )
{
case "artillery_mp":
case "stealth_bomb_mp":
damage *= 4;
break;
case "bomb_site_mp":
damage = self.maxHealth;
break;
}
if ( meansOfDeath == "MOD_MELEE" )
self.damageTaken += self.maxHealth;
modifiedDamage = damage;
if ( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "sentry" );
if ( attacker _hasPerk( "specialty_armorpiercing" ) )
{
modifiedDamage = damage * level.armorPiercingMod;
}
}
// in case we are shooting from a remote position, like being in the osprey gunner shooting this
if( IsDefined( attacker.owner ) && IsPlayer( attacker.owner ) )
{
attacker.owner maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "sentry" );
}
if( IsDefined( weapon ) )
{
switch( weapon )
{
case "ac130_105mm_mp":
case "ac130_40mm_mp":
case "stinger_mp":
case "javelin_mp":
case "remote_mortar_missile_mp":
case "remotemissile_projectile_mp":
self.largeProjectileDamage = true;
modifiedDamage = self.maxHealth + 1;
break;
case "artillery_mp":
case "stealth_bomb_mp":
self.largeProjectileDamage = false;
modifiedDamage += ( damage * 4 );
break;
case "bomb_site_mp":
case "emp_grenade_mp":
self.largeProjectileDamage = false;
modifiedDamage = self.maxHealth + 1;
break;
}
}
self.damageTaken += modifiedDamage;
if ( self.damageTaken >= self.maxHealth )
{
thread maps\mp\gametypes\_missions::vehicleKilled( self.owner, self, undefined, attacker, damage, meansOfDeath, weapon );
if ( isPlayer( attacker ) && (!IsDefined(self.owner) || attacker != self.owner) )
{
attacker thread maps\mp\gametypes\_rank::giveRankXP( "kill", 100, weapon, meansOfDeath );
attacker notify( "destroyed_killstreak" );
if ( IsDefined( self.UAVRemoteMarkedBy ) && self.UAVRemoteMarkedBy != attacker )
self.UAVRemoteMarkedBy thread maps\mp\killstreaks\_remoteuav::remoteUAV_processTaggedAssist();
}
if ( IsDefined( self.owner ) )
self.owner thread leaderDialogOnPlayer( level.sentrySettings[ self.sentryType ].voDestroyed );
self notify ( "death" );
return;
}
}
}