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

1586 lines
46 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_challenge_type()
{
level.challenge_data = [];
if ( !isdefined( level.challenge_scalar_func ) )
level.challenge_scalar_func = ::default_challenge_scalar_func;
if ( isdefined( level.challenge_registration_func ) )
[[ level.challenge_registration_func ]]();
if ( maps\mp\alien\_utility::is_true( level.include_default_challenges ) )
{
register_challenge( "spend_10k", 10000, 0, undefined, undefined, ::activate_spend_currency, ::deactivate_spend_currency, undefined, ::update_spend_currency );
register_challenge( "spend_20k", 20000, 0, undefined, undefined, ::activate_spend_currency, ::deactivate_spend_currency, undefined, ::update_spend_currency );
register_challenge( "kill_leper", 30, 0, undefined, undefined, ::activate_kill_leper, ::deactivate_kill_leper, undefined, ::update_kill_leper );
register_challenge( "spend_no_money", 120, 1, undefined, undefined, ::activate_spend_no_money, ::default_resetsuccess, undefined, ::update_spend_no_money );
register_challenge( "no_reloads", 60, 1, undefined, undefined, ::activate_no_reloads, ::default_resetsuccess, undefined, ::update_no_reloads );
register_challenge( "no_abilities", 90, 1, undefined, undefined, ::activate_no_abilities, ::default_resetsuccess, undefined, ::update_no_abilities );
register_challenge( "take_no_damage", undefined, 1, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, ::update_take_no_damage );
register_challenge( "melee_5_goons", 5, 0, undefined, undefined, ::activate_melee_goons, ::deactivate_melee_goons, undefined, ::update_melee_goons );
register_challenge( "melee_spitter", 1, 0, undefined, undefined, ::activate_melee_spitter, ::deactivate_melee_spitter, undefined, ::update_melee_spitter );
register_challenge( "no_stuck_drill", undefined, 1, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, ::update_no_stuck_drill );
register_challenge( "kill_10_with_propane", 10, 0, undefined, undefined, ::activate_kill_10_with_propane, ::deactivate_kill_10_with_propane, undefined, ::update_kill_10_with_propane );
register_challenge( "stay_prone", 10, 0, undefined, undefined, ::activate_stay_prone, ::deactivate_stay_prone, undefined, ::update_stay_prone );
register_challenge( "kill_10_with_traps", 10, 0, undefined, undefined, ::activate_kill_10_with_traps, ::deactivate_kill_10_with_traps, undefined, ::update_kill_10_with_traps );
register_challenge( "avoid_minion_explosion", undefined, 1, undefined, undefined, ::activate_avoid_minion_exp, ::deactivate_avoid_minion_exp, undefined, ::update_avoid_minion_exp );
register_challenge( "75_percent_accuracy", undefined, 1, ::seventyfive_percent_accuracy_success_test, undefined, ::activate_percent_accuracy, ::deactivate_percent_accuracy, undefined, ::update_75_percent_accuracy );
register_challenge( "pistols_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::default_resetsuccess, undefined, ::update_pistols_only );
register_challenge( "shotguns_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::deactivate_weapon_challenge_waypoints, undefined, ::update_shotguns_only );
register_challenge( "snipers_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::deactivate_weapon_challenge_waypoints, undefined, ::update_snipers_only );
register_challenge( "lmgs_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::deactivate_weapon_challenge_waypoints, undefined, ::update_lmgs_only );
register_challenge( "ar_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::deactivate_weapon_challenge_waypoints, undefined, ::update_ar_only );
register_challenge( "smg_only", 10, 0, undefined, undefined, ::activate_use_weapon_challenge, ::deactivate_weapon_challenge_waypoints, undefined, ::update_smgs_only );
register_challenge( "kill_10_with_turrets", 10, 0, undefined, undefined, ::activate_kill_10_with_turrets, ::deactivate_kill_10_with_turrets, undefined, ::update_kill_10_with_turrets );
register_challenge( "kill_airborne_aliens", 5, 0, undefined, undefined, ::activate_kill_airborne_aliens, ::deactivate_kill_airborne_aliens, undefined, ::update_kill_airborne_aliens );
register_challenge( "melee_only", undefined, 1, undefined, undefined, ::activate_melee_only, ::deactivate_melee_only, undefined, ::update_melee_only );
register_challenge( "50_percent_accuracy", undefined, 1, ::fifty_percent_accuracy_success_test, undefined, ::activate_percent_accuracy, ::deactivate_percent_accuracy, undefined, ::update_50_percent_accuracy );
register_challenge( "stay_within_area", 10, 0, undefined, ::pre_activate_stay_within_area, ::activate_stay_within_area, ::deactivate_stay_within_area, undefined, ::update_stay_within_area );
register_challenge( "kill_10_in_30", 10, 0, undefined, undefined, ::activate_kill_10_in_30, ::default_resetsuccess, undefined, ::update_kill_10_in_30 );
register_challenge( "protect_player", undefined, 1, undefined, undefined, ::activate_protect_a_player, ::deactivate_protect_a_player, undefined, ::update_protect_a_player );
register_challenge( "no_laststand", undefined, 1, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, ::update_no_laststand );
register_challenge( "no_bleedout", undefined, 1, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, ::update_no_bleedout );
register_challenge( "challenge_failed", undefined, 0, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, undefined );
register_challenge( "challenge_success", undefined, 0, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, undefined );
register_challenge( "barrier_hive", undefined, 0, undefined, undefined, ::default_resetsuccess, ::default_resetsuccess, undefined, undefined );
}
init_alien_challenges_from_table();
level.current_challenge_index = -1;
level.current_challenge_progress_max = -1;
level.current_challenge_progress_current = -1;
level.current_challenge_percent = -1;
level.current_challenge_target_player = -1;
level.current_challenge_timer = -1;
level.current_challenge_scalar = -1;
level.current_challenge_title = -1;
level.current_challenge_pre_challenge = 0;
level.all_challenge_completed = 1;
level.pre_challenge_active = 0;
level.num_challenge_completed = 0;
}
register_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
{
var_11 = spawnstruct();
var_11.ref = var_0;
var_11.goal = var_1;
var_11.default_success = var_2;
var_11.issuccessfunc = ::default_issuccessfunc;
if ( isdefined( var_3 ) )
var_11.issuccessfunc = var_3;
var_11.canactivatefunc = ::default_canactivatefunc;
if ( isdefined( var_4 ) )
var_11.canactivatefunc = var_4;
var_11.activatefunc = var_5;
var_11.deactivatefunc = var_6;
var_11.failactivatefunc = ::default_failactivatefunc;
if ( isdefined( var_7 ) )
var_11.failactivatefunc = var_7;
var_11.updatefunc = var_8;
var_11.rewardfunc = ::default_rewardfunc;
if ( isdefined( var_9 ) )
var_11.rewardfunc = var_9;
var_11.failfunc = ::default_failfunc;
if ( isdefined( var_10 ) )
var_11.failfunc = var_10;
level.challenge_data[var_0] = var_11;
}
init_alien_challenges_from_table()
{
var_0 = level.alien_challenge_table;
var_1 = 0;
var_2 = 1;
var_3 = 99;
var_4 = 1;
var_5 = 2;
var_6 = 6;
var_7 = 7;
var_8 = 8;
for ( var_9 = var_2; var_9 <= var_3; var_9++ )
{
var_10 = tablelookup( var_0, var_1, var_9, var_4 );
if ( var_10 == "" )
break;
var_11 = tablelookup( var_0, var_1, var_9, var_5 );
var_12 = tablelookup( var_0, var_1, var_9, var_8 );
level.challenge_data[var_10].allowed_cycles = var_11;
level.challenge_data[var_10].allowedinsolo = int( tablelookup( var_0, var_1, var_9, var_6 ) );
level.challenge_data[var_10].allowed_hives = var_12;
}
}
default_canactivatefunc()
{
return 1;
}
default_failactivatefunc()
{
}
default_issuccessfunc()
{
return self.success;
}
default_failfunc()
{
}
default_resetsuccess()
{
self.success = self.default_success;
}
default_rewardfunc()
{
var_0 = 1;
foreach ( var_2 in level.players )
var_2 maps\mp\alien\_persistence::give_player_points( var_0 );
}
activate_spend_currency()
{
activate_spend_money_progress();
}
deactivate_spend_currency()
{
reset_spend_money_progress();
}
reset_spend_money_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
activate_spend_money_progress()
{
default_resetsuccess();
self.current_progress = 0;
self.goal = self.goal * 1000;
update_challenge_progress( 0, self.goal );
}
update_spend_currency( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_leper()
{
default_resetsuccess();
if ( !isdefined( level.current_cycle ) )
level waittill( "alien_cycle_started" );
self.leper = maps\mp\alien\_spawn_director::spawn_alien( "leper" );
self.leper thread leper_watch_death();
self.leper thread maps\mp\agents\alien\_alien_leper::leper_challenge_despawn( self.goal );
var_0 = int( gettime() + 30000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = 30;
level thread update_current_challenge_timer();
}
deactivate_kill_leper()
{
default_resetsuccess();
if ( isalive( self.leper ) )
{
self.leper thread maps\mp\agents\alien\_alien_leper::leper_despawn();
self.leper = undefined;
}
}
leper_watch_death()
{
self waittill( "death", var_0, var_1, var_2 );
if ( isdefined( var_0 ) && ( isplayer( var_0 ) || isdefined( var_0.classname ) && var_0.classname == "misc_turret" && isdefined( var_0.owner ) && var_0.owner isusingturret() ) )
maps\mp\alien\_challenge::update_challenge( "kill_leper", "success" );
else
maps\mp\alien\_challenge::update_challenge( "kill_leper", "fail" );
level notify( "stop_challenge_timer" );
level.current_challenge_timer = -1;
}
update_kill_leper( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( var_0 == "success" )
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_spend_no_money()
{
default_resetsuccess();
var_0 = int( gettime() + self.goal * 1000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = self.goal;
level thread update_current_challenge_timer();
level thread spend_no_money_timer( self );
}
spend_no_money_timer( var_0 )
{
level endon( "game_ended" );
var_0 endon( "fail" );
wait( var_0.goal );
var_0.success = 1;
level notify( "stop_challenge_timer" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_spend_no_money( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
self notify( "fail" );
level notify( "stop_challenge_timer" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_no_reloads()
{
default_resetsuccess();
var_0 = int( gettime() + self.goal * 1000 );
level.current_challenge_timer = self.goal;
level thread update_current_challenge_timer();
level thread no_reload_timer( self );
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", var_0 );
var_2 thread wait_for_reload();
}
}
no_reload_timer( var_0 )
{
level endon( "stop_watching_reload" );
wait( var_0.goal );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "stop_challenge_timer" );
level notify( "stop_watching_reload" );
}
wait_for_reload()
{
level endon( "stop_watching_reload" );
self waittill( "reload" );
maps\mp\alien\_challenge::update_challenge( "no_reloads" );
level notify( "stop_watching_reload" );
}
update_no_reloads( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "stop_challenge_timer" );
}
activate_no_abilities()
{
default_resetsuccess();
var_0 = int( gettime() + self.goal * 1000 );
level.current_challenge_timer = self.goal;
level thread update_current_challenge_timer();
level thread no_abilities_timer( self );
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", var_0 );
var_2 thread wait_for_ability_use();
}
}
no_abilities_timer( var_0 )
{
level endon( "stop_watching_ability_use" );
wait( var_0.goal );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "stop_challenge_timer" );
level notify( "stop_watching_ability_use" );
}
wait_for_ability_use()
{
level endon( "stop_watching_ability_use" );
common_scripts\utility::waittill_any( "action_finish_used", "class_skill_used" );
maps\mp\alien\_challenge::update_challenge( "no_abilities" );
level notify( "stop_watching_ability_use" );
}
update_no_abilities( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "stop_challenge_timer" );
}
update_take_no_damage( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
nodamage_rewardfunc()
{
var_0 = 250;
foreach ( var_2 in level.players )
var_2 thread maps\mp\alien\_persistence::give_player_currency( var_0 );
}
activate_melee_goons()
{
reset_melee_goons_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_melee_goons()
{
reset_melee_goons_progress();
}
reset_melee_goons_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_melee_goons( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_melee_spitter()
{
reset_melee_spitter_progress();
}
deactivate_melee_spitter()
{
reset_melee_spitter_progress();
}
reset_melee_spitter_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_melee_spitter( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_no_stuck_drill( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_no_laststand( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_no_bleedout( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_10_with_propane()
{
reset_kill_10_with_propane_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_kill_10_with_propane()
{
reset_kill_10_with_propane_progress();
}
reset_kill_10_with_propane_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_kill_10_with_propane( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_10_with_traps()
{
reset_kill_10_with_traps_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_kill_10_with_traps()
{
reset_kill_10_with_traps_progress();
}
reset_kill_10_with_traps_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_kill_10_with_traps( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_stay_prone()
{
reset_stay_prone_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_stay_prone()
{
reset_stay_prone_progress();
}
reset_stay_prone_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_stay_prone( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_protect_a_player()
{
default_resetsuccess();
var_0 = [];
foreach ( var_2 in level.players )
{
if ( isalive( var_2 ) && !var_2 maps\mp\alien\_utility::is_in_laststand() )
var_0[var_0.size] = var_2;
}
var_4 = common_scripts\utility::random( var_0 );
foreach ( var_2 in level.players )
{
var_6 = var_4 getentitynumber();
var_2 setclientomnvar( "ui_intel_target_player", var_6 );
}
level.current_challenge_target_player = var_4 getentitynumber();
var_4 maps\mp\_entityheadicons::setheadicon( var_4.team, "waypoint_defend", ( 0, 0, 72 ), 4, 4, undefined, undefined, undefined, 1, undefined, 0 );
level thread watch_target_player( var_4, self );
level thread watch_drill_detonated( var_4, self );
}
watch_target_player( var_0, var_1 )
{
level endon( "drill_detonated" );
var_0 common_scripts\utility::waittill_any( "death", "last_stand", "disconnect" );
var_0 remove_head_icon();
var_1.success = 0;
update_protect_a_player();
}
update_protect_a_player()
{
maps\mp\alien\_challenge::deactivate_current_challenge();
foreach ( var_1 in level.players )
var_1 setclientomnvar( "ui_intel_target_player", -1 );
level.current_challenge_target_player = -1;
}
watch_drill_detonated( var_0, var_1 )
{
var_0 endon( "death" );
var_0 endon( "last_stand" );
var_0 endon( "disconnect" );
level waittill( "drill_detonated" );
var_0 remove_head_icon();
update_protect_a_player();
}
remove_head_icon()
{
foreach ( var_2, var_1 in self.entityheadicons )
{
if ( !isdefined( var_1 ) )
continue;
var_1 destroy();
}
}
deactivate_protect_a_player()
{
default_resetsuccess();
}
activate_avoid_minion_exp()
{
default_resetsuccess();
}
deactivate_avoid_minion_exp()
{
default_resetsuccess();
}
update_avoid_minion_exp( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_75_percent_accuracy( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.total_shots_hit++;
}
seventyfive_percent_accuracy_success_test( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
return self.current_accuracy >= 75;
}
fifty_percent_accuracy_success_test( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
return self.current_accuracy >= 50;
}
update_50_percent_accuracy( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.total_shots_hit++;
}
activate_percent_accuracy()
{
default_resetsuccess();
self.total_shots_fired = 0;
self.total_shots_hit = 0;
self.current_accuracy = 0;
self.is_updating = 0;
level thread track_percent_accuracy_shots_fired( self );
level thread update_percent_accuracy( self );
update_challenge_percent( 0 );
}
deactivate_percent_accuracy()
{
default_resetsuccess();
self.total_shots_fired = 0;
self.total_shots_hit = 0;
level notify( "deactivate_track_accuracy" );
}
activate_use_weapon_challenge()
{
setup_challenge_waypoints( self );
default_resetsuccess();
self.current_progress = 0;
update_challenge_progress( 0, self.goal );
}
update_pistols_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_pistol" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_shotguns_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_shotgun" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_snipers_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_sniper" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_lmgs_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_lmg" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_ar_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_assault" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
update_smgs_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( maps\mp\_utility::getweaponclass( var_0 ) == "weapon_smg" || maps\mp\alien\_utility::is_true( var_2 ) )
self.current_progress++;
update_challenge_progress( self.current_progress, self.goal );
if ( self.current_progress >= self.goal )
{
self.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_kill_10_with_turrets()
{
reset_kill_10_with_turrets_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_kill_10_with_turrets()
{
reset_kill_10_with_turrets_progress();
}
reset_kill_10_with_turrets_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_kill_10_with_turrets( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_airborne_aliens()
{
reset_kill_airborne_aliens_progress();
update_challenge_progress( 0, self.goal );
}
deactivate_kill_airborne_aliens()
{
reset_kill_airborne_aliens_progress();
}
reset_kill_airborne_aliens_progress()
{
default_resetsuccess();
self.current_progress = 0;
}
update_kill_airborne_aliens( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
self.success = 1;
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_melee_only()
{
reset_melee_only_progress();
}
deactivate_melee_only()
{
reset_melee_only_progress();
}
reset_melee_only_progress()
{
default_resetsuccess();
}
update_melee_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
pre_activate_stay_within_area()
{
var_0 = get_challenge_ring_location( level.current_hive_name );
var_1 = bullettrace( var_0 + ( 0, 0, 20 ), var_0 - ( 0, 0, 20 ), 0, undefined, 1, 0, 1, 1 );
self.ring_ent = spawn( "script_model", var_1["position"] );
self.ring_ent setmodel( "tag_origin" );
wait 0.1;
self.ring_fx = playfxontag( level._effect["challenge_ring"], self.ring_ent, "tag_origin" );
return 1;
}
activate_stay_within_area()
{
default_resetsuccess();
self.current_progress = 0;
self.distance_check = 22500;
update_challenge_progress( 0, self.goal );
}
update_stay_within_area( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( abs( var_1[2] - self.ring_ent.origin[2] ) > 75 )
return;
var_9 = distancesquared( var_1, self.ring_ent.origin );
if ( var_9 > self.distance_check )
return;
self.current_progress++;
if ( self.current_progress >= self.goal )
self.success = 1;
var_10 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
deactivate_stay_within_area()
{
level notify( "ring_challenge_ended" );
self.current_progress = 0;
self.ring_ent delete();
self.ring_fx = undefined;
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon destroy();
default_resetsuccess();
}
activate_kill_10_in_30()
{
default_resetsuccess();
self.current_progress = 0;
var_0 = int( gettime() + 30000 );
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_timer", var_0 );
level.current_challenge_timer = 30;
level thread update_current_challenge_timer();
update_challenge_progress( 0, self.goal );
level thread kill_10_in_30_timer( self );
}
kill_10_in_30_timer( var_0 )
{
level endon( "game_ended" );
self endon( "success" );
wait 30;
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_kill_10_in_30( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
self.current_progress = self.current_progress + var_0;
if ( self.current_progress >= self.goal )
{
self.success = 1;
self notify( "success" );
}
var_9 = self.goal - self.current_progress;
update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_alien_death_challenges( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
var_9 = level.current_challenge;
if ( isdefined( level.custom_death_challenge_func ) )
{
var_10 = self [[ level.custom_death_challenge_func ]]( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 );
if ( !maps\mp\alien\_utility::is_true( var_10 ) )
return;
}
var_11 = isdefined( var_1 ) && isplayer( var_1 );
var_12 = isdefined( var_1 );
var_13 = isdefined( var_0 ) && isplayer( var_0 );
var_14 = isdefined( var_0 );
var_15 = maps\mp\alien\_utility::get_alien_type();
var_16 = isdefined( var_4 );
var_17 = 0;
if ( var_16 )
var_17 = is_explosive_kill( var_4 );
var_18 = 0;
if ( var_14 )
var_18 = maps\mp\alien\_utility::is_trap( var_0 );
switch ( var_9 )
{
case "snipers_only":
case "shotguns_only":
case "lmgs_only":
case "smg_only":
case "ar_only":
case "pistols_only":
if ( var_16 && var_3 != "MOD_MELEE" )
{
var_19 = is_arc_death( var_0, var_1, var_12, var_11, var_14, var_13 );
if ( !var_14 || var_13 || var_19 )
{
if ( var_19 )
maps\mp\alien\_challenge::update_challenge( var_9, var_4, var_3, var_19 );
else
maps\mp\alien\_challenge::update_challenge( var_9, var_4, var_3 );
}
}
break;
case "melee_5_goons":
if ( var_15 == "goon" && var_11 && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_5_goons", 1 );
break;
case "melee_spitter":
if ( var_15 == "spitter" && var_11 && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_spitter", 1 );
break;
case "melee_only":
if ( var_11 && var_3 != "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_only" );
break;
case "kill_airborne_aliens":
if ( var_11 && isdefined( self.trajectoryactive ) && self.trajectoryactive )
maps\mp\alien\_challenge::update_challenge( "kill_airborne_aliens", 1 );
else if ( var_11 && ( maps\mp\alien\_utility::is_true( self.in_air ) || var_15 == "bomber" ) && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "kill_airborne_aliens", 1 );
else if ( var_11 && var_15 == "ancestor" )
maps\mp\alien\_challenge::update_challenge( "kill_airborne_aliens", 1 );
break;
case "stay_prone":
if ( ( var_11 || var_13 ) && var_1 getstance() == "prone" )
maps\mp\alien\_challenge::update_challenge( "stay_prone", 1 );
break;
case "kill_10_with_turrets":
if ( var_11 && var_16 && maps\mp\alien\_damage::isalienturret( var_4 ) )
maps\mp\alien\_challenge::update_challenge( "kill_10_with_turrets", 1 );
else if ( var_12 && isdefined( var_1.classname ) && var_1.classname == "misc_turret" && var_16 && maps\mp\alien\_damage::isalienturret( var_4 ) )
maps\mp\alien\_challenge::update_challenge( "kill_10_with_turrets", 1 );
break;
case "stay_within_area":
if ( var_11 )
maps\mp\alien\_challenge::update_challenge( "stay_within_area", self.origin, var_1.origin );
break;
case "kill_10_in_30":
if ( var_11 )
maps\mp\alien\_challenge::update_challenge( "kill_10_in_30", 1 );
break;
case "kill_10_with_propane":
if ( var_16 && var_4 == "alienpropanetank_mp" )
maps\mp\alien\_challenge::update_challenge( "kill_10_with_propane", 1 );
else if ( var_14 && isdefined( var_0.classname ) && var_0.classname == "trigger_radius" )
maps\mp\alien\_challenge::update_challenge( "kill_10_with_propane", 1 );
break;
case "kill_10_with_traps":
if ( var_18 )
maps\mp\alien\_challenge::update_challenge( "kill_10_with_traps", 1 );
break;
}
}
is_arc_death( var_0, var_1, var_2, var_3, var_4, var_5 )
{
return var_2 && var_3 && var_4 && !var_5 && isdefined( var_1.stun_struct ) && isdefined( var_1.stun_struct.attack_bolt ) && var_0 == var_1.stun_struct.attack_bolt;
}
update_alien_damage_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 )
{
if ( !isdefined( level.current_challenge ) )
return;
if ( level.current_challenge == "melee_only" && var_4 != "MOD_MELEE" && !maps\mp\alien\_utility::is_flaming_stowed_riotshield_damage( var_4, var_5, var_0 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "melee_only" );
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( isdefined( level.custom_damage_challenge_func ) )
{
var_11 = self [[ level.custom_damage_challenge_func ]]( var_0, var_1, var_2, var_4, var_5, var_7, var_8, var_9, var_10 );
if ( !maps\mp\alien\_utility::is_true( var_11 ) )
return;
}
var_1 endon( "disconnect" );
common_scripts\utility::waitframe();
if ( isdefined( var_1.fired_weapon ) )
{
if ( isdefined( var_5 ) && var_5 == "alienpropanetank_mp" || var_5 == "spore_pet_beam_mp" )
return;
if ( isdefined( var_0 ) && isdefined( var_0.classname ) && var_0.classname == "trigger_radius" )
return;
if ( isdefined( var_4 ) && var_4 == "MOD_MELEE" )
return;
if ( var_3 & 8 )
return;
if ( maps\mp\alien\_damage::isaliennonmannedturret( var_5 ) )
return;
if ( var_4 == "MOD_EXPLOSIVE_BULLET" && var_8 == "none" )
return;
if ( isdefined( var_5 ) && var_5 == "alienims_projectile_mp" )
return;
if ( isdefined( var_5 ) && maps\mp\_utility::getweaponclass( var_5 ) == "weapon_shotgun" )
var_1.fired_weapon = undefined;
if ( isdefined( level.current_challenge ) )
{
if ( level.current_challenge == "75_percent_accuracy" )
maps\mp\alien\_challenge::update_challenge( "75_percent_accuracy", 1 );
else if ( level.current_challenge == "50_percent_accuracy" )
maps\mp\alien\_challenge::update_challenge( "50_percent_accuracy", 1 );
}
var_1.fired_weapon = undefined;
}
}
}
is_explosive_kill( var_0 )
{
switch ( var_0 )
{
case "iw6_alienmk324_mp":
case "iw6_alienmk323_mp":
case "iw6_alienmk322_mp":
case "iw6_alienmk321_mp":
case "iw6_alienmk32_mp":
case "alienclaymore_mp":
case "aliensemtex_mp":
case "alienbetty_mp":
return 1;
default:
return 0;
}
}
clear_last_alien_damaged_time()
{
self endon( "disconnect" );
wait 0.05;
self.last_alien_damaged_time = undefined;
}
update_alien_weapon_challenges( var_0, var_1 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "snipers_only":
case "shotguns_only":
case "lmgs_only":
case "smg_only":
case "ar_only":
case "pistols_only":
maps\mp\alien\_challenge::update_challenge( level.current_challenge, var_0, var_1 );
break;
default:
return;
}
}
update_challenge_progress( var_0, var_1 )
{
foreach ( var_3 in level.players )
{
var_3 setclientomnvar( "ui_intel_progress_current", int( var_0 ) );
var_3 setclientomnvar( "ui_intel_progress_max", int( var_1 ) );
}
level.current_challenge_progress_max = var_1;
level.current_challenge_progress_current = var_0;
}
update_challenge_percent( var_0 )
{
foreach ( var_2 in level.players )
var_2 setclientomnvar( "ui_intel_percent", var_0 );
level.current_challenge_percent = var_0;
}
update_percent_accuracy( var_0 )
{
level endon( "deactivate_track_accuracy" );
var_1 = 0;
var_2 = 0;
for (;;)
{
if ( var_0.total_shots_hit == 0 && var_0.total_shots_fired == 0 || var_0.total_shots_fired < 1 )
{
wait 0.25;
continue;
}
var_3 = int( var_0.total_shots_hit / var_0.total_shots_fired * 10000 );
if ( var_3 > 10000 )
var_3 = 10000;
var_4 = var_3 / 100;
var_0.current_accuracy = var_4;
if ( var_3 == var_1 )
{
var_2++;
if ( var_2 > 2 )
{
update_challenge_percent( var_3 );
var_2 = 0;
}
}
else
var_2 = 0;
wait 0.05;
var_1 = var_3;
}
}
fail_challenge( var_0 )
{
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
track_percent_accuracy_shots_fired( var_0 )
{
foreach ( var_2 in level.players )
{
if ( !isalive( var_2 ) )
continue;
var_2 thread track_percent_accuracy_shots_fired_internal( var_0 );
}
}
track_percent_accuracy_shots_fired_internal( var_0 )
{
level endon( "deactivate_track_accuracy" );
self endon( "disconnect" );
self endon( "death" );
childthread track_percent_accuracy_misc_shots_fired( var_0 );
for (;;)
{
self waittill( "weapon_fired", var_1 );
if ( !weapon_should_count_towards_accuracy_challenge( var_1 ) )
continue;
self.fired_weapon = 1;
var_0.total_shots_fired++;
}
}
track_percent_accuracy_misc_shots_fired( var_0 )
{
level endon( "deactivate_track_accuracy" );
self endon( "disconnect" );
self endon( "death" );
for (;;)
{
common_scripts\utility::waittill_any( "turret_fire", "nx1_large_fire" );
self.fired_weapon = 1;
var_0.total_shots_fired++;
}
}
update_current_challenge_timer()
{
level endon( "stop_challenge_timer" );
while ( level.current_challenge_timer > 0 )
{
wait 0.1;
level.current_challenge_timer = level.current_challenge_timer - 0.1;
}
}
weapon_should_count_towards_accuracy_challenge( var_0 )
{
switch ( var_0 )
{
case "alien_turret_marker_mp":
case "alienpropanetank_mp":
case "aliendeployable_crate_marker_mp":
case "switchblade_laptop_mp":
case "mortar_detonator_mp":
case "alienbomb_mp":
case "alienclaymore_mp":
case "alientrophy_mp":
case "deployable_vest_marker_mp":
case "bouncingbetty_mp":
return 0;
}
return 1;
}
get_challenge_scalar( var_0 )
{
return [[ level.challenge_scalar_func ]]( var_0 );
}
default_challenge_scalar_func( var_0 )
{
switch ( var_0 )
{
case "snipers_only":
case "shotguns_only":
case "lmgs_only":
case "smg_only":
case "ar_only":
case "pistols_only":
switch ( level.players.size )
{
case 1:
return 15;
case 2:
return 20;
case 4:
case 3:
return 25;
}
case "kill_10_with_turrets":
case "kill_10_with_traps":
case "kill_10_with_propane":
switch ( level.players.size )
{
case 1:
return 5;
case 4:
case 3:
case 2:
return 10;
}
case "kill_10_in_30":
switch ( level.players.size )
{
case 1:
return 5;
case 4:
case 3:
case 2:
return 10;
}
case "stay_within_area":
switch ( level.players.size )
{
case 1:
return 10;
case 4:
case 3:
case 2:
return 20;
}
case "kill_airborne_aliens":
switch ( level.players.size )
{
case 1:
return 3;
case 4:
case 3:
case 2:
return 5;
}
case "stay_prone":
switch ( level.players.size )
{
case 1:
return 15;
case 4:
case 3:
case 2:
return 25;
}
case "spend_20k":
switch ( level.players.size )
{
case 1:
return 6;
case 2:
return 10;
case 3:
return 15;
case 4:
return 20;
}
case "spend_10k":
switch ( level.players.size )
{
case 1:
return 6;
case 4:
case 3:
case 2:
return 10;
}
case "melee_5_goons":
switch ( level.players.size )
{
case 1:
return 5;
case 2:
return 10;
case 3:
return 10;
case 4:
return 15;
}
}
return undefined;
}
show_barrier_hive_intel()
{
var_0 = 52;
var_1 = 2;
foreach ( var_3 in level.players )
{
var_3 setclientomnvar( "ui_intel_title", var_1 );
var_3 setclientomnvar( "ui_intel_active_index", var_0 );
}
level.current_challenge_title = var_1;
level.current_challenge_index = var_0;
}
hide_barrier_hive_intel()
{
foreach ( var_1 in level.players )
{
var_1 setclientomnvar( "ui_intel_active_index", -1 );
var_1 setclientomnvar( "ui_intel_title", -1 );
}
level.current_challenge_title = -1;
level.current_challenge_index = -1;
}
get_challenge_ring_location( var_0 )
{
if ( isdefined( level.challenge_ring_location_func ) )
return [[ level.challenge_ring_location_func ]]( var_0 );
return undefined;
}
create_challenge_waypoints( var_0 )
{
var_1 = "waypoint_alien_weapon_challenge";
var_2 = 14;
var_3 = 14;
var_4 = 0.75;
var_5 = var_0.origin;
if ( level.script == "mp_alien_armory" )
var_4 = 0;
var_6 = maps\mp\alien\_hud::make_waypoint( var_1, var_2, var_3, var_4, var_5 );
return var_6;
}
setup_challenge_waypoints( var_0 )
{
var_1 = maps\mp\alien\_utility::get_current_area_name();
var_2 = level.current_challenge;
if ( var_2 == "pistols_only" )
return;
var_3 = get_challenge_weapons( var_1, var_2 );
self.challenge_weapons = [];
foreach ( var_5 in var_3 )
self.challenge_weapons[self.challenge_weapons.size] = maps\mp\_utility::getbaseweaponname( var_5 );
}
get_challenge_weapons( var_0, var_1 )
{
var_2 = get_weapon_class_for_current_challenge( var_1 );
if ( !isdefined( var_2 ) && var_1 == "semi_autos_only" )
var_2 = [ "weapon_dmr", "weapon_sniper" ];
var_3 = [];
var_4 = [];
foreach ( var_6 in level.world_items )
{
if ( level.script == "mp_alien_armory" )
{
if ( isdefined( var_6.script_noteworthy ) && var_6.script_noteworthy == "weapon_iw6_aliendlc15_mp" )
{
var_6.areas = [];
var_6.areas[0] = "checkpoint";
}
}
if ( isdefined( var_6.areas ) && var_6.areas[0] == var_0 )
{
if ( !isdefined( var_6.script_noteworthy ) )
continue;
var_7 = getsubstr( var_6.script_noteworthy, 7 );
var_8 = maps\mp\_utility::getweaponclass( var_7 );
if ( isarray( var_2 ) )
{
if ( common_scripts\utility::array_contains( var_2, var_8 ) )
{
var_3[var_3.size] = var_7;
var_9 = create_challenge_waypoints( var_6 );
var_4[var_4.size] = var_9;
}
continue;
}
if ( var_2 != var_8 )
continue;
var_3[var_3.size] = var_7;
var_9 = create_challenge_waypoints( var_6 );
var_4[var_4.size] = var_9;
}
}
self.waypoints = var_4;
return var_3;
}
get_weapon_class_for_current_challenge( var_0 )
{
switch ( var_0 )
{
case "ar_only":
return "weapon_assault";
case "snipers_only":
return "weapon_sniper";
case "smg_only":
return "weapon_smg";
case "lmgs_only":
return "weapon_lmg";
case "shotguns_only":
return "weapon_shotgun";
}
}
deactivate_weapon_challenge_waypoints()
{
if ( isdefined( self ) && isdefined( self.waypoints ) )
{
foreach ( var_1 in self.waypoints )
var_1 destroy();
}
default_resetsuccess();
}
focus_fire_update_alien_outline( var_0 )
{
foreach ( var_0 in level.players )
{
if ( common_scripts\utility::array_contains( self.damaged_by_players, var_0 ) )
{
if ( isdefined( var_0.isferal ) && var_0.isferal )
maps\mp\alien\_outline_proto::enable_outline_for_player( self, var_0, 4, 0, "high" );
else
maps\mp\alien\_outline_proto::disable_outline_for_player( self, var_0 );
continue;
}
maps\mp\alien\_outline_proto::enable_outline_for_player( self, var_0, 0, 0, "high" );
}
}