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

560 lines
17 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
main()
{
maps\mp\alien\_perks::init_perks();
maps\mp\alien\_combat_resources::init_combat_resources();
}
player_setup()
{
self setactionslot( 1, "" );
self setactionslot( 2, "" );
self setactionslot( 3, "" );
self setactionslot( 4, "" );
self notifyonplayercommand( "action_slot_1", "+actionslot 1" );
self notifyonplayercommand( "action_slot_2", "+actionslot 2" );
self notifyonplayercommand( "action_slot_3", "+actionslot 3" );
self notifyonplayercommand( "action_slot_4", "+actionslot 4" );
self notifyonplayercommand( "action_slot_1", "+actionslot 5" );
self notifyonplayercommand( "action_slot_2", "+actionslot 6" );
self notifyonplayercommand( "action_slot_3", "+actionslot 7" );
self notifyonplayercommand( "action_use", "+attack" );
self notifyonplayercommand( "action_use", "+attack_akimbo_accessible" );
self notifyonplayercommand( "change_weapon", "weapnext" );
thread player_watcher();
}
player_watcher()
{
if ( can_use_munition() )
{
thread player_action_slot( level.alien_combat_resources["munition"][maps\mp\alien\_persistence::get_selected_dpad_up()], maps\mp\alien\_persistence::get_dpad_up_level, "action_slot_1" );
thread player_action_slot( level.alien_combat_resources["support"][maps\mp\alien\_persistence::get_selected_dpad_down()], maps\mp\alien\_persistence::get_dpad_down_level, "action_slot_2" );
}
if ( can_use_ability() )
{
thread player_action_slot( level.alien_combat_resources["defense"][maps\mp\alien\_persistence::get_selected_dpad_left()], maps\mp\alien\_persistence::get_dpad_left_level, "action_slot_3" );
thread player_action_slot( level.alien_combat_resources["offense"][maps\mp\alien\_persistence::get_selected_dpad_right()], maps\mp\alien\_persistence::get_dpad_right_level, "action_slot_4" );
}
thread player_watch_upgrade();
if ( !maps\mp\alien\_utility::is_chaos_mode() )
thread player_watch_currency_transfer();
}
can_use_munition()
{
if ( maps\mp\alien\_utility::is_chaos_mode() )
return 0;
if ( maps\mp\alien\_prestige::prestige_getnodeployables() == 1.0 )
return 0;
return 1;
}
can_use_ability()
{
if ( maps\mp\alien\_prestige::prestige_getnoabilities() == 1.0 )
return 0;
return 1;
}
player_watch_upgrade()
{
thread player_watch_dpad_upgrade( level.alien_combat_resources["munition"][maps\mp\alien\_persistence::get_selected_dpad_up()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["support"][maps\mp\alien\_persistence::get_selected_dpad_down()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["defense"][maps\mp\alien\_persistence::get_selected_dpad_left()] );
thread player_watch_dpad_upgrade( level.alien_combat_resources["offense"][maps\mp\alien\_persistence::get_selected_dpad_right()] );
thread player_watch_perk_upgrade( level.alien_perks["perk_0"][maps\mp\alien\_persistence::get_selected_perk_0()], "perk_0" );
thread player_watch_perk_upgrade( level.alien_perks["perk_1"][maps\mp\alien\_persistence::get_selected_perk_1()], "perk_1" );
}
player_watch_dpad_upgrade( var_0 )
{
player_watch_upgrade_internal( var_0, var_0.type );
}
player_watch_perk_upgrade( var_0, var_1 )
{
thread player_watch_upgrade_internal( var_0, var_1 );
thread player_handle_perk_upgrades( var_0, var_1 );
}
player_watch_upgrade_internal( var_0, var_1 )
{
self endon( "disconnect" );
level endon( "game_ended" );
var_2 = var_1 + "_try_upgrade";
for (;;)
{
self waittillmatch( "luinotifyserver", var_2 );
var_3 = maps\mp\alien\_persistence::get_upgrade_level( var_1 );
if ( var_3 + 1 < var_0.upgrades.size && maps\mp\alien\_persistence::try_take_player_points( var_0.upgrades[var_3 + 1].point_cost ) )
{
var_3 = var_3 + 1;
maps\mp\alien\_persistence::set_upgrade_level( var_1, var_3 );
self notify( "upgrade_" + var_1 );
thread maps\mp\alien\_persistence::update_resource_stats( "upgrade", var_0.ref, 1 );
maps\mp\alien\_alien_matchdata::record_perk_upgrade( var_0.ref );
var_4 = -1;
if ( isdefined( level.current_cycle_num ) )
var_4 = level.current_cycle_num;
var_5 = "unknown";
if ( isdefined( self.name ) )
var_5 = self.name;
var_6 = "unknown";
if ( isdefined( level.current_hive_name ) )
var_6 = level.current_hive_name;
bbprint( "aliencombatresourceupgraded", "cyclenum %i hivename %s resource %s resourcelevel %s ownername %s ", var_4, var_6, var_0.ref, var_3, var_5 );
}
}
}
get_perk_ref_at_upgrade_level( var_0, var_1, var_2 )
{
return level.alien_perks[var_0][var_1].upgrades[var_2].ref;
}
player_handle_perk_upgrades( var_0, var_1 )
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( "upgrade_" + var_1 );
var_2 = maps\mp\alien\_persistence::get_upgrade_level( var_1 );
maps\mp\alien\_persistence::unset_perk( get_perk_ref_at_upgrade_level( var_1, var_0.ref, var_2 - 1 ) );
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( var_1, var_0.ref, var_2 ) );
var_3 = maps\mp\alien\_persistence::get_selected_perk_0_secondary();
if ( var_1 == "perk_0" && var_3 != "perk_none" )
{
var_4 = level.alien_perks["perk_0"][var_3];
maps\mp\alien\_persistence::unset_perk( get_perk_ref_at_upgrade_level( var_1, var_4.ref, var_2 - 1 ) );
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( var_1, var_4.ref, var_2 ) );
}
}
}
restore_all_perks()
{
var_0 = maps\mp\alien\_persistence::get_selected_perk_0();
var_1 = maps\mp\alien\_persistence::get_perk_0_level();
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( "perk_0", var_0, var_1 ) );
var_2 = maps\mp\alien\_persistence::get_selected_perk_0_secondary();
if ( var_2 != "perk_none" )
{
var_3 = level.alien_perks["perk_0"][var_2];
maps\mp\alien\_persistence::set_perk( get_perk_ref_at_upgrade_level( "perk_0", var_3.ref, var_1 ) );
}
}
player_cancel()
{
player_cancel_internal();
self enableweapons();
self.alien_used_resource = undefined;
}
player_cancel_internal()
{
self endon( "player_action_slot_restart" );
self endon( "fired_ability_gun" );
common_scripts\utility::waittill_any( "change_weapon", "action_slot_1", "action_slot_2", "action_slot_3", "action_slot_4", "last_stand", "dpad_cancel" );
if ( maps\mp\alien\_utility::is_holding_deployable() && !self.is_holding_crate_marker )
{
if ( !isdefined( self.playerlinkedtochopper ) || !self.playerlinkedtochopper )
{
self.deployable = 0;
self notify( "cancel_deployable_via_marker" );
if ( !self hasweapon( "mortar_detonator_mp" ) && !self hasweapon( "switchblade_laptop_mp" ) )
self notify( "player_action_slot_restart" );
}
}
var_0 = self.alien_used_resource;
var_1 = self.alien_used_resource_rank;
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "player_action_slot_restart" );
}
player_watch_use()
{
self endon( "cancel_watch" );
self waittill( "action_use" );
return 1;
}
player_watch_riotshield_use( var_0, var_1 )
{
self endon( "cancel_watch" );
common_scripts\utility::_disableusability();
thread reenable_usability( 3.1 );
common_scripts\utility::waittill_any_timeout( 3, "action_use", "riotshield_block", "riotshield_melee" );
if ( maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
return 1;
else
{
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
return 0;
}
}
player_watch_equalizer_use( var_0, var_1 )
{
self endon( "cancel_watch" );
common_scripts\utility::waittill_any_timeout( 3, "action_use" );
if ( maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
return 1;
else
{
self [[ var_0.callbacks.canceluse ]]( var_0, var_1 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
return 0;
}
}
player_watch_use_manned_turret()
{
self endon( "cancel_watch" );
for (;;)
{
self waittill( "action_use" );
if ( isdefined( self.carriedsentry ) )
{
if ( maps\mp\alien\_utility::is_true( self.carriedsentry.canbeplaced ) )
return 1;
}
}
}
player_watch_use_ims()
{
self endon( "disconnect" );
self endon( "cancel_watch" );
self waittill( "IMS_placed" );
return 1;
}
player_watch_use_sentry()
{
self endon( "disconnect" );
self endon( "cancel_watch" );
for (;;)
{
self waittill( "action_use" );
if ( isdefined( self.current_sentry ) )
{
var_0 = maps\mp\alien\_autosentry_alien::can_place_sentry( self.current_sentry );
if ( var_0 )
return 1;
}
wait 0.05;
}
}
player_use( var_0, var_1 )
{
self endon( "player_action_slot_restart" );
self endon( "disconnect" );
level endon( "game_ended" );
thread player_cancel();
self [[ var_0.callbacks.tryuse ]]( var_0, var_1 );
if ( self [[ var_0.callbacks.canuse ]]( var_0 ) )
{
if ( !show_alternate_spend_hint( var_0 ) )
thread maps\mp\alien\_hud::createspendhinthud( var_0, var_1 );
else
thread maps\mp\alien\_hud::createspendhinthud( var_0, var_1, &"ALIENS_PATCH_CANCEL_USE" );
var_2 = wait_for_use( var_0, var_1 );
if ( !isdefined( var_2 ) || !var_2 )
return;
if ( !maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_1].cost ) ) )
{
self notify( "dpad_cancel" );
return;
}
self playlocalsound( "alien_killstreak_equip" );
self thread [[ var_0.callbacks.use ]]( var_0, var_1 );
thread maps\mp\alien\_persistence::update_resource_stats( "purchase", var_0.ref, 1 );
maps\mp\alien\_persistence::take_player_currency( ceil( var_0.upgrades[var_1].cost ), 0, "ability" );
self.alien_used_resource = undefined;
var_3 = -1;
if ( isdefined( level.current_cycle_num ) )
var_3 = level.current_cycle_num;
var_4 = "unknown";
if ( isdefined( self.name ) )
var_4 = self.name;
var_5 = "unknown";
if ( isdefined( level.current_hive_name ) )
var_5 = level.current_hive_name;
bbprint( "aliencombatresourceused", "cyclenum %i hivename %s resource %s resourcelevel %s ownername %s ", var_3, var_5, var_0.ref, var_1, var_4 );
self notify( "action_finish_used" );
self notify( "player_action_slot_restart" );
}
}
show_alternate_spend_hint( var_0 )
{
if ( maps\mp\alien\_utility::level_uses_maaws() && issubstr( var_0.ref, "predator" ) )
return 1;
return issubstr( var_0.ref, "turret" ) || issubstr( var_0.ref, "_ims" );
}
wait_for_use( var_0, var_1 )
{
switch ( var_0.ref )
{
case "dpad_sentry":
return player_watch_use_sentry();
case "dpad_gl_sentry":
case "dpad_minigun_turret":
return player_watch_use_manned_turret();
case "dpad_ims":
return player_watch_use_ims();
case "dpad_placeholder_ammo_2":
case "dpad_team_ammo_ap":
case "dpad_team_ammo_stun":
case "dpad_team_ammo_explo":
case "dpad_team_ammo_in":
case "dpad_team_boost":
case "dpad_team_adrenaline":
case "dpad_team_randombox":
case "dpad_team_ammo_reg":
case "dpad_team_armor":
case "dpad_team_explosives":
return player_watch_box_thrown();
case "dpad_riotshield":
return player_watch_riotshield_use( var_0, var_1 );
case "dpad_death_machine":
case "dpad_war_machine":
return player_watch_equalizer_use( var_0, var_1 );
case "dpad_predator":
if ( maps\mp\alien\_utility::level_uses_maaws() )
return player_watch_equalizer_use( var_0, var_1 );
default:
return player_watch_use();
}
}
player_watch_box_thrown()
{
self endon( "cancel_watch" );
for (;;)
{
self waittill( "grenade_fire", var_0, var_1 );
if ( var_1 == "aliendeployable_crate_marker_mp" )
return 1;
}
}
player_action_slot_internal( var_0, var_1, var_2 )
{
self endon( "player_action_slot_block" );
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
self waittill( var_2 );
if ( maps\mp\alien\_utility::is_true( self.player_action_disabled ) )
continue;
if ( self usebuttonpressed() )
continue;
if ( self isonladder() )
continue;
if ( maps\mp\alien\_utility::has_special_weapon() )
{
maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HAS_SPECIALWEAPON", 3 );
continue;
}
if ( maps\mp\alien\_utility::is_true( self.picking_up_item ) )
continue;
if ( self isusingturret() )
continue;
if ( maps\mp\alien\_utility::is_true( self.hasprogressbar ) )
continue;
if ( maps\mp\alien\_utility::is_true( self.iscarrying ) )
continue;
if ( isdefined( self.throwinggrenade ) )
continue;
if ( common_scripts\utility::flag_exist( "escape_conditions_met" ) && common_scripts\utility::flag( "escape_conditions_met" ) )
continue;
var_3 = self [[ var_1 ]]();
if ( !maps\mp\alien\_persistence::player_has_enough_currency( ceil( var_0.upgrades[var_3].cost ) ) )
continue;
common_scripts\utility::_disableusability();
thread reenable_usability();
if ( !isdefined( self.alien_used_resource ) )
{
if ( self [[ var_0.callbacks.canpurchase ]]( var_0, var_3 ) )
{
self.alien_used_resource = var_0;
self.alien_used_resource_rank = var_3;
thread player_use( var_0, var_3 );
self notify( "player_action_slot_block" );
}
}
}
}
reenable_usability( var_0 )
{
self endon( "disconnect" );
if ( !isdefined( var_0 ) )
var_0 = 1;
wait( var_0 );
common_scripts\utility::_enableusability();
}
player_action_slot( var_0, var_1, var_2 )
{
self endon( "disconnect" );
level endon( "game_ended" );
for (;;)
{
thread player_action_slot_internal( var_0, var_1, var_2 );
self waittill( "player_action_slot_restart" );
wait 0.2;
}
}
player_watch_currency_transfer()
{
self endon( "disconnect" );
level endon( "game_ended" );
wait 0.05;
if ( maps\mp\alien\_utility::isplayingsolo() )
return;
var_0 = 0;
for (;;)
{
if ( is_drop_button_pressed() )
{
for ( var_1 = 2; is_drop_button_pressed() && var_1 >= 0; var_1 = var_1 - 0.05 )
wait 0.05;
if ( var_1 > 0 )
{
wait 0.05;
continue;
}
if ( maps\mp\alien\_persistence::player_has_enough_currency( level.deployable_currency_ranks[var_0] ) )
{
deploy_currency( var_0 );
level notify( "currency_dropped", self );
}
while ( is_drop_button_pressed() )
wait 0.05;
}
wait 0.5;
}
}
is_drop_button_pressed()
{
if ( !isdefined( self ) || !isalive( self ) )
return 0;
if ( isdefined( self.laststand ) && self.laststand )
return 0;
var_0 = self adsbuttonpressed();
var_1 = self jumpbuttonpressed();
return var_0 && var_1;
}
deploy_currency( var_0 )
{
self endon( "disconnect" );
self notify( "deploying_currency" );
maps\mp\alien\_persistence::take_player_currency( level.deployable_currency_ranks[var_0], 1 );
var_1 = "deployable_currency";
self.team_currency_rank = var_0;
var_2 = level.boxsettings[var_1].maxuses;
level.boxsettings[var_1].maxuses = 1;
var_3 = maps\mp\alien\_deployablebox::createboxforplayer( var_1, self.origin, self );
level.boxsettings[var_1].maxuses = var_2;
var_3.upgrade_rank = var_0;
var_3 playsoundtoplayer( level.boxsettings[var_1].deployedsfx, self );
thread currency_box_think( var_3 );
}
currency_box_think( var_0 )
{
self endon( "disconnect" );
var_0 endon( "death" );
wait 0.05;
var_0 thread maps\mp\alien\_deployablebox::box_setactive( 1 );
self waittill( "deploying_currency" );
if ( isdefined( var_0 ) )
var_0 maps\mp\alien\_deployablebox::box_leave();
}