Пример #1
0
        private static List <ImportedDeck> GetImportedDecks(IEnumerable <HearthMirror.Objects.Deck> decks)
        {
            var importedDecks = new List <ImportedDeck>();
            var hsDecks       = decks.ToList();

            foreach (var deck in hsDecks)
            {
                var otherDecks = hsDecks.Except(new[] { deck });
                var existing   = DeckList.Instance.Decks.Where(x => otherDecks.All(d => d.Id != x.HsId)).Select(x =>
                                                                                                                new
                {
                    Deck      = x,
                    IdMatch   = x.HsId == deck.Id,
                    CardMatch = x.VersionsIncludingSelf.Select(x.GetVersion).Where(v => v.Cards.Sum(c => c.Count) == 30)
                                .Any(v => deck.Cards.All(c => v.Cards.Any(c2 => c.Id == c2.Id && c.Count == c2.Count)))
                }).Where(x => x.IdMatch || x.CardMatch).ToList();
                if (!existing.Any())
                {
                    var iDeck = new ImportedDeck(deck, null);
                    if (!string.IsNullOrEmpty(iDeck.Class))
                    {
                        importedDecks.Add(iDeck);
                    }
                }
                else if (!existing.Any(x => x.IdMatch && x.CardMatch) && existing.Any(x => x.IdMatch ^ x.CardMatch))
                {
                    var iDeck = new ImportedDeck(deck, existing.Select(x => x.Deck).ToList());
                    if (!string.IsNullOrEmpty(iDeck.Class))
                    {
                        importedDecks.Add(iDeck);
                    }
                }
            }
            return(importedDecks);
        }
        public static List <ImportedDeck> GetImportedDecks(IEnumerable <HearthMirror.Objects.Deck> decks, IList <Deck> localDecks)
        {
            var importedDecks = new List <ImportedDeck>();
            var hsDecks       = decks.ToList();

            foreach (var deck in hsDecks)
            {
                if (deck.Cards.Count == 1 && deck.Cards.Single().Id == CardIds.Collectible.Neutral.WhizbangTheWonderful)
                {
                    var data = RemoteConfig.Instance.Data;
                    if (data != null)
                    {
                        var whizbangDecks = data.WhizbangDecks.Select(x =>
                        {
                            if (!Hearthstone.CardIds.CardClassHero.TryGetValue(x.Class, out var hero))
                            {
                                return(null);
                            }
                            return(new HearthMirror.Objects.Deck
                            {
                                Id = x.DeckId,
                                Name = x.Title,
                                Cards = x.Cards.Select(c => new HearthMirror.Objects.Card(Database.GetCardFromDbfId(c.DbfId).Id, c.Count, false)).ToList(),
                                Hero = hero,
                            });
                        }).Where(x => x != null);

                        importedDecks.AddRange(GetImportedDecks(whizbangDecks, localDecks));
                        continue;
                    }
                }

                var otherDecks = hsDecks.Except(new[] { deck });
                var existing   = localDecks.Where(x => otherDecks.All(d => d.Id != x.HsId)).Select(x =>
                                                                                                   new
                {
                    Deck      = x,
                    IdMatch   = x.HsId == deck.Id,
                    CardMatch = x.VersionsIncludingSelf.Select(x.GetVersion).Where(v => v.Cards.Sum(c => c.Count) == 30)
                                .Any(v => deck.Cards.All(c => v.Cards.Any(c2 => c.Id == c2.Id && c.Count == c2.Count)))
                }).Where(x => x.IdMatch || x.CardMatch).ToList();
                if (!existing.Any())
                {
                    var iDeck = new ImportedDeck(deck, null, localDecks);
                    if (!string.IsNullOrEmpty(iDeck.Class))
                    {
                        importedDecks.Add(iDeck);
                    }
                }
                else if (!existing.Any(x => x.IdMatch && x.CardMatch) && existing.Any(x => x.IdMatch ^ x.CardMatch))
                {
                    var iDeck = new ImportedDeck(deck, existing.Select(x => x.Deck).ToList(), localDecks);
                    if (!string.IsNullOrEmpty(iDeck.Class))
                    {
                        importedDecks.Add(iDeck);
                    }
                }
            }
            return(importedDecks);
        }