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