contamination2.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. class ContaminationStage2Mdfr: ModifierBase
  2. {
  3. static const int AGENT_THRESHOLD_ACTIVATE = 100;
  4. static const int AGENT_THRESHOLD_DEACTIVATE = 400;
  5. static const int EVENT_1_INTERVAL_MIN = 20;
  6. static const int EVENT_1_INTERVAL_MAX = 40;
  7. protected float m_NextEvent1;
  8. protected float m_Time1;
  9. static const int EVENT_2_INTERVAL_MIN = 200;
  10. static const int EVENT_2_INTERVAL_MAX = 400;
  11. protected float m_NextEvent2;
  12. protected float m_Time2;
  13. override void Init()
  14. {
  15. m_AnalyticsStatsEnabled = true;
  16. m_ID = eModifiers.MDF_CONTAMINATION2;
  17. m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
  18. m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
  19. m_SyncID = eModifierSyncIDs.MODIFIER_SYNC_CONTAMINATION2;
  20. }
  21. override string GetDebugText()
  22. {
  23. return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
  24. }
  25. override protected bool ActivateCondition(PlayerBase player)
  26. {
  27. return ( player.GetSingleAgentCount(eAgents.CHEMICAL_POISON) >= AGENT_THRESHOLD_ACTIVATE && player.GetSingleAgentCount(eAgents.CHEMICAL_POISON) < AGENT_THRESHOLD_DEACTIVATE);
  28. }
  29. override protected void OnActivate(PlayerBase player)
  30. {
  31. player.IncreaseDiseaseCount();
  32. m_NextEvent1 = Math.RandomFloatInclusive( EVENT_1_INTERVAL_MIN, EVENT_1_INTERVAL_MAX );
  33. m_NextEvent2 = Math.RandomFloatInclusive( EVENT_2_INTERVAL_MIN, EVENT_2_INTERVAL_MAX );
  34. }
  35. override protected void OnDeactivate(PlayerBase player)
  36. {
  37. player.DecreaseDiseaseCount();
  38. }
  39. override protected bool DeactivateCondition(PlayerBase player)
  40. {
  41. return !ActivateCondition(player);
  42. }
  43. override protected void OnTick(PlayerBase player, float deltaT)
  44. {
  45. m_Time1 += deltaT;
  46. m_Time2 += deltaT;
  47. if ( m_Time1 >= m_NextEvent1 )
  48. {
  49. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_COUGH);
  50. m_Time1 = 0;
  51. m_NextEvent1 = Math.RandomFloatInclusive( EVENT_1_INTERVAL_MIN, EVENT_1_INTERVAL_MAX );
  52. }
  53. if ( m_Time2 >= m_NextEvent2 )
  54. {
  55. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
  56. m_Time2 = 0;
  57. m_NextEvent2 = Math.RandomFloatInclusive( EVENT_2_INTERVAL_MIN, EVENT_2_INTERVAL_MAX );
  58. }
  59. }
  60. };