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

382 lines
11 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init_challenge()
{
var_0 = getdvar( "ui_mapname" );
level.alien_challenge_table = "mp/alien/" + var_0 + "_challenges.csv";
if ( maps\mp\alien\_utility::is_hardcore_mode() )
{
level.alien_challenge_table = "mp/alien/" + var_0 + "_hardcore_challenges.csv";
if ( !tableexists( level.alien_challenge_table ) )
level.alien_challenge_table = "mp/alien/" + var_0 + "_challenges.csv";
}
maps\mp\alien\_challenge_function::init_challenge_type();
}
spawn_challenge()
{
if ( !maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
return;
level.current_challenge_index = undefined;
level thread spawn_challenge_internal();
}
spawn_challenge_internal()
{
var_0 = get_valid_challenge();
if ( !isdefined( var_0 ) )
return;
activate_new_challenge( var_0 );
}
update_challenge( var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 )
{
if ( !current_challenge_is( var_0 ) || !maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
return;
if ( level.pre_challenge_active )
return;
var_10 = level.challenge_data[level.current_challenge];
var_10 [[ var_10.updatefunc ]]( var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
}
end_current_challenge()
{
if ( current_challenge_exist() && maps\mp\alien\_utility::alien_mode_has( "challenge" ) )
deactivate_current_challenge();
}
remove_all_challenge_cases()
{
level notify( "remove_all_challenge_case" );
}
get_valid_challenge()
{
var_0 = [];
foreach ( var_2 in level.challenge_data )
{
if ( isdefined( var_2.already_issued ) )
continue;
if ( level.players.size == 1 && !maps\mp\alien\_utility::is_true( var_2.allowedinsolo ) )
continue;
if ( !isdefined( var_2.allowed_cycles ) )
continue;
var_3 = strtok( var_2.allowed_cycles, " " );
foreach ( var_5 in var_3 )
{
if ( level.cycle_count - 1 == int( var_5 ) )
{
var_6 = maps\mp\alien\_spawn_director::get_current_encounter();
if ( !isdefined( var_6 ) )
continue;
if ( should_skip_challenge( var_2 ) )
continue;
var_7 = strtok( var_2.allowed_hives, " " );
foreach ( var_9 in var_7 )
{
if ( var_9 == var_6 )
{
var_0[var_0.size] = var_2;
break;
}
}
break;
}
}
}
if ( var_0.size > 0 )
{
var_13 = var_0[randomint( var_0.size )];
var_13.already_issued = 1;
return var_13.ref;
}
return undefined;
}
should_skip_challenge( var_0 )
{
var_1 = var_0.ref == "ar_only" || var_0.ref == "smg_only" || var_0.ref == "lmgs_only" || var_0.ref == "shotguns_only" || var_0.ref == "2_weapons_only" || var_0.ref == "semi_autos_only" || var_0.ref == "new_weapon" || var_0.ref == "snipers_only";
if ( !var_1 )
return 0;
var_2 = 0;
foreach ( var_4 in level.players )
{
if ( var_4 maps\mp\alien\_prestige::prestige_getpistolsonly() == 1 )
var_2++;
}
if ( var_0.ref == "new_weapon" && var_2 > 0 )
return 1;
if ( var_2 >= level.players.size - 1 )
return 1;
else
return 0;
}
deactivate_current_challenge()
{
if ( !current_challenge_exist() )
return;
var_0 = level.challenge_data[level.current_challenge];
unset_current_challenge();
if ( var_0 [[ var_0.issuccessfunc ]]() )
{
display_challenge_message( "challenge_success", 0 );
var_0 [[ var_0.rewardfunc ]]();
maps\mp\alien\_gamescore::update_players_encounter_performance( maps\mp\alien\_gamescore::get_challenge_score_component_name(), "challenge_complete" );
maps\mp\alien\_persistence::update_lb_aliensession_challenge( 1 );
maps\mp\alien\_alien_matchdata::update_challenges_status( var_0.ref, 1 );
level.num_challenge_completed++;
if ( !maps\mp\alien\_utility::is_casual_mode() )
{
if ( level.num_challenge_completed == 10 )
{
foreach ( var_2 in level.players )
var_2 maps\mp\alien\_persistence::give_player_tokens( 2, 1 );
}
}
}
else
{
display_challenge_message( "challenge_failed", 0 );
var_0 [[ var_0.failfunc ]]();
level.all_challenge_completed = 0;
maps\mp\alien\_persistence::update_lb_aliensession_challenge( 0 );
maps\mp\alien\_alien_matchdata::update_challenges_status( var_0.ref, 0 );
}
var_0 [[ var_0.deactivatefunc ]]();
}
activate_new_challenge( var_0 )
{
var_1 = level.challenge_data[var_0];
if ( var_1 [[ var_1.canactivatefunc ]]() )
{
var_2 = maps\mp\alien\_challenge_function::get_challenge_scalar( var_0 );
if ( isdefined( var_2 ) )
{
level.challenge_data[var_0].goal = var_2;
level.current_challenge_scalar = var_2;
}
else
level.current_challenge_scalar = -1;
display_challenge_message( var_0, 1, var_2 );
set_current_challenge( var_0 );
level.pre_challenge_active = 1;
challenge_countdown();
level.pre_challenge_active = 0;
foreach ( var_4 in level.players )
var_4 setclientomnvar( "ui_intel_prechallenge", 0 );
level.current_challenge_pre_challenge = 0;
var_1 [[ var_1.activatefunc ]]();
}
else
var_1 [[ var_1.failactivatefunc ]]();
}
challenge_countdown()
{
level endon( "game_ended" );
var_0 = int( gettime() + 5000 );
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", var_0 );
var_2 setclientomnvar( "ui_intel_title", 1 );
}
level.current_challenge_title = 1;
wait 5;
foreach ( var_2 in level.players )
{
var_2 setclientomnvar( "ui_intel_timer", -1 );
var_2 setclientomnvar( "ui_intel_title", -1 );
}
level.current_challenge_title = -1;
wait 0.5;
}
can_pick_up_challenge( var_0 )
{
if ( !isplayer( var_0 ) )
return 0;
if ( isai( var_0 ) )
return 0;
if ( !isalive( var_0 ) || isdefined( var_0.fauxdead ) && var_0.fauxdead )
return 0;
return 1;
}
display_challenge_message( var_0, var_1, var_2 )
{
var_3 = tablelookup( level.alien_challenge_table, 1, var_0, 0 );
foreach ( var_5 in level.players )
{
if ( var_1 )
{
if ( isdefined( var_2 ) )
var_5 setclientomnvar( "ui_intel_challenge_scalar", var_2 );
else
var_5 setclientomnvar( "ui_intel_challenge_scalar", -1 );
var_5 setclientomnvar( "ui_intel_prechallenge", 1 );
var_5 setclientomnvar( "ui_intel_active_index", int( var_3 ) );
level.current_challenge_index = int( var_3 );
level.current_challenge_pre_challenge = 1;
var_5 playlocalsound( "mp_intel_received" );
continue;
}
var_5 setclientomnvar( "ui_intel_active_index", -1 );
var_5 setclientomnvar( "ui_intel_progress_current", -1 );
var_5 setclientomnvar( "ui_intel_progress_max", -1 );
var_5 setclientomnvar( "ui_intel_percent", -1 );
var_5 setclientomnvar( "ui_intel_target_player", -1 );
var_5 setclientomnvar( "ui_intel_prechallenge", 0 );
var_5 setclientomnvar( "ui_intel_timer", -1 );
var_5 setclientomnvar( "ui_intel_challenge_scalar", -1 );
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_pre_challenge = 0;
}
if ( var_1 )
return;
level thread show_challenge_outcome( var_0, var_3 );
}
show_challenge_outcome( var_0, var_1 )
{
level endon( "game_ended" );
wait 1;
foreach ( var_3 in level.players )
{
if ( var_0 == "challenge_failed" )
{
var_3 setclientomnvar( "ui_intel_active_index", int( var_1 ) );
var_3 playlocalsound( "mp_intel_fail" );
continue;
}
var_3 setclientomnvar( "ui_intel_active_index", int( var_1 ) );
var_3 playlocalsound( "mp_intel_success" );
}
wait 4;
foreach ( var_3 in level.players )
var_3 setclientomnvar( "ui_intel_active_index", -1 );
}
current_challenge_exist()
{
return isdefined( level.current_challenge );
}
current_challenge_is( var_0 )
{
return current_challenge_exist() && level.current_challenge == var_0;
}
unset_current_challenge()
{
level.current_challenge = undefined;
}
set_current_challenge( var_0 )
{
level.current_challenge = var_0;
}
handle_challenge_hotjoin()
{
self endon( "disconnect" );
self setclientomnvar( "ui_intel_prechallenge", level.current_challenge_pre_challenge );
if ( current_challenge_exist() )
{
self setclientomnvar( "ui_intel_active_index", int( level.current_challenge_index ) );
self setclientomnvar( "ui_intel_progress_current", int( level.current_challenge_progress_current ) );
self setclientomnvar( "ui_intel_progress_max", int( level.current_challenge_progress_max ) );
self setclientomnvar( "ui_intel_percent", int( level.current_challenge_percent ) );
self setclientomnvar( "ui_intel_target_player", int( level.current_challenge_target_player ) );
self setclientomnvar( "ui_intel_title", int( level.current_challenge_title ) );
if ( level.current_challenge_timer > 0 )
self setclientomnvar( "ui_intel_timer", int( gettime() + level.current_challenge_timer * 1000 ) );
self setclientomnvar( "ui_intel_challenge_scalar", level.current_challenge_scalar );
}
if ( level.current_challenge == "50_percent_accuracy" || level.current_challenge == "75_percent_accuracy" )
{
var_0 = level.challenge_data[level.current_challenge];
thread maps\mp\alien\_challenge_function::track_percent_accuracy_shots_fired_internal( var_0 );
}
else if ( level.current_challenge == "no_reloads" )
thread maps\mp\alien\_challenge_function::wait_for_reload();
else if ( level.current_challenge == "no_abilities" )
thread maps\mp\alien\_challenge_function::wait_for_ability_use();
if ( isdefined( level.current_drill_health ) )
setomnvar( "ui_alien_drill_health_text", int( level.current_drill_health ) );
if ( isdefined( level.current_drill_time ) )
setomnvar( "ui_alien_drill_end_milliseconds", int( level.current_drill_time ) );
}
get_num_challenge_completed()
{
if ( !isdefined( level.num_challenge_completed ) )
return 0;
else
return level.num_challenge_completed;
}