DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Poisoning.c
См. документацию.
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}
eAgents
Определения EAgents.c:3
int m_ID
ID of effect, given by SEffectManager when registered (automatically done when playing through it)
Определения Effect.c:49
DayZPlayer m_Player
Определения Hand_Events.c:42
bool m_TrackActivatedTime
overall time this modifier was active
Определения ModifierBase.c:14
bool m_AnalyticsStatsEnabled
Определения ModifierBase.c:31
float m_TickIntervalActive
Определения ModifierBase.c:18
float m_TickIntervalInactive
Определения ModifierBase.c:17
bool m_IsPersistent
should this modifier track overall time it was active ?
Определения ModifierBase.c:15
const int DEFAULT_TICK_TIME_INACTIVE
Определения ModifiersManager.c:29
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
EStaminaMultiplierTypes
Определения StaminaHandler.c:2
void OnActivate()
Определения Trap_LandMine.c:67
static ref Param1< float > PARAM1_FLOAT
Определения UtilityClasses.c:13
Определения EnMath.c:7
Определения BreathVapourMdfr.c:4
Определения PlayerBaseClient.c:2
override string GetDebugText()
Определения Poisoning.c:25
float m_ExhaustionTimer
Определения Poisoning.c:12
override void OnTick(PlayerBase player, float deltaT)
Определения Poisoning.c:59
override void OnDeactivate(PlayerBase player)
Определения Poisoning.c:50
static const int VOMIT_OCCURRENCES_PER_HOUR_MIN
DEPRECATED.
Определения Poisoning.c:108
static const int VOMIT_OCCURRENCES_MIN
Определения Poisoning.c:6
static const int WATER_DRAIN_FROM_VOMIT
Определения Poisoning.c:9
bool m_Exhaustion
Определения Poisoning.c:13
static const int VOMIT_OCCURRENCES_MAX
Определения Poisoning.c:7
override bool DeactivateCondition(PlayerBase player)
Определения Poisoning.c:35
static const int VOMIT_OCCURRENCES_PER_HOUR_MAX
Определения Poisoning.c:109
override void OnActivate(PlayerBase player)
Определения Poisoning.c:40
static const int AGENT_THRESHOLD_DEACTIVATE
Определения Poisoning.c:4
override void Init()
Определения Poisoning.c:15
override bool ActivateCondition(PlayerBase player)
Определения Poisoning.c:30
static const int ENERGY_DRAIN_FROM_VOMIT
Определения Poisoning.c:10
override void OnReconnect(PlayerBase player)
Определения Poisoning.c:45
static const int AGENT_THRESHOLD_ACTIVATE
Определения Poisoning.c:3
Определения Poisoning.c:2
void SetDuration(float duration)
Определения StateBase.c:80
void SetParam(Param p)
Определения StateBase.c:105
Определения StateBase.c:2
eModifiers
Определения eModifiers.c:2
static float RandomFloat01()
Returns a random float number between and min [inclusive] and max [inclusive].
Определения EnMath.c:126
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto float Lerp(float a, float b, float time)
Linearly interpolates between 'a' and 'b' given 'time'.
static proto float InverseLerp(float a, float b, float value)
Calculates the linear value that produces the interpolant value within the range [a,...