2024-02-13 13:20:49 +01:00

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";
}