This commit is contained in:
6arelyFuture 2021-09-28 21:22:31 +01:00
commit fb8a55d0f0
4 changed files with 570 additions and 0 deletions

235
_inf_alive_rewards.gsc Normal file
View File

@ -0,0 +1,235 @@
/*
_inf_alive_rewards
Author: FutureRave
Date: 28/09/2021
*/
#include common_scripts\utility;
#include maps\mp\_utility;
init()
{
replaceFunc( maps\mp\killstreaks\_juggernaut::giveJuggernaut, ::giveJuggernautStub );
maps\mp\killstreaks\_airdrop::addCrateType( "nuke_drop", "nuke", 1, maps\mp\killstreaks\_airdrop::nukeCrateThink );
maps\mp\killstreaks\_airdrop::addCrateType( "airdrop", "ammo", 17, ::ammoCrateThink );
maps\mp\killstreaks\_airdrop::addCrateType( "airdrop_mega", "ammo", 12, ::ammoCrateThink );
thread onConnect();
}
onConnect()
{
for ( ;; )
{
level waittill( "connected", player );
player thread monitorForRewards();
}
}
monitorForRewards()
{
self endon( "disconnect" );
level endon( "game_ended" );
for ( ;; )
{
self waittill( "killed_enemy" );
if ( self.sessionteam == "axis" ) return; // It's infected. Once your team is axis you are done for the game
count = self.kills;
switch( count )
{
case 1:
self scripts\_inf_utils::playLeaderDialog( "kill_confirmed" );
level thread dropAmmo( self );
break;
case 5:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "deployable_vest" );
break;
case 9:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "predator_missile" );
break;
case 18:
level thread maps\mp\killstreaks\_airdrop::doMegaC130FlyBy( self, self.origin, randomFloat( 360 ), "airdrop_grnd", -360 );
break;
case 25:
self maps\mp\killstreaks\_juggernaut::giveJuggernaut( "juggernaut" );
break;
case 45:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "ac130" );
break;
case 85:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "helicopter_flares" );
break;
case 100:
self maps\mp\killstreaks\_killstreaks::giveKillstreak( "osprey_gunner" );
break;
case 120:
level thread maps\mp\killstreaks\_airdrop::dropNuke( self.origin, self, "nuke_drop" );
break;
}
}
}
dropAmmo( owner )
{
planeHalfDistance = 24000;
planeFlySpeed = 2000;
yaw = RandomInt( 360 );
yaw = RandomInt( 360 );
direction = ( 0, yaw, 0 );
dropSite = owner.origin;
lbheight = level maps\mp\killstreaks\_airdrop::getFlyHeightOffset( dropSite );
startPos = dropSite + ( AnglesToForward( direction ) * ( -1 * planeHalfDistance ) );
startPos = startPos * ( 1, 1, 0 ) + ( 0, 0, lbHeight );
endPos = dropSite + ( AnglesToForward( direction ) * planeHalfDistance );
endPos = endPos * ( 1, 1, 0 ) + ( 0, 0, lbHeight );
d = length( startPos - endPos );
flyTime = ( d / planeFlySpeed );
c130 = maps\mp\killstreaks\_airdrop::c130Setup( owner, startPos, endPos );
c130.veh_speed = planeFlySpeed;
c130.dropType = "airdrop";
c130 playloopsound( "veh_ac130_dist_loop" );
c130.angles = direction;
forward = anglesToForward( direction );
c130 moveTo( endPos, flyTime, 0, 0 );
boomPlayed = false;
minDist = distance2D( c130.origin, dropSite );
for ( ;; )
{
dist = distance2D( c130.origin, dropSite );
if ( dist < minDist )
minDist = dist;
else if ( dist > minDist )
break;
if ( dist < 256 )
{
break;
}
else if ( dist < 768 )
{
earthquake( 0.15, 1.5, dropSite, 1500 );
if ( !boomPlayed )
{
c130 playSound( "veh_ac130_sonic_boom" );
boomPlayed = true;
}
}
wait( .05 );
}
c130 thread maps\mp\killstreaks\_airdrop::dropTheCrate( dropSite, "airdrop", lbHeight, false, "ammo", startPos );
wait( 0.05 );
c130 notify ( "drop_crate" );
wait( 4 );
c130 delete();
}
ammoCrateThink( dropType )
{
self endon ( "death" );
self.usedBy = [];
if ( dropType == "airdrop" || !level.teamBased )
maps\mp\killstreaks\_airdrop::crateSetupForUse( game["strings"]["ammo_hint"], "all", "waypoint_ammo_friendly" );
else
maps\mp\killstreaks\_airdrop::crateSetupForUse( game["strings"]["ammo_hint"], "all", "waypoint_ammo_friendly" );
self thread maps\mp\killstreaks\_airdrop::crateOtherCaptureThink();
self thread maps\mp\killstreaks\_airdrop::crateOwnerCaptureThink();
for ( ;; )
{
self waittill ( "captured", player );
if ( isDefined( self.owner ) && player != self.owner )
{
if ( !level.teamBased || player.team != self.team )
{
if ( dropType == "airdrop" )
player thread maps\mp\killstreaks\_airdrop::hijackNotify( self, "airdrop" );
else
player thread maps\mp\killstreaks\_airdrop::hijackNotify( self, "emergency_airdrop" );
}
}
player maps\mp\killstreaks\_teamammorefill::refillAmmo( true );
self maps\mp\killstreaks\_airdrop::deleteCrate();
}
}
giveJuggernautStub( juggType )
{
self endon( "death" );
self endon( "disconnect" );
wait( .05 );
if ( isDefined( self.hasLightArmor ) && self.hasLightArmor == true )
maps\mp\perks\_perkfunctions::removeLightArmor( self.previousMaxHealth );
switch( juggType )
{
case "juggernaut":
self.isJuggernaut = true;
self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false );
break;
case "juggernaut_recon":
self.isJuggernautRecon = true;
self maps\mp\gametypes\_class::giveLoadout( self.pers["team"], juggType, false, false );
portable_radar = spawn( "script_model", self.origin );
portable_radar.team = self.team;
portable_radar makePortableRadar( self );
self.personalRadar = portable_radar;
self thread maps\mp\killstreaks\_juggernaut::radarMover( portable_radar );
break;
}
if ( !getDvarInt( "camera_thirdPerson" ) )
{
self.juggernautOverlay = newClientHudElem( self );
self.juggernautOverlay.x = 0;
self.juggernautOverlay.y = 0;
self.juggernautOverlay.alignX = "left";
self.juggernautOverlay.alignY = "top";
self.juggernautOverlay.horzAlign = "fullscreen";
self.juggernautOverlay.vertAlign = "fullscreen";
self.juggernautOverlay SetShader( level.juggSettings[ juggType ].overlay, 640, 480 );
self.juggernautOverlay.sort = -10;
self.juggernautOverlay.archived = true;
self.juggernautOverlay.hidein3rdperson = true;
}
self thread maps\mp\killstreaks\_juggernaut::juggernautSounds();
self setPerk( "specialty_radarjuggernaut", true, false );
self thread teamPlayerCardSplash( level.juggSettings[ juggType ].splashUsedName, self );
self PlaySoundToTeam( game[ "voice" ][ self.team ] + "use_juggernaut", self.team, self );
self PlaySoundToTeam( game[ "voice" ][ level.otherTeam[ self.team ] ] + "enemy_juggernaut", level.otherTeam[ self.team ] );
self thread maps\mp\killstreaks\_killstreaks::updateKillstreaks( true );
self thread maps\mp\killstreaks\_juggernaut::juggRemover();
if ( isDefined( self.carryFlag ) )
{
wait( 0.05 );
self attach( self.carryFlag, "J_spine4", true );
}
level notify( "juggernaut_equipped", self );
self maps\mp\_matchdata::logKillstreakEvent( "juggernaut", self.origin );
}

