shockdamage.c 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. class ShockDamageMdfr: ModifierBase
  2. {
  3. const int UNCONSIOUSS_COOLDOWN_TIME = 60;//in s
  4. override void Init()
  5. {
  6. m_TrackActivatedTime = false;
  7. m_ID = eModifiers.MDF_SHOCK_DAMAGE;
  8. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  9. m_TickIntervalActive = 0.5;
  10. }
  11. override void OnActivate(PlayerBase player)
  12. {
  13. }
  14. override void OnReconnect(PlayerBase player)
  15. {
  16. }
  17. override bool ActivateCondition(PlayerBase player)
  18. {
  19. if( !player.IsUnconscious() && player.GetHealth("","Blood") <= PlayerConstants.SHOCK_DAMAGE_BLOOD_THRESHOLD_HIGH && GetGame().GetTime() > (player.m_UnconsciousEndTime + UNCONSIOUSS_COOLDOWN_TIME) )
  20. {
  21. return true;
  22. }
  23. else
  24. {
  25. return false;
  26. }
  27. }
  28. override bool DeactivateCondition(PlayerBase player)
  29. {
  30. return !ActivateCondition(player);
  31. }
  32. // ------------------------------------------------------------------------------
  33. override void OnTick(PlayerBase player, float deltaT)
  34. {
  35. float blood = player.GetHealth("","Blood");
  36. float value = Math.InverseLerp( PlayerConstants.SHOCK_DAMAGE_BLOOD_THRESHOLD_HIGH, PlayerConstants.SHOCK_DAMAGE_BLOOD_THRESHOLD_LOW, blood );
  37. value = Math.Clamp(value,0,1);
  38. float dmg = Math.Lerp( PlayerConstants.SHOCK_DAMAGE_HIGH, PlayerConstants.SHOCK_DAMAGE_LOW, value);
  39. float damage = -dmg * deltaT;
  40. player.AddHealth("","Shock", damage);
  41. //PrintString(damage.ToString());
  42. }
  43. };