Перейти к содержимому
View in the app

A better way to browse. Learn more.

Zloplay community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Killstreaks in Server Disabled

Опубликовано:

On my server, for some reason the AC-130 and Chopper Gunner (11th killstreaks) killstreaks are disabled and un-obtainable. Not so sure about any other killstreaks above that, but I know for sure that these two aren't obtainable on my server. I was just wondering how this could be change.

 

This has probably been answered before and I know I've seen it somewhere on the original AlterIW forums, but I just can't remember which line of code to edit and in which file.

 

Thanks in advance!

Featured Replies

Опубликовано:
  • Автор

I think I remember it being in rank.gsc in the original fix on the original AlterIW, but I can't remember where that file was kept and I'm also not sure what line of code to edit. But for all I know, it could be in an entirely different file :/

 

Anyone else know?

Опубликовано:

Use this m2demo\maps\mp\killstreaks\_killstreaks.gsc:

#include maps\mp\_utility;
#include maps\mp\gametypes\_hud_util;
#include common_scripts\utility;

KILLSTREAK_STRING_TABLE = "mp/killstreakTable.csv";

init()
{
// &&1 Kill Streak!
precacheString( &"MP_KILLSTREAK_N" );
precacheString( &"MP_NUKE_ALREADY_INBOUND" );
precacheString( &"MP_UNAVILABLE_IN_LASTSTAND" );
precacheString( &"MP_UNAVAILABLE_WHEN_EMP" );
precacheString( &"MP_UNAVAILABLE_USING_TURRET" );
precacheString( &"MP_UNAVAILABLE_WHEN_INCAP" );
precacheString( &"MP_HELI_IN_QUEUE" );

initKillstreakData();

level.killstreakFuncs = [];
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();
thread maps\mp\killstreaks\_airstrike::init();
thread maps\mp\killstreaks\_airdrop::init();
thread maps\mp\killstreaks\_helicopter::init();
thread maps\mp\killstreaks\_autosentry::init();
thread maps\mp\killstreaks\_tank::init();
thread maps\mp\killstreaks\_emp::init();
thread maps\mp\killstreaks\_nuke::init();

level.killstreakRoundDelay = getIntProperty( "scr_game_killstreakdelay", 8 );

level thread onPlayerConnect();
}


initKillstreakData()
{
for ( i = 1; true; i++ )
{
	retVal = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 1 );
	if ( !isDefined( retVal ) || retVal == "" )
		break;

	streakRef = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 1 );
	assert( streakRef != "" );

	streakUseHint = tableLookupIString( KILLSTREAK_STRING_TABLE, 0, i, 6 );
	assert( streakUseHint != &"" );
	precacheString( streakUseHint );

	streakEarnDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 8 );
	assert( streakEarnDialog != "" );
	game[ "dialog" ][ streakRef ] = streakEarnDialog;

	streakAlliesUseDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 9 );
	assert( streakAlliesUseDialog != "" );
	game[ "dialog" ][ "allies_friendly_" + streakRef + "_inbound" ] = "use_" + streakAlliesUseDialog;
	game[ "dialog" ][ "allies_enemy_" + streakRef + "_inbound" ] = "enemy_" + streakAlliesUseDialog;

	streakAxisUseDialog = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 10 );
	assert( streakAxisUseDialog != "" );
	game[ "dialog" ][ "axis_friendly_" + streakRef + "_inbound" ] = "use_" + streakAxisUseDialog;
	game[ "dialog" ][ "axis_enemy_" + streakRef + "_inbound" ] = "enemy_" + streakAxisUseDialog;

	streakWeapon = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 12 );
	precacheItem( streakWeapon );

	streakPoints = int( tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 13 ) );
	assert( streakPoints != 0 );
	maps\mp\gametypes\_rank::registerScoreInfo( "killstreak_" + streakRef, streakPoints );

	streakShader = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 14 );
	precacheShader( streakShader );

	streakShader = tableLookup( KILLSTREAK_STRING_TABLE, 0, i, 15 );
	if ( streakShader != "" )
		precacheShader( streakShader );
}
}


onPlayerConnect()
{
for ( ;; )
{
	level waittill( "connected", player );

	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;

	if ( isDefined( player.pers["deaths"] ) )
		player.lifeId = player.pers["deaths"];

	player VisionSetMissilecamForPlayer( game["thermal_vision"] );

	player thread onPlayerSpawned();
	player thread onPlayerChangeKit();
}
}


