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

949 lines
36 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
register_last_challenges()
{
level.custom_onalienagentdamaged_func = ::last_custom_onalienagentdamaged_func;
level.challenge_ring_location_func = ::challenge_ring_locations;
maps\mp\alien\_challenge_function::register_challenge( "long_shot", undefined, 0, undefined, undefined, ::activate_long_shot, ::deactivate_long_shot, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "leaning_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "sliding_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "jump_shot", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "focus_fire", undefined, 0, undefined, undefined, ::generic_activate_challenge, ::deactivate_focus_fire, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_marked", undefined, 0, undefined, undefined, ::activate_kill_marked, ::deactivate_kill_marked, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "barrel_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "healthy_kills", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "minion_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_nodamage", undefined, 0, undefined, undefined, ::activate_kill_nodamage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::update_kill_nodamage );
maps\mp\alien\_challenge_function::register_challenge( "kill_phantom", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "bomber_preexplode", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "flying_aliens", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_gargoyles", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "melee_mammoth", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "higher_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "kill_rhinos", undefined, 0, undefined, undefined, ::activate_kill_rhinos, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "lower_ground", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "new_weapon", undefined, 0, undefined, undefined, ::activate_new_weapons, ::deactivate_new_weapons, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "team_prone", undefined, 0, undefined, undefined, ::generic_activate_challenge, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "semi_autos_only", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_use_weapon_challenge, maps\mp\alien\_challenge_function::deactivate_weapon_challenge_waypoints, undefined, ::update_semi_autos_only );
maps\mp\alien\_challenge_function::register_challenge( "2_weapons_only", undefined, 0, undefined, undefined, ::activate_2_weapons_only_challenge, ::deactivate_2_weapons_only, undefined, ::update_2_weapons_only );
maps\mp\alien\_challenge_function::register_challenge( "melee_5_goons_last", undefined, 0, undefined, undefined, maps\mp\alien\_challenge_function::activate_melee_goons, maps\mp\alien\_challenge_function::deactivate_melee_goons, undefined, maps\mp\alien\_challenge_function::update_melee_goons );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_1", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_2", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_3", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_4", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "stay_within_area_5", 10, 0, undefined, ::last_pre_activate_stay_within_area, maps\mp\alien\_challenge_function::activate_stay_within_area, maps\mp\alien\_challenge_function::deactivate_stay_within_area, undefined, ::last_update_stay_within_area );
maps\mp\alien\_challenge_function::register_challenge( "kill_ancestor", undefined, 0, undefined, undefined, ::activate_kill_ancestor, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "weakpoint_damage", undefined, 0, undefined, undefined, ::activate_weakpoint_damage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
maps\mp\alien\_challenge_function::register_challenge( "no_ancestor_damage", undefined, 0, undefined, undefined, ::activate_no_ancestor_damage, maps\mp\alien\_challenge_function::default_resetsuccess, undefined, ::generic_update_challenge );
}
generic_activate_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
generic_update_challenge( 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;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "current_challenge_ended" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
else if ( maps\mp\alien\_utility::is_true( var_1 ) )
{
level notify( "current_challenge_ended" );
self.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
activate_long_shot()
{
generic_activate_challenge();
level thread long_shot_logic();
}
long_shot_logic()
{
level endon( "stop_longshot_logic" );
for (;;)
{
foreach ( var_6, var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( !isalive( var_1 ) )
continue;
if ( isdefined( var_1.pet ) )
continue;
var_2 = undefined;
foreach ( var_4 in level.players )
{
if ( is_long_shot( var_4, undefined, var_1 ) )
{
var_2 = 1;
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 0, 1, "high" );
continue;
}
if ( isdefined( var_4.isferal ) && var_4.isferal )
{
maps\mp\alien\_outline_proto::enable_outline_for_player( var_1, var_4, 4, 0, "high" );
continue;
}
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_4 );
}
var_1.marked_for_challenge = var_2;
if ( var_6 % 2 == 0 )
wait 0.05;
}
wait 0.05;
}
}
deactivate_long_shot()
{
level notify( "stop_longshot_logic" );
wait 1;
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
foreach ( var_3 in level.players )
{
if ( isdefined( var_1.marked_for_challenge ) )
maps\mp\alien\_outline_proto::disable_outline_for_player( var_1, var_3 );
}
var_1.marked_for_challenge = undefined;
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_marked()
{
generic_activate_challenge();
level thread wait_for_marked_aliens( self );
}
wait_for_marked_aliens( var_0 )
{
level endon( "current_challenge_ended" );
var_1 = 0;
while ( var_1 < var_0.goal )
{
var_2 = maps\mp\alien\_spawnlogic::get_alive_agents();
foreach ( var_4 in var_2 )
{
if ( !isalive( var_4 ) || isdefined( var_4.pet ) )
continue;
if ( var_4.alien_type == "bomber" || maps\mp\alien\_utility::is_true( var_4.marked_for_challenge ) || var_4.alien_type == "ancestor" )
continue;
var_4.marked_for_challenge = 1;
maps\mp\alien\_outline_proto::enable_outline( var_4, 0, 1 );
var_4 thread remove_outline_on_death();
var_1++;
if ( var_1 >= var_0.goal )
return;
}
wait 0.05;
}
}
deactivate_kill_marked()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.marked_for_challenge ) )
{
var_1.marked_for_challenge = undefined;
maps\mp\alien\_outline_proto::disable_outline( var_1 );
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_nodamage()
{
generic_activate_challenge();
level thread fail_kill_nodamage( self );
foreach ( var_1 in level.players )
var_1 thread kill_nodamage_monitor();
}
fail_kill_nodamage( var_0 )
{
level endon( "kill_nodamage_complete" );
level waittill( "kill_nodamage_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "kill_nodamage_complete" );
}
kill_nodamage_monitor()
{
level endon( "kill_nodamage_complete" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( maps\mp\alien\_utility::is_true( self.ability_invulnerable ) )
continue;
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::is_hardcore_mode() )
{
level notify( "kill_nodamage_failed" );
return;
}
else if ( isdefined( var_1 ) && isagent( var_1 ) )
{
level notify( "kill_nodamage_failed" );
return;
}
}
}
update_kill_nodamage( 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;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
{
level notify( "kill_nodamage_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_focus_fire()
{
foreach ( var_1 in maps\mp\alien\_spawnlogic::get_alive_agents() )
{
if ( isdefined( var_1.damaged_by_players ) )
{
maps\mp\alien\_outline_proto::disable_outline( var_1 );
var_1.damaged_by_players = [];
}
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
activate_kill_rhinos()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_rhino_deaths( self );
}
watch_rhino_deaths( var_0 )
{
level endon( "rhino_challenge_complete" );
level endon( "end_cycle" );
level.current_challenge_timer = 0;
level thread fail_rhino_challenge();
for (;;)
{
level waittill( "rhino_killed" );
if ( level.current_challenge_timer <= 0 )
{
var_1 = int( gettime() + 20000 );
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_intel_timer", var_1 );
level.current_challenge_timer = 20;
level thread maps\mp\alien\_challenge_function::update_current_challenge_timer();
continue;
}
level notify( "rhinos_killed" );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
return;
}
}
fail_rhino_challenge( var_0 )
{
level endon( "game_ended" );
level endon( "rhinos_killed" );
level waittill( "current_challenge_ended" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
level notify( "rhino_challenge_complete" );
}
activate_new_weapons()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
level thread watch_players_new_weapons( self );
}
watch_players_new_weapons( var_0 )
{
level endon( "stop_newweapon_challenge_monitor" );
for (;;)
{
level waittill( "new_weapon_purchased", var_1 );
var_1.new_weapon_purchased = 1;
level thread check_for_new_weapon_complete( var_0 );
}
}
check_for_new_weapon_complete( var_0 )
{
var_1 = 1;
foreach ( var_3 in level.players )
{
if ( !maps\mp\alien\_utility::is_true( var_3.new_weapon_purchased ) )
var_1 = 0;
}
if ( var_1 )
{
var_0.success = 1;
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
}
deactivate_new_weapons()
{
level notify( "stop_newweapon_challenge_monitor" );
maps\mp\alien\_challenge_function::default_resetsuccess();
}
last_challenge_scalar_func( var_0 )
{
var_1 = maps\mp\alien\_challenge_function::default_challenge_scalar_func( var_0 );
if ( !isdefined( var_1 ) )
var_1 = get_scalar_from_table( var_0 );
if ( isdefined( var_1 ) )
{
}
return var_1;
}
get_scalar_from_table( var_0 )
{
var_1 = level.alien_challenge_table;
var_2 = 0;
var_3 = 1;
var_4 = 99;
var_5 = 1;
var_6 = 9;
for ( var_7 = var_3; var_7 <= var_4; var_7++ )
{
var_8 = tablelookup( var_1, var_2, var_7, var_5 );
if ( var_8 == "" )
return undefined;
if ( var_8 != var_0 )
continue;
var_9 = tablelookup( var_1, var_2, var_7, var_6 );
if ( isdefined( var_9 ) )
{
var_9 = strtok( var_9, " " );
if ( var_9.size > 0 )
return int( var_9[level.players.size - 1] );
}
}
}
last_damage_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return;
switch ( level.current_challenge )
{
case "weakpoint_damage":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_6 ) && ( var_6 == "head" || var_6 == "neck" ) && var_2 > 0 && isdefined( var_8.alien_type ) && var_8.alien_type == "ancestor" )
maps\mp\alien\_challenge::update_challenge( "weakpoint_damage", var_2 );
return 0;
case "focus_fire":
if ( !isdefined( var_8 ) )
return 0;
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_8.damaged_by_players ) )
var_8.damaged_by_players = [];
if ( !common_scripts\utility::array_contains( var_8.damaged_by_players, var_1 ) )
{
var_8.damaged_by_players[var_8.damaged_by_players.size] = var_1;
var_8 maps\mp\alien\_challenge_function::focus_fire_update_alien_outline( var_1 );
}
}
return 0;
}
return 1;
}
last_death_challenge_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
if ( !isdefined( level.current_challenge ) )
return 0;
if ( level.current_challenge == "kill_marked" && !isdefined( self.marked_for_challenge ) && var_3 == "MOD_SUICIDE" )
return 0;
switch ( level.current_challenge )
{
case "long_shot":
if ( is_long_shot( var_1, var_4, self ) )
maps\mp\alien\_challenge::update_challenge( "long_shot", 1 );
return 0;
case "leaning_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && var_1 isleaning() )
maps\mp\alien\_challenge::update_challenge( "leaning_shot", 1 );
return 0;
case "jump_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() && !var_1 isonground() )
maps\mp\alien\_challenge::update_challenge( "jump_shot", 1 );
return 0;
case "sliding_shot":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" && var_1 is_sliding() )
maps\mp\alien\_challenge::update_challenge( "sliding_shot", 1 );
return 0;
case "focus_fire":
if ( isdefined( self.damaged_by_players ) && self.damaged_by_players.size >= level.players.size )
{
maps\mp\alien\_challenge::update_challenge( "focus_fire", 1 );
maps\mp\alien\_outline_proto::disable_outline_for_players( self, level.players );
}
return 0;
case "kill_marked":
if ( isdefined( self.marked_for_challenge ) )
maps\mp\alien\_challenge::update_challenge( "kill_marked", 1 );
else
maps\mp\alien\_challenge::update_challenge( "kill_marked", 0, 1 );
return 0;
case "barrel_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
maps\mp\alien\_challenge::update_challenge( "barrel_kills", 1 );
return 0;
case "healthy_kills":
if ( isdefined( var_1 ) && isplayer( var_1 ) && var_1.health >= var_1.maxhealth )
maps\mp\alien\_challenge::update_challenge( "healthy_kills", 1 );
return 0;
case "minion_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "minion" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "minion_preexplode", 1 );
return 0;
case "bomber_preexplode":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "bomber_preexplode", 1 );
return 0;
case "kill_phantom":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "locust" && maps\mp\alien\_utility::is_true( self.is_cloaking ) )
maps\mp\alien\_challenge::update_challenge( "kill_phantom", 1 );
return 0;
case "kill_nodamage":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( "kill_nodamage", 1 );
return 0;
case "flying_aliens":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( maps\mp\alien\_utility::get_alien_type() == "bomber" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
else if ( maps\mp\alien\_utility::get_alien_type() == "gargoyle" && maps\mp\alien\_utility::is_true( self.in_air ) )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
else if ( maps\mp\alien\_utility::get_alien_type() == "ancestor" && var_3 != "MOD_SUICIDE" )
maps\mp\alien\_challenge::update_challenge( "flying_aliens", 1 );
}
return 0;
case "melee_gargoyles":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "gargoyle" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_gargoyles", 1 );
return 0;
case "melee_mammoth":
if ( isdefined( var_1 ) && isplayer( var_1 ) && maps\mp\alien\_utility::get_alien_type() == "mammoth" && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_mammoth", 1 );
return 0;
case "higher_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( var_1.origin[2] - self.origin[2] > 55 )
maps\mp\alien\_challenge::update_challenge( "higher_ground", 1 );
}
}
return 0;
case "lower_ground":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
{
if ( !isdefined( var_0 ) || isdefined( var_0 ) && !maps\mp\alien\_utility::is_trap( var_0 ) )
{
if ( self.origin[2] - var_1.origin[2] > 55 )
maps\mp\alien\_challenge::update_challenge( "lower_ground", 1 );
}
}
return 0;
case "kill_rhinos":
if ( isdefined( self.alien_type ) && self.alien_type == "elite" )
level notify( "rhino_killed" );
return 0;
case "team_prone":
if ( isdefined( var_1 ) && isplayer( var_1 ) && isdefined( var_4 ) && var_4 == var_1 getcurrentweapon() )
{
var_9 = 1;
foreach ( var_11 in level.players )
{
if ( var_11 getstance() != "prone" )
var_9 = 0;
}
if ( var_9 )
maps\mp\alien\_challenge::update_challenge( "team_prone", 1 );
}
return 0;
case "2_weapons_only":
case "semi_autos_only":
maps\mp\alien\_challenge::update_challenge( level.current_challenge, var_4, var_3 );
return 0;
case "melee_5_goons_last":
if ( isdefined( self.alien_type ) && self.alien_type == "goon" && isdefined( var_1 ) && isplayer( var_1 ) && var_3 == "MOD_MELEE" )
maps\mp\alien\_challenge::update_challenge( "melee_5_goons_last", 1 );
return 0;
case "stay_within_area_5":
case "stay_within_area_4":
case "stay_within_area_3":
case "stay_within_area_2":
case "stay_within_area_1":
if ( isdefined( var_1 ) && isplayer( var_1 ) )
maps\mp\alien\_challenge::update_challenge( level.current_challenge, self.origin, var_1.origin );
break;
}
return 1;
}
is_long_shot( var_0, var_1, var_2 )
{
if ( isplayer( var_0 ) && isalive( var_0 ) && !var_0 maps\mp\_utility::isusingremote() )
{
if ( distancesquared( var_0.origin, var_2.origin ) >= 608400 )
return 1;
}
return 0;
}
is_sliding()
{
return isdefined( self.issliding ) || isdefined( self.isslidinggraceperiod ) && gettime() <= self.isslidinggraceperiod;
}
update_semi_autos_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getweaponclass( var_0 );
if ( var_9 == "weapon_sniper" || var_9 == "weapon_dmr" )
self.current_progress++;
maps\mp\alien\_challenge_function::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_weakpoint_damage()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
self.goal = self.goal * 1000;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
activate_no_ancestor_damage()
{
self.current_progress = 0;
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 maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread wait_for_ancestor_player_damage( self );
level thread complete_ancestor_damage_challenge( self );
}
wait_for_ancestor_player_damage( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_damage_challenge_complete" );
level waittill( "ancestor_damage_taken" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
complete_ancestor_damage_challenge( var_0 )
{
level endon( "game_ended" );
level endon( "ancestor_damage_taken" );
wait( var_0.goal );
var_0.success = 1;
level notify( "ancestor_damage_challenge_complete" );
maps\mp\alien\_challenge::deactivate_current_challenge();
}
activate_kill_ancestor()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
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 maps\mp\alien\_challenge_function::update_current_challenge_timer();
level thread wait_for_ancestor_death( self );
level thread fail_ancestor_challenge( self );
}
wait_for_ancestor_death( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_challenge_failed" );
level waittill( "ancestor_died" );
var_0.success = 1;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
fail_ancestor_challenge( var_0 )
{
level endon( "game_ended" );
var_0 endon( "success" );
level endon( "ancestor_died" );
wait( var_0.goal );
level notify( "ancestor_challenge_failed" );
var_0.success = 0;
maps\mp\alien\_challenge::deactivate_current_challenge();
}
update_2_weapons_only( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8 )
{
var_9 = maps\mp\_utility::getbaseweaponname( var_0 );
if ( issubstr( self.weapon1choice, var_9 ) || issubstr( self.weapon2choice, var_9 ) )
self.current_progress++;
maps\mp\alien\_challenge_function::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_2_weapons_only_challenge()
{
descent_activate_use_weapon_challenge();
var_0 = maps\mp\alien\_utility::get_current_area_name();
var_1 = [];
var_2 = [];
var_3 = 0;
var_4 = common_scripts\utility::array_randomize( level.world_items );
foreach ( var_6 in var_4 )
{
if ( isdefined( var_6.areas ) && var_6.areas[0] == var_0 )
{
if ( !isdefined( var_6.script_noteworthy ) )
continue;
if ( common_scripts\utility::array_contains( var_1, var_6.script_noteworthy ) )
continue;
var_1[var_1.size] = var_6.script_noteworthy;
var_7 = maps\mp\alien\_challenge_function::create_challenge_waypoints( var_6 );
var_2[var_2.size] = var_7;
var_3++;
if ( var_3 >= 2 )
break;
}
}
self.weapon1choice = maps\mp\_utility::getbaseweaponname( var_1[0] );
self.weapon2choice = maps\mp\_utility::getbaseweaponname( var_1[1] );
self.waypoints = var_2;
}
deactivate_2_weapons_only()
{
if ( isdefined( self ) && isdefined( self.waypoints ) )
{
foreach ( var_1 in self.waypoints )
var_1 destroy();
}
maps\mp\alien\_challenge_function::default_resetsuccess();
}
descent_activate_use_weapon_challenge()
{
maps\mp\alien\_challenge_function::default_resetsuccess();
self.current_progress = 0;
maps\mp\alien\_challenge_function::update_challenge_progress( 0, self.goal );
}
remove_outline_on_death()
{
level endon( "game_ended" );
self waittill( "death" );
if ( isdefined( self.challenge_headicon ) )
maps\mp\alien\_outline_proto::disable_outline( self );
}
last_custom_onalienagentdamaged_func( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( isdefined( var_5 ) && var_5 == "turret_dlc4_alien_shock" )
{
last_shock_turret_hit_marker_override( var_1, "standard" );
if ( isdefined( level.shock_turret_bullet_damage_scalar ) )
var_2 = var_2 * level.shock_turret_bullet_damage_scalar;
}
if ( isdefined( var_0 ) && isdefined( var_0.targetname ) && var_0.targetname == "scriptable_destructible_barrel" )
var_2 = var_2 + 750;
return var_2;
}
last_shock_turret_hit_marker_override( var_0, var_1 )
{
if ( isdefined( var_0.owner ) )
var_0.owner thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
else
var_0 thread maps\mp\gametypes\_damagefeedback::updatedamagefeedback( var_1 );
}
challenge_ring_locations( var_0, var_1 )
{
var_2 = [];
switch ( var_0 )
{
case "transition_middle":
var_2[var_2.size] = ( 1772, 1335, 25 );
var_2[var_2.size] = ( 973, 1414, 19 );
var_2[var_2.size] = ( 525, 1991, 15 );
break;
case "transition_right":
var_2[var_2.size] = ( 1897, 775, 11 );
var_2[var_2.size] = ( 2068, 253, 23 );
var_2[var_2.size] = ( 2547, 1524, 19 );
break;
case "transition_left":
var_2[var_2.size] = ( -886, 933, 11 );
var_2[var_2.size] = ( -1442, 994, 19 );
var_2[var_2.size] = ( -2130, 1786, 203 );
break;
case "transition_upper_left":
var_2[var_2.size] = ( -996, 3690, 11 );
break;
case "transition_upper_right":
var_2[var_2.size] = ( 1771, 3236, 11 );
break;
}
if ( maps\mp\alien\_utility::is_true( var_1 ) )
return var_2;
else
return common_scripts\utility::random( var_2 );
}
last_pre_activate_stay_within_area()
{
var_0 = get_all_ring_locations( level.current_hive_name );
if ( isdefined( level.current_encounter_info ) && isdefined( level.current_encounter_info.use_trigger ) && isdefined( level.current_encounter_info.use_trigger.script_noteworthy ) && level.current_encounter_info.use_trigger.script_noteworthy == "reverse_open" )
var_0 = common_scripts\utility::array_reverse( var_0 );
var_1 = var_0[0];
var_2 = bullettrace( var_1 + ( 0, 0, 20 ), var_1 - ( 0, 0, 20 ), 0, undefined, 1, 0, 1, 1 );
self.ring_ent = spawn( "script_model", var_2["position"] );
self.ring_ent setmodel( "tag_origin" );
wait 0.1;
self.ring_fx = playfxontag( level._effect["challenge_ring"], self.ring_ent, "tag_origin" );
playsoundatpos( self.ring_ent.origin, "plr_challenge_ring" );
if ( !isdefined( level.waypoint_icon ) )
{
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon destroy();
var_3 = "waypoint_alien_blocker";
var_4 = 14;
var_5 = 14;
var_6 = 0.75;
var_7 = self.ring_ent.origin + ( 0, 0, 32 );
level.ring_waypoint_icon = maps\mp\alien\_hud::make_waypoint( var_3, var_4, var_5, var_6, var_7 );
}
level thread move_challenge_ring( var_0, var_1, self, 0 );
return 1;
}
get_all_ring_locations( var_0 )
{
return challenge_ring_locations( var_0, 1 );
}
move_challenge_ring( var_0, var_1, var_2, var_3 )
{
level endon( "ring_challenge_ended" );
var_4 = 0;
while ( !isdefined( var_2.current_progress ) )
wait 0.05;
var_5 = var_2.current_progress;
for (;;)
{
while ( var_5 == var_2.current_progress )
wait 0.05;
common_scripts\utility::waitframe();
var_6 = var_2.current_progress - var_5;
var_5 = var_2.current_progress;
var_4 = var_4 + var_6;
if ( var_4 < 5 )
continue;
else
var_4 = 0;
var_3++;
if ( var_3 >= var_0.size )
var_3 = 0;
var_7 = var_0[var_3];
var_8 = bullettrace( var_7 + ( 0, 0, 20 ), var_7 - ( 0, 0, 20 ), 0, undefined, 1, 0, 1, 1 );
if ( isdefined( level.ring_waypoint_icon ) )
level.ring_waypoint_icon.alpha = 0;
var_2.ring_ent moveto( var_8["position"], 2 );
playsoundatpos( var_2.ring_ent.origin, "plr_challenge_ring" );
wait 2.0;
if ( isdefined( level.ring_waypoint_icon ) )
{
level.ring_waypoint_icon.alpha = 1.0;
level.ring_waypoint_icon.x = var_8["position"][0];
level.ring_waypoint_icon.y = var_8["position"][1];
level.ring_waypoint_icon.z = var_8["position"][2] + 32;
}
}
}
last_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;
maps\mp\alien\_challenge_function::update_challenge_progress( self.current_progress, self.goal );
if ( self.success )
maps\mp\alien\_challenge::deactivate_current_challenge();
}