86
_inf_anti_camp.gsc Normal file
View File

@ -0,0 +1,86 @@
/*
_inf_anti_camp
Author: FutureRave
Date: 27/09/2021
*/
#include common_scripts\utility;
#include maps\mp\_utility;
ANTI_CAMP_RADIUS = 350;
init()
{
thread onConnect();
}
onConnect()
{
for ( ;; )
{
level waittill( "connected", player );
player thread monitorKillStreak();
player thread connected();
}
}
connected()
{
self endon( "disconnect" );
level endon( "game_ended" );
for ( ;; )
{
self waittill( "spawned_player" );
if ( self.sessionteam != "allies" )
self.anti_camp = false;
}
}
startAntiCamp()
{
assert( self.sessionteam == "allies" );
level endon( "game_ended" );
self endon ( "disconnect" );
oldPosition = self.origin;
self iPrintLnBold( "^1Run ^:For Your Life^7!" );
self scripts\_inf_utils::playLeaderDialog( "pushforward" );
for ( ;; )
{
wait( 7.5 );
if ( !self.anti_camp ) return;
if ( self isUsingRemote() ) continue;
newPosition = self.origin;
if ( distance2D( oldPosition, newPosition ) < ANTI_CAMP_RADIUS )
{
dmg = 80;
if ( self.health > 100 ) dmg = 300; // Jugg ?
radiusDamage( newPosition, 36, dmg, dmg * 0.75, undefined, "MOD_TRIGGER_HURT" );
self scripts\_inf_utils::playLeaderDialog( "new_positions" );
}
oldPosition = self.origin;
}
}
monitorKillStreak()
{
level endon( "game_ended" );
self endon ( "disconnect" );
for ( ;; )
{
self waittill( "killed_enemy" );
count = self getPlayerData( "killstreaksState", "count" );
if ( count > 24 && self.sessionteam != "axis" )
{
self.anti_camp = true;
self thread startAntiCamp();
return;
}
}
}

