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_playerhealth.gsc
Jbleezy 7423d548c6 Zombies: decrease melee damage
Players: change low health threshold
2023-09-25 19:11:37 -07:00

195 lines
3.9 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
playerhealthregen()
{
self notify( "playerHealthRegen" );
self endon( "playerHealthRegen" );
self endon( "death" );
self endon( "disconnect" );
if ( !isDefined( self.flag ) )
{
self.flag = [];
self.flags_lock = [];
}
if ( !isDefined( self.flag[ "player_has_red_flashing_overlay" ] ) )
{
self player_flag_init( "player_has_red_flashing_overlay" );
self player_flag_init( "player_is_invulnerable" );
}
self player_flag_clear( "player_has_red_flashing_overlay" );
self player_flag_clear( "player_is_invulnerable" );
self thread maps\mp\zombies\_zm_playerhealth::healthoverlay();
level.playerhealth_regularregendelay = 2000;
level.longregentime = 4000;
oldratio = 1;
veryhurt = 0;
playerjustgotredflashing = 0;
invultime = 0;
hurttime = 0;
newhealth = 0;
lastinvulratio = 1;
healthoverlaycutoff = 0.2;
self thread maps\mp\zombies\_zm_playerhealth::playerhurtcheck();
if ( !isDefined( self.veryhurt ) )
{
self.veryhurt = 0;
}
self.bolthit = 0;
if ( getDvar( "scr_playerInvulTimeScale" ) == "" )
{
setdvar( "scr_playerInvulTimeScale", 1 );
}
playerinvultimescale = getDvarFloat( "scr_playerInvulTimeScale" );
for ( ;; )
{
wait 0.05;
waittillframeend;
health_ratio = self.health / self.maxhealth;
maxhealthratio = self.maxhealth / 100;
regenrate = 0.05 / maxhealthratio;
regularregendelay = level.playerhealth_regularregendelay;
longregendelay = level.longregentime;
if (self hasPerk("specialty_quickrevive"))
{
regularregendelay *= 0.75;
longregendelay *= 0.75;
}
if ( self.health > 50 )
{
if ( self player_flag( "player_has_red_flashing_overlay" ) )
{
player_flag_clear( "player_has_red_flashing_overlay" );
}
lastinvulratio = 1;
playerjustgotredflashing = 0;
veryhurt = 0;
if ( self.health == self.maxhealth )
{
oldratio = 1;
continue;
}
}
else if ( self.health <= 0 )
{
return;
}
wasveryhurt = veryhurt;
if ( self.health <= 50 )
{
veryhurt = 1;
if ( !wasveryhurt )
{
hurttime = getTime();
self player_flag_set( "player_has_red_flashing_overlay" );
playerjustgotredflashing = 1;
}
}
if ( self.hurtagain )
{
hurttime = getTime();
self.hurtagain = 0;
}
if ( health_ratio >= oldratio )
{
if ( ( getTime() - hurttime ) < regularregendelay )
{
continue;
}
else
{
self.veryhurt = veryhurt;
newhealth = health_ratio;
if ( veryhurt )
{
if ( ( getTime() - hurttime ) >= longregendelay )
{
newhealth += regenrate;
}
}
else
{
newhealth += regenrate;
}
}
if ( newhealth > 1 )
{
newhealth = 1;
}
if ( newhealth <= 0 )
{
return;
}
self setnormalhealth( newhealth );
oldratio = self.health / self.maxhealth;
continue;
}
else
{
invulworthyhealthdrop = ( lastinvulratio - health_ratio ) > level.worthydamageratio;
}
if ( self.health <= 1 )
{
self setnormalhealth( 1 / self.maxhealth );
invulworthyhealthdrop = 1;
}
oldratio = self.health / self.maxhealth;
self notify( "hit_again" );
hurttime = getTime();
if ( !invulworthyhealthdrop || playerinvultimescale <= 0 )
{
continue;
}
else
{
if ( self player_flag( "player_is_invulnerable" ) )
{
continue;
}
else
{
self player_flag_set( "player_is_invulnerable" );
level notify( "player_becoming_invulnerable" );
if ( playerjustgotredflashing )
{
invultime = level.invultime_onshield;
playerjustgotredflashing = 0;
}
else if ( veryhurt )
{
invultime = level.invultime_postshield;
}
else
{
invultime = level.invultime_preshield;
}
invultime *= playerinvultimescale;
lastinvulratio = self.health / self.maxhealth;
self thread maps\mp\zombies\_zm_playerhealth::playerinvul( invultime );
}
}
}
}