iw6-scripts/maps/mp/alien/_pillage_locker.gsc
2024-02-13 13:20:49 +01:00

652 lines
20 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
locker_pillage_functions_init()
{
setdvar( "scr_alien_locker_pillage", 1 );
level.locker_build_pillageitem_array_func = ::build_locker_pillageitem_arrays;
level.get_hintstring_for_item_pickup_func = ::get_hintstring_for_locker_item_pickup;
level.get_hintstring_for_pillaged_item_func = ::get_locker_hintstring_for_pillaged_item;
level.locker_drop_item_on_ground_func = ::drop_locker_pillage_item_on_ground;
if ( !isdefined( level.custom_lockerpillageinitfunc ) )
level.custom_lockerpillageinitfunc = ::locker_pillage_init;
if ( !isdefined( level.level_specific_pillage_show_func ) )
level.level_specific_pillage_show_func = ::default_level_specific_pillage_show_func;
level.locker_key_check_func = ::locker_key_check;
}
locker_pillage_init()
{
level.pillageinfo.locker_key_model = "vehicle_pickup_keys";
level.pillageinfo.locker_attachment = 0;
level.pillageinfo.locker_explosive = 0;
level.pillageinfo.locker_leash = 0;
level.pillageinfo.locker_maxammo = 0;
level.pillageinfo.locker_specialammo = 0;
level.pillageinfo.locker_money = 0;
level.pillageinfo.locker_soflam = 0;
level.pillageinfo.locker_trophy = 0;
level.pillageinfo.locker_locker_weapon = 100;
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]["locker"] = [];
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 "locker":
level.pillage_areas[var_8]["locker"][level.pillage_areas[var_8]["locker"].size] = var_5;
var_5.is_locker = 1;
var_5.drop_override_func = ::drop_locker_pillage_item_on_ground;
break;
}
}
}
}
foreach ( var_8, var_2 in level.pillage_areas )
{
level maps\mp\alien\_pillage::create_pillage_spots( level.pillage_areas[var_8]["locker"] );
level set_locker_hint_strings( level.pillage_areas[var_8]["locker"] );
}
maps\mp\alien\_pillage::build_pillageitem_arrays( "locker" );
create_gun_with_max_attachments_list();
}
debug_locker_weapons()
{
wait 10;
foreach ( var_1 in level.max_weapon_list )
{
}
foreach ( var_1 in level.max_weapon_list_xmags )
{
}
}
set_locker_hint_strings( var_0 )
{
foreach ( var_3, var_2 in var_0 )
var_2.pillage_trigger sethintstring( &"ALIEN_PILLAGE_LOCKER_OPEN_LOCKER" );
}
default_level_specific_pillage_show_func( var_0, var_1, var_2 )
{
switch ( var_1 )
{
case "searched":
if ( isdefined( var_2 ) )
{
switch ( var_2.type )
{
case "locker_key":
var_3 = maps\mp\alien\_pillage::get_hintstring_for_pillaged_item( var_2.type );
var_0 thread maps\mp\alien\_pillage::show_pillage_text( var_3 );
self.pillage_trigger setmodel( level.pillageinfo.locker_key_model );
var_3 = maps\mp\alien\_pillage::get_hintstring_for_item_pickup( var_2.type );
self.pillage_trigger sethintstring( var_3 );
self.pillage_trigger makeusable();
self.pillageinfo.type = "locker_key";
self.pillageinfo.ammo = 1;
level thread maps\mp\alien\_music_and_dialog::playvoforpillage( var_0 );
break;
case "locker_weapon":
var_3 = maps\mp\alien\_pillage::get_hintstring_for_pillaged_item( var_2.type );
var_0 thread maps\mp\alien\_pillage::show_pillage_text( var_3 );
if ( var_0 maps\mp\alien\_persistence::is_upgrade_enabled( "master_scavenger_upgrade" ) )
var_4 = common_scripts\utility::array_combine( level.max_weapon_list, level.max_weapon_list_xmags );
else
var_4 = level.max_weapon_list;
var_5 = common_scripts\utility::random( var_4 );
var_6 = 0;
while ( isdefined( var_0.last_locker_weapon ) && var_0.last_locker_weapon == var_5.model )
{
var_5 = common_scripts\utility::random( var_4 );
var_6++;
if ( var_6 % 10 == 0 )
break;
}
var_0.last_locker_weapon = var_5.model;
self.pillage_trigger setmodel( var_5.model );
var_3 = maps\mp\alien\_pillage::get_hintstring_for_item_pickup( var_5.model );
self.pillage_trigger sethintstring( var_3 );
self.pillage_trigger makeusable();
self.pillageinfo.type = "locker_weapon";
self.pillageinfo.ammo = 1;
self.pillageinfo.weapon_item = var_5;
self.pillageinfo.weapon_string = var_5.weapon_string;
maps\mp\_utility::delaythread( 1.0, maps\mp\alien\_music_and_dialog::playvoforpillage, var_0 );
break;
}
}
break;
case "pick_up":
if ( isdefined( self.pillageinfo ) )
{
switch ( self.pillageinfo.type )
{
case "locker_key":
var_0 try_to_give_player_the_locker_key( self.pillage_trigger );
break;
case "locker_weapon":
var_7 = var_0 try_to_give_player_locker_weapon( self );
if ( var_7 )
maps\mp\alien\_pillage::delete_pillage_trigger();
break;
}
}
break;
}
}
try_to_give_player_locker_weapon( var_0 )
{
var_1 = var_0.pillageinfo.weapon_string;
var_2 = spawnstruct();
var_2.data["cost"] = 0;
var_2.item_ref = "weapon_" + var_1;
if ( maps\mp\alien\_collectibles::cangive_weapon( var_2 ) )
{
var_3 = 0;
var_4 = 0;
var_5 = 0;
if ( maps\mp\alien\_collectibles::has_weapon_variation( var_1 ) )
{
var_6 = maps\mp\alien\_collectibles::get_weapon_ref( var_1 );
if ( isdefined( var_6 ) )
{
if ( isdefined( level.locker_ark_check_func ) )
var_2.item_ref = [[ level.locker_ark_check_func ]]( var_6, var_1 );
var_4 = self getweaponammoclip( var_6 );
var_5 = self getweaponammostock( var_6 );
self takeweapon( var_6 );
var_7 = maps\mp\alien\_utility::getrawbaseweaponname( var_6 );
if ( maps\mp\alien\_utility::player_has_specialized_ammo( var_7 ) )
{
if ( isdefined( self.stored_ammo[var_7] ) )
var_3 = 1;
}
}
}
self.locker_weapon = undefined;
maps\mp\alien\_collectibles::give_weapon( var_2, 1 );
thread give_player_max_ammo( var_3, var_4, var_5 );
return 1;
}
return 0;
}
give_player_max_ammo( var_0, var_1, var_2 )
{
self waittill( "weapon_change" );
var_3 = self.locker_weapon;
var_4 = weaponclipsize( var_3 );
var_5 = maps\mp\alien\_utility::return_nerf_scaled_ammo( var_3 );
if ( isdefined( var_3 ) && var_0 )
{
var_6 = maps\mp\alien\_utility::getrawbaseweaponname( var_3 );
self.stored_ammo[var_6].ammostock = var_5;
self.stored_ammo[var_6].clipammo = var_4;
self setweaponammoclip( var_3, var_1 );
self setweaponammostock( var_3, var_2 );
}
else
{
self setweaponammoclip( var_3, var_4 );
self setweaponammostock( var_3, var_5 );
}
}
try_to_give_player_the_locker_key( var_0 )
{
if ( isdefined( self.locker_key ) )
maps\mp\_utility::setlowermessage( "max_leash", &"ALIEN_PILLAGE_LOCKER_LOCKER_KEY_MAX", 3 );
else
{
self.locker_key = 1;
self playlocalsound( "plr_keys_pckup" );
self setclientomnvar( "ui_alien_locker_key", 1 );
if ( maps\mp\alien\_utility::alien_mode_has( "outline" ) )
maps\mp\alien\_outline_proto::remove_from_outline_pillage_watch_list( var_0 );
var_0 delete();
}
}
build_locker_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":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.easy_locker_key );
break;
case "medium":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.medium_locker_key );
break;
case "hard":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_key", level.pillageinfo.hard_locker_key );
break;
case "locker":
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "crafting", level.pillageinfo.crafting_hard );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "attachment", level.pillageinfo.locker_attachment );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "soflam", level.pillageinfo.locker_soflam );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "explosive", level.pillageinfo.locker_explosive );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "maxammo", level.pillageinfo.locker_maxammo );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "money", level.pillageinfo.locker_money );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "pet_leash", level.pillageinfo.locker_leash );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "trophy", level.pillageinfo.locker_trophy );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "specialammo", level.pillageinfo.locker_specialammo );
maps\mp\alien\_pillage::build_pillageitem_array( var_0, "locker_weapon", level.pillageinfo.locker_locker_weapon );
break;
}
}
locker_key_check( var_0 )
{
if ( isdefined( self.is_locker ) && self.is_locker && ( !isdefined( var_0.locker_key ) || !var_0.locker_key ) )
{
var_0 maps\mp\_utility::setlowermessage( "need_key", &"ALIEN_PILLAGE_LOCKER_NEED_LOCKER_KEY", 3 );
return 1;
}
return 0;
}
get_locker_hintstring_for_pillaged_item( var_0 )
{
var_0 = "" + var_0;
switch ( var_0 )
{
case "locker_key":
return &"ALIEN_PILLAGE_LOCKER_FOUND_LOCKER_KEY";
case "locker_weapon":
return &"ALIEN_PILLAGE_LOCKER_FOUND_LOCKER_WEAPON";
}
}
get_hintstring_for_locker_item_pickup( var_0 )
{
var_0 = "" + var_0;
switch ( var_0 )
{
case "locker_key":
return &"ALIEN_PILLAGE_LOCKER_PICKUP_LOCKER_KEY";
case "locker_weapon":
return &"ALIEN_PILLAGE_LOCKER_PICKUP_LOCKER_WEAPON";
}
if ( isdefined( level.level_locker_weapon_pickup_string_func ) )
return [[ level.level_locker_weapon_pickup_string_func ]]( var_0 );
}
drop_locker_pillage_item_on_ground( var_0 )
{
if ( !isdefined( self.open_locker_model ) )
{
var_1 = spawn( "script_model", self.origin );
var_1.angles = self.angles;
if ( level.script == "mp_alien_dlc3" )
{
var_1 setmodel( "com_plasticcase_bomb_open" );
var_0 playlocalsound( "ammo_crate_use" );
}
else if ( level.script == "mp_alien_last" )
{
var_1 setmodel( "dct_crate_locker_open" );
var_0 playlocalsound( "ammo_crate_use" );
}
else
{
var_1 setmodel( "armory_weapon_chest_open" );
var_0 playlocalsound( "plr_locker_open" );
}
self.open_locker_model = var_1;
self.locker_origin = self.pillage_trigger.origin;
self.locker_angles = self.pillage_trigger.angles;
}
if ( self.pillage_trigger.model != "tag_origin" )
{
if ( isdefined( level.pillage_locker_offset_override_func ) )
self [[ level.pillage_locker_offset_override_func ]]();
else
offset_locker_trigger_model();
}
var_0.locker_key = undefined;
self.pillage_trigger.is_locker = undefined;
var_0 setclientomnvar( "ui_alien_locker_key", 0 );
}
offset_locker_trigger_model()
{
if ( isdefined( self.locker_origin ) )
self.pillage_trigger.origin = self.locker_origin;
if ( isdefined( self.locker_angles ) )
self.pillage_trigger.angles = self.locker_angles;
var_0 = ( 0, 0, 20 );
var_1 = ( 0, 0, 6 );
var_2 = ( 0, 0, 0 );
var_3 = ( 0, 0, 6 );
var_4 = ( 0, 0, 0 );
var_5 = getgroundposition( self.pillage_trigger.origin + var_0, 2 );
switch ( self.pillage_trigger.model )
{
case "weapon_baseweapon_clip":
var_3 = ( 0, 0, 4 );
break;
case "mp_trophy_system_folded_iw6":
var_3 = ( 3, -21, 38 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_scavenger_grenadebag":
var_3 = ( 0, 0, 6 );
break;
case "weapon_soflam":
var_3 = ( 8, -6, 8 );
break;
case "mil_ammo_case_1_open":
var_3 = ( 0, -16, 0 );
break;
case "weapon_rm_22":
self.pillage_trigger hidepart( "tag_barrel_sniper", "weapon_rm_22" );
case "weapon_pp19_bizon_iw6":
case "weapon_fabarm_fp6":
case "weapon_world_axe":
case "weapon_imbel_ia2":
case "weapon_cz_805_bren":
case "weapon_m27":
case "weapon_l115a3":
case "weapon_usr":
case "weapon_vks":
case "weapon_mts_255":
case "weapon_vepr":
case "weapon_kriss_v":
case "weapon_ak12":
case "weapon_g28":
case "weapon_dragunov_svu":
case "weapon_tar21":
case "weapon_kac_chainsaw":
var_3 = ( -5, 0, 24 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_maul":
var_3 = ( -5, 0, 25 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_honeybadger":
var_3 = ( -5, 0, 21 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_evopro":
case "weapon_cbj_ms_iw6":
case "weapon_lsat_iw6":
case "weapon_arx_160":
var_3 = ( -5, 0, 22 );
var_4 = ( 277.5, 180, -144 );
break;
case "weapon_knife_iw6":
case "weapon_canister_bomb":
case "mil_emergency_flare_mp":
var_3 = var_1;
var_4 = var_2;
break;
}
var_6 = self.pillage_trigger.origin;
var_7 = self.pillage_trigger.angles;
var_8 = self.pillage_trigger.origin;
var_9 = ( 0, 0, 0 );
var_10 = self.pillage_trigger.origin + var_3;
var_11 = var_4;
var_12 = transformmove( var_6, var_7, var_8, var_9, var_10, var_11 );
var_13 = var_12["origin"] - var_5;
var_4 = var_12["angles"];
self.pillage_trigger.origin = var_5 + var_13;
self.pillage_trigger.angles = var_4;
}
create_gun_with_max_attachments_list()
{
level.max_weapon_list = [];
level.max_weapon_list_xmags = [];
var_0 = [];
var_1 = level.collectibles;
foreach ( var_4, var_3 in var_1 )
{
if ( var_3.isweapon )
var_0[var_4] = var_3;
}
var_5 = [];
foreach ( var_3 in var_0 )
{
var_7 = var_3.ref;
if ( issubstr( var_3.ref, "honey" ) )
continue;
if ( level.script == "mp_alien_beacon" )
{
if ( issubstr( var_3.ref, "g28" ) || issubstr( var_3.ref, "svu" ) )
continue;
}
var_7 = getsubstr( var_7, 7 );
if ( is_dlc_weapon( var_3.ref ) )
var_8 = var_7;
else
var_8 = getweaponbasename( var_7 );
var_9 = maps\mp\_utility::getweaponclass( var_8 );
var_10 = [];
var_11 = [];
var_12 = [];
var_13 = [];
var_14 = maps\mp\alien\_pillage::get_possible_attachments_by_weaponclass( var_9, var_8 );
if ( !isdefined( var_14 ) || var_14.size < 3 )
continue;
if ( issubstr( var_3.ref, "aliendlc23" ) )
{
if ( level.script == "mp_alien_dlc3" || level.script == "mp_alien_last" )
var_8 = "iw6_arkaliendlc23_mp";
else
var_8 = "iw6_aliendlc23_mp";
var_14 = common_scripts\utility::add_to_array( var_14, "dlcweap02scope" );
}
foreach ( var_16 in var_14 )
{
switch ( var_16 )
{
case "reflex":
case "eotech":
case "acog":
case "dlcweap02scope":
var_10[var_10.size] = var_16;
break;
case "grip":
var_11[var_11.size] = var_16;
break;
case "barrelrange":
var_12[var_12.size] = var_16;
break;
case "xmags":
case "rof":
var_13[var_13.size] = var_16;
break;
default:
break;
}
}
var_18 = [];
if ( var_10.size > 0 )
var_18[0] = var_10;
else
var_18[var_18.size] = [ "none" ];
if ( var_11.size > 0 )
var_18[1] = var_11;
else
var_18[var_18.size] = [ "none" ];
if ( var_12.size > 0 )
var_18[2] = var_12;
else
var_18[var_18.size] = [ "none" ];
if ( var_13.size > 0 )
var_18[3] = var_13;
else
var_18[var_18.size] = [ "none" ];
var_3 get_rest_of_attachments_brute_force( var_8, var_18 );
}
}
make_weapon_string_and_add_to_array( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = self;
var_6 = maps\mp\_utility::strip_suffix( var_0, "_mp" );
var_7 = maps\mp\alien\_utility::buildalienweaponname( var_6, var_1, var_2, var_3, var_4 );
if ( isdefined( var_7 ) )
{
var_8 = spawnstruct();
var_8.weapon_string = var_7;
var_8.model = var_5.model;
if ( !isdefined( var_4 ) || var_4 != "xmags" )
level.max_weapon_list[level.max_weapon_list.size] = var_8;
else
level.max_weapon_list_xmags[level.max_weapon_list_xmags.size] = var_8;
}
}
get_rest_of_attachments_brute_force( var_0, var_1 )
{
var_2 = [];
foreach ( var_4 in var_1[0] )
{
var_2[0] = var_4;
foreach ( var_4 in var_1[1] )
{
var_2[1] = var_4;
foreach ( var_4 in var_1[2] )
{
var_2[2] = var_4;
foreach ( var_4 in var_1[3] )
{
var_2[3] = var_4;
make_weapon_string_and_add_to_array( var_0, var_2[0], var_2[1], var_2[2], var_2[3] );
}
}
}
}
}
get_locker_weapon_from_list()
{
var_0 = common_scripts\utility::random( level.max_weapon_list );
return var_0;
}
is_dlc_weapon( var_0 )
{
if ( issubstr( var_0, "aliendlc" ) )
return 1;
if ( issubstr( var_0, "alienDLC" ) )
return 1;
return 0;
}
is_axe( var_0 )
{
switch ( var_0 )
{
case "iw6_alienDLC13_mp":
case "weapon_iw6_alienDLC13_mp":
case "iw6_aliendlc13_mp":
case "weapon_iw6_aliendlc13_mp":
case "alienaxe_mp":
case "weapon_alienaxe_mp":
case "iw6_alienDLC12_mp":
case "weapon_iw6_alienDLC12_mp":
case "iw6_aliendlc12_mp":
case "weapon_iw6_aliendlc12_mp":
return 1;
default:
break;
}
return 0;
}