99
_inf_model.gsc Normal file
View File

@ -0,0 +1,99 @@
/*
_inf_model
Author: FutureRave
Date: 27/09/2021
Notes: Fuck the models for now
*/
#include common_scripts\utility;
#include maps\mp\_utility;
init()
{
thread onConnect();
preCacheShader( "specialty_carepackage_crate" );
preCacheShader( "iw5_cardicon_medkit" );
preCacheShader( "iw5_cardicon_juggernaut_a" );
preCacheItem( "at4_mp" );
precacheItem( "uav_strike_marker_mp" );
}
onConnect()
{
for ( ;; )
{
level waittill( "connected", player );
player thread connected();
}
}
connected()
{
self endon( "disconnect" );
level endon( "game_ended" );
for ( ;; )
{
self waittill( "spawned_player" );
waittillframeend;
if ( self.sessionteam == "allies" )
{
self giveAllPerks();
}
else
{
/*
team = self.team;
[[game[ self.team + "_model" ][ "GHILLIE" ]]]();
self.isSniper = true;
*/
self giveAllPerks();
self SetOffhandPrimaryClass( "other" );
self giveWeapon( "bouncingbetty_mp" );
}
}
}
giveAllPerks()
{
perks = [];
perks[ perks.size ] = "specialty_longersprint";
perks[ perks.size ] = "specialty_fastreload";
perks[ perks.size ] = "specialty_scavenger";
perks[ perks.size ] = "specialty_blindeye";
perks[ perks.size ] = "specialty_paint";
perks[ perks.size ] = "specialty_hardline";
perks[ perks.size ] = "specialty_coldblooded";
perks[ perks.size ] = "specialty_quickdraw";
perks[ perks.size ] = "_specialty_blastshield";
perks[ perks.size ] = "specialty_detectexplosive";
perks[ perks.size ] = "specialty_autospot";
perks[ perks.size ] = "specialty_bulletaccuracy";
perks[ perks.size ] = "specialty_quieter";
perks[ perks.size ] = "specialty_stalker";
perks[ perks.size ] = "specialty_bulletpenetration";
perks[ perks.size ] = "specialty_marksman";
perks[ perks.size ] = "specialty_sharp_focus";
perks[ perks.size ] = "specialty_holdbreathwhileads";
perks[ perks.size ] = "specialty_longerrange";
perks[ perks.size ] = "specialty_fastermelee";
perks[ perks.size ] = "specialty_reducedsway";
perks[ perks.size ] = "specialty_lightweight";
foreach( perkName in perks )
{
if( !self _hasPerk( perkName ) )
{
self givePerk( perkName, false );
if( maps\mp\gametypes\_class::isPerkUpgraded( perkName ) )
{
perkUpgrade = tablelookup( "mp/perktable.csv", 1, perkName, 8 );
self givePerk( perkUpgrade, false );
}
}
}
}

