示例#1
0
        private static IQueryable <SaveAuction> AddEnchantmentSubselect(SaveAuction auction, int matchingCount, List <Enchantment.EnchantmentType> highLvlEnchantList, IQueryable <SaveAuction> select, byte ultiLevel, Enchantment.EnchantmentType ultiType)
        {
            var maxImportantEnchants = highLvlEnchantList.Count() + 1 + (ultiType == Enchantment.EnchantmentType.unknown ? 0 : 1);

            if (matchingCount > 0)
            {
                select = select.Where(a => a.Enchantments
                                      .Where(e => (e.Level > 5 && highLvlEnchantList.Contains(e.Type) ||
                                                   e.Type == ultiType && e.Level == ultiLevel)).Count() >= matchingCount &&
                                      a.Enchantments.Where(e => UltiEnchantList.Contains(e.Type) || e.Level > 5).Count() <= maxImportantEnchants);
            }
            else if (auction.Enchantments?.Count == 1)
            {
                select = select.Where(a => a.Enchantments != null && a.Enchantments.Any() &&
                                      a.Enchantments.First().Type == auction.Enchantments.First().Type &&
                                      a.Enchantments.First().Level == auction.Enchantments.First().Level);
            }
            else if (auction.Enchantments?.Count == 2)
            {
                select = select.Where(a => a.Enchantments != null && a.Enchantments.Count() == 2 &&
                                      a.Enchantments.Where(e =>
                                                           e.Type == auction.Enchantments[0].Type && e.Level == auction.Enchantments[0].Level ||
                                                           e.Type == auction.Enchantments[1].Type && e.Level == auction.Enchantments[1].Level).Count() == 2);
            }

            // make sure we exclude special enchants to get a reasonable price
            else if (auction.Enchantments.Any())
            {
                select = select.Where(a => !a.Enchantments.Where(e => UltiEnchantList.Contains(e.Type) || e.Level > 5).Any());
            }
            else if (auction.Category == Category.WEAPON || auction.Category == Category.ARMOR) // || auction.Tag == "ENCHANTED_BOOK")
            {
                select = select.Where(a => !a.Enchantments.Any());
            }
            return(select);
        }
示例#2
0
        private static IQueryable <SaveAuction> GetSelect(
            SaveAuction auction,
            HypixelContext context,
            string clearedName,
            int itemId,
            DateTime youngest,
            int matchingCount,
            Enchantment ulti,
            List <Enchantment.EnchantmentType> highLvlEnchantList,
            DateTime oldest,
            ItemReferences.Reforge reforge,
            int limit = 60)
        {
            var select = context.Auctions
                         .Where(a => a.ItemId == itemId)
                         .Where(a => a.HighestBidAmount > 0)
                         .Where(a => a.Tier == auction.Tier);

            byte ultiLevel = 127;

            Enchantment.EnchantmentType ultiType = Enchantment.EnchantmentType.unknown;
            if (ulti != null)
            {
                ultiLevel = ulti.Level;
                ultiType  = ulti.Type;
            }

            if (relevantReforges.Contains(reforge))
            {
                select = select.Where(a => a.Reforge == reforge);
            }


            if (auction.ItemName != clearedName && clearedName != null)
            {
                select = select.Where(a => EF.Functions.Like(a.ItemName, "%" + clearedName));
            }
            else if (auction.Tag.StartsWith("PET"))
            {
                select = AddPetLvlSelect(auction, select);
            }
            else
            {
                select = select.Where(a => a.ItemName == clearedName);
            }

            if (auction.Tag == "MIDAS_STAFF" || auction.Tag == "MIDAS_SWORD")
            {
                try
                {
                    var val   = (long)auction.NbtData.Data["winning_bid"];
                    var keyId = NBT.GetLookupKey(auction.Tag);
                    select  = select.Where(a => a.NBTLookup.Where(n => n.KeyId == keyId && n.Value > val - 2_000_000 && n.Value < val + 2_000_000).Any());
                    oldest -= TimeSpan.FromDays(10);
                } catch
                {}
            }

            select = AddEnchantmentSubselect(auction, matchingCount, highLvlEnchantList, select, ultiLevel, ultiType);
            if (limit == 0)
            {
                return(select);
            }

            return(select
                   .Where(a => a.End > oldest && a.End < youngest)
                   //.OrderByDescending(a=>a.Id)
                   //.Include(a => a.NbtData)
                   .Take(limit));
        }