influenza.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. class InfluenzaMdfr : ModifierBase
  2. {
  3. const int AGENT_THRESHOLD_ACTIVATE = 600;
  4. const int AGENT_THRESHOLD_DEACTIVATE = 400;
  5. private const int COUGH_RND_DIVIDER_NORMAL_MIN = 5;
  6. private const int COUGH_RND_DIVIDER_NORMAL_MAX = 20;
  7. private const int COUGH_RND_DIVIDER_SUPPRESSED_MIN = 10;
  8. private const int COUGH_RND_DIVIDER_SUPPRESSED_MAX = 40;
  9. private const int TEMPORARY_RESISTANCE_TIME = 300;
  10. private ModifiersManager m_ModifiersManager;
  11. override void Init()
  12. {
  13. m_TrackActivatedTime = false;
  14. m_AnalyticsStatsEnabled = true;
  15. m_ID = eModifiers.MDF_INFLUENZA;
  16. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  17. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  18. }
  19. override string GetDebugText()
  20. {
  21. return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
  22. }
  23. override protected bool ActivateCondition(PlayerBase player)
  24. {
  25. if (player.GetSingleAgentCount(eAgents.INFLUENZA) >= AGENT_THRESHOLD_ACTIVATE)
  26. return true;
  27. return false;
  28. }
  29. override protected void OnActivate(PlayerBase player)
  30. {
  31. player.IncreaseDiseaseCount();
  32. m_ModifiersManager = player.GetModifiersManager();
  33. }
  34. override protected void OnDeactivate(PlayerBase player)
  35. {
  36. player.DecreaseDiseaseCount();
  37. player.SetTemporaryResistanceToAgent(eAgents.INFLUENZA, TEMPORARY_RESISTANCE_TIME);
  38. }
  39. override protected bool DeactivateCondition(PlayerBase player)
  40. {
  41. return (player.GetSingleAgentCount(eAgents.INFLUENZA) <= AGENT_THRESHOLD_DEACTIVATE);
  42. }
  43. override protected void OnTick(PlayerBase player, float deltaT)
  44. {
  45. float chanceOfCough = Math.Clamp(player.GetSingleAgentCountNormalized(eAgents.INFLUENZA),0,0.85);
  46. float coughRandomDivider = Math.RandomInt(COUGH_RND_DIVIDER_NORMAL_MIN, COUGH_RND_DIVIDER_NORMAL_MAX);
  47. if (m_ModifiersManager.IsModifierActive(eModifiers.MDF_PAINKILLERS) || m_ModifiersManager.IsModifierActive(eModifiers.MDF_MORPHINE))
  48. coughRandomDivider = Math.RandomInt(COUGH_RND_DIVIDER_SUPPRESSED_MIN, COUGH_RND_DIVIDER_SUPPRESSED_MAX);
  49. if (Math.RandomFloat01() < chanceOfCough / coughRandomDivider)
  50. {
  51. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
  52. }
  53. }
  54. }