s1-scripts-dev/raw/maps/mp/_exo_shield.gsc
2025-05-21 16:23:17 +02:00

103 lines
2.9 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\_snd_common_mp;
exo_shield_think() // self = player
{
level endon( "game_ended" );
self endon( "death" );
self endon( "disconnect" );
self endon( "joined_team" );
self endon( "faux_spawn" );
self endon( "exo_shield_taken" );
self notify( "exo_shield_think_end" );
self endon( "exo_shield_think_end" );
exo_shield_weapon = get_exo_shield_weapon();
if ( !self HasWeapon( exo_shield_weapon ) )
return;
self BatterySetDischargeScale( exo_shield_weapon, 1.0 );
reqCharge = BatteryUsePerShot( exo_shield_weapon );
maxCharge = self BatteryGetSize( exo_shield_weapon );
if ( self GetTacticalWeapon() == exo_shield_weapon )
{
self SetClientOmnvar( "ui_exo_battery_level0", maxCharge );
self SetClientOmnvar( "exo_ability_nrg_req0", reqCharge );
self SetClientOmnvar( "exo_ability_nrg_total0", maxCharge );
}
else if ( self GetLethalWeapon() == exo_shield_weapon )
{
self SetClientOmnvar( "ui_exo_battery_level1", maxCharge );
self SetClientOmnvar( "exo_ability_nrg_req1", reqCharge );
self SetClientOmnvar( "exo_ability_nrg_total1", maxCharge );
}
self thread wait_for_player_death( exo_shield_weapon );
for( ;; )
{
self waittillmatch( "grenade_pullback", exo_shield_weapon );
self snd_message( "mp_exo_shield_activate" );
self.pers["numberOfTimesShieldUsed"]++;
// NOTE: Don't stow riotshield on the back
//battery discharge happens in code for shield
self maps\mp\_exo_battery::set_exo_ability_hud_omnvar( exo_shield_weapon, "ui_exo_battery_toggle", 1 );
self.exo_shield_on = true;
if( !IsAgent ( self ) )
self thread maps\mp\_exo_battery::update_exo_battery_hud( exo_shield_weapon );
if ( self BatteryIsInUse( exo_shield_weapon ) == true )
self waittillmatch( "battery_discharge_end", exo_shield_weapon );
self snd_message( "mp_exo_shield_deactivate" );
self maps\mp\_exo_battery::set_exo_ability_hud_omnvar( exo_shield_weapon, "ui_exo_battery_toggle", 0 );
self.exo_shield_on = false;
}
}
take_exo_shield() //self = player
{
self notify( "kill_battery" );
self notify( "exo_shield_taken" );
self takeWeapon( get_exo_shield_weapon() );
}
give_exo_shield() //self = player
{
self giveWeapon( get_exo_shield_weapon() );
self thread exo_shield_think();
}
get_exo_shield_weapon()
{
if ( IsDefined( level.exoShieldweapon ) )
return level.exoShieldweapon;
level.exoShieldweapon = "exoshield_equipment_mp";
if ( isdefined ( level.isHorde ) )
level.exoShieldweapon = "exoshieldhorde_equipment_mp";
return level.exoShieldweapon;
}
wait_for_player_death( weapon_name ) // self = player
{
level endon( "game_ended" );
self endon( "disconnect" );
self waittill_any( "death", "joined_team", "faux_spawn", "exo_shield_taken" );
self maps\mp\_exo_battery::set_exo_ability_hud_omnvar( weapon_name, "ui_exo_battery_toggle", 0 );
self.exo_shield_on = false;
}