Shock.c
class ShockMdfr: ModifierBase
{
private const float UNCONSCIOUS_LIMIT = 50;
private const float SHOCK_INCREMENT_PER_SEC = 1;
override void Init()
{
m_ID = eModifiers.MDF_SHOCK;
m_TickIntervalInactive = 1;
m_TickIntervalActive = 0.35;
//DisableActivateCheck();
DisableDeactivateCheck();
}
override bool ActivateCondition(PlayerBase player)
{
return true;
}
override bool DeactivateCondition(PlayerBase player)
{
return false;
}
override void OnActivate(PlayerBase player)
{
}
override void OnDeactivate(PlayerBase player)
{
}
float GetRefillSpeed(PlayerBase player)
{
if ( player.m_IsDrowning )
{
return 0;
}
if ( player.IsUnconscious() )
{
if ( player.GetHealth("GlobalHealth", "Blood") <= PlayerConstants.SL_BLOOD_CRITICAL )
{
return CfgGameplayHandler.GetShockRefillSpeedUnconscious() * player.m_UnconRefillModifier * PlayerConstants.SHOCK_REFILL_UNCON_CRITICAL_BLOOD_MLTP;
}
else
{
return CfgGameplayHandler.GetShockRefillSpeedUnconscious() * player.m_UnconRefillModifier;
}
}
if (player.GetBrokenLegs() != eBrokenLegs.BROKEN_LEGS || (player.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_PRONE || player.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDPRONE))
{
return CfgGameplayHandler.GetShockRefillSpeedConscious();
}
if ( player.GetBrokenLegs() == eBrokenLegs.BROKEN_LEGS && (player.IsSwimming() || player.IsClimbingLadder()) )
{
return CfgGameplayHandler.GetShockRefillSpeedUnconscious();
}
return 0; //Block shock regen when standing with broken legs
}
override void OnTick(PlayerBase player, float deltaT)
{
//Print("m_UnconRefillModifier" + player.m_UnconRefillModifier);
if ( g_Game.GetTime() > player.m_LastShockHitTime + PlayerConstants.SHOCK_REFILL_COOLDOWN_AFTER_HIT && player.GetPulseType() == EPulseType.REGULAR)
{
if (!player.IsUnconscious())
player.m_UnconRefillModifier = 1;//reset this UnconRefillModifier some time after the player has been hit(we want the UnconRefillModifier to only apply to uncon induced by a projectile)
if (player.GetHealth01("","Shock") == 1)//no need to continue if the shock is full
return;
if ( !CfgGameplayHandler.GetAllowRefillSpeedModifier() )
player.m_UnconRefillModifier = 1;
player.AddHealth("","Shock", deltaT * GetRefillSpeed(player) );
}
}
override void OnReconnect(PlayerBase player)
{
}
};