Esempio n. 1
0
        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;
                    }
                }
            }
        }