iw6-scripts-dev/maps/mp/killstreaks/_perkstreaks.gsc
2024-12-11 11:28:08 +01:00

156 lines
5.7 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
/*
Perks as killstreaks:
The player will earn the killstreak and automatically get the perk.
This has been repurposed to be used for very simple killstreaks that are perk-like.
*/
KILLSTREAK_GIMME_SLOT = 0;
KILLSTREAK_SLOT_1 = 1;
KILLSTREAK_SLOT_2 = 2;
KILLSTREAK_SLOT_3 = 3;
KILLSTREAK_ALL_PERKS_SLOT = 4;
KILLSTREAK_STACKING_START_SLOT = 5;
init()
{
level.killStreakFuncs[ "specialty_fastsprintrecovery_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_fastreload_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_lightweight_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_marathon_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_stalker_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_reducedsway_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_quickswap_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_pitcher_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_bulletaccuracy_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_quickdraw_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_sprintreload_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_silentkill_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_blindeye_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_gpsjammer_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_quieter_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_incog_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_paint_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_scavenger_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_detectexplosive_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_selectivehearing_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_comexp_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_falldamage_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_regenfaster_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_sharp_focus_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_stun_resistance_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "_specialty_blastshield_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_gunsmith_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_extraammo_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_extra_equipment_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_extra_deadly_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_extra_attachment_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_explosivedamage_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_gambler_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_hardline_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_twoprimaries_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_boom_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "specialty_deadeye_ks" ] = ::tryUsePerkStreak;
level.killStreakFuncs[ "all_perks_bonus" ] = ::tryUseAllPerks;
level.killStreakFuncs[ "speed_boost" ] = ::tryUseSpeedBoost;
level.killStreakFuncs[ "refill_grenades" ] = ::tryUseRefillGrenades;
level.killStreakFuncs[ "refill_ammo" ] = ::tryUseRefillAmmo;
level.killStreakFuncs[ "regen_faster" ] = ::tryUseRegenFaster;
}
tryUseSpeedBoost( lifeId, streakName )
{
self doKillstreakFunctions( "specialty_juiced", "speed_boost" );
return true;
}
tryUseRefillGrenades( lifeId, streakName )
{
self doKillstreakFunctions( "specialty_refill_grenades", "refill_grenades" );
return true;
}
tryUseRefillAmmo( lifeId, streakName )
{
self doKillstreakFunctions( "specialty_refill_ammo", "refill_ammo" );
return true;
}
tryUseRegenFaster( lifeId, streakName )
{
self doKillstreakFunctions( "specialty_regenfaster", "regen_faster" );
return true;
}
tryUseAllPerks( lifeId, streakName )
{
// left blank on purpose
return true;
}
tryUsePerkStreak( lifeId, streakName )
{
AssertEx( IsDefined( streakName ), "tryUsePerkStreak needs a streakName instead of undefined" );
perk = strip_suffix( streakName, "_ks" );
self doPerkFunctions( perk );
return true;
}
doPerkFunctions( perkName )
{
self givePerk( perkName, false );
self thread watchDeath( perkName );
self thread checkForPerkUpgrade( perkName );
if( perkName == "specialty_hardline" )
self maps\mp\killstreaks\_killstreaks::setStreakCountToNext();
self maps\mp\_matchdata::logKillstreakEvent( perkName + "_ks", self.origin );
}
doKillstreakFunctions( perkName, killstreakEvent )
{
self givePerk( perkName, false );
if( IsDefined( killstreakEvent ) )
self maps\mp\_matchdata::logKillstreakEvent( killstreakEvent, self.origin );
}
watchDeath( perkName )
{
self endon( "disconnect" );
self waittill( "death" );
self _unsetPerk( perkName );
//self _unsetExtraPerks( perkName );
}
checkForPerkUpgrade( perkName )
{
// check for pro version
perk_upgrade = self maps\mp\gametypes\_class::getPerkUpgrade( perkName );
if( perk_upgrade != "specialty_null" )
{
self givePerk( perk_upgrade, false );
self thread watchDeath( perk_upgrade );
}
}
isPerkStreakOn( streakName ) // self == player
{
// return whether the perk is available right now or not
for( i = KILLSTREAK_SLOT_1; i < KILLSTREAK_SLOT_3 + 1; i++ )
{
if( IsDefined( self.pers[ "killstreaks" ][ i ].streakName ) && self.pers[ "killstreaks" ][ i ].streakName == streakName )
{
if( self.pers[ "killstreaks" ][ i ].available )
return true;
}
}
return false;
}