braindisease.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. class BrainDiseaseMdfr : ModifierBase
  2. {
  3. static const int AGENT_THRESHOLD_ACTIVATE = 2000;
  4. static const int AGENT_THRESHOLD_DEACTIVATE = 0;
  5. const int SHAKE_INTERVAL_MIN = 1;
  6. const int SHAKE_INTERVAL_MAX = 4;
  7. float m_Time;
  8. float m_ShakeTime;
  9. override void Init()
  10. {
  11. m_TrackActivatedTime = false;
  12. m_AnalyticsStatsEnabled = true;
  13. m_ID = eModifiers.MDF_BRAIN;
  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. return (player.GetSingleAgentCount(eAgents.BRAIN) >= AGENT_THRESHOLD_ACTIVATE);
  24. }
  25. override protected void OnActivate(PlayerBase player)
  26. {
  27. player.IncreaseDiseaseCount();
  28. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_LAUGHTER);
  29. }
  30. override protected void OnDeactivate(PlayerBase player)
  31. {
  32. player.DecreaseDiseaseCount();
  33. }
  34. override protected bool DeactivateCondition(PlayerBase player)
  35. {
  36. return (player.GetSingleAgentCount(eAgents.BRAIN) <= AGENT_THRESHOLD_DEACTIVATE);
  37. }
  38. override protected void OnTick(PlayerBase player, float deltaT)
  39. {
  40. m_Time += deltaT;
  41. float brainAgents = player.GetSingleAgentCountNormalized(eAgents.BRAIN) / 8.0;
  42. float chanceOfLaughter = Math.RandomFloat01();
  43. if (chanceOfLaughter < brainAgents)
  44. player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_LAUGHTER);
  45. if (m_Time >= m_ShakeTime)
  46. {
  47. DayZPlayerSyncJunctures.SendKuruRequest(player, brainAgents);
  48. m_ShakeTime = m_Time + Math.RandomFloat(SHAKE_INTERVAL_MIN, SHAKE_INTERVAL_MAX);
  49. }
  50. }
  51. }