2283 lines
79 KiB
Plaintext
2283 lines
79 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
build_pillageitem_arrays( var_0 )
|
|
{
|
|
if ( !isdefined( level.pillageitems ) )
|
|
level.pillageitems = [];
|
|
|
|
if ( !isdefined( level.pillageitems[var_0] ) )
|
|
level.pillageitems[var_0] = [];
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "easy":
|
|
build_pillageitem_array( var_0, "attachment", level.pillageinfo.easy_attachment );
|
|
build_pillageitem_array( var_0, "soflam", level.pillageinfo.easy_soflam );
|
|
build_pillageitem_array( var_0, "explosive", level.pillageinfo.easy_explosive );
|
|
build_pillageitem_array( var_0, "clip", level.pillageinfo.easy_clip );
|
|
build_pillageitem_array( var_0, "money", level.pillageinfo.easy_money );
|
|
build_pillageitem_array( var_0, "pet_leash", level.pillageinfo.easy_leash );
|
|
build_pillageitem_array( var_0, "specialammo", level.pillageinfo.easy_specialammo );
|
|
break;
|
|
case "medium":
|
|
build_pillageitem_array( var_0, "attachment", level.pillageinfo.medium_attachment );
|
|
build_pillageitem_array( var_0, "explosive", level.pillageinfo.medium_explosive );
|
|
build_pillageitem_array( var_0, "soflam", level.pillageinfo.medium_soflam );
|
|
build_pillageitem_array( var_0, "clip", level.pillageinfo.medium_clip );
|
|
build_pillageitem_array( var_0, "money", level.pillageinfo.medium_money );
|
|
build_pillageitem_array( var_0, "pet_leash", level.pillageinfo.medium_leash );
|
|
build_pillageitem_array( var_0, "trophy", level.pillageinfo.medium_trophy );
|
|
build_pillageitem_array( var_0, "specialammo", level.pillageinfo.medium_specialammo );
|
|
break;
|
|
case "hard":
|
|
build_pillageitem_array( var_0, "attachment", level.pillageinfo.hard_attachment );
|
|
build_pillageitem_array( var_0, "soflam", level.pillageinfo.hard_soflam );
|
|
build_pillageitem_array( var_0, "explosive", level.pillageinfo.hard_explosive );
|
|
build_pillageitem_array( var_0, "maxammo", level.pillageinfo.hard_maxammo );
|
|
build_pillageitem_array( var_0, "money", level.pillageinfo.hard_money );
|
|
build_pillageitem_array( var_0, "pet_leash", level.pillageinfo.hard_leash );
|
|
build_pillageitem_array( var_0, "trophy", level.pillageinfo.hard_trophy );
|
|
build_pillageitem_array( var_0, "specialammo", level.pillageinfo.hard_specialammo );
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( level.custom_build_pillageitem_array_func ) )
|
|
[[ level.custom_build_pillageitem_array_func ]]( var_0 );
|
|
|
|
if ( isdefined( level.locker_build_pillageitem_array_func ) )
|
|
[[ level.locker_build_pillageitem_array_func ]]( var_0 );
|
|
}
|
|
|
|
build_pillageitem_array( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isdefined( var_2 ) )
|
|
return;
|
|
|
|
var_3 = spawnstruct();
|
|
var_3.ref = var_1;
|
|
var_3.chance = var_2;
|
|
level.pillageitems[var_0][level.pillageitems[var_0].size] = var_3;
|
|
}
|
|
|
|
pillage_init()
|
|
{
|
|
level.pillage_areas = [];
|
|
level.pillageable_explosives = [ "alienclaymore_mp", "alienbetty_mp", "alienmortar_shell_mp" ];
|
|
level.pillageable_attachments = [ "reflex", "eotech", "rof", "grip", "barrelrange", "acog", "firetypeburst", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_dmr = [ "eotech", "reflex", "firetypeburst", "barrelrange", "acog", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_sg = [ "reflex", "grip", "eotech", "barrelrange", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_sg_fp6 = [ "reflex", "grip", "eotech", "barrelrange", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_ar = [ "reflex", "eotech", "grip", "rof", "barrelrange", "acog", "firetypeburst", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_ar_sc2010 = [ "reflex", "eotech", "grip", "firetypeburst", "acog", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_ar_honeybadger = [ "reflex", "eotech", "grip", "rof", "acog", "firetypeburst", "xmags" ];
|
|
level.pillageable_attachments_smg_k7 = [ "reflex", "eotech", "rof", "grip", "acog", "barrelrange", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_smg = [ "reflex", "eotech", "rof", "grip", "barrelrange", "acog", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_aliendlc23 = [ "rof", "grip", "barrelrange", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_sr = [ "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_lmg = [ "rof", "grip", "reflex", "eotech", "acog", "barrelrange", "xmags", "alienmuzzlebrake" ];
|
|
level.pillageable_attachments_lmg_kac = [ "rof", "barrelrange", "xmags", "alienmuzzlebrake" ];
|
|
level.offhand_explosives = [ "alienclaymore_mp", "alienbetty_mp", "alienmortar_shell_mp", "aliensemtex_mp" ];
|
|
level.offhand_secondaries = [ "alienflare_mp", "alienthrowingknife_mp", "alientrophy_mp" ];
|
|
|
|
if ( isdefined( level.custom_pillageinitfunc ) )
|
|
[[ level.custom_pillageinitfunc ]]();
|
|
|
|
if ( isdefined( level.custom_lockerpillageinitfunc ) )
|
|
[[ level.custom_lockerpillageinitfunc ]]();
|
|
|
|
level.alien_crafting_items = undefined;
|
|
|
|
if ( isdefined( level.crafting_item_table ) )
|
|
level.alien_crafting_items = level.crafting_item_table;
|
|
|
|
var_0 = common_scripts\utility::getstructarray( "pillage_area", "targetname" );
|
|
|
|
foreach ( var_8, var_2 in var_0 )
|
|
{
|
|
if ( !isdefined( level.pillage_areas[var_8] ) )
|
|
level.pillage_areas[var_8] = [];
|
|
|
|
level.pillage_areas[var_8]["easy"] = [];
|
|
level.pillage_areas[var_8]["medium"] = [];
|
|
level.pillage_areas[var_8]["hard"] = [];
|
|
var_3 = common_scripts\utility::getstructarray( var_2.target, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5.script_noteworthy ) )
|
|
{
|
|
var_6 = strtok( var_5.script_noteworthy, "," );
|
|
var_5.pillage_type = var_6[0];
|
|
|
|
if ( isdefined( var_6[1] ) )
|
|
var_5.script_model = var_6[1];
|
|
|
|
if ( isdefined( var_6[2] ) )
|
|
var_5.default_item_type = var_6[2];
|
|
|
|
switch ( var_5.pillage_type )
|
|
{
|
|
case "easy":
|
|
level.pillage_areas[var_8]["easy"][level.pillage_areas[var_8]["easy"].size] = var_5;
|
|
break;
|
|
case "medium":
|
|
level.pillage_areas[var_8]["medium"][level.pillage_areas[var_8]["medium"].size] = var_5;
|
|
break;
|
|
case "hard":
|
|
level.pillage_areas[var_8]["hard"][level.pillage_areas[var_8]["hard"].size] = var_5;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ( var_8, var_2 in level.pillage_areas )
|
|
{
|
|
if ( getdvar( "scr_debug_pillage" ) != "1" )
|
|
{
|
|
level.pillage_areas[var_8]["easy"] = remove_random_pillage_spots( level.pillage_areas[var_8]["easy"] );
|
|
level.pillage_areas[var_8]["medium"] = remove_random_pillage_spots( level.pillage_areas[var_8]["medium"] );
|
|
level.pillage_areas[var_8]["hard"] = remove_random_pillage_spots( level.pillage_areas[var_8]["hard"] );
|
|
}
|
|
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["easy"] );
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["medium"] );
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["hard"] );
|
|
}
|
|
|
|
build_pillageitem_arrays( "easy" );
|
|
build_pillageitem_arrays( "medium" );
|
|
build_pillageitem_arrays( "hard" );
|
|
level.use_alternate_specialammo_pillage_amounts = 0;
|
|
}
|
|
|
|
get_hintstring_for_pillaged_item( var_0 )
|
|
{
|
|
var_0 = "" + var_0;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "50":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_50";
|
|
case "100":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_100";
|
|
case "200":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_200";
|
|
case "250":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_250";
|
|
case "500":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_500";
|
|
case "alienclaymore_mp":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_CLAYMORE";
|
|
case "alienbetty_mp":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_BETTY";
|
|
case "alienmortar_shell_mp":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_MORTARSHELL";
|
|
case "flare":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_FLARE";
|
|
case "maxammo":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_AMMO";
|
|
case "grenade":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_GRENADE";
|
|
case "attachment_noGL":
|
|
case "attachment":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_ATTACHMENT";
|
|
case "clip":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_CLIP";
|
|
case "soflam":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_SOFLAM";
|
|
case "pet_leash":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_PET_LEASH";
|
|
case "trophy":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_TROPHY";
|
|
case "combined_ammo":
|
|
case "specialammo":
|
|
case "explosive_ammo":
|
|
case "incendiary_ammo":
|
|
case "ap_ammo":
|
|
case "stun_ammo":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_SPECIALAMMO";
|
|
}
|
|
|
|
if ( isdefined( level.get_hintstring_for_pillaged_item_func ) )
|
|
return [[ level.get_hintstring_for_pillaged_item_func ]]( var_0 );
|
|
}
|
|
|
|
get_hintstring_for_item_pickup( var_0 )
|
|
{
|
|
var_0 = "" + var_0;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "alienclaymore_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_CLAYMORE";
|
|
case "alienbetty_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_BOUNCING_BETTY";
|
|
case "alienmortar_shell_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_MORTARSHELL";
|
|
case "aliensemtex_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_GRENADE";
|
|
case "viewmodel_flare":
|
|
case "flare":
|
|
case "alienflare_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_FLARE";
|
|
case "maxammo":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_AMMO";
|
|
case "money":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_MONEY";
|
|
case "reflex":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_REFLEX";
|
|
case "reflexsmg":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_REFLEX";
|
|
case "eotech":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_EOTECH";
|
|
case "thermal":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_THERMAL";
|
|
case "firetypeburst":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_FIRETYPEBURST";
|
|
case "firetypeburstdmr":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_FIRETYPEBURST";
|
|
case "barrelrange":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_BARRELRANGE";
|
|
case "barrelrange03":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_BARRELRANGE";
|
|
case "rof":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_ROF";
|
|
case "acog":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_ACOG";
|
|
case "clip":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_CLIP";
|
|
case "soflam":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_SOFLAM";
|
|
case "grip":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_GRIP";
|
|
case "griphide":
|
|
return &"ALIEN_COLLECTIBLES_FOUND_GRIP";
|
|
case "alienmuzzlebrakesn":
|
|
case "alienmuzzlebrakesg":
|
|
case "alienmuzzlebrake":
|
|
return &"ALIENS_PATCH_FOUND_ARK";
|
|
case "pet_leash":
|
|
case "alienthrowingknife_mp":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_PET_LEASH";
|
|
case "alientrophy_mp":
|
|
case "trophy":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_TROPHY";
|
|
case "ap_ammo":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_AP_AMMO";
|
|
case "incendiary_ammo":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_IN_AMMO";
|
|
case "explosive_ammo":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_EXP_AMMO";
|
|
case "stun_ammo":
|
|
return &"ALIEN_COLLECTIBLES_PICKUP_STUN_AMMO";
|
|
case "combined_ammo":
|
|
return &"ALIENS_PATCH_PICKUP_COMBINED_AMMO";
|
|
case "xmags":
|
|
return &"ALIENS_PATCH_FOUND_XMAGS";
|
|
}
|
|
|
|
if ( isdefined( level.get_hintstring_for_item_pickup_func ) )
|
|
return [[ level.get_hintstring_for_item_pickup_func ]]( var_0 );
|
|
}
|
|
|
|
remove_random_pillage_spots( var_0 )
|
|
{
|
|
var_1 = int( var_0.size * 0.5 );
|
|
var_0 = common_scripts\utility::array_randomize( var_0 );
|
|
var_2 = [];
|
|
|
|
for ( var_3 = 0; var_3 < var_0.size; var_3++ )
|
|
{
|
|
if ( var_3 < var_1 )
|
|
{
|
|
var_0[var_3].not_used = 1;
|
|
continue;
|
|
}
|
|
|
|
var_2[var_2.size] = var_0[var_3];
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
create_pillage_spots( var_0 )
|
|
{
|
|
var_1 = 22500;
|
|
var_2 = 90000;
|
|
var_3 = cos( 75 );
|
|
|
|
foreach ( var_11, var_5 in var_0 )
|
|
{
|
|
if ( !isdefined( var_5.is_locker ) )
|
|
{
|
|
var_6 = 0;
|
|
var_7 = 0;
|
|
|
|
foreach ( var_9 in level.players )
|
|
{
|
|
if ( distance2dsquared( var_9.origin, var_5.origin ) < var_1 )
|
|
var_6 = 1;
|
|
|
|
if ( !var_6 && distance2dsquared( var_9.origin, var_5.origin ) < var_2 )
|
|
var_6 = common_scripts\utility::within_fov( var_9 geteye(), var_9.angles, var_5.origin + ( 0, 0, 5 ), var_3 );
|
|
}
|
|
|
|
if ( var_6 )
|
|
{
|
|
var_7 = 1;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
var_5.pillage_trigger = spawn( "script_model", var_5.origin );
|
|
|
|
if ( isdefined( var_5.script_model ) )
|
|
{
|
|
var_5.pillage_trigger setmodel( var_5.script_model );
|
|
var_5.pillage_trigger.angles = var_5.angles;
|
|
}
|
|
else
|
|
var_5.pillage_trigger setmodel( "tag_origin" );
|
|
|
|
var_5.pillage_trigger setcursorhint( "HINT_NOICON" );
|
|
var_5.pillage_trigger makeusable();
|
|
var_5.pillage_trigger sethintstring( &"ALIEN_COLLECTIBLES_OPEN" );
|
|
|
|
if ( isdefined( var_5.is_locker ) && var_5.is_locker )
|
|
{
|
|
var_5.pillage_trigger.angles = var_5.angles;
|
|
var_5.pillage_trigger.is_locker = 1;
|
|
}
|
|
|
|
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
|
|
maps\mp\alien\_outline_proto::add_to_outline_pillage_watch_list( var_5.pillage_trigger, 0 );
|
|
|
|
var_5 thread pillage_spot_think();
|
|
var_5.enabled = 1;
|
|
|
|
if ( var_11 % 2 == 0 )
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
pillage_spot_think()
|
|
{
|
|
self notify( "stop_pillage_spot_think" );
|
|
self endon( "stop_pillage_spot_think" );
|
|
|
|
for (;;)
|
|
{
|
|
self.pillage_trigger waittill( "trigger", var_0 );
|
|
|
|
if ( !isplayer( var_0 ) )
|
|
continue;
|
|
|
|
if ( var_0 maps\mp\alien\_utility::is_holding_deployable() || var_0 maps\mp\alien\_utility::has_special_weapon() )
|
|
{
|
|
var_0 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 );
|
|
continue;
|
|
}
|
|
|
|
if ( var_0 maps\mp\alien\_prestige::prestige_getnodeployables() == 1.0 )
|
|
{
|
|
var_0 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIENS_PRESTIGE_NO_DEPLOYABLES_PICKUP", 3 );
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( var_0.current_crafting_recipe ) && isdefined( self.default_item_type ) && self.default_item_type == "crafting" )
|
|
{
|
|
var_0 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_CRAFTING_NO_RECIPE", 3 );
|
|
continue;
|
|
}
|
|
|
|
if ( !isdefined( self.searched ) )
|
|
{
|
|
if ( isdefined( level.locker_key_check_func ) )
|
|
{
|
|
if ( [[ level.locker_key_check_func ]]( var_0 ) )
|
|
continue;
|
|
}
|
|
|
|
self.pillage_trigger makeunusable();
|
|
self.enabled = 0;
|
|
|
|
if ( self.pillage_trigger useholdthink( var_0, level.pillageinfo.default_use_time ) )
|
|
{
|
|
self.searched = 1;
|
|
var_1 = get_pillaged_item( self, var_0 );
|
|
self.pillage_trigger setmodel( "tag_origin" );
|
|
self.pillageinfo = spawnstruct();
|
|
var_0 maps\mp\alien\_achievement::update_scavenge_achievement();
|
|
|
|
switch ( var_1.type )
|
|
{
|
|
case "money":
|
|
if ( var_0 maps\mp\alien\_persistence::get_player_currency() < var_0.maxcurrency )
|
|
{
|
|
var_0 maps\mp\alien\_persistence::give_player_currency( var_1.count, undefined, undefined, 1 );
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self.pillage_trigger setmodel( level.pillageinfo.money_stack );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "money";
|
|
self.pillageinfo.amount = var_1.count;
|
|
}
|
|
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.count );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
|
|
if ( var_1.count == 500 )
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
|
|
|
|
break;
|
|
case "pet_leash":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.leash_model );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "pet_leash";
|
|
self.pillageinfo.item = "alienthrowingknife_mp";
|
|
self.pillageinfo.ammo = 1;
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
|
|
break;
|
|
case "explosive":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.explosive_type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( getweaponmodel( var_1.explosive_type ) );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.explosive_type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "explosive";
|
|
self.pillageinfo.item = var_1.explosive_type;
|
|
self.pillageinfo.ammo = 2;
|
|
break;
|
|
case "grenade":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( getweaponmodel( "aliensemtex_mp" ) );
|
|
var_2 = get_hintstring_for_item_pickup( "aliensemtex_mp" );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "explosive";
|
|
self.pillageinfo.item = "aliensemtex_mp";
|
|
self.pillageinfo.ammo = 2;
|
|
break;
|
|
case "flare":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.flare_model );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "flare";
|
|
self.pillageinfo.item = "alienflare_mp";
|
|
self.pillageinfo.ammo = 1;
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
|
|
break;
|
|
case "attachment_noGL":
|
|
case "attachment":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
var_3 = var_0 get_attachment_for_weapon();
|
|
|
|
if ( var_3 == "alienmuzzlebrake" )
|
|
self.pillage_trigger setmodel( level.pillageinfo.alienattachment_model );
|
|
else
|
|
self.pillage_trigger setmodel( level.pillageinfo.attachment_model );
|
|
|
|
var_2 = get_hintstring_for_item_pickup( var_3 );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "attachment";
|
|
self.pillageinfo.attachment = var_3;
|
|
break;
|
|
case "maxammo":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.maxammo_model );
|
|
var_2 = get_hintstring_for_item_pickup( "maxammo" );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "maxammo";
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
|
|
break;
|
|
case "clip":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.clip_model );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "clip";
|
|
break;
|
|
case "specialammo":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.clip_model );
|
|
self.pillage_trigger makeusable();
|
|
|
|
if ( var_0 maps\mp\alien\_utility::has_stun_ammo() && var_0 maps\mp\alien\_utility::has_incendiary_ammo() && var_0 maps\mp\alien\_utility::has_explosive_ammo() && var_0 maps\mp\alien\_utility::has_ap_ammo() )
|
|
self.pillageinfo.type = "combined_ammo";
|
|
else if ( var_0 maps\mp\alien\_utility::has_stun_ammo() )
|
|
self.pillageinfo.type = "stun_ammo";
|
|
else if ( var_0 maps\mp\alien\_utility::has_incendiary_ammo() )
|
|
self.pillageinfo.type = "incendiary_ammo";
|
|
else if ( var_0 maps\mp\alien\_utility::has_explosive_ammo() )
|
|
self.pillageinfo.type = "explosive_ammo";
|
|
else if ( var_0 maps\mp\alien\_utility::has_ap_ammo() )
|
|
self.pillageinfo.type = "ap_ammo";
|
|
else
|
|
self.pillageinfo.type = common_scripts\utility::random( [ "ap_ammo", "explosive_ammo", "incendiary_ammo", "stun_ammo" ] );
|
|
|
|
var_2 = get_hintstring_for_item_pickup( self.pillageinfo.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
break;
|
|
case "soflam":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.soflam_model );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "soflam";
|
|
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
|
|
break;
|
|
case "trophy":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
self.pillage_trigger setmodel( level.pillageinfo.trophy_model );
|
|
var_2 = get_hintstring_for_item_pickup( var_1.type );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "trophy";
|
|
self.pillageinfo.item = "alientrophy_mp";
|
|
self.pillageinfo.ammo = 1;
|
|
break;
|
|
case "crafting":
|
|
var_2 = get_hintstring_for_pillaged_item( var_1.type );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
var_4 = var_0 get_crafting_ingredient();
|
|
self.pillage_trigger setmodel( get_crafting_model( var_4 ) );
|
|
var_2 = get_hintstring_for_item_pickup( var_4 );
|
|
self.pillage_trigger sethintstring( var_2 );
|
|
self.pillage_trigger makeusable();
|
|
self.pillageinfo.type = "crafting";
|
|
self.pillageinfo.craftingitem = var_4;
|
|
break;
|
|
case "intel":
|
|
if ( isdefined( level.intel_pillage_show_func ) )
|
|
self [[ level.intel_pillage_show_func ]]();
|
|
|
|
break;
|
|
default:
|
|
if ( isdefined( level.level_specific_pillage_show_func ) )
|
|
self [[ level.level_specific_pillage_show_func ]]( var_0, "searched", var_1 );
|
|
|
|
break;
|
|
}
|
|
|
|
if ( isdefined( self.drop_override_func ) )
|
|
self [[ self.drop_override_func ]]( var_0 );
|
|
else if ( isdefined( self.pillage_trigger ) )
|
|
self.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
else
|
|
{
|
|
self.pillage_trigger makeusable();
|
|
self.enabled = 1;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( self.pillageinfo ) )
|
|
{
|
|
switch ( self.pillageinfo.type )
|
|
{
|
|
case "explosive":
|
|
var_0 try_to_give_player_explosives( self );
|
|
break;
|
|
case "maxammo":
|
|
if ( var_0 cangive_maxammo() )
|
|
{
|
|
var_0 give_maxammo();
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self.pillage_trigger makeusable();
|
|
var_0 maps\mp\_utility::setlowermessage( "max_ammo", &"ALIEN_COLLECTIBLES_AMMO_MAX", 3 );
|
|
}
|
|
|
|
break;
|
|
case "money":
|
|
if ( var_0 maps\mp\alien\_persistence::get_player_currency() < var_0.maxcurrency )
|
|
{
|
|
var_0 maps\mp\alien\_persistence::give_player_currency( self.pillageinfo.amount, undefined, undefined, 1 );
|
|
var_2 = get_hintstring_for_pillaged_item( self.pillageinfo.amount );
|
|
var_0 thread show_pillage_text( var_2 );
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
var_0 maps\mp\_utility::setlowermessage( "max_money", &"ALIEN_COLLECTIBLES_MONEY_MAX", 3 );
|
|
|
|
break;
|
|
case "attachment":
|
|
if ( var_0 add_attachment_to_weapon( self.pillageinfo.attachment, self ) )
|
|
delete_pillage_trigger();
|
|
|
|
break;
|
|
case "flare":
|
|
var_0 try_to_give_player_flares( self );
|
|
break;
|
|
case "clip":
|
|
if ( var_0 cangive_ammo_clip() )
|
|
{
|
|
var_0 give_ammo_clip();
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self.pillage_trigger makeusable();
|
|
var_0 maps\mp\_utility::setlowermessage( "max_ammo", &"ALIEN_COLLECTIBLES_AMMO_MAX", 3 );
|
|
}
|
|
|
|
break;
|
|
case "soflam":
|
|
if ( var_0 cangive_soflam() )
|
|
{
|
|
var_0 give_soflam();
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self.pillage_trigger makeusable();
|
|
|
|
if ( var_0 hasweapon( "aliensoflam_mp" ) )
|
|
var_0 maps\mp\_utility::setlowermessage( "have_soflam", &"ALIEN_COLLECTIBLES_SOFLAM_HAD", 3 );
|
|
else
|
|
var_0 maps\mp\_utility::setlowermessage( "too_many", &"ALIEN_COLLECTIBLES_SOFLAM_HAD", 3 );
|
|
}
|
|
|
|
break;
|
|
case "pet_leash":
|
|
var_0 try_to_give_player_the_leash( self );
|
|
break;
|
|
case "trophy":
|
|
var_0 try_to_give_player_trophy( self );
|
|
break;
|
|
case "stun_ammo":
|
|
var_0 maps\mp\alien\_deployablebox_functions::default_specialammo_onusedeployable( undefined, 0, 1, "deployable_specialammo" );
|
|
delete_pillage_trigger();
|
|
break;
|
|
case "incendiary_ammo":
|
|
var_0 maps\mp\alien\_deployablebox_functions::default_specialammo_onusedeployable( undefined, 0, 1, "deployable_specialammo_in" );
|
|
delete_pillage_trigger();
|
|
break;
|
|
case "ap_ammo":
|
|
var_0 maps\mp\alien\_deployablebox_functions::default_specialammo_onusedeployable( undefined, 0, 1, "deployable_specialammo_ap" );
|
|
delete_pillage_trigger();
|
|
break;
|
|
case "explosive_ammo":
|
|
var_0 maps\mp\alien\_deployablebox_functions::default_specialammo_onusedeployable( undefined, 0, 1, "deployable_specialammo_explo" );
|
|
delete_pillage_trigger();
|
|
break;
|
|
case "combined_ammo":
|
|
var_0 maps\mp\alien\_deployablebox_functions::default_specialammo_onusedeployable( undefined, 0, 1, "deployable_specialammo_comb" );
|
|
delete_pillage_trigger();
|
|
break;
|
|
case "crafting":
|
|
if ( var_0 cangive_crafting_item( self.pillageinfo.craftingitem ) )
|
|
{
|
|
var_0 give_crafting_item( self.pillageinfo.craftingitem );
|
|
var_0 playlocalsound( "extinction_item_pickup" );
|
|
delete_pillage_trigger();
|
|
}
|
|
else
|
|
self.pillage_trigger makeusable();
|
|
|
|
break;
|
|
default:
|
|
if ( isdefined( level.level_specific_pillage_show_func ) )
|
|
self [[ level.level_specific_pillage_show_func ]]( var_0, "pick_up" );
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
drop_pillage_item_on_ground()
|
|
{
|
|
if ( self.model != "tag_origin" )
|
|
{
|
|
var_0 = ( 0, 0, 20 );
|
|
var_1 = ( 0, 0, 2 );
|
|
var_2 = ( 0, 0, 0 );
|
|
var_3 = getgroundposition( self.origin + var_0, 2 );
|
|
|
|
switch ( self.model )
|
|
{
|
|
case "weapon_baseweapon_clip":
|
|
var_2 = ( 0, 0, 4 );
|
|
break;
|
|
case "mp_trophy_system_folded_iw6":
|
|
var_2 = ( 0, 0, 12 );
|
|
break;
|
|
case "weapon_scavenger_grenadebag":
|
|
var_2 = ( 0, 0, 6 );
|
|
break;
|
|
case "weapon_soflam":
|
|
var_2 = ( 0, 0, 6 );
|
|
break;
|
|
case "vehicle_pickup_keys":
|
|
var_2 = ( 0, 0, 6 );
|
|
self.angles = ( 0, 0, 83 );
|
|
break;
|
|
case "weapon_alien_muzzlebreak":
|
|
var_2 = ( 0, 0, 4 );
|
|
break;
|
|
case "weapon_alien_cortex_container":
|
|
var_2 = ( 0, 0, 7 );
|
|
break;
|
|
case "weapon_knife_iw6":
|
|
case "weapon_canister_bomb":
|
|
case "weapon_concussion_grenade":
|
|
case "mil_emergency_flare_mp":
|
|
var_2 = var_1;
|
|
break;
|
|
}
|
|
|
|
self.origin = var_3 + var_2;
|
|
}
|
|
}
|
|
|
|
delete_pillage_trigger()
|
|
{
|
|
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
|
|
maps\mp\alien\_outline_proto::remove_from_outline_pillage_watch_list( self.pillage_trigger );
|
|
|
|
self.pillage_trigger delete();
|
|
self.pillageinfo.type = undefined;
|
|
}
|
|
|
|
get_pillaged_item( var_0, var_1 )
|
|
{
|
|
var_5 = [];
|
|
|
|
if ( check_for_existing_pet_bombs() > 1 )
|
|
var_5[var_5.size] = "pet_leash";
|
|
|
|
if ( !var_1 can_use_attachment() )
|
|
var_5[var_5.size] = "attachment";
|
|
|
|
if ( isdefined( level.intel_pillage_allowed_func ) && !var_1 [[ level.intel_pillage_allowed_func ]]() )
|
|
var_5[var_5.size] = "intel";
|
|
|
|
if ( !var_1 should_find_crafting_items() )
|
|
var_5[var_5.size] = "crafting";
|
|
|
|
var_2 = get_random_pillage_item( level.pillageitems[var_0.pillage_type], var_5 );
|
|
var_6 = 0;
|
|
|
|
while ( isdefined( var_1.last_item ) && var_1.last_item == var_2 )
|
|
{
|
|
var_2 = get_random_pillage_item( level.pillageitems[var_0.pillage_type], var_5 );
|
|
var_6++;
|
|
|
|
if ( var_6 % 10 == 0 )
|
|
break;
|
|
}
|
|
|
|
var_1.last_item = var_2;
|
|
|
|
if ( isdefined( var_0.default_item_type ) )
|
|
var_2 = var_0.default_item_type;
|
|
|
|
var_3 = spawnstruct();
|
|
|
|
switch ( var_2 )
|
|
{
|
|
case "attachment":
|
|
var_3.type = "attachment";
|
|
break;
|
|
case "soflam":
|
|
var_3.type = "soflam";
|
|
break;
|
|
case "explosive":
|
|
switch ( randomint( 3 ) )
|
|
{
|
|
case 0:
|
|
var_3.type = "grenade";
|
|
var_3.count = 2;
|
|
break;
|
|
case 1:
|
|
if ( var_0.pillage_type != "easy" )
|
|
{
|
|
var_3.explosive_type = choose_random_explosive_type();
|
|
var_3.type = "explosive";
|
|
var_3.count = 2;
|
|
}
|
|
else
|
|
{
|
|
var_3.type = "flare";
|
|
var_3.count = 1;
|
|
}
|
|
|
|
break;
|
|
case 2:
|
|
var_3.type = "flare";
|
|
var_3.count = 1;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case "clip":
|
|
var_3.type = "clip";
|
|
var_3.count = 1;
|
|
break;
|
|
case "maxammo":
|
|
var_3.type = "maxammo";
|
|
var_3.count = 1;
|
|
break;
|
|
case "money":
|
|
var_4 = 50 + randomint( 2 ) * 50;
|
|
|
|
if ( var_0.pillage_type == "medium" )
|
|
var_4 = 200 + randomint( 2 ) * 50;
|
|
|
|
if ( var_0.pillage_type == "hard" )
|
|
var_4 = 500;
|
|
|
|
var_3.type = "money";
|
|
var_3.count = var_4;
|
|
break;
|
|
case "pet_leash":
|
|
var_3.type = "pet_leash";
|
|
var_3.count = 1;
|
|
break;
|
|
case "trophy":
|
|
var_3.type = "trophy";
|
|
var_3.count = 1;
|
|
break;
|
|
case "specialammo":
|
|
var_3.type = "specialammo";
|
|
break;
|
|
case "crafting":
|
|
var_3.type = "crafting";
|
|
break;
|
|
case "locker_weapon":
|
|
var_3.type = "locker_weapon";
|
|
var_3.count = 1;
|
|
break;
|
|
case "locker_key":
|
|
var_3.type = "locker_key";
|
|
var_3.count = 1;
|
|
break;
|
|
case "intel":
|
|
var_3.type = "intel";
|
|
var_3.count = 1;
|
|
break;
|
|
}
|
|
|
|
var_1 playlocalsound( "extinction_item_pickup" );
|
|
return var_3;
|
|
}
|
|
|
|
get_random_pillage_item( var_0, var_1 )
|
|
{
|
|
var_2 = [];
|
|
var_3 = 0;
|
|
|
|
foreach ( var_5 in var_0 )
|
|
{
|
|
if ( common_scripts\utility::array_contains( var_1, var_5.ref ) )
|
|
continue;
|
|
|
|
if ( var_5.chance == 0 )
|
|
continue;
|
|
|
|
var_2[var_2.size] = var_5;
|
|
var_3 = var_3 + var_5.chance;
|
|
}
|
|
|
|
var_7 = randomintrange( 0, var_3 + 1 );
|
|
var_8 = 0;
|
|
|
|
foreach ( var_5 in var_2 )
|
|
{
|
|
var_8 = var_8 + var_5.chance;
|
|
|
|
if ( var_7 <= var_8 )
|
|
return var_5.ref;
|
|
}
|
|
}
|
|
|
|
show_pillage_text( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
|
|
if ( isdefined( self.usebartext ) )
|
|
return;
|
|
|
|
var_1 = level.primaryprogressbarfontsize;
|
|
var_2 = "objective";
|
|
|
|
if ( level.splitscreen )
|
|
var_1 = 1.3;
|
|
|
|
self.usebartext = maps\mp\gametypes\_hud_util::createprimaryprogressbartext( 0, 25, var_1, var_2 );
|
|
self.usebartext settext( var_0 );
|
|
self.usebartext setpulsefx( 50, 2000, 800 );
|
|
wait 3;
|
|
self.usebartext maps\mp\gametypes\_hud_util::destroyelem();
|
|
self.usebartext = undefined;
|
|
}
|
|
|
|
choose_random_explosive_type()
|
|
{
|
|
return common_scripts\utility::random( level.pillageable_explosives );
|
|
}
|
|
|
|
try_to_give_player_explosives( var_0 )
|
|
{
|
|
var_1 = var_0.pillageinfo.item;
|
|
var_2 = var_0.pillageinfo.ammo;
|
|
|
|
if ( isdefined( level.try_to_give_player_explosive_override ) )
|
|
{
|
|
if ( ![[ level.try_to_give_player_explosive_override ]]() )
|
|
return;
|
|
}
|
|
|
|
if ( self hasweapon( var_1 ) && self getammocount( var_1 ) > 0 )
|
|
{
|
|
var_3 = self getfractionmaxammo( var_1 );
|
|
|
|
if ( var_3 < 1 )
|
|
{
|
|
var_4 = self getweaponammoclip( var_1 );
|
|
self setweaponammoclip( var_1, var_4 + var_2 );
|
|
self playlocalsound( "grenade_pickup" );
|
|
var_0 delete_pillage_trigger();
|
|
return;
|
|
}
|
|
|
|
maps\mp\_utility::setlowermessage( "max_explosvies", &"ALIEN_COLLECTIBLES_EXPLO_MAX", 3 );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
var_5 = should_swap_weapon( level.offhand_explosives );
|
|
self setoffhandprimaryclass( "other" );
|
|
|
|
if ( !isdefined( var_5 ) )
|
|
{
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
self playlocalsound( "grenade_pickup" );
|
|
var_0 delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self takeweapon( var_5 );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
self playlocalsound( "grenade_pickup" );
|
|
var_0.pillage_trigger setmodel( getweaponmodel( var_5 ) );
|
|
var_6 = get_hintstring_for_item_pickup( var_5 );
|
|
var_0.pillage_trigger sethintstring( var_6 );
|
|
var_0.pillage_trigger makeusable();
|
|
var_0.pillageinfo = spawnstruct();
|
|
var_0.pillageinfo.type = "explosive";
|
|
var_0.pillageinfo.item = var_5;
|
|
var_0.pillageinfo.ammo = self.swapped_weapon_ammocount;
|
|
var_0.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
}
|
|
}
|
|
|
|
try_to_give_player_flares( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
wait 1;
|
|
var_1 = var_0.pillageinfo.item;
|
|
var_2 = var_0.pillageinfo.ammo;
|
|
|
|
if ( isdefined( level.try_to_give_player_flare_override ) )
|
|
{
|
|
if ( ![[ level.try_to_give_player_flare_override ]]() )
|
|
return;
|
|
}
|
|
|
|
if ( self hasweapon( var_1 ) && self getammocount( var_1 ) > 0 )
|
|
{
|
|
var_3 = self getfractionmaxammo( var_1 );
|
|
|
|
if ( var_3 < 1 )
|
|
{
|
|
var_4 = self getweaponammoclip( var_1 );
|
|
var_5 = self getweaponammostock( var_1 );
|
|
self setweaponammoclip( var_1, var_4 + var_5 + 1 );
|
|
var_0 delete_pillage_trigger();
|
|
return;
|
|
}
|
|
|
|
maps\mp\_utility::setlowermessage( "max_flares", &"ALIEN_COLLECTIBLES_FLARE_MAX", 3 );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
var_6 = should_swap_weapon( level.offhand_secondaries );
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
{
|
|
self setoffhandsecondaryclass( "flash" );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
var_0 delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self setoffhandsecondaryclass( "flash" );
|
|
self takeweapon( var_6 );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
var_7 = get_hintstring_for_item_pickup( var_6 );
|
|
var_0.pillage_trigger sethintstring( var_7 );
|
|
var_0.pillage_trigger makeusable();
|
|
var_0.pillageinfo = spawnstruct();
|
|
|
|
if ( var_6 == "alienflare_mp" || var_6 == "iw6_aliendlc21_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.flare_model );
|
|
var_0.pillageinfo.type = "flare";
|
|
}
|
|
else if ( var_6 == "alienthrowingknife_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.leash_model );
|
|
var_0.pillageinfo.type = "pet_leash";
|
|
}
|
|
else if ( var_6 == "alientrophy_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.trophy_model );
|
|
var_0.pillageinfo.type = "trophy";
|
|
}
|
|
|
|
var_0.pillageinfo.item = var_6;
|
|
var_0.pillageinfo.ammo = self.swapped_weapon_ammocount;
|
|
|
|
if ( isdefined( var_0.is_locker ) && isdefined( level.locker_drop_item_on_ground_func ) )
|
|
var_0 [[ level.locker_drop_item_on_ground_func ]]( self );
|
|
else
|
|
var_0.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
}
|
|
}
|
|
|
|
try_to_give_player_trophy( var_0 )
|
|
{
|
|
var_1 = var_0.pillageinfo.item;
|
|
var_2 = var_0.pillageinfo.ammo;
|
|
|
|
if ( isdefined( level.try_to_give_player_trophy_override ) )
|
|
{
|
|
if ( ![[ level.try_to_give_player_trophy_override ]]() )
|
|
return;
|
|
}
|
|
|
|
if ( self hasweapon( var_1 ) && self getammocount( var_1 ) > 0 )
|
|
maps\mp\_utility::setlowermessage( "max_flares", &"ALIEN_COLLECTIBLES_TROPHY_MAX", 3 );
|
|
else
|
|
{
|
|
var_3 = should_swap_weapon( level.offhand_secondaries );
|
|
|
|
if ( !isdefined( var_3 ) )
|
|
{
|
|
self setoffhandsecondaryclass( "flash" );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, 1 );
|
|
var_0 delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self setoffhandsecondaryclass( "flash" );
|
|
self takeweapon( var_3 );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, 1 );
|
|
var_4 = get_hintstring_for_item_pickup( var_3 );
|
|
var_0.pillage_trigger sethintstring( var_4 );
|
|
var_0.pillage_trigger makeusable();
|
|
var_0.pillageinfo = spawnstruct();
|
|
|
|
if ( var_3 == "alienflare_mp" || var_3 == "iw6_aliendlc21_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.flare_model );
|
|
var_0.pillageinfo.type = "flare";
|
|
}
|
|
else if ( var_3 == "alienthrowingknife_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.leash_model );
|
|
var_0.pillageinfo.type = "pet_leash";
|
|
}
|
|
else if ( var_3 == "alientrophy_mp" )
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.trophy_model );
|
|
|
|
var_0.pillageinfo.item = var_3;
|
|
var_0.pillageinfo.ammo = self.swapped_weapon_ammocount;
|
|
|
|
if ( isdefined( var_0.is_locker ) && isdefined( level.locker_drop_item_on_ground_func ) )
|
|
var_0 [[ level.locker_drop_item_on_ground_func ]]( self );
|
|
else
|
|
var_0.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
}
|
|
}
|
|
|
|
try_to_give_player_the_leash( var_0 )
|
|
{
|
|
var_1 = var_0.pillageinfo.item;
|
|
var_2 = var_0.pillageinfo.ammo;
|
|
|
|
if ( isdefined( level.try_to_give_player_leash_override ) )
|
|
{
|
|
if ( ![[ level.try_to_give_player_leash_override ]]() )
|
|
return;
|
|
}
|
|
|
|
if ( self hasweapon( var_1 ) && self getammocount( var_1 ) > 0 )
|
|
{
|
|
var_3 = self getfractionmaxammo( var_1 );
|
|
|
|
if ( var_3 < 1 )
|
|
{
|
|
var_4 = self getweaponammoclip( var_1 );
|
|
var_5 = self getweaponammostock( var_1 );
|
|
self setweaponammoclip( var_1, var_4 + var_5 + 1 );
|
|
var_0 delete_pillage_trigger();
|
|
return;
|
|
}
|
|
|
|
maps\mp\_utility::setlowermessage( "max_leash", &"ALIENS_PATCH_LEASH_MAX", 3 );
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
var_6 = should_swap_weapon( level.offhand_secondaries );
|
|
|
|
if ( !isdefined( var_6 ) )
|
|
{
|
|
self setoffhandsecondaryclass( "throwingknife" );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
var_0 delete_pillage_trigger();
|
|
}
|
|
else
|
|
{
|
|
self setoffhandsecondaryclass( "throwingknife" );
|
|
self takeweapon( var_6 );
|
|
self giveweapon( var_1 );
|
|
self setweaponammoclip( var_1, var_2 );
|
|
var_7 = get_hintstring_for_item_pickup( var_6 );
|
|
var_0.pillage_trigger sethintstring( var_7 );
|
|
var_0.pillage_trigger makeusable();
|
|
var_0.pillageinfo = spawnstruct();
|
|
|
|
if ( var_6 == "alienflare_mp" || var_6 == "iw6_aliendlc21_mp" )
|
|
{
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.flare_model );
|
|
var_0.pillageinfo.type = "flare";
|
|
}
|
|
else if ( var_6 == "alienthrowingknife_mp" )
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.leash_model );
|
|
else if ( var_6 == "alientrophy_mp" )
|
|
{
|
|
var_0.pillageinfo.type = "trophy";
|
|
var_0.pillage_trigger setmodel( level.pillageinfo.trophy_model );
|
|
}
|
|
|
|
var_0.pillageinfo.item = var_6;
|
|
var_0.pillageinfo.ammo = self.swapped_weapon_ammocount;
|
|
|
|
if ( isdefined( var_0.is_locker ) && isdefined( level.locker_drop_item_on_ground_func ) )
|
|
var_0 [[ level.locker_drop_item_on_ground_func ]]( self );
|
|
else
|
|
var_0.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
}
|
|
}
|
|
|
|
should_swap_weapon( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = undefined;
|
|
var_3 = 0;
|
|
var_4 = self getweaponslistoffhands();
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
foreach ( var_8 in var_0 )
|
|
{
|
|
if ( var_6 != var_8 )
|
|
continue;
|
|
|
|
if ( isdefined( var_6 ) && var_6 != "none" && self getammocount( var_6 ) > 0 )
|
|
{
|
|
var_2 = var_6;
|
|
var_3 = self getweaponammoclip( var_6 );
|
|
var_1 = 1;
|
|
break;
|
|
}
|
|
|
|
if ( var_1 )
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self.swapped_weapon_ammocount = var_3;
|
|
|
|
return var_2;
|
|
}
|
|
|
|
is_frag_grenade( var_0 )
|
|
{
|
|
return var_0 == "aliensemtex_mp" || var_0 == "alienmortar_shell_mp";
|
|
}
|
|
|
|
get_attachment_for_weapon()
|
|
{
|
|
var_0 = self getcurrentweapon();
|
|
var_1 = getweaponbasename( var_0 );
|
|
var_2 = maps\mp\_utility::getweaponclass( var_0 );
|
|
var_3 = common_scripts\utility::random( level.pillageable_attachments );
|
|
|
|
switch ( var_2 )
|
|
{
|
|
case "weapon_sniper":
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments, var_1 );
|
|
break;
|
|
case "weapon_assault":
|
|
if ( issubstr( var_1, "sc2010" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_ar_sc2010, var_1 );
|
|
else if ( issubstr( var_1, "honeybadger" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_ar_honeybadger, var_1 );
|
|
else
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_ar, var_1 );
|
|
|
|
break;
|
|
case "weapon_lmg":
|
|
if ( issubstr( var_1, "kac" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_lmg_kac, var_1 );
|
|
else
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_lmg, var_1 );
|
|
|
|
break;
|
|
case "weapon_shotgun":
|
|
if ( issubstr( var_1, "fp6" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_sg_fp6, var_1 );
|
|
else
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_sg, var_1 );
|
|
|
|
break;
|
|
case "weapon_dmr":
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_dmr, var_1 );
|
|
break;
|
|
case "weapon_smg":
|
|
if ( issubstr( var_1, "aliendlc23" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_aliendlc23, var_1 );
|
|
else if ( issubstr( var_1, "arkalienk7" ) )
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_smg_k7, var_1 );
|
|
else
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments_smg, var_1 );
|
|
|
|
break;
|
|
default:
|
|
var_3 = check_upgrade_return_attchment( level.pillageable_attachments, var_1 );
|
|
break;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
check_upgrade_return_attchment( var_0, var_1 )
|
|
{
|
|
var_2 = getdvar( "ui_mapname" );
|
|
var_3 = common_scripts\utility::random( var_0 );
|
|
|
|
while ( var_3 == "alienmuzzlebrake" || var_3 == "xmags" )
|
|
{
|
|
if ( var_3 == "alienmuzzlebrake" )
|
|
{
|
|
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "master_scavenger_upgrade" ) )
|
|
return var_3;
|
|
else
|
|
var_3 = common_scripts\utility::random( var_0 );
|
|
}
|
|
else if ( var_3 == "xmags" )
|
|
{
|
|
if ( maps\mp\alien\_persistence::is_upgrade_enabled( "master_scavenger_upgrade" ) )
|
|
return var_3;
|
|
else
|
|
var_3 = common_scripts\utility::random( var_0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
return var_3;
|
|
}
|
|
|
|
add_attachment_to_weapon( var_0, var_1 )
|
|
{
|
|
var_2 = self getcurrentweapon();
|
|
var_3 = getweaponbasename( var_2 );
|
|
var_4 = getweaponbasename( var_2 );
|
|
var_5 = 0;
|
|
var_6 = "none";
|
|
var_7 = "none";
|
|
var_8 = "none";
|
|
var_9 = "none";
|
|
var_10 = 0;
|
|
var_11 = 0;
|
|
var_12 = 0;
|
|
var_13 = maps\mp\_utility::getweaponclass( var_3 );
|
|
|
|
if ( maps\mp\_utility::weaponhasattachment( var_2, "xmags" ) )
|
|
var_10 = 1;
|
|
|
|
var_14 = get_possible_attachments_by_weaponclass( var_13, var_3 );
|
|
var_15 = 0;
|
|
|
|
foreach ( var_17 in var_14 )
|
|
{
|
|
if ( var_0 == var_17 )
|
|
var_15 = 1;
|
|
}
|
|
|
|
if ( !var_15 )
|
|
{
|
|
maps\mp\_utility::setlowermessage( "cant_attach", &"ALIEN_COLLECTIBLES_CANT_USE", 3 );
|
|
return 0;
|
|
}
|
|
|
|
var_19 = getweaponattachments( var_2 );
|
|
|
|
if ( var_19.size > 0 && var_19.size < 5 )
|
|
{
|
|
for ( var_20 = 0; var_20 < var_19.size; var_20++ )
|
|
{
|
|
if ( var_20 == 0 )
|
|
var_6 = var_19[var_20];
|
|
|
|
if ( var_20 == 1 )
|
|
var_7 = var_19[var_20];
|
|
|
|
if ( var_20 == 2 )
|
|
var_8 = var_19[var_20];
|
|
|
|
if ( var_20 == 3 )
|
|
var_9 = var_19[var_20];
|
|
}
|
|
|
|
if ( var_6 != "none" && maps\mp\_utility::getattachmenttype( var_6 ) == maps\mp\_utility::getattachmenttype( var_0 ) )
|
|
{
|
|
swap_attachment( var_6, var_1 );
|
|
var_6 = var_0;
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_7 != "none" && maps\mp\_utility::getattachmenttype( var_7 ) == maps\mp\_utility::getattachmenttype( var_0 ) )
|
|
{
|
|
swap_attachment( var_7, var_1 );
|
|
var_7 = var_0;
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_8 != "none" && maps\mp\_utility::getattachmenttype( var_8 ) == maps\mp\_utility::getattachmenttype( var_0 ) )
|
|
{
|
|
swap_attachment( var_8, var_1 );
|
|
var_8 = var_0;
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_9 != "none" && maps\mp\_utility::getattachmenttype( var_9 ) == maps\mp\_utility::getattachmenttype( var_0 ) )
|
|
{
|
|
swap_attachment( var_9, var_1 );
|
|
var_9 = var_0;
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_5 == 0 )
|
|
{
|
|
if ( var_6 == "none" )
|
|
var_6 = var_0;
|
|
else if ( var_7 == "none" && var_0 != var_6 )
|
|
var_7 = var_0;
|
|
else if ( var_8 == "none" && var_0 != var_6 && var_0 != var_7 )
|
|
var_8 = var_0;
|
|
else if ( var_9 == "none" && var_0 != var_6 && var_0 != var_7 && var_0 != var_8 )
|
|
var_9 = var_0;
|
|
else
|
|
{
|
|
maps\mp\_utility::setlowermessage( "cant_attach", &"ALIEN_COLLECTIBLES_CANT_USE", 3 );
|
|
return 0;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
var_6 = var_0;
|
|
|
|
var_21 = maps\mp\_utility::strip_suffix( var_4, "_mp" );
|
|
var_11 = get_weapon_camo( var_3 );
|
|
var_12 = randomintrange( 1, 7 );
|
|
|
|
if ( issubstr( var_3, "aliendlc23" ) )
|
|
var_12 = 0;
|
|
|
|
if ( var_6 != "thermal" && var_6 != "thermalsmg" && var_7 != "thermal" && var_7 != "thermalsmg" && var_8 != "thermal" && var_8 != "thermalsmg" && var_9 != "thermal" && var_9 != "thermalsmg" )
|
|
var_22 = maps\mp\alien\_utility::buildalienweaponname( var_21, var_6, var_7, var_8, var_9, var_11, var_12 );
|
|
else
|
|
var_22 = maps\mp\alien\_utility::buildalienweaponname( var_21, var_6, var_7, var_8, var_9, var_11 );
|
|
|
|
var_23 = self getweaponammoclip( var_2 );
|
|
var_24 = self getweaponammostock( var_2 );
|
|
self takeweapon( var_2 );
|
|
self giveweapon( var_22 );
|
|
|
|
if ( maps\mp\_utility::weaponhasattachment( var_22, "xmags" ) && !var_10 )
|
|
var_23 = weaponclipsize( var_22 );
|
|
|
|
self setweaponammoclip( var_22, var_23 );
|
|
self setweaponammostock( var_22, var_24 );
|
|
self playlocalsound( "weap_raise_large_plr" );
|
|
self switchtoweapon( var_22 );
|
|
|
|
if ( var_5 == 0 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
get_weapon_camo( var_0 )
|
|
{
|
|
if ( issubstr( var_0, "alienfp6" ) || issubstr( var_0, "alienmts255" ) || issubstr( var_0, "aliendlc12" ) || issubstr( var_0, "aliendlc13" ) || issubstr( var_0, "aliendlc14" ) || issubstr( var_0, "aliendlc15" ) || issubstr( var_0, "alienameli" ) || issubstr( var_0, "alienk7" ) || issubstr( var_0, "alienmk14" ) || issubstr( var_0, "alienr5rgp" ) || issubstr( var_0, "alienusr" ) || issubstr( var_0, "alienuts15" ) || issubstr( var_0, "arkalienameli" ) || issubstr( var_0, "arkaliendlc15" ) || issubstr( var_0, "arkaliendlc23" ) || issubstr( var_0, "arkalienimbel" ) || issubstr( var_0, "arkalienk7" ) || issubstr( var_0, "arkalienkac" ) || issubstr( var_0, "arkalienmaul" ) || issubstr( var_0, "arkalienmk14" ) || issubstr( var_0, "arkalienr5rgp" ) || issubstr( var_0, "arkalienusr" ) || issubstr( var_0, "arkalienuts15" ) || issubstr( var_0, "arkalienvks" ) || issubstr( var_0, "aliendlc23" ) )
|
|
return 0;
|
|
else
|
|
return randomintrange( 1, 10 );
|
|
}
|
|
|
|
swap_attachment( var_0, var_1 )
|
|
{
|
|
var_2 = var_1.origin;
|
|
var_1.pillageinfo.type = "attachment";
|
|
var_1.pillageinfo.attachment = var_0;
|
|
|
|
switch ( var_0 )
|
|
{
|
|
case "griphide":
|
|
var_0 = "grip";
|
|
break;
|
|
case "barrelrange03":
|
|
var_0 = "barrelrange";
|
|
break;
|
|
case "alienfiretypeburstdmr":
|
|
var_0 = "firetypeburst";
|
|
break;
|
|
case "alienfiretypeburstg28":
|
|
var_0 = "firetypeburst";
|
|
break;
|
|
case "alienfiretypeburstlight":
|
|
var_0 = "firetypeburst";
|
|
break;
|
|
case "alienfiretypeburst":
|
|
var_0 = "firetypeburst";
|
|
break;
|
|
case "reflexsmg":
|
|
var_0 = "reflex";
|
|
break;
|
|
case "reflexlmg":
|
|
var_0 = "reflex";
|
|
break;
|
|
case "reflexshotgun":
|
|
var_0 = "reflex";
|
|
break;
|
|
case "eotechsmg":
|
|
var_0 = "eotech";
|
|
break;
|
|
case "eotechlmg":
|
|
var_0 = "eotech";
|
|
break;
|
|
case "eotechshotgun":
|
|
var_0 = "eotech";
|
|
break;
|
|
case "acogsmg":
|
|
var_0 = "acog";
|
|
break;
|
|
case "thermalsmg":
|
|
var_0 = "thermal";
|
|
break;
|
|
case "alienmuzzlebrakesn":
|
|
case "alienmuzzlebrakesg":
|
|
case "alienmuzzlebrake":
|
|
var_0 = "alienmuzzlebrake";
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
var_1.pillage_trigger.origin = var_2;
|
|
var_3 = get_hintstring_for_pillaged_item( "attachment" );
|
|
var_4 = get_hintstring_for_item_pickup( var_0 );
|
|
var_1.pillage_trigger sethintstring( var_4 );
|
|
var_1.pillage_trigger makeusable();
|
|
thread show_pillage_text( var_3 );
|
|
var_5 = level.pillageinfo.attachment_model;
|
|
|
|
if ( var_0 == "alienmuzzlebrake" )
|
|
var_5 = level.pillageinfo.alienattachment_model;
|
|
|
|
var_1.pillage_trigger setmodel( var_5 );
|
|
var_1.pillageinfo.type = "attachment";
|
|
var_1.pillageinfo.attachment = var_0;
|
|
var_1.pillage_trigger drop_pillage_item_on_ground();
|
|
}
|
|
|
|
useholdthink( var_0, var_1 )
|
|
{
|
|
var_0 endon( "disconnect" );
|
|
var_0.pillage_spot = spawnstruct();
|
|
var_0.pillage_spot.curprogress = 0;
|
|
var_0.pillage_spot.inuse = 1;
|
|
var_0.pillage_spot.userate = 1;
|
|
|
|
if ( isdefined( var_1 ) )
|
|
var_0.pillage_spot.usetime = var_1;
|
|
else
|
|
var_0.pillage_spot.usetime = level.pillageinfo.default_use_time;
|
|
|
|
if ( isplayer( var_0 ) )
|
|
var_0 thread personalusebar( self );
|
|
|
|
var_0.hasprogressbar = 1;
|
|
var_2 = useholdthinkloop( var_0, self, 40000 );
|
|
var_0.hasprogressbar = 0;
|
|
|
|
if ( !isdefined( self ) )
|
|
return 0;
|
|
|
|
var_0.pillage_spot.inuse = 0;
|
|
var_0.pillage_spot.curprogress = 0;
|
|
return var_2;
|
|
}
|
|
|
|
personalusebar( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self setclientomnvar( "ui_securing", 1 );
|
|
var_1 = -1;
|
|
|
|
while ( maps\mp\_utility::isreallyalive( self ) && isdefined( var_0 ) && self.pillage_spot.inuse && !level.gameended )
|
|
{
|
|
var_1 = self.pillage_spot.userate;
|
|
self setclientomnvar( "ui_securing_progress", self.pillage_spot.curprogress / self.pillage_spot.usetime );
|
|
wait 0.05;
|
|
}
|
|
|
|
self setclientomnvar( "ui_securing", 0 );
|
|
self setclientomnvar( "ui_securing_progress", 0 );
|
|
}
|
|
|
|
useholdthinkloop( var_0, var_1, var_2 )
|
|
{
|
|
while ( !level.gameended && isdefined( self ) && maps\mp\_utility::isreallyalive( var_0 ) && var_0 usebuttonpressed() && var_0.pillage_spot.curprogress < var_0.pillage_spot.usetime )
|
|
{
|
|
if ( isdefined( var_1 ) && isdefined( var_2 ) )
|
|
{
|
|
if ( distancesquared( var_0.origin, var_1.origin ) > var_2 )
|
|
return 0;
|
|
}
|
|
|
|
var_0.pillage_spot.curprogress = var_0.pillage_spot.curprogress + 50 * var_0.pillage_spot.userate;
|
|
var_0.pillage_spot.userate = 1;
|
|
|
|
if ( var_0.pillage_spot.curprogress >= var_0.pillage_spot.usetime )
|
|
return maps\mp\_utility::isreallyalive( var_0 );
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
get_possible_attachments_by_weaponclass( var_0, var_1 )
|
|
{
|
|
switch ( var_0 )
|
|
{
|
|
case "weapon_smg":
|
|
if ( issubstr( var_1, "aliendlc23" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_aliendlc23;
|
|
return var_2;
|
|
}
|
|
|
|
if ( issubstr( var_1, "arkalienk7" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_smg_k7;
|
|
return var_2;
|
|
}
|
|
|
|
var_2 = level.pillageable_attachments_smg;
|
|
return var_2;
|
|
case "weapon_assault":
|
|
if ( issubstr( var_1, "sc2010" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_ar_sc2010;
|
|
return var_2;
|
|
}
|
|
|
|
if ( issubstr( var_1, "honeybadger" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_ar_honeybadger;
|
|
return var_2;
|
|
}
|
|
|
|
var_2 = level.pillageable_attachments_ar;
|
|
return var_2;
|
|
case "weapon_lmg":
|
|
if ( issubstr( var_1, "kac" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_lmg_kac;
|
|
return var_2;
|
|
}
|
|
|
|
var_2 = level.pillageable_attachments_lmg;
|
|
return var_2;
|
|
case "weapon_shotgun":
|
|
if ( issubstr( var_1, "fp6" ) )
|
|
{
|
|
var_2 = level.pillageable_attachments_sg_fp6;
|
|
return var_2;
|
|
}
|
|
|
|
var_2 = level.pillageable_attachments_sg;
|
|
return var_2;
|
|
case "weapon_pistol":
|
|
var_2 = [];
|
|
return var_2;
|
|
case "weapon_dmr":
|
|
var_2 = level.pillageable_attachments_dmr;
|
|
return var_2;
|
|
case "weapon_sniper":
|
|
var_2 = level.pillageable_attachments_sr;
|
|
return var_2;
|
|
default:
|
|
var_2 = [];
|
|
return var_2;
|
|
}
|
|
}
|
|
|
|
cangive_ammo_clip()
|
|
{
|
|
var_0 = self getcurrentweapon();
|
|
var_1 = weaponmaxammo( var_0 );
|
|
var_2 = weaponclipsize( var_0 );
|
|
var_3 = maps\mp\alien\_utility::getrawbaseweaponname( var_0 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_3 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_3] ) )
|
|
{
|
|
if ( self.stored_ammo[var_3].ammostock < weaponmaxammo( var_0 ) )
|
|
return 1;
|
|
}
|
|
}
|
|
else if ( self getweaponammostock( var_0 ) < var_1 )
|
|
return 1;
|
|
|
|
if ( var_0 == "aliensoflam_mp" || weapontype( var_0 ) == "riotshield" || maps\mp\alien\_utility::is_incompatible_weapon( var_0 ) )
|
|
{
|
|
var_4 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_6 in var_4 )
|
|
{
|
|
if ( var_6 == var_0 )
|
|
continue;
|
|
|
|
var_1 = weaponmaxammo( var_6 );
|
|
var_2 = weaponclipsize( var_6 );
|
|
var_3 = maps\mp\alien\_utility::getrawbaseweaponname( var_6 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_3 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_3] ) )
|
|
{
|
|
if ( self.stored_ammo[var_3].ammostock < weaponmaxammo( var_6 ) )
|
|
return 1;
|
|
}
|
|
}
|
|
else if ( self getweaponammostock( var_6 ) < var_1 )
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
give_ammo_clip()
|
|
{
|
|
var_0 = self getcurrentweapon();
|
|
var_1 = maps\mp\alien\_utility::getrawbaseweaponname( var_0 );
|
|
var_2 = weaponclipsize( var_0 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_1 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_1] ) )
|
|
{
|
|
if ( self.stored_ammo[var_1].ammostock < weaponmaxammo( var_0 ) )
|
|
self.stored_ammo[var_1].ammostock = self.stored_ammo[var_1].ammostock + var_2;
|
|
}
|
|
}
|
|
else if ( var_0 == "aliensoflam_mp" || weapontype( var_0 ) == "riotshield" || maps\mp\alien\_utility::is_incompatible_weapon( var_0 ) )
|
|
{
|
|
var_3 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( var_5 == var_0 )
|
|
continue;
|
|
|
|
if ( !maps\mp\gametypes\_weapons::isbulletweapon( var_0 ) )
|
|
continue;
|
|
|
|
var_2 = weaponclipsize( var_5 );
|
|
var_1 = maps\mp\alien\_utility::getrawbaseweaponname( var_5 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_1 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_1] ) )
|
|
{
|
|
if ( self.stored_ammo[var_1].ammostock < weaponmaxammo( var_5 ) )
|
|
self.stored_ammo[var_1].ammostock = self.stored_ammo[var_1].ammostock + var_2;
|
|
}
|
|
}
|
|
else if ( self getweaponammostock( var_5 ) < weaponmaxammo( var_5 ) )
|
|
{
|
|
var_6 = self getweaponammostock( var_5 );
|
|
self setweaponammostock( var_5, var_2 + var_6 );
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_6 = self getweaponammostock( var_0 );
|
|
self setweaponammostock( var_0, var_2 + var_6 );
|
|
}
|
|
|
|
self playlocalsound( "weap_ammo_pickup" );
|
|
}
|
|
|
|
give_maxammo()
|
|
{
|
|
var_0 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( var_2 == "aliensoflam_mp" || weapontype( var_2 ) == "riotshield" )
|
|
continue;
|
|
|
|
if ( maps\mp\alien\_utility::is_incompatible_weapon( var_2 ) )
|
|
continue;
|
|
|
|
var_3 = maps\mp\alien\_utility::getrawbaseweaponname( var_2 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_3 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_3] ) )
|
|
{
|
|
if ( self.stored_ammo[var_3].ammostock < weaponmaxammo( var_2 ) )
|
|
self.stored_ammo[var_3].ammostock = maps\mp\alien\_utility::return_nerf_scaled_ammo( var_2 );
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
var_4 = weaponmaxammo( var_2 );
|
|
var_5 = int( var_4 * maps\mp\alien\_prestige::prestige_getminammo() );
|
|
self setweaponammostock( var_2, var_5 );
|
|
}
|
|
|
|
self playlocalsound( "weap_ammo_pickup" );
|
|
}
|
|
|
|
cangive_maxammo()
|
|
{
|
|
var_0 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
if ( var_2 == "aliensoflam_mp" || weapontype( var_2 ) == "riotshield" )
|
|
continue;
|
|
|
|
if ( maps\mp\alien\_utility::is_incompatible_weapon( var_2 ) )
|
|
continue;
|
|
|
|
var_3 = maps\mp\alien\_utility::getrawbaseweaponname( var_2 );
|
|
|
|
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_3 ) )
|
|
{
|
|
if ( isdefined( self.stored_ammo[var_3] ) )
|
|
{
|
|
var_4 = weaponmaxammo( var_2 );
|
|
|
|
if ( maps\mp\alien\_prestige::prestige_getminammo() != 1 )
|
|
var_4 = maps\mp\alien\_prestige::prestige_getminammo() * weaponmaxammo( var_2 );
|
|
|
|
if ( self.stored_ammo[var_3].ammostock < var_4 )
|
|
return 1;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
var_4 = weaponmaxammo( var_2 );
|
|
|
|
if ( maps\mp\alien\_prestige::prestige_getminammo() != 1 )
|
|
var_4 = maps\mp\alien\_prestige::prestige_getminammo() * weaponmaxammo( var_2 );
|
|
|
|
var_5 = var_4;
|
|
var_6 = self getweaponammostock( var_2 );
|
|
|
|
if ( var_6 < var_5 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
cangive_soflam()
|
|
{
|
|
var_0 = "aliensoflam_mp";
|
|
var_1 = self getcurrentweapon();
|
|
var_2 = self getweaponslistprimaries();
|
|
|
|
if ( self.hasriotshieldequipped && var_2.size > 2 )
|
|
return 0;
|
|
|
|
if ( maps\mp\alien\_utility::is_holding_deployable() || self hasweapon( var_0 ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|
|
|
|
give_soflam()
|
|
{
|
|
self giveweapon( "aliensoflam_mp" );
|
|
self switchtoweapon( "aliensoflam_mp" );
|
|
}
|
|
|
|
cangive_crafting_item( var_0 )
|
|
{
|
|
if ( !isdefined( self.current_crafting_recipe ) )
|
|
{
|
|
maps\mp\_utility::setlowermessage( "cant_pickup", &"ALIEN_CRAFTING_NO_RECIPE", 3 );
|
|
self playlocalsound( "ui_craft_deny" );
|
|
return 0;
|
|
}
|
|
|
|
if ( self.craftingitems.size == level.max_crafting_items )
|
|
{
|
|
maps\mp\_utility::setlowermessage( "cant_pickup", &"ALIEN_CRAFTING_MAX_CRAFTING_ITEMS", 3 );
|
|
return 0;
|
|
}
|
|
|
|
foreach ( var_2 in self.craftingitems )
|
|
{
|
|
if ( var_2 == var_0 )
|
|
{
|
|
maps\mp\_utility::setlowermessage( "cant_pickup", &"ALIEN_CRAFTING_ALREADY_HAVE", 3 );
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if ( common_scripts\utility::array_contains( self.swappable_crafting_ingredient_list, var_0 ) )
|
|
return 1;
|
|
else if ( common_scripts\utility::array_contains( self.crafting_ingredient_list, var_0 ) )
|
|
return 1;
|
|
|
|
maps\mp\_utility::setlowermessage( "cant_pickup", &"ALIEN_CRAFTING_NO_RECIPE", 3 );
|
|
return 0;
|
|
}
|
|
|
|
re_distribute_pillage_spots()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
level waittill( "drill_detonated" );
|
|
var_0 = common_scripts\utility::getstructarray( "pillage_area", "targetname" );
|
|
|
|
foreach ( var_8, var_2 in var_0 )
|
|
{
|
|
level.pillage_areas[var_8] = [];
|
|
level.pillage_areas[var_8]["easy"] = [];
|
|
level.pillage_areas[var_8]["medium"] = [];
|
|
level.pillage_areas[var_8]["hard"] = [];
|
|
var_3 = common_scripts\utility::getstructarray( var_2.target, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5.script_noteworthy ) )
|
|
{
|
|
var_6 = strtok( var_5.script_noteworthy, "," );
|
|
var_5.pillage_type = var_6[0];
|
|
|
|
if ( isdefined( var_6[1] ) )
|
|
var_5.script_model = var_6[1];
|
|
|
|
switch ( var_5.pillage_type )
|
|
{
|
|
case "easy":
|
|
level.pillage_areas[var_8]["easy"][level.pillage_areas[var_8]["easy"].size] = var_5;
|
|
break;
|
|
case "medium":
|
|
level.pillage_areas[var_8]["medium"][level.pillage_areas[var_8]["medium"].size] = var_5;
|
|
break;
|
|
case "hard":
|
|
level.pillage_areas[var_8]["hard"][level.pillage_areas[var_8]["hard"].size] = var_5;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach ( var_8, var_2 in level.pillage_areas )
|
|
{
|
|
level.pillage_areas[var_8]["easy"] = remove_used_pillage_spots( level.pillage_areas[var_8]["easy"] );
|
|
level.pillage_areas[var_8]["medium"] = remove_used_pillage_spots( level.pillage_areas[var_8]["medium"] );
|
|
level.pillage_areas[var_8]["hard"] = remove_used_pillage_spots( level.pillage_areas[var_8]["hard"] );
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["easy"] );
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["medium"] );
|
|
level thread create_pillage_spots( level.pillage_areas[var_8]["hard"] );
|
|
}
|
|
}
|
|
}
|
|
|
|
remove_used_pillage_spots( var_0 )
|
|
{
|
|
var_1 = [];
|
|
var_2 = 22500;
|
|
var_3 = 90000;
|
|
var_4 = cos( 75 );
|
|
|
|
for ( var_5 = 0; var_5 < var_0.size; var_5++ )
|
|
{
|
|
var_6 = 0;
|
|
|
|
if ( isdefined( var_0[var_5].not_used ) )
|
|
{
|
|
var_1[var_1.size] = var_0[var_5];
|
|
var_0[var_5].not_used = undefined;
|
|
var_0[var_5].searched = undefined;
|
|
}
|
|
else if ( isdefined( var_0[var_5].searched ) )
|
|
{
|
|
if ( !isdefined( var_0[var_5].pillage_trigger ) )
|
|
{
|
|
var_0[var_5].searched = undefined;
|
|
var_1[var_1.size] = var_0[var_5];
|
|
continue;
|
|
}
|
|
else
|
|
continue;
|
|
}
|
|
else if ( isdefined( var_0[var_5].pillage_trigger ) )
|
|
{
|
|
var_7 = 0;
|
|
|
|
foreach ( var_9 in level.players )
|
|
{
|
|
var_6 = 0;
|
|
|
|
if ( !isalive( var_9 ) )
|
|
continue;
|
|
|
|
if ( distance2dsquared( var_9.origin, var_0[var_5].origin ) < var_2 )
|
|
var_6 = 1;
|
|
|
|
if ( !var_6 && distance2dsquared( var_9.origin, var_0[var_5].origin ) < var_3 )
|
|
var_6 = common_scripts\utility::within_fov( var_9 geteye(), var_9.angles, var_0[var_5].origin + ( 0, 0, 5 ), var_4 );
|
|
|
|
if ( var_6 )
|
|
var_7 = 1;
|
|
}
|
|
|
|
if ( var_7 )
|
|
continue;
|
|
|
|
maps\mp\alien\_outline_proto::remove_from_outline_pillage_watch_list( var_0[var_5].pillage_trigger );
|
|
var_0[var_5].pillage_trigger delete();
|
|
var_0[var_5].not_used = 1;
|
|
var_0[var_5].searched = undefined;
|
|
var_0[var_5].enabled = undefined;
|
|
}
|
|
|
|
if ( var_5 % 2 == 0 )
|
|
wait 0.05;
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
can_use_attachment()
|
|
{
|
|
var_0 = self getweaponslistprimaries();
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_3 = maps\mp\_utility::getweaponclass( var_2 );
|
|
|
|
if ( var_3 == "weapon_pistol" )
|
|
continue;
|
|
|
|
if ( maps\mp\gametypes\_weapons::isbulletweapon( var_2 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
check_for_existing_pet_bombs()
|
|
{
|
|
var_0 = 0;
|
|
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
var_3 = var_2 getweaponslistall();
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( var_5 == "alienthrowingknife_mp" && ( var_2 getweaponammoclip( "alienthrowingknife_mp" ) > 0 || var_2 getweaponammostock( "alienthrowingknife_mp" ) > 0 ) )
|
|
var_0++;
|
|
}
|
|
}
|
|
|
|
foreach ( var_17, var_9 in level.pillage_areas )
|
|
{
|
|
foreach ( var_11 in level.pillage_areas[var_17]["easy"] )
|
|
{
|
|
if ( pillage_area_has_petbomb( var_11 ) )
|
|
var_0++;
|
|
}
|
|
|
|
foreach ( var_11 in level.pillage_areas[var_17]["medium"] )
|
|
{
|
|
if ( pillage_area_has_petbomb( var_11 ) )
|
|
var_0++;
|
|
}
|
|
|
|
foreach ( var_11 in level.pillage_areas[var_17]["hard"] )
|
|
{
|
|
if ( pillage_area_has_petbomb( var_11 ) )
|
|
var_0++;
|
|
}
|
|
}
|
|
|
|
var_18 = maps\mp\agents\_agent_utility::getactiveagentsoftype( "alien" );
|
|
|
|
foreach ( var_20 in var_18 )
|
|
{
|
|
if ( isdefined( var_20.pet ) && var_20.pet )
|
|
var_0++;
|
|
}
|
|
|
|
if ( isdefined( level.custom_pet_bomb_check ) )
|
|
var_0 = var_0 + [[ level.custom_pet_bomb_check ]]();
|
|
|
|
return var_0;
|
|
}
|
|
|
|
pillage_area_has_petbomb( var_0 )
|
|
{
|
|
return isdefined( var_0.pillageinfo ) && isdefined( var_0.pillageinfo.type ) && var_0.pillageinfo.type == "pet_leash";
|
|
}
|
|
|
|
get_crafting_ingredient()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( self.craftingitems.size < 1 || self.crafting_ingredient_list.size > 0 )
|
|
return common_scripts\utility::random( self.crafting_ingredient_list );
|
|
else if ( self.craftingitems.size < 3 )
|
|
return common_scripts\utility::random( self.swappable_crafting_ingredient_list );
|
|
else
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( !isdefined( var_2.current_crafting_recipe ) )
|
|
continue;
|
|
|
|
if ( var_2.craftingitems.size == 3 )
|
|
continue;
|
|
|
|
if ( var_2.craftingitems.size < 1 || var_2.crafting_ingredient_list.size > 0 )
|
|
{
|
|
var_0 = common_scripts\utility::array_combine( var_2.crafting_ingredient_list, var_0 );
|
|
continue;
|
|
}
|
|
|
|
var_0 = common_scripts\utility::array_combine( var_2.swappable_crafting_ingredient_list, var_0 );
|
|
}
|
|
}
|
|
|
|
if ( var_0.size > 0 )
|
|
return common_scripts\utility::random( var_0 );
|
|
else if ( isdefined( level.random_crafting_list ) )
|
|
return common_scripts\utility::random( level.random_crafting_list );
|
|
else
|
|
return common_scripts\utility::random( [ "venomx", "nucleicbattery", "bluebiolum", "biolum", "orangebiolum", "amethystbiolum", "fuse", "tnt", "pipe", "resin", "biolum", "cellbattery" ] );
|
|
}
|
|
|
|
get_crafting_model( var_0 )
|
|
{
|
|
var_1 = 2;
|
|
var_2 = 1;
|
|
var_3 = tablelookup( level.alien_crafting_items, var_2, var_0, var_1 );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
return var_3;
|
|
else
|
|
return level.crafting_model;
|
|
}
|
|
|
|
give_crafting_item( var_0 )
|
|
{
|
|
if ( isdefined( self.current_crafting_recipe ) )
|
|
self notify( "dlc_vo_notify", self.current_crafting_recipe, self );
|
|
|
|
var_1 = get_crafting_item_slot( var_0 );
|
|
self.crafting_ingredient_list = common_scripts\utility::array_remove( self.crafting_ingredient_list, var_0 );
|
|
|
|
switch ( var_1 )
|
|
{
|
|
case 1:
|
|
self setclientomnvar( "ui_alien_craft_slot_1", 1 );
|
|
break;
|
|
case 2:
|
|
self setclientomnvar( "ui_alien_craft_slot_2", 1 );
|
|
break;
|
|
case 3:
|
|
self setclientomnvar( "ui_alien_craft_slot_3", 1 );
|
|
break;
|
|
}
|
|
|
|
if ( common_scripts\utility::array_contains( self.swappable_crafting_ingredient_list, var_0 ) )
|
|
{
|
|
var_2 = undefined;
|
|
|
|
foreach ( var_4 in self.craftingitems )
|
|
{
|
|
if ( common_scripts\utility::array_contains( self.swappable_crafting_ingredient_list, var_4 ) )
|
|
var_2 = var_4;
|
|
}
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self.craftingitems = common_scripts\utility::array_remove( self.craftingitems, var_2 );
|
|
}
|
|
else
|
|
self.crafting_ingredient_list = common_scripts\utility::array_remove( self.crafting_ingredient_list, var_0 );
|
|
|
|
self.craftingitems[self.craftingitems.size] = var_0;
|
|
|
|
if ( self.craftingitems.size == 3 )
|
|
{
|
|
var_6 = get_crafting_item_table_index();
|
|
self setclientomnvar( "ui_alien_hudcraftinginfo", var_6 );
|
|
|
|
if ( isalive( self ) && !maps\mp\alien\_utility::is_in_laststand() )
|
|
self iprintlnbold( &"ALIEN_CRAFTING_OPEN_MENU" );
|
|
}
|
|
}
|
|
|
|
get_crafting_item_slot( var_0 )
|
|
{
|
|
var_1 = 4;
|
|
var_2 = 5;
|
|
var_3 = 6;
|
|
var_4 = 7;
|
|
var_5 = 8;
|
|
var_6 = 9;
|
|
var_7 = undefined;
|
|
var_8 = int( tablelookup( level.crafting_item_table, 1, var_0, 0 ) );
|
|
var_9 = tablelookupbyrow( level.crafting_item_table, var_8, var_1 );
|
|
|
|
if ( self.current_crafting_recipe == var_9 )
|
|
var_7 = int( tablelookupbyrow( level.crafting_item_table, var_8, var_2 ) );
|
|
else
|
|
{
|
|
var_9 = tablelookupbyrow( level.crafting_item_table, var_8, var_3 );
|
|
|
|
if ( self.current_crafting_recipe != var_9 )
|
|
{
|
|
var_9 = tablelookupbyrow( level.crafting_item_table, var_8, var_5 );
|
|
var_7 = int( tablelookupbyrow( level.crafting_item_table, var_8, var_6 ) );
|
|
|
|
if ( self.current_crafting_recipe != var_9 )
|
|
{
|
|
|
|
}
|
|
}
|
|
else
|
|
var_7 = int( tablelookupbyrow( level.crafting_item_table, var_8, var_4 ) );
|
|
}
|
|
|
|
return var_7;
|
|
}
|
|
|
|
get_crafting_item_table_index()
|
|
{
|
|
var_0 = self.craftingitems.size;
|
|
var_1 = [];
|
|
var_2 = getarraykeys( level.crafting_ingredient_lists );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
var_5 = var_4;
|
|
var_6 = 0;
|
|
|
|
foreach ( var_8 in self.craftingitems )
|
|
{
|
|
if ( common_scripts\utility::array_contains( level.crafting_ingredient_lists[var_5], var_8 ) )
|
|
var_6++;
|
|
}
|
|
|
|
if ( var_6 == var_0 )
|
|
{
|
|
var_10 = int( tablelookup( level.alien_crafting_table, 1, var_5, 0 ) );
|
|
return var_10;
|
|
}
|
|
}
|
|
}
|
|
|
|
should_find_crafting_items()
|
|
{
|
|
if ( isdefined( self.craftingitems ) && isdefined( level.max_crafting_items ) && self.craftingitems.size >= level.max_crafting_items )
|
|
return 0;
|
|
else if ( !isdefined( self.current_crafting_recipe ) )
|
|
return 0;
|
|
|
|
return 1;
|
|
}
|