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

1373 lines
39 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
init_grace_period_end_time();
maps\mp\alien\_chaos_utility::init_highest_combo();
maps\mp\alien\_chaos_utility::init_bonus_package_cap();
maps\mp\alien\_chaos_utility::init_chaos_score_components();
maps\mp\alien\_chaos_utility::init_combo_duration();
init_num_skill_upgrade_earned();
maps\mp\alien\_chaos_utility::init_event_counts();
maps\mp\alien\_chaos_utility::register_chaos_events();
register_perk_progression();
register_bonus_packages();
maps\mp\alien\_chaos_utility::register_cycle_duration();
maps\mp\alien\_chaos_utility::register_combo_duration_schedule();
maps\mp\alien\_chaos_utility::register_pre_end_game_display_func();
maps\mp\alien\_chaos_utility::reset_alien_kill_streak();
load_vfx();
maps\mp\alien\_chaos_utility::add_extra_spawn_locations();
common_scripts\utility::flag_init( "combo_freeze" );
common_scripts\utility::flag_init( "grace_period_over" );
common_scripts\utility::flag_init( "combo_is_alive" );
common_scripts\utility::flag_init( "in_host_migration" );
common_scripts\utility::flag_init( "chaos_pre_game_is_over" );
maps\mp\alien\_hud::chaos_hud_init();
level.chaos_event_queue = [];
level thread lua_omnvar_update_monitor( level, "ui_chaos_perk" );
level thread lua_omnvar_update_monitor( level, "ui_chaos_event" );
level thread process_event_notify_queue();
}
load_vfx()
{
level._effect["chaos_pre_bonus_drop"] = loadfx( "vfx/_requests/chaos/vfx_chaos_prebonus_drop" );
}
set_chaos_area()
{
level.chaos_area = get_level_specific_chaos_area();
}
get_level_specific_chaos_area()
{
switch ( level.script )
{
case "mp_alien_town":
return "cabin";
case "mp_alien_armory":
return "compound";
case "mp_alien_beacon":
return "cargo";
case "mp_alien_dlc3":
return "caverns_03";
case "mp_alien_last":
return "main_base";
}
}
chaos()
{
level endon( "game_ended" );
level thread chaos_host_migration_handler();
level thread combo_meter_monitor();
wait 10;
level thread hot_join_grace_period_monitor();
level thread bonus_package_drop_monitor();
level thread start_grace_period( 120 );
level thread chaos_cycle_spawn_monitor();
level thread apply_delta_to_combo_duration();
}
update_alien_killed_event( var_0, var_1, var_2 )
{
if ( !maps\mp\alien\_chaos_utility::should_process_alien_killed_event( var_2 ) )
return;
var_3 = maps\mp\alien\_chaos_utility::get_attacker_as_player( var_2 );
if ( maps\mp\alien\_chaos_laststand::should_instant_revive( var_3 ) )
maps\mp\alien\_laststand::instant_revive( var_3 );
process_chaos_event( "kill_" + var_0 );
drop_alien_egg( var_1 );
level thread alien_kill_streak_monitor();
}
update_alien_damaged_event( var_0 )
{
if ( !maps\mp\alien\_chaos_utility::should_process_alien_damaged_event( var_0 ) )
return;
process_chaos_event( "refill_combo_meter" );
}
update_spending_currency_event( var_0, var_1, var_2 )
{
if ( !maps\mp\alien\_utility::is_chaos_mode() )
return;
if ( !isdefined( var_1 ) )
return;
if ( var_1 == "weapon" && is_new_weapon_pick_up( var_0, var_2 ) )
process_chaos_event( "new_weapon_pick_up" );
else
process_chaos_event( "inc_combo_counter_only" );
}
update_pickup_deployable_box_event()
{
process_chaos_event( "deployable_pick_up" );
}
process_chaos_event( var_0 )
{
if ( !maps\mp\alien\_utility::is_chaos_mode() )
return;
var_1 = level.chaos_events[var_0];
process_chaos_event_internal( var_1 );
}
update_weapon_pickup( var_0, var_1 )
{
add_to_weapon_picked_up_list( var_0, var_1 );
add_to_recent_weapon_list( var_0, var_1 );
}
chaos_onplayerconnect( var_0 )
{
var_0.weapon_picked_up = [];
var_0.recent_weapon_list = [];
var_0 maps\mp\alien\_chaos_laststand::set_in_chaos_self_revive( var_0, 0 );
}
chaos_onspawnplayer( var_0 )
{
var_0 maps\mp\alien\_damage::setbodyarmor( level.deployablebox_vest_max );
var_0 notify( "enable_armor" );
var_0.objectivescaler = 10;
var_0 thread refill_pistol_ammo();
var_0 give_skill_upgrade_earned( var_0 );
}
chaos_custom_giveloadout( var_0 )
{
var_0 maps\mp\alien\_chaos_utility::give_activated_perks( var_0 );
if ( !common_scripts\utility::flag( "chaos_pre_game_is_over" ) )
var_0 give_start_up_semtex( var_0 );
}
give_start_up_semtex( var_0 )
{
var_0 setoffhandprimaryclass( "other" );
var_0 maps\mp\_utility::_giveweapon( "aliensemtex_mp" );
var_0 setweaponammostock( "aliensemtex_mp", 5 );
}
create_alien_eggs()
{
level.alien_egg_list = [];
level.alien_egg_list_index = 0;
for ( var_0 = 0; var_0 < 20; var_0++ )
level.alien_egg_list[var_0] = create_alien_egg();
}
set_egg_default_loc( var_0 )
{
level.eggs_default_loc = var_0;
}
is_new_weapon_pick_up( var_0, var_1 )
{
return !common_scripts\utility::array_contains( var_0.weapon_picked_up, var_1 );
}
is_weapon_recently_picked_up( var_0, var_1 )
{
return common_scripts\utility::array_contains( var_0.recent_weapon_list, var_1 );
}
combo_meter_monitor()
{
level endon( "game_ended" );
for (;;)
{
level waittill( "refill_combo_meter" );
for (;;)
{
var_0 = maps\mp\alien\_chaos_utility::get_combo_duration() * 1.1;
var_1 = level common_scripts\utility::waittill_any_timeout( var_0, "refill_combo_meter" );
if ( var_1 == "timeout" && !common_scripts\utility::flag( "combo_freeze" ) && !common_scripts\utility::flag( "in_host_migration" ) )
{
maps\mp\alien\_chaos_utility::keep_running_score();
drop_combo();
if ( common_scripts\utility::flag( "grace_period_over" ) )
maps\mp\alien\_chaos_utility::chaos_end_game();
break;
}
}
}
}
alien_kill_streak_monitor()
{
level notify( "alien_kill_streak" );
level endon( "alien_kill_streak" );
var_0 = 0.2;
maps\mp\alien\_chaos_utility::inc_alien_kill_streak();
wait( var_0 );
process_alien_kill_streak( maps\mp\alien\_chaos_utility::get_alien_kill_streak() );
maps\mp\alien\_chaos_utility::reset_alien_kill_streak();
}
process_alien_kill_streak( var_0 )
{
if ( var_0 < 2 )
return;
switch ( var_0 )
{
case 2:
process_chaos_event( "double_kill" );
break;
case 3:
process_chaos_event( "triple_kill" );
break;
case 4:
process_chaos_event( "quad_kill" );
break;
default:
process_chaos_event( "mega_kill" );
break;
}
}
bonus_package_drop_monitor()
{
level endon( "game_ended" );
foreach ( var_1 in level.chaos_bonus_progression )
{
wait( var_1["wait_duration"] );
level thread drop_bonus_packages( var_1 );
}
}
drop_bonus_packages( var_0 )
{
level endon( "game_ended" );
var_1 = cap_num_of_drops( var_0["num_of_drops"] );
if ( var_1 == 0 )
return;
var_2 = get_bonus_items_list( var_0, var_1 );
var_3 = get_drop_locations( var_1 );
for ( var_4 = 0; var_4 < var_1; var_4++ )
{
level thread drop_bonus_package( var_2[var_4], var_3[var_4] );
common_scripts\utility::waitframe();
}
}
cap_num_of_drops( var_0 )
{
var_1 = maps\mp\alien\_chaos_utility::get_current_num_bonus_package();
var_2 = maps\mp\alien\_chaos_utility::get_bonus_package_cap();
return min( var_0, var_2 - var_1 );
}
chaos_cycle_spawn_monitor()
{
level endon( "game_ended" );
foreach ( var_1 in level.chaos_cycle_duration )
{
level thread maps\mp\alien\_spawnlogic::encounter_cycle_spawn();
wait( var_1 );
maps\mp\alien\_spawn_director::end_cycle();
common_scripts\utility::waitframe();
}
}
apply_delta_to_combo_duration()
{
level endon( "game_ended" );
foreach ( var_1 in level.combo_duration_schedule )
{
wait( var_1["pre_delta_interval"] );
maps\mp\alien\_chaos_utility::adjust_combo_duration( var_1["delta"] );
}
}
chaos_host_migration_handler()
{
level endon( "game_ended" );
for (;;)
{
level waittill( "host_migration_begin" );
common_scripts\utility::flag_set( "in_host_migration" );
level waittill( "host_migration_end" );
common_scripts\utility::flag_clear( "in_host_migration" );
refill_combo_meter();
}
}
hot_join_grace_period_monitor()
{
level endon( "game_ended" );
wait 30;
common_scripts\utility::flag_set( "chaos_pre_game_is_over" );
}
process_chaos_event_internal( var_0 )
{
refill_combo_meter();
var_1 = should_inc_combo_counter( var_0["combo_inc"] );
var_2 = should_inc_score_streak( var_0["score_inc"] );
if ( var_1 )
inc_combo_counter( var_0["combo_inc"] );
if ( should_update_lua_event( var_0["LUA_event_ID"] ) )
{
maps\mp\alien\_chaos_utility::inc_event_count( var_0["LUA_event_ID"] );
add_to_omnvar_value_queue( level, "ui_chaos_event", var_0["LUA_event_ID"] );
}
if ( var_2 )
inc_score_streak( var_0["score_inc"] );
if ( var_1 || var_2 )
{
var_3 = maps\mp\alien\_chaos_utility::calculate_total_score();
foreach ( var_5 in level.players )
var_5 maps\mp\alien\_persistence::eog_player_update_stat( "score", var_3, 1 );
}
}
inc_combo_counter( var_0 )
{
maps\mp\alien\_chaos_utility::add_combo_counter( var_0 );
var_1 = maps\mp\alien\_chaos_utility::get_combo_counter();
perk_progression( var_1 );
maps\mp\alien\_hud::set_combo_counter( var_1 );
maps\mp\alien\_chaos_utility::record_highest_combo( var_1 );
}
inc_score_streak( var_0 )
{
maps\mp\alien\_chaos_utility::add_score_streak( var_0 );
var_1 = maps\mp\alien\_chaos_utility::get_score_streak();
maps\mp\alien\_hud::set_score_streak( var_1 );
}
should_inc_combo_counter( var_0 )
{
return var_0 > 0;
}
should_inc_score_streak( var_0 )
{
return var_0 > 0;
}
should_update_lua_event( var_0 )
{
return var_0 > 0;
}
pop_first_item_out_of_queue( var_0, var_1 )
{
var_2 = var_0.omnvar_value_queue[var_1][0];
if ( isdefined( var_2 ) )
{
var_3 = [];
for ( var_4 = 1; var_4 < var_0.omnvar_value_queue[var_1].size; var_4++ )
var_3[var_3.size] = var_0.omnvar_value_queue[var_1][var_4];
var_0.omnvar_value_queue[var_1] = var_3;
}
return var_2;
}
lua_omnvar_update_monitor( var_0, var_1, var_2 )
{
level endon( "game_ended" );
if ( isdefined( var_2 ) )
var_0 endon( var_2 );
var_0.omnvar_value_queue[var_1] = [];
for (;;)
{
var_3 = pop_first_item_out_of_queue( var_0, var_1 );
if ( isdefined( var_3 ) )
{
chaos_event_notify( var_1, var_3, var_0 );
if ( isplayer( var_0 ) )
var_0 setclientomnvar( var_1, var_3 );
else
setomnvar( var_1, var_3 );
common_scripts\utility::waitframe();
continue;
}
var_0 waittill( "update_" + var_1 );
}
}
chaos_event_notify( var_0, var_1, var_2 )
{
switch ( var_0 )
{
case "ui_chaos_event":
case "ui_chaos_perk":
var_3 = get_chaos_event_notify_string( var_0, var_1 );
if ( isdefined( var_3 ) )
{
add_to_event_notify_queue( var_0, var_1, var_2, var_3 );
return;
}
}
}
get_chaos_event_notify_string( var_0, var_1 )
{
if ( var_0 == "ui_chaos_perk" )
{
switch ( var_1 )
{
case 1:
return &"ALIEN_CHAOS_PERK_QUICKDRAW";
case 2:
return &"ALIEN_CHAOS_PERK_STRONGER_MELEE";
case 3:
return &"ALIEN_CHAOS_PERK_TRAP_MASTER";
case 4:
return &"ALIEN_CHAOS_PERK_GAS_MASK";
case 5:
return &"ALIEN_CHAOS_PERK_FASTRELOAD";
case 6:
return &"ALIEN_CHAOS_PERK_BULLET_DAMAGE_1";
case 7:
return &"ALIEN_CHAOS_PERK_STEADY_AIM";
case 8:
return &"ALIEN_CHAOS_PERK_STALKER";
case 9:
return &"ALIEN_CHAOS_PERK_QUICK_REVIVE";
case 10:
return &"ALIEN_CHAOS_PERK_FAST_REGEN";
case 11:
return &"ALIEN_CHAOS_PERK_MARATHON";
case 12:
return &"ALIEN_CHAOS_PERK_MORE_CASH";
case 13:
return &"ALIEN_CHAOS_PERK_BULLET_DAMAGE_2";
case 14:
return &"ALIEN_CHAOS_PERK_AGILITY";
case 15:
return &"ALIEN_CHAOS_PERK_MORE_HEALTH";
case 16:
return &"ALIEN_CHAOS_PERK_FERAL_VISION";
}
}
else
{
switch ( var_1 )
{
case 2:
return &"ALIEN_CHAOS_MEGA_KILL";
case 3:
return &"ALIEN_CHAOS_QUAD_KILL";
case 5:
return &"ALIEN_CHAOS_TRIPLE_KILL";
case 10:
return &"ALIEN_CHAOS_DOUBLE_KILL";
}
}
}
add_to_event_notify_queue( var_0, var_1, var_2, var_3 )
{
var_4 = spawnstruct();
var_4.name = var_0;
var_4.value = var_1;
var_4.ent = var_2;
var_4.event_string = var_3;
var_4.time_added = gettime();
level.chaos_event_queue[level.chaos_event_queue.size] = var_4;
}
process_event_notify_queue()
{
level endon( "game_ended" );
for (;;)
{
if ( level.chaos_event_queue.size > 0 )
{
var_0 = level.chaos_event_queue[0];
level.chaos_event_queue = common_scripts\utility::array_remove( level.chaos_event_queue, var_0 );
if ( gettime() - var_0.time_added > 5000 )
continue;
if ( isplayer( var_0.ent ) )
var_0.ent iprintlnbold( var_0.event_string );
else
iprintlnbold( var_0.event_string );
wait 2;
}
wait 0.1;
}
}
add_to_omnvar_value_queue( var_0, var_1, var_2 )
{
var_0.omnvar_value_queue[var_1][var_0.omnvar_value_queue[var_1].size] = var_2;
var_0 notify( "update_" + var_1 );
}
create_alien_egg()
{
var_0 = 32;
var_1 = 76;
var_2 = level.eggs_default_loc;
var_3 = spawn( "script_model", var_2 );
var_3 setmodel( "alien_spider_egg_ammo" );
var_4 = spawn( "trigger_radius", var_2, 0, var_0, var_1 );
var_4 enablelinkto();
var_4 linkto( var_3 );
var_3.trigger = var_4;
var_3 thread egg_pick_up_monitor( var_3 );
var_3 thread alien_egg_think( var_3 );
return var_3;
}
alien_egg_think( var_0 )
{
var_1 = "none";
for (;;)
{
if ( var_1 != "activate" )
var_0 waittill( "activate" );
var_1 = var_0 common_scripts\utility::waittill_any_timeout( 30, "picked_up", "activate" );
if ( var_1 == "picked_up" )
process_chaos_event( "inc_combo_counter_only" );
if ( var_1 != "activate" )
move_alien_egg( var_0, level.eggs_default_loc );
}
}
drop_alien_egg( var_0 )
{
var_1 = ( 0, 0, 10 );
var_2 = get_egg_from_list();
move_alien_egg( var_2, var_0 + var_1 );
var_2 notify( "activate" );
}
get_egg_from_list()
{
var_0 = level.alien_egg_list[level.alien_egg_list_index];
level.alien_egg_list_index = ( level.alien_egg_list_index + 1 ) % 20;
return var_0;
}
refill_combo_meter()
{
level notify( "refill_combo_meter" );
maps\mp\alien\_hud::reset_combo_meter( maps\mp\alien\_chaos_utility::get_combo_duration() );
common_scripts\utility::flag_set( "combo_is_alive" );
}
drop_combo()
{
maps\mp\alien\_chaos_utility::reset_combo_counter();
maps\mp\alien\_hud::set_combo_counter( 0 );
unset_players_perks();
common_scripts\utility::flag_clear( "combo_is_alive" );
}
egg_pick_up_monitor( var_0 )
{
for (;;)
{
var_0.trigger waittill( "trigger", var_1 );
if ( isplayer( var_1 ) )
{
var_0 notify( "picked_up" );
var_1 playlocalsound( "ball_drone_targeting" );
}
common_scripts\utility::waitframe();
}
}
move_alien_egg( var_0, var_1 )
{
var_0 dontinterpolate();
var_0.origin = var_1;
}
perk_progression( var_0 )
{
if ( !isdefined( level.perk_progression[var_0] ) )
return;
level.perk_progression[var_0]["is_activated"] = 1;
var_1 = level.perk_progression[var_0];
add_to_omnvar_value_queue( level, "ui_chaos_perk", var_1["LUA_perk_ID"] );
foreach ( var_3 in level.players )
[[ var_1["activate_func"] ]]( var_3, var_1["perk_ref"] );
}
unset_players_perks()
{
foreach ( var_1 in level.players )
maps\mp\alien\_chaos_utility::unset_player_perks( var_1 );
maps\mp\alien\_chaos_utility::set_all_perks_inactivated();
add_to_omnvar_value_queue( level, "ui_chaos_perk", 0 );
}
swap_weapon_items( var_0 )
{
var_0 = remove_weapon_item( var_0 );
var_0 = maps\mp\alien\_chaos_utility::add_chaos_weapon( var_0 );
return var_0;
}
remove_weapon_item( var_0 )
{
var_1 = [];
foreach ( var_3 in var_0 )
{
if ( maps\mp\alien\_collectibles::is_collectible_weapon( var_3.script_noteworthy ) )
continue;
var_1[var_1.size] = var_3;
}
return var_1;
}
add_to_weapon_picked_up_list( var_0, var_1 )
{
if ( common_scripts\utility::array_contains( var_0.weapon_picked_up, var_1 ) )
return;
var_0.weapon_picked_up[var_0.weapon_picked_up.size] = var_1;
}
add_to_recent_weapon_list( var_0, var_1 )
{
if ( var_0.recent_weapon_list.size < 3 )
var_0.recent_weapon_list[var_0.recent_weapon_list.size] = var_1;
else
{
for ( var_2 = 0; var_2 < 2; var_2++ )
var_0.recent_weapon_list[var_2] = var_0.recent_weapon_list[var_2 + 1];
var_0.recent_weapon_list[2] = var_1;
}
}
give_skill_upgrade_earned( var_0 )
{
var_1 = get_num_skill_upgrade_earned();
foreach ( var_3 in [ "defense", "offense" ] )
{
var_0 maps\mp\alien\_persistence::set_upgrade_level( var_3, var_1 );
var_0 maps\mp\alien\_persistence::update_resource_stats( "upgrade", get_resource_ref( var_0, var_3 ), var_1 );
}
}
get_resource_ref( var_0, var_1 )
{
return level.alien_combat_resources[var_1][self getcoopplayerdata( "alienPlayerLoadout", var_1 )].ref;
}
register_perk_progression()
{
level.perk_progression = [];
maps\mp\alien\_chaos_utility::register_perk( "specialty_marathon", ::give_perk, ::take_perk );
maps\mp\alien\_chaos_utility::register_perk( "fast_hands", ::give_hand_perks, ::take_hand_perks );
maps\mp\alien\_chaos_utility::register_perk( "specialty_fastreload", ::give_perk, ::take_perk );
maps\mp\alien\_chaos_utility::register_perk( "specialty_stalker", ::give_perk, ::take_perk );
maps\mp\alien\_chaos_utility::register_perk( "fast_movement_speed", ::give_speed, ::take_speed );
maps\mp\alien\_chaos_utility::register_perk( "gas_mask", ::give_gas_mask, ::take_gas_mask );
maps\mp\alien\_chaos_utility::register_perk( "revive_protection", ::give_revive_protection, ::take_revive_protection );
maps\mp\alien\_chaos_utility::register_perk( "steady_aim", ::give_steady_aim, ::take_steady_aim );
maps\mp\alien\_chaos_utility::register_perk( "more_health", ::give_more_health, ::take_more_health );
maps\mp\alien\_chaos_utility::register_perk( "stronger_melee", ::give_stronger_melee, ::take_stronger_melee );
maps\mp\alien\_chaos_utility::register_perk( "bullet_damage_1", ::give_bullet_damage_1, ::take_bullet_damage_1 );
maps\mp\alien\_chaos_utility::register_perk( "bullet_damage_2", ::give_bullet_damage_2, ::take_bullet_damage_2 );
maps\mp\alien\_chaos_utility::register_perk( "fast_health_regen", ::give_fast_health_regen, ::take_fast_health_regen );
maps\mp\alien\_chaos_utility::register_perk( "more_cash", ::give_more_cash, ::take_more_cash );
maps\mp\alien\_chaos_utility::register_perk( "better_traps", ::give_trap_damage, ::take_trap_damage );
maps\mp\alien\_chaos_utility::register_perk( "feral_vision", ::give_feral_vision, ::take_feral_vision );
}
give_perk( var_0, var_1 )
{
var_0 maps\mp\_utility::giveperk( var_1, 0 );
}
take_perk( var_0, var_1 )
{
var_0 maps\mp\_utility::_unsetperk( var_1 );
}
give_speed( var_0, var_1 )
{
var_0.movespeedscaler = 1.3;
}
take_speed( var_0, var_1 )
{
var_0.movespeedscaler = 1.0;
}
give_gas_mask( var_0, var_1 )
{
var_0.perk_data["medic"].gas_damage_scalar = 0;
}
take_gas_mask( var_0, var_1 )
{
var_0.perk_data["medic"].gas_damage_scalar = 1.0;
}
give_hand_perks( var_0, var_1 )
{
var_0 maps\mp\_utility::giveperk( "specialty_quickdraw", 0 );
var_0 maps\mp\_utility::giveperk( "specialty_quickswap", 0 );
var_0 maps\mp\_utility::giveperk( "specialty_fastoffhand", 0 );
var_0 maps\mp\_utility::giveperk( "specialty_fastsprintrecovery", 0 );
}
take_hand_perks( var_0, var_1 )
{
var_0 maps\mp\_utility::_unsetperk( "specialty_quickdraw" );
var_0 maps\mp\_utility::_unsetperk( "specialty_quickswap" );
var_0 maps\mp\_utility::_unsetperk( "specialty_fastoffhand" );
var_0 maps\mp\_utility::_unsetperk( "specialty_fastsprintrecovery" );
}
give_revive_protection( var_0, var_1 )
{
var_0.perk_data["medic"].revive_time_scalar = 1.5;
var_0.perk_data["medic"].revive_damage_scalar = 0.5;
}
take_revive_protection( var_0, var_1 )
{
var_0.perk_data["medic"].revive_time_scalar = 1.0;
var_0.perk_data["medic"].revive_damage_scalar = 1.0;
}
give_steady_aim( var_0, var_1 )
{
var_0 setaimspreadmovementscale( 0.5 );
}
take_steady_aim( var_0, var_1 )
{
var_0 setaimspreadmovementscale( 1.0 );
}
give_more_health( var_0, var_1 )
{
var_0.perk_data["health"].max_health = 200;
var_0.maxhealth = var_0.perk_data["health"].max_health;
var_0 notify( "health_perk_upgrade" );
}
take_more_health( var_0, var_1 )
{
var_0.perk_data["health"].max_health = 100;
var_0.maxhealth = var_0.perk_data["health"].max_health;
var_0 notify( "health_perk_upgrade" );
}
give_stronger_melee( var_0, var_1 )
{
var_0.perk_data["health"].melee_scalar = 3.0;
}
take_stronger_melee( var_0, var_1 )
{
var_0.perk_data["health"].melee_scalar = 1.0;
}
give_bullet_damage_1( var_0, var_1 )
{
var_0.perk_data["damagemod"].bullet_damage_scalar = 1.2;
}
take_bullet_damage_1( var_0, var_1 )
{
var_0.perk_data["damagemod"].bullet_damage_scalar = 1.0;
}
give_bullet_damage_2( var_0, var_1 )
{
var_0.perk_data["damagemod"].bullet_damage_scalar = 1.5;
}
take_bullet_damage_2( var_0, var_1 )
{
var_0.perk_data["damagemod"].bullet_damage_scalar = 1.0;
}
give_fast_health_regen( var_0, var_1 )
{
var_0.ishealthboosted = 1;
}
take_fast_health_regen( var_0, var_1 )
{
var_0.ishealthboosted = undefined;
}
give_more_cash( var_0, var_1 )
{
var_0 maps\mp\alien\_persistence::set_player_max_currency( 8000 );
var_0.chaosinthemoney = 1;
}
take_more_cash( var_0, var_1 )
{
var_0 maps\mp\alien\_persistence::set_player_max_currency( 6000 );
var_0.chaosinthemoney = undefined;
}
give_trap_damage( var_0, var_1 )
{
var_0.perk_data["rigger"].trap_cost_scalar = 0.8;
var_0.perk_data["rigger"].trap_duration_scalar = 1.5;
var_0.perk_data["rigger"].trap_damage_scalar = 2.0;
}
take_trap_damage( var_0, var_1 )
{
var_0.perk_data["rigger"].trap_cost_scalar = 1.0;
var_0.perk_data["rigger"].trap_duration_scalar = 1.0;
var_0.perk_data["rigger"].trap_damage_scalar = 1.0;
}
give_feral_vision( var_0, var_1 )
{
var_0 thread maps\mp\alien\_outline_proto::set_alien_outline();
var_0.isferal = 1;
}
take_feral_vision( var_0, var_1 )
{
var_0 thread maps\mp\alien\_outline_proto::unset_alien_outline();
var_0.isferal = undefined;
var_0 notify( "unset_adrenaline" );
}
register_bonus_packages()
{
maps\mp\alien\_chaos_utility::register_drop_locations();
maps\mp\alien\_chaos_utility::register_bonus_progression();
register_package_types();
}
get_drop_locations( var_0 )
{
var_1 = [];
var_2 = maps\mp\alien\_chaos_utility::get_random_player();
var_3 = var_2 getplayerangles();
var_4 = 360 / var_0;
for ( var_5 = 0; var_5 < var_0; var_5++ )
{
var_6 = anglestoforward( ( 0, var_5 * var_4, 0 ) );
var_7 = rotatevector( var_6, var_3 );
var_7 = var_7 * ( 1, 1, 0 );
var_7 = vectornormalize( var_7 );
var_1[var_1.size] = maps\mp\alien\_chaos_utility::get_drop_location_rated( var_7, var_2.origin );
}
return var_1;
}
get_bonus_items_list( var_0, var_1 )
{
var_2 = [];
var_3 = maps\mp\alien\_utility::getmultiplerandomindex( var_0["package_group_chance"], var_1 );
foreach ( var_9, var_5 in var_3 )
{
var_6 = strtok( var_0["package_group_type"][var_5], "-" );
var_7 = maps\mp\alien\_chaos_utility::convert_array_to_int( strtok( var_0["item_chance"][var_5], "-" ) );
var_8 = maps\mp\alien\_utility::getrandomindex( var_7 );
var_2[var_2.size] = var_6[var_8];
}
return var_2;
}
register_package_types()
{
maps\mp\alien\_chaos_utility::init_chaos_bonus_package_type();
maps\mp\alien\_chaos_utility::init_chaos_deployable( "combo_freeze", "alien_dpad_icon_freeze", ::give_combo_freeze );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "skill_upgrade", "alien_chaos_waypoint_skill", ::upgrade_all_skills );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "grace_period", "alien_chaos_waypoint_time", ::give_grace_period );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "bonus_score", "alien_chaos_waypoint_score", ::give_bonus_score );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "bonus_cash", "alien_dpad_icon_team_money", ::give_bonus_cash );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "trophy", "alien_chaos_waypoint_gift", ::give_trophy );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "flare", "alien_chaos_waypoint_gift", ::give_flare );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "pet_leash", "alien_chaos_waypoint_gift", ::give_pet_leash );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "soflam", "alien_chaos_waypoint_gift", ::give_soflam );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "self_revive", "alien_icon_laststand", ::give_self_revive );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "specialist_skill", "hud_alien_ammo_infinite", ::give_specalist_class_skill );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "tank_skill", "alien_dpad_icon_tank", ::give_tank_class_skill );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "engineer_skill", "alien_dpad_icon_engineer", ::give_engineer_class_skill );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "medic_skill", "alien_dpad_icon_medic", ::give_medic_class_skill );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "venom_x", "alien_chaos_waypoint_venomx", ::give_venom_x );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "venom_fire", "alien_chaos_waypoint_venomx", ::give_venom_fire );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "venom_lightning", "alien_chaos_waypoint_venomx", ::give_venom_lightning );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "tesla_trap", "alien_chaos_waypoint_tesla", ::give_tesla_trap );
maps\mp\alien\_chaos_utility::init_chaos_deployable( "hypno_trap", "alien_chaos_waypoint_hypno", ::give_hypno_trap );
add_special_ammo_dox_as_bonus_package();
}
add_special_ammo_dox_as_bonus_package()
{
maps\mp\alien\_chaos_utility::add_to_chaos_bonus_package_type( "deployable_specialammo" );
maps\mp\alien\_chaos_utility::add_to_chaos_bonus_package_type( "deployable_specialammo_in" );
maps\mp\alien\_chaos_utility::add_to_chaos_bonus_package_type( "deployable_specialammo_explo" );
maps\mp\alien\_chaos_utility::add_to_chaos_bonus_package_type( "deployable_specialammo_ap" );
}
drop_bonus_package( var_0, var_1 )
{
var_2 = 0.3;
var_3 = maps\mp\alien\_chaos_utility::get_random_player();
var_4 = maps\mp\alien\_chaos_utility::play_fx_on_package( var_1, var_3.angles );
wait( var_2 );
var_5 = maps\mp\alien\_deployablebox::createboxforplayer( var_0, var_1, var_3 );
var_5.air_dropped = 1;
var_5 maps\mp\alien\_deployablebox::box_setactive( 1 );
var_4 thread maps\mp\alien\_chaos_utility::clean_up_monitor( var_4, var_5 );
}
give_tesla_trap( var_0 )
{
if ( isdefined( level.tesla_trap_func ) )
self thread [[ level.tesla_trap_func ]]( "amolecular_nucleicbattery_wire" );
}
give_hypno_trap( var_0 )
{
if ( isdefined( level.hypno_trap_func ) )
self thread [[ level.hypno_trap_func ]]( "biolum_cellbattery_pressureplate" );
}
give_venom_x( var_0 )
{
var_1 = spawnstruct();
var_1.item_ref = "weapon_iw6_aliendlc11_mp";
var_1.data = [];
var_1.data["cost"] = 0;
remove_special_weapon();
maps\mp\alien\_collectibles::give_weapon( var_1 );
}
give_venom_fire( var_0 )
{
var_1 = spawnstruct();
var_1.item_ref = "weapon_iw6_aliendlc11fi_mp";
var_1.data = [];
var_1.data["cost"] = 0;
remove_special_weapon();
maps\mp\alien\_collectibles::give_weapon( var_1 );
}
give_venom_lightning( var_0 )
{
var_1 = spawnstruct();
var_1.item_ref = "weapon_iw6_aliendlc11li_mp";
var_1.data = [];
var_1.data["cost"] = 0;
remove_special_weapon();
maps\mp\alien\_collectibles::give_weapon( var_1 );
}
remove_special_weapon()
{
var_0 = self getcurrentprimaryweapon();
switch ( var_0 )
{
case "iw6_alienmaaws_mp":
case "iw6_alienmk324_mp":
case "iw6_alienmk323_mp":
case "iw6_alienmk322_mp":
case "iw6_alienmk321_mp":
case "iw6_alienmk32_mp":
case "iw6_alienminigun4_mp":
case "iw6_alienminigun3_mp":
case "iw6_alienminigun2_mp":
case "iw6_alienminigun1_mp":
case "iw6_alienminigun_mp":
self takeweapon( var_0 );
wait 0.1;
break;
}
}
give_medic_class_skill( var_0 )
{
maps\mp\alien\_hud::set_has_chaos_class_skill_bonus( self, 4 );
self.haschaosclassskill = 1;
thread chaos_class_use_monitor( var_0, "medic" );
}
give_engineer_class_skill( var_0 )
{
maps\mp\alien\_hud::set_has_chaos_class_skill_bonus( self, 3 );
self.haschaosclassskill = 1;
thread chaos_class_use_monitor( var_0, "engineer" );
}
give_tank_class_skill( var_0 )
{
maps\mp\alien\_hud::set_has_chaos_class_skill_bonus( self, 2 );
self.haschaosclassskill = 1;
thread chaos_class_use_monitor( var_0, "tank" );
}
give_specalist_class_skill( var_0 )
{
maps\mp\alien\_hud::set_has_chaos_class_skill_bonus( self, 1 );
self.haschaosclassskill = 1;
thread chaos_class_use_monitor( var_0, "specialist" );
}
chaos_class_use_monitor( var_0, var_1 )
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "action_slot_1" );
self.chaosclassskillinuse = 1;
self.haschaosclassskill = 0;
maps\mp\alien\_hud::set_has_chaos_class_skill_bonus( self, 0 );
refill_combo_meter();
switch ( var_1 )
{
case "specialist":
thread activate_specialist_class_skill();
break;
case "tank":
thread activate_tank_class_skill();
break;
case "medic":
thread activate_medic_class_skill();
break;
case "engineer":
thread activate_engineer_class_skill();
break;
}
}
activate_engineer_class_skill()
{
self endon( "disconnect" );
var_0 = [];
var_0["cooldown"] = 20;
var_0["cost"] = 0;
var_0["duration"] = 15;
thread maps\mp\alien\_alien_class_skills_main::sound_audio_weapon_activate();
maps\mp\alien\_music_and_dialog::playengineerclassskillvo( self );
maps\mp\alien\_alien_class_skills_main::engineer_slow_field( var_0 );
self.chaosclassskillinuse = undefined;
}
activate_medic_class_skill()
{
self endon( "disconnect" );
var_0 = [];
var_0["cooldown"] = 20;
var_0["cost"] = 0;
var_0["duration"] = 15;
maps\mp\alien\_music_and_dialog::playmedicclassskillvo( self );
maps\mp\alien\_alien_class_skills_main::create_heal_ring( var_0 );
self.chaosclassskillinuse = undefined;
}
activate_tank_class_skill()
{
self endon( "disconnect" );
level.meleestunradius = 128;
level.meleestunmaxdamage = 1;
level.meleestunmindamage = 1;
var_0 = [];
var_0["cooldown"] = 20;
var_0["cost"] = 0;
var_0["duration"] = 15;
self visionsetnakedforplayer( "mp_alien_thermal_trinity", 0.5 );
maps\mp\alien\_music_and_dialog::playtankclassskillvo( self );
thread maps\mp\alien\_alien_class_skills_main::create_tank_ring( var_0 );
maps\mp\alien\_alien_class_skills_main::tank_skill_flare( var_0 );
self visionsetnakedforplayer( "", 0.5 );
self.chaosclassskillinuse = undefined;
}
activate_specialist_class_skill()
{
self endon( "disconnect" );
var_0 = [];
var_0["cooldown"] = 20;
var_0["cost"] = 0;
var_0["duration"] = 15;
thread maps\mp\alien\_alien_class_skills_main::sound_audio_weapon_activate();
maps\mp\alien\_music_and_dialog::playweaponclassskillvo( self );
self.skill_in_use = 1;
thread maps\mp\alien\_alien_class_skills_main::effect_on_fire( var_0 );
self.camfx = spawnfxforclient( loadfx( "vfx/gameplay/alien/vfx_alien_cskill_wspecial_01" ), self.origin, self );
triggerfx( self.camfx );
maps\mp\alien\_deployablebox_functions::filllaunchers( undefined, 1 );
maps\mp\alien\_alien_class_skills_main::specialist_boost( var_0 );
self.skill_in_use = undefined;
if ( isdefined( self.camfx ) )
self.camfx delete();
self.chaosclassskillinuse = undefined;
}
give_combo_freeze( var_0 )
{
maps\mp\alien\_hud::set_has_combo_freeze( self, 1 );
self.hascombofreeze = 1;
thread combo_freeze_use_monitor();
}
combo_freeze_use_monitor( var_0 )
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill( "action_slot_2" );
self.hascombofreeze = undefined;
maps\mp\alien\_hud::set_has_combo_freeze( self, 0 );
level thread activate_combo_freeze();
}
activate_combo_freeze()
{
level notify( "activate_combo_freeze" );
level endon( "activate_combo_freeze" );
level endon( "game_ended" );
maps\mp\alien\_hud::freeze_combo_meter( 15 );
common_scripts\utility::flag_set( "combo_freeze" );
wait 15;
maps\mp\alien\_hud::unfreeze_combo_meter();
common_scripts\utility::flag_clear( "combo_freeze" );
refill_combo_meter();
}
upgrade_all_skills( var_0 )
{
inc_num_skill_upgrade_earned();
foreach ( var_2 in level.players )
upgrade_player_all_skills( var_2 );
}
upgrade_player_all_skills( var_0 )
{
var_1 = [ "defense", "offense" ];
foreach ( var_3 in var_1 )
var_0 notify( "luinotifyserver", var_3 + "_try_upgrade" );
}
init_num_skill_upgrade_earned()
{
level.num_skill_upgrade_earned = 0;
}
inc_num_skill_upgrade_earned()
{
level.num_skill_upgrade_earned = min( 4, level.num_skill_upgrade_earned + 1 );
}
get_num_skill_upgrade_earned()
{
return int( level.num_skill_upgrade_earned );
}
init_grace_period_end_time()
{
level.grace_period_end_time = gettime();
}
start_grace_period( var_0 )
{
level notify( "start_grace_period" );
level endon( "start_grace_period" );
level endon( "game_ended" );
var_1 = gettime();
var_2 = get_grace_period_end_time( var_1, var_0 );
var_0 = ( var_2 - var_1 ) / 1000;
common_scripts\utility::flag_clear( "grace_period_over" );
maps\mp\alien\_hud::set_grace_period_clock( var_2 );
wait( var_0 );
common_scripts\utility::flag_set( "grace_period_over" );
maps\mp\alien\_hud::unset_grace_period_clock();
if ( !common_scripts\utility::flag( "combo_is_alive" ) )
maps\mp\alien\_chaos_utility::chaos_end_game();
}
get_grace_period_end_time( var_0, var_1 )
{
var_1 = var_1 * 1000;
if ( level.grace_period_end_time <= var_0 )
level.grace_period_end_time = var_0 + var_1;
else
level.grace_period_end_time = level.grace_period_end_time + var_1;
return level.grace_period_end_time;
}
give_grace_period( var_0 )
{
level thread start_grace_period( 30 );
}
give_bonus_score( var_0 )
{
process_chaos_event( "bonus_score" );
}
give_bonus_cash( var_0 )
{
foreach ( var_2 in level.players )
var_2 maps\mp\alien\_persistence::give_player_currency( 3000 );
}
give_trophy( var_0 )
{
give_chaos_offhand_item( self, "alientrophy_mp", "flash" );
}
give_flare( var_0 )
{
give_chaos_offhand_item( self, "alienflare_mp", "flash" );
}
give_pet_leash( var_0 )
{
give_chaos_offhand_item( self, "alienthrowingknife_mp", "throwingknife" );
}
give_chaos_offhand_item( var_0, var_1, var_2 )
{
remove_other_chaos_offhand_item( var_0 );
var_0 setoffhandsecondaryclass( var_2 );
var_0 giveweapon( var_1 );
var_0 setweaponammoclip( var_1, 1 );
}
remove_other_chaos_offhand_item( var_0 )
{
var_1 = [ "alienflare_mp", "alienthrowingknife_mp", "alientrophy_mp" ];
foreach ( var_3 in var_1 )
var_0 takeweapon( var_3 );
}
give_soflam( var_0 )
{
maps\mp\_utility::setlowermessage( "chaos_soflam_hint", &"ALIEN_CHAOS_SOFLAM_HINT", 3 );
self giveweapon( "aliensoflam_mp" );
}
give_self_revive( var_0 )
{
maps\mp\alien\_laststand::give_laststand( self, 1 );
}
refill_pistol_ammo()
{
self endon( "death" );
self endon( "disconnect" );
for (;;)
{
self waittill( "reload" );
var_0 = self getcurrentweapon();
var_1 = maps\mp\_utility::getweaponclass( var_0 );
if ( var_1 == "weapon_pistol" )
{
var_2 = weaponclipsize( var_0 );
var_3 = weaponstartammo( var_0 );
var_4 = var_3 - var_2;
for ( var_5 = 0; var_5 < var_2; var_5++ )
{
var_6 = self getweaponammostock( var_0 );
self setweaponammostock( var_0, var_6 + 1 );
wait 0.05;
}
}
}
}
chaos_setup_op_weapons()
{
level.opweaponsarray = [];
level.opweaponsarray[0] = "iw5_alienriotshield_mp";
level.opweaponsarray[1] = "iw5_alienriotshield1_mp";
level.opweaponsarray[2] = "iw5_alienriotshield2_mp";
level.opweaponsarray[3] = "iw5_alienriotshield3_mp";
level.opweaponsarray[4] = "iw5_alienriotshield4_mp";
level.opweaponsarray[5] = "iw6_alienminigun_mp";
level.opweaponsarray[6] = "iw6_alienminigun1_mp";
level.opweaponsarray[7] = "iw6_alienminigun2_mp";
level.opweaponsarray[8] = "iw6_alienminigun3_mp";
level.opweaponsarray[9] = "iw6_alienminigun4_mp";
level.opweaponsarray[10] = "iw6_alienmk32_mp";
level.opweaponsarray[11] = "iw6_alienmk321_mp";
level.opweaponsarray[12] = "iw6_alienmk322_mp";
level.opweaponsarray[13] = "iw6_alienmk323_mp";
level.opweaponsarray[14] = "iw6_alienmk324_mp";
level.opweaponsarray[15] = "iw6_alienmaaws_mp";
level.opweaponsarray[16] = "alienbomb_mp";
level.opweaponsarray[17] = "aliensoflam_mp";
}