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); }
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)); }