Ejemplo n.º 1
0
            public SearchResultItem(ItemDetails.ItemSearchResult item)
            {
                this.Name = item.Name;
                this.Id   = item.Tag;
                this.Type = "item";
                var isPet = IsPet(item);

                if (!item.Tag.StartsWith("POTION") && !isPet && !item.Tag.StartsWith("RUNE"))
                {
                    IconUrl = "https://sky.lea.moe/item/" + item.Tag;
                }
                else
                {
                    this.IconUrl = item.IconUrl;
                }
                if (isPet && !Name.Contains("Pet"))
                {
                    this.Name += " Pet";
                }

                this.HitCount = item.HitCount + ITEM_EXTRA_IMPORTANCE;
                if (ItemReferences.RemoveReforgesAndLevel(Name) != Name)
                {
                    this.HitCount -= NOT_NORMALIZED_PENILTY;
                }
            }
Ejemplo n.º 2
0
        public int GetOrCreateItemIdForAuction(SaveAuction auction, HypixelContext context)
        {
            var clearedName = ItemReferences.RemoveReforgesAndLevel(auction.ItemName);
            var tag         = GetIdForName(auction.Tag ?? clearedName);

            if (tag != null && TagLookup.TryGetValue(tag, out int value))
            {
                return(value);
            }

            Console.WriteLine($"Creating item {clearedName} ({auction.ItemName},{auction.Tag})");
            // doesn't exist yet, create it
            var itemByTag = context.Items.Where(item => item.Tag == auction.Tag).FirstOrDefault();

            if (itemByTag != null)
            {
                // new alternative name
                if (clearedName != null)
                {
                    this.ReverseNames[clearedName] = auction.Tag;
                }
                TagLookup.Add(auction.Tag, itemByTag.Id);
                var exists = context.AltItemNames
                             .Where(name => name.Name == clearedName && name.DBItemId == itemByTag.Id)
                             .Any();
                if (!exists)
                {
                    context.AltItemNames.Add(new AlternativeName()
                    {
                        DBItemId = itemByTag.Id, Name = clearedName
                    });
                }
                return(itemByTag.Id);
            }
            Console.WriteLine($"!! completely new !! {JsonConvert.SerializeObject(auction)}");
            // new Item
            //var tempAuction = new Hypixel.NET.SkyblockApi.Auction(){Category=auction.Category,};
            //AddNewItem(tempAuction,auction.ItemName,auction.Tag,null);
            var item = new DBItem()
            {
                Tag   = auction.Tag,
                Name  = auction.ItemName,
                Names = new List <AlternativeName>()
                {
                    new AlternativeName()
                    {
                        Name = auction.ItemName
                    }
                }
            };

            if (item.Tag == null)
            {
                // unindexable item
                return(MAX_MEDIUM_INT);
            }
            ToFillDetails[item.Tag] = item;
            return(AddItemToDB(item));
            //throw new CoflnetException("can_add","can't add this item");
        }
Ejemplo n.º 3
0
        public void AddOrIgnoreDetails(Auction a)
        {
            var id = NBT.ItemID(a.ItemBytes);

            if (id == null)
            {
                if (a.ItemName == "Revive Stone")
                {
                    // known item, has no tag, nothing to do
                    return;
                }
                Logger.Instance.Error($"item has no tag {JsonConvert.SerializeObject(a)}");
                return;
            }

            var name = ItemReferences.RemoveReforgesAndLevel(a.ItemName);

            if (ToFillDetails.TryRemove(id, out DBItem i))
            {
                Console.WriteLine("Filling details for " + i.Tag + i.Id);
                AddNewItem(a, name, id, i);
                return;
            }
            if (Items.ContainsKey(id))
            {
                var tragetItem = Items[id];
                if (tragetItem.AltNames == null)
                {
                    tragetItem.AltNames = new HashSet <string>();
                }

                // try to get shorter lore
                if (Items[id]?.Description?.Length > a?.ItemLore?.Length && a.ItemLore.Length > 10)
                {
                    Items[id].Description = a.ItemLore;
                }
                tragetItem.AltNames.Add(name);
                return;
            }
            // legacy item names
            if (Items.ContainsKey(name))
            {
                var item = Items[name];
                item.Id = id;
                if (item.AltNames == null)
                {
                    item.AltNames = new HashSet <string>();
                }
                item.AltNames.Add(name);
                Items[id] = item;
                Items.Remove(name);

                return;
            }

            // new item, add it
            AddNewItem(a, name, id, i);
        }
Ejemplo n.º 4
0
 public static void Save(ItemReferences item)
 {
     if (item == null)
     {
         // silent
         return;
     }
     FileController.SaveAs("items/" + item.Name, item);
 }
Ejemplo n.º 5
0
        static string RemoveReforgesAndEnchanted(string input)
        {
            var fullName = ItemReferences.RemoveReforgesAndLevel(input);

            if (fullName.StartsWith("Enchanted"))
            {
                fullName = fullName.Substring("Enchanted".Length);
            }
            return(fullName);
        }
