woundinfection2.c 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. class WoundInfectStage2Mdfr: ModifierBase
  2. {
  3. static const int AGENT_THRESHOLD_ACTIVATE = 250;
  4. static const int AGENT_THRESHOLD_DEACTIVATE = 0;
  5. static const int PAIN_EVENT_INTERVAL_MIN = 6;
  6. static const int PAIN_EVENT_INTERVAL_MAX = 12;
  7. static const float DAMAGE_PER_SEC = 0.04;
  8. protected float m_NextEvent;
  9. protected float m_Time;
  10. override void Init()
  11. {
  12. m_TrackActivatedTime = false;
  13. m_AnalyticsStatsEnabled = true;
  14. m_ID = eModifiers.MDF_WOUND_INFECTION2;
  15. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  16. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  17. m_SyncID = eModifierSyncIDs.MODIFIER_SYNC_WOUND_INFECT_2;
  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.WOUND_AGENT) >= AGENT_THRESHOLD_ACTIVATE)
  26. {
  27. return true;
  28. }
  29. else
  30. {
  31. return false;
  32. }
  33. }
  34. override protected void OnActivate(PlayerBase player)
  35. {
  36. player.IncreaseDiseaseCount();
  37. m_NextEvent = Math.RandomFloatInclusive( PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX );
  38. SymptomBase shivers = player.GetSymptomManager().QueueUpSecondarySymptomEx(SymptomIDs.SYMPTOM_HAND_SHIVER);
  39. if ( shivers )
  40. {
  41. CachedObjectsParams.PARAM1_INT.param1 = 3;
  42. shivers.SetParam(CachedObjectsParams.PARAM1_INT);
  43. }
  44. }
  45. override protected void OnDeactivate(PlayerBase player)
  46. {
  47. player.DecreaseDiseaseCount();
  48. player.GetSymptomManager().RemoveSecondarySymptom(SymptomIDs.SYMPTOM_HAND_SHIVER);
  49. }
  50. override protected bool DeactivateCondition(PlayerBase player)
  51. {
  52. if(player.GetSingleAgentCount(eAgents.WOUND_AGENT) <= AGENT_THRESHOLD_DEACTIVATE)
  53. {
  54. return true;
  55. }
  56. else
  57. {
  58. return false;
  59. }
  60. }
  61. override protected void OnTick(PlayerBase player, float deltaT)
  62. {
  63. m_Time += deltaT;
  64. if ( m_Time >= m_NextEvent )
  65. {
  66. if( player.IsAntibioticsActive() )
  67. {
  68. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_LIGHT);
  69. }
  70. else
  71. {
  72. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_HEAVY);
  73. float damage = m_Time * (DAMAGE_PER_SEC + player.GetHealthRegenSpeed());
  74. player.AddHealth("","", -damage);
  75. }
  76. m_Time = 0;
  77. m_NextEvent = Math.RandomFloatInclusive( PAIN_EVENT_INTERVAL_MIN, PAIN_EVENT_INTERVAL_MAX );
  78. }
  79. }
  80. };