DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Cholera.c
См. документацию.
2{
3 static const int AGENT_THRESHOLD_ACTIVATE = 250;
4 static const int AGENT_THRESHOLD_DEACTIVATE = 50;
5
6 static const int CHANCE_OF_VOMIT = 10;
7 static const int CHANCE_OF_VOMIT_AGENT = 30;
8 static const int WATER_DRAIN_FROM_VOMIT = 450;
9 static const int ENERGY_DRAIN_FROM_VOMIT = 310;
10 static const float WATER_LOSS_CHOLERA = 0.5;
11 static const float WATER_LOSS_CHOLERA_MIN = 0.1; // min multiplier of WATER_LOSS_CHOLERA
12 static const float STOMACH_MIN_VOLUME = 200; // for vomit symptom
13
14 private float m_ExhaustionTimer;
15 private bool m_Exhaustion;
16
25
26 override string GetDebugText()
27 {
28 return ("Activate threshold: "+AGENT_THRESHOLD_ACTIVATE + "| " +"Deativate threshold: "+AGENT_THRESHOLD_DEACTIVATE);
29 }
30
31 override protected bool ActivateCondition(PlayerBase player)
32 {
33 return (player.GetSingleAgentCount(eAgents.CHOLERA) >= AGENT_THRESHOLD_ACTIVATE);
34 }
35
36 override protected void OnActivate(PlayerBase player)
37 {
38 player.IncreaseDiseaseCount();
39
40 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom( SymptomIDs.SYMPTOM_VOMIT );
41 if (symptom)
42 {
45 symptom.SetDuration(Math.RandomIntInclusive(4.0, 8.0));
46 }
47 }
48
49 override protected void OnDeactivate(PlayerBase player)
50 {
51 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
52 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
53 m_Exhaustion = false;
55 player.DecreaseDiseaseCount();
56 }
57
58 override protected bool DeactivateCondition(PlayerBase player)
59 {
60 return (player.GetSingleAgentCount(eAgents.CHOLERA) <= AGENT_THRESHOLD_DEACTIVATE);
61 }
62
63 override protected void OnTick(PlayerBase player, float deltaT)
64 {
65 float waterLoss = ( deltaT * ( WATER_LOSS_CHOLERA * Math.Max( WATER_LOSS_CHOLERA_MIN, player.GetSingleAgentCountNormalized( eAgents.CHOLERA ) ) ) );
66 player.GetStatWater().Add(-waterLoss);
67
68 float stomachVolume = player.m_PlayerStomach.GetStomachVolume();
69 if (stomachVolume >= STOMACH_MIN_VOLUME)
70 {
71 int roll = Math.RandomInt( 0, 100 );
72 if( roll < ( CHANCE_OF_VOMIT + ( CHANCE_OF_VOMIT_AGENT * player.GetSingleAgentCountNormalized( eAgents.CHOLERA ) ) ) )
73 {
74 SymptomBase symptom = player.GetSymptomManager().QueueUpPrimarySymptom( SymptomIDs.SYMPTOM_VOMIT );
75 if (symptom)
76 {
79 symptom.SetDuration(Math.RandomIntInclusive(4.0, 8.0));
80
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
95 if (m_Exhaustion)
96 {
97 m_ExhaustionTimer += deltaT;
98 if (m_ExhaustionTimer >= 30)
99 {
100 player.GetStaminaHandler().DeactivateRecoveryModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
101 player.GetStaminaHandler().DeactivateDepletionModifier(EStaminaMultiplierTypes.VOMIT_EXHAUSTION);
102
103 m_Exhaustion = false;
104 }
105 }
106 }
107}
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
const int DEFAULT_TICK_TIME_INACTIVE
Определения ModifiersManager.c:29
enum eModifierSyncIDs DEFAULT_TICK_TIME_ACTIVE
EStaminaMultiplierTypes
Определения StaminaHandler.c:2
static ref Param1< float > PARAM1_FLOAT
Определения UtilityClasses.c:13
void OnTick(PlayerBase player, float deltaT)
Определения Cholera.c:63
static const int CHANCE_OF_VOMIT
Определения Cholera.c:6
bool m_Exhaustion
Определения Cholera.c:15
static const float WATER_LOSS_CHOLERA
Определения Cholera.c:10
float m_ExhaustionTimer
Определения Cholera.c:14
static const int AGENT_THRESHOLD_DEACTIVATE
Определения Cholera.c:4
bool ActivateCondition(PlayerBase player)
Определения Cholera.c:31
static const float WATER_LOSS_CHOLERA_MIN
Определения Cholera.c:11
void OnActivate(PlayerBase player)
Определения Cholera.c:36
override string GetDebugText()
Определения Cholera.c:26
void OnDeactivate(PlayerBase player)
Определения Cholera.c:49
bool DeactivateCondition(PlayerBase player)
Определения Cholera.c:58
static const int AGENT_THRESHOLD_ACTIVATE
Определения Cholera.c:3
static const int WATER_DRAIN_FROM_VOMIT
Определения Cholera.c:8
static const int CHANCE_OF_VOMIT_AGENT
Определения Cholera.c:7
static const int ENERGY_DRAIN_FROM_VOMIT
Определения Cholera.c:9
override void Init()
Определения Cholera.c:17
static const float STOMACH_MIN_VOLUME
Определения Cholera.c:12
Определения Cholera.c:2
Определения EnMath.c:7
Определения BreathVapourMdfr.c:4
Определения PlayerBaseClient.c:2
void SetDuration(float duration)
Определения StateBase.c:80
void SetParam(Param p)
Определения StateBase.c:105
Определения StateBase.c:2
eModifiers
Определения eModifiers.c:2
static proto float Max(float x, float y)
Returns bigger of two given values.
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
Определения EnMath.c:54