Ejemplo n.º 6
0
 public ItemIndexElement(SaveAuction auction) : this(
         auction.Uuid,
         auction.End,
         auction.HighestBidAmount,
         ItemReferences.GetReforges(auction.ItemName),
         auction.Enchantments,
         auction.Count,
         (short)auction.Bids.Count)
 {
 }
Ejemplo n.º 7
0
        public string GetIdForName(string name)
        {
            if (name == null)
            {
                return("NULL");
            }
            var normalizedName = ItemReferences.RemoveReforgesAndLevel(name);

            return(ReverseNames.GetValueOrDefault(normalizedName, normalizedName));
        }
Ejemplo n.º 8
0
        private static IEnumerable <ItemSearchResult> ToSearchResult(List <DBItem> items, string search)
        {
            var clearedSearch = ItemReferences.RemoveReforgesAndLevel(search);

            return(items
                   .Select(item => new ItemSearchResult()
            {
                Name = (item.Names
                        .Where(n => n?.Name != null && n.Name.ToLower().StartsWith(clearedSearch.ToLower()))
                        .FirstOrDefault()?.Name) ?? (item.Name == item.Tag ? TagToName(item.Tag) : item.Name),
                Tag = item.Tag,
                IconUrl = item.IconUrl,
                HitCount = item.HitCount
            }));
        }
Ejemplo n.º 9
0
        public void Load()
        {
            try
            {
                if (FileController.Exists("itemDetails"))
                {
                    Items = FileController.LoadAs <Dictionary <string, Item> >("itemDetails");
                }
            }
            catch (Exception)
            {
                FileController.Move("itemDetails", "corruptedItemDetails" + DateTime.Now.Ticks);
            }

            if (Items == null)
            {
                Items = new Dictionary <string, Item>();
            }
            // correct keys
            foreach (var item in Items.Keys.ToList())
            {
                if (Items[item].Id != item)
                {
                    Items.TryAdd(Items[item].Id, Items[item]);
                    Items.Remove(item);
                }
            }

            foreach (var item in Items)
            {
                if (item.Value.AltNames == null)
                {
                    continue;
                }
                item.Value.AltNames = item.Value.AltNames?.Select(s => ItemReferences.RemoveReforgesAndLevel(s)).ToHashSet();

                foreach (var name in item.Value.AltNames)
                {
                    if (!ReverseNames.TryAdd(name, item.Key))
                    {
                        // make a good guess, anyone?
                    }
                }
            }
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Tries to find and return an item by name
        /// </summary>
        /// <param name="fullName">Full Item name</param>
        /// <returns></returns>
        public DBItem GetDetails(string fullName)
        {
            if (Items == null)
            {
                LoadFromDB();
            }
            var cleanedName = ItemReferences.RemoveReforgesAndLevel(fullName);

            /*if (ReverseNames.TryGetValue(name, out string key) &&
             *  Items.TryGetValue(key, out Item value))
             * {
             *  return value;
             * }*/

            using (var context = new HypixelContext())
            {
                var id = GetItemIdForName(cleanedName, false);
                if (id == 0)
                {
                    id = context.AltItemNames.Where(name => name.Name == fullName || name.Name == cleanedName)
                         .Select(name => name.DBItemId).FirstOrDefault();
                }

                if (id > 1)
                {
                    var item = context.Items.Include(i => i.Names).Where(i => i.Id == id).First();
                    if (item.Names != null)
                    {
                        item.Names = item.Names.OrderBy(n => GetScoreFor(n)).ToList();
                    }
                    item.Name = fullName;
                    // cooler icons
                    //if (!item.Tag.StartsWith("POTION") && !item.Tag.StartsWith("PET") && !item.Tag.StartsWith("RUNE"))
                    //    item.IconUrl = "https://sky.lea.moe/item/" + item.Tag;
                    return(item);
                }
            }

            return(new DBItem()
            {
                Tag = "Unknown", Name = fullName
            });
        }
Ejemplo n.º 11
0
        public static ItemReferences GetOrCreateItemRef(string name, bool noWrite = false)
        {
            name = ItemReferences.RemoveReforgesAndLevel(name);

            if (TryFromCache <ItemReferences>(name, out ItemReferences result))
            {
                return(result);
            }

            var path = "items/" + name;

            if (FileController.Exists(path))
            {
                try{
                    var items = LoadAsLock <ItemReferences> (path, name);
                    if (noWrite)
                    {
                        SaveToCache <ItemReferences>(name, items, s => {});
                    }
                    else
                    {
                        SaveToCache <ItemReferences>(name, items, Save);
                    }
                    return(items);
                } catch (Exception)
                {
                    // move it
                    Console.WriteLine(name);
                    Console.WriteLine(name);
                    throw;
                }
            }
            else
            {
                var items = new ItemReferences()
                {
                    Name = name
                };
                SaveToCache <ItemReferences>(name, items, Save);
                return(items);
            }
        }