pneumonia.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. class PneumoniaMdfr : ModifierBase
  2. {
  3. const int AGENT_THRESHOLD_ACTIVATE = 1150;
  4. const int AGENT_THRESHOLD_DEACTIVATE = 1100;
  5. const float STAMINA_DEPLETION_MULTIPLIER = 1.3;
  6. const float STAMINA_RECOVERY_MULTIPLIER = 0.5;
  7. const float HEALTH_LOSS_PNEUMONIA = 0.1;
  8. private const int TEMPORARY_RESISTANCE_TIME = 600;
  9. override void Init()
  10. {
  11. m_TrackActivatedTime = false;
  12. m_AnalyticsStatsEnabled = true;
  13. m_ID = eModifiers.MDF_PNEUMONIA;
  14. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  15. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  16. }
  17. override string GetDebugText()
  18. {
  19. return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
  20. }
  21. override protected bool ActivateCondition(PlayerBase player)
  22. {
  23. if (player.GetSingleAgentCount(eAgents.INFLUENZA) >= AGENT_THRESHOLD_ACTIVATE)
  24. return true;
  25. return false;
  26. }
  27. override protected void OnActivate(PlayerBase player)
  28. {
  29. player.IncreaseDiseaseCount();
  30. player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
  31. player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
  32. }
  33. override protected void OnDeactivate(PlayerBase player)
  34. {
  35. player.DecreaseDiseaseCount();
  36. player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
  37. player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
  38. player.SetTemporaryResistanceToAgent(eAgents.INFLUENZA, TEMPORARY_RESISTANCE_TIME);
  39. }
  40. override protected bool DeactivateCondition(PlayerBase player)
  41. {
  42. return (player.GetSingleAgentCount(eAgents.INFLUENZA) <= AGENT_THRESHOLD_DEACTIVATE);
  43. }
  44. override protected void OnTick(PlayerBase player, float deltaT)
  45. {
  46. float healthLoss = HEALTH_LOSS_PNEUMONIA * deltaT;
  47. player.AddHealth(-healthLoss);
  48. float heavyBreathChance = player.GetSingleAgentCountNormalized(eAgents.INFLUENZA);
  49. if ( Math.RandomFloat01() < heavyBreathChance / Math.RandomInt(1,15) )
  50. {
  51. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_GASP);
  52. }
  53. }
  54. };