fever.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. class FeverMdfr: ModifierBase
  2. {
  3. private float m_Time;
  4. private float m_NextEvent;
  5. static const float EVENT_INTERVAL_MIN = 12;
  6. static const float EVENT_INTERVAL_MAX = 18;
  7. override void Init()
  8. {
  9. m_TrackActivatedTime = false;
  10. m_AnalyticsStatsEnabled = true;
  11. m_ID = eModifiers.MDF_FEVER;
  12. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  13. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE_SHORT;
  14. m_SyncID = eModifierSyncIDs.MODIFIER_SYNC_FEVER;
  15. }
  16. override bool ActivateCondition(PlayerBase player)
  17. {
  18. return (player.GetModifiersManager().IsModifierActive(eModifiers.MDF_CHOLERA) || player.GetModifiersManager().IsModifierActive(eModifiers.MDF_INFLUENZA) || player.GetModifiersManager().IsModifierActive(eModifiers.MDF_WOUND_INFECTION2));
  19. }
  20. override void OnActivate(PlayerBase player)
  21. {
  22. if( player.m_NotifiersManager )
  23. player.m_NotifiersManager.ActivateByType(eNotifiers.NTF_FEVERISH);
  24. player.GetSymptomManager().QueueUpSecondarySymptom(SymptomIDs.SYMPTOM_FEVERBLUR);
  25. }
  26. override void OnReconnect(PlayerBase player)
  27. {
  28. this.OnActivate(player);
  29. }
  30. override void OnDeactivate(PlayerBase player)
  31. {
  32. if( player.m_NotifiersManager )
  33. player.m_NotifiersManager.DeactivateByType(eNotifiers.NTF_FEVERISH);
  34. player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_FEVERBLUR);
  35. }
  36. override bool DeactivateCondition(PlayerBase player)
  37. {
  38. return !ActivateCondition(player);
  39. }
  40. override void OnTick(PlayerBase player, float deltaT)
  41. {
  42. float water_loss = deltaT * PlayerConstants.WATER_LOSS_FEVER;
  43. player.GetStatWater().Add(-water_loss);
  44. m_Time += deltaT;
  45. if ( m_Time >= m_NextEvent )
  46. {
  47. m_Time = 0;
  48. m_NextEvent = Math.RandomFloatInclusive( EVENT_INTERVAL_MIN, EVENT_INTERVAL_MAX );
  49. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_HOT);
  50. }
  51. }
  52. };