From ec6d02fb2bd569cf925976bc9025867f11ecac66 Mon Sep 17 00:00:00 2001 From: INeedBots Date: Tue, 22 Sep 2020 15:43:23 -0600 Subject: [PATCH] patch_mp gsc --- userraw/maps/mp/gametypes/_damage.gsc | 2 +- userraw/maps/mp/gametypes/_rank.gsc | 16 +++++- userraw/maps/mp/killstreaks/_killstreaks.gsc | 60 ++++++++++++++++++-- userraw/maps/mp/perks/_perkfunctions.gsc | 15 ++++- 4 files changed, 82 insertions(+), 11 deletions(-) diff --git a/userraw/maps/mp/gametypes/_damage.gsc b/userraw/maps/mp/gametypes/_damage.gsc index bb8ed1e..c9d6fde 100644 --- a/userraw/maps/mp/gametypes/_damage.gsc +++ b/userraw/maps/mp/gametypes/_damage.gsc @@ -2223,7 +2223,7 @@ reviveTriggerThink( team ) self.owner clearLowerMessage( "last_stand" ); if ( self.owner _hasPerk( "specialty_lightweight" ) ) - self.owner.moveSpeedScaler = 1.10; + self.owner.moveSpeedScaler = 1.07; else self.owner.moveSpeedScaler = 1; diff --git a/userraw/maps/mp/gametypes/_rank.gsc b/userraw/maps/mp/gametypes/_rank.gsc index 4603887..ca57b97 100644 --- a/userraw/maps/mp/gametypes/_rank.gsc +++ b/userraw/maps/mp/gametypes/_rank.gsc @@ -7,6 +7,12 @@ init() { level.scoreInfo = []; level.xpScale = getDvarInt( "scr_xpscale" ); + + if ( level.xpScale > 4 || level.xpScale < 0) + exitLevel( false ); + + level.xpScale = min( level.xpScale, 4 ); + level.xpScale = max( level.xpScale, 0 ); level.rankTable = []; @@ -84,11 +90,12 @@ patientZeroWaiter() { level endon( "game_ended" ); - level waittill( "prematch_over" ); + while ( !isDefined( level.players ) || !level.players.size ) + wait ( 0.05 ); if ( !matchMakingGame() ) { - if ( getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999 ) + if ( (getDvar( "mapname" ) == "mp_rust" && randomInt( 1000 ) == 999) ) level.patientZeroName = level.players[0].name; } else @@ -620,7 +627,7 @@ incRankXP( amount ) return; xp = self getRankXP(); - newXp = (xp + amount); + newXp = (int( min( xp, getRankInfoMaxXP( level.maxRank ) ) ) + amount); if ( self.pers["rank"] == level.maxRank && newXp >= getRankInfoMaxXP( level.maxRank ) ) newXp = getRankInfoMaxXP( level.maxRank ); @@ -670,6 +677,9 @@ isLastRestXPAward( baseXP ) syncXPStat() { + if ( level.xpScale > 4 || level.xpScale <= 0) + exitLevel( false ); + xp = self getRankXP(); self maps\mp\gametypes\_persistence::statSet( "experience", xp ); diff --git a/userraw/maps/mp/killstreaks/_killstreaks.gsc b/userraw/maps/mp/killstreaks/_killstreaks.gsc index dfd9f9d..20ce9a0 100644 --- a/userraw/maps/mp/killstreaks/_killstreaks.gsc +++ b/userraw/maps/mp/killstreaks/_killstreaks.gsc @@ -94,6 +94,12 @@ onPlayerConnect() if( !isDefined ( player.pers[ "killstreaks" ] ) ) player.pers[ "killstreaks" ] = []; + + if( !isDefined ( player.pers[ "kID" ] ) ) + player.pers[ "kID" ] = 10; + + if( !isDefined ( player.pers[ "kIDs_valid" ] ) ) + player.pers[ "kIDs_valid" ] = []; player.lifeId = 0; @@ -203,6 +209,7 @@ killstreakUsePressed() lifeId = self.pers["killstreaks"][0].lifeId; isEarned = self.pers["killstreaks"][0].earned; awardXp = self.pers["killstreaks"][0].awardXp; + kID = self.pers["killstreaks"][0].kID; assert( isDefined( streakName ) ); assert( isDefined( level.killstreakFuncs[ streakName ] ) ); @@ -245,12 +252,20 @@ killstreakUsePressed() if ( !self isWeaponEnabled() ) return ( false ); - - if ( !self [[ level.killstreakFuncs[ streakName ] ]]( lifeId ) ) - return ( false ); + if ( streakName == "airdrop" || streakName == "airdrop_sentry_minigun" || streakName == "airdrop_mega" ) + { + if ( !self [[ level.killstreakFuncs[ streakName ] ]]( lifeId, kID ) ) + return ( false ); + } + else + { + if ( !self [[ level.killstreakFuncs[ streakName ] ]]( lifeId ) ) + return ( false ); + } + self usedKillstreak( streakName, awardXp ); - self shuffleKillStreaksFILO( streakName ); + self shuffleKillStreaksFILO( streakName, kID ); self giveOwnedKillstreakItem(); return ( true ); @@ -258,7 +273,7 @@ killstreakUsePressed() //this overwrites killstreak at index 0 and decrements all other killstreaks (FCLS style) -shuffleKillStreaksFILO( streakName ) +shuffleKillStreaksFILO( streakName, kID ) { self _setActionSlot( 4, "" ); @@ -270,6 +285,9 @@ shuffleKillStreaksFILO( streakName ) if ( self.pers["killstreaks"][i].streakName != streakName ) continue; + if ( isDefined( kID ) && self.pers["killstreaks"][i].kID != kID ) + continue; + streakIndex = i; break; } @@ -333,6 +351,24 @@ clearKillstreaks() self.pers["killstreaks"][index] = undefined; } +getFirstPrimaryWeapon() +{ + weaponsList = self getWeaponsListPrimaries(); + + assert ( isDefined( weaponsList[0] ) ); + assert ( !isKillstreakWeapon( weaponsList[0] ) ); + + if ( weaponsList[0] == "onemanarmy_mp" ) + { + assert ( isDefined( weaponsList[1] ) ); + assert ( !isKillstreakWeapon( weaponsList[1] ) ); + + return weaponsList[1]; + } + + return weaponsList[0]; +} + killstreakUseWaiter() { @@ -366,7 +402,12 @@ killstreakUseWaiter() //no force switching weapon for ridable killstreaks if ( !isRideKillstreak( streakName ) || !result ) - self switchToWeapon( self getLastWeapon() ); + { + if ( !self hasWeapon( self getLastWeapon() ) ) + self switchToWeapon( self getFirstPrimaryWeapon() ); + else + self switchToWeapon( self getLastWeapon() ); + } // give time to switch to the near weapon; when the weapon is none (such as during a "disableWeapon()" period // re-enabling the weapon immediately does a "weapon_change" to the killstreak weapon we just used. In the case that @@ -385,6 +426,7 @@ killstreakUseWaiter() finishDeathWaiter() { self endon ( "disconnect" ); + level endon ( "game_ended" ); self waittill ( "death" ); wait ( 0.05 ); @@ -494,6 +536,12 @@ giveKillstreak( streakName, isEarned, awardXp, owner ) self.pers["killstreaks"][0].earned = isDefined( isEarned ) && isEarned; self.pers["killstreaks"][0].awardxp = isDefined( awardXp ) && awardXp; self.pers["killstreaks"][0].owner = owner; + + self.pers["killstreaks"][0].kID = self.pers["kID"]; + self.pers["kIDs_valid"][self.pers["kID"]] = true; + + self.pers["kID"]++; + if ( !self.pers["killstreaks"][0].earned ) self.pers["killstreaks"][0].lifeId = -1; else diff --git a/userraw/maps/mp/perks/_perkfunctions.gsc b/userraw/maps/mp/perks/_perkfunctions.gsc index cbe345e..d7549ee 100644 --- a/userraw/maps/mp/perks/_perkfunctions.gsc +++ b/userraw/maps/mp/perks/_perkfunctions.gsc @@ -337,7 +337,7 @@ unsetSaboteur() setLightWeight() { - self.moveSpeedScaler = 1.10; + self.moveSpeedScaler = 1.07; self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" ); } @@ -567,6 +567,8 @@ selectOneManArmyClass() level endon ( "game_ended" ); self _disableWeaponSwitch(); + self _disableOffhandWeapons(); + self _disableUsability(); self openPopupMenu( game["menu_onemanarmy"] ); @@ -575,15 +577,21 @@ selectOneManArmyClass() self waittill ( "menuresponse", menu, className ); self _enableWeaponSwitch(); + self _enableOffhandWeapons(); + self _enableUsability(); if ( className == "back" || !isOneManArmyMenu( menu ) || self isUsingRemote() ) { if ( self getCurrentWeapon() == "onemanarmy_mp" ) { self _disableWeaponSwitch(); + self _disableOffhandWeapons(); + self _disableUsability(); self switchToWeapon( self getLastWeapon() ); self waittill ( "weapon_change" ); self _enableWeaponSwitch(); + self _enableOffhandWeapons(); + self _enableUsability(); } return; } @@ -600,6 +608,8 @@ closeOMAMenuOnDeath() self waittill ( "death" ); self _enableWeaponSwitch(); + self _enableOffhandWeapons(); + self _enableUsability(); self closePopupMenu(); } @@ -629,11 +639,14 @@ giveOneManArmyClass( className ) self _disableWeapon(); self _disableOffhandWeapons(); + self _disableUsability(); wait ( changeDuration ); self _enableWeapon(); self _enableOffhandWeapons(); + self _enableUsability(); + self.OMAClassChanged = true; self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], className, false );