Dayz Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
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
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;
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;
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;
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}
map m_Player
static ref Param1< float > PARAM1_FLOAT
Definition enmath.c:7
override bool DeactivateCondition(PlayerBase player)
Definition poisoning.c:35
override void OnReconnect(PlayerBase player)
Definition poisoning.c:45
override void OnActivate(PlayerBase player)
Definition poisoning.c:40
static const int AGENT_THRESHOLD_ACTIVATE
Definition poisoning.c:3
bool m_Exhaustion
Definition poisoning.c:13
override string GetDebugText()
Definition poisoning.c:25
static const int WATER_DRAIN_FROM_VOMIT
Definition poisoning.c:9
static const int VOMIT_OCCURRENCES_MIN
Definition poisoning.c:6
static const int VOMIT_OCCURRENCES_PER_HOUR_MAX
Definition poisoning.c:109
override void OnTick(PlayerBase player, float deltaT)
Definition poisoning.c:59
override void Init()
Definition poisoning.c:15
static const int AGENT_THRESHOLD_DEACTIVATE
Definition poisoning.c:4
static const int VOMIT_OCCURRENCES_MAX
Definition poisoning.c:7
override bool ActivateCondition(PlayerBase player)
Definition poisoning.c:30
override void OnDeactivate(PlayerBase player)
Definition poisoning.c:50
float m_ExhaustionTimer
Definition poisoning.c:12
static const int ENERGY_DRAIN_FROM_VOMIT
Definition poisoning.c:10
static const int VOMIT_OCCURRENCES_PER_HOUR_MIN
DEPRECATED.
Definition poisoning.c:108
void SetDuration(float duration)
Definition statebase.c:80
void SetParam(Param p)
Definition statebase.c:105
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
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
Definition enmath.c:126
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
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()