IW4-Dump-Files/maps/_killstreaks.gsc

341 lines
7.7 KiB
Plaintext

#include maps\_utility;
#include maps\_hud_util;
#include common_scripts\utility;
KILLSTREAK_STRING_TABLE = "sp/killstreakTable.csv";
init()
{
// &&1 Kill Streak!
precacheString( &"MP_KILLSTREAK_N" );
initKillstreakData();
level.killstreakFuncs = [];
level.killstreakSetupFuncs = [];
thread maps\_killstreak_ac130::init();
//thread maps\mp\_remotemissile::init();
//thread maps\mp\_uav::init();
//thread maps\mp\_airstrike::init();
//thread maps\mp\_helicopter::init();
//thread maps\mp\_autoshotgun::init();
thread maps\_killstreak_autosentry::init();
}
initKillstreakData()
{
for ( i = 1; true; i++ )
{
retVal = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 1 );
if ( !isDefined( retVal ) || retVal == "" )
break;
streakRef = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 1 );
assert( streakRef != "" );
streakUseHint = tableLookupIString( KILLSTREAK_STRING_TABLE, 0, i, 6 );
// string not found for
assert( streakUseHint != &"" );
precacheString( streakUseHint );
streakFailHint = tableLookupIString( KILLSTREAK_STRING_TABLE, 0, i, 11 );
// string not found for
assert( streakFailHint != &"" );
precacheString( streakFailHint );
//chad - no earn dialog yet
//streakEarnDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 8 );
//assert( streakEarnDialog != "" );
//game["dialog"][streakRef] = streakEarnDialog;
streakFriendlyUseDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 9 );
assert( streakFriendlyUseDialog != "" );
game[ "dialog" ][ streakRef + "_inbound" ] = streakFriendlyUseDialog;
/*
Chad:
enemies will never use killstreak rewards because they are just stupid AI haha
maybe someday I can make them use killstreaks to make things interesting
streakEnemyUseDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 9 );
assert( streakEnemyUseDialog != "" );
game["dialog"]["enemy_"+streakRef+"_inbound"] = streakEnemyUseDialog;
*/
streakWeapon = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 12 );
if ( streakWeapon != "" )
precacheItem( streakWeapon );
streakPoints = int( tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 13 ) );
assert( streakPoints != 0 );
maps\_rank::registerScoreInfo( "killstreak_" + streakRef, streakPoints );
}
}
onPlayerSpawned()
{
self giveOwnedKillstreakItem();
self thread killstreakUseWaiter();
}
isRideKillstreak( streakName )
{
switch( streakName )
{
case "helicopter_minigun":
case "helicopter_mk19":
return true;
default:
return false;
}
}
killstreakUsePressed()
{
streakName = self.pers[ "killstreak" ];
assert( isDefined( streakName ) );
assert( isDefined( level.killstreakFuncs[ streakName ] ) );
if ( isDefined( self.carryObject ) && isRideKillstreak( streakName ) )
{
iprintlnbold( "Killstreak unavailable while holding bomb." );
}
else if ( self [[ level.killstreakFuncs[ streakName ] ]]() )
{
team = self.team;
/* Chad - leader dialog doesn't exist but we can probably just do a playlocalsoundwrapper on all
players instead since there isn't anyone on the other team
//array_thread( level.players, ::playLocalSoundWrapper, level.pmc.sound[ "juggernaut_attack" ] );
if ( level.teamBased )
thread leaderDialog( streakName + "_inbound", team );
else
self thread leaderDialogOnPlayer( streakName + "_inbound" );
*/
self playLocalSound( "weap_c4detpack_trigger_plr" );
//self setClientDvar( "ui_killstreak", "" );
self.pers[ "killstreak" ] = undefined;
}
else if ( isDefined( level.killstreakFuncs[ streakName + "_failed" ] ) )
{
self [[ level.killstreakFuncs[ streakName + "_failed" ] ]]();
}
else
{
iprintlnbold( getKillstreakFailHint( streakName ) );
}
}
killstreakUseWaiter()
{
self endon( "death" );
self notifyOnPlayerCommand( "use killstreak", "+actionslot 4" );
for ( ;; )
{
self waittill( "use killstreak" );
if ( !isAlive( self ) )
continue;
if ( isDefined( self.canUseKillstreaks ) && !self.canUseKillstreaks )
continue;
if ( isdefined( self.placingSentry ) )
continue;
if ( !isDefined( self.pers[ "killstreak" ] ) )
continue;
self killstreakUsePressed();
}
}
checkKillstreakReward( streakCount )
{
streak = streakCount;
if ( streak < 3 )
return;
if ( !isDefined( self.killStreaks[ streak ] ) )
{
if ( streak >= 10 && ( streak % 5 == 0 ) )
self streakNotify( streak );
return;
}
self tryGiveKillstreak( self.killStreaks[ streak ], streak );
}
streakNotify( streakVal )
{
self endon( "disconnect" );
wait .05;
notifyData = spawnStruct();
// &&1 Kill Streak!
notifyData.titleLabel = &"MP_KILLSTREAK_N";
notifyData.titleText = streakVal;
self maps\_rank::notifyMessage( notifyData );
}
rewardNotify( streakName, streakVal )
{
self endon( "disconnect" );
wait .05;
notifyData = spawnStruct();
// &&1 Kill Streak!
notifyData.titleLabel = &"MP_KILLSTREAK_N";
notifyData.titleText = streakVal;
notifyData.notifyText = getKillstreakHint( streakName );
notifyData.textIsString = true;
// chad - earn dialog not hooked up yet
//notifyData.sound = getKillstreakSound( streakName );
notifyData.leaderSound = streakName;
self maps\_rank::notifyMessage( notifyData );
}
tryGiveKillstreak( streakName, streakVal )
{
if ( !isDefined( level.killstreakFuncs[ streakName ] ) )
return false;
if ( isDefined( self.selectingLocation ) )
return false;
if ( isDefined( self.pers[ "killstreak" ] ) )
{
if ( getStreakCost( streakName ) < getStreakCost( self.pers[ "killstreak" ] ) )
return false;
}
self thread rewardNotify( streakName, streakVal );
self giveKillstreak( streakName );
return true;
}
giveKillstreak( streakName )
{
self notify( "got_killstreak", streakName );
weapon = getKillstreakWeapon( streakName );
if ( weapon != "" )
{
self giveKillstreakWeapon( weapon );
}
else
{
self setActionSlot( 4, "" );
//self setClientDvar( "ui_killstreak", streakName );
}
self.pers[ "killstreak" ] = streakName;
if ( isdefined( level.killstreakSetupFuncs[ streakName ] ) )
self [[ level.killstreakSetupFuncs[ streakName ] ]]();
}
giveKillstreakWeapon( weapon )
{
self giveWeapon( weapon );
self setActionSlot( 4, "weapon", weapon );
//self setClientDvar( "ui_killstreak", "" );
}
getStreakCost( streakName )
{
if ( is_coop() )
return int( tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 5 ) );
else
return int( tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 4 ) );
}
getKillstreakHint( streakName )
{
return tableLookupIString( KILLSTREAK_STRING_TABLE, 1, streakName, 6 );
}
getKillstreakFailHint( streakName )
{
return tableLookupIString( KILLSTREAK_STRING_TABLE, 1, streakName, 11 );
}
getKillstreakSound( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 7 );
}
getKillstreakDialog( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 8 );
}
getKillstreakWeapon( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 12 );
}
giveOwnedKillstreakItem()
{
if ( isdefined( self.pers[ "killstreak" ] ) )
self giveKillstreak( self.pers[ "killstreak" ] );
}
setKillstreaks( streak1, streak2, streak3 )
{
self.killStreaks = [];
if ( streak1 != "none" )
{
streakVal = maps\_killstreaks::getStreakCost( streak1 );
assertEx( isDefined( streakVal ) && streakVal != 0, "ERROR: invalid killstreak " + streak1 );
self.killStreaks[ streakVal ] = streak1;
}
if ( streak2 != "none" )
{
streakVal = maps\_killstreaks::getStreakCost( streak2 );
assertEx( isDefined( streakVal ) && streakVal != 0, "ERROR: invalid killstreak " + streak2 );
self.killStreaks[ streakVal ] = streak2;
}
if ( streak3 != "none" )
{
streakVal = maps\_killstreaks::getStreakCost( streak3 );
assertEx( isDefined( streakVal ) && streakVal != 0, "ERROR: invalid killstreak " + streak3 );
self.killStreaks[ streakVal ] = streak3;
}
}