bloodregen.c 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. class BloodRegenMdfr: ModifierBase
  2. {
  3. override void Init()
  4. {
  5. m_TrackActivatedTime = false;
  6. m_ID = eModifiers.MDF_BLOOD_REGEN;
  7. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  8. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  9. }
  10. override bool ActivateCondition(PlayerBase player)
  11. {
  12. float m_MaxBlood = player.GetMaxHealth("GlobalHealth", "Blood");
  13. if ( player.GetHealth("GlobalHealth", "Blood") <= m_MaxBlood )
  14. {
  15. return true;
  16. }
  17. else
  18. {
  19. return false;
  20. }
  21. }
  22. override void OnActivate(PlayerBase player)
  23. {
  24. }
  25. override bool DeactivateCondition(PlayerBase player)
  26. {
  27. float m_MaxBlood = player.GetMaxHealth("GlobalHealth", "Blood");
  28. if ( player.GetHealth("GlobalHealth", "Blood") >= m_MaxBlood )
  29. {
  30. return true;
  31. }
  32. else
  33. {
  34. return false;
  35. }
  36. }
  37. override void OnTick(PlayerBase player, float deltaT)
  38. {
  39. float regen_modifier_water = GetRegenModifierWater( player.GetStatWater().Get() );
  40. float regen_modifier_energy = GetRegenModifierEnergy( player.GetStatEnergy().Get() );
  41. float blood_regen_speed = PlayerConstants.BLOOD_REGEN_RATE_PER_SEC * regen_modifier_water * regen_modifier_energy;
  42. /*
  43. PrintString("regen_modifier_water" + regen_modifier_water);
  44. PrintString("regen_modifier_energy" + regen_modifier_energy);
  45. PrintString("blood_regen_speed" + blood_regen_speed);
  46. */
  47. if ( player.IsUnconscious() && player.GetHealth("GlobalHealth", "Blood") <= PlayerConstants.SL_BLOOD_CRITICAL )
  48. {
  49. blood_regen_speed *= PlayerConstants.UNCONSCIOUS_BLOOD_REGEN_MLTP;
  50. }
  51. player.AddHealth("","Blood", blood_regen_speed * deltaT );
  52. }
  53. float GetRegenModifierWater(float water)
  54. {
  55. float modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_HIGH;
  56. int water_level = m_Player.GetStatLevelWater();
  57. /*
  58. if( water < PlayerConstants.BLOOD_REGEN_THRESHOLD_WATER_MID ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_MID}
  59. if( water < PlayerConstants.BLOOD_REGEN_THRESHOLD_WATER_LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_LOW}
  60. */
  61. if( water_level == EStatLevels.MEDIUM ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_MID}
  62. if( water_level >= EStatLevels.LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_WATER_LOW}
  63. return modifier;
  64. }
  65. float GetRegenModifierEnergy(float energy)
  66. {
  67. float modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_HIGH;
  68. int energy_level = m_Player.GetStatLevelEnergy();
  69. //if( energy < PlayerConstants.BLOOD_REGEN_THRESHOLD_ENERGY_MID ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_MID}
  70. //if( energy < PlayerConstants.BLOOD_REGEN_THRESHOLD_ENERGY_LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_LOW}
  71. if( energy_level == EStatLevels.MEDIUM ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_MID}
  72. if( energy_level >= EStatLevels.LOW ) {modifier = PlayerConstants.BLOOD_REGEN_MODIFIER_ENERGY_LOW}
  73. return modifier;
  74. }
  75. };