diff --git a/main/pvbrust.cfg b/main/pvbrust.cfg index 5b0f417..4eea94c 100644 --- a/main/pvbrust.cfg +++ b/main/pvbrust.cfg @@ -579,6 +579,7 @@ set onemanarmyRefillsTubes "1" // _killstreaks set scr_killstreak_rollover "1" +set scr_currentRolloverKillstreaksOnlyIncrease "1" set scr_killstreakHud "1" set scr_maxKillstreakRollover "1" set scr_killstreak_mod "0" diff --git a/main/pvbvote.cfg b/main/pvbvote.cfg index d2011c1..1ac5f5a 100644 --- a/main/pvbvote.cfg +++ b/main/pvbvote.cfg @@ -579,6 +579,7 @@ set onemanarmyRefillsTubes "1" // _killstreaks set scr_killstreak_rollover "1" +set scr_currentRolloverKillstreaksOnlyIncrease "1" set scr_killstreakHud "1" set scr_maxKillstreakRollover "1" set scr_killstreak_mod "0" diff --git a/main/server.cfg b/main/server.cfg index 69cebfa..54bad12 100644 --- a/main/server.cfg +++ b/main/server.cfg @@ -579,6 +579,7 @@ set onemanarmyRefillsTubes "1" // _killstreaks set scr_killstreak_rollover "1" +set scr_currentRolloverKillstreaksOnlyIncrease "1" set scr_killstreakHud "1" set scr_maxKillstreakRollover "1" set scr_killstreak_mod "0" diff --git a/userraw/maps/mp/gametypes/_class.gsc b/userraw/maps/mp/gametypes/_class.gsc index 654eb94..9bf15cd 100644 --- a/userraw/maps/mp/gametypes/_class.gsc +++ b/userraw/maps/mp/gametypes/_class.gsc @@ -1124,6 +1124,7 @@ setKillstreaks( streak1, streak2, streak3 ) } self.killstreaks = newKillstreaks; + self.maxKillstreakVal = maxVal; } diff --git a/userraw/maps/mp/gametypes/_damage.gsc b/userraw/maps/mp/gametypes/_damage.gsc index 0c4ca8b..3a8edae 100644 --- a/userraw/maps/mp/gametypes/_damage.gsc +++ b/userraw/maps/mp/gametypes/_damage.gsc @@ -251,17 +251,30 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath ) { if (level.killstreaksIncreaseKillstreak) { + toLifeId = attacker.pers["deaths"]; + if (isDefined(attacker.maxKillstreakVal) && attacker.maxKillstreakVal > 0 && isDefined(level.rolloverKillstreaksOnlyIncrease) && level.rolloverKillstreaksOnlyIncrease) + { + curRollover = int(attacker.pers["cur_kill_streak"]/attacker.maxKillstreakVal); + if (curRollover > 0) + { + if (curRollover == 1) + toLifeId += 0.75; + else + toLifeId += 1/curRollover; + } + } + switch ( sWeapon ) { case "ac130_105mm_mp": case "ac130_40mm_mp": case "ac130_25mm_mp": - if ( attacker.ac130LifeId == attacker.pers["deaths"] ) + if ( attacker.ac130LifeId == toLifeId ) attacker.pers["cur_kill_streak"]++; break; case "cobra_player_minigun_mp": case "weapon_cobra_mk19_mp": - if ( attacker.heliRideLifeId == attacker.pers["deaths"] ) + if ( attacker.heliRideLifeId == toLifeId ) attacker.pers["cur_kill_streak"]++; break; case "cobra_20mm_mp": @@ -277,7 +290,7 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath ) else killstreakLifeId = attacker.lifeId; - if ( killstreakLifeId == attacker.pers["deaths"] && (level.nukeIncreasesStreak || sWeapon != "nuke_mp") ) + if ( killstreakLifeId == toLifeId && (level.nukeIncreasesStreak || sWeapon != "nuke_mp") ) attacker.pers["cur_kill_streak"]++; break; default: diff --git a/userraw/maps/mp/killstreaks/_airdrop.gsc b/userraw/maps/mp/killstreaks/_airdrop.gsc index 45831ae..6806ef4 100644 --- a/userraw/maps/mp/killstreaks/_airdrop.gsc +++ b/userraw/maps/mp/killstreaks/_airdrop.gsc @@ -1295,8 +1295,12 @@ killstreakCrateThink( dropType ) player playLocalSound( "ammo_crate_use" ); + curRollover = undefined; + if (isDefined(player.maxKillstreakVal) && player.maxKillstreakVal > 0 && isDefined(level.rolloverKillstreaksOnlyIncrease) && level.rolloverKillstreaksOnlyIncrease) + curRollover = int(player.pers["cur_kill_streak"]/player.maxKillstreakVal); + doesIncreaseKS = level.airdropKillstreaksIncreaseStreak; - player thread maps\mp\killstreaks\_killstreaks::giveKillstreak( self.crateType, doesIncreaseKS, doesIncreaseKS, self.owner ); + player thread maps\mp\killstreaks\_killstreaks::giveKillstreak( self.crateType, doesIncreaseKS, doesIncreaseKS, self.owner, curRollover ); player maps\mp\gametypes\_hud_message::killstreakSplashNotify( self.crateType, undefined, "pickup" ); @@ -1378,8 +1382,12 @@ deleteCrate() sentryUseTracker(owner) { + curRollover = undefined; + if (isDefined(self.maxKillstreakVal) && self.maxKillstreakVal > 0 && isDefined(level.rolloverKillstreaksOnlyIncrease) && level.rolloverKillstreaksOnlyIncrease) + curRollover = int(self.pers["cur_kill_streak"]/self.maxKillstreakVal); + // if ( !self maps\mp\killstreaks\_autosentry::giveSentry( "sentry_minigun" ) ) - self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true, true, owner ); + self maps\mp\killstreaks\_killstreaks::giveKillstreak( "sentry", true, true, owner, curRollover ); } diff --git a/userraw/maps/mp/killstreaks/_killstreaks.gsc b/userraw/maps/mp/killstreaks/_killstreaks.gsc index e1af2ec..b441b4b 100644 --- a/userraw/maps/mp/killstreaks/_killstreaks.gsc +++ b/userraw/maps/mp/killstreaks/_killstreaks.gsc @@ -77,6 +77,7 @@ init() level.killstreakRoundDelay = getIntProperty( "scr_game_killstreakdelay", 8 ); setDvarIfUninitialized( "scr_killstreak_rollover", false ); + setDvarIfUninitialized( "scr_currentRolloverKillstreaksOnlyIncrease", false ); setDvarIfUninitialized( "scr_maxKillstreakRollover", 10 ); setDvarIfUninitialized( "scr_killstreakHud", false ); setDvarIfUninitialized( "scr_killstreak_mod", 0 ); @@ -89,6 +90,7 @@ init() level.killstreaksRollOver = getDvarInt("scr_killstreak_rollover"); level.maxKillstreakRollover = getDvarInt("scr_maxKillstreakRollover"); + level.rolloverKillstreaksOnlyIncrease = getDvarInt("scr_currentRolloverKillstreaksOnlyIncrease"); level.killstreakHud = getDvarInt("scr_killstreakHud"); level.killStreakMod = getDvarInt( "scr_killstreak_mod" ); level.killstreakPrint = getDvarInt( "scr_killstreak_print" ); @@ -525,6 +527,7 @@ checkKillstreakReward( streakCount ) foreach ( streakVal, streakName in self.killStreaks ) { actualVal = streakVal + level.killStreakMod; + curRollover = 0; if ( actualVal > streakCount ) break; @@ -556,7 +559,7 @@ checkKillstreakReward( streakCount ) useStreakName = streakName; } - if ( self tryGiveKillstreak( useStreakName, int(max( actualVal, streakCount )) ) ) + if ( self tryGiveKillstreak( useStreakName, int(max( actualVal, streakCount )), curRollover ) ) { self thread killstreakEarned( useStreakName ); self.pers["lastEarnedStreak"] = streakName; @@ -620,19 +623,19 @@ rewardNotify( streakName, streakVal ) } -tryGiveKillstreak( streakName, streakVal ) +tryGiveKillstreak( streakName, streakVal, curRollover ) { level notify ( "gave_killstreak", streakName ); if ( !level.gameEnded ) self thread rewardNotify( streakName, streakVal ); - self giveKillstreak( streakName, streakVal, true ); + self giveKillstreak( streakName, streakVal, true, self, curRollover ); return true; } -giveKillstreak( streakName, isEarned, awardXp, owner ) +giveKillstreak( streakName, isEarned, awardXp, owner, curRollover ) { self endon ( "disconnect" ); @@ -655,10 +658,19 @@ giveKillstreak( streakName, isEarned, awardXp, owner ) self.pers["kID"]++; + toLifeId = self.pers["deaths"]; + if (level.rolloverKillstreaksOnlyIncrease && isDefined(curRollover) && curRollover > 0) + { + if (curRollover == 1) + toLifeId += 0.75; + else + toLifeId += 1/curRollover; + } + if ( !self.pers["killstreaks"][0].earned ) self.pers["killstreaks"][0].lifeId = -1; else - self.pers["killstreaks"][0].lifeId = self.pers["deaths"]; + self.pers["killstreaks"][0].lifeId = toLifeId; // probably obsolete unless we bring back the autoshotty if ( isdefined( level.killstreakSetupFuncs[ streakName ] ) )