nx1-gsc-dump/common_scripts/_portable_radar.gsc
2024-09-04 23:46:54 +10:00

175 lines
4.2 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
setPortableRadar()
{
println( "called setPortableRadar" );
self _giveWeapon( "portable_radar_mp", 0 );
self giveStartAmmo( "portable_radar_mp" );
self thread monitorPortableRadarUse();
}
unsetPortableRadar()
{
self notify( "end_monitorPortableRadarUse" );
}
deletePortableRadar( portable_radar )
{
if ( !isDefined( portable_radar ) )
return;
portable_radar notify( "death" );
portable_radar Delete();
self.deployedPortableRadar = undefined;
}
monitorPortableRadarUse()
{
self endon ( "death" );
self endon ( "disconnect" );
level endon ( "game_ended" );
for ( ;; )
{
// grenade is the entity spawned by the G_FireGrenade() since we want this to be
// script controlled, we won't actually use this entity
self waittill( "grenade_fire", grenade, weapName );
if ( weapName != "portable_radar_mp" )
continue;
println( "A portable radar has been fired" );
if( isDefined( self.deployedPortableRadar ) )
{
println( "Deleting the other portable radar you have deployed" );
deletePortableRadar( self.deployedPortableRadar );
}
grenade waittill( "missile_stuck" );
println( "Portable radar is has missile_stuck" );
GroundPosition = grenade.origin;
grenade Delete();
portable_radar = spawn( "script_model", GroundPosition );
portable_radar.health = 100;
portable_radar.team = self.team;
portable_radar.owner = self;
portable_radar setCanDamage( true );
portable_radar makePortableRadar( self );
portable_radar portableRadarSetup( self );
portable_radar thread maps\mp\gametypes\_weapons::createBombSquadModel( "weapon_c4_bombsquad", "tag_origin", self );
self.deployedPortableRadar = portable_radar;
return;
}
}
portableRadarSetup( owner )
{
// JCC temp until we get our model
self setModel( "weapon_c4" );
// setup icons for item so friendlies see it
if ( level._teamBased )
self maps\mp\_entityheadIcons::setTeamHeadIcon( self.team , (0,0,20) );
else
self maps\mp\_entityheadicons::setPlayerHeadIcon( owner, (0,0,20) );
self thread portableRadarDamageListener( owner );
self thread portableRadarUseListener( owner );
owner thread portableRadarWatchOwner( self );
self thread portableRadarBeepSounds();
}
portableRadarWatchOwner( portable_radar )
{
portable_radar endon( "death" );
level endon ( "game_ended" );
self waittill_any( "disconnect", "joined_team", "joined_spectators", "death" );
level thread deletePortableRadar( portable_radar );
}
portableRadarBeepSounds()
{
self endon( "death" );
level endon ( "game_ended" );
for ( ;; )
{
wait ( 2.0 );
self playSound( "sentry_gun_beep" );
}
}
portableRadarDamageListener( owner )
{
self endon ( "death" );
// use a health buffer to prevent dying to friendly fire
healthBuffer = 20000;
self.health += healthbuffer;
for ( ;; )
{
self waittill ( "damage", amount, attacker );
if ( level._teambased && isDefined( attacker.team ) && attacker.team == self.team )
{
self.health += amount;
continue;
}
if ( self.health - healthbuffer < 0 )
{
if ( isDefined( owner ) && attacker != owner )
{
// JCC commented out
//attacker notify ( "destroyed_insertion", owner );
attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
// JCC commented out
//owner thread leaderDialogOnPlayer( "ti_destroyed" );
}
// JCC temp playing sounds and effects from other weapons until we have the right ones
self playsound( "sentry_explode" );
self.c4DeathEffect = playFX( level.c4Death, self.origin );
attacker thread deletePortableRadar( self );
}
}
}
portableRadarUseListener( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );
self setCursorHint( "HINT_NOICON" );
self setHintString( &"MP_PICKUP_PORTABLE_RADAR" );
self setSelfUsable( owner );
for ( ;; )
{
self waittill ( "trigger", player );
player playLocalSound( "scavenger_pack_pickup" );
// give item to user (only if they haven't restocked from scavenger pickup since dropping)
if ( player getAmmoCount( "portable_radar_mp" ) == 0 )
player setPortableRadar();
player thread deletePortableRadar( self );
}
}