onPlayerSpawned()
{
self endon( "disconnect" );

for ( ;; )
{
	self waittill( "spawned_player" );
	self thread killstreakUseWaiter();
	self thread waitForChangeTeam();

	self giveOwnedKillstreakItem( true );
}
}

onPlayerChangeKit()
{
self endon( "disconnect" );

for ( ;; )
{
	self waittill( "changed_kit" );
	self giveOwnedKillstreakItem();
}
}


waitForChangeTeam()
{
self endon ( "disconnect" );

self notify ( "waitForChangeTeam" );
self endon ( "waitForChangeTeam" );

for ( ;; )
{
	self waittill ( "joined_team" );
	clearKillstreaks();
}
}


isRideKillstreak( streakName )
{
switch( streakName )
{
	case "helicopter_minigun":
	case "helicopter_mk19":
	case "ac130":
	case "predator_missile":
		return true;

	default:
		return false;
}
}

isCarryKillstreak( streakName )
{
switch( streakName )
{
	case "sentry":
	case "sentry_gl":
		return true;

	default:
		return false;
}
}


deadlyKillstreak( streakName )
{
switch ( streakName )
{
	case "predator_missile":
	case "precision_airstrike":
	case "harrier_airstrike":
	//case "helicopter":
	//case "helicopter_flares":
	case "stealth_airstrike":
	//case "helicopter_minigun":
	case "ac130":
		return true;
}

return false;
}


killstreakUsePressed()
{
streakName = self.pers["killstreaks"][0].streakName;
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 ] ) );

if ( !self isOnGround() && ( isRideKillstreak( streakName ) || isCarryKillstreak( streakName ) ) )
	return ( false );

if ( self isUsingRemote() )
	return ( false );

if ( isDefined( self.selectingLocation ) )
	return ( false );

if ( deadlyKillstreak( streakName ) && level.killstreakRoundDelay && getGametypeNumLives() )
{
	if ( level.gracePeriod - level.inGracePeriod < level.killstreakRoundDelay )
	{
		self iPrintLnBold( &"MP_UNAVAILABLE_FOR_N", (level.killstreakRoundDelay - (level.gracePeriod - level.inGracePeriod)) );
		return ( false );
	}
}

if ( (level.teamBased && level.teamEMPed[self.team]) || (!level.teamBased && isDefined( level.empPlayer ) && level.empPlayer != self) )
{
	self iPrintLnBold( &"MP_UNAVAILABLE_WHEN_EMP" );
	return ( false );
}

if ( self IsUsingTurret() && ( isRideKillstreak( streakName ) || isCarryKillstreak( streakName ) ) )
{
	self iPrintLnBold( &"MP_UNAVAILABLE_USING_TURRET" );
	return ( false );
}

if ( isDefined( self.lastStand )  && isRideKillstreak( streakName ) )
{
	self iPrintLnBold( &"MP_UNAVILABLE_IN_LASTSTAND" );
	return ( false );
}

if ( !self isWeaponEnabled() )
	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, kID );	
self giveOwnedKillstreakItem();		

return ( true );
}


//this overwrites killstreak at index 0 and decrements all other killstreaks (FCLS style)
shuffleKillStreaksFILO( streakName, kID )
{
self _setActionSlot( 4, "" );

arraySize = self.pers["killstreaks"].size;

streakIndex = -1;
for ( i = 0; i < arraySize; i++ )
{
	if ( self.pers["killstreaks"][i].streakName != streakName )
		continue;

	if ( isDefined( kID ) && self.pers["killstreaks"][i].kID != kID )
		continue;

	streakIndex = i;
	break;
}
assert( streakIndex >= 0 );

self.pers["killstreaks"][streakIndex] = undefined;

for( i = streakIndex + 1; i < arraySize; i++ )	
{
	if ( i == arraySize - 1 ) 
	{	
		self.pers["killstreaks"][i-1] = self.pers["killstreaks"][i];
		self.pers["killstreaks"][i] = undefined;
	}	
	else
	{
		self.pers["killstreaks"][i-1] = self.pers["killstreaks"][i];
	}	
}
}