150
_inf_utils.gsc Normal file
View File

@ -0,0 +1,150 @@
/*
_inf_utils
Author: FutureRave
Date: 26/09/2021
*/
#include common_scripts\utility;
#include maps\mp\_utility;
init()
{
replaceFunc( maps\mp\perks\_perkfunctions::GlowStickDamageListener, ::GlowStickDamageListenerStub );
replaceFunc( maps\mp\perks\_perkfunctions::GlowStickEnemyUseListener, ::GlowStickEnemyUseListenerStub );
create_dvar( "sv_fallDamage", 0 );
setDvar( "scr_killcam_time", 7 );
setDvar( "scr_killcam_posttime", 2 );
thread gameEnded();
thread gameStart();
if ( getDvarInt( "sv_fallDamage" ) != 0 ) return;
level.prevCallbackPlayerDamage = level.callbackPlayerDamage;
level.callbackPlayerDamage = ::codeCallbackPlayerDamage;
}
gameEnded()
{
gameFlagWait( "prematch_done" );
for ( ;; )
{
level waittill( "game_ended", team );
foreach ( player in level.players )
{
player setClientDvar ( "cg_thirdperson", true );
player setClientDvar ( "cg_thirdPersonRange", 170 );
}
wait( 1.5 );
foreach ( player in level.players )
{
player freezecontrols( false );
}
}
}
// Might need to set cg_thirdperson to false when a player spawns
gameStart()
{
gameFlagWait( "prematch_done" );
foreach ( player in level.players )
{
player setClientDvar ( "cg_thirdperson", false );
}
}
codeCallbackPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset )
{
self endon( "disconnect" );
if ( sMeansOfDeath == "MOD_FALLING" || self isUsingRemote() )
{
eAttacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "" );
return;
}
[[level.prevCallbackPlayerDamage]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset );
}
playLeaderDialog( sound )
{
assert( self.sessionteam != "spectator" );
suffix = "1mc_" + sound;
if ( self.sessionteam == "allies" )
{
self playLocalSound( getTeamVoicePrefix( game["allies"] ) + suffix );
}
else
{
self playLocalSound( getTeamVoicePrefix( game["axis"] ) + suffix );
}
}
getTeamVoicePrefix( team )
{
return tableLookup( "mp/factionTable.csv", 0, team, 7 );
}
GlowStickDamageListenerStub( owner )
{
self endon ( "death" );
self setCanDamage( false );
self.health = 999999;
self.maxHealth = 100;
self.damageTaken = 0;
for ( ;; )
{
self waittill( "damage", damage, attacker, direction_vec, point, type, modelName, tagName, partName, iDFlags, weapon );
if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, attacker ) )
continue;
if ( !isdefined( self ) )
return;
// Can only be damaged by knife
if ( type == "MOD_MELEE" )
{
self.damageTaken += self.maxHealth;
self.wasDamaged = true;
}
if( isPlayer( attacker ) )
{
attacker maps\mp\gametypes\_damagefeedback::updateDamageFeedback( "tactical_insertion" );
}
if ( self.damageTaken >= self.maxHealth )
{
if ( isDefined( owner ) && attacker != owner )
{
attacker notify ( "destroyed_insertion", owner );
attacker notify( "destroyed_explosive" ); // count towards SitRep Pro challenge
owner thread leaderDialogOnPlayer( "ti_destroyed" );
}
attacker thread maps\mp\perks\_perkfunctions::deleteTI( self );
}
}
}
GlowStickEnemyUseListenerStub( owner )
{
self endon ( "death" );
level endon ( "game_ended" );
owner endon ( "disconnect" );
self.enemyTrigger setCursorHint( "HINT_NOICON" );
self.enemyTrigger setHintString( &"MP_DESTROY_TI" );
self.enemyTrigger makeEnemyUsable( owner );
for ( ;; )
{
self.enemyTrigger waittill ( "trigger", player );
player iPrintLnBold( "Nice try" );
}
}