123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- class SalmonellaMdfr: ModifierBase
- {
- static const int AGENT_THRESHOLD_ACTIVATE = 60;
- static const int AGENT_THRESHOLD_DEACTIVATE = 20;
- static const int CHANCE_OF_VOMIT = 10; // base vomit chance
- static const int CHANCE_OF_VOMIT_AGENT = 20; // adjusted by the agent count
- static const int WATER_DRAIN_FROM_VOMIT = 450;
- static const int ENERGY_DRAIN_FROM_VOMIT = 310;
- static const float STOMACH_MIN_VOLUME = 200; // min volume of stomach for vomit symptom
-
- static const float EVENT_INTERVAL_MIN = 12;
- static const float EVENT_INTERVAL_MAX = 18;
- private float m_Time;
- private float m_NextEvent;
- private float m_ExhaustionTimer;
-
- private bool m_Exhaustion;
-
- override void Init()
- {
- m_TrackActivatedTime = false;
- m_AnalyticsStatsEnabled = true;
- m_ID = eModifiers.MDF_SALMONELLA;
- m_TickIntervalInactive = DEFAULT_TICK_TIME_INACTIVE;
- m_TickIntervalActive = DEFAULT_TICK_TIME_ACTIVE;
- }
-
- override string GetDebugText()
- {
- return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
- }
-
- override protected bool ActivateCondition(PlayerBase player)
- {
- return player.GetSingleAgentCount(eAgents.SALMONELLA) >= AGENT_THRESHOLD_ACTIVATE);
- }
-
- override protected bool DeactivateCondition(PlayerBase player)
- {
- return player.GetSingleAgentCount(eAgents.SALMONELLA) <= AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected void OnActivate(PlayerBase player)
- {
- player.IncreaseDiseaseCount();
-
- SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom( SymptomIDs.SYMPTOM_VOMIT );
- if (symptom)
- {
- CachedObjectsParams.PARAM1_FLOAT.param1 = 50.0;
- symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
- symptom.SetDuration(5.0);
- }
- }
- override protected void OnDeactivate(PlayerBase player)
- {
- player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
- player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
- m_Exhaustion = false;
- m_ExhaustionTimer = 0;
- player.DecreaseDiseaseCount();
- }
- override protected void OnTick(PlayerBase player, float deltaT)
- {
- float stomach_volume = player.m_PlayerStomach.GetStomachVolume();
- if (stomach_volume >= STOMACH_MIN_VOLUME)
- {
- int roll = Math.RandomInt(0, 100);
- int chanceOfVomit = CHANCE_OF_VOMIT + (CHANCE_OF_VOMIT_AGENT * player.GetSingleAgentCountNormalized(eAgents.SALMONELLA));
- if (roll < chanceOfVomit)
- {
- SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
-
- if (symptom)
- {
- CachedObjectsParams.PARAM1_FLOAT.param1 = 50.0;
- symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
- symptom.SetDuration(5);
- player.m_AgentPool.ReduceAgent(eAgents.SALMONELLA, 30.0);
- if (m_Player.GetStatWater().Get() > WATER_DRAIN_FROM_VOMIT)
- m_Player.GetStatWater().Add(-1 * WATER_DRAIN_FROM_VOMIT);
- if (m_Player.GetStatEnergy().Get() > ENERGY_DRAIN_FROM_VOMIT)
- m_Player.GetStatEnergy().Add(-1 * ENERGY_DRAIN_FROM_VOMIT);
-
- player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
- player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
-
- m_Exhaustion = true;
- m_ExhaustionTimer = 0;
- }
- }
- }
-
- m_Time += deltaT;
-
- if (m_Time >= m_NextEvent)
- {
- m_Time = 0;
- m_NextEvent = Math.RandomFloatInclusive(EVENT_INTERVAL_MIN, EVENT_INTERVAL_MAX);
- player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_PAIN_LIGHT);
- }
-
- if (m_Exhaustion)
- {
- m_ExhaustionTimer += deltaT;
- if (m_ExhaustionTimer >= 45)
- {
- player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
- player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.DISEASE_PNEUMONIA);
-
- m_Exhaustion = false;
- }
- }
-
-
- }
- }
|