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