Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
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  {
19  return CFG_FILE_USER_PROFILE;
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 }
STRING_EMPTY
const string STRING_EMPTY
Definition: constants.c:54
PluginFileHandler
Definition: pluginconfighandler.c:1
TStringArray
array< string > TStringArray
Definition: enscript.c:685
CfgParam
Definition: cfgparam.c:8
CFG_TYPE_STRING
const int CFG_TYPE_STRING
Definition: cfgparam.c:1
CFG_TYPE_INT
const int CFG_TYPE_INT
Definition: cfgparam.c:2
CFG_TYPE_ARRAY
const int CFG_TYPE_ARRAY
Definition: cfgparam.c:5
PluginConfigHandler
Definition: pluginconfigdebugprofile.c:2
CFG_TYPE_FLOAT
const int CFG_TYPE_FLOAT
Definition: cfgparam.c:3
CFG_TYPE_PARAM
const int CFG_TYPE_PARAM
Definition: cfgparam.c:6
array< ref CfgParam >
name
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
CFG_FILE_USER_PROFILE
const string CFG_FILE_USER_PROFILE
Definition: constants.c:230
CFG_TYPE_BOOL
const int CFG_TYPE_BOOL
Definition: cfgparam.c:4