DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
PluginConfigHandler.c
См. документацию.
2{
4
11
12 override void OnInit()
13 {
14 super.OnInit();
15 }
16
17 override string GetFileName()
18 {
20 }
21
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
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
72
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
Определения CfgParam.c:4
const int CFG_TYPE_ARRAY
Определения CfgParam.c:5
const int CFG_TYPE_PARAM
Определения CfgParam.c:6
const int CFG_TYPE_INT
Определения CfgParam.c:2
const int CFG_TYPE_STRING
Определения CfgParam.c:1
const int CFG_TYPE_FLOAT
Определения CfgParam.c:3
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
string GetName()
Определения CfgParam.c:23
static CfgParam CreateParam(string name, int cfg_type)
Определения CfgParam.c:38
void SetName(string param_name)
Определения CfgParam.c:18
int GetType()
Определения CfgParam.c:28
Определения CfgParam.c:9
void SaveConfigToFile()
Определения PluginConfigHandler.c:34
string ParseParam(CfgParam param)
Определения PluginConfigHandler.c:123
int GetTextType(string text)
Определения PluginConfigHandler.c:281
override string GetFileName()
Определения PluginConfigHandler.c:17
ref array< ref CfgParam > m_CfgParams
Определения PluginConfigHandler.c:3
void LoadConfigFile()
Определения PluginConfigHandler.c:22
override void OnInit()
Определения PluginConfigHandler.c:12
bool IsParam(string text)
Определения PluginConfigHandler.c:346
void ClearParams()
Определения PluginConfigHandler.c:73
CfgParam ParseText(string text)
Определения PluginConfigHandler.c:203
array< ref CfgParam > GetAllParams()
Определения PluginConfigHandler.c:68
void RenameParam(string name, string new_name)
Определения PluginConfigHandler.c:92
float ParseToValueFloat(string param_value)
Определения PluginConfigHandler.c:401
string ParseToValueString(string param_value)
Определения PluginConfigHandler.c:396
int ParseToValueInt(string param_value)
Определения PluginConfigHandler.c:406
void RemoveParamByName(string name)
Определения PluginConfigHandler.c:78
bool IsBool(string text)
Определения PluginConfigHandler.c:386
void PluginConfigHandler()
Определения PluginConfigHandler.c:5
bool IsInt(string text)
Определения PluginConfigHandler.c:376
bool ParamExist(string name)
Определения PluginConfigHandler.c:106
bool IsString(string text)
Определения PluginConfigHandler.c:336
bool IsFloat(string text)
Определения PluginConfigHandler.c:366
CfgParam GetParamByName(string name, int cfg_type)
Определения PluginConfigHandler.c:48
bool IsArray(string text)
Определения PluginConfigHandler.c:356
array< ref CfgParam > ParseToValueArray(string param_value)
Определения PluginConfigHandler.c:421
bool ParseToValueBool(string param_value)
Определения PluginConfigHandler.c:411
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
const string CFG_FILE_USER_PROFILE
Определения constants.c:241
array< string > TStringArray
Определения EnScript.c:685
const string STRING_EMPTY
Определения constants.c:54
proto native int Length()
Returns length of string.
proto string Trim()
Returns trimmed string with removed leading and trailing whitespaces.
static proto string ToString(void var, bool type=false, bool name=false, bool quotes=true)
Return string representation of variable.
proto native int ToInt()
Converts string to integer.
bool Contains(string sample)
Returns true if sample is substring of string.
Определения EnString.c:286
proto native float ToFloat()
Converts string to float.
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
proto string Substring(int start, int len)
Substring of 'str' from 'start' position 'len' number of characters.
proto native int IndexOfFrom(int start, string sample)
Finds 'sample' in 'str' from 'start' position. Returns -1 when not found.
proto native int IndexOf(string sample)
Finds 'sample' in 'str'. Returns -1 when not found.