shockdamage.c 1.8 KB

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