1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 15:17:57 -05:00
Files
BO2-Reimagined/scripts/zm/replaced/_zm_laststand.gsc

284 lines
7.4 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_hud_util;
revive_do_revive( playerbeingrevived, revivergun )
{
self thread revive_weapon_switch_watcher();
revivetime = 3;
if ( self hasperk( "specialty_quickrevive" ) )
{
revivetime /= 2;
}
if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_revive_active() )
{
revivetime *= 0.5;
}
timer = 0;
revived = 0;
playerbeingrevived.revivetrigger.beingrevived = 1;
playerbeingrevived.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self );
playerbeingrevived maps/mp/zombies/_zm_laststand::revive_hud_show_n_fade( 3 );
playerbeingrevived.revivetrigger sethintstring( "" );
if ( isplayer( playerbeingrevived ) )
{
playerbeingrevived startrevive( self );
}
if ( !isDefined( playerbeingrevived.beingrevivedprogressbar ) )
{
playerbeingrevived.beingrevivedprogressbar = playerbeingrevived createprimaryprogressbar();
playerbeingrevived.beingrevivedprogressbar setpoint(undefined, "CENTER", level.primaryprogressbarx, -1 * level.primaryprogressbary);
playerbeingrevived.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1);
playerbeingrevived.beingrevivedprogressbar.hidewheninmenu = 1;
playerbeingrevived.beingrevivedprogressbar.bar.hidewheninmenu = 1;
playerbeingrevived.beingrevivedprogressbar.barframe.hidewheninmenu = 1;
}
if ( !isDefined( self.reviveprogressbar ) )
{
self.reviveprogressbar = self createprimaryprogressbar();
self.reviveprogressbar.bar.color = (0.5, 0.5, 1);
}
if ( !isDefined( self.revivetexthud ) )
{
self.revivetexthud = newclienthudelem( self );
}
self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun );
if ( !isDefined( self.is_reviving_any ) )
{
self.is_reviving_any = 0;
}
self.is_reviving_any++;
self thread laststand_clean_up_reviving_any( playerbeingrevived );
self.reviveprogressbar updatebar( 0.01, 1 / revivetime );
playerbeingrevived.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime );
self.revivetexthud.alignx = "center";
self.revivetexthud.aligny = "middle";
self.revivetexthud.horzalign = "center";
self.revivetexthud.vertalign = "bottom";
self.revivetexthud.y = -113;
if ( self issplitscreen() )
{
self.revivetexthud.y = -347;
}
self.revivetexthud.foreground = 1;
self.revivetexthud.font = "default";
self.revivetexthud.fontscale = 1.8;
self.revivetexthud.alpha = 1;
self.revivetexthud.color = ( 1, 1, 1 );
self.revivetexthud.hidewheninmenu = 1;
if ( self maps/mp/zombies/_zm_pers_upgrades_functions::pers_revive_active() )
{
self.revivetexthud.color = ( 0.5, 0.5, 1 );
}
self.revivetexthud settext( &"ZOMBIE_REVIVING" );
self thread maps/mp/zombies/_zm_laststand::check_for_failed_revive( playerbeingrevived );
while ( self maps/mp/zombies/_zm_laststand::is_reviving( playerbeingrevived ) )
{
wait 0.05;
timer += 0.05;
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{
break;
}
else if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 )
{
break;
}
if ( timer >= revivetime )
{
revived = 1;
break;
}
}
if ( isDefined( playerbeingrevived.beingrevivedprogressbar ) )
{
playerbeingrevived.beingrevivedprogressbar destroyelem();
}
if ( isDefined( self.reviveprogressbar ) )
{
self.reviveprogressbar destroyelem();
}
if ( isDefined( self.revivetexthud ) )
{
self.revivetexthud destroy();
}
if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 )
{
}
else if ( !revived )
{
if ( isplayer( playerbeingrevived ) )
{
playerbeingrevived stoprevive( self );
}
}
playerbeingrevived.revivetrigger sethintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" );
playerbeingrevived.revivetrigger.beingrevived = 0;
self notify( "do_revive_ended_normally" );
self.is_reviving_any--;
if ( !revived )
{
playerbeingrevived thread maps/mp/zombies/_zm_laststand::checkforbleedout( self );
}
return revived;
}
laststand_clean_up_on_disconnect( playerbeingrevived, revivergun )
{
self endon( "do_revive_ended_normally" );
revivetrigger = playerbeingrevived.revivetrigger;
playerbeingrevived waittill( "disconnect" );
if ( isDefined( revivetrigger ) )
{
revivetrigger delete();
}
self maps/mp/zombies/_zm_laststand::cleanup_suicide_hud();
if ( isDefined( self.reviveprogressbar ) )
{
self.reviveprogressbar destroyelem();
}
if ( isDefined( self.revivetexthud ) )
{
self.revivetexthud destroy();
}
self maps/mp/zombies/_zm_laststand::revive_give_back_weapons( revivergun );
}
laststand_clean_up_reviving_any( playerbeingrevived ) //checked changed to match cerberus output
{
self endon( "do_revive_ended_normally" );
playerbeingrevived waittill_any( "disconnect", "zombified", "stop_revive_trigger" );
self.is_reviving_any--;
if ( self.is_reviving_any < 0 )
{
self.is_reviving_any = 0;
}
if ( isDefined( playerbeingrevived.beingrevivedprogressbar ) )
{
playerbeingrevived.beingrevivedprogressbar destroyelem();
}
}
revive_weapon_switch_watcher()
{
self endon( "disconnect" );
self endon( "do_revive_ended_normally" );
self.revive_weapon_switched = undefined;
while(1)
{
self waittill("weapon_change");
curr_wep = self getCurrentWeapon();
if(curr_wep != "none" && curr_wep != level.revive_tool)
{
break;
}
}
self.revive_weapon_switched = 1;
}
revive_give_back_weapons( gun )
{
self takeweapon( level.revive_tool );
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{
return;
}
if(is_true(self.revive_weapon_switched))
{
return;
}
if ( gun != "none" && !is_placeable_mine( gun ) && gun != "equip_gasmask_zm" && gun != "lower_equip_gasmask_zm" && self hasweapon( gun ) )
{
self switchtoweapon( gun );
}
else
{
primaryweapons = self getweaponslistprimaries();
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
{
self switchtoweapon( primaryweapons[ 0 ] );
}
}
}
revive_hud_think()
{
self endon( "disconnect" );
while ( 1 )
{
wait 0.1;
if ( !maps/mp/zombies/_zm_laststand::player_any_player_in_laststand() )
{
continue;
}
players = get_players();
playertorevive = undefined;
i = 0;
while ( i < players.size )
{
if ( !isDefined( players[ i ].revivetrigger ) || !isDefined( players[ i ].revivetrigger.createtime ) )
{
i++;
continue;
}
if ( !isDefined( playertorevive ) || playertorevive.revivetrigger.createtime > players[ i ].revivetrigger.createtime )
{
playertorevive = players[ i ];
}
i++;
}
if ( isDefined( playertorevive ) )
{
i = 0;
while ( i < players.size )
{
if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{
i++;
continue;
}
if ( getDvar( "g_gametype" ) == "vs" )
{
if ( players[ i ].team != playertorevive.team )
{
i++;
continue;
}
}
if ( is_encounter() )
{
if ( players[ i ].sessionteam != playertorevive.sessionteam )
{
i++;
continue;
}
if ( is_true( level.hide_revive_message ) )
{
i++;
continue;
}
}
players[ i ] thread maps/mp/zombies/_zm_laststand::faderevivemessageover( playertorevive, 3 );
i++;
}
playertorevive.revivetrigger.createtime = undefined;
}
}
}