static public bool Load(ListBox LB, ComboBox CB_Event, ComboBox CB_Item, ComboBox CB_Art, ref stcDopingEx[] ArrDoping, string FPath) { bool bRet = true; if (File.Exists(FPath)) { FileStream FS = new FileStream(FPath, FileMode.Open); clsDopingArray ArrTmpDoping = (clsDopingArray)XmlSerializer.Deserialize(FS); #region Совсем старая версия без версионизации? (Пересерелиазиция) if (ArrTmpDoping.Ver == 0) //Совсем старая версия без версионизации! { FS.Position = 0; //Прыгаем в начало стрима ArrTmpDoping.ArrDoping = (clsDoping[])(new System.Xml.Serialization.XmlSerializer(typeof(clsDoping[]), XmlRoot)).Deserialize(FS); } #endregion FS.Close(); #region Определение обрабатываемого к апгрэйду типа (тут, чтоб даже если апгрэйда не будет всё было правильно отображено) switch (FPath) { case "OilLenin.doping": CB_Art.SelectedIndex = 2; break; case "Rat.doping": CB_Art.SelectedIndex = 1; break; case "Usual.doping": CB_Art.SelectedIndex = 0; break; } #endregion #region Стираю прошлые допинги перед обновлением списка (обязательно после выбора типа допингов) LB.Items.Clear(); ArrDoping = null; #endregion if (ArrTmpDoping.ArrDoping != null) //Есть допинг? { #region Обновление версии допингов? if (ArrTmpDoping.Ver < Version) { bRet &= UpgradeDopingVer(CB_Event, CB_Item, CB_Art, FPath, ref ArrTmpDoping); } #endregion LB.Items.AddRange(ArrTmpDoping.ArrDoping); UpdateDopingArr(LB, ref ArrDoping); } } return(bRet); }
public static bool[] AlreadyEated = new bool[Enum.GetValues(typeof(DopingType)).Length + 1]; //Последний элемент показывает все ли допинги из списка были сьедены. static private bool UpgradeDopingVer(ComboBox CB_Event, ComboBox CB_Item, ComboBox CB_Art, string FPath, ref clsDopingArray Arr) { bool bRet = true; int EventOffset = 0; int TypeOffset = 0; #region Определения типа обрабатываемого допинга и оффсэты switch (FPath) { case "OilLenin.doping": break; case "Rat.doping": TypeOffset = 2; //Оффсэт на синхронизазию крыс и партбилеты break; case "Usual.doping": EventOffset = 1; //Оффсэт на нападать при уровне. TypeOffset = 2; //Оффсэт на синхронизазию крыс и партбилеты break; } #endregion #region Апгрэйд списка допингов Regex regex = new Regex("(?<=. )([^:])+(?(?=[:] [0-9]):|.+)"); foreach (clsDoping Doping in Arr.ArrDoping) { switch (Doping.Grp) { case 1: //Event // Match match = Regex.Match(Doping.Text, "(?<=. )([^:])+(?(?=[:] [0-9]):|.+)"); Doping.Item = CB_Event.Items.IndexOf(regex.Match(Doping.Text).Value); if (Doping.Item < 0) { bRet = false; //Допинг не найден! } else { Doping.Item += EventOffset; } break; case 2: //Item Doping.Item = CB_Item.Items.IndexOf(regex.Match(Doping.Text).Value); if (Doping.Item < 0) { bRet = false; //Допинг не найден! } else { Doping.Item += TypeOffset; } break; } } #endregion return(bRet); }