Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
pluginlocalprofile.c
Go to the documentation of this file.
2 {
3  ref map<string, string> m_ConfigParams;
4  ref map<string, ref TStringArray> m_ConfigParamsArray;
5  ref map<string, ref map<string, string>> m_ConfigParamsInArray;
6  ref map<string, ref array<ref map<string, string>>> m_ConfigParamsArrayInArray;
7 
8  void PluginLocalProfile()
9  {
10  m_ConfigParams = new map<string, string>;
11  m_ConfigParamsArray = new map<string, ref TStringArray>;
12  m_ConfigParamsInArray = new map<string, ref map<string, string>>;
13  m_ConfigParamsArrayInArray = new map<string, ref array<ref map<string, string>>>;
14  }
15 
16  override string GetFileName()
17  {
18  return CFG_FILE_USER_PROFILE;
19  }
20 
21  override void OnInit()
22  {
23  super.OnInit();
24 
25  LoadConfigFile();
26  }
27 
28  bool LoadConfigFile()
29  {
30  TStringArray file_content = GetFileContent();
31 
32  string line_content = "";
33  string param_name = "";
34  string param_value = "";
35  TStringArray param_content;
36  int pos_sep = -1;
37 
38  for ( int i = 0; i < file_content.Count(); ++i )
39  {
40  line_content = file_content.Get(i);
41 
42  param_content = ParseTextToParameter(line_content);
43 
44  if ( param_content.Count() == 0 )
45  {
46  PrintString(GetFileName()+"("+i.ToString()+"): Error in config -> Maybe missing '=' !");
47  return false;
48  }
49 
50  param_name = param_content.Get(0);
51  param_value = param_content.Get(1);
52 
53  //{{name = apple, damage = 0.5, quantity = 2},{name = banana, damage = 0.5, quantity = 2}}
54 
55  TStringArray array_items = new TStringArray;
56  ParseTextToArray(param_value, array_items);
57  //{name = apple, damage = 0.5, quantity = 2}
58  //{name = banana, damage = 0.5, quantity = 2}
59 
60  TStringArray array_content_raw = new TStringArray;
61 
62  if ( array_items.Count() > 0 )
63  {
64  m_ConfigParamsArray.Set(param_name, array_items);
65 
66  for ( int j = 0; j < array_items.Count(); ++j )
67  {
68  string array_content = array_items.Get(j);
69  //{name = apple, damage = 0.5, quantity = 2}
70 
71  array_content_raw.Clear();
72 
73  ParseTextToArray(array_content, array_content_raw);
74  //name = apple
75  //damage = 0.5
76  //quantity = 2
77 
78  if ( array_content_raw.Count() > 0 )
79  {
80  if ( !m_ConfigParamsArrayInArray.Contains(param_name) )
81  {
82  m_ConfigParamsArrayInArray.Set(param_name, new array<ref map<string, string>>);
83  }
84 
85  array<ref map<string, string>> params_in_array = m_ConfigParamsArrayInArray.Get(param_name);
87 
88  for ( int k = 0; k < array_content_raw.Count(); ++k )
89  {
90  string params = array_content_raw.Get(k);
91  TStringArray p = ParseTextToParameter(params);
92 
93  if ( p.Count() == 2 )
94  {
95  parameters.Set(p.Get(0), p.Get(1));
96  }
97  }
98 
99  params_in_array.Insert(parameters);
100  }
101  }
102  }
103  else
104  {
105  m_ConfigParams.Set(param_name, param_value);
106  }
107  }
108 
109  return true;
110  }
111 
112  void SaveConfigToFile()
113  {
114  ClearFileNoSave();
115 
116  int i;
117  int j;
118  int k;
119 
120  string variable_name;
121  string variable_value;
122  string text;
123  TStringArray variable_array;
124 
125  for ( i = 0; i < m_ConfigParams.Count(); ++i)
126  {
127  variable_name = m_ConfigParams.GetKey(i);
128  variable_value = m_ConfigParams.GetElement(i);
129 
130  text = variable_name + " = " + variable_value;
131 
132  AddNewLineNoSave(text);
133  }
134 
135  for ( i = 0; i < m_ConfigParamsArray.Count(); ++i)
136  {
137  variable_name = m_ConfigParamsArray.GetKey(i);
138  variable_array = m_ConfigParamsArray.GetElement(i);
139 
140  if ( m_ConfigParamsArrayInArray.Contains(variable_name) )
141  {
142  continue;
143  }
144 
145  text = variable_name + " = {";
146 
147  for ( j = 0; j < variable_array.Count(); ++j )
148  {
149  if ( j > 0 )
150  {
151  text += ",";
152  }
153 
154  text += variable_array.Get(j);
155  }
156 
157  text += "}";
158 
159  AddNewLineNoSave(text);
160  }
161 
162  for ( i = 0; i < m_ConfigParamsArrayInArray.Count(); ++i)
163  {
164  variable_name = m_ConfigParamsArrayInArray.GetKey(i);
165  array<ref map<string, string>> variable_param = m_ConfigParamsArrayInArray.GetElement(i);
166 
167  text = variable_name + " = {";
168 
169  if ( variable_param != NULL )
170  {
171  for ( j = 0; j < variable_param.Count(); ++j )
172  {
173  if ( j > 0 )
174  {
175  text += ",";
176  }
177  text += "{";
178 
179  map<string, string> params = variable_param.Get(j);
180  for ( k = 0; k < params.Count(); ++k )
181  {
182  if ( k > 0 )
183  {
184  text += ",";
185  }
186 
187  string param_name = params.GetKey(k);
188  string param_value = params.GetElement(k);
189 
190  text += param_name+"="+param_value;
191  }
192 
193  text += "}";
194  }
195  }
196 
197  text += "}";
198 
199  AddNewLineNoSave(text);
200  }
201 
202  SaveFile();
203  }
204 
205  bool IsTextArray(string text)
206  {
207  if ( text.Length() > 0 && text.Substring(0, 1) == "{" )
208  {
209  if ( text.Substring(text.Length() - 1, 1) == "}" )
210  {
211  return true;
212  }
213  }
214 
215  return false;
216  }
217 
218  TStringArray ParseTextToParameter(string text)
219  {
220  TStringArray ret = new TStringArray;
221 
222  int pos = text.IndexOf("=");
223 
224  if ( pos > 0 )
225  {
226  string param_name = text.Substring(0, pos).Trim();
227  int pos_end = text.Length() - pos;
228  string param_value = text.Substring(pos + 1, pos_end - 1).Trim();
229 
230  int lenght = param_value.Length();
231  if (lenght > 1 && param_value.Substring(0, 1) == "\"" && param_value.Substring(lenght - 1, 1) == "\"" )
232  {
233  param_value = param_value.Substring(1, lenght - 2);
234  }
235 
236  ret.Insert(param_name);
237  ret.Insert(param_value);
238  }
239 
240  return ret;
241  }
242 
243  TStringArray ParseTextToArray(string text, out TStringArray ret)
244  {
245  if ( !IsTextArray(text) )
246  {
247  return NULL;
248  }
249 
250  text = text.Substring(1, text.Length() - 2);
251 
252  int pos_array_start = text.IndexOf("{");
253  int pos_array_end = text.IndexOf("}");
254 
255  if ( pos_array_start > -1 && pos_array_end > -1 )
256  {
257  while ( true )
258  {
259  string array_value = text.Substring(pos_array_start , pos_array_end - pos_array_start + 1 );
260  ret.Insert(array_value);
261 
262  pos_array_start = text.IndexOfFrom(pos_array_end, "{");
263  pos_array_end = text.IndexOfFrom(pos_array_start, "}");
264 
265  if ( pos_array_start == -1 )
266  {
267  break;
268  }
269  }
270  }
271  else
272  {
273  text.Split(",", ret);
274  }
275 
276  return ret;
277  }
278 
279  array<ref map<string, string>> ParseTextArrayToParameters(string text)
280  {
281  TStringArray array_items = new TStringArray;
282  ParseTextToArray(text, array_items);
283 
285 
287 
288  for ( int i = 0; i < array_items.Count(); ++i )
289  {
290  string param = array_items.Get(i);
291  TStringArray t_param = ParseTextToParameter(param);
292 
293  string param_name = t_param.Get(0);
294  string param_value = t_param.Get(1);
295 
296  ret_param.Set(param_name, param_value);
297  }
298 
299  ret.Insert(ret_param);
300 
301  return ret;
302  }
303 
304  string LoadParameter(string param_name)
305  {
306  string ret_value = STRING_EMPTY;
307 
308  if ( m_ConfigParams.Contains(param_name) )
309  {
310  ret_value = m_ConfigParams.Get(param_name);
311  }
312 
313  return ret_value;
314  }
315 
316  TStringArray LoadParameterArray(string param_name)
317  {
318  if ( m_ConfigParamsArray.Contains(param_name) )
319  {
320  return m_ConfigParamsArray.Get(param_name);
321  }
322 
323  return NULL;
324  }
325 
326  string LoadSubParameter(string param_name, int sub_array_index, string sub_param_name)
327  {
328  string ret_value = STRING_EMPTY;
329  map<string, string> param;
330  array<ref map<string, string>> sub_arrays;
331 
332  if ( m_ConfigParamsArrayInArray.Contains(param_name) )
333  {
334  sub_arrays = m_ConfigParamsArrayInArray.Get(param_name);
335 
336  if ( sub_arrays != NULL )
337  {
338  if ( sub_array_index < sub_arrays.Count() )
339  {
340  param = sub_arrays.Get(sub_array_index);
341 
342  if ( param.Contains(sub_param_name) )
343  {
344  ret_value = param.Get(sub_param_name);
345  }
346  }
347  }
348  }
349 
350  return ret_value;
351  }
352 
353  void SaveParameter(string param_name, string value, bool save_in_file = true)
354  {
355  if ( param_name == "" || param_name == "scene_editor_scene" )
356  {
357  Log("SaveParameter: "+param_name+" = "+value, "");
358  }
359 
360  m_ConfigParams.Set(param_name, value);
361 
362  if ( save_in_file )
363  {
364  SaveConfigToFile();
365  }
366  }
367 
368  void SaveParameterArray(string param_name, TStringArray value, bool save_in_file = true)
369  {
370  m_ConfigParamsArray.Set(param_name, value);
371 
372  if ( save_in_file )
373  {
374  SaveConfigToFile();
375  }
376  }
377 
378  void SaveSubParameterInArray(string param_name, int sub_array_index, string sub_param_name, string sub_param_value, bool save_in_file = true)
379  {
380  array<ref map<string, string>> sub_arrays = m_ConfigParamsArrayInArray.Get(param_name);
381  map<string, string> sub_parameter = sub_arrays.Get(sub_array_index);
382  sub_parameter.Set(sub_param_name, sub_param_value);
383 
384  if ( save_in_file )
385  {
386  SaveConfigToFile();
387  }
388  }
389 
390  void RenameParameter(string old_name, string new_name, bool save_in_file = true)
391  {
392  if ( m_ConfigParams.Contains(old_name) )
393  {
394  m_ConfigParams.ReplaceKey(old_name, new_name);
395 
396  if ( save_in_file )
397  {
398  SaveConfigToFile();
399  }
400  }
401  }
402 
403  void RenameParameterArray(string old_name, string new_name, bool save_in_file = true)
404  {
405  if ( m_ConfigParamsArray.Contains(old_name) )
406  {
407  m_ConfigParamsArray.ReplaceKey(old_name, new_name);
408 
409  if ( save_in_file )
410  {
411  SaveConfigToFile();
412  }
413  }
414  }
415 
416  void RemoveParameter(string name, bool save_in_file = true)
417  {
418  m_ConfigParams.Remove(name);
419 
420  if ( save_in_file )
421  {
422  SaveConfigToFile();
423  }
424  }
425 
426  void RemoveParameterArray(string name, bool save_in_file = true)
427  {
428  m_ConfigParamsArray.Remove(name);
429 
430  if ( save_in_file )
431  {
432  SaveConfigToFile();
433  }
434  }
435 
436  void SetParameterString(string name, string value, bool save_in_file = true)
437  {
438  string s = "\""+value+"\"";
439  SaveParameter(name, s, save_in_file);
440  }
441 
442  void SetParameterInt(string name, int value, bool save_in_file = true)
443  {
444  SaveParameter(name, value.ToString(), save_in_file);
445  }
446 
447  void SetParameterFloat(string name, float value, bool save_in_file = true)
448  {
449  SaveParameter(name, value.ToString(), save_in_file);
450  }
451 
452  void SetParameterBool(string name, bool value, bool save_in_file = true)
453  {
454  SaveParameter(name, value.ToString(), save_in_file);
455  }
456 
457  void SetParameterArray(string name, TStringArray value, bool save_in_file = true)
458  {
459  SaveParameterArray(name, value, save_in_file);
460  }
461 
462  void SetSubParameterInArray(string param_name, int sub_array_index, string sub_param_name, string sub_param_value, bool save_in_file = true)
463  {
464  SaveSubParameterInArray(param_name, sub_array_index, sub_param_name, sub_param_value, save_in_file);
465  }
466 
467  string GetParameterString(string name)
468  {
469  string loaded_param = LoadParameter(name);
470  string ret_value = STRING_EMPTY;
471 
472  if ( loaded_param != "" )
473  {
474  TStringArray arr = new TStringArray;
475  loaded_param.Split("\"", arr);
476  if ( arr.Count() > 0 )
477  {
478  ret_value = arr.Get(0);
479  }
480  }
481  else
482  {
483  SetParameterString(name, ret_value);
484  }
485 
486  return ret_value;
487  }
488 
489  int GetParameterInt(string name)
490  {
491  string loaded_param = LoadParameter(name);
492  int ret_value = 0;
493 
494  if ( loaded_param != "" )
495  {
496  ret_value = loaded_param.ToInt();
497  }
498  else
499  {
500  SetParameterInt(name, ret_value);
501  }
502 
503  return ret_value;
504  }
505 
506  float GetParameterFloat(string name)
507  {
508  string loaded_param = LoadParameter(name);
509  float ret_value = 0;
510 
511  if ( loaded_param != "" )
512  {
513  ret_value = loaded_param.ToFloat();
514  }
515  else
516  {
517  SetParameterFloat(name, ret_value);
518  }
519 
520  return ret_value;
521  }
522 
523  bool GetParameterBool(string name)
524  {
525  string loaded_param = LoadParameter(name);
526  bool ret_value = false;
527 
528  if ( loaded_param != "" )
529  {
530  int v = loaded_param.ToInt();
531  if ( v == 1 )
532  {
533  ret_value = true;
534  }
535  }
536  else
537  {
538  SetParameterBool(name, ret_value);
539  }
540 
541  return ret_value;
542  }
543 
544  TStringArray GetParameterArray(string name)
545  {
546  TStringArray ret_value;
547 
548  if ( m_ConfigParamsArray.Contains(name) )
549  {
550  ret_value = m_ConfigParamsArray.Get(name);
551  }
552  else
553  {
554  ret_value = new TStringArray;
555  SetParameterArray(name, ret_value);
556  }
557 
558  return ret_value;
559  }
560 
561  string GetSubParameterInArrayString(string param_name, int sub_array_index, string sub_param_name)
562  {
563  string loaded_param = LoadSubParameter(param_name, sub_array_index, sub_param_name);
564  string ret_value = STRING_EMPTY;
565 
566  TStringArray arr = new TStringArray;
567 
568  if ( loaded_param != "" )
569  {
570  arr.Clear();
571  loaded_param.Split("\"", arr);
572  ret_value = arr.Get(1);
573  }
574 
575  return ret_value;
576  }
577 
578  TStringArray GetAllSubParametersInArrayString(string param_name, string sub_param_name)
579  {
580  TStringArray ret_value = NULL;
581 
582  if ( m_ConfigParamsArrayInArray.Contains(param_name) )
583  {
584  ret_value = new TStringArray;
585 
586  array<ref map<string, string>> arrays_in_parameter = m_ConfigParamsArrayInArray.Get(param_name);
587 
588  for ( int i = 0; i < arrays_in_parameter.Count(); ++i )
589  {
590  map<string, string> sub_parameter = arrays_in_parameter.Get(i);
591 
592  string sub_param = STRING_EMPTY;
593 
594  if ( sub_parameter.Contains(sub_param_name) )
595  {
596  sub_param = sub_parameter.Get(sub_param_name);
597  }
598 
599  ret_value.Insert(sub_param);
600  }
601  }
602 
603  return ret_value;
604  }
605 }
STRING_EMPTY
const string STRING_EMPTY
Definition: constants.c:54
PluginFileHandler
Definition: pluginconfighandler.c:1
TStringArray
array< string > TStringArray
Definition: enscript.c:685
PluginLocalProfile
Definition: pluginadditionalinfo.c:1
Log
class LogTemplates Log(string message, LogTemplateID template_id=0)
Creates debug log (optional) from LogTemplate which are registred.
Definition: logtemplates.c:75
map
map
Definition: controlsxboxnew.c:3
PrintString
void PrintString(string s)
Helper for printing out string expression. Example: PrintString("Hello " + var);.
Definition: enscript.c:345
array< string >
name
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
CFG_FILE_USER_PROFILE
const string CFG_FILE_USER_PROFILE
Definition: constants.c:230