Пример #1
0
        private static PurchaseSet getRushItem(List<ItemStatic> items, List<ItemStatic> alreadyOwnedItems)
        {
            ItemStatic RushItem = items.FirstOrDefault(x => x.From != null && (x.Into == null || x.Into.Count == 1 && getItem(x.Into.First()).SpecialRecipe != 0) && x.Gold.TotalPrice > 300);
            if (RushItem == null) return null;
            var possibleComponents = items.GetRange(0, items.IndexOf(RushItem));
            var buildOrder = possibleComponents.Where(x => RushItem.From.Contains(x.Id.ToString())).ToList();
            PurchaseSet set = new PurchaseSet() { Name = "Rush " + RushItem.Name, RecMath = true };
            foreach (var item in buildOrder)
            {
                set.Items.Add(item);
                set.TotalCost += item.Gold.TotalPrice;
            }
            foreach (var from in RushItem.From.ToList())
            {
                if (!set.Items.Any(x => x.Id.ToString() == from))
                {
                    var item = getItem(from);
                    set.Items.Add(item);
                    set.TotalCost += item.Gold.TotalPrice;

                }
            }
            var componentTree = RushItem.From.ToList();
            while (componentTree.Any())
            {
                var item = getItem(componentTree[0]);
                componentTree.RemoveAt(0);
                var dupe = alreadyOwnedItems.FirstOrDefault(x => x.Id == item.Id);
                if (dupe is ItemStatic)
                {
                    alreadyOwnedItems.Remove(alreadyOwnedItems.First(x => x.Id == dupe.Id));
                    if (set.Items.Any(x => x.Id == dupe.Id))
                    {
                        set.Items.Remove(set.Items.First(x => x.Id == dupe.Id));
                    }
                    set.TotalCost -= dupe.Gold.TotalPrice;
                }
                else
                {
                    if (item.From != null)
                    {
                        foreach (var key in item.From)
                        {
                            componentTree.Add(key);
                        }
                    }
                }
            }

            set.Items.Add(RushItem);
            if (RushItem.Into != null && RushItem.Into.Count == 1 && getItem(RushItem.Into.First()).SpecialRecipe != 0)
            {
                set.Items.Add(getItem(RushItem.Into.First()));
            }
            set.TotalCost += RushItem.Gold.BasePrice;

            set.Name = set.Name + " (" + set.TotalCost + " gold)";
            return set;
        }
Пример #2
0
        private static PurchaseSet getStartingItems(Timeline timeline, int participantId)
        {
            PurchaseSet set = new PurchaseSet() { Name = "Starting Items", RecMath = false };
            bool foundAny = false;

            foreach (var frame in timeline.Frames)
            {
                var purchasesThisFrame = new List<Event>();
                var sellbacksThisFrame = new List<Event>();
                if (frame.Events != null)
                {
                    purchasesThisFrame = frame.Events.Where(x => x.ParticipantId == participantId && x.EventType == EventType.ItemPurchased).ToList();
                    sellbacksThisFrame = frame.Events.Where(x => x.ParticipantId == participantId && (x.EventType == EventType.ItemSold || x.EventType == EventType.ItemUndo)).ToList();
                }
                foreach (var purchase in purchasesThisFrame)
                {
                    set.Items.Add(getItem(purchase.ItemId));
                }
                foreach (var sellback in sellbacksThisFrame)
                {
                    if (set.Items.Any(x => x.Id == sellback.ItemId)) set.Items.Remove(set.Items.First(x => x.Id == sellback.ItemId));
                }
                if (foundAny) { break; }
                if (purchasesThisFrame.Any()) { foundAny = true; }
            }
            foreach (var item in set.Items)
            {
                set.TotalCost += item.Gold.TotalPrice;
            }
            set.Name = set.Name + " (" + set.TotalCost + " gold)";
            return set;
        }
Пример #3
0
 private static PurchaseSet getPurchaseSet(string name, List<ItemStatic> items, bool includePrice = true)
 {
     var purchaseSet = new PurchaseSet() { Name = name, RecMath = false };
     foreach (var item in items)
     {
         purchaseSet.Items.Add(item);
         if (includePrice) purchaseSet.TotalCost += item.Gold.TotalPrice;
     }
     return purchaseSet;
 }