s1-scripts-dev/raw/maps/mp/killstreaks/streak_mp_refraction.gsc
2025-05-21 16:23:17 +02:00

752 lines
24 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\_audio;
init()
{
level.mp_refraction_killstreak_duration = 25;
/#
//Used for tuning purposes. Please do not delete.
// SetDvarIfUninitialized( "mp_refraction_killstreak_duration", 25 );
#/
level.mp_refraction_InUse = false;
level.refraction_turrets_alive = 0;
level.refraction_turrets_moved_down = 0;
level.mp_refraction_owner = undefined;
level.killstreakFuncs["mp_refraction"] = ::tryUseMPRefraction;
level.mapKillStreak = "mp_refraction";
level.mapKillstreakPickupString = &"MP_REFRACTION_MAP_KILLSTREAK_PICKUP";
level.killstreakWieldWeapons[ "refraction_turret_mp" ] = "refraction_turret_mp";
if ( !IsDefined( level.sentrySettings ) )
level.sentrySettings = [];
level.sentrySettings[ "refraction_turret" ] = spawnStruct();
level.sentrySettings[ "refraction_turret" ].health = 999999; // keep it from dying anywhere in code
level.sentrySettings[ "refraction_turret" ].maxHealth = 1000; // this is the health we'll check
level.sentrySettings[ "refraction_turret" ].burstMin = 20;
level.sentrySettings[ "refraction_turret" ].burstMax = 120;
level.sentrySettings[ "refraction_turret" ].pauseMin = 0.15;
level.sentrySettings[ "refraction_turret" ].pauseMax = 0.35;
level.sentrySettings[ "refraction_turret" ].sentryModeOn = "sentry";
level.sentrySettings[ "refraction_turret" ].sentryModeOff = "sentry_offline";
level.sentrySettings[ "refraction_turret" ].timeOut = 90.0;
level.sentrySettings[ "refraction_turret" ].spinupTime = 0.05;
level.sentrySettings[ "refraction_turret" ].overheatTime = 8.0;
level.sentrySettings[ "refraction_turret" ].cooldownTime = 0.1;
level.sentrySettings[ "refraction_turret" ].fxTime = 0.3;
level.sentrySettings[ "refraction_turret" ].streakName = "sentry";
level.sentrySettings[ "refraction_turret" ].weaponInfo = "refraction_turret_mp";
level.sentrySettings[ "refraction_turret" ].modelBase = "ref_turret_01";
level.sentrySettings[ "refraction_turret" ].sentryType = "refraction_turret";
level.sentrySettings[ "refraction_turret" ].modelPlacement = "sentry_minigun_weak_obj";
level.sentrySettings[ "refraction_turret" ].modelPlacementFailed = "sentry_minigun_weak_obj_red";
level.sentrySettings[ "refraction_turret" ].modelDestroyed = "sentry_minigun_weak_destroyed";
level.sentrySettings[ "refraction_turret" ].hintString = &"SENTRY_PICKUP";
level.sentrySettings[ "refraction_turret" ].headIcon = true;
level.sentrySettings[ "refraction_turret" ].teamSplash = "used_sentry";
level.sentrySettings[ "refraction_turret" ].shouldSplash = false;
level.sentrySettings[ "refraction_turret" ].voDestroyed = "sentry_destroyed";
level.refraction_turrets = turret_setup();
level.turret_movement_sound = "mp_refraction_turret_movement1";
level.turret_movement2_sound = "mp_refraction_turret_movement2";
level.turret_movement3_sound = "mp_refraction_turret_movement3";
}
/*
=============
///ScriptDocBegin
"Name: tryUseMPRefraction( <lifeId> )"
"Summary: function called when a player tries to use the mp_refraction map-based killstreak"
"Module: Entity"
"CallOn: a player"
"MandatoryArg: <lifeId>: "
"Example: level.killstreakFuncs["mp_refraction"] = ::tryUseMPRefraction;"
"SPMP: MP"
///ScriptDocEnd
=============
*/
tryUseMPRefraction( lifeId, modules )
{
if ( isDefined( level.mp_refraction_owner ) || level.mp_refraction_InUse )
{
self iPrintLnBold( &"MP_REFRACTION_IN_USE" );
return false;
}
if ( self isUsingRemote() )
{
return false;
}
if ( self isAirDenied() )
{
return false;
}
if ( self isEMPed() )
{
return false;
}
result = setRefractionTurretPlayer( self );
if ( IsDefined( result ) && result )
{
self maps\mp\_matchdata::logKillstreakEvent( "mp_refraction", self.origin );
}
return result;
}
/*
=============
///ScriptDocBegin
"Name: refractionTurretTimer()"
"Summary: notifies after mp_refraction_killstreak_duration is up."
"Module: Entity"
"CallOn: the level"
"Example: level thread refractionTurretTimer();"
"SPMP: MP"
///ScriptDocEnd
=============
*/
refractionTurretTimer()
{
self endon( "game_ended" );
/#
// level.mp_refraction_killstreak_duration = GetDvarInt( "mp_refraction_killstreak_duration", 25 );
#/
wait_time = level.mp_refraction_killstreak_duration;
if ( level.mp_refraction_owner _hasPerk( "specialty_blackbox" ) && IsDefined( level.mp_refraction_owner.specialty_blackbox_bonus ) )
{
wait_time *= level.mp_refraction_owner.specialty_blackbox_bonus;
}
while ( wait_time > 0 )
{
wait( 1 );
maps\mp\gametypes\_hostmigration::waitTillHostMigrationDone();
wait_time -= 1.0;
//End this thread if the killstreak is no longer in use. For example, end it if all the turrets are killed.
if ( level.mp_refraction_InUse == false )
{
return;
}
}
//If the killstreak ended because of time, some turrets might still be alive. Notify death for all turrets to deactivate them.
for ( i = 0; i < level.refraction_turrets.size; i++ )
{
level.refraction_turrets[i] notify( "fake_refraction_death" ); //Using "fake_refraction_death" instead of "death" because "death" would detrimentally end some functionality taken from _autosentry.gsc.
}
}
/*
=============
///ScriptDocBegin
"Name: monitorRefractionKillstreakOwnership()"
"Summary: frees up the refraction killstreak when the killstreak time is up or all turrets are disabled."
"Module: Entity"
"CallOn: the level"
"Example: level thread monitorRefractionKillstreakOwnership()"
"SPMP: MP"
///ScriptDocEnd
=============
*/
monitorRefractionKillstreakOwnership()
{
level endon( "game_ended" );
//If any turrets are alive or any turrets are up... wait!
while ( level.refraction_turrets_alive > 0 || level.refraction_turrets_moved_down < level.refraction_turrets.size )
{
wait( 0.05 );
}
unsetRefractionTurretPlayer();
}
setRefractionTurretPlayer( player )
{
if( IsDefined( level.mp_refraction_owner ) )
return false;
level.mp_refraction_InUse = true;
level.mp_refraction_owner = player;
thread teamPlayerCardSplash( "used_mp_refraction", player );
sentryType = "refraction_turret";
//IPrintLnBold("Bleed Time");
for ( i = 0; i < level.refraction_turrets.size; i++ )
{
level.refraction_turrets_alive++;
level.refraction_turrets_moved_down = 0; //All the turrets will move up, so we're setting this value to zero. It will be incremented back up to 4 when all the turrets move back down, either via time or death.
Assert( IsDefined( level.refraction_turrets[i] ) );
level.refraction_turrets[i] sentry_setOwner( player );
level.refraction_turrets[i] SetLeftArc( 45 );
level.refraction_turrets[i] SetRightArc( 45 );
level.refraction_turrets[i] SetTopArc( 10 );
level.refraction_turrets[i].shouldSplash = false;
level.refraction_turrets[i].carriedBy = player;
level.refraction_turrets[i] sentry_setPlaced();
level.refraction_turrets[i] thread sentry_handleDamage();
level.refraction_turrets[i] thread sentry_handleDeath();
level.refraction_turrets[i] thread sentry_laserMark();
level.refraction_turrets[i] thread aud_turrets_activate();
}
level thread refractionTurretTimer();
level thread monitorRefractionKillstreakOwnership();
return true;
}
aud_turrets_activate()
{
thread snd_play_in_space( "turret_cover_explode", self.origin );
thread snd_play_in_space( "turret_rise_start", self.origin );
}
/*
=============
///ScriptDocBegin
"Name: unsetRefractionTurretPlayer()"
"Summary: unsets the Refraction Turrets' owner - frees them up for someone else."
"Module: Entity"
"CallOn: N/A"
"Example: unsetRefractionTurretPlayer();"
"SPMP: MP"
///ScriptDocEnd
=============
*/
unsetRefractionTurretPlayer()
{
level.mp_refraction_owner = undefined;
level.mp_refraction_InUse = false;
}
turret_setup() //GET ALL FOUR TURRETS
{
turrets = getentarray( "turret_killer", "targetname" );
assertEx( isDefined( turrets), "no entities found with targetname of turret killer" );
foreach( turret in turrets )
{
parts = undefined;
if( isDefined( turret.target ) )
parts = getentarray( turret.target, "targetname" );
assertEx( isDefined( parts), "no entities found with targetname of " + turret.target );
foreach( part in parts )
{
if( isDefined( part.script_noteworthy ) && part.script_noteworthy == "turret_lifter" )
{
turret.lifter = part;
continue;
}
else if( isDefined( part.script_noteworthy ) && part.script_noteworthy == "hatch" )
{
turret.hatch = part;
continue;
}
else
assertMsg( "no parts with targetname turret_lifter or hatch were found" );
}
assertEx( isDefined( turret.lifter), "no lifter entity found for turret" );
assertEx( isDefined( turret.hatch), "no hatch entity found for turret" );
turret.lifter.animUp = "ref_turret_gun_raise";
turret.lifter.animDown = "ref_turret_gun_lower";
turret.lifter.IdleUp = "ref_turret_gun_idle_up";
turret.lifter.IdleDown = "ref_turret_gun_idle_down";
turret.hatch.animUp = "ref_turret_hatch_raise";
turret.hatch.animDown = "ref_turret_hatch_lower";
turret.hatch.IdleUp = "ref_turret_hatch_idle_up";
turret.hatch.IdleDown = "ref_turret_hatch_idle_down";
turret.collision = SpawnStruct();
collision = undefined;
if( isDefined( turret.lifter.target ) )
collision = getentarray( turret.lifter.target, "targetname" );
assertEx( isDefined( collision), "no collision entities found with targetname of " + turret.target );
foreach( collision_part in collision )
{
if( isDefined( collision_part.script_noteworthy ) )
{
switch( collision_part.script_noteworthy )
{
case "ref_turret_body_col":
turret.collision.col_body = collision_part;
break;
case "ref_turret_head_col":
turret.collision.col_head = collision_part;
break;
case "ref_turret_leg_r_col":
turret.collision.col_leg_r = collision_part;
break;
case "ref_turret_leg_l_col":
turret.collision.col_leg_l = collision_part;
break;
case "ref_turret_gun_col":
turret.collision.col_gun = collision_part;
break;
}
}
}
turret.sound_tag = spawn_tag_origin();
turret.sound_tag.origin = turret.origin + (0,0,24);
turret SetDefaultDropPitch( 0 );
sentryType = level.sentrySettings[ "refraction_turret" ].sentryType;
turret sentry_initSentry( sentryType ); //HACK: I'm calling sentry_initSentry() to do initial setup for the turrets. The turrets don't have an owner yet.
turret makeTurretSolid(); //We need to make turrets solid for them to be damageable...
turret hide();
turret.laser_tag = Spawn( "script_model", turret.origin );
turret.laser_tag SetModel( "tag_laser" );
}
return turrets;
}
LinkCollisionToTurret(turret, ShouldLink)
{
if(ShouldLink == false)
{
if( isDefined( turret.collision.col_body ) )
turret.collision.col_body unlink();
if( isDefined( turret.collision.col_head ) )
turret.collision.col_head unlink();
if( isDefined( turret.collision.col_leg_r ) )
turret.collision.col_leg_r unlink();
if( isDefined( turret.collision.col_leg_l ) )
turret.collision.col_leg_l unlink();
if( isDefined( turret.collision.col_gun ) )
turret.collision.col_gun unlink();
}
else if(ShouldLink == true)
{
if( isDefined( turret.collision.col_body ) )
turret.collision.col_body linkto( self, "tag_origin" );
if( isDefined( turret.collision.col_head ) )
turret.collision.col_head linkto( self, "tag_aim_animated" );
if( isDefined( turret.collision.col_leg_r ) )
turret.collision.col_leg_r linkto( self, "arm_r" );
if( isDefined( turret.collision.col_leg_l ) )
turret.collision.col_leg_l linkto( self, "arm_l" );
if( isDefined( turret.collision.col_gun ) )
turret.collision.col_gun linkto( self, "tag_barrel" );
}
}
sentry_laserMark() //Monitor laser marking for each individual turret
{
level endon ( "game_ended" );
self waittill( "refraction_turret_moved_up" );
self.laser_tag LaserOn();
self.laser_tag.origin = self GetTagOrigin( "tag_flash" );
self.laser_tag.angles = self GetTagAngles( "tag_flash" );
self.laser_tag LinkTo( self, "tag_flash" );
self waittill( "fake_refraction_death" );
self.laser_tag LaserOff( );
}
turret_moveUP() //TURRETS MOVE UP FROM UNDERGROUND
{
wait( RandomFloatRange( 1, 1.5 ) ); //make them not look too in sync
self.killCamEnt = Spawn( "script_model", self GetTagOrigin( "tag_player" ) );
self.killCamEnt SetScriptMoverKillCam( "explosive" );
self.lifter LinkCollisionToTurret(self, true);
alias_array = [];
alias_array[ "ref_turret_raise_doors_start" ] = "ref_turret_raise_doors_start";
alias_array[ "ref_turret_raise_doors_end" ] = "ref_turret_raise_doors_end";
alias_array[ "ref_turret_down_start" ] = "ref_turret_down_start";
alias_array[ "ref_turret_down_end" ] = "ref_turret_down_end";
alias_array[ "ref_turret_doors_close_start" ] = "ref_turret_doors_close_start";
alias_array[ "ref_turret_doors_close_end" ] = "ref_turret_doors_close_end";
alias_array[ "ref_turret_barrell_ext_start" ] = "ref_turret_barrell_ext_start";
alias_array[ "ref_turret_barrell_ext_end" ] = "ref_turret_barrell_ext_end";
self.hatch ScriptModelPlayAnimDeltaMotion( self.hatch.animUp );
self.lifter ScriptModelPlayAnimDeltaMotion( self.lifter.animUp, "ref_turret_raise_doors_start" );
self.lifter thread snd_play_on_notetrack( alias_array, "ref_turret_raise_doors_start");
// AUDIO
self thread PlayFxTurretMoveUp();//TODO: These are temp
self thread playAudioTurretMoveUp();//TODO: These are temp
wait( 4.17 ); //HACK FOR ANIM LENGTH
self.lifter LinkCollisionToTurret(self, false);
self show();
//self LinkCollisionToTurret(self, true); //taking this out so collision doesn't kill dudes who stand against the turret while it's on
self.lifter hide();
self notify( "refraction_turret_moved_up" );
}
playFxTurretMoveUp()
{
level thread common_scripts\_exploder::activate_clientside_exploder(1); //smoke fx
level thread common_scripts\_exploder::activate_clientside_exploder(2);
level thread common_scripts\_exploder::activate_clientside_exploder(3);
level thread common_scripts\_exploder::activate_clientside_exploder(4);
level thread common_scripts\_exploder::activate_clientside_exploder(5);
level thread common_scripts\_exploder::activate_clientside_exploder(6);
level thread common_scripts\_exploder::activate_clientside_exploder(7);
level thread common_scripts\_exploder::activate_clientside_exploder(8);
}
playAudioTurretMoveUp()
{
self.sound_tag thread Play_Sound_on_Tag( level.turret_movement_sound, "tag_origin" );
wait(1);
self.sound_tag thread Play_Sound_on_Tag(level.turret_movement2_sound,"tag_origin");
wait(1);
self.sound_tag thread Play_Sound_on_Tag(level.turret_movement3_sound,"tag_origin");
}
turret_moveDOWN(turret)
{
wait( RandomFloatRange( 1, 1.5 ) ); //make them not look too in sync
//self LinkCollisionToTurret(self, false); //taking this out so collision doesn't kill dudes who stand against the turret while it's on
self.lifter show();
self.lifter LinkCollisionToTurret(self, true);
self hide();
alias_array = [];
alias_array[ "ref_turret_raise_doors_start" ] = "ref_turret_raise_doors_start";
alias_array[ "ref_turret_raise_doors_end" ] = "ref_turret_raise_doors_end";
alias_array[ "ref_turret_down_start" ] = "ref_turret_down_start";
alias_array[ "ref_turret_down_end" ] = "ref_turret_down_end";
alias_array[ "ref_turret_barrell_close_start" ] = "ref_turret_barrell_close_start";
alias_array[ "ref_turret_barrell_close_end" ] = "ref_turret_barrell_close_end";
alias_array[ "ref_turret_doors_close_start" ] = "ref_turret_doors_close_start";
alias_array[ "ref_turret_doors_close_end" ] = "ref_turret_doors_close_end";
alias_array[ "ref_turret_doors_lock_start" ] = "ref_turret_doors_lock_start";
alias_array[ "ref_turret_doors_lock_end" ] = "ref_turret_doors_lock_end";
//steam vfx when turret moves down
fx_angles = self.hatch.angles + ( -90, 0, 0 );
noself_delayCall ( 4.1, ::PlayFx, getfx( "mp_ref_turret_steam_off" ), self.hatch.origin, AnglesToForward (fx_angles), AnglesToUp (fx_angles) ); //steam burst vfx on shut off
self.hatch ScriptModelPlayAnimDeltaMotion( self.hatch.animDown );
self.lifter ScriptModelPlayAnimDeltaMotion( self.lifter.animDown, "ref_turret_down_end" );
self.lifter thread snd_play_on_notetrack( alias_array, "ref_turret_down_end");
wait( 4.64 ); //HACK FOR ANIM LENGTH
waittillframeend; //just to make sure the anim is done
self.lifter LinkCollisionToTurret(self, false);
level.refraction_turrets_moved_down++;
}
////////////////////////////////////
//STUFF TAKEN FROM _autosentry.gsc
////////////////////////////////////
sentry_setPlaced()
{
self setSentryCarrier( undefined );
self.carriedBy forceUseHintOff();
self.carriedBy = undefined;
if( IsDefined( self.owner ) )
self.owner.isCarrying = false;
self thread sentry_setActive();
self playSound( "sentry_gun_plant" );
self notify ( "placed" );
}
sentry_setActive()
{
self turret_moveUP();
self setCanDamage( true ); //Make the turrets damageable AFTER they have finished moving up.
self setCanRadiusDamage( true );
self SetMode( level.sentrySettings[ self.sentryType ].sentryModeOn );
if( level.sentrySettings[ self.sentryType ].headIcon )
{
if ( level.teamBased )
self maps\mp\_entityheadicons::setTeamHeadIcon( self.team, (0,0,95) );
else
self maps\mp\_entityheadicons::setPlayerHeadIcon( self.owner, (0,0,95) );
}
}
//HACK: I removed all references to the owner argument. This is because the sentry doesn't have an owner when it is first created.
sentry_initSentry( sentryType ) // self == sentry, turret, sam
{
self.sentryType = sentryType;
self.canBePlaced = true;
self setModel( level.sentrySettings[ self.sentryType ].modelBase );
self makeTurretInoperable();
self SetDefaultDropPitch( 0.0 ); // setting this mainly prevents Turret_RestoreDefaultDropPitch() from running
self setTurretModeChangeWait( true );
self maps\mp\killstreaks\_autosentry::sentry_setInactive();
self thread maps\mp\killstreaks\_autosentry::sentry_handleUse();
self thread maps\mp\killstreaks\_autosentry::sentry_attackTargets();
}
sentry_handleDeath()
{
self waittill ( "fake_refraction_death" );
// this handles cases of deletion
if ( !IsDefined( self ) )
return;
self maps\mp\killstreaks\_autosentry::sentry_setInactive();
self SetSentryOwner( undefined );
self SetTurretMinimapVisible( false );
// //Turning off the turrets' head icons. This is added functionality for the mp_refraction turrets.
// if( level.sentrySettings[ self.sentryType ].headIcon )
// {
// if ( level.teamBased )
// self maps\mp\_entityheadicons::setTeamHeadIcon( "none", (0,0,0) );
// else
// self maps\mp\_entityheadicons::setPlayerHeadIcon( "none", (0,0,0) );
// }
self setCanDamage( false ); //Make the turrets non-damageable when they fake die.
self setCanRadiusDamage( false );
self.laser_tag LaserOff( );
self turret_moveDOWN();
level.refraction_turrets_alive--;
if ( IsDefined( self.killCamEnt ) )
self.killCamEnt Delete();
}
/*
=============
///ScriptDocBegin
"Name: sentry_setOwner( <owner> )"
"Summary: sets the owner of the spawned turret."
"Module: Entity"
"CallOn: a turret spawned by SpawnTurret()."
"MandatoryArg: <owner>: the player that used the refraction killstreak"
"Example: level.refraction_turrets[i]["spawned_turret"] sentry_setOwner( player );"
"SPMP: MP"
///ScriptDocEnd
=============
*/
sentry_setOwner( owner )
{
self.owner = owner;
self SetSentryOwner( self.owner );
self SetTurretMinimapVisible( true, self.sentryType );
if ( level.teamBased && IsDefined( owner ) )
{
self.team = self.owner.team;
self setTurretTeam( self.team );
}
self thread sentry_handleOwnerDisconnect();
}
/*
=============
///ScriptDocBegin
"Name: sentry_handleOwnerDisconnect()"
"Summary: notifies death for this turret (self) if its owner disconnects."
"Module: Entity"
"CallOn: a turret spawned by SpawnTurret()."
"Example: self thread sentry_handleOwnerDisconnect();"
"SPMP: MP"
///ScriptDocEnd
=============
*/
sentry_handleOwnerDisconnect()
{
level endon ( "game_ended" );
self endon( "fake_refraction_death" ); //Ending this thread if the turret (self) dies by other means (damage, time).
self.owner waittill_any( "disconnect", "joined_team", "joined_spectators" );
self notify( "fake_refraction_death" );
}
/*
=============
///ScriptDocBegin
"Name: sentry_handleDamage()"
"Summary: handles the death of a turret spawned by SpawnTurret()"
"Module: Entity"
"CallOn: a turret spawned by SpawnTurret()."
"Example: self thread sentry_handleDamage();"
"SPMP: MP"
///ScriptDocEnd
=============
*/
sentry_handleDamage()
{
self endon( "fake_refraction_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 //Don't need this from original in _autosentry.gsc.
// 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" );
// }
modifiedDamage = 0;
if( IsDefined( weapon ) )
{
shortWeapon = maps\mp\_utility::strip_suffix( weapon, "_lefthand" );
switch( shortWeapon )
{
// case "ac130_105mm_mp":
// case "ac130_40mm_mp":
// case "stinger_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":
case "emp_grenade_var_mp":
self.largeProjectileDamage = false;
modifiedDamage = self.maxHealth + 1;
if ( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "sentry" );
}
break;
default:
modifiedDamage = 0;
break;
}
maps\mp\killstreaks\_killstreaks::killstreakHit( attacker, weapon, self );
}
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) )
{
level thread maps\mp\gametypes\_rank::awardGameEvent( "kill", attacker, weapon, undefined, meansOfDeath );
}
if ( IsDefined( self.owner ) )
self.owner thread leaderDialogOnPlayer( level.sentrySettings[ self.sentryType ].voDestroyed, undefined, undefined, self.origin );
self notify( "fake_refraction_death" );
return;
}
}
}