modded gsc

This commit is contained in:
INeedBots 2020-09-22 18:45:44 -06:00
parent 1480e11f0a
commit a42a4dc37b
8 changed files with 2439 additions and 843 deletions

View File

@ -1,3 +1,12 @@
/*
_gamelogic modded
Author: INeedGames
Date: 09/22/2020
Adds force final killcam, extra hitmarkers, etc.
Thanks: banz
*/
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
@ -202,7 +211,8 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath )
else
value = undefined;
attacker playLocalSound( "bullet_impact_headshot_2" );
if( !level.extraDamageFeedback )
attacker playLocalSound( "bullet_impact_headshot_2" );
}
else
{
@ -237,19 +247,19 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath )
if ( isAlive( attacker ) )
{
// killstreaks only advance from kills earned this life
if ( isDefined( level.killStreakSpecialCaseWeapons[sWeapon] ) ) // this is an optimization
if ( isDefined( level.killStreakSpecialCaseWeapons[sWeapon] ) || sWeapon == "nuke_mp" ) // this is an optimization
{
switch ( sWeapon )
{
case "ac130_105mm_mp":
case "ac130_40mm_mp":
case "ac130_25mm_mp":
if ( attacker.ac130LifeId == attacker.pers["deaths"] )
if ( attacker.ac130LifeId == attacker.pers["deaths"] && !level.scriptIncKillstreak )
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 == attacker.pers["deaths"] && !level.scriptIncKillstreak )
attacker.pers["cur_kill_streak"]++;
break;
case "cobra_20mm_mp":
@ -259,22 +269,25 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath )
case "sentry_minigun_mp":
case "harrier_20mm_mp":
case "pavelow_minigun_mp":
case "nuke_mp":
if ( isDefined( eInflictor ) && isDefined( eInflictor.lifeId ) )
killstreakLifeId = eInflictor.lifeId;
else
killstreakLifeId = attacker.lifeId;
if ( killstreakLifeId == attacker.pers["deaths"] )
if ( killstreakLifeId == attacker.pers["deaths"] && !level.scriptIncKillstreak && (level.nukeIncreasesStreak || sWeapon != "nuke_mp") )
attacker.pers["cur_kill_streak"]++;
break;
default:
attacker.pers["cur_kill_streak"]++;
if( !level.scriptIncKillstreak )
attacker.pers["cur_kill_streak"]++;
break;
}
}
else
{
attacker.pers["cur_kill_streak"]++;
if( !level.scriptIncKillstreak )
attacker.pers["cur_kill_streak"]++;
}
attacker setPlayerStatIfGreater( "killstreak", attacker.pers["cur_kill_streak"] );
@ -322,6 +335,9 @@ handleNormalDeath( lifeId, attacker, eInflictor, sWeapon, sMeansOfDeath )
if ( isDefined( level.onNormalDeath ) && attacker.pers[ "team" ] != "spectator" )
[[ level.onNormalDeath ]]( self, attacker, lifeId );
if ( isDefined( level.onNormalDeath2 ) && attacker.pers[ "team" ] != "spectator" )
[[ level.onNormalDeath2 ]]( self, attacker, sMeansOfDeath );
level thread maps\mp\gametypes\_battlechatter_mp::sayLocalSoundDelayed( attacker, "kill", 0.75 );
if ( isDefined( self.lastAttackedShieldPlayer ) && isDefined( self.lastAttackedShieldTime ) && self.lastAttackedShieldPlayer != attacker )
@ -425,7 +441,7 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
victim.idFlags = 0;
else if ( sMeansOfDeath == "MOD_GRENADE" && isSubstr( sWeapon, "frag_grenade" ) && iDamage == 100000 )
victim.idFlags = 0;
else if ( sWeapon == "nuke_mp" )
else if ( sWeapon == "nuke_mp" && !level.forceFinalKillcam )
victim.idFlags = 0;
else if ( level.friendlyfire >= 2)
victim.idFlags = 0;
@ -543,7 +559,11 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
// override MOD
if ( isHeadShot( sWeapon, sHitLoc, sMeansOfDeath, attacker ) )
{
sMeansOfDeath = "MOD_HEAD_SHOT";
if( level.headShotDetachHead )
victim detach(victim.headmodel);
}
else if ( sMeansOfDeath != "MOD_MELEE" && !isDefined( victim.nuked ) )
victim playDeathSound();
@ -634,10 +654,14 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
else if ( !isPlayer( attacker ) || (isPlayer( attacker ) && sMeansOfDeath == "MOD_FALLING") )
{
handleWorldDeath( attacker, lifeId, sMeansOfDeath, sHitLoc );
if ( level.failCam )
doKillcam = true;
}
else if ( attacker == victim )
{
handleSuicideDeath( sMeansOfDeath, sHitLoc );
if ( level.failCam )
doKillcam = true;
}
else if ( friendlyFire )
{
@ -645,6 +669,8 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
{
handleFriendlyFireDeath( attacker );
}
if ( level.failCam )
doKillcam = true;
}
else
{
@ -697,9 +723,11 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
if ( isPlayer( attacker ) )
attackerNum = attacker getEntityNumber();
else if ( (sMeansOfDeath == "MOD_FALLING" || eInflictor.classname == "trigger_hurt") && level.failCam )//banz
attackerNum = victim getEntityNumber();
else
attackerNum = -1;
killcamentity = victim getKillcamEntity( attacker, eInflictor, sWeapon );
killcamentity = victim getKillcamEntity( attacker, eInflictor, sWeapon, sMeansOfDeath );
killcamentityindex = -1;
killcamentitystarttime = 0;
@ -716,18 +744,25 @@ PlayerKilled_internal( eInflictor, attacker, victim, iDamage, sMeansOfDeath, sWe
doKillcam = true;
#/
if ( isDefined( attacker.finalKill ) )
maps\mp\_awards::addAwardWinner( "finalkill", attacker.clientid );
// record the kill cam values for the final kill cam
if ( level.forceFinalKillcam && doKillcam )
maps\mp\gametypes\_gamelogic::recordFinalKillCam( 5.0, victim, attacker, attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, deathTimeOffset, psOffsetTime );
//prof_end( " PlayerKilled_5" );
//prof_begin( " PlayerKilled_6" );
if ( isDefined( attacker.finalKill ) && doKillcam && !isDefined( level.nukeDetonated ) )
if ( !level.forceFinalKillcam && level.allowFinalKillcam )
{
level thread doFinalKillcam( 5.0, victim, attacker, attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, deathTimeOffset, psOffsetTime );
if ( isDefined( attacker.finalKill ) )
maps\mp\_awards::addAwardWinner( "finalkill", attacker.clientid );
if ( !isFauxDeath )
wait ( 1.0 );
//prof_end( " PlayerKilled_5" );
//prof_begin( " PlayerKilled_6" );
if ( isDefined( attacker.finalKill ) && doKillcam && !isDefined( level.nukeDetonated ) )
{
level thread doFinalKillcam( 5.0, victim, attacker, attackerNum, killcamentityindex, killcamentitystarttime, sWeapon, deathTimeOffset, psOffsetTime );
if ( !isFauxDeath )
wait ( 1.0 );
}
}
if ( !isFauxDeath )
@ -925,11 +960,14 @@ resetPlayerVariables()
}
getKillcamEntity( attacker, eInflictor, sWeapon )
getKillcamEntity( attacker, eInflictor, sWeapon, sMeansOfDeath )
{
if ( !isDefined( eInflictor ) )
return undefined;
if( (sMeansOfDeath == "MOD_FALLING" || eInflictor.classname == "trigger_hurt") && level.failCam )
return attacker;
if ( eInflictor == attacker )
return undefined;
@ -1052,6 +1090,12 @@ giveRecentShieldXP()
Callback_PlayerDamage_internal( eInflictor, eAttacker, victim, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime )
{
if( level.disableKnife && sMeansOfDeath == "MOD_MELEE" && sWeapon != "riotshield_mp" )
return;
if( level.disableTurret && sWeapon == "turret_minigun_mp" )
return;
if ( !isReallyAlive( victim ) )
return;
@ -1402,6 +1446,8 @@ Callback_PlayerDamage_internal( eInflictor, eAttacker, victim, iDamage, iDFlags,
if ( attackerIsNPC && isDefined( eAttacker.gunner ) )
damager = eAttacker.gunner;
else if( level.extraDamageFeedback && isDefined( eAttacker.owner ) )
damager = eAttacker.owner;
else
damager = eAttacker;
@ -1409,7 +1455,7 @@ Callback_PlayerDamage_internal( eInflictor, eAttacker, victim, iDamage, iDFlags,
{
if ( iDFlags & level.iDFLAGS_STUN )
typeHit = "stun";
else if ( victim hasPerk( "specialty_armorvest", true ) || (isExplosiveDamage( sMeansOfDeath ) && victim _hasPerk( "_specialty_blastshield" )) )
else if ( victim _hasPerk( "specialty_armorvest" ) || (isExplosiveDamage( sMeansOfDeath ) && victim _hasPerk( "_specialty_blastshield" )) )
typeHit = "hitBodyArmor";
else if ( victim _hasPerk( "specialty_combathigh") )
typeHit = "hitEndGame";
@ -1534,6 +1580,37 @@ Callback_PlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, s
finishPlayerDamageWrapper( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, psOffsetTime, stunFraction )
{
if( level.allowPrintDamage )
{
if ( isDefined( eAttacker ) && isPlayer( eAttacker ) && eAttacker.printDamage )
eAttacker iPrintLnBold( iDamage );
else if( isDefined( eAttacker.owner ) && isPlayer( eAttacker.owner ) && eAttacker.owner.printDamage )
eAttacker.owner iPrintLnBold( iDamage );
}
if( level.extraDamageFeedback )
{
if( sWeapon == "nuke_mp" )
{
if ( self _hasPerk( "specialty_armorvest" ) || self _hasPerk( "_specialty_blastshield") )
typeHit = "hitBodyArmor";
else if ( self _hasPerk( "specialty_combathigh") )
typeHit = "hitEndGame";
else
typeHit = "standard";
eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( typeHit );
}
if( sHitLoc == "head" || sHitLoc == "helmet" )
{
if ( isDefined( eAttacker ) && isPlayer( eAttacker ) )
eAttacker playLocalSound( "bullet_impact_headshot_2" );
else if( isDefined( eAttacker.owner ) && isPlayer( eAttacker.owner ) )
eAttacker.owner playLocalSound( "bullet_impact_headshot_2" );
}
}
if ( (self isUsingRemote() ) && (iDamage >= self.health) && !(iDFlags & level.iDFLAGS_STUN) )
{
if ( !isDefined( vDir ) )

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,10 @@
/*
_rank modded
Author: INeedGames
Date: 09/22/2020
Removes the level.xpScale check, good old 2010 infinity ward under a law suite logic here
*/
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
@ -8,11 +15,11 @@ init()
level.scoreInfo = [];
level.xpScale = getDvarInt( "scr_xpscale" );
if ( level.xpScale > 4 || level.xpScale < 0)
exitLevel( false );
// if ( level.xpScale > 4 || level.xpScale < 0)
// exitLevel( false );
level.xpScale = min( level.xpScale, 4 );
level.xpScale = max( level.xpScale, 0 );
// level.xpScale = min( level.xpScale, 4 );
// level.xpScale = max( level.xpScale, 0 );
level.rankTable = [];
@ -677,8 +684,8 @@ isLastRestXPAward( baseXP )
syncXPStat()
{
if ( level.xpScale > 4 || level.xpScale <= 0)
exitLevel( false );
// if ( level.xpScale > 4 || level.xpScale <= 0)
// exitLevel( false );
xp = self getRankXP();

View File

@ -1,3 +1,33 @@
/*
_weapons modded
Author: INeedGames
Date: 09/22/2020
Adds dropping weapon, picking up equipment and friendly fire grenade team switching exploit fix.
Fixes the semtex 'STUCK' challenge when the thrower dies.
Fixes claymores from tripping when the victim is elevated from the claymore.
Fixes stuns and flashes friendly fire on claymores and c4s.
Fixes direct impact stun stunning the victim.
DVARS:
- scr_allowDropWeaponOnCommand <bool>
false - (default) allows the player to drop their weapon
- scr_allowPickUpEquipment <bool>
false - (default) allows the player to pick up their equipment once placed
- scr_allowDropWeaponOnDeath <bool>
true - (default) allows player dropping their weapon on death
- scr_allowClaymoreBounces <bool>
true - (default) allows players to use claymores from an elevated area, and the claymore will be placed far below the player.
- scr_extraTeamIcons <bool>
false - (default) adds team icons to more objects such as grenades
- scr_deleteNadeOnTeamChange <bool>
false - (default) deletes a grenade when it's owner changes team
*/
#include common_scripts\utility;
#include maps\mp\_utility;
@ -50,6 +80,20 @@ init()
break;
}
setDvarIfUninitialized("scr_allowDropWeaponOnCommand", false);
setDvarIfUninitialized("scr_allowPickUpEquipment", false);
setDvarIfUninitialized("scr_allowDropWeaponOnDeath", true);
setDvarIfUninitialized("scr_allowClaymoreBounces", true);
setDvarIfUninitialized("scr_extraTeamIcons", false);
setDvarIfUninitialized("scr_deleteNadeOnTeamChange", false);
level.allowDropWeaponOnCommand = getDvarInt("scr_allowDropWeaponOnCommand");
level.allowDropWeaponOnDeath = getDvarInt("scr_allowDropWeaponOnDeath");
level.allowPickUpEquipment = getDvarInt("scr_allowPickUpEquipment");
level.allowExtendedClaymoreTrace = getDvarInt("scr_allowClaymoreBounces");
level.extraTeamIcons = getDvarInt("scr_extraTeamIcons");
level.deleteNadeOnTeamChange = getDvarInt("scr_deleteNadeOnTeamChange");
attachmentList = getAttachmentList();
// assigns weapons with stat numbers from 0-149
@ -216,6 +260,8 @@ init()
level thread onPlayerConnect();
level thread watchSentryLimit();
level.c4explodethisframe = false;
array_thread( getEntArray( "misc_turret", "classname" ), ::turret_monitorUse );
@ -224,6 +270,19 @@ init()
}
watchSentryLimit()
{
for(;;)
{
sentries = getentarray( "misc_turret", "classname" );
if(sentries.size > 30)
sentries[0] delete();
wait 0.05;
}
}
dumpIt()
{
@ -397,6 +456,7 @@ onPlayerConnect()
player thread onPlayerSpawned();
player thread bombSquadWaiter();
player thread monitorSemtex();
}
}
@ -423,6 +483,7 @@ onPlayerSpawned()
self thread watchSentryUsage();
self thread watchWeaponReload();
self thread maps\mp\gametypes\_class::trackRiotShield();
self thread watchDropWeaponOnCommand();
self.lastHitTime = [];
@ -433,13 +494,88 @@ onPlayerSpawned()
self thread updateSavedLastWeapon();
if ( self hasWeapon( "semtex_mp" ) )
self thread monitorSemtex();
self.currentWeaponAtSpawn = undefined;
}
}
watchDropWeaponOnCommand()
{
if( !level.allowDropWeaponOnCommand )
return;
self endon( "disconnect" );
self endon( "death" );
self notifyOnPlayerCommand( "drop_weapon_on_cmd", "+actionslot 2" );
for(;;)
{
self waittill( "drop_weapon_on_cmd" );
weapon = self GetCurrentWeapon();
if ( !gameFlag( "prematch_done" ) || !isDefined( weapon ) )
continue;
if( level.gameEnded )
continue;
if( !mayDropWeapon( weapon ) )
continue;
if ( !self hasWeapon( weapon ) )
continue;
if ( weapon != "riotshield_mp" )
{
if ( !(self AnyAmmoForWeaponModes( weapon )) )
{
continue;
}
clipAmmoR = self GetWeaponAmmoClip( weapon, "right" );
clipAmmoL = self GetWeaponAmmoClip( weapon, "left" );
if ( !clipAmmoR && !clipAmmoL )
{
continue;
}
stockAmmo = self GetWeaponAmmoStock( weapon );
stockMax = WeaponMaxAmmo( weapon );
if ( stockAmmo > stockMax )
stockAmmo = stockMax;
item = self dropItem( weapon );
item ItemWeaponSetAmmo( clipAmmoR, stockAmmo, clipAmmoL );
}
else
{
item = self dropItem( weapon );
if ( !isDefined( item ) )
continue;
item ItemWeaponSetAmmo( 1, 1, 0 );
}
item.owner = self;
item thread maps\mp\gametypes\_weapons::watchPickup();
//deletes dropped weapon after 30 sec.
item thread maps\mp\gametypes\_weapons::deletePickupAfterAWhile();
detach_model = getWeaponModel( weapon );
if ( !isDefined( detach_model ) )
continue;
if( isDefined( self.tag_stowed_back ) && detach_model == self.tag_stowed_back )
self maps\mp\gametypes\_weapons::detach_back_weapon();
if ( !isDefined( self.tag_stowed_hip ) )
continue;
if( detach_model == self.tag_stowed_hip )
self maps\mp\gametypes\_weapons::detach_hip_weapon();
}
}
WatchStingerUsage()
{
self maps\mp\_stinger::StingerUsageLoop();
@ -598,6 +734,9 @@ mayDropWeapon( weapon )
dropWeaponForDeath( attacker )
{
if( !level.allowDropWeaponOnDeath )
return;
weapon = self.lastDroppableWeapon;
if ( isdefined( self.droppedDeathWeapon ) )
@ -1106,6 +1245,17 @@ watchGrenadeUsage()
}
}
deleteOnOwnerTeamChange( owner )
{
self endon( "delete_on_team_overlap" );
self endon( "death" );
owner waittill_any( "disconnect", "joined_team", "joined_spectators" );
self delete();
}
beginGrenadeTracking()
{
self endon( "death" );
@ -1122,16 +1272,42 @@ beginGrenadeTracking()
self.changingWeapon = undefined;
if ( weaponName == "frag_grenade_mp" || weaponName == "semtex_mp" )
{
grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
grenade.originalOwner = self;
}
grenade.owner = self;
if ( weaponName == "flash_grenade_mp" || weaponName == "concussion_grenade_mp" )
switch( weaponName )
{
grenade.owner = self;
grenade thread empExplodeWaiter();
case "frag_grenade_mp":
case "semtex_mp":
grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
grenade.originalOwner = self;
if ( level.deleteNadeOnTeamChange )
grenade thread deleteOnOwnerTeamChange( self );
if( level.extraTeamIcons )
grenade thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
break;
case "flash_grenade_mp":
case "concussion_grenade_mp":
grenade thread empExplodeWaiter();
if ( level.deleteNadeOnTeamChange )
grenade thread deleteOnOwnerTeamChange( self );
if( level.extraTeamIcons )
grenade thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
break;
case "smoke_grenade_mp":
if( level.extraTeamIcons )
grenade thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
break;
case "throwingknife_mp":
if ( level.deleteNadeOnTeamChange )
grenade thread deleteOnOwnerTeamChange( self );
if( level.extraTeamIcons )
grenade thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
break;
}
}
@ -1193,6 +1369,10 @@ watchMissileUsage()
default:
break;
}
if( level.extraTeamIcons && weaponName != "remotemissile_projectile_mp" )
missile thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
if ( level.deleteNadeOnTeamChange )
missile thread deleteOnOwnerTeamChange( self );
}
}
@ -1262,6 +1442,14 @@ watchForThrowbacks()
grenade thread maps\mp\gametypes\_shellshock::grenade_earthQuake();
grenade.originalOwner = self;
if( level.extraTeamIcons )
grenade thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
if ( level.deleteNadeOnTeamChange )
{
grenade notify( "delete_on_team_overlap" );
grenade thread deleteOnOwnerTeamChange( self );
}
}
}
@ -1302,7 +1490,12 @@ watchC4()
c4 thread c4Damage();
c4 thread c4EMPDamage();
c4 thread c4EMPKillstreakWait();
if( level.extraTeamIcons )
c4 thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
//c4 thread c4DetectionTrigger( self.pers[ "team" ] );
c4 thread c4WatchPickup();
if ( level.deleteNadeOnTeamChange )
c4 thread deleteOnOwnerTeamChange( self );
}
}
}
@ -1316,6 +1509,9 @@ c4EMPDamage()
{
self waittill( "emp_damage", attacker, duration );
if ( isPlayer(attacker) && !friendlyFireCheck( self.owner, attacker ) )
continue;
playfxOnTag( getfx( "sentry_explode_mp" ), self, "tag_origin" );
self.disabled = true;
@ -1350,15 +1546,44 @@ c4EMPKillstreakWait()
}
}
deleteTeamHeadIconOnUndefined(ent, hud)
{
ent endon( "death" );
while ( isDefined(ent) )
wait 0.05;
hud destroy();
hud = undefined;
ent notify( "kill_entity_headicon_thread" );
}
setClaymoreTeamHeadIcon( team )
{
self endon( "death" );
wait .05;
if ( self.weaponname == "claymore_mp" && !level.allowExtendedClaymoreTrace )
{
self waittill( "missile_stuck" );
self waittill( "claymore_trace_fixed" );
}
else
wait 0.05;
if ( isDefined( self.entityHeadIcon ) )
{
self.entityHeadIconTeam = "none";
self.entityHeadIcon destroy();
self.entityHeadIcon = undefined;
self notify( "kill_entity_headicon_thread" );
}
if ( level.teamBased )
self maps\mp\_entityheadicons::setTeamHeadIcon( team, ( 0, 0, 20 ) );
else if ( isDefined( self.owner ) )
self maps\mp\_entityheadicons::setPlayerHeadIcon( self.owner, (0,0,20) );
thread deleteTeamHeadIconOnUndefined(self, self.entityHeadIcon);
}
@ -1367,7 +1592,6 @@ watchClaymores()
self endon( "spawned_player" );
self endon( "disconnect" );
self.claymorearray = [];
while ( 1 )
{
self waittill( "grenade_fire", claymore, weapname );
@ -1389,7 +1613,10 @@ watchClaymores()
claymore thread claymoreDetonation();
//claymore thread claymoreDetectionTrigger_wait( self.pers[ "team" ] );
claymore thread setClaymoreTeamHeadIcon( self.pers[ "team" ] );
claymore thread c4WatchPickup();
claymore thread claymoreWatchTrace();
if ( level.deleteNadeOnTeamChange )
claymore thread deleteOnOwnerTeamChange( self );
/#
if ( getdvarint( "scr_claymoredebug" ) )
{
@ -1400,6 +1627,96 @@ watchClaymores()
}
}
claymoreWatchTrace()
{
if( level.allowExtendedClaymoreTrace )
return;
self endon( "death" );
// need to see if this is being placed far away from the player and not let it do that
// this will fix a legacy bug where you can stand on a ledge and plant a claymore down on the ground far below you
self Hide();
self waittill( "missile_stuck" );
wait 0.05;//wait for threads
distanceZ = 40;
if( distanceZ * distanceZ < DistanceSquared( self.origin, self.owner.origin ) )
{
secTrace = bulletTrace( self.owner.origin, self.owner.origin - (0, 0, distanceZ), false, self );
if( secTrace["fraction"] == 1 )
{
self.owner SetWeaponAmmoStock( self.weaponname, self.owner GetWeaponAmmoStock( self.weaponname ) + 1 );
self delete();
return;
}
self.origin = secTrace["position"];
}
self Show();
self notify( "claymore_trace_fixed" );
}
_notUsableForJoiningPlayers( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );
// as players join they need to be set to not be able to use this
while( true )
{
level waittill( "player_spawned", player );
if( IsDefined( player ) && player != owner )
{
self disablePlayerUse( player );
}
}
}
c4WatchPickup()
{
if( !level.allowPickUpEquipment )
return;
self endon( "death" );
self waittill( "missile_stuck" );
if( !level.allowExtendedClaymoreTrace && self.weaponname == "claymore_mp" )
self waittill( "claymore_trace_fixed" );
trigger = spawn( "script_origin", self.origin );
self thread deleteOnDeath( trigger );
trigger setCursorHint( "HINT_NOICON" );
if ( self.weaponname == "c4_mp" )
trigger setHintString( &"MP_PICKUP_C4" );
else if (self.weaponname == "claymore_mp" )
trigger setHintString( &"MP_PICKUP_CLAYMORE" );
trigger setSelfUsable( self.owner );
trigger thread _notUsableForJoiningPlayers( self );
for ( ;; )
{
trigger waittillmatch( "trigger", self.owner );
usePressTime = getTime();
while( self.owner UseButtonPressed() && (getTime() - usePressTime) < 500 )
wait .05;
if( self.owner UseButtonPressed() )
{
self.owner playLocalSound( "scavenger_pack_pickup" );
self.owner SetWeaponAmmoStock( self.weaponname, self.owner GetWeaponAmmoStock( self.weaponname ) + 1 );
self delete();
}
}
}
/#
claymoreDebug()
{
@ -1450,6 +1767,9 @@ claymoreDetonation()
self waittill( "missile_stuck" );
if( !level.allowExtendedClaymoreTrace )
self waittill( "claymore_trace_fixed" );
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - level.claymoreDetonateRadius ), 0, level.claymoreDetonateRadius, level.claymoreDetonateRadius * 2 );
self thread deleteOnDeath( damagearea );
@ -1467,6 +1787,9 @@ claymoreDetonation()
if ( lengthsquared( player getVelocity() ) < 10 )
continue;
if ( abs( player.origin[2] - self.origin[2] ) > 128 )
continue;
if ( !player shouldAffectClaymore( self ) )
continue;
@ -1658,7 +1981,7 @@ c4Damage()
while ( 1 )
{
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags );
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags, weapon );
if ( !isPlayer( attacker ) )
continue;
@ -1666,8 +1989,22 @@ c4Damage()
if ( !friendlyFireCheck( self.owner, attacker ) )
continue;
if ( damage < 5 )// ignore concussion grenades
continue;
if( isDefined( weapon ) )
{
switch( weapon )
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
case "smoke_grenade_mp":
continue;
}
}
else
{
if( damage < 5 )
continue;
}
break;
}
@ -1692,6 +2029,14 @@ c4Damage()
self.wasDamaged = true;
if( isPlayer( attacker ) )
{
if( isDefined( level.extraDamageFeedback ) && level.extraDamageFeedback )
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "c4" );
if( isDefined( level.allowPrintDamage ) && level.allowPrintDamage && attacker.printDamage )
attacker iPrintLnBold( damage );
}
if ( level.teamBased )
{
// "destroyed_explosive" notify, for challenges
@ -2071,10 +2416,10 @@ damageEnt( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, damagepos, da
else
{
// destructable walls and such can only be damaged in certain ways.
if ( self.isADestructable && ( sWeapon == "artillery_mp" || sWeapon == "claymore_mp" ) || sWeapon == "stealth_bomb_mp" )
if ( self.isADestructable && ( sWeapon == "artillery_mp" || sWeapon == "claymore_mp" || sWeapon == "stealth_bomb_mp" ) )
return;
self.entity notify( "damage", iDamage, eAttacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "mod_explosive", "", "" );
self.entity notify( "damage", iDamage, eAttacker, ( 0, 0, 0 ), ( 0, 0, 0 ), "MOD_EXPLOSIVE", "", "", "", undefined, sWeapon );
}
}
@ -2107,6 +2452,12 @@ onWeaponDamage( eInflictor, sWeapon, meansOfDeath, damage, eAttacker )
{
case "concussion_grenade_mp":
// should match weapon settings in gdt
if ( !isDefined( eInflictor ) )//check to ensure inflictor wasnt destroyed.
return;
if( meansOfDeath == "MOD_IMPACT" ) // do not cause stun effect if it was direct hit
return;
radius = 512;
scale = 1 - ( distance( self.origin, eInflictor.origin ) / radius );
@ -2115,10 +2466,18 @@ onWeaponDamage( eInflictor, sWeapon, meansOfDeath, damage, eAttacker )
time = 2 + ( 4 * scale );
if ( isDefined( self.stunScaler ) )
time = time * self.stunScaler;
wait( 0.05 );
eAttacker notify( "stun_hit" );
self notify( "concussed", eAttacker );
if( eAttacker != self )
eAttacker maps\mp\gametypes\_missions::processChallenge( "ch_alittleconcussed" );
self shellShock( "concussion_grenade_mp", time );
self.concussionEndTime = getTime() + ( time * 1000 );
if( IsDefined( eInflictor.owner ) && eInflictor.owner == eAttacker && isDefined( level.extraDamageFeedback ) && level.extraDamageFeedback )
eAttacker thread maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "stun" );
break;
case "weapon_cobra_mk19_mp":
@ -2649,7 +3008,6 @@ buildWeaponData( filterPerks )
monitorSemtex()
{
self endon( "disconnect" );
self endon( "death" );
for( ;; )
{

View File

@ -1,3 +1,21 @@
/*
_emp modded
Author: INeedGames
Date: 09/22/2020
Adds a friendly fire check when destroying killstreaks and a duration dvar.
> gets emp'd
> hears on an electric radio: WE'VE BEEN EMP'D ELECTRONICS ARE DOWN!
DVARS:
- scr_emp_duration <int>
60 - (default) amount of seconds for an emp to last
- scr_emp_doesFriendlyFire <bool>
true - (default) whether or not if an emp destroies all killstreaks reguardless of friendly fire
Thanks: H3X1C, Emosewaj
*/
#include maps\mp\_utility;
#include common_scripts\utility;
@ -17,8 +35,13 @@ init()
level.killstreakFuncs["emp"] = ::EMP_Use;
level thread onPlayerConnect();
setDvarIfUninitialized( "scr_emp_duration", 60 );
setDvarIfUninitialized( "scr_emp_doesFriendlyFire", true );
level.empduration = getDvarInt( "scr_emp_duration" );
level.empDoesFriendlyFire = getDvarInt( "scr_emp_doesFriendlyFire" );
level thread onPlayerConnect();
}
@ -58,9 +81,9 @@ EMP_Use( lifeId, delay )
otherTeam = level.otherTeam[myTeam];
if ( level.teamBased )
self thread EMP_JamTeam( otherTeam, 60.0, delay );
self thread EMP_JamTeam( otherTeam, level.empduration, delay );
else
self thread EMP_JamPlayers( self, 60.0, delay );
self thread EMP_JamPlayers( self, level.empduration, delay );
self maps\mp\_matchdata::logKillstreakEvent( "emp", self.origin );
self notify( "used_emp" );
@ -69,7 +92,7 @@ EMP_Use( lifeId, delay )
}
EMP_JamTeam( teamName, duration, delay )
EMP_JamTeam( teamName, duration, delay, silent )
{
level endon ( "game_ended" );
@ -77,7 +100,8 @@ EMP_JamTeam( teamName, duration, delay )
//wait ( delay );
thread teamPlayerCardSplash( "used_emp", self );
if (!isDefined(silent))
thread teamPlayerCardSplash( "used_emp", self );
level notify ( "EMP_JamTeam" + teamName );
level endon ( "EMP_JamTeam" + teamName );
@ -93,21 +117,24 @@ EMP_JamTeam( teamName, duration, delay )
player RadarJamOff();
}
visionSetNaked( "coup_sunblind", 0.1 );
thread empEffects();
if (!isDefined(silent))
{
visionSetNaked( "coup_sunblind", 0.1 );
thread empEffects();
wait ( 0.1 );
wait ( 0.1 );
// resetting the vision set to the same thing won't normally have an effect.
// however, if the client receives the previous visionset change in the same packet as this one,
// this will force them to lerp from the bright one to the normal one.
visionSetNaked( "coup_sunblind", 0 );
visionSetNaked( getDvar( "mapname" ), 3.0 );
// resetting the vision set to the same thing won't normally have an effect.
// however, if the client receives the previous visionset change in the same packet as this one,
// this will force them to lerp from the bright one to the normal one.
visionSetNaked( "coup_sunblind", 0 );
visionSetNaked( getDvar( "mapname" ), 3.0 );
}
level.teamEMPed[teamName] = true;
level notify ( "emp_update" );
level destroyActiveVehicles( self );
level destroyActiveVehicles( self, !level.empEffectsAll );
maps\mp\gametypes\_hostmigration::waitLongDurationWithHostMigrationPause( duration );
@ -125,7 +152,7 @@ EMP_JamTeam( teamName, duration, delay )
level notify ( "emp_update" );
}
EMP_JamPlayers( owner, duration, delay )
EMP_JamPlayers( owner, duration, delay, silent )
{
level notify ( "EMP_JamPlayers" );
level endon ( "EMP_JamPlayers" );
@ -145,22 +172,25 @@ EMP_JamPlayers( owner, duration, delay )
player RadarJamOff();
}
visionSetNaked( "coup_sunblind", 0.1 );
thread empEffects();
if (!isDefined(silent))
{
visionSetNaked( "coup_sunblind", 0.1 );
thread empEffects();
wait ( 0.1 );
wait ( 0.1 );
// resetting the vision set to the same thing won't normally have an effect.
// however, if the client receives the previous visionset change in the same packet as this one,
// this will force them to lerp from the bright one to the normal one.
visionSetNaked( "coup_sunblind", 0 );
visionSetNaked( getDvar( "mapname" ), 3.0 );
// resetting the vision set to the same thing won't normally have an effect.
// however, if the client receives the previous visionset change in the same packet as this one,
// this will force them to lerp from the bright one to the normal one.
visionSetNaked( "coup_sunblind", 0 );
visionSetNaked( getDvar( "mapname" ), 3.0 );
}
level notify ( "emp_update" );
level.empPlayer = owner;
level.empPlayer thread empPlayerFFADisconnect();
level destroyActiveVehicles( owner );
level destroyActiveVehicles( owner, !level.empDoesFriendlyFire );
level notify ( "emp_update" );
@ -254,38 +284,49 @@ EMP_PlayerTracker()
}
}
destroyActiveVehicles( attacker )
destroyActiveVehicles( attacker, friendlyFireCheck )
{
if (!isDefined(friendlyFireCheck))
friendlyFireCheck = false;
if ( isDefined( attacker ) )
{
foreach ( heli in level.helis )
radiusDamage( heli.origin, 384, 5000, 5000, attacker );
if (!friendlyFireCheck || (level.teamBased && heli.team != attacker.team) || (!level.teamBased && (!isDefined(heli.owner) || heli.owner != attacker)))
radiusDamage( heli.origin, 384, 5000, 5000, attacker );
foreach ( littleBird in level.littleBird )
radiusDamage( littleBird.origin, 384, 5000, 5000, attacker );
if (!friendlyFireCheck || (level.teamBased && littleBird.team != attacker.team) || (!level.teamBased && (!isDefined(littleBird.owner) || littleBird.owner != attacker)))
radiusDamage( littleBird.origin, 384, 5000, 5000, attacker );
foreach ( turret in level.turrets )
radiusDamage( turret.origin, 16, 5000, 5000, attacker );
if (!friendlyFireCheck || (level.teamBased && turret.team != attacker.team) || (!level.teamBased && (!isDefined(turret.owner) || turret.owner != attacker)))
radiusDamage( turret.origin, 16, 5000, 5000, attacker );
foreach ( rocket in level.rockets )
rocket notify ( "death" );
if (!friendlyFireCheck || (level.teamBased && rocket.team != attacker.team) || (!level.teamBased && (!isDefined(rocket.owner) || rocket.owner != attacker)))
rocket notify ( "death" );
if ( level.teamBased )
{
foreach ( uav in level.uavModels["allies"] )
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
if (!friendlyFireCheck || uav.team != attacker.team)
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
foreach ( uav in level.uavModels["axis"] )
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
if (!friendlyFireCheck || uav.team != attacker.team)
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
}
else
{
foreach ( uav in level.uavModels )
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
if (!friendlyFireCheck || !isDefined(uav.owner) || uav.owner != attacker)
radiusDamage( uav.origin, 384, 5000, 5000, attacker );
}
if ( isDefined( level.ac130player ) )
radiusDamage( level.ac130.planeModel.origin+(0,0,10), 1000, 5000, 5000, attacker );
if (!friendlyFireCheck || (level.teamBased && level.ac130player.team != attacker.team) || (!level.teamBased && level.ac130player != attacker))
radiusDamage( level.ac130.planeModel.origin+(0,0,10), 1000, 5000, 5000, attacker );
}
else
{

View File

@ -1,3 +1,29 @@
/*
_killstreaks modded
Author: INeedGames
Date: 09/22/2020
Adds killstreak rollover and killstreak HUD.origin
DVARS:
- scr_killstreak_rollover <int>
0 - (default) killstreaks do not rollover, only get one set of killstreaks
1 - killstreaks rollover, earn killstreaks over again without dying
2 - killstreaks rollover only with hardline pro
- scr_maxKillstreakRollover <int>
10 - (default) allow to rollover killstreaks <int> times. (remember you are limited to 10 rollovers as defined in _class.gsc)
- scr_killstreak_mod <int>
0 - (default) offsets all killstreaks reward costs by <int> amount
- scr_killstreakHud <int>
0 - (default) no HUD
1 - use Puffiamo's killstreak HUD
2 - use NoFate's MW3 killstreak HUD
Thanks: H3X1C, Emosewaj, NoFate, Puffiamo
*/
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;
@ -21,8 +47,6 @@ init()
level.killstreakSetupFuncs = [];
level.killstreakWeapons = [];
level.killStreakMod = 0;
thread maps\mp\killstreaks\_ac130::init();
thread maps\mp\killstreaks\_remotemissile::init();
thread maps\mp\killstreaks\_uav::init();
@ -36,6 +60,16 @@ init()
level.killstreakRoundDelay = getIntProperty( "scr_game_killstreakdelay", 8 );
setDvarIfUninitialized( "scr_killstreak_rollover", false );
setDvarIfUninitialized( "scr_maxKillstreakRollover", 10 );
setDvarIfUninitialized( "scr_killstreakHud", false );
setDvarIfUninitialized( "scr_killstreak_mod", 0 );
level.killstreaksRollOver = getDvarInt("scr_killstreak_rollover");
level.maxKillstreakRollover = getDvarInt("scr_maxKillstreakRollover");
level.killstreakHud = getDvarInt("scr_killstreakHud");
level.killStreakMod = getDvarInt( "scr_killstreak_mod" );
level thread onPlayerConnect();
}
@ -124,6 +158,11 @@ onPlayerSpawned()
self thread killstreakUseWaiter();
self thread waitForChangeTeam();
if (level.killstreakHud == 1)
self thread initKillstreakHud( 145 );
else if (level.killstreakHud == 2)
self thread initMW3KillstreakHud();
self giveOwnedKillstreakItem( true );
}
}
@ -460,16 +499,22 @@ checkKillstreakReward( streakCount )
if ( isSubStr( streakName, "-rollover" ) )
{
continue;
/*
if ( game["defcon"] > 2 )
{
self.pers["lastEarnedStreak"] = streakName;
if (!level.killstreaksRollover || (level.killstreaksRollover == 2 && !self _hasPerk("specialty_rollover")))
continue;
}
else
{
curRollover = int(strtok(strtok(streakName, "-")[1], "rollover")[0]);
if (curRollover > level.maxKillstreakRollover)
continue;
useStreakName = strTok( streakName, "-" )[0];
*/
if ( isDefined( game["defcon"] ) && game["defcon"] > 2 )
{
self.pers["lastEarnedStreak"] = streakName;
continue;
}
useStreakName = strTok( streakName, "-" )[0];
}
}
else
{
@ -711,4 +756,204 @@ clearRideIntro( delay )
self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
}
destroyOnEvents(elem)
{
self waittill_either("disconnect", "spawned_player");
elem destroy();
}
initKillstreakHud(inity)
{
self endon( "death" );
self endon( "disconnect" );
streakVals = GetArrayKeys(self.killStreaks);
hasHardline = self _hasPerk("specialty_hardline");
self.killStreakHudElems = [];
// the killstreak counter
index = self.killStreakHudElems.size;
self.killStreakHudElems[index] = self createFontString( "objective", 2 );
self.killStreakHudElems[index].foreground = false;
self.killStreakHudElems[index].hideWhenInMenu = true;
self.killStreakHudElems[index].fontScale = 0.60;
self.killStreakHudElems[index].font = "hudbig";
self.killStreakHudElems[index].alpha = 1;
self.killStreakHudElems[index].glow = 1;
self.killStreakHudElems[index].glowColor = ( 0, 0, 1 );
self.killStreakHudElems[index].glowAlpha = 1;
self.killStreakHudElems[index].color = ( 1.0, 1.0, 1.0 );
self thread destroyOnEvents(self.killStreakHudElems[index]);
highestStreak = -1;
for (i = 0; i < streakVals.size; i++)
{
streakVal = streakVals[i];
streakName = self.killStreaks[streakVal];
if (isSubStr(streakName, "-rollover"))
continue;
streakShader = maps\mp\killstreaks\_killstreaks::getKillstreakIcon( streakName );
streakCost = maps\mp\killstreaks\_killstreaks::getStreakCost( streakName );
if (hasHardline)
streakCost--;
// each killstreak icon
index = self.killStreakHudElems.size;
self.killStreakHudElems[index] = self createFontString( "objective", 2 );
self.killStreakHudElems[index].foreground = false;
self.killStreakHudElems[index].hideWhenInMenu = true;
self.killStreakHudElems[index].fontScale = 0.60;
self.killStreakHudElems[index].font = "hudbig";
self.killStreakHudElems[index].alpha = 1;
self.killStreakHudElems[index].glow = 1;
self.killStreakHudElems[index].glowColor = ( 0, 0, 1 );
self.killStreakHudElems[index].glowAlpha = 1;
self.killStreakHudElems[index].color = ( 1.0, 1.0, 1.0 );
self.killStreakHudElems[index] setPoint( "RIGHT", "RIGHT", 0, inity - 25 * i );
self.killStreakHudElems[index] setShader( streakShader, 20, 20 );
self.killStreakHudElems[index].ks_cost = streakCost;
self thread destroyOnEvents(self.killStreakHudElems[index]);
if (streakCost > highestStreak)
highestStreak = streakCost;
}
for(first=true;;)
{
if (first)
first = false;
else
self waittill( "killed_enemy" );
curStreak = self.pers["cur_kill_streak"];
timesRolledOver = int(curStreak / highestStreak);
if (level.killstreaksRollover == 1 || (level.killstreaksRollover == 2 && self _hasPerk("specialty_rollover")))
curStreak %= highestStreak;
if (timesRolledOver > level.maxKillstreakRollover)
curStreak = highestStreak;
isUnderAStreak = false;
for (i = self.killStreakHudElems.size - 1; i >= 1; i--)
{
streakElem = self.killStreakHudElems[i];
if (curStreak < streakElem.ks_cost)
{
isUnderAStreak = true;
self.killStreakHudElems[0] setPoint( "RIGHT", "RIGHT", -25, inity - 25 * (i - 1) );
self.killStreakHudElems[0] setText( streakElem.ks_cost - curStreak );
}
}
if (!isUnderAStreak && self.killStreakHudElems.size)
{
self.killStreakHudElems[0] setPoint( "RIGHT", "RIGHT", -25, inity - 25 * (self.killStreakHudElems.size - 1 - 1) );
self.killStreakHudElems[0] setText( "Done" );
}
}
}
initMW3KillstreakHud()
{
self endon( "death" );
self endon( "disconnect" );
streakVals = GetArrayKeys(self.killStreaks);
hasHardline = self _hasPerk("specialty_hardline");
self.killStreakHudElems = [];
self.killStreakShellsElems = [];
highestStreak = -1;
for (i = 0; i < streakVals.size; i++)
{
streakVal = streakVals[i];
streakName = self.killStreaks[streakVal];
if (isSubStr(streakName, "-rollover"))
continue;
streakShader = maps\mp\killstreaks\_killstreaks::getKillstreakIcon( streakName );
streakCost = maps\mp\killstreaks\_killstreaks::getStreakCost( streakName );
if (hasHardline)
streakCost--;
if (streakCost > highestStreak)
highestStreak = streakCost;
// the shader
ksIcon = createIcon( streakShader, 20, 20 );
ksIcon setPoint( "BOTTOM RIGHT", "BOTTOM RIGHT", -32, -90 + -25 * i );
ksIcon.alpha = 0.4;
ksIcon.hideWhenInMenu = true;
ksIcon.foreground = true;
ksIcon.ks_cost = streakCost;
self thread destroyOnEvents(ksIcon);
self.killStreakHudElems[self.killStreakHudElems.size] = ksIcon;
}
// the shells
if (highestStreak > 0)
{
h = -53;
for(i = 0; i < highestStreak; i++)
{
ksShell = NewClientHudElem( self );
ksShell.x = 40;
ksShell.y = h;
ksShell.alignX = "right";
ksShell.alignY = "bottom";
ksShell.horzAlign = "right";
ksShell.vertAlign = "bottom";
ksShell setshader("white", 10, 2);
ksShell.alpha = 0.3;
ksShell.hideWhenInMenu = true;
ksShell.foreground = false;
self thread destroyOnEvents(ksShell);
self.killStreakShellsElems[i] = ksShell;
h -= 4;
}
}
for(first=true;;)
{
if (first)
first = false;
else
self waittill( "killed_enemy" );
curStreak = self.pers["cur_kill_streak"];
timesRolledOver = int(curStreak / highestStreak);
if (level.killstreaksRollover == 1 || (level.killstreaksRollover == 2 && self _hasPerk("specialty_rollover")))
curStreak %= highestStreak;
if (timesRolledOver > level.maxKillstreakRollover)
curStreak = highestStreak;
// update the shells
for (i = 0; i < self.killStreakShellsElems.size; i++)
{
elem = self.killStreakShellsElems[i];
if (curStreak > i)
elem.alpha = 0.85;
else
elem.alpha = 0.3;
}
// update the ks icons
for (i = 0; i < self.killStreakHudElems.size; i++)
{
elem = self.killStreakHudElems[i];
if (curStreak >= elem.ks_cost)
elem.alpha = 0.9;
else
elem.alpha = 0.4;
}
}
}