usedKillstreak( streakName, awardXp )
{
self playLocalSound( "weap_c4detpack_trigger_plr" );

if ( awardXp )
	self thread [[ level.onXPEvent ]]( "killstreak_" + streakName );

self thread maps\mp\gametypes\_missions::useHardpoint( streakName );

awardref = maps\mp\_awards::getKillstreakAwardRef( streakName );
if ( isDefined( awardref ) )
	self thread incPlayerStat( awardref, 1 );

team = self.team;

if ( level.teamBased )
{
	thread leaderDialog( team + "_friendly_" + streakName + "_inbound", team );

	if ( getKillstreakInformEnemy( streakName ) )
		thread leaderDialog( team + "_enemy_" + streakName + "_inbound", level.otherTeam[ team ] );
}
else
{
	self thread leaderDialogOnPlayer( team + "_friendly_" + streakName + "_inbound" );

	if ( getKillstreakInformEnemy( streakName ) )
	{
		excludeList[0] = self;
		thread leaderDialog( team + "_enemy_" + streakName + "_inbound", undefined, undefined, excludeList );
	}
}
}


clearKillstreaks()
{
foreach ( index, streakStruct in self.pers["killstreaks"] )
	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()
{
self endon( "disconnect" );
self endon( "finish_death" );
level endon( "game_ended" );

self.lastKillStreak = 0;
if ( !isDefined( self.pers["lastEarnedStreak"] ) )
	self.pers["lastEarnedStreak"] = undefined;

self thread finishDeathWaiter();

for ( ;; )
{
	self waittill ( "weapon_change", newWeapon );

	if ( !isAlive( self ) )
		continue;

	if ( !isDefined( self.pers["killstreaks"][0] ) )
		continue;

	if ( newWeapon != getKillstreakWeapon( self.pers["killstreaks"][0].streakName ) )
		continue;

	waittillframeend;

	streakName = self.pers["killstreaks"][0].streakName;
	result = self killstreakUsePressed();

	//no force switching weapon for ridable killstreaks
	if ( !isRideKillstreak( streakName ) || !result )
	{
		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 
	// we have two of that killstreak, it immediately uses the second one
	if ( self getCurrentWeapon() == "none" )
	{
		while ( self getCurrentWeapon() == "none" )
			wait ( 0.05 );

		waittillframeend;
	}
}
}


finishDeathWaiter()
{
self endon ( "disconnect" );
level endon ( "game_ended" );

self waittill ( "death" );
wait ( 0.05 );
self notify ( "finish_death" );
self.pers["lastEarnedStreak"] = undefined;
}


checkKillstreakReward( streakCount )
{
self notify( "got_killstreak", streakCount );

maxVal = 0;
killStreaks = [];
foreach ( streakVal, streakName in self.killStreaks )
{
	killStreaks[streakName] = streakVal;
	if ( streakVal > maxVal )
		maxVal = streakVal;
}

foreach ( streakVal, streakName in self.killStreaks )
{
	actualVal = streakVal + level.killStreakMod;

	if ( actualVal > streakCount )
		break;

	if ( isDefined( self.pers["lastEarnedStreak"] ) && killStreaks[streakName] <= killStreaks[self.pers["lastEarnedStreak"]] )
		continue;

	if ( isSubStr( streakName, "-rollover" ) )
	{
		continue;
		/*
		if ( game["defcon"] > 2 )
		{
			self.pers["lastEarnedStreak"] = streakName;
			continue;
		}

		useStreakName = strTok( streakName, "-" )[0];
		*/
	}
	else
	{
		useStreakName = streakName;
	}

	if ( self tryGiveKillstreak( useStreakName, int(max( actualVal, streakCount )) ) )
	{
		self thread killstreakEarned( useStreakName );
		self.pers["lastEarnedStreak"] = streakName;
	}
}
}


killstreakEarned( streakName )
{
if ( self getPlayerData( "killstreaks", 0 ) == streakName )
{
	self.firstKillstreakEarned = getTime();
}	
else if ( self getPlayerData( "killstreaks", 2 ) == streakName && isDefined( self.firstKillstreakEarned ) )
{
	if ( getTime() - self.firstKillstreakEarned < 20000 )
		self thread maps\mp\gametypes\_missions::genericChallenge( "wargasm" );
}
}


rewardNotify( streakName, streakVal )
{
self endon( "disconnect" );

self maps\mp\gametypes\_hud_message::killstreakSplashNotify( streakName, streakVal );
}


tryGiveKillstreak( streakName, streakVal )
{
level notify ( "gave_killstreak", streakName );

if ( level.gameType == "dom" || level.gameType == "koth" || level.gameType == "dd" || level.gameType == "sab" )
{
	if ( streakName == "ac130" || streakName == "helicopter_minigun" || streakName == "nuke" )
	{

	}
}

if ( !level.gameEnded )
	self thread rewardNotify( streakName, streakVal );

self giveKillstreak( streakName, streakVal, true );
return true;
}


giveKillstreak( streakName, isEarned, awardXp, owner )
{
self endon ( "disconnect" );

weapon = getKillstreakWeapon( streakName );

self giveKillstreakWeapon( weapon );

// shuffle existing killstreaks up a notch
for( i = self.pers["killstreaks"].size; i >= 0; i-- )	
	self.pers["killstreaks"][i + 1] = self.pers["killstreaks"][i]; 	

self.pers["killstreaks"][0] = spawnStruct();
self.pers["killstreaks"][0].streakName = streakName;
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
self.pers["killstreaks"][0].lifeId = self.pers["deaths"];

// probably obsolete unless we bring back the autoshotty	
if ( isdefined( level.killstreakSetupFuncs[ streakName ] ) )
	self [[ level.killstreakSetupFuncs[ streakName ] ]]();

if ( isDefined( isEarned ) && isEarned && isDefined( awardXp ) && awardXp )
	self notify( "received_earned_killstreak" );
}


giveKillstreakWeapon( weapon )
{
weaponList = self getWeaponsListItems();

foreach ( item in weaponList )
{
	if ( !isSubStr( item, "killstreak" ) )
		continue;

	if ( self getCurrentWeapon() == item )
		continue;

	self takeWeapon( item );
}

self _giveWeapon( weapon, 0 );
self _setActionSlot( 4, "weapon", weapon );
}


getStreakCost( streakName )
{
return int( tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 4 ) );
}


getKillstreakHint( streakName )
{
return tableLookupIString( KILLSTREAK_STRING_TABLE, 1, streakName, 6 );
}


getKillstreakInformEnemy( streakName )
{
return int( tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 11 ) );
}


