1 #using scripts\codescripts\struct;
3 #using scripts\shared\abilities\_ability_player;
4 #using scripts\shared\hostmigration_shared;
5 #using scripts\shared\util_shared;
6 #using scripts\shared\weapons\_weaponobjects;
7 #using scripts\shared\weapons\_tacticalinsertion;
8 #using scripts\shared\vehicles\_raps;
9 #using scripts\shared\table_shared;
10 #using scripts\shared\scoreevents_shared;
12 #insert scripts\shared\shared.gsh;
14 #namespace killstreaks;
18 if ( weapon == level.weaponNone || weapon.notKillstreak )
33 return ( isdefined( level.killstreakWeapons ) && isdefined( level.killstreakWeapons[ weapon ] ) );
39 ball = GetWeapon(
"ball" );
40 if( isdefined( ball ) &&
self HasWeapon( ball ) && !
IS_TRUE( awayfromBall ) )
42 self switchToWeaponImmediate( ball );
43 self DisableWeaponCycling();
44 self DisableOffhandWeapons();
46 else if (
IS_TRUE(
self.lastStand ) )
48 if ( isdefined(
self.laststandpistol ) &&
self hasWeapon(
self.laststandpistol ) )
50 self switchToWeapon(
self.laststandpistol );
53 else if( isdefined(
self.lastNonKillstreakWeapon ) &&
self hasWeapon(
self.lastNonKillstreakWeapon) )
55 if (
self.lastNonKillstreakWeapon.isHeroWeapon )
57 if (
self.lastNonKillstreakWeapon.gadget_heroversion_2_0 )
59 if (
self.lastNonKillstreakWeapon.isGadget &&
self GetAmmoCount(
self.lastNonKillstreakWeapon ) > 0 )
61 slot =
self GadgetGetSlot(
self.lastNonKillstreakWeapon );
64 return self switchToWeapon(
self.lastNonKillstreakWeapon );
72 if (
self GetAmmoCount(
self.lastNonKillstreakWeapon ) > 0 )
74 return self switchToWeapon(
self.lastNonKillstreakWeapon );
79 if(
IS_TRUE( awayfromBall ) && isdefined(
self.lastDroppableWeapon ) &&
self hasWeapon(
self.lastDroppableWeapon ) )
80 self switchToWeapon(
self.lastDroppableWeapon );
82 self switchToWeapon();
89 self switchToWeaponImmediate(
self.lastNonKillstreakWeapon );
91 self switchToWeapon(
self.lastNonKillstreakWeapon );
94 else if( isdefined(
self.lastDroppableWeapon ) &&
self hasWeapon(
self.lastDroppableWeapon) )
96 self switchToWeapon(
self.lastDroppableWeapon );
108 if( !isdefined( killstreak ) )
110 return level.weaponNone;
113 Assert( isdefined(level.killstreaks[killstreak]) );
115 return level.killstreaks[killstreak].weapon;
120 switch( killstreakWeapon.name )
122 case "inventory_minigun":
123 case "inventory_m32":
132 self endon(
"hacked" );
134 if( isdefined( endCondition1 ) )
135 self endon( endCondition1 );
136 if( isdefined( endCondition2 ) )
137 self endon( endCondition2 );
138 if( isdefined( endCondition3 ) )
139 self endon( endCondition3 );
143 self notify(
"time_check" );
149 if( isdefined( level.enemyEMPActiveFunc ) )
151 return self [[ level.enemyEMPActiveFunc ]]();
159 self endon (
"death" );
160 self endon (
"delete" );
162 self waittill(
"emp_deployed", attacker );
164 if( isdefined( onEmpdCallback ) )
166 [[ onEmpdCallback ]]( attacker, arg );
172 return level.activeUAVs[ team_or_entnum ] > 0;
177 return level.activeSatellites[ team_or_entnum ] > 0;
182 foreach( team
in level.teams )
184 if( team == attacker.team )
199 for( i = 0; i < level.missileEntities.size; i++ )
201 item = level.missileEntities[i];
203 if ( !isdefined( item.weapon ) )
208 if ( !isdefined( item.owner ) )
213 if ( isdefined( team ) && item.owner.team != team )
217 else if ( item.owner == attacker )
222 if ( !item.weapon.isEquipment && !
IS_TRUE(item.destroyedByEmp) )
227 watcher = item.owner weaponobjects::getWatcherForWeapon( item.weapon );
229 if ( !isdefined( watcher ) )
240 for ( i = 0; i < level.players.size; i++ )
242 player = level.players[ i ];
244 if ( !isdefined( player.tacticalInsertion ))
249 if ( level.teamBased && player.team != victimTeam )
254 if ( attacker == player )
265 foreach( team
in level.teams )
267 if( team == attacker.team )
282 script_vehicles = GetEntArray(
"script_vehicle",
"classname" );
283 foreach( vehicle
in script_vehicles )
285 if( IsVehicle( vehicle ) && ( !isdefined( vehicle.team ) || vehicle.team ==
"neutral" ) )
287 if( isdefined( vehicle.DetonateViaEMP ) &&
IS_TRUE( weapon.isEmpKillstreak ) )
289 vehicle [[vehicle.DetonateViaEMP]]( attacker, weapon );
292 if( isdefined( vehicle.archetype ) )
294 if ( vehicle.archetype ==
"siegebot" )
296 vehicle DoDamage( vehicle.health + 1, vehicle.origin, attacker, attacker,
"",
"MOD_EXPLOSIVE", 0, weapon );
305 targets = Target_GetArray();
308 ai_tanks = GetEntArray(
"talon",
"targetname" );
311 remoteMissiles = GetEntArray(
"remote_missile",
"targetname" );
314 remoteDrone = GetEntArray(
"remote_drone",
"targetname" );
317 script_vehicles = GetEntArray(
"script_vehicle",
"classname" );
318 foreach( vehicle
in script_vehicles )
320 if( isdefined( team ) && ( vehicle.team == team ) && IsVehicle( vehicle ) )
322 if( isdefined( vehicle.DetonateViaEMP ) &&
IS_TRUE( weapon.isEmpKillstreak ) )
324 vehicle [[vehicle.DetonateViaEMP]]( attacker, weapon );
327 if( isdefined( vehicle.archetype ) )
329 if( vehicle.archetype ==
"raps" )
333 else if( vehicle.archetype ==
"turret" || vehicle.archetype ==
"rcbomb" || vehicle.archetype ==
"wasp" || vehicle.archetype ==
"siegebot" )
335 vehicle DoDamage( vehicle.health + 1, vehicle.origin, attacker, attacker,
"",
"MOD_EXPLOSIVE", 0, weapon );
341 planeMortars = GetEntArray(
"plane_mortar",
"targetname" );
342 foreach( planeMortar
in planeMortars )
344 if ( isdefined( team ) && isdefined( planeMortar.team ) )
346 if ( planeMortar.team != team )
351 else if ( planeMortar.owner == attacker )
356 planeMortar notify(
"emp_deployed", attacker );
359 droneStrikes = GetEntArray(
"drone_strike",
"targetname" );
360 foreach( droneStrike
in droneStrikes )
362 if ( isdefined( team ) && isdefined( droneStrike.team ) )
364 if ( droneStrike.team != team )
369 else if ( droneStrike.owner == attacker )
374 droneStrike notify(
"emp_deployed", attacker );
377 counteruavs = GetEntArray(
"counteruav",
"targetname" );
378 foreach( counteruav
in counteruavs )
380 if ( isdefined( team ) && isdefined( counteruav.team ) )
382 if ( counteruav.team != team )
387 else if ( counteruav.owner == attacker )
392 counteruav notify(
"emp_deployed", attacker );
395 satellites = GetEntArray(
"satellite",
"targetname" );
396 foreach( satellite
in satellites )
398 if ( isdefined( team ) && isdefined( satellite.team ) )
400 if ( satellite.team != team )
405 else if ( satellite.owner == attacker )
410 satellite notify(
"emp_deployed", attacker );
413 robots = GetAIArchetypeArray(
"robot" );
414 foreach( robot
in robots )
416 if( robot.allowdeath !==
false &&
417 robot.magic_bullet_shield !==
true &&
421 if ( isdefined( attacker ) && ( !isdefined( robot.owner ) || robot.owner
util::IsEnemyPlayer( attacker ) ) )
424 LUINotifyEvent( &
"player_callout", 2, &
"KILLSTREAK_DESTROYED_COMBAT_ROBOT", attacker.entnum );
430 if ( isdefined ( level.missile_swarm_owner ) )
434 level.missile_swarm_owner notify(
"emp_destroyed_missile_swarm", attacker );
441 meansOfDeath =
"MOD_EXPLOSIVE";
444 direction_vec = ( 0, 0, 0 );
450 foreach( entity
in entities )
452 if ( isdefined( team ) && isdefined( entity.team ) )
454 if ( entity.team != team )
459 else if ( isdefined( entity.owner ) && ( entity.owner == attacker ) )
464 entity notify(
"damage",
damage, attacker, direction_vec, point, meansOfDeath, tagName, modelName, partName, weapon );