init
This commit is contained in:
155
maps/mp/killstreaks/_highvaluetarget.gsc
Normal file
155
maps/mp/killstreaks/_highvaluetarget.gsc
Normal file
@ -0,0 +1,155 @@
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\gametypes\_hud_util;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\agents\_agent_utility;
|
||||
#include maps\mp\gametypes\_hostmigration;
|
||||
|
||||
//============================================
|
||||
// constants
|
||||
//============================================
|
||||
CONST_XP_INCREASE = 0.5;
|
||||
CONST_MIN_MULTIPLIER = 1;
|
||||
CONST_MAX_MULTIPLIER = 4; // shouldn't hit this, but just to be safe.
|
||||
|
||||
CONST_MAX_ACTIVE_HVT_PER_GAME = 4;
|
||||
CONST_MAX_ACTIVE_HVT_PER_PLAYER = 2;
|
||||
|
||||
CONST_HVT_TIMEOUT = 10;
|
||||
|
||||
init()
|
||||
{
|
||||
level.killstreakFuncs["high_value_target"] = ::tryUseHighValueTarget;
|
||||
|
||||
level.hvts_active[ "axis" ] = 0;
|
||||
level.hvts_active[ "allies" ] = 0;
|
||||
|
||||
game["dialog"]["hvt_gone"] = "hvt_gone";
|
||||
}
|
||||
|
||||
tryUseHighValueTarget( lifeId, streakName )
|
||||
{
|
||||
return useHighValueTarget( self, lifeId );
|
||||
}
|
||||
|
||||
reached_max_xp_multiplier() // self == player
|
||||
{
|
||||
if( level.teamBased )
|
||||
return ( level.hvts_active[ self.team ] >= CONST_MAX_ACTIVE_HVT_PER_GAME );
|
||||
else if( IsDefined( self.hvts_active ) )
|
||||
return ( self.hvts_active >= CONST_MAX_ACTIVE_HVT_PER_PLAYER );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
useHighValueTarget( player, lifeId )
|
||||
{
|
||||
if( !isReallyAlive( player ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if( player.team == "spectator" )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// limit the number of active hvts allowed per game
|
||||
if( reached_max_xp_multiplier()
|
||||
// limit the number of active hvts allowed per player
|
||||
|| ( IsDefined( player.hvts_active ) && player.hvts_active >= CONST_MAX_ACTIVE_HVT_PER_PLAYER )
|
||||
)
|
||||
{
|
||||
self iPrintLnBold( &"KILLSTREAKS_HVT_MAX" );
|
||||
return false;
|
||||
}
|
||||
|
||||
player thread setHighValueTarget();
|
||||
|
||||
level thread teamPlayerCardSplash( "used_hvt", player, player.team );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
setHighValueTarget() // self == player
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
team = self.team;
|
||||
|
||||
self increaseXPBoost();
|
||||
self thread watchHVTOwner( team );
|
||||
|
||||
// wait for timeout
|
||||
waitLongDurationWithHostMigrationPause( CONST_HVT_TIMEOUT );
|
||||
|
||||
if( level.teamBased )
|
||||
leaderDialog( "hvt_gone", team );
|
||||
else
|
||||
self leaderDialogOnPlayer( "hvt_gone" );
|
||||
|
||||
if( level.teamBased )
|
||||
level decreaseXPBoost( team );
|
||||
else
|
||||
self decreaseXPBoost();
|
||||
}
|
||||
|
||||
increaseXPBoost() // self == player
|
||||
{
|
||||
hvts_active = 0;
|
||||
if( level.teamBased )
|
||||
{
|
||||
level.hvts_active[ self.team ]++;
|
||||
hvts_active = level.hvts_active[ self.team ];
|
||||
array_index = self.team;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !IsDefined( self.hvts_active ) )
|
||||
self.hvts_active = 1;
|
||||
else
|
||||
self.hvts_active++;
|
||||
|
||||
hvts_active = self.hvts_active;
|
||||
array_index = self GetEntityNumber();
|
||||
}
|
||||
|
||||
bonus = CONST_MIN_MULTIPLIER + hvts_active * CONST_XP_INCREASE;
|
||||
level.teamXPScale[ array_index ] = clamp( bonus, CONST_MIN_MULTIPLIER, CONST_MAX_MULTIPLIER );
|
||||
}
|
||||
|
||||
decreaseXPBoost( team ) // self == level or player
|
||||
{
|
||||
hvts_active = 0;
|
||||
if( level.teamBased )
|
||||
{
|
||||
if( level.hvts_active[ team ] > 0 )
|
||||
level.hvts_active[ team ]--;
|
||||
hvts_active = level.hvts_active[ team ];
|
||||
array_index = team;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( self.hvts_active > 0 )
|
||||
self.hvts_active--;
|
||||
|
||||
hvts_active = self.hvts_active;
|
||||
array_index = self GetEntityNumber();
|
||||
}
|
||||
|
||||
bonus = CONST_MIN_MULTIPLIER + hvts_active * CONST_XP_INCREASE;
|
||||
level.teamXPScale[ array_index ] = clamp( bonus, CONST_MIN_MULTIPLIER, CONST_MAX_MULTIPLIER );
|
||||
}
|
||||
|
||||
watchHVTOwner( team ) // self == player
|
||||
{
|
||||
level endon( "game_ended" );
|
||||
|
||||
result = self waittill_any_return( "disconnect", "joined_team", "joined_spectators" );
|
||||
|
||||
if( level.teamBased )
|
||||
level decreaseXPBoost( team );
|
||||
else if( IsDefined( self ) && result != "disconnect" )
|
||||
self decreaseXPBoost();
|
||||
}
|
Reference in New Issue
Block a user