public static bool GenericErrorHandler(ref int numError, object item) { DbLoaderErrorHandler.Handle("Failed to read an item.", item.ToString()); numError--; if (numError < -10) { DbLoaderErrorHandler.Handle("Failed to read too many items, the db will stop loading.", ErrorLevel.Critical); return(true); } return(false); }
private static void _loadItemsGroupdDb <TKey>(AbstractDb <TKey> db, string file) { int numberOfErrors = 3; TextFileHelper.LatestFile = file; if (String.IsNullOrEmpty(file)) { DbLoaderErrorHandler.Handle("File not found " + ServerDbs.ItemGroups + ".", ErrorLevel.NotSpecified); return; } var itemDb1 = db.Database.GetDb <int>(ServerDbs.Items); var itemDb2 = db.Database.GetDb <int>(ServerDbs.Items); if (!itemDb1.IsLoaded) { itemDb1.LoadDb(); } if (!itemDb2.IsLoaded) { itemDb2.LoadDb(); } var itemDb = new MetaTable <int>(ServerItemAttributes.AttributeList); itemDb.AddTable(itemDb1.Table); itemDb.AddTable(itemDb2.Table); var table = db.Table; HashSet <int> loadedIds = ((Tuple <string, HashSet <int> >)db.Attached[file]).Item2; foreach (string[] elements in TextFileHelper.GetElementsByCommas(File.ReadAllBytes(file))) { try { TKey itemId; int iItemId; if (Int32.TryParse(elements[0], out iItemId)) { itemId = (TKey)(object)iItemId; } else { var constantDb = db.Database.GetDb <string>(ServerDbs.Constants); if (!constantDb.IsLoaded) { constantDb.LoadDb(); } var tuple = constantDb.Table.TryGetTuple(elements[0]); if (tuple == null) { if (AllLoaders.GenericErrorHandler(ref numberOfErrors, elements[0])) { return; } continue; } itemId = (TKey)(object)tuple.GetValue <int>(1); } string orate = elements[2]; int nameId; int rate; if (Int32.TryParse(elements[1], out nameId)) { } else { var tuple = itemDb.FastItems.FirstOrDefault(p => p.GetStringValue(ServerItemAttributes.AegisName.Index) == elements[1]); if (tuple == null) { if (AllLoaders.GenericErrorHandler(ref numberOfErrors, elements[0])) { return; } continue; } nameId = tuple.GetKey <int>(); } Int32.TryParse(orate, out rate); var id = (object)itemId; loadedIds.Add((int)id); if (!table.ContainsKey(itemId)) { ReadableTuple <TKey> tuple = new ReadableTuple <TKey>(itemId, db.AttributeList); tuple.SetRawValue(ServerItemGroupAttributes.Table, new Dictionary <int, ReadableTuple <int> >()); table.Add(itemId, tuple); } Dictionary <int, ReadableTuple <int> > dico = (Dictionary <int, ReadableTuple <int> >)table.GetRaw(itemId, ServerItemGroupAttributes.Table); ReadableTuple <int> newTuple = new ReadableTuple <int>(nameId, ServerItemGroupSubAttributes.AttributeList); List <DbAttribute> attributes = new List <DbAttribute>(ServerItemGroupSubAttributes.AttributeList.Attributes); for (int i = 2; i < elements.Length; i++) { db.Attached[attributes[i - 1].DisplayName] = true; newTuple.SetRawValue(attributes[i - 1], elements[i]); } dico[nameId] = newTuple; } catch { if (AllLoaders.GenericErrorHandler(ref numberOfErrors, elements[0])) { return; } } } }