123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- class CholeraMdfr: ModifierBase
- {
- static const int AGENT_THRESHOLD_ACTIVATE = 250;
- static const int AGENT_THRESHOLD_DEACTIVATE = 50;
-
- static const int CHANCE_OF_VOMIT = 10;
- static const int CHANCE_OF_VOMIT_AGENT = 30;
- static const int WATER_DRAIN_FROM_VOMIT = 450;
- static const int ENERGY_DRAIN_FROM_VOMIT = 310;
- static const float WATER_LOSS_CHOLERA = 0.5;
- static const float WATER_LOSS_CHOLERA_MIN = 0.1; // min multiplier of WATER_LOSS_CHOLERA
- static const float STOMACH_MIN_VOLUME = 200; // for vomit symptom
-
- private float m_ExhaustionTimer;
- private bool m_Exhaustion;
- override void Init()
- {
- m_TrackActivatedTime = false;
- m_AnalyticsStatsEnabled = true;
- m_ID = eModifiers.MDF_CHOLERA;
- 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.CHOLERA) >= AGENT_THRESHOLD_ACTIVATE);
- }
- override protected void OnActivate(PlayerBase player)
- {
- player.IncreaseDiseaseCount();
-
- SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom( SymptomIDs.SYMPTOM_VOMIT );
- if (symptom)
- {
- CachedObjectsParams.PARAM1_FLOAT.param1 = 65.0;
- symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
- symptom.SetDuration(Math.RandomIntInclusive(4.0, 8.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 bool DeactivateCondition(PlayerBase player)
- {
- return (player.GetSingleAgentCount(eAgents.CHOLERA) <= AGENT_THRESHOLD_DEACTIVATE);
- }
- override protected void OnTick(PlayerBase player, float deltaT)
- {
- float waterLoss = ( deltaT * ( WATER_LOSS_CHOLERA * Math.Max( WATER_LOSS_CHOLERA_MIN, player.GetSingleAgentCountNormalized( eAgents.CHOLERA ) ) ) );
- player.GetStatWater().Add(-waterLoss);
- float stomachVolume = player.m_PlayerStomach.GetStomachVolume();
- if (stomachVolume >= STOMACH_MIN_VOLUME)
- {
- int roll = Math.RandomInt( 0, 100 );
- if( roll < ( CHANCE_OF_VOMIT + ( CHANCE_OF_VOMIT_AGENT * player.GetSingleAgentCountNormalized( eAgents.CHOLERA ) ) ) )
- {
- SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom( SymptomIDs.SYMPTOM_VOMIT );
- if (symptom)
- {
- CachedObjectsParams.PARAM1_FLOAT.param1 = 65.0;
- symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
- symptom.SetDuration(Math.RandomIntInclusive(4.0, 8.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;
- }
- }
- }
-
- if (m_Exhaustion)
- {
- m_ExhaustionTimer += deltaT;
- if (m_ExhaustionTimer >= 30)
- {
- player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
- player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
-
- m_Exhaustion = false;
- }
- }
- }
- }
|