Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
poisoning.c
Go to the documentation of this file.
2{
3 static const int AGENT_THRESHOLD_ACTIVATE = 1;
4 static const int AGENT_THRESHOLD_DEACTIVATE = 40;
5
6 static const int VOMIT_OCCURRENCES_MIN = 2;
7 static const int VOMIT_OCCURRENCES_MAX = 5;
8
9 static const int WATER_DRAIN_FROM_VOMIT = 70;
10 static const int ENERGY_DRAIN_FROM_VOMIT = 55;
11
12 private float m_ExhaustionTimer;
13 private bool m_Exhaustion;
14
15 override void Init()
16 {
19 m_IsPersistent = true;
20 m_ID = eModifiers.MDF_POISONING;
23 }
24
25 override string GetDebugText()
26 {
27 return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
28 }
29
30 override bool ActivateCondition(PlayerBase player)
31 {
32 return (player.GetSingleAgentCount(eAgents.FOOD_POISON) >= AGENT_THRESHOLD_ACTIVATE);
33 }
34
35 override bool DeactivateCondition(PlayerBase player)
36 {
37 return !ActivateCondition(player);
38 }
39
40 override void OnActivate(PlayerBase player)
41 {
42 player.IncreaseDiseaseCount();
43 }
44
45 override void OnReconnect(PlayerBase player)
46 {
47 this.OnActivate(player);
48 }
49
50 override void OnDeactivate(PlayerBase player)
51 {
52 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
53 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
54 m_Exhaustion = false;
55 m_ExhaustionTimer = 0;
56 player.DecreaseDiseaseCount();
57 }
58
59 override void OnTick(PlayerBase player, float deltaT)
60 {
61 int agentCount = player.m_AgentPool.GetSingleAgentCount(eAgents.FOOD_POISON);
62 if (agentCount <= AGENT_THRESHOLD_DEACTIVATE)
63 return;
64
65 int agentMax = PluginTransmissionAgents.GetAgentMaxCount(eAgents.FOOD_POISON);
66
67 float invertedAgentCountValue = Math.InverseLerp(0, agentMax, agentCount);
68 float chance = Math.Lerp(VOMIT_OCCURRENCES_MIN, VOMIT_OCCURRENCES_MAX, invertedAgentCountValue);
69 chance = (chance / 300) * deltaT;
70
71 if (Math.RandomFloat01() < chance)
72 {
73 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom(SymptomIDs.SYMPTOM_VOMIT);
74 if (symptom)
75 {
76 CachedObjectsParams.PARAM1_FLOAT.param1 = 30.0 * invertedAgentCountValue;
77 symptom.SetParam(CachedObjectsParams.PARAM1_FLOAT);
78 symptom.SetDuration(Math.Max(3.0, 10 * invertedAgentCountValue));
79 //player.m_AgentPool.ReduceAgent(eAgents.FOOD_POISON, 100.0 * invertedAgentCountValue);
80 player.m_AgentPool.ReduceAgent(eAgents.FOOD_POISON, 60);
81 if (m_Player.GetStatWater().Get() > (WATER_DRAIN_FROM_VOMIT))
82 m_Player.GetStatWater().Add(-1 * WATER_DRAIN_FROM_VOMIT);
83 if (m_Player.GetStatEnergy().Get() > (ENERGY_DRAIN_FROM_VOMIT))
84 m_Player.GetStatEnergy().Add(-1 * ENERGY_DRAIN_FROM_VOMIT);
85
86 player.GetStaminaHandler().ActivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
87 player.GetStaminaHandler().ActivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
88
89 m_Exhaustion = true;
90 m_ExhaustionTimer = 0;
91 }
92 }
93
94 if (m_Exhaustion)
95 {
96 m_ExhaustionTimer += deltaT;
97 if (m_ExhaustionTimer >= 30 * invertedAgentCountValue)
98 {
99 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
100 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
101
102 m_Exhaustion = false;
103 }
104 }
105 }
106
108 static const int VOMIT_OCCURRENCES_PER_HOUR_MIN = 60;
109 static const int VOMIT_OCCURRENCES_PER_HOUR_MAX = 120;
110}
Definition enmath.c:7
eAgents
Definition eagents.c:3
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
Definition effect.c:51
eModifiers
Definition emodifiers.c:2
DayZPlayer m_Player
Definition hand_events.c:42
HeavyMetalMdfr AGENT_THRESHOLD_ACTIVATE
bool m_TrackActivatedTime
overall time this modifier was active
bool m_AnalyticsStatsEnabled
float m_TickIntervalActive
float m_TickIntervalInactive
bool m_IsPersistent
should this modifier track overall time it was active ?
const int DEFAULT_TICK_TIME_INACTIVE
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
EStaminaMultiplierTypes
void OnActivate()