getKillstreakSound( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 7 );
}


getKillstreakDialog( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 8 );
}


getKillstreakWeapon( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 12 );
}

getKillstreakIcon( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 14 );
}

getKillstreakCrateIcon( streakName )
{
return tableLookup( KILLSTREAK_STRING_TABLE, 1, streakName, 15 );
}


giveOwnedKillstreakItem( skipDialog )
{
if ( !isDefined( self.pers["killstreaks"][0] ) )
	return;

streakName = self.pers["killstreaks"][0].streakName;

weapon = getKillstreakWeapon( streakName );
self giveKillstreakWeapon( weapon );

if ( !isDefined( skipDialog ) && !level.inGracePeriod )
	self leaderDialogOnPlayer( streakName, "killstreak_earned" );
}


initRideKillstreak()
{
self _disableUsability();
result = self initRideKillstreak_internal();

if ( isDefined( self ) )
	self _enableUsability();

return result;
}

initRideKillstreak_internal()
{
laptopWait = self waittill_any_timeout( 1.0, "disconnect", "death", "weapon_switch_started" );

if ( laptopWait == "weapon_switch_started" )
	return ( "fail" );

if ( !isAlive( self ) )
	return "fail";

if ( laptopWait == "disconnect" || laptopWait == "death" )
{
	if ( laptopWait == "disconnect" )
		return ( "disconnect" );

	if ( self.team == "spectator" )
		return "fail";

	return ( "success" );		
}

if ( self isEMPed() || self isNuked() )
{
	return ( "fail" );
}

self VisionSetNakedForPlayer( "black_bw", 0.75 );
blackOutWait = self waittill_any_timeout( 0.80, "disconnect", "death" );

if ( blackOutWait != "disconnect" ) 
{
	self thread clearRideIntro( 1.0 );

	if ( self.team == "spectator" )
		return "fail";
}

if ( !isAlive( self ) )
	return "fail";

if ( self isEMPed() || self isNuked() )
	return "fail";

if ( blackOutWait == "disconnect" )
	return ( "disconnect" );
else
	return ( "success" );		
}


clearRideIntro( delay )
{
self endon( "disconnect" );

if ( isDefined( delay ) )
	wait( delay );

//self freezeControlsWrapper( false );

if ( !isDefined( level.nukeVisionInProgress ) )
	self VisionSetNakedForPlayer( getDvar( "mapname" ), 0 );
}


  • 2 weeks later...
Опубликовано:
What about server.cfg?

 

"set scr_game_hardpoints "0" // killstreaks, 1 = on 0 = off"

All of the killstreaks would be disabled then. ._.

 

edit:

Why would he want 200 kills w/o death for chopper? He asked how to re-enable the 11/25 killstreaks, not tweak/change them. -.-

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу

Важная информация

Используя этот сайт, вы соглашаетесь Условия использования.

Account

Navigation

Поиск

Поиск

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.