DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
Slot.c
См. документацию.
2{
3 NONE = 0,
5 //This will be used to set bit values (DO NOT ADD MORE VALUES)
6}
7
8enum eWateredState
9{
10 DRY = 0,
11 WET = 1
12 //Used to improve readability of watered state changes
13}
14
15enum eGardenSlotState
16{
17 STATE_DIGGED = 1,
18 STATE_PLANTED = 2
19 //Used to set bit values depending on seed plant state
20}
21
22class Slot
23{
24 static const int FERTILIZER_USAGE = 200;
25
26 private int m_WaterQuantity;
27 static private int m_WaterNeeded = 190; // How much water is needed to water a plant from a bottle. Value is in mililitres
28 static private int m_WaterMax = 200;
29
30 float m_Fertility;
31 float m_FertilizerUsage;
32 float m_FertilizerQuantity;
33 float m_FertilizerQuantityMax; // how much of a fertilizer can the slot contain
34 int m_slotIndex;
35 int m_slotId;
36
37 string m_FertilizerType = "";
38 int m_FertilityState = eFertlityState.NONE;
39 int m_WateredState = eWateredState.DRY;
40 string m_DiggedSlotComponent; // example: "Component02" for the 1st slot in GardenBase
41 string m_PlantType;
42 private ItemBase m_Seed;
43 private GardenBase m_Garden;
44
45 float m_HarvestingEfficiency;
46
47 int m_State;
48
49 private PlantBase m_Plant;
50
51 void Slot( float base_fertility )
52 {
53 m_Seed = NULL;
54 m_Plant = NULL;
55 Init( base_fertility );
56 }
57
58 void ~Slot()
59 {
60 if (m_Plant && GetGame()) // GetGame() returns NULL when the game is being quit!
61 {
62 GetGame().ObjectDelete( GetPlant() );
63 }
64 }
65
66 int GetSlotIndex()
67 {
68 return m_slotIndex;
69 }
70
71 void SetSlotIndex(int index)
72 {
73 m_slotIndex = index;
74 }
75
76 int GetSlotId()
77 {
78 return m_slotId;
79 }
80
81 void SetSlotId(int id)
82 {
83 m_slotId = id;
84 }
85
86 void SetGarden(GardenBase garden)
87 {
88 m_Garden = garden;
89 }
90
91 GardenBase GetGarden()
92 {
93 return m_Garden;
94 }
95
96 void SetSeed(ItemBase seed)
97 {
98 m_Seed = seed;
99 }
100
101 PlantBase GetPlant()
102 {
103 return m_Plant;
104 }
105
106 void SetPlant(PlantBase plant)
107 {
108 m_Plant = plant;
109
110 if (plant)
111 {
112 plant.SetSlot(this);
113 plant.SetGarden(m_Garden);
114 }
115 }
116
117 //Used to force water level an go around sync issues
118 void SetWater( int val )
119 {
120 val = Math.Clamp( val, 0, m_WaterMax );
121 m_WaterQuantity = val;
122 }
123
124 ItemBase GetSeed()
125 {
126 return m_Seed;
127 }
128
129 bool HasSeed()
130 {
131 if (m_Seed)
132 return true;
133
134 return false;
135 }
136
137 void GiveWater( float consumed_quantity )
138 {
139 m_WaterQuantity = Math.Clamp(m_WaterQuantity + consumed_quantity, 0.0, GetWaterMax());
140 m_Garden.SetWaterQuantity(GetSlotIndex(), m_WaterQuantity);
141
142 bool needsWater = NeedsWater();
143 if (m_WateredState == eWateredState.DRY && !needsWater)
144 {
145 SetWateredState(eWateredState.WET);
146 m_Garden.SlotWaterStateUpdate(this);
147 }
149 else if (m_WateredState == eWateredState.WET && needsWater)
150 {
151 SetWateredState(eWateredState.DRY);
152 m_Garden.SlotWaterStateUpdate(this);
153 }
154
155 if (!g_Game.IsServer())
156 return;
157
158 if (!GetPlant() && GetSeed() && !NeedsWater()) // if there is no seed then do not create plant. Plant will be created when the seed is inserted into watered slot.
159 GetGarden().CreatePlant(this);
160 }
161
162 bool NeedsWater()
163 {
164 if ( m_WaterQuantity < GetWaterUsage() )
165 {
166 return true;
167 }
168 else
169 {
170 return false;
171 }
172 }
173
174 bool CanBeWatered()
175 {
176 if ( m_WaterQuantity < GetWaterMax() )
177 {
178 return true;
179 }
180 else
181 {
182 return false;
183 }
184 }
185
186 float GetWater()
187 {
188 return m_WaterQuantity;
189 }
190
191 float GetFertility()
192 {
193 return m_Fertility;
194 }
195
196 float GetFertilityMax()
197 {
198 return m_FertilizerUsage;
199 }
200
201 void SetFertility(float fertility)
202 {
203 m_Fertility = fertility;
204 }
205
206 float GetFertilizerQuantity()
207 {
208 return m_FertilizerQuantity;
209 }
210
211 void SetFertilizerQuantity(float fertility)
212 {
213 m_FertilizerQuantity = fertility;
214 m_Garden.SetFertilizerQuantity(GetSlotIndex(), Math.Ceil(m_FertilizerQuantity));
215
216 if (m_FertilizerQuantityMax != 0 && m_FertilizerQuantity >= m_FertilizerQuantityMax)
217 {
218 SetFertilityState(eFertlityState.FERTILIZED);
219 m_Garden.SlotFertilityStateUpdate(this);
220 }
221 }
222
223 float GetFertilizerQuantityMax()
224 {
225 return m_FertilizerQuantityMax;
226 }
227
228 void SetFertilizerQuantityMax(float quantMax)
229 {
230 m_FertilizerQuantityMax = quantMax;
231 }
232
233 string GetFertilityType()
234 {
235 return m_FertilizerType;
236 }
237
238 void SetFertilityType(string type)
239 {
240 m_FertilizerType = type;
241 }
242
243 int GetFertilityState()
244 {
245 return m_FertilityState;
246 }
247
248 void SetFertilityState(int newState)
249 {
250 if (m_FertilityState == newState)
251 return;
252
253 m_FertilityState = newState;
254 m_Garden.SlotFertilityStateUpdate(this);
255 }
256
257 int GetWateredState()
258 {
259 return m_WateredState;
260 }
261
262 void SetWateredState(int newState)
263 {
264 if (m_WateredState == newState)
265 return;
266
267 m_WateredState = newState;
268 if (m_WateredState == eWateredState.WET)
269 {
270 SetWater(GetWaterMax());
271 }
272 else if (m_WateredState == eWateredState.DRY)
273 {
274 SetWater(0);
275 }
276
277 m_Garden.SlotWaterStateUpdate(this);
278 }
279
280 float GetWaterUsage()
281 {
282 return m_WaterNeeded;
283 }
284
285 float GetWaterMax()
286 {
287 return m_WaterMax;
288 }
289
290 int GetState()
291 {
292 return m_State;
293 }
294
295 void SetState(int new_state)
296 {
297 m_State = new_state;
298 m_Garden.SetSlotState(GetSlotIndex(), new_state);
299 }
300
301 bool IsDigged()
302 {
303 if (m_State == eGardenSlotState.STATE_DIGGED)
304 {
305 return true;
306 }
307
308 return false;
309 }
310
311 bool IsPlanted()
312 {
313 if (m_State == eGardenSlotState.STATE_PLANTED)
314 {
315 return true;
316 }
317
318 return false;
319 }
320
321 void Init( float base_fertility )
322 {
323 m_Fertility = base_fertility;
324 m_FertilizerUsage = FERTILIZER_USAGE;
325 m_FertilizerQuantity = 0.0;
326 m_FertilizerType = "";
327 m_FertilityState = eFertlityState.NONE;
328 m_WateredState = eWateredState.DRY;
329 m_WaterQuantity = 0.0;
330 m_HarvestingEfficiency = 1.0;
331 m_State = eGardenSlotState.STATE_DIGGED;
332 m_Plant = NULL;
333 }
334
335 void SetSlotComponent(string component)
336 {
337 m_DiggedSlotComponent = component;
338 }
339
340 string GetSlotComponent()
341 {
342 return m_DiggedSlotComponent;
343 }
344
345 bool OnStoreLoadCustom( ParamsReadContext ctx, int version )
346 {
347 if ( version < 102 )
348 {
349 ctx.Read( m_Fertility );
350 ctx.Read( m_FertilizerUsage );
351 ctx.Read( m_FertilizerQuantity );
352
353 if ( !ctx.Read( m_FertilizerType ) )
354 m_FertilizerType = "";
355
356 ctx.Read( m_HarvestingEfficiency );
357 ctx.Read( m_State );
358 }
359
360 if ( version >= 102 )
361 {
362 if(!ctx.Read( m_Fertility ))
363 return false;
364
365 if(!ctx.Read( m_FertilizerUsage ))
366 return false;
367
368 if(!ctx.Read( m_FertilizerQuantity ))
369 return false;
370
371 if(!ctx.Read( m_HarvestingEfficiency ))
372 return false;
373
374 if(!ctx.Read( m_State ))
375 return false;
376
377 if (!ctx.Read( m_FertilizerType ))
378 {
379 m_FertilizerType = "";
380 }
381 }
382
383 if (version >= 142)
384 {
385 int wateredState;
386 if(!ctx.Read( wateredState ))
387 {
388 return false;
389 }
390 else
391 {
392 SetWateredState(wateredState);
393 }
394 }
395
396 return true;
397 }
398
400 {
401 ctx.Write( m_Fertility );
402 ctx.Write( m_FertilizerUsage );
403 ctx.Write( m_FertilizerQuantity );
404 ctx.Write( m_HarvestingEfficiency );
405 ctx.Write( m_State );
406 ctx.Write( m_FertilizerType );
407 ctx.Write( m_WateredState );
408 }
409}
@ WET
Определения 3_Game/Entities/EntityAI.c:5
@ DRY
Определения 3_Game/Entities/EntityAI.c:3
DayZGame g_Game
Определения DayZGame.c:3868
override Widget Init()
Определения DayZGame.c:127
class GP5GasMask extends MaskBase ItemBase
class BoxCollidingParams component
ComponentInfo for BoxCollidingResult.
enum EObjectTemperatureState m_State
bool NeedsWater()
Определения PlantBase.c:620
void SetGarden(GardenBase gardenBase)
Определения PlantBase.c:661
void OnStoreSaveCustom(ParamsWriteContext ctx)
Определения PlantBase.c:332
GardenBase GetGarden()
Определения PlantBase.c:666
float GetWaterMax()
Определения PlantBase.c:612
void PlantBase()
Определения PlantBase.c:54
float GetWater()
Определения PlantBase.c:604
bool OnStoreLoadCustom(ParamsReadContext ctx, int version)
Определения PlantBase.c:225
eFertlityState
Определения Slot.c:2
@ FERTILIZED
Определения Slot.c:4
void SetState(bool state)
Определения StaminaHandler.c:32
proto native void ObjectDelete(Object obj)
proto bool Write(void value_out)
proto bool Read(void value_in)
Serializer ParamsReadContext
Определения gameplay.c:15
proto native CGame GetGame()
Serializer ParamsWriteContext
Определения gameplay.c:16
@ NONE
No flags.
Определения EnProfiler.c:11
proto native int GetState()
returns one of STATE_...
Определения StaminaHandler.c:31