Ejemplo n.º 1
0
        private void FindIngredientsInInventoryTracker(ProxyDictionary <int, int> ingredients)
        {
            CurrentIngredientInventories = null;
            CurrentIngredientInventories = new List <InventoryTracker>();

            if (Inventories != null)
            {
                foreach (var inv in Inventories)
                {
                    foreach (var ing in ingredients.Keys)
                    {
                        var items = inv.Items.Select(x => x.As <ObjectAccessor, ObjectItem>())
                                    .Where(x => x.As <ObjectAccessor, ObjectItem>().ParentSheetIndex == ing);

                        var fish = inv.Items.Select(x => x.As <ObjectAccessor, ObjectItem>())
                                   .Where(x => x.As <ObjectAccessor, ObjectItem>().Category == ing);

                        if (items.Count() > 0 || fish.Count() > 0 && !CurrentIngredientInventories.Contains(inv))
                        {
                            CurrentIngredientInventories.Add(inv);
                        }
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private bool CheckInventoriesForIngredients(ProxyDictionary <int, int> ingredients)
        {
            var ingList         = new List <IngredientTracker>();
            var haveIngredients = true;

            // Iterate through the ingredients index
            foreach (var id in ingredients.Keys)
            {
                var ing = new IngredientTracker {
                    Id = id, QuantityRequired = ingredients[id]
                };

                var chestItems = Inventories.SelectMany(x => x.Items)
                                 .Where(under => under.Underlying.GetType().ToString() == "StardewValley.Object");
                foreach (var inv in Inventories)
                {
                    foreach (var item in inv.Items)
                    {
                        if (item.As <ObjectAccessor, ObjectItem>().ParentSheetIndex == id)
                        {
                            ing.QuantityWeHave += item.As <ObjectAccessor, ObjectItem>().Stack;
                        }

                        //Catch all Fish (Any)
                        else if (item.As <ObjectAccessor, ObjectItem>().Category == id)
                        {
                            if (item.As <ObjectAccessor, ObjectItem>().Category == id)
                            {
                                ing.QuantityWeHave += item.As <ObjectAccessor, ObjectItem>().Stack;
                            }
                        }

                        ingList.Add(ing);
                    }
                }
            }

            foreach (var ing in ingList)
            {
                if (ing.QuantityRequired > ing.QuantityWeHave)
                {
                    haveIngredients = false;
                }
            }

            return(haveIngredients);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ProxyValueCollection"/> class.
 /// </summary>
 /// <param name="dictionary">The dictionary.</param>
 public ProxyValueCollection(ProxyDictionary <TKey, TValue> dictionary)
 {
     this.dictionary = dictionary;
 }
Ejemplo n.º 4
0
        private void UpdateItemsInInventoriesAfterCrafting(ProxyDictionary <int, int> ingredients)
        {
            // Id : Quantity
            var inventories         = GetAllInventories();
            var ingList             = new List <IngredientTracker>();
            var quantTotal          = 0;
            var hasUsedAllInventory = false;

            foreach (var key in ingredients.Keys)
            {
                ingList.Add(new IngredientTracker {
                    Id = key, QuantityRequired = ingredients[key]
                });
                quantTotal += ingredients[key];
            }

            try
            {
                if (CurrentIngredientInventories.Count > 0)
                {
                    while (quantTotal != 0)
                    {
                        if (ingList.Exists(x => x.Id == -4))
                        {
                            var emptyFish = ingList.Select(x => x)
                                            .Where(x => x.Id == -4)
                                            .Where(x => x.QuantityRequired == 0);

                            if (emptyFish != null)
                            {
                                foreach (var fish in emptyFish)
                                {
                                    ingredients.Remove(fish.Id);
                                }

                                FindIngredientsInInventoryTracker(ingredients);
                            }
                        }

                        // Make sure if we have fulfilled the required quantity, we remove from the ingredient list.
                        if (ingList.Exists(x => x.QuantityRequired == 0))
                        {
                            ingList.RemoveAll(x => x.QuantityRequired == 0);
                        }

                        foreach (var ing in ingList)
                        {
                            foreach (var inv in CurrentIngredientInventories)
                            {
                                var selectedInv = inventories.FirstOrDefault(x => x.As <ChestAccessor, Chest>().BoundingBox.X == inv.Position.X &&
                                                                             x.As <ChestAccessor, Chest>().BoundingBox.Y == inv.Position.Y);

                                if (selectedInv != null)
                                {
                                    foreach (var item in selectedInv.As <ChestAccessor, Chest>().Items)
                                    {
                                        //if (item.Underlying.GetType().ToString() == "StardewValley.Object")
                                        if (item.Is <ObjectAccessor>())
                                        {
                                            //Check characters inventory first
                                            var charItems = Root.Player.Items;

                                            if (!hasUsedAllInventory)
                                            {
                                                for (int i = 0; i < charItems.Count; i++)
                                                {
                                                    if (charItems[i] != null)
                                                    {
                                                        if (charItems[i].Is <ObjectAccessor>())
                                                        {
                                                            if (ing.Id == charItems[i].As <ObjectAccessor, ObjectItem>().ParentSheetIndex&& ing.QuantityRequired > 0)
                                                            {
                                                                // This particular item has more than enough quantity in its stack for this recipe.
                                                                if (charItems[i].As <ObjectAccessor, ObjectItem>().Stack > ing.QuantityRequired)
                                                                {
                                                                    charItems[i].As <ObjectAccessor, ObjectItem>().Stack -= ing.QuantityRequired;
                                                                    quantTotal          -= ing.QuantityRequired;
                                                                    ing.QuantityRequired = 0;
                                                                }

                                                                // This particular item doesnt have the required stack for this recipe. Remove it.
                                                                else if (charItems[i].As <ObjectAccessor, ObjectItem>().Stack <= ing.QuantityRequired && ing.QuantityRequired > 0)
                                                                {
                                                                    ing.QuantityRequired -= charItems[i].As <ObjectAccessor, ObjectItem>().Stack;
                                                                    quantTotal           -= charItems[i].As <ObjectAccessor, ObjectItem>().Stack;
                                                                    charItems[i]          = null;
                                                                    hasUsedAllInventory   = true;
                                                                    Update();
                                                                }
                                                            }

                                                            //Fish (Any)
                                                            else if (ing.Id == charItems[i].As <ObjectAccessor, ObjectItem>().Category&& ing.QuantityRequired > 0)
                                                            {
                                                                // This particular item has more than enough quantity in its stack for this recipe.
                                                                if (charItems[i].As <ObjectAccessor, ObjectItem>().Stack > ing.QuantityRequired)
                                                                {
                                                                    charItems[i].As <ObjectAccessor, ObjectItem>().Stack -= ing.QuantityRequired;
                                                                    quantTotal          -= ing.QuantityRequired;
                                                                    ing.QuantityRequired = 0;
                                                                }

                                                                // This particular item doesnt have the required stack for this recipe. Remove it.
                                                                else if (charItems[i].As <ObjectAccessor, ObjectItem>().Stack <= ing.QuantityRequired && ing.QuantityRequired > 0)
                                                                {
                                                                    ing.QuantityRequired -= charItems[i].As <ObjectAccessor, ObjectItem>().Stack;
                                                                    quantTotal           -= charItems[i].As <ObjectAccessor, ObjectItem>().Stack;
                                                                    charItems[i]          = null;
                                                                    hasUsedAllInventory   = true;
                                                                    Update();
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }


                                            if (ing.Id == item.As <ObjectAccessor, ObjectItem>().ParentSheetIndex&& ing.QuantityRequired > 0)
                                            {
                                                // This particular item has more than enough quantity in its stack for this recipe.
                                                if (item.As <ObjectAccessor, ObjectItem>().Stack > ing.QuantityRequired)
                                                {
                                                    quantTotal -= ing.QuantityRequired;
                                                    item.As <ObjectAccessor, ObjectItem>().Stack -= ing.QuantityRequired;
                                                    ing.QuantityRequired = 0;
                                                }

                                                // This particular item doesnt have the required stack for this recipe. Remove it.
                                                else if (item.As <ObjectAccessor, ObjectItem>().Stack <= ing.QuantityRequired && ing.QuantityRequired > 0)
                                                {
                                                    ing.QuantityRequired -= item.As <ObjectAccessor, ObjectItem>().Stack;
                                                    quantTotal           -= item.As <ObjectAccessor, ObjectItem>().Stack;
                                                    selectedInv.As <ChestAccessor, Chest>().Items.Remove(item);
                                                    Update();
                                                }
                                            }

                                            // Fish (Any)
                                            else if (ing.Id == item.As <ObjectAccessor, ObjectItem>().Category&& ing.QuantityRequired > 0)
                                            {
                                                // This particular item has more than enough quantity in its stack for this recipe.
                                                if (item.As <ObjectAccessor, ObjectItem>().Stack > ing.QuantityRequired)
                                                {
                                                    quantTotal -= ing.QuantityRequired;
                                                    item.As <ObjectAccessor, ObjectItem>().Stack -= ing.QuantityRequired;
                                                    ing.QuantityRequired = 0;
                                                }

                                                // This particular item doesnt have the required stack for this recipe. Remove it.
                                                else if (item.As <ObjectAccessor, ObjectItem>().Stack <= ing.QuantityRequired && ing.QuantityRequired > 0)
                                                {
                                                    ing.QuantityRequired -= item.As <ObjectAccessor, ObjectItem>().Stack;
                                                    quantTotal           -= item.As <ObjectAccessor, ObjectItem>().Stack;
                                                    selectedInv.As <ChestAccessor, Chest>().Items.Remove(item);
                                                    Update();
                                                }
                                            }


                                            if (quantTotal == 0)
                                            {
                                                goto QuantityZero;
                                            }
                                        }
                                    }
                                }
                            }
                        }

QuantityZero:
                        continue;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                Console.WriteLine(e.StackTrace);
            }
        }