Beispiel #1
0
        private static List<List<Event>> getPurchaseGroups(Timeline timeline, int participantId)
        {
            var purchaseGroups = new List<List<Event>>();
            var emptyFrameCount = 0;
            var currentGroup = new List<Event>();
            foreach (var frame in timeline.Frames)
            {
                if (emptyFrameCount > NEW_GROUP_FRAME_GAP)
                {
                    if (currentGroup.Any()) purchaseGroups.Add(currentGroup);
                    currentGroup = new List<Event>();
                }
                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.EventType == EventType.ItemSold || x.EventType == EventType.ItemUndo).ToList();
                }

                foreach (var purchase in purchasesThisFrame)
                {
                    currentGroup.Add(purchase);
                }
                foreach (var sellback in sellbacksThisFrame)
                {
                    if (currentGroup.Any(x => x.ItemId == sellback.ItemId)) currentGroup.Remove(currentGroup.First(x => x.ItemId == sellback.ItemId));
                    if (purchasesThisFrame.Any(x => x.ItemId == sellback.ItemId)) purchasesThisFrame.Remove(purchasesThisFrame.First(x => x.ItemId == sellback.ItemId));
                }
                var meaningfulPurchases = purchasesThisFrame.Any(x => getItem(x.ItemId).Gold.TotalPrice > 150);

                var isFirstPurchase = meaningfulPurchases && !purchaseGroups.Any();
                if (isFirstPurchase && emptyFrameCount > 0)
                {
                    purchaseGroups.Add(currentGroup);
                    currentGroup = new List<Event>();
                }
                emptyFrameCount = (meaningfulPurchases) ? 0 : emptyFrameCount + 1;
            }
            if (currentGroup.Any()) purchaseGroups.Add(currentGroup);
            return purchaseGroups;
        }
Beispiel #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;
        }
Beispiel #3
0
        private static List<ItemStatic> getAllPurchasedItems(Timeline timeline, int participantId)
        {
            List<ItemStatic> items = new List<ItemStatic>();

            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.ItemUndo).ToList();
                }
                foreach (var purchase in purchasesThisFrame)
                {
                    items.Add(getItem(purchase.ItemId));
                }
                foreach (var sellback in sellbacksThisFrame)
                {
                    if (items.Any(x => x.Id == sellback.ItemId)) items.Remove(items.First(x => x.Id == sellback.ItemId));
                }
            }
            return items;
        }