DayZ 1.29
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
GeyserArea.c
См. документацию.
2{
3 DORMANT = 0,
4 ERUPTION_SOON = 1, // bubbling
5 ERUPTING_PRIMARY = 2, // main particle
6 ERUPTING_SECONDARY = 4 // secondary tall particle
7}
8
9class GeyserArea : EffectArea
10{
11 protected const int UPDATE_RATE = 1000; // ms
12 protected const float PRE_ERUPTION_DURATION = 10; // delay before the geysier activates (sec)
13 protected const float ERUPTION_TALL_DURATION = 3; // lenght of secondary eruption (sec)
14 protected const float ERUPTION_TALL_DELAY = 3; // min delay between secondary eruptions (sec)
15
16 protected bool m_SecondaryActive;
17
18 protected int m_TimeElapsed; // seconds
19 protected int m_TimeSecondaryElapsed; // seconds
20 protected float m_RandomizedInterval; // randomized interval to 80% - 120% of the set value
21 protected float m_RandomizedDuration; // randomized duration to 80% - 120% of the set value
23
24 override void DeferredInit()
25 {
26 super.DeferredInit();
27
28 InitZone();
29 }
30
31 override void EEDelete( EntityAI parent )
32 {
33 if (g_Game.IsClient() && m_GeyserTrigger)
34 m_GeyserTrigger.StopEffects();
35
36 super.EEDelete( parent );
37 }
38
39 override void InitZoneServer()
40 {
41 super.InitZoneServer();
42
43 if ( m_TriggerType != "" )
44 {
45 CreateTrigger(m_PositionTrigger, m_Radius);
46 m_GeyserTrigger = GeyserTrigger.Cast(m_Trigger);
47 }
48
49 g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(TickState, UPDATE_RATE, true);
50
52 }
53
54 void TickState()
55 {
56 m_TimeElapsed += UPDATE_RATE * 0.001;
57
58 if (m_GeyserTrigger.CheckGeyserState(EGeyserState.DORMANT))
59 {
61 {
62 #ifdef ENABLE_LOGGING
63 Debug.Log(m_Name + ": ERUPTION_SOON, interval: " + m_RandomizedInterval + " sec");
64 #endif
65
66 m_GeyserTrigger.AddGeyserState(EGeyserState.ERUPTION_SOON);
67
68 m_TimeElapsed = 0;
69 }
70 }
71 else if (m_GeyserTrigger.CheckGeyserState(EGeyserState.ERUPTION_SOON))
72 {
74 {
75 #ifdef ENABLE_LOGGING
76 Debug.Log(m_Name + ": ERUPTING_PRIMARY, interval: " + m_RandomizedDuration + " sec");
77 #endif
78
79 m_GeyserTrigger.RemoveGeyserState(EGeyserState.ERUPTION_SOON);
80 m_GeyserTrigger.AddGeyserState(EGeyserState.ERUPTING_PRIMARY);
81
83
85 m_SecondaryActive = false;
86 m_TimeElapsed = 0;
87 }
88 }
89 else if (m_GeyserTrigger.CheckGeyserState(EGeyserState.ERUPTING_PRIMARY))
90 {
92 {
94
95 #ifdef ENABLE_LOGGING
96 Debug.Log(m_Name + ": ERUPTION_SOON, interval: " + m_RandomizedInterval + " sec");
97 #endif
98
99 m_GeyserTrigger.RemoveGeyserState(EGeyserState.ERUPTING_PRIMARY);
100 m_GeyserTrigger.RemoveGeyserState(EGeyserState.ERUPTING_SECONDARY);
101 m_GeyserTrigger.AddGeyserState(EGeyserState.ERUPTION_SOON);
102
103 m_TimeElapsed = 0;
104 }
105 else if (Math.IsInRange(m_TimeElapsed, ERUPTION_TALL_DELAY, m_RandomizedDuration - ERUPTION_TALL_DURATION)) // Ensure burst do not overlap with state transitions
106 {
108 {
109 if (Math.RandomBool()) // 50% chance to start secondary eruption every update
110 {
111 m_GeyserTrigger.AddGeyserState(EGeyserState.ERUPTING_SECONDARY);
112
114 m_SecondaryActive = true;
115 }
116 }
117 else if (m_TimeSecondaryElapsed >= 0)
118 {
120
122 {
123 m_GeyserTrigger.RemoveGeyserState(EGeyserState.ERUPTING_SECONDARY);
124 m_SecondaryActive = false;
125 }
127 {
129 }
130 }
131 }
132 }
133 }
134
135 private void RandomizeIntervals()
136 {
137 m_RandomizedInterval = Math.RandomInt(m_EffectInterval * 0.8, m_EffectInterval * 1.2);
138 m_RandomizedDuration = Math.RandomInt(m_EffectDuration * 0.8, m_EffectDuration * 1.2);
139 }
140
142 {
143 array<Object> nearestObjects = new array<Object>();
144 g_Game.GetObjectsAtPosition(m_Position, m_Radius, nearestObjects, null);
145
146 foreach (Object obj : nearestObjects)
147 {
148 EntityAI entity = EntityAI.Cast(obj);
149 if (entity)
150 entity.ProcessDirectDamage(DamageType.CUSTOM, this, "", "HeatDamage", "0 0 0", 1000);
151 }
152 }
153}
string m_Name
Определения 3_Game/DayZ/InventoryItemType.c:34
float m_Radius
Определения AIGroupBehaviour.c:10
override void DeferredInit()
Определения ContaminatedArea.c:49
override void InitZoneServer()
Определения ContaminatedArea.c:56
override void EEDelete(EntityAI parent)
Определения ContaminatedArea.c:61
override void InitZone()
Определения ContaminatedArea_DynamicBase.c:61
DamageType
exposed from C++ (do not change)
Определения DamageSystem.c:11
DayZGame g_Game
Определения DayZGame.c:3942
vector m_Position
Cached world position.
Определения Effect.c:43
bool m_SecondaryActive
Определения GeyserArea.c:16
GeyserTrigger m_GeyserTrigger
Определения GeyserArea.c:22
void RandomizeIntervals()
Определения GeyserArea.c:135
int m_TimeElapsed
Определения GeyserArea.c:18
int m_TimeSecondaryElapsed
Определения GeyserArea.c:19
void KillEntitiesInArea()
Определения GeyserArea.c:141
float m_RandomizedInterval
Определения GeyserArea.c:20
const float ERUPTION_TALL_DURATION
Определения GeyserArea.c:13
float m_RandomizedDuration
Определения GeyserArea.c:21
const float ERUPTION_TALL_DELAY
Определения GeyserArea.c:14
const float PRE_ERUPTION_DURATION
Определения GeyserArea.c:12
void TickState()
Определения GeyserArea.c:54
enum EGeyserState UPDATE_RATE
EGeyserState
Определения GeyserArea.c:2
@ ERUPTION_SOON
Определения GeyserArea.c:4
@ DORMANT
Определения GeyserArea.c:3
@ ERUPTING_SECONDARY
Определения GeyserArea.c:6
@ ERUPTING_PRIMARY
Определения GeyserArea.c:5
void CreateTrigger()
Определения TrapBase.c:465
static void Log(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Prints debug message with normal prio.
Определения 3_Game/DayZ/tools/Debug.c:182
Определения 3_Game/DayZ/tools/Debug.c:2
Определения GeyserTrigger.c:2
Определения EnMath.c:7
Определения ObjectTyped.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto bool IsInRange(float v, float min, float max)
Returns if value is between min and max (inclusive)
static bool RandomBool()
Returns a random bool .
Определения EnMath.c:73
static proto int RandomInt(int min, int max)
Returns a random int number between and min [inclusive] and max [exclusive].
const int CALL_CATEGORY_SYSTEM
Определения 3_Game/DayZ/tools/tools.c:8