View File

@ -1,3 +1,10 @@
/*
_perkfunctions modded
Author: INeedGames
Date: 09/22/2020
Readds optional painkiller and one man army refills noobtubes.
*/
/*******************************************************************
// _perkfunctions.gsc
//
@ -121,8 +128,11 @@ setCombatHigh()
level endon( "end_game" );
self.damageBlockedTotal = 0;
self.moveSpeedScaler = 1.25;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
if (level.combathighIsJuiced)
{
self.moveSpeedScaler = 1.25;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}
//self visionSetNakedForPlayer( "end_game", 1 );
if ( level.splitscreen )
@ -149,7 +159,11 @@ setCombatHigh()
self.combatHighTimer = createTimer( "hudsmall", 1.0 );
self.combatHighTimer setPoint( "CENTER", "CENTER", 0, yOffset );
self.combatHighTimer setTimer( 7.0 );
if (level.combathighIsJuiced)
self.combatHighTimer setTimer( 7.0 );
else
self.combatHighTimer setTimer( 10.0 );
self.combatHighTimer.color = (.8,.8,0);
self.combatHighTimer.archived = false;
self.combatHighTimer.foreground = true;
@ -170,7 +184,10 @@ setCombatHigh()
self thread unsetCombatHighOnDeath();
wait( 5 );
if (level.combathighIsJuiced)
wait( 5 );
else
wait( 8 );
self.combatHighIcon fadeOverTime( 2.0 );
self.combatHighIcon.alpha = 0.0;
@ -184,14 +201,17 @@ setCombatHigh()
wait( 2 );
self.damageBlockedTotal = undefined;
self.moveSpeedScaler = 1;
if (self _hasperk( "specialty_lightweight" ))
if (level.combathighIsJuiced)
{
self.moveSpeedScaler = 1.07;
}
self.moveSpeedScaler = 1;
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
if (self _hasperk( "specialty_lightweight" ))
{
self.moveSpeedScaler = 1.07;
}
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
}
self _unsetPerk( "specialty_combathigh" );
}
@ -203,11 +223,14 @@ unsetCombatHighOnDeath()
self waittill ( "death" );
self.moveSpeedScaler = 1;
if (self _hasperk( "specialty_lightweight" ))
if (level.combathighIsJuiced)
{
self.moveSpeedScaler = 1.07;
self.moveSpeedScaler = 1;
if (self _hasperk( "specialty_lightweight" ))
{
self.moveSpeedScaler = 1.07;
}
}
self thread _unsetPerk( "specialty_combathigh" );
@ -220,11 +243,14 @@ unsetCombatHigh()
self.combatHighIcon destroy();
self.combatHighTimer destroy();
self.moveSpeedScaler = 1;
if (self _hasperk( "specialty_lightweight" ))
if (level.combathighIsJuiced)
{
self.moveSpeedScaler = 1.07;
self.moveSpeedScaler = 1;
if (self _hasperk( "specialty_lightweight" ))
{
self.moveSpeedScaler = 1.07;
}
}
}
@ -366,9 +392,12 @@ setLightWeight()
{
self.moveSpeedScaler = 1.07;
if (self _hasperk( "specialty_combathigh" ))
if (level.combathighIsJuiced)
{
self.moveSpeedScaler = 1.4;
if (self _hasperk( "specialty_combathigh" ))
{
self.moveSpeedScaler = 1.4;
}
}
self maps\mp\gametypes\_weapons::updateMoveSpeedScale( "primary" );
@ -693,6 +722,9 @@ giveOneManArmyClass( className )
self notify ( "changed_kit" );
level notify ( "changed_kit" );
if (level.onemanarmyRefillsTubes)
return;
weaponNameSize = self getCurrentWeapon().size;
if( getSubStr( self getCurrentWeapon(), weaponNameSize - 6, weaponNameSize ) == "_gl_mp" )

View File

@ -1,3 +1,19 @@
/*
_perks modded
Author: INeedGames
Date: 09/22/2020
Readds optional painkiller and one man army refills noobtubes.
DVARS:
- combathighIsJuiced <bool>
false - painkiller is in the game
true - (default) replaces painkiller with juiced from mw3
- onemanarmyRefillsTubes <bool>
false - (default) One Man Army does not refill the gl attachment
true - it does
*/
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
@ -178,6 +194,12 @@ init()
level.perkSetFuncs["specialty_tacticalinsertion"] = ::setTacticalInsertion;
level.perkUnsetFuncs["specialty_tacticalinsertion"] = ::unsetTacticalInsertion;
setDvarIfUninitialized( "combathighIsJuiced", true );
level.combathighIsJuiced = getDvarInt( "combathighIsJuiced" );
setDvarIfUninitialized( "onemanarmyRefillsTubes", false );
level.onemanarmyRefillsTubes = getDvarInt( "onemanarmyRefillsTubes" );
initPerkDvars();
level thread onPlayerConnect();
@ -320,10 +342,10 @@ cac_modified_damage( victim, attacker, damage, meansofdeath, weapon, impactPoint
}
}
if ( ( victim.xpScaler == 2 && isDefined( attacker ) ) && ( isPlayer( attacker ) || attacker.classname == "scrip_vehicle" ) )
damageAdd += 200;
//if ( ( victim.xpScaler == 2 && isDefined( attacker ) ) && ( isPlayer( attacker ) || attacker.classname == "scrip_vehicle" ) )
// damageAdd += 200;
/*if ( victim _hasperk( "specialty_combathigh" ) )
if ( victim _hasperk( "specialty_combathigh" ) && !level.combathighIsJuiced )
{
if ( IsDefined( self.damageBlockedTotal ) && (!level.teamBased || (isDefined( attacker ) && isDefined( attacker.team ) && victim.team != attacker.team)) )
{
@ -351,7 +373,7 @@ cac_modified_damage( victim, attacker, damage, meansofdeath, weapon, impactPoint
break;
}
}
}*/
}
return int( damage + damageAdd );
}