mirror of
https://github.com/reaaLx/nx1-gsc-dump.git
synced 2025-04-23 17:45:47 +00:00
204 lines
6.7 KiB
Plaintext
204 lines
6.7 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
|
|
|
|
// Each Killstreak has its own initialization function. This Script has two main purposes.
|
|
// (1). All global data and assets used by this killstreak should be initialized here.
|
|
// (2). The callback that executes when a player activates this killstreak should be set here.
|
|
// TODO: A call to this script must be added to the script init() in the file c:\trees\nx1\game\share\raw\maps\mp\killstreaks\_killstreaks.gsc,
|
|
// this is were each individual killstreak is initialized.
|
|
init()
|
|
{
|
|
//This is a good place to precache assets, load up fx, or setup any global data that might be needed, NOTE: Everything defined in killstreakTable.csv
|
|
//will be precached automatically ( see initKillstreakData() in _killstreaks.gsc if interested ) so you do not need to worry about initializing the
|
|
//strings/weapons/materials/sounds defined there. If, for example, you were going to manually script up a plane flyiing over when this killstreak was
|
|
//activated you would want to precache that model here.
|
|
|
|
|
|
//generally any global data that is needed would be stored in the level object, here is an example
|
|
//level._effect[ "emp_flash" ] = loadfx( "explosions/emp_flash_mp" );
|
|
|
|
|
|
//This is were the killstreak activation callback is set
|
|
//TODO: Replace "killstreak_template" with the name of the new killstreak as defined in killstreakTable.csv
|
|
//Most killstreaks use a try fuction ( which i recommend, even if it is not necessary for this particualr killstreak it is nice to have a consistent model )
|
|
//the try script will make sure it is ok to fire the killstreak before the actual killstreak script is called.
|
|
|
|
precacheString ( &"MP_AIR_SPACE_TOO_CROWDED" );
|
|
precacheString ( &"MP_HOLD_USERELOAD_TO_THROWAWAY" );
|
|
|
|
level._killstreakFuncs["weapdrop"] = ::try_use_weapdrop;
|
|
|
|
//Use this script to update/initialize players as they connect to the game
|
|
level thread onPlayerConnect();
|
|
}
|
|
|
|
|
|
// This script is running on the global level object, it monitors players connecting to the game.
|
|
// Its main purpose is to apply the onPlayerSpawned script to each player as they connect to the game.
|
|
onPlayerConnect()
|
|
{
|
|
for(;;)
|
|
{
|
|
level waittill("connected", player);
|
|
player thread onPlayerSpawned();
|
|
}
|
|
}
|
|
|
|
|
|
// This script is running on each player in the game, it recieves a notification each time the player it is running on spawns in the game
|
|
// Its main purpose is to initialize any per player data, as well as update the player subject to any global killstreak data when that player spawns.
|
|
onPlayerSpawned()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
for(;;)
|
|
{
|
|
self waittill( "spawned_player" );
|
|
println( "player spwaned" );
|
|
|
|
// init/manage any per player killstreak data here
|
|
}
|
|
}
|
|
|
|
//Many of the killstreaks have a try block that will test level conditions to make sure it is ok to fire the killstreak now. A good example of this is for the air killstreaks.
|
|
//Only a certain number of vehicles are allowed in the air at any given time, so if the airspace is full and the killstreak cannot be fired this try should return false.
|
|
//If there are any preconditions that must be met in order to fire this killstreak they should be checked in this script.
|
|
//NOTE: If this script returns true the killstreak system will consider this killstreak usage complete and the dpad icon will be removed, if this script returns false nothing will
|
|
//change and the system will just continue to wait for the the player to activate the killstreak by pressing right on the dpad.
|
|
try_use_weapdrop()
|
|
{
|
|
is_ok_to_use_killstreak = true;
|
|
|
|
if( is_ok_to_use_killstreak )
|
|
{
|
|
weapdrop_use();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
|
|
// This is the callback that executes when the killstreak is activated by a player pressing on the dpad. This is called from the script killstreakUsePressed()
|
|
// located in the file _killstreaks.gsc
|
|
weapdrop_use()
|
|
{
|
|
assert( isDefined( self ) );
|
|
//println( "Killstreak Template Fired!!" );
|
|
|
|
/*
|
|
// don't allow use if theres 3 or more little birds up in the air already. this is consistent with the care package drop ks.
|
|
if ( level._littleBirds >= 3 )
|
|
{
|
|
self iPrintLnBold( &"MP_AIR_SPACE_TOO_CROWDED" );
|
|
return false;
|
|
}
|
|
*/
|
|
|
|
weapdrop_weapon = undefined;
|
|
|
|
// randomInt is confusing. 0 based and the number passed is how many ints it can return. 4 = 0-3.
|
|
switch( randomInt( 4 ) )
|
|
{
|
|
case 0:
|
|
weapdrop_weapon = "augks_mp";
|
|
break;
|
|
case 1:
|
|
weapdrop_weapon = "xm25ks_mp";
|
|
break;
|
|
case 2:
|
|
weapdrop_weapon = "aa12_akimbo_mp";
|
|
break;
|
|
case 3:
|
|
weapdrop_weapon = "javelinks_mp";
|
|
break;
|
|
}
|
|
|
|
// spawn a new script to give and switch to the weapdrop weapon
|
|
// the drop ks's need to return true asap otherwise you're still holding the trigger in your hand
|
|
self thread weapdrop_equip( weapdrop_weapon );
|
|
return true;
|
|
}
|
|
|
|
weapdrop_equip( weapdrop_weapon )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
|
|
assert( isDefined( weapdrop_weapon ) );
|
|
|
|
// hack. sometimes getCurrentWeapon will return none but getWeaponsListPrimaries wont...hmm...
|
|
/*
|
|
initial_weapon = self getCurrentWeapon();
|
|
if ( initial_weapon == "none" )
|
|
{
|
|
weapList = self GetWeaponsListPrimaries();
|
|
initial_weapon = weapList[0];
|
|
}
|
|
//printLn( initial_weapon );
|
|
*/
|
|
|
|
|
|
// make sure the script that spawned this one has returned true before I switch your weapon. this is probably unnecessary.
|
|
wait .1;
|
|
|
|
// akimbo weapons must be given a specific way.
|
|
if ( weapdrop_weapon == "aa12_akimbo_mp" )
|
|
{
|
|
self giveWeapon( weapdrop_weapon, 0 , true );
|
|
}
|
|
else
|
|
{
|
|
self giveWeapon( weapdrop_weapon );
|
|
}
|
|
|
|
self switchToWeapon( weapdrop_weapon );
|
|
|
|
for( ;; )
|
|
{
|
|
// when you run out of ammo, switch back to your first primary and take the weapdrop weapon
|
|
if ( self hasWeapon ( weapdrop_weapon ) )
|
|
{
|
|
if ( self getAmmoCount( weapdrop_weapon ) == 0 )
|
|
{
|
|
//self switchToWeapon( initial_weapon );
|
|
self takeWeapon ( weapdrop_weapon );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
break;
|
|
}
|
|
wait 0.05;
|
|
}
|
|
//printLn( "NO LONGER HAS KS WEAPON" );
|
|
}
|
|
|
|
weapdrop_hud()
|
|
{
|
|
hudelem = newClientHudElem( self );
|
|
// put something on screen that tells you, you can throw away this weapon
|
|
hudelem.x = -30;
|
|
hudelem.y = -20;
|
|
hudelem.alignX = "left";
|
|
hudelem.alignY = "bottom";
|
|
hudelem.horzAlign = "center";
|
|
hudelem.vertAlign = "bottom";
|
|
hudelem.sort = 1;// force to draw after the background
|
|
hudelem.foreground = true;
|
|
hudelem SetText( &"MP_HOLD_USERELOAD_TO_THROWAWAY" );
|
|
hudelem.alpha = 0;
|
|
hudelem FadeOverTime( 0.2 );
|
|
hudelem.alpha = 1;
|
|
hudelem.hidewheninmenu = true;
|
|
hudelem.fontScale = 1.25;
|
|
hudelem.font = "fwmed";
|
|
//hudelem.color = ( getdvarfloat( "color_neutral_r" ), getdvarfloat( "color_neutral_g" ), getdvarfloat( "color_neutral_b" ) );
|
|
//hudelem SetPulseFX( 30, duration, 700 );// something, decay start, decay duration
|
|
|
|
self waittill_any( "death", "disconnect", "weapdrop_done" );
|
|
|
|
hudelem Destroy();
|
|
} |