Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
pluginconfighandler.c
Go to the documentation of this file.
2{
3 ref array<ref CfgParam> m_CfgParams;
4
6 {
7 m_CfgParams = new array<ref CfgParam>;
8
9 LoadConfigFile();
10 }
11
12 override void OnInit()
13 {
14 super.OnInit();
15 }
16
17 override string GetFileName()
18 {
20 }
21
22 void LoadConfigFile()
23 {
24 LoadFile();
25
26 m_CfgParams.Clear();
27
28 for ( int j = 0; j < m_FileContent.Count(); j++ )
29 {
30 m_CfgParams.Insert( ParseText(m_FileContent.Get(j)) );
31 }
32 }
33
34 void SaveConfigToFile()
35 {
36 ClearFileNoSave();
37
38 for ( int i = 0; i < m_CfgParams.Count(); ++i )
39 {
40 string s = ParseParam(m_CfgParams.Get(i));
41
42 m_FileContent.Insert(s);
43 }
44
45 SaveFile();
46 }
47
48 CfgParam GetParamByName(string name, int cfg_type)
49 {
50 CfgParam param;
51
52 for ( int i = 0; i < m_CfgParams.Count(); ++i )
53 {
54 param = m_CfgParams.Get(i);
55
56 if ( param.GetName() == name )
57 {
58 return param;
59 }
60 }
61
62 // cfg_type == -1 returns NULL
63 param = CfgParam.CreateParam(name, cfg_type);
64 m_CfgParams.Insert(param);
65 return param;
66 }
67
68 array<ref CfgParam> GetAllParams()
69 {
70 return m_CfgParams;
71 }
72
73 void ClearParams()
74 {
75 m_CfgParams.Clear();
76 }
77
78 void RemoveParamByName( string name )
79 {
80 for ( int i = 0; i < m_CfgParams.Count(); ++i )
81 {
82 CfgParam param = m_CfgParams.Get(i);
83
84 if ( param.GetName() == name )
85 {
86 m_CfgParams.Remove( i );
87 return;
88 }
89 }
90 }
91
92 void RenameParam( string name, string new_name )
93 {
94 for ( int i = 0; i < m_CfgParams.Count(); ++i )
95 {
96 CfgParam param = m_CfgParams.Get(i);
97
98 if ( param.GetName() == name )
99 {
100 param.SetName( new_name );
101 return;
102 }
103 }
104 }
105
106 bool ParamExist(string name)
107 {
108 CfgParam param;
109
110 for ( int i = 0; i < m_CfgParams.Count(); ++i )
111 {
112 param = m_CfgParams.Get(i);
113
114 if ( param.GetName() == name )
115 {
116 return true;
117 }
118 }
119
120 return false;
121 }
122
123 string ParseParam(CfgParam param)
124 {
125 string text = STRING_EMPTY;
126
127 if ( param.GetName() != STRING_EMPTY )
128 {
129 text += param.GetName()+"=";
130 }
131
132 switch ( param.GetType() )
133 {
134 case CFG_TYPE_ARRAY:
135 {
136 CfgParamArray param_array = CfgParamArray.Cast( param );
137 array<ref CfgParam> params = param_array.GetValues();
138
139 text += "{";
140
141 for ( int i = 0; i < params.Count(); ++i )
142 {
143 if ( i > 0 )
144 {
145 text += ",";
146 }
147
148 text += ParseParam(params.Get(i));
149 }
150
151 text += "}";
152
153 break;
154 }
155 case CFG_TYPE_STRING:
156 {
157 CfgParamString param_string = CfgParamString.Cast( param );
158 text += "\""+param_string.GetValue()+"\"";
159
160 break;
161 }
162 case CFG_TYPE_INT:
163 {
164 CfgParamInt param_int = CfgParamInt.Cast( param );
165 text += param_int.GetValue().ToString();
166
167 break;
168 }
169 case CFG_TYPE_FLOAT:
170 {
171 CfgParamFloat param_float = CfgParamFloat.Cast( param );
172 string s = param_float.GetValue().ToString();
173
174 if ( s.IndexOf(".") == -1 )
175 {
176 s += ".0";
177 }
178
179 text += s;
180
181 break;
182 }
183 case CFG_TYPE_BOOL:
184 {
185 CfgParamBool param_bool = CfgParamBool.Cast( param );
186
187 if ( param_bool.GetValue() )
188 {
189 text += "true";
190 }
191 else
192 {
193 text += "false";
194 }
195
196 break;
197 }
198 }
199
200 return text;
201 }
202
203 CfgParam ParseText(string text)
204 {
205 string param_name = STRING_EMPTY;
206 string param_value = text.Trim();;
207 int text_type = GetTextType(param_value);
208
209 //Log("ParseText -> text_type: "+itoa(text_type));
210
211 if ( text_type == CFG_TYPE_PARAM )
212 {
213 int pos = param_value.IndexOf("=");
214
215 if ( pos > 0 )
216 {
217 param_name = param_value.Substring(0, pos).Trim();
218 int pos_end = param_value.Length() - pos;
219 param_value = param_value.Substring(pos + 1, pos_end - 1).Trim();
220
221 //Log("ParseText -> param -> "+param_name+" = "+param_value);
222
223 CfgParam param = ParseText(param_value);
224 param.SetName(param_name);
225
226 return param;
227 }
228 }
229 else if ( text_type == CFG_TYPE_ARRAY )
230 {
231 //Log("ParseText -> array -> "+param_name+" = "+param_value);
232
233 CfgParamArray param_array = new CfgParamArray(param_name);
234 array<ref CfgParam> array_params = ParseToValueArray(param_value);
235 param_array.SetParams(array_params);
236
237 return param_array;
238 }
239 else if ( text_type == CFG_TYPE_STRING )
240 {
241 //Log("ParseText -> string -> "+param_value);
242
243 CfgParamString param_string = new CfgParamString(param_name);
244 param_string.SetValue( ParseToValueString(param_value) );
245
246 return param_string;
247 }
248 else if ( text_type == CFG_TYPE_INT )
249 {
250 //Log("ParseText -> int -> "+param_name+" = "+param_value);
251
252 CfgParamInt param_int = new CfgParamInt(param_name);
253 param_int.SetValue( ParseToValueInt(param_value) );
254
255 return param_int;
256 }
257 else if ( text_type == CFG_TYPE_FLOAT )
258 {
259 //Log("ParseText -> float -> "+param_name+" = "+param_value);
260
261 CfgParamFloat param_float = new CfgParamFloat(param_name);
262 param_float.SetValue( ParseToValueFloat(param_value) );
263
264 return param_float;
265 }
266 else if ( text_type == CFG_TYPE_BOOL )
267 {
268 //Log("ParseText -> bool -> "+param_name+" = "+param_value);
269
270 CfgParamBool param_bool = new CfgParamBool(param_name);
271 param_bool.SetValue( ParseToValueBool(param_value) );
272
273 return param_bool;
274 }
275
276 //Log("ParseText -> none -> "+param_name+" = "+param_value);
277
278 return NULL;
279 }
280
281 protected int GetTextType(string text)
282 {
283 int lenght = text.Length();
284
285 // Check Array
286 int pos1 = text.IndexOf("{");
287 if ( pos1 == 0 && text.Substring(lenght - 1, 1) == "}" )
288 {
289 return CFG_TYPE_ARRAY;
290 }
291
292 // Check String
293 pos1 = text.IndexOf("\"");
294
295 if ( pos1 == 0 && text.Substring(lenght - 1, 1) == "\"" )
296 {
297 string string_text = text.Substring(1, lenght - 2);
298 if ( string_text.IndexOf("\"") == -1 )
299 {
300 return CFG_TYPE_STRING;
301 }
302 }
303
304 // Check Param
305 pos1 = text.IndexOf("=");
306 if ( pos1 > -1 )
307 {
308 return CFG_TYPE_PARAM;
309 }
310
311 // Check Param True
312 pos1 = text.IndexOf("true");
313 if ( lenght == 4 && pos1 > -1 )
314 {
315 return CFG_TYPE_BOOL;
316 }
317
318 // Check Param False
319 pos1 = text.IndexOf("false");
320 if ( lenght == 5 && pos1 > -1 )
321 {
322 return CFG_TYPE_BOOL;
323 }
324
325 // Check Param Float
326 pos1 = text.IndexOf(".");
327 if ( pos1 > -1 )
328 {
329 return CFG_TYPE_FLOAT;
330 }
331
332 // Is Int
333 return CFG_TYPE_INT;
334 }
335
336 protected bool IsString(string text)
337 {
338 if ( GetTextType(text) == CFG_TYPE_STRING )
339 {
340 return true;
341 }
342
343 return false;
344 }
345
346 protected bool IsParam(string text)
347 {
348 if ( GetTextType(text) == CFG_TYPE_PARAM )
349 {
350 return true;
351 }
352
353 return false;
354 }
355
356 protected bool IsArray(string text)
357 {
358 if ( GetTextType(text) == CFG_TYPE_ARRAY )
359 {
360 return true;
361 }
362
363 return false;
364 }
365
366 protected bool IsFloat(string text)
367 {
368 if ( GetTextType(text) == CFG_TYPE_FLOAT )
369 {
370 return true;
371 }
372
373 return false;
374 }
375
376 protected bool IsInt(string text)
377 {
378 if ( GetTextType(text) == CFG_TYPE_INT )
379 {
380 return true;
381 }
382
383 return false;
384 }
385
386 protected bool IsBool(string text)
387 {
388 if ( GetTextType(text) == CFG_TYPE_BOOL )
389 {
390 return true;
391 }
392
393 return false;
394 }
395
396 protected string ParseToValueString(string param_value)
397 {
398 return param_value.Substring(1, param_value.Length() - 2);
399 }
400
401 protected float ParseToValueFloat(string param_value)
402 {
403 return param_value.ToFloat();
404 }
405
406 protected int ParseToValueInt(string param_value)
407 {
408 return param_value.ToInt();
409 }
410
411 protected bool ParseToValueBool(string param_value)
412 {
413 if ( param_value.Contains("true") )
414 {
415 return true;
416 }
417
418 return false;
419 }
420
421 protected array<ref CfgParam> ParseToValueArray(string param_value)
422 {
423 array<ref CfgParam> param_parent = new array<ref CfgParam>;
424
425 TStringArray strings = new TStringArray;
426
427 array<int> a = new array<int>;
428 array<int> b = new array<int>;
429
430 int pos_a = 0;
431 int pos_b = 0;
432 int element = 0;
433 int value_start = 0;
434 int value_end = 0;
435
436 while ( pos_a > -1 || pos_b > -1 )
437 {
438 pos_a = param_value.IndexOfFrom(pos_a, "{" );
439 if ( pos_a > -1 )
440 {
441 a.Insert(pos_a);
442 pos_a++;
443 }
444
445 pos_b = param_value.IndexOfFrom(pos_b, "}" );
446 if ( pos_b > -1 )
447 {
448 b.Insert(pos_b);
449 pos_b++;
450 }
451 }
452
453 pos_a = 0;
454 pos_b = 0;
455
456 for ( pos_a = 0; pos_a < a.Count(); ++pos_a )
457 {
458 if ( a.Get(pos_a) > b.Get(pos_b) )
459 {
460 element--;
461
462 if ( element <= 1 )
463 {
464 value_end = b.Get(pos_b) - value_start + 1;
465
466 //Log("1 -> "+substr(param_value, value_start, value_end))
467
468 strings.Insert( param_value.Substring(value_start, value_end) );
469
470 value_start = b.Get(pos_b) + 1;
471 }
472
473 pos_a--;
474 pos_b++;
475 }
476 else if ( a.Get(pos_a) < b.Get(pos_b) )
477 {
478 if ( pos_a == a.Count() - 1 && pos_b < b.Count() - 1 )
479 {
480 element--;
481
482 if ( element == 0 )
483 {
484 value_end = b.Get(pos_b) - value_start;
485
486 //Log("2 -> "+substr(param_value, value_start + 1, value_end))
487
488 strings.Insert( param_value.Substring(value_start + 1, value_end) );
489
490 value_start = b.Get(pos_b) + 1;
491 }
492
493 pos_a--;
494 pos_b++;
495 }
496 else
497 {
498 element++;
499
500 if ( element == 2 )
501 {
502 value_start = a.Get(pos_a);
503 }
504 }
505 }
506 }
507
508 //Log(param_value+" => "+itoa(a.Count())+" / "+itoa(b.Count())+" count: "+itoa(strings.Count()));
509
510 if ( strings.Count() == 0 )
511 {
512 //Log(param_value+" -> ZERO {}");
513
514 string param_value_content = param_value.Substring(1, param_value.Length() - 2);
515
516 //Log(param_value+" -> Trimmed -> "+param_value_content);
517
518 param_value_content.Split(",", strings);
519 }
520
521 for ( int i = 0; i < strings.Count(); ++i )
522 {
523 string str = strings.Get(i);
524
525 //Log("To Parse => "+str);
526
527 CfgParam param = ParseText(str);
528
529 param_parent.Insert(param);
530 }
531
532 return param_parent;
533 }
534}
const int CFG_TYPE_BOOL
Definition cfgparam.c:4
const int CFG_TYPE_ARRAY
Definition cfgparam.c:5
const int CFG_TYPE_PARAM
Definition cfgparam.c:6
const int CFG_TYPE_INT
Definition cfgparam.c:2
const int CFG_TYPE_STRING
Definition cfgparam.c:1
const int CFG_TYPE_FLOAT
Definition cfgparam.c:3
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
string GetName()
Definition cfgparam.c:23
static CfgParam CreateParam(string name, int cfg_type)
Definition cfgparam.c:38
void SetName(string param_name)
Definition cfgparam.c:18
int GetType()
Definition cfgparam.c:28
int GetTextType(string text)
bool IsParam(string text)
float ParseToValueFloat(string param_value)
string ParseToValueString(string param_value)
int ParseToValueInt(string param_value)
bool IsBool(string text)
bool IsInt(string text)
bool IsString(string text)
bool IsFloat(string text)
bool IsArray(string text)
array< ref CfgParam > ParseToValueArray(string param_value)
bool ParseToValueBool(string param_value)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const string CFG_FILE_USER_PROFILE
Definition constants.c:241
array< string > TStringArray
Definition enscript.c:709
const string STRING_EMPTY
Definition constants.c:54