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