2140 lines
67 KiB
Plaintext
2140 lines
67 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level._effect["airdrop_crate_destroy"] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_airdrop_crate_dust_kickup" );
|
|
level._effect["airdrop_dust_kickup"] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_airdrop_crate_dust_kickup" );
|
|
precachempanim( "juggernaut_carepackage" );
|
|
setairdropcratecollision( "airdrop_crate" );
|
|
setairdropcratecollision( "care_package" );
|
|
level.killstreakfuncs["airdrop_assault"] = ::tryuseairdrop;
|
|
level.killstreakfuncs["airdrop_support"] = ::tryuseairdrop;
|
|
level.killstreakfuncs["airdrop_juggernaut"] = ::tryuseairdrop;
|
|
level.killstreakfuncs["airdrop_juggernaut_recon"] = ::tryuseairdrop;
|
|
level.killstreakfuncs["airdrop_juggernaut_maniac"] = ::tryuseairdrop;
|
|
level.numdropcrates = 0;
|
|
level.littlebirds = [];
|
|
level.cratetypes = [];
|
|
level.cratemaxval = [];
|
|
addcratetype( "airdrop_assault", "uplink", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_UPLINK_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "ims", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_IMS_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "guard_dog", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_GUARD_DOG_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "drone_hive", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DRONE_HIVE_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "sentry", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_SENTRY_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "helicopter", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELICOPTER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "ball_drone_backup", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_BALL_DRONE_BACKUP_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "vanguard", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_VANGUARD_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "airdrop_juggernaut_maniac", 3, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_MANIAC_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_assault", "airdrop_juggernaut", 2, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_assault", "heli_pilot", 1, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELI_PILOT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_assault", "odin_assault", 1, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_ODIN_ASSAULT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "uplink_support", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_UPLINK_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "deployable_vest", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DEPLOYABLE_VEST_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "deployable_ammo", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DEPLOYABLE_AMMO_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "ball_drone_radar", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_BALL_DRONE_RADAR_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "aa_launcher", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_AA_LAUNCHER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "jammer", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_JAMMER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "air_superiority", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_AIR_SUPERIORITY_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "recon_agent", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_RECON_AGENT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "heli_sniper", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELI_SNIPER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "uav_3dping", 3, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_UAV_3DPING_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_support", "airdrop_juggernaut_recon", 1, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_RECON_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_support", "odin_support", 1, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_ODIN_SUPPORT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_juggernaut", "airdrop_juggernaut", 100, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_juggernaut_recon", "airdrop_juggernaut_recon", 100, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_RECON_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_juggernaut_maniac", "airdrop_juggernaut_maniac", 100, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_MANIAC_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_grnd", "uplink", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_UPLINK_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "ims", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_IMS_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "guard_dog", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_GUARD_DOG_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "drone_hive", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DRONE_HIVE_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "sentry", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_SENTRY_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "helicopter", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELICOPTER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "ball_drone_backup", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_BALL_DRONE_BACKUP_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "vanguard", 4, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_VANGUARD_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "airdrop_juggernaut_maniac", 3, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_MANIAC_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_grnd", "airdrop_juggernaut", 2, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
addcratetype( "airdrop_grnd", "heli_pilot", 1, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELI_PILOT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "deployable_vest", 25, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DEPLOYABLE_VEST_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "deployable_ammo", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_DEPLOYABLE_AMMO_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "ball_drone_radar", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_BALL_DRONE_RADAR_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "aa_launcher", 20, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_AA_LAUNCHER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "jammer", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_JAMMER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "air_superiority", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_AIR_SUPERIORITY_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "recon_agent", 15, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_RECON_AGENT_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "heli_sniper", 10, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_HELI_SNIPER_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "uav_3dping", 5, ::killstreakcratethink, "carepackage_friendly_iw6", "carepackage_enemy_iw6", &"KILLSTREAKS_HINTS_UAV_3DPING_PICKUP", "carepackage_dummy_iw6" );
|
|
addcratetype( "airdrop_grnd", "airdrop_juggernaut_recon", 5, ::juggernautcratethink, "mp_juggernaut_carepackage", "mp_juggernaut_carepackage_red", &"KILLSTREAKS_HINTS_JUGGERNAUT_RECON_PICKUP", "mp_juggernaut_carepackage_dummy" );
|
|
|
|
if ( isdefined( level.customcratefunc ) )
|
|
[[ level.customcratefunc ]]( "carepackage_friendly_iw6", "carepackage_enemy_iw6" );
|
|
|
|
if ( isdefined( level.mapcustomcratefunc ) )
|
|
[[ level.mapcustomcratefunc ]]();
|
|
|
|
generatemaxweightedcratevalue();
|
|
var_0 = spawnstruct();
|
|
var_0.xppopup = "destroyed_airdrop";
|
|
var_0.vodestroyed = undefined;
|
|
var_0.callout = "callout_destroyed_airdrop";
|
|
var_0.samdamagescale = 0.09;
|
|
level.heliconfigs["airdrop"] = var_0;
|
|
maps\mp\gametypes\_rank::registerscoreinfo( "little_bird", 200 );
|
|
}
|
|
|
|
generatemaxweightedcratevalue()
|
|
{
|
|
foreach ( var_6, var_1 in level.cratetypes )
|
|
{
|
|
level.cratemaxval[var_6] = 0;
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
var_4 = var_3.type;
|
|
|
|
if ( !level.cratetypes[var_6][var_4].raw_weight )
|
|
{
|
|
level.cratetypes[var_6][var_4].weight = level.cratetypes[var_6][var_4].raw_weight;
|
|
continue;
|
|
}
|
|
|
|
level.cratemaxval[var_6] = level.cratemaxval[var_6] + level.cratetypes[var_6][var_4].raw_weight;
|
|
level.cratetypes[var_6][var_4].weight = level.cratemaxval[var_6];
|
|
}
|
|
}
|
|
}
|
|
|
|
changecrateweight( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( level.cratetypes[var_0] ) || !isdefined( level.cratetypes[var_0][var_1] ) )
|
|
return;
|
|
|
|
level.cratetypes[var_0][var_1].raw_weight = var_2;
|
|
generatemaxweightedcratevalue();
|
|
}
|
|
|
|
setairdropcratecollision( var_0 )
|
|
{
|
|
var_1 = getentarray( var_0, "targetname" );
|
|
|
|
if ( !isdefined( var_1 ) || var_1.size == 0 )
|
|
return;
|
|
|
|
level.airdropcratecollision = getent( var_1[0].target, "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
var_3 deletecrate();
|
|
}
|
|
|
|
addcratetype( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
|
{
|
|
if ( !isdefined( var_4 ) )
|
|
var_4 = "carepackage_friendly_iw6";
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = "carepackage_enemy_iw6";
|
|
|
|
if ( !isdefined( var_8 ) )
|
|
var_8 = "carepackage_dummy_iw6";
|
|
|
|
level.cratetypes[var_0][var_1] = spawnstruct();
|
|
level.cratetypes[var_0][var_1].droptype = var_0;
|
|
level.cratetypes[var_0][var_1].type = var_1;
|
|
level.cratetypes[var_0][var_1].raw_weight = var_2;
|
|
level.cratetypes[var_0][var_1].weight = var_2;
|
|
level.cratetypes[var_0][var_1].func = var_3;
|
|
level.cratetypes[var_0][var_1].model_name_friendly = var_4;
|
|
level.cratetypes[var_0][var_1].model_name_enemy = var_5;
|
|
level.cratetypes[var_0][var_1].model_name_dummy = var_8;
|
|
|
|
if ( isdefined( var_6 ) )
|
|
game["strings"][var_1 + "_hint"] = var_6;
|
|
|
|
if ( isdefined( var_7 ) )
|
|
game["strings"][var_1 + "_optional_hint"] = var_7;
|
|
}
|
|
|
|
getrandomcratetype( var_0 )
|
|
{
|
|
var_1 = randomint( level.cratemaxval[var_0] );
|
|
var_2 = undefined;
|
|
|
|
foreach ( var_4 in level.cratetypes[var_0] )
|
|
{
|
|
var_5 = var_4.type;
|
|
|
|
if ( !level.cratetypes[var_0][var_5].weight )
|
|
continue;
|
|
|
|
var_2 = var_5;
|
|
|
|
if ( level.cratetypes[var_0][var_5].weight > var_1 )
|
|
break;
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
getcratetypefordroptype( var_0 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "airdrop_sentry_minigun":
|
|
return "sentry";
|
|
case "airdrop_predator_missile":
|
|
return "predator_missile";
|
|
case "airdrop_juggernaut":
|
|
return "airdrop_juggernaut";
|
|
case "airdrop_juggernaut_def":
|
|
return "airdrop_juggernaut_def";
|
|
case "airdrop_juggernaut_gl":
|
|
return "airdrop_juggernaut_gl";
|
|
case "airdrop_juggernaut_recon":
|
|
return "airdrop_juggernaut_recon";
|
|
case "airdrop_juggernaut_maniac":
|
|
return "airdrop_juggernaut_maniac";
|
|
case "airdrop_remote_tank":
|
|
return "remote_tank";
|
|
case "airdrop_lase":
|
|
return "lasedStrike";
|
|
case "airdrop_sotf":
|
|
case "airdrop_grnd_mega":
|
|
case "airdrop_escort":
|
|
case "airdrop_grnd":
|
|
case "airdrop_support":
|
|
case "airdrop_mega":
|
|
case "airdrop_assault":
|
|
default:
|
|
if ( isdefined( level.getrandomcratetypeforgamemode ) )
|
|
return [[ level.getrandomcratetypeforgamemode ]]( var_0 );
|
|
|
|
return getrandomcratetype( var_0 );
|
|
}
|
|
}
|
|
|
|
tryuseairdrop( var_0, var_1 )
|
|
{
|
|
var_2 = var_1;
|
|
var_3 = undefined;
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = "airdrop_assault";
|
|
|
|
var_4 = 1;
|
|
|
|
if ( ( level.littlebirds.size >= 4 || level.fauxvehiclecount >= 4 ) && var_2 != "airdrop_mega" && !issubstr( tolower( var_2 ), "juggernaut" ) )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
|
|
return 0;
|
|
}
|
|
else if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_4 >= maps\mp\_utility::maxvehiclesallowed() )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
|
|
return 0;
|
|
}
|
|
else if ( var_2 == "airdrop_lase" && isdefined( level.lasedstrikecrateactive ) && level.lasedstrikecrateactive )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
|
|
return 0;
|
|
}
|
|
|
|
if ( var_2 != "airdrop_mega" && !issubstr( tolower( var_2 ), "juggernaut" ) )
|
|
thread watchdisconnect();
|
|
|
|
if ( !issubstr( var_2, "juggernaut" ) )
|
|
maps\mp\_utility::incrementfauxvehiclecount();
|
|
|
|
var_3 = beginairdropviamarker( var_0, var_2 );
|
|
|
|
if ( !isdefined( var_3 ) || !var_3 )
|
|
{
|
|
self notify( "markerDetermined" );
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
return 0;
|
|
}
|
|
|
|
if ( var_2 == "airdrop_mega" )
|
|
thread maps\mp\_utility::teamplayercardsplash( "used_airdrop_mega", self );
|
|
|
|
self notify( "markerDetermined" );
|
|
maps\mp\_matchdata::logkillstreakevent( var_2, self.origin );
|
|
return 1;
|
|
}
|
|
|
|
watchdisconnect()
|
|
{
|
|
self endon( "markerDetermined" );
|
|
self waittill( "disconnect" );
|
|
return;
|
|
}
|
|
|
|
beginairdropviamarker( var_0, var_1 )
|
|
{
|
|
self notify( "beginAirdropViaMarker" );
|
|
self endon( "beginAirdropViaMarker" );
|
|
self endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
self.threwairdropmarker = undefined;
|
|
self.threwairdropmarkerindex = undefined;
|
|
thread watchairdropweaponchange( var_0, var_1 );
|
|
thread watchairdropmarkerusage( var_0, var_1 );
|
|
thread watchairdropmarker( var_0, var_1 );
|
|
var_2 = common_scripts\utility::waittill_any_return( "notAirDropWeapon", "markerDetermined" );
|
|
|
|
if ( isdefined( var_2 ) && var_2 == "markerDetermined" )
|
|
return 1;
|
|
else if ( !isdefined( var_2 ) && isdefined( self.threwairdropmarker ) )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
watchairdropweaponchange( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self notify( "watchAirDropWeaponChange" );
|
|
self endon( "watchAirDropWeaponChange" );
|
|
self endon( "disconnect" );
|
|
self endon( "markerDetermined" );
|
|
|
|
while ( maps\mp\_utility::ischangingweapon() )
|
|
wait 0.05;
|
|
|
|
var_2 = self getcurrentweapon();
|
|
|
|
if ( maps\mp\killstreaks\_killstreaks::isairdropmarker( var_2 ) )
|
|
var_3 = var_2;
|
|
else
|
|
var_3 = undefined;
|
|
|
|
while ( maps\mp\killstreaks\_killstreaks::isairdropmarker( var_2 ) )
|
|
{
|
|
self waittill( "weapon_switch_started", var_2 );
|
|
|
|
if ( maps\mp\killstreaks\_killstreaks::isairdropmarker( var_2 ) )
|
|
var_3 = var_2;
|
|
}
|
|
|
|
if ( isdefined( self.threwairdropmarker ) )
|
|
{
|
|
var_4 = maps\mp\_utility::getkillstreakweapon( self.pers["killstreaks"][self.threwairdropmarkerindex].streakname );
|
|
self takeweapon( var_4 );
|
|
self notify( "markerDetermined" );
|
|
}
|
|
else
|
|
self notify( "notAirDropWeapon" );
|
|
}
|
|
|
|
watchairdropmarkerusage( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self notify( "watchAirDropMarkerUsage" );
|
|
self endon( "watchAirDropMarkerUsage" );
|
|
self endon( "disconnect" );
|
|
self endon( "markerDetermined" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "grenade_pullback", var_2 );
|
|
|
|
if ( !maps\mp\killstreaks\_killstreaks::isairdropmarker( var_2 ) )
|
|
continue;
|
|
|
|
common_scripts\utility::_disableusability();
|
|
beginairdropmarkertracking();
|
|
}
|
|
}
|
|
|
|
watchairdropmarker( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self notify( "watchAirDropMarker" );
|
|
self endon( "watchAirDropMarker" );
|
|
self endon( "disconnect" );
|
|
self endon( "markerDetermined" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "grenade_fire", var_2, var_3 );
|
|
|
|
if ( !maps\mp\killstreaks\_killstreaks::isairdropmarker( var_3 ) )
|
|
continue;
|
|
|
|
self.threwairdropmarker = 1;
|
|
self.threwairdropmarkerindex = self.killstreakindexweapon;
|
|
var_2 thread airdropdetonateonstuck();
|
|
var_2.owner = self;
|
|
var_2.weaponname = var_3;
|
|
var_2 thread airdropmarkeractivate( var_1 );
|
|
}
|
|
}
|
|
|
|
beginairdropmarkertracking()
|
|
{
|
|
level endon( "game_ended" );
|
|
self notify( "beginAirDropMarkerTracking" );
|
|
self endon( "beginAirDropMarkerTracking" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
common_scripts\utility::waittill_any( "grenade_fire", "weapon_change" );
|
|
common_scripts\utility::_enableusability();
|
|
}
|
|
|
|
airdropmarkeractivate( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self notify( "airDropMarkerActivate" );
|
|
self endon( "airDropMarkerActivate" );
|
|
self waittill( "explode", var_2 );
|
|
var_3 = self.owner;
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
return;
|
|
|
|
if ( var_3 maps\mp\_utility::iskillstreakdenied() )
|
|
return;
|
|
|
|
if ( issubstr( tolower( var_0 ), "escort_airdrop" ) && isdefined( level.chopper ) )
|
|
return;
|
|
|
|
wait 0.05;
|
|
|
|
if ( issubstr( tolower( var_0 ), "juggernaut" ) )
|
|
level doc130flyby( var_3, var_2, randomfloat( 360 ), var_0 );
|
|
else if ( issubstr( tolower( var_0 ), "escort_airdrop" ) )
|
|
var_3 maps\mp\killstreaks\_escortairdrop::finishsupportescortusage( var_1, var_2, randomfloat( 360 ), "escort_airdrop" );
|
|
else
|
|
level doflyby( var_3, var_2, randomfloat( 360 ), var_0 );
|
|
}
|
|
|
|
initairdropcrate()
|
|
{
|
|
self.inuse = 0;
|
|
self hide();
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
self.collision = getent( self.target, "targetname" );
|
|
self.collision notsolid();
|
|
}
|
|
else
|
|
self.collision = undefined;
|
|
}
|
|
|
|
deleteonownerdeath( var_0 )
|
|
{
|
|
wait 0.25;
|
|
self linkto( var_0, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_0 waittill( "death" );
|
|
self delete();
|
|
}
|
|
|
|
crateteammodelupdater()
|
|
{
|
|
self endon( "death" );
|
|
self hide();
|
|
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( var_1.team != "spectator" )
|
|
self showtoplayer( var_1 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "joined_team" );
|
|
self hide();
|
|
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
if ( var_1.team != "spectator" )
|
|
self showtoplayer( var_1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
cratemodelteamupdater( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self hide();
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2.team == "spectator" )
|
|
{
|
|
if ( var_0 == "allies" )
|
|
self showtoplayer( var_2 );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( var_2.team == var_0 )
|
|
self showtoplayer( var_2 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "joined_team" );
|
|
self hide();
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2.team == "spectator" )
|
|
{
|
|
if ( var_0 == "allies" )
|
|
self showtoplayer( var_2 );
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( var_2.team == var_0 )
|
|
self showtoplayer( var_2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
cratemodelenemyteamsupdater( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self hide();
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2.team != var_0 )
|
|
self showtoplayer( var_2 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "joined_team" );
|
|
self hide();
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2.team != var_0 )
|
|
self showtoplayer( var_2 );
|
|
}
|
|
}
|
|
}
|
|
|
|
cratemodelplayerupdater( var_0, var_1 )
|
|
{
|
|
self endon( "death" );
|
|
self hide();
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
if ( var_1 && isdefined( var_0 ) && var_3 != var_0 )
|
|
continue;
|
|
|
|
if ( !var_1 && isdefined( var_0 ) && var_3 == var_0 )
|
|
continue;
|
|
|
|
self showtoplayer( var_3 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "joined_team" );
|
|
self hide();
|
|
|
|
foreach ( var_3 in level.players )
|
|
{
|
|
if ( var_1 && isdefined( var_0 ) && var_3 != var_0 )
|
|
continue;
|
|
|
|
if ( !var_1 && isdefined( var_0 ) && var_3 == var_0 )
|
|
continue;
|
|
|
|
self showtoplayer( var_3 );
|
|
}
|
|
}
|
|
}
|
|
|
|
crateuseteamupdater( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
setusablebyteam( var_0 );
|
|
level waittill( "joined_team" );
|
|
}
|
|
}
|
|
|
|
crateuseteamupdater_multiteams( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
setusablebyotherteams( var_0 );
|
|
level waittill( "joined_team" );
|
|
}
|
|
}
|
|
|
|
crateusejuggernautupdater()
|
|
{
|
|
if ( !issubstr( self.cratetype, "juggernaut" ) )
|
|
return;
|
|
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "juggernaut_equipped", var_0 );
|
|
self disableplayeruse( var_0 );
|
|
thread crateusepostjuggernautupdater( var_0 );
|
|
}
|
|
}
|
|
|
|
crateusepostjuggernautupdater( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
var_0 endon( "disconnect" );
|
|
var_0 waittill( "death" );
|
|
self enableplayeruse( var_0 );
|
|
}
|
|
|
|
createairdropcrate( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = spawn( "script_model", var_3 );
|
|
var_6.curprogress = 0;
|
|
var_6.usetime = 0;
|
|
var_6.userate = 0;
|
|
var_6.team = self.team;
|
|
var_6.destination = var_4;
|
|
var_6.id = "care_package";
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_6.owner = var_0;
|
|
else
|
|
var_6.owner = undefined;
|
|
|
|
var_6.cratetype = var_2;
|
|
var_6.droptype = var_1;
|
|
var_6.targetname = "care_package";
|
|
var_7 = "carepackage_dummy_iw6";
|
|
|
|
if ( isdefined( level.custom_dummy_crate_model ) )
|
|
var_7 = level.custom_dummy_crate_model;
|
|
|
|
var_6 setmodel( var_7 );
|
|
|
|
if ( var_2 == "airdrop_jackpot" )
|
|
{
|
|
var_6.friendlymodel = spawn( "script_model", var_3 );
|
|
var_6.friendlymodel setmodel( level.cratetypes[var_1][var_2].model_name_friendly );
|
|
var_6.friendlymodel thread deleteonownerdeath( var_6 );
|
|
}
|
|
else
|
|
{
|
|
var_6.friendlymodel = spawn( "script_model", var_3 );
|
|
var_6.friendlymodel setmodel( level.cratetypes[var_1][var_2].model_name_friendly );
|
|
|
|
if ( isdefined( level.highlightairdrop ) && level.highlightairdrop )
|
|
{
|
|
if ( !isdefined( var_5 ) )
|
|
var_5 = 2;
|
|
|
|
var_6.friendlymodel hudoutlineenable( var_5, 0 );
|
|
var_6.outlinecolor = var_5;
|
|
}
|
|
|
|
var_6.enemymodel = spawn( "script_model", var_3 );
|
|
var_6.enemymodel setmodel( level.cratetypes[var_1][var_2].model_name_enemy );
|
|
var_6.friendlymodel setentityowner( var_6 );
|
|
var_6.enemymodel setentityowner( var_6 );
|
|
var_6.friendlymodel thread deleteonownerdeath( var_6 );
|
|
|
|
if ( level.teambased )
|
|
var_6.friendlymodel thread cratemodelteamupdater( var_6.team );
|
|
else
|
|
var_6.friendlymodel thread cratemodelplayerupdater( var_0, 1 );
|
|
|
|
var_6.enemymodel thread deleteonownerdeath( var_6 );
|
|
|
|
if ( level.multiteambased )
|
|
var_6.enemymodel thread cratemodelenemyteamsupdater( var_6.team );
|
|
else if ( level.teambased )
|
|
var_6.enemymodel thread cratemodelteamupdater( level.otherteam[var_6.team] );
|
|
else
|
|
var_6.enemymodel thread cratemodelplayerupdater( var_0, 0 );
|
|
}
|
|
|
|
var_6.inuse = 0;
|
|
var_6 clonebrushmodeltoscriptmodel( level.airdropcratecollision );
|
|
var_6 thread common_scripts\utility::entity_path_disconnect_thread( 1.0 );
|
|
var_6.killcament = spawn( "script_model", var_6.origin + ( 0, 0, 300 ), 0, 1 );
|
|
var_6.killcament setscriptmoverkillcam( "explosive" );
|
|
var_6.killcament linkto( var_6 );
|
|
level.numdropcrates++;
|
|
var_6 thread dropcrateexistence( var_4 );
|
|
level notify( "createAirDropCrate", var_6 );
|
|
return var_6;
|
|
}
|
|
|
|
dropcrateexistence( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self waittill( "death" );
|
|
|
|
if ( isdefined( level.cratekill ) )
|
|
[[ level.cratekill ]]( var_0 );
|
|
|
|
level.numdropcrates--;
|
|
}
|
|
|
|
cratesetupforuse( var_0, var_1 )
|
|
{
|
|
self setcursorhint( "HINT_NOICON" );
|
|
self sethintstring( var_0 );
|
|
self makeusable();
|
|
var_2 = "compass_objpoint_ammo_friendly";
|
|
var_3 = "compass_objpoint_ammo_enemy";
|
|
|
|
if ( isdefined( level.objvisall ) )
|
|
var_3 = "compass_objpoint_ammo_friendly";
|
|
|
|
if ( !isdefined( self.objidfriendly ) )
|
|
self.objidfriendly = createobjective( var_2, self.team, 1 );
|
|
|
|
if ( !isdefined( self.objidenemy ) )
|
|
self.objidenemy = createobjective( var_3, level.otherteam[self.team], 0 );
|
|
|
|
thread crateuseteamupdater();
|
|
thread crateusejuggernautupdater();
|
|
|
|
if ( issubstr( self.cratetype, "juggernaut" ) )
|
|
{
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( var_5 maps\mp\_utility::isjuggernaut() )
|
|
thread crateusepostjuggernautupdater( var_5 );
|
|
}
|
|
}
|
|
|
|
var_7 = undefined;
|
|
|
|
if ( level.teambased )
|
|
var_7 = maps\mp\_entityheadicons::setheadicon( self.team, var_1, ( 0, 0, 24 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
else if ( isdefined( self.owner ) )
|
|
var_7 = maps\mp\_entityheadicons::setheadicon( self.owner, var_1, ( 0, 0, 24 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
|
|
if ( isdefined( var_7 ) )
|
|
var_7.showinkillcam = 0;
|
|
|
|
if ( isdefined( level.iconvisall ) )
|
|
[[ level.iconvisall ]]( self, var_1 );
|
|
else
|
|
{
|
|
foreach ( var_5 in level.players )
|
|
{
|
|
if ( var_5.team == "spectator" )
|
|
var_7 = maps\mp\_entityheadicons::setheadicon( var_5, var_1, ( 0, 0, 24 ), 14, 14, 0, undefined, undefined, undefined, undefined, 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
createobjective( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = maps\mp\gametypes\_gameobjects::getnextobjid();
|
|
objective_add( var_3, "invisible", ( 0, 0, 0 ) );
|
|
|
|
if ( !isdefined( self getlinkedparent() ) )
|
|
objective_position( var_3, self.origin );
|
|
else
|
|
objective_onentity( var_3, self );
|
|
|
|
objective_state( var_3, "active" );
|
|
objective_icon( var_3, var_0 );
|
|
|
|
if ( !level.teambased && isdefined( self.owner ) )
|
|
{
|
|
if ( var_2 )
|
|
objective_playerteam( var_3, self.owner getentitynumber() );
|
|
else
|
|
objective_playerenemyteam( var_3, self.owner getentitynumber() );
|
|
}
|
|
else
|
|
objective_team( var_3, var_1 );
|
|
|
|
if ( isdefined( level.objvisall ) )
|
|
[[ level.objvisall ]]( var_3 );
|
|
|
|
return var_3;
|
|
}
|
|
|
|
setusablebyteam( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( issubstr( self.cratetype, "juggernaut" ) && var_2 maps\mp\_utility::isjuggernaut() )
|
|
{
|
|
self disableplayeruse( var_2 );
|
|
continue;
|
|
}
|
|
|
|
if ( issubstr( self.cratetype, "lased" ) && isdefined( var_2.hassoflam ) && var_2.hassoflam )
|
|
{
|
|
self disableplayeruse( var_2 );
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) || var_0 == var_2.team )
|
|
{
|
|
self enableplayeruse( var_2 );
|
|
continue;
|
|
}
|
|
|
|
self disableplayeruse( var_2 );
|
|
}
|
|
}
|
|
|
|
setusablebyotherteams( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( issubstr( self.cratetype, "juggernaut" ) && var_2 maps\mp\_utility::isjuggernaut() )
|
|
{
|
|
self disableplayeruse( var_2 );
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) || var_0 != var_2.team )
|
|
{
|
|
self enableplayeruse( var_2 );
|
|
continue;
|
|
}
|
|
|
|
self disableplayeruse( var_2 );
|
|
}
|
|
}
|
|
|
|
dropthecrate( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
|
|
{
|
|
var_9 = [];
|
|
self.owner endon( "disconnect" );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
{
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
var_10 = undefined;
|
|
var_11 = undefined;
|
|
|
|
for ( var_12 = 0; var_12 < 100; var_12++ )
|
|
{
|
|
var_11 = getcratetypefordroptype( var_1 );
|
|
var_10 = 0;
|
|
|
|
for ( var_13 = 0; var_13 < var_7.size; var_13++ )
|
|
{
|
|
if ( var_11 == var_7[var_13] )
|
|
{
|
|
var_10 = 1;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_10 == 0 )
|
|
break;
|
|
}
|
|
|
|
if ( var_10 == 1 )
|
|
var_11 = getcratetypefordroptype( var_1 );
|
|
}
|
|
else
|
|
var_11 = getcratetypefordroptype( var_1 );
|
|
}
|
|
else
|
|
var_11 = var_4;
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
var_6 = ( randomint( 50 ), randomint( 50 ), randomint( 50 ) );
|
|
|
|
var_9 = createairdropcrate( self.owner, var_1, var_11, var_5, var_0 );
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case "nuke_drop":
|
|
case "airdrop_mega":
|
|
case "airdrop_juggernaut_maniac":
|
|
case "airdrop_juggernaut_recon":
|
|
case "airdrop_juggernaut":
|
|
var_9 linkto( self, "tag_ground", ( 64, 32, -128 ), ( 0, 0, 0 ) );
|
|
break;
|
|
case "airdrop_osprey_gunner":
|
|
case "airdrop_escort":
|
|
var_9 linkto( self, var_8, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
break;
|
|
default:
|
|
var_9 linkto( self, "tag_ground", ( 32, 0, 5 ), ( 0, 0, 0 ) );
|
|
break;
|
|
}
|
|
|
|
var_9.angles = ( 0, 0, 0 );
|
|
var_9 show();
|
|
var_14 = self.veh_speed;
|
|
|
|
if ( issubstr( var_11, "juggernaut" ) )
|
|
var_6 = ( 0, 0, 0 );
|
|
|
|
thread waitfordropcratemsg( var_9, var_6, var_1, var_11 );
|
|
var_9.droppingtoground = 1;
|
|
return var_11;
|
|
}
|
|
|
|
killplayerfromcrate_dodamage( var_0 )
|
|
{
|
|
if ( isdefined( level.noairdropkills ) && level.noairdropkills )
|
|
return;
|
|
|
|
var_0 dodamage( 1000, var_0.origin, self, self, "MOD_CRUSH" );
|
|
}
|
|
|
|
killplayerfromcrate_fastvelocitypush()
|
|
{
|
|
self endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "player_pushed", var_0, var_1 );
|
|
|
|
if ( isplayer( var_0 ) || isagent( var_0 ) )
|
|
{
|
|
if ( var_1[2] < -20 )
|
|
killplayerfromcrate_dodamage( var_0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
airdrop_override_death_moving_platform( var_0 )
|
|
{
|
|
if ( isdefined( var_0.lasttouchedplatform.destroyairdroponcollision ) && var_0.lasttouchedplatform.destroyairdroponcollision )
|
|
{
|
|
playfx( common_scripts\utility::getfx( "airdrop_crate_destroy" ), self.origin );
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
cleanup_crate_capture()
|
|
{
|
|
var_0 = self getlinkedchildren( 1 );
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( !isplayer( var_2 ) )
|
|
continue;
|
|
|
|
if ( isdefined( var_2.iscapturingcrate ) && var_2.iscapturingcrate )
|
|
{
|
|
var_3 = var_2 getlinkedparent();
|
|
|
|
if ( isdefined( var_3 ) )
|
|
{
|
|
var_2 maps\mp\gametypes\_gameobjects::updateuiprogress( var_3, 0 );
|
|
var_2 unlink();
|
|
}
|
|
|
|
if ( isalive( var_2 ) )
|
|
var_2 common_scripts\utility::_enableweapon();
|
|
|
|
var_2.iscapturingcrate = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
airdrop_override_invalid_moving_platform( var_0 )
|
|
{
|
|
wait 0.05;
|
|
self notify( "restarting_physics" );
|
|
cleanup_crate_capture();
|
|
self physicslaunchserver( ( 0, 0, 0 ), var_0.dropimpulse, var_0.airdrop_max_linear_velocity );
|
|
thread physicsupdater( var_0.droptype, var_0.cratetype );
|
|
thread physicswaiter( var_0.droptype, var_0.cratetype, var_0.dropimpulse, var_0.airdrop_max_linear_velocity );
|
|
}
|
|
|
|
waitfordropcratemsg( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_0 endon( "death" );
|
|
|
|
if ( !isdefined( var_5 ) || !var_5 )
|
|
self waittill( "drop_crate" );
|
|
|
|
var_6 = 1200;
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_6 = var_4;
|
|
|
|
var_0 unlink();
|
|
var_0 physicslaunchserver( ( 0, 0, 0 ), var_1, var_6 );
|
|
var_0 thread physicsupdater( var_2, var_3 );
|
|
var_0 thread physicswaiter( var_2, var_3, var_1, var_6 );
|
|
var_0 thread killplayerfromcrate_fastvelocitypush();
|
|
var_0.unresolved_collision_func = ::killplayerfromcrate_dodamage;
|
|
|
|
if ( isdefined( var_0.killcament ) )
|
|
{
|
|
if ( isdefined( var_0.carestrike ) )
|
|
var_7 = -2100;
|
|
else
|
|
var_7 = 0;
|
|
|
|
var_0.killcament unlink();
|
|
var_8 = bullettrace( var_0.origin, var_0.origin + ( 0, 0, -10000 ), 0, var_0 );
|
|
var_9 = distance( var_0.origin, var_8["position"] );
|
|
var_10 = var_9 / 800;
|
|
var_0.killcament moveto( var_8["position"] + ( 0, 0, 300 ) + ( var_7, 0, 0 ), var_10 );
|
|
}
|
|
}
|
|
|
|
physicsupdater( var_0, var_1 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self endon( "physics_finished" );
|
|
wait 0.5;
|
|
|
|
for (;;)
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
var_2 = bullettrace( self.origin, self.origin + ( 0, 0, -60 ), 0, self, 0, 0, 0, 1 );
|
|
|
|
if ( var_2["fraction"] < 1.0 )
|
|
{
|
|
var_3 = 600;
|
|
self physicssetmaxlinvel( var_3 );
|
|
thread waitandanimate();
|
|
return;
|
|
}
|
|
|
|
common_scripts\utility::waitframe();
|
|
}
|
|
}
|
|
|
|
waitandanimate()
|
|
{
|
|
self endon( "death" );
|
|
wait 0.035;
|
|
playfx( level._effect["airdrop_dust_kickup"], self.origin + ( 0, 0, 5 ), ( 0, 0, 1 ) );
|
|
self.friendlymodel scriptmodelplayanim( "juggernaut_carepackage" );
|
|
self.enemymodel scriptmodelplayanim( "juggernaut_carepackage" );
|
|
}
|
|
|
|
physicswaiter( var_0, var_1, var_2, var_3 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self waittill( "physics_finished" );
|
|
self.droppingtoground = 0;
|
|
self thread [[ level.cratetypes[var_0][var_1].func ]]( var_0 );
|
|
level thread droptimeout( self, self.owner, var_1 );
|
|
var_4 = spawnstruct();
|
|
var_4.endonstring = "restarting_physics";
|
|
var_4.deathoverridecallback = ::airdrop_override_death_moving_platform;
|
|
var_4.invalidparentoverridecallback = ::airdrop_override_invalid_moving_platform;
|
|
var_4.droptype = var_0;
|
|
var_4.cratetype = var_1;
|
|
var_4.dropimpulse = var_2;
|
|
var_4.airdrop_max_linear_velocity = var_3;
|
|
thread maps\mp\_movers::handle_moving_platforms( var_4 );
|
|
|
|
if ( self.friendlymodel maps\mp\_utility::touchingbadtrigger() )
|
|
{
|
|
deletecrate();
|
|
return;
|
|
}
|
|
|
|
if ( isdefined( self.owner ) && abs( self.origin[2] - self.owner.origin[2] ) > 3000 )
|
|
deletecrate();
|
|
}
|
|
|
|
droptimeout( var_0, var_1, var_2 )
|
|
{
|
|
if ( isdefined( level.nocratetimeout ) && level.nocratetimeout )
|
|
return;
|
|
|
|
level endon( "game_ended" );
|
|
var_0 endon( "death" );
|
|
|
|
if ( var_0.droptype == "nuke_drop" )
|
|
return;
|
|
|
|
var_3 = 90.0;
|
|
|
|
if ( var_2 == "supply" )
|
|
var_3 = 20.0;
|
|
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_3 );
|
|
|
|
while ( var_0.curprogress != 0 )
|
|
wait 1;
|
|
|
|
var_0 deletecrate();
|
|
}
|
|
|
|
getpathstart( var_0, var_1 )
|
|
{
|
|
var_2 = 100;
|
|
var_3 = 15000;
|
|
var_4 = ( 0, var_1, 0 );
|
|
var_5 = var_0 + anglestoforward( var_4 ) * ( -1 * var_3 );
|
|
var_5 = var_5 + ( ( randomfloat( 2 ) - 1 ) * var_2, ( randomfloat( 2 ) - 1 ) * var_2, 0 );
|
|
return var_5;
|
|
}
|
|
|
|
getpathend( var_0, var_1 )
|
|
{
|
|
var_2 = 150;
|
|
var_3 = 15000;
|
|
var_4 = ( 0, var_1, 0 );
|
|
var_5 = var_0 + anglestoforward( var_4 + ( 0, 90, 0 ) ) * var_3;
|
|
var_5 = var_5 + ( ( randomfloat( 2 ) - 1 ) * var_2, ( randomfloat( 2 ) - 1 ) * var_2, 0 );
|
|
return var_5;
|
|
}
|
|
|
|
getflyheightoffset( var_0 )
|
|
{
|
|
var_1 = 850;
|
|
var_2 = getent( "airstrikeheight", "targetname" );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
{
|
|
if ( isdefined( level.airstrikeheightscale ) )
|
|
{
|
|
if ( level.airstrikeheightscale > 2 )
|
|
{
|
|
var_1 = 1500;
|
|
return var_1 * level.airstrikeheightscale;
|
|
}
|
|
|
|
return var_1 * level.airstrikeheightscale + 256 + var_0[2];
|
|
}
|
|
else
|
|
return var_1 + var_0[2];
|
|
}
|
|
else
|
|
return var_2.origin[2];
|
|
}
|
|
|
|
doflyby( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() )
|
|
return;
|
|
|
|
var_6 = getflyheightoffset( var_1 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_6 = var_6 + var_4;
|
|
|
|
foreach ( var_8 in level.littlebirds )
|
|
{
|
|
if ( isdefined( var_8.droptype ) )
|
|
var_6 = var_6 + 128;
|
|
}
|
|
|
|
var_10 = var_1 * ( 1, 1, 0 ) + ( 0, 0, var_6 );
|
|
var_11 = getpathstart( var_10, var_2 );
|
|
var_12 = getpathend( var_10, var_2 );
|
|
var_10 = var_10 + anglestoforward( ( 0, var_2, 0 ) ) * -50;
|
|
var_13 = helisetup( var_0, var_11, var_10 );
|
|
|
|
if ( isdefined( level.highlightairdrop ) && level.highlightairdrop )
|
|
var_13 hudoutlineenable( 3, 0 );
|
|
|
|
var_13 endon( "death" );
|
|
var_13.droptype = var_3;
|
|
var_13 setvehgoalpos( var_10, 1 );
|
|
var_13 thread dropthecrate( var_1, var_3, var_6, 0, var_5, var_11 );
|
|
wait 2;
|
|
var_13 vehicle_setspeed( 75, 40 );
|
|
var_13 setyawspeed( 180, 180, 180, 0.3 );
|
|
var_13 waittill( "goal" );
|
|
wait 0.1;
|
|
var_13 notify( "drop_crate" );
|
|
var_13 setvehgoalpos( var_12, 1 );
|
|
var_13 vehicle_setspeed( 300, 75 );
|
|
var_13.leaving = 1;
|
|
var_13 waittill( "goal" );
|
|
var_13 notify( "leaving" );
|
|
var_13 notify( "delete" );
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
var_13 delete();
|
|
}
|
|
|
|
domegaflyby( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level thread doflyby( var_0, var_1, var_2, var_3, 0 );
|
|
wait( randomintrange( 1, 2 ) );
|
|
level thread doflyby( var_0, var_1 + ( 128, 128, 0 ), var_2, var_3, 128 );
|
|
wait( randomintrange( 1, 2 ) );
|
|
level thread doflyby( var_0, var_1 + ( 172, 256, 0 ), var_2, var_3, 256 );
|
|
wait( randomintrange( 1, 2 ) );
|
|
level thread doflyby( var_0, var_1 + ( 64, 0, 0 ), var_2, var_3, 0 );
|
|
}
|
|
|
|
doc130flyby( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = 18000;
|
|
var_5 = 3000;
|
|
var_6 = vectortoyaw( var_1 - var_0.origin );
|
|
var_7 = ( 0, var_6, 0 );
|
|
var_8 = getflyheightoffset( var_1 );
|
|
var_9 = var_1 + anglestoforward( var_7 ) * ( -1 * var_4 );
|
|
var_9 = var_9 * ( 1, 1, 0 ) + ( 0, 0, var_8 );
|
|
var_10 = var_1 + anglestoforward( var_7 ) * var_4;
|
|
var_10 = var_10 * ( 1, 1, 0 ) + ( 0, 0, var_8 );
|
|
var_11 = length( var_9 - var_10 );
|
|
var_12 = var_11 / var_5;
|
|
var_13 = c130setup( var_0, var_9, var_10 );
|
|
var_13.veh_speed = var_5;
|
|
var_13.droptype = var_3;
|
|
var_13 playloopsound( "veh_ac130_dist_loop" );
|
|
var_13.angles = var_7;
|
|
var_14 = anglestoforward( var_7 );
|
|
var_13 moveto( var_10, var_12, 0, 0 );
|
|
var_15 = distance2d( var_13.origin, var_1 );
|
|
var_16 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_17 = distance2d( var_13.origin, var_1 );
|
|
|
|
if ( var_17 < var_15 )
|
|
var_15 = var_17;
|
|
else if ( var_17 > var_15 )
|
|
break;
|
|
|
|
if ( var_17 < 320 )
|
|
break;
|
|
else if ( var_17 < 768 )
|
|
{
|
|
earthquake( 0.15, 1.5, var_1, 1500 );
|
|
|
|
if ( !var_16 )
|
|
{
|
|
var_13 playsound( "veh_ac130_sonic_boom" );
|
|
var_16 = 1;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 0.05;
|
|
var_18 = ( 0, 0, 0 );
|
|
|
|
if ( !maps\mp\_utility::is_aliens() )
|
|
var_19[0] = var_13 thread dropthecrate( var_1, var_3, var_8, 0, undefined, var_9, var_18 );
|
|
|
|
wait 0.05;
|
|
var_13 notify( "drop_crate" );
|
|
var_20 = var_1 + anglestoforward( var_7 ) * ( var_4 * 1.5 );
|
|
var_13 moveto( var_20, var_12 / 2, 0, 0 );
|
|
wait 6;
|
|
var_13 delete();
|
|
}
|
|
|
|
domegac130flyby( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
var_5 = 24000;
|
|
var_6 = 2000;
|
|
var_7 = vectortoyaw( var_1 - var_0.origin );
|
|
var_8 = ( 0, var_7, 0 );
|
|
var_9 = anglestoforward( var_8 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
var_1 = var_1 + var_9 * var_4;
|
|
|
|
var_10 = getflyheightoffset( var_1 );
|
|
var_11 = var_1 + anglestoforward( var_8 ) * ( -1 * var_5 );
|
|
var_11 = var_11 * ( 1, 1, 0 ) + ( 0, 0, var_10 );
|
|
var_12 = var_1 + anglestoforward( var_8 ) * var_5;
|
|
var_12 = var_12 * ( 1, 1, 0 ) + ( 0, 0, var_10 );
|
|
var_13 = length( var_11 - var_12 );
|
|
var_14 = var_13 / var_6;
|
|
var_15 = c130setup( var_0, var_11, var_12 );
|
|
var_15.veh_speed = var_6;
|
|
var_15.droptype = var_3;
|
|
var_15 playloopsound( "veh_ac130_dist_loop" );
|
|
var_15.angles = var_8;
|
|
var_9 = anglestoforward( var_8 );
|
|
var_15 moveto( var_12, var_14, 0, 0 );
|
|
var_16 = distance2d( var_15.origin, var_1 );
|
|
var_17 = 0;
|
|
|
|
for (;;)
|
|
{
|
|
var_18 = distance2d( var_15.origin, var_1 );
|
|
|
|
if ( var_18 < var_16 )
|
|
var_16 = var_18;
|
|
else if ( var_18 > var_16 )
|
|
break;
|
|
|
|
if ( var_18 < 256 )
|
|
break;
|
|
else if ( var_18 < 768 )
|
|
{
|
|
earthquake( 0.15, 1.5, var_1, 1500 );
|
|
|
|
if ( !var_17 )
|
|
{
|
|
var_15 playsound( "veh_ac130_sonic_boom" );
|
|
var_17 = 1;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
wait 0.05;
|
|
var_19[0] = var_15 thread dropthecrate( var_1, var_3, var_10, 0, undefined, var_11 );
|
|
wait 0.05;
|
|
var_15 notify( "drop_crate" );
|
|
wait 0.05;
|
|
var_19[1] = var_15 thread dropthecrate( var_1, var_3, var_10, 0, undefined, var_11, undefined, var_19 );
|
|
wait 0.05;
|
|
var_15 notify( "drop_crate" );
|
|
wait 0.05;
|
|
var_19[2] = var_15 thread dropthecrate( var_1, var_3, var_10, 0, undefined, var_11, undefined, var_19 );
|
|
wait 0.05;
|
|
var_15 notify( "drop_crate" );
|
|
wait 0.05;
|
|
var_19[3] = var_15 thread dropthecrate( var_1, var_3, var_10, 0, undefined, var_11, undefined, var_19 );
|
|
wait 0.05;
|
|
var_15 notify( "drop_crate" );
|
|
wait 4;
|
|
var_15 delete();
|
|
}
|
|
|
|
dropnuke( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = 24000;
|
|
var_4 = 2000;
|
|
var_5 = randomint( 360 );
|
|
var_6 = ( 0, var_5, 0 );
|
|
var_7 = getflyheightoffset( var_0 );
|
|
var_8 = var_0 + anglestoforward( var_6 ) * ( -1 * var_3 );
|
|
var_8 = var_8 * ( 1, 1, 0 ) + ( 0, 0, var_7 );
|
|
var_9 = var_0 + anglestoforward( var_6 ) * var_3;
|
|
var_9 = var_9 * ( 1, 1, 0 ) + ( 0, 0, var_7 );
|
|
var_10 = length( var_8 - var_9 );
|
|
var_11 = var_10 / var_4;
|
|
var_12 = c130setup( var_1, var_8, var_9 );
|
|
var_12.veh_speed = var_4;
|
|
var_12.droptype = var_2;
|
|
var_12 playloopsound( "veh_ac130_dist_loop" );
|
|
var_12.angles = var_6;
|
|
var_13 = anglestoforward( var_6 );
|
|
var_12 moveto( var_9, var_11, 0, 0 );
|
|
var_14 = 0;
|
|
var_15 = distance2d( var_12.origin, var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
var_16 = distance2d( var_12.origin, var_0 );
|
|
|
|
if ( var_16 < var_15 )
|
|
var_15 = var_16;
|
|
else if ( var_16 > var_15 )
|
|
break;
|
|
|
|
if ( var_16 < 256 )
|
|
break;
|
|
else if ( var_16 < 768 )
|
|
{
|
|
earthquake( 0.15, 1.5, var_0, 1500 );
|
|
|
|
if ( !var_14 )
|
|
{
|
|
var_12 playsound( "veh_ac130_sonic_boom" );
|
|
var_14 = 1;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
var_12 thread dropthecrate( var_0, var_2, var_7, 0, "nuke", var_8 );
|
|
wait 0.05;
|
|
var_12 notify( "drop_crate" );
|
|
wait 4;
|
|
var_12 delete();
|
|
}
|
|
|
|
stoploopafter( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
wait( var_0 );
|
|
self stoploopsound();
|
|
}
|
|
|
|
playlooponent( var_0 )
|
|
{
|
|
var_1 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_1 hide();
|
|
var_1 endon( "death" );
|
|
thread common_scripts\utility::delete_on_death( var_1 );
|
|
var_1.origin = self.origin;
|
|
var_1.angles = self.angles;
|
|
var_1 linkto( self );
|
|
var_1 playloopsound( var_0 );
|
|
self waittill( "stop sound" + var_0 );
|
|
var_1 stoploopsound( var_0 );
|
|
var_1 delete();
|
|
}
|
|
|
|
c130setup( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = vectortoangles( var_2 - var_1 );
|
|
var_4 = spawnplane( var_0, "script_model", var_1, "compass_objpoint_c130_friendly", "compass_objpoint_c130_enemy" );
|
|
var_4 setmodel( "vehicle_ac130_low_mp" );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
return;
|
|
|
|
var_4.owner = var_0;
|
|
var_4.team = var_0.team;
|
|
level.c130 = var_4;
|
|
return var_4;
|
|
}
|
|
|
|
helisetup( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = vectortoangles( var_2 - var_1 );
|
|
var_4 = "littlebird_mp";
|
|
|
|
if ( isdefined( level.vehicleoverride ) )
|
|
var_4 = level.vehicleoverride;
|
|
|
|
var_5 = spawnhelicopter( var_0, var_1, var_3, var_4, level.littlebird_model );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
return;
|
|
|
|
var_5 maps\mp\killstreaks\_helicopter::addtolittlebirdlist();
|
|
var_5 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath();
|
|
var_5.maxhealth = 500;
|
|
var_5.owner = var_0;
|
|
var_5.team = var_0.team;
|
|
var_5.isairdrop = 1;
|
|
var_5 thread watchtimeout();
|
|
var_5 thread heli_existence();
|
|
var_5 thread helidestroyed();
|
|
var_5 thread maps\mp\killstreaks\_helicopter::heli_damage_monitor( "airdrop" );
|
|
var_5 setmaxpitchroll( 45, 85 );
|
|
var_5 vehicle_setspeed( 250, 175 );
|
|
var_5.helitype = "airdrop";
|
|
var_5 hidepart( "tag_wings" );
|
|
return var_5;
|
|
}
|
|
|
|
watchtimeout()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "leaving" );
|
|
self endon( "helicopter_gone" );
|
|
self endon( "death" );
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( 25.0 );
|
|
self notify( "death" );
|
|
}
|
|
|
|
heli_existence()
|
|
{
|
|
common_scripts\utility::waittill_any( "crashing", "leaving" );
|
|
self notify( "helicopter_gone" );
|
|
}
|
|
|
|
helidestroyed()
|
|
{
|
|
self endon( "leaving" );
|
|
self endon( "helicopter_gone" );
|
|
self waittill( "death" );
|
|
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
self vehicle_setspeed( 25, 5 );
|
|
thread lbspin( randomintrange( 180, 220 ) );
|
|
wait( randomfloatrange( 0.5, 1.5 ) );
|
|
self notify( "drop_crate" );
|
|
lbexplode();
|
|
}
|
|
|
|
lbexplode()
|
|
{
|
|
var_0 = self.origin + ( 0, 0, 1 ) - self.origin;
|
|
playfx( level.chopper_fx["explode"]["death"]["cobra"], self.origin, var_0 );
|
|
self playsound( "exp_helicopter_fuel" );
|
|
self notify( "explode" );
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
self delete();
|
|
}
|
|
|
|
lbspin( var_0 )
|
|
{
|
|
self endon( "explode" );
|
|
playfxontag( level.chopper_fx["explode"]["medium"], self, "tail_rotor_jnt" );
|
|
playfxontag( level.chopper_fx["fire"]["trail"]["medium"], self, "tail_rotor_jnt" );
|
|
self setyawspeed( var_0, var_0, var_0 );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self settargetyaw( self.angles[1] + var_0 * 0.9 );
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
nukecapturethink()
|
|
{
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_0 );
|
|
|
|
if ( !var_0 isonground() )
|
|
continue;
|
|
|
|
if ( !useholdthink( var_0 ) )
|
|
continue;
|
|
|
|
self notify( "captured", var_0 );
|
|
}
|
|
}
|
|
|
|
crateothercapturethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 == self.owner )
|
|
continue;
|
|
|
|
if ( !validateopenconditions( var_1 ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.overridecrateusetime ) )
|
|
var_2 = level.overridecrateusetime;
|
|
else
|
|
var_2 = undefined;
|
|
|
|
var_1.iscapturingcrate = 1;
|
|
var_3 = createuseent();
|
|
var_4 = var_3 useholdthink( var_1, var_2, var_0 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 delete();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
return;
|
|
|
|
if ( !var_4 )
|
|
{
|
|
var_1.iscapturingcrate = 0;
|
|
continue;
|
|
}
|
|
|
|
var_1.iscapturingcrate = 0;
|
|
self notify( "captured", var_1 );
|
|
}
|
|
}
|
|
|
|
crateownercapturethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 != self.owner )
|
|
continue;
|
|
|
|
if ( !validateopenconditions( var_1 ) )
|
|
continue;
|
|
|
|
var_1.iscapturingcrate = 1;
|
|
|
|
if ( !useholdthink( var_1, 500, var_0 ) )
|
|
{
|
|
var_1.iscapturingcrate = 0;
|
|
continue;
|
|
}
|
|
|
|
var_1.iscapturingcrate = 0;
|
|
self notify( "captured", var_1 );
|
|
}
|
|
}
|
|
|
|
crateallcapturethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self.crateuseents = [];
|
|
|
|
while ( isdefined( self ) )
|
|
{
|
|
self waittill( "trigger", var_1 );
|
|
|
|
if ( !validateopenconditions( var_1 ) )
|
|
continue;
|
|
|
|
if ( isdefined( level.overridecrateusetime ) )
|
|
var_2 = level.overridecrateusetime;
|
|
else
|
|
var_2 = undefined;
|
|
|
|
childthread cratealluselogic( var_1, var_2, var_0 );
|
|
}
|
|
}
|
|
|
|
cratealluselogic( var_0, var_1, var_2 )
|
|
{
|
|
var_0.iscapturingcrate = 1;
|
|
self.crateuseents[var_0.name] = createuseent();
|
|
var_3 = self.crateuseents[var_0.name];
|
|
var_4 = self.crateuseents[var_0.name] useholdthink( var_0, var_1, var_2, self );
|
|
|
|
if ( isdefined( self.crateuseents ) && isdefined( var_3 ) )
|
|
{
|
|
self.crateuseents = maps\mp\_utility::array_remove_keep_index( self.crateuseents, var_3 );
|
|
var_3 delete();
|
|
}
|
|
|
|
if ( !isdefined( var_0 ) )
|
|
return;
|
|
|
|
var_0.iscapturingcrate = 0;
|
|
|
|
if ( var_4 )
|
|
self notify( "captured", var_0 );
|
|
}
|
|
|
|
updatecrateusestate()
|
|
{
|
|
self.inuse = 0;
|
|
|
|
foreach ( var_1 in self.crateuseents )
|
|
{
|
|
if ( var_1.inuse )
|
|
{
|
|
self.inuse = 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
validateopenconditions( var_0 )
|
|
{
|
|
if ( ( self.cratetype == "airdrop_juggernaut_recon" || self.cratetype == "airdrop_juggernaut" || self.cratetype == "airdrop_juggernaut_maniac" ) && var_0 maps\mp\_utility::isjuggernaut() )
|
|
return 0;
|
|
|
|
if ( isdefined( var_0.onhelisniper ) && var_0.onhelisniper )
|
|
return 0;
|
|
|
|
var_1 = var_0 getcurrentweapon();
|
|
|
|
if ( maps\mp\_utility::iskillstreakweapon( var_1 ) && !maps\mp\_utility::isjuggernautweapon( var_1 ) )
|
|
return 0;
|
|
|
|
if ( isdefined( var_0.changingweapon ) && maps\mp\_utility::iskillstreakweapon( var_0.changingweapon ) && !issubstr( var_0.changingweapon, "jugg_mp" ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
killstreakcratethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( game["strings"][self.cratetype + "_hint"] ) )
|
|
var_1 = game["strings"][self.cratetype + "_hint"];
|
|
else
|
|
var_1 = &"PLATFORM_GET_KILLSTREAK";
|
|
|
|
cratesetupforuse( var_1, maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
thread crateothercapturethink();
|
|
thread crateownercapturethink();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_2 );
|
|
|
|
if ( isplayer( var_2 ) )
|
|
{
|
|
var_2 setclientomnvar( "ui_securing", 0 );
|
|
var_2.ui_securing = undefined;
|
|
}
|
|
|
|
if ( isdefined( self.owner ) && var_2 != self.owner )
|
|
{
|
|
if ( !level.teambased || var_2.team != self.team )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "airdrop_osprey_gunner":
|
|
case "airdrop_escort":
|
|
case "airdrop_support":
|
|
case "airdrop_assault":
|
|
var_2 thread maps\mp\gametypes\_missions::genericchallenge( "hijacker_airdrop" );
|
|
var_2 thread hijacknotify( self, "airdrop" );
|
|
break;
|
|
case "airdrop_sentry_minigun":
|
|
var_2 thread maps\mp\gametypes\_missions::genericchallenge( "hijacker_airdrop" );
|
|
var_2 thread hijacknotify( self, "sentry" );
|
|
break;
|
|
case "airdrop_remote_tank":
|
|
var_2 thread maps\mp\gametypes\_missions::genericchallenge( "hijacker_airdrop" );
|
|
var_2 thread hijacknotify( self, "remote_tank" );
|
|
break;
|
|
case "airdrop_mega":
|
|
var_2 thread maps\mp\gametypes\_missions::genericchallenge( "hijacker_airdrop_mega" );
|
|
var_2 thread hijacknotify( self, "emergency_airdrop" );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self.owner thread maps\mp\gametypes\_rank::giverankxp( "killstreak_giveaway", int( maps\mp\killstreaks\_killstreaks::getstreakcost( self.cratetype ) / 10 * 50 ) );
|
|
self.owner thread maps\mp\gametypes\_hud_message::splashnotifydelayed( "sharepackage", int( maps\mp\killstreaks\_killstreaks::getstreakcost( self.cratetype ) / 10 * 50 ) );
|
|
}
|
|
}
|
|
|
|
var_2 playlocalsound( "ammo_crate_use" );
|
|
var_2 thread maps\mp\killstreaks\_killstreaks::givekillstreak( self.cratetype, 0, 0, self.owner );
|
|
var_2 maps\mp\gametypes\_hud_message::killstreaksplashnotify( self.cratetype, undefined );
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
lasedstrikecratethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self endon( "death" );
|
|
cratesetupforuse( game["strings"]["marker_hint"], maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
level.lasedstrikecrateactive = 1;
|
|
thread crateownercapturethink();
|
|
thread crateothercapturethink();
|
|
var_1 = 0;
|
|
var_2 = thread maps\mp\killstreaks\_lasedstrike::spawnremote( self.owner );
|
|
level.lasedstrikedrone = var_2;
|
|
level.lasedstrikeactive = 1;
|
|
level.soflamcrate = self;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_3 );
|
|
|
|
if ( isdefined( self.owner ) && var_3 != self.owner )
|
|
{
|
|
if ( !level.teambased || var_3.team != self.team )
|
|
deletecrate();
|
|
}
|
|
|
|
setusablebyteam( self.team );
|
|
var_3 thread maps\mp\killstreaks\_lasedstrike::givemarker();
|
|
var_1++;
|
|
|
|
if ( var_1 >= 5 )
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
nukecratethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self endon( "death" );
|
|
cratesetupforuse( &"PLATFORM_CALL_NUKE", maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
thread nukecapturethink();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_1 );
|
|
var_1 thread [[ level.killstreakfuncs[self.cratetype] ]]( level.gtnw );
|
|
level notify( "nukeCaptured", var_1 );
|
|
|
|
if ( isdefined( level.gtnw ) && level.gtnw )
|
|
var_1.capturednuke = 1;
|
|
|
|
var_1 playlocalsound( "ammo_crate_use" );
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
juggernautcratethink( var_0 )
|
|
{
|
|
self endon( "restarting_physics" );
|
|
self endon( "death" );
|
|
cratesetupforuse( game["strings"][self.cratetype + "_hint"], maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
thread crateothercapturethink();
|
|
thread crateownercapturethink();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 != self.owner )
|
|
{
|
|
if ( !level.teambased || var_1.team != self.team )
|
|
{
|
|
if ( self.cratetype == "airdrop_juggernaut_maniac" )
|
|
var_1 thread hijacknotify( self, "maniac" );
|
|
else if ( maps\mp\_utility::isstrstart( self.cratetype, "juggernaut_" ) )
|
|
var_1 thread hijacknotify( self, self.cratetype );
|
|
else
|
|
var_1 thread hijacknotify( self, "juggernaut" );
|
|
}
|
|
else
|
|
{
|
|
self.owner thread maps\mp\gametypes\_rank::giverankxp( "killstreak_giveaway", int( maps\mp\killstreaks\_killstreaks::getstreakcost( self.cratetype ) / 10 ) * 50 );
|
|
|
|
if ( self.cratetype == "airdrop_juggernaut_maniac" )
|
|
self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify( "giveaway_juggernaut_maniac", var_1 );
|
|
else if ( maps\mp\_utility::isstrstart( self.cratetype, "juggernaut_" ) )
|
|
self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify( "giveaway_" + self.cratetype, var_1 );
|
|
else
|
|
self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify( "giveaway_juggernaut", var_1 );
|
|
}
|
|
}
|
|
|
|
var_1 playlocalsound( "ammo_crate_use" );
|
|
var_2 = "juggernaut";
|
|
|
|
switch ( self.cratetype )
|
|
{
|
|
case "airdrop_juggernaut":
|
|
var_2 = "juggernaut";
|
|
break;
|
|
case "airdrop_juggernaut_recon":
|
|
var_2 = "juggernaut_recon";
|
|
break;
|
|
case "airdrop_juggernaut_maniac":
|
|
var_2 = "juggernaut_maniac";
|
|
break;
|
|
default:
|
|
if ( maps\mp\_utility::isstrstart( self.cratetype, "juggernaut_" ) )
|
|
var_2 = self.cratetype;
|
|
|
|
break;
|
|
}
|
|
|
|
var_1 thread maps\mp\killstreaks\_juggernaut::givejuggernaut( var_2 );
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
sentrycratethink( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
cratesetupforuse( game["strings"]["sentry_hint"], maps\mp\_utility::getkillstreakoverheadicon( self.cratetype ) );
|
|
thread crateothercapturethink();
|
|
thread crateownercapturethink();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "captured", var_1 );
|
|
|
|
if ( isdefined( self.owner ) && var_1 != self.owner )
|
|
{
|
|
if ( !level.teambased || var_1.team != self.team )
|
|
{
|
|
if ( issubstr( var_0, "airdrop_sentry" ) )
|
|
var_1 thread hijacknotify( self, "sentry" );
|
|
else
|
|
var_1 thread hijacknotify( self, "emergency_airdrop" );
|
|
}
|
|
else
|
|
{
|
|
self.owner thread maps\mp\gametypes\_rank::giverankxp( "killstreak_giveaway", int( maps\mp\killstreaks\_killstreaks::getstreakcost( "sentry" ) / 10 ) * 50 );
|
|
self.owner maps\mp\gametypes\_hud_message::playercardsplashnotify( "giveaway_sentry", var_1 );
|
|
}
|
|
}
|
|
|
|
var_1 playlocalsound( "ammo_crate_use" );
|
|
var_1 thread sentryusetracker();
|
|
deletecrate();
|
|
}
|
|
}
|
|
|
|
deletecrate()
|
|
{
|
|
self notify( "crate_deleting" );
|
|
|
|
if ( isdefined( self.usedby ) )
|
|
{
|
|
foreach ( var_1 in self.usedby )
|
|
{
|
|
var_1 setclientomnvar( "ui_securing", 0 );
|
|
var_1.ui_securing = undefined;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( self.objidfriendly ) )
|
|
maps\mp\_utility::_objective_delete( self.objidfriendly );
|
|
|
|
if ( isdefined( self.objidenemy ) )
|
|
{
|
|
if ( level.multiteambased )
|
|
{
|
|
foreach ( var_4 in self.objidenemy )
|
|
maps\mp\_utility::_objective_delete( var_4 );
|
|
}
|
|
else
|
|
maps\mp\_utility::_objective_delete( self.objidenemy );
|
|
}
|
|
|
|
if ( isdefined( self.bomb ) && isdefined( self.bomb.killcament ) )
|
|
self.bomb.killcament delete();
|
|
|
|
if ( isdefined( self.bomb ) )
|
|
self.bomb delete();
|
|
|
|
if ( isdefined( self.killcament ) )
|
|
self.killcament delete();
|
|
|
|
if ( isdefined( self.droptype ) )
|
|
playfx( common_scripts\utility::getfx( "airdrop_crate_destroy" ), self.origin );
|
|
|
|
self delete();
|
|
}
|
|
|
|
sentryusetracker()
|
|
{
|
|
if ( !maps\mp\killstreaks\_autosentry::givesentry( "sentry_minigun" ) )
|
|
maps\mp\killstreaks\_killstreaks::givekillstreak( "sentry" );
|
|
}
|
|
|
|
hijacknotify( var_0, var_1 )
|
|
{
|
|
self notify( "hijacker", var_1, var_0.owner );
|
|
}
|
|
|
|
refillammo( var_0 )
|
|
{
|
|
var_1 = self getweaponslistall();
|
|
|
|
if ( var_0 )
|
|
{
|
|
if ( maps\mp\_utility::_hasperk( "specialty_tacticalinsertion" ) && self getammocount( "flare_mp" ) < 1 )
|
|
maps\mp\_utility::giveperkoffhand( "specialty_tacticalinsertion", 0 );
|
|
}
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
if ( issubstr( var_3, "grenade" ) || getsubstr( var_3, 0, 2 ) == "gl" )
|
|
{
|
|
if ( !var_0 || self getammocount( var_3 ) >= 1 )
|
|
continue;
|
|
}
|
|
|
|
self givemaxammo( var_3 );
|
|
}
|
|
}
|
|
|
|
useholdthink( var_0, var_1, var_2, var_3 )
|
|
{
|
|
maps\mp\_movers::script_mover_link_to_use_object( var_0 );
|
|
var_0 common_scripts\utility::_disableweapon();
|
|
self.curprogress = 0;
|
|
self.inuse = 1;
|
|
self.userate = 0;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 updatecrateusestate();
|
|
|
|
if ( isdefined( var_1 ) )
|
|
self.usetime = var_1;
|
|
else
|
|
self.usetime = 3000;
|
|
|
|
var_4 = useholdthinkloop( var_0 );
|
|
|
|
if ( isalive( var_0 ) )
|
|
var_0 common_scripts\utility::_enableweapon();
|
|
|
|
if ( isdefined( var_0 ) )
|
|
maps\mp\_movers::script_mover_unlink_from_use_object( var_0 );
|
|
|
|
if ( !isdefined( self ) )
|
|
return 0;
|
|
|
|
self.inuse = 0;
|
|
self.curprogress = 0;
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_3 updatecrateusestate();
|
|
|
|
return var_4;
|
|
}
|
|
|
|
useholdthinkloop( var_0 )
|
|
{
|
|
while ( var_0 maps\mp\killstreaks\_deployablebox::isplayerusingbox( self ) )
|
|
{
|
|
if ( !var_0 maps\mp\_movers::script_mover_use_can_link( self ) )
|
|
{
|
|
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
|
|
return 0;
|
|
}
|
|
|
|
self.curprogress = self.curprogress + 50 * self.userate;
|
|
|
|
if ( isdefined( self.objectivescaler ) )
|
|
self.userate = 1 * self.objectivescaler;
|
|
else
|
|
self.userate = 1;
|
|
|
|
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 1 );
|
|
|
|
if ( self.curprogress >= self.usetime )
|
|
{
|
|
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
|
|
return maps\mp\_utility::isreallyalive( var_0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
if ( isdefined( self ) )
|
|
var_0 maps\mp\gametypes\_gameobjects::updateuiprogress( self, 0 );
|
|
|
|
return 0;
|
|
}
|
|
|
|
createuseent()
|
|
{
|
|
var_0 = spawn( "script_origin", self.origin );
|
|
var_0.curprogress = 0;
|
|
var_0.usetime = 0;
|
|
var_0.userate = 3000;
|
|
var_0.inuse = 0;
|
|
var_0.id = self.id;
|
|
var_0 linkto( self );
|
|
var_0 thread deleteuseent( self );
|
|
return var_0;
|
|
}
|
|
|
|
deleteuseent( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
var_0 waittill( "death" );
|
|
|
|
if ( isdefined( self.usedby ) )
|
|
{
|
|
foreach ( var_2 in self.usedby )
|
|
{
|
|
var_2 setclientomnvar( "ui_securing", 0 );
|
|
var_2.ui_securing = undefined;
|
|
}
|
|
}
|
|
|
|
self delete();
|
|
}
|
|
|
|
airdropdetonateonstuck()
|
|
{
|
|
self endon( "death" );
|
|
self waittill( "missile_stuck" );
|
|
self detonate();
|
|
}
|
|
|
|
throw_linked_care_packages( var_0, var_1, var_2, var_3 )
|
|
{
|
|
if ( isdefined( level.carepackages ) )
|
|
{
|
|
foreach ( var_5 in level.carepackages )
|
|
{
|
|
if ( isdefined( var_5.inuse ) && var_5.inuse )
|
|
continue;
|
|
|
|
var_6 = var_5 getlinkedparent();
|
|
|
|
if ( isdefined( var_6 ) && var_6 == var_0 )
|
|
{
|
|
thread spawn_new_care_package( var_5, var_1, var_2 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
maps\mp\_utility::delaythread( 1.0, ::remove_care_packages_in_volume, var_3 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
spawn_new_care_package( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = var_0.owner;
|
|
var_4 = var_0.droptype;
|
|
var_5 = var_0.cratetype;
|
|
var_6 = var_0.origin;
|
|
var_0 deletecrate();
|
|
var_7 = var_3 createairdropcrate( var_3, var_4, var_5, var_6 + var_1, var_6 + var_1 );
|
|
var_7.droppingtoground = 1;
|
|
var_7 thread [[ level.cratetypes[var_7.droptype][var_7.cratetype].func ]]( var_7.droptype );
|
|
common_scripts\utility::waitframe();
|
|
var_7 clonebrushmodeltoscriptmodel( level.airdropcratecollision );
|
|
var_7 thread common_scripts\utility::entity_path_disconnect_thread( 1.0 );
|
|
var_7 physicslaunchserver( var_7.origin, var_2 );
|
|
|
|
if ( isbot( var_7.owner ) )
|
|
{
|
|
wait 0.1;
|
|
var_7.owner notify( "new_crate_to_take" );
|
|
}
|
|
}
|
|
|
|
remove_care_packages_in_volume( var_0 )
|
|
{
|
|
if ( isdefined( level.carepackages ) )
|
|
{
|
|
foreach ( var_2 in level.carepackages )
|
|
{
|
|
if ( isdefined( var_2 ) && isdefined( var_2.friendlymodel ) && var_2.friendlymodel istouching( var_0 ) )
|
|
var_2 deletecrate();
|
|
}
|
|
}
|
|
}
|
|
|
|
get_dummy_crate_model()
|
|
{
|
|
return "carepackage_dummy_iw6";
|
|
}
|
|
|
|
get_enemy_crate_model()
|
|
{
|
|
return "carepackage_enemy_iw6";
|
|
}
|
|
|
|
get_friendly_crate_model()
|
|
{
|
|
return "carepackage_friendly_iw6";
|
|
}
|
|
|
|
get_dummy_juggernaut_crate_model()
|
|
{
|
|
return "mp_juggernaut_carepackage_dummy";
|
|
}
|
|
|
|
get_enemy_juggernaut_crate_model()
|
|
{
|
|
return "mp_juggernaut_carepackage_red";
|
|
}
|
|
|
|
get_friendly_juggernaut_crate_model()
|
|
{
|
|
return "mp_juggernaut_carepackage";
|
|
}
|