Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\mp\_utility;
- #include common_scripts\utility;
- init()
- {
- level._effect[ "emp_flash" ] = loadfx( "explosions/emp_flash_mp" );
- level.teamEMPed["allies"] = false;
- level.teamEMPed["axis"] = false;
- level.empPlayer = undefined;
- if ( level.teamBased )
- level thread EMP_TeamTracker();
- else
- level thread EMP_PlayerTracker();
- level.killstreakFuncs["emp"] = ::EMP_Use;
- level thread onPlayerConnect();
- }
- onPlayerConnect()
- {
- for(;;)
- {
- level waittill("connected", player);
- player thread onPlayerSpawned();
- }
- }
- onPlayerSpawned()
- {
- self endon("disconnect");
- for(;;)
- {
- self waittill( "spawned_player" );
- if ( (level.teamBased && level.teamEMPed[self.team]) || (!level.teamBased && isDefined( level.empPlayer ) && level.empPlayer != self) )
- self setEMPJammed( true );
- }
- }
- EMP_Use( lifeId, delay )
- {
- assert( isDefined( self ) );
- if ( !isDefined( delay ) )
- delay = 5.0;
- myTeam = self.pers["team"];
- otherTeam = level.otherTeam[myTeam];
- if ( level.teamBased )
- self thread EMP_JamTeam( otherTeam, 60.0, delay );
- else
- self thread EMP_JamPlayers( self, 60.0, delay );
- self maps\mp\_matchdata::logKillstreakEvent( "emp", self.origin );
- self notify( "used_emp" );
- return true;
- }
- EMP_JamTeam( teamName, duration, delay )
- {
- level endon ( "game_ended" );
- assert( teamName == "allies" || teamName == "axis" );
- //wait ( delay );
- thread teamPlayerCardSplash( "used_emp", self );
- level notify ( "EMP_JamTeam" + teamName );
- level endon ( "EMP_JamTeam" + teamName );
- foreach ( player in level.players )
- {
- player playLocalSound( "emp_activate" );
- if ( player.team != teamName )
- continue;
- if ( player _hasPerk( "specialty_localjammer" ) )
- player RadarJamOff();
- }
- visionSetNaked( "coup_sunblind", 0.1 );
- thread empEffects();
- wait ( 0.1 );
- // resetting the vision set to the same thing won't normally have an effect.
- // however, if the client receives the previous visionset change in the same packet as this one,
- // this will force them to lerp from the bright one to the normal one.
- visionSetNaked( "coup_sunblind", 0 );
- visionSetNaked( getDvar( "mapname" ), 3.0 );
- level.teamEMPed[teamName] = true;
- level notify ( "emp_update" );
- level destroyActiveVehicles( self );
- maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( duration );
- level.teamEMPed[teamName] = false;
- foreach ( player in level.players )
- {
- if ( player.team != teamName )
- continue;
- if ( player _hasPerk( "specialty_localjammer" ) )
- player RadarJamOn();
- }
- level notify ( "emp_update" );
- }
- EMP_JamPlayers( owner, duration, delay )
- {
- level notify ( "EMP_JamPlayers" );
- level endon ( "EMP_JamPlayers" );
- assert( isDefined( owner ) );
- //wait ( delay );
- foreach ( player in level.players )
- {
- player playLocalSound( "emp_activate" );
- if ( player == owner )
- continue;
- if ( player _hasPerk( "specialty_localjammer" ) )
- player RadarJamOff();
- }
- visionSetNaked( "coup_sunblind", 0.1 );
- thread empEffects();
- wait ( 0.1 );
- // resetting the vision set to the same thing won't normally have an effect.
- // however, if the client receives the previous visionset change in the same packet as this one,
- // this will force them to lerp from the bright one to the normal one.
- visionSetNaked( "coup_sunblind", 0 );
- visionSetNaked( getDvar( "mapname" ), 3.0 );
- level notify ( "emp_update" );
- level.empPlayer = owner;
- level.empPlayer thread empPlayerFFADisconnect();
- level destroyActiveVehicles( owner );
- level notify ( "emp_update" );
- maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( duration );
- foreach ( player in level.players )
- {
- if ( player == owner )
- continue;
- if ( player _hasPerk( "specialty_localjammer" ) )
- player RadarJamOn();
- }
- level.empPlayer = undefined;
- level notify ( "emp_update" );
- level notify ( "emp_ended" );
- }
- empPlayerFFADisconnect()
- {
- level endon ( "EMP_JamPlayers" );
- level endon ( "emp_ended" );
- self waittill( "disconnect" );
- level notify ( "emp_update" );
- }
- empEffects()
- {
- foreach( player in level.players )
- {
- playerForward = anglestoforward( player.angles );
- playerForward = ( playerForward[0], playerForward[1], 0 );
- playerForward = VectorNormalize( playerForward );
- empDistance = 20000;
- empEnt = Spawn( "script_model", player.origin + ( 0, 0, 8000 ) + Vector_Multiply( playerForward, empDistance ) );
- empEnt setModel( "tag_origin" );
- empEnt.angles = empEnt.angles + ( 270, 0, 0 );
- empEnt thread empEffect( player );
- }
- }
- empEffect( player )
- {
- player endon( "disconnect" );
- wait( 0.5 );
- PlayFXOnTagForClients( level._effect[ "emp_flash" ], self, "tag_origin", player );
- }
- EMP_TeamTracker()
- {
- level endon ( "game_ended" );
- for ( ;; )
- {
- level waittill_either ( "joined_team", "emp_update" );
- foreach ( player in level.players )
- {
- if ( player.team == "spectator" )
- continue;
- player setEMPJammed( level.teamEMPed[player.team] );
- }
- }
- }
- EMP_PlayerTracker()
- {
- level endon ( "game_ended" );
- for ( ;; )
- {
- level waittill_either ( "joined_team", "emp_update" );
- foreach ( player in level.players )
- {
- if ( player.team == "spectator" )
- continue;
- if ( isDefined( level.empPlayer ) && level.empPlayer != player )
- player setEMPJammed( true );
- else
- player setEMPJammed( false );
- }
- }
- }
- destroyActiveVehicles( attacker )
- {
- if ( isDefined( attacker ) )
- {
- foreach ( heli in level.helis )
- radiusDamage( heli.origin, 384, 5000, 5000, attacker );
- foreach ( littleBird in level.littleBird )
- radiusDamage( littleBird.origin, 384, 5000, 5000, attacker );
- foreach ( turret in level.turrets )
- radiusDamage( turret.origin, 16, 5000, 5000, attacker );
- foreach ( rocket in level.rockets )
- rocket notify ( "death" );
- if ( level.teamBased )
- {
- foreach ( uav in level.uavModels["allies"] )
- radiusDamage( uav.origin, 384, 5000, 5000, attacker );
- foreach ( uav in level.uavModels["axis"] )
- radiusDamage( uav.origin, 384, 5000, 5000, attacker );
- }
- else
- {
- foreach ( uav in level.uavModels )
- radiusDamage( uav.origin, 384, 5000, 5000, attacker );
- }
- if ( isDefined( level.ac130player ) )
- radiusDamage( level.ac130.planeModel.origin+(0,0,10), 1000, 5000, 5000, attacker );
- }
- else
- {
- foreach ( heli in level.helis )
- radiusDamage( heli.origin, 384, 5000, 5000 );
- foreach ( littleBird in level.littleBird )
- radiusDamage( littleBird.origin, 384, 5000, 5000 );
- foreach ( turret in level.turrets )
- radiusDamage( turret.origin, 16, 5000, 5000 );
- foreach ( rocket in level.rockets )
- rocket notify ( "death" );
- if ( level.teamBased )
- {
- foreach ( uav in level.uavModels["allies"] )
- radiusDamage( uav.origin, 384, 5000, 5000 );
- foreach ( uav in level.uavModels["axis"] )
- radiusDamage( uav.origin, 384, 5000, 5000 );
- }
- else
- {
- foreach ( uav in level.uavModels )
- radiusDamage( uav.origin, 384, 5000, 5000 );
- }
- if ( isDefined( level.ac130player ) )
- radiusDamage( level.ac130.planeModel.origin+(0,0,10), 1000, 5000, 5000 );
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment