public void PurchaseItem(ShopAgent shopAgent, UsableItemDetails item, EconomyWallet wallet, AgentInventory inventory)
        {
            var shop    = GetShop(shopAgent);
            var success = shop.PurchaseItems(shopAgent.wallet, item, wallet, inventory);

            if (success)
            {
                OverviewVariables.SoldItem();

                if (item.itemName == endItem.itemDetails.itemName)
                {
                    //resetScript.ResetScript();
                }
            }
            Refresh();
        }
        public bool PurchaseItems(EconomyWallet shopAgentWallet, UsableItemDetails itemDetails, EconomyWallet adventurerAgentWallet, AgentInventory inventory)
        {
            var price = _stockPrices[itemDetails.itemName];

            int GetStock()
            {
                return(_shopItems[itemDetails.itemName].Count);
            }

            if (adventurerAgentWallet.Money <= price)
            {
                Debug.Log("Not enough money : wallet " + adventurerAgentWallet.Money + "- price " + price);
                return(false);
            }

            if (GetStock() <= 0)
            {
                Debug.Log("Not enough stock");
                return(false);
            }

            inventory.AddItem(_shopItems[itemDetails.itemName][0]);
            _shopItems[itemDetails.itemName].RemoveAt(0);

            _stockPrices[itemDetails.itemName] = price;

            if (GetStock() <= 0)
            {
                _stockPrices.Remove(itemDetails.itemName);
                _shopItems.Remove(itemDetails.itemName);
                _previousPrices[itemDetails.itemName] = price;
            }
            adventurerAgentWallet.SpendMoney(price);
            shopAgentWallet.EarnMoney(price);

            return(true);
        }
Exemple #3
0
        public void ChangePrice(CraftingResources resources, CraftingInventory inventory, EconomyWallet wallet, int change)
        {
            CheckInventory(inventory);
            var craftingInventory = _craftingRequests[inventory];
            var containsKey       = craftingInventory.ContainsKey(resources);

            if (containsKey)
            {
                if (craftingInventory.ContainsKey(resources))
                {
                    var newPrice  = craftingInventory[resources].Price + change;
                    var newReward = craftingInventory[resources].GetReward(newPrice);

                    var rewardDifference = newReward - craftingInventory[resources].Reward;
                    var validTransaction = false;
                    if (rewardDifference > 0)
                    {
                        if (rewardDifference <= wallet.Money)
                        {
                            wallet.SpendMoney(rewardDifference);
                            validTransaction = true;
                        }
                    }
                    else
                    {
                        wallet.EarnMoney(Mathf.Abs(rewardDifference));
                        validTransaction = true;
                    }

                    if (validTransaction)
                    {
                        craftingInventory[resources].Price = newPrice;
                    }
                }
            }
            Refresh();
        }
Exemple #4
0
        public void MakeRequest(CraftingResources resources, CraftingInventory inventory, EconomyWallet wallet)
        {
            void CheckExchange(CraftingResourceRequest request)
            {
                if (request.Price <= wallet.Money)
                {
                    if (_craftingRequests[inventory].ContainsKey(resources))
                    {
                        _craftingRequests[inventory][resources].Number++;
                    }
                    else
                    {
                        _craftingRequests[inventory].Add(resources, request);
                    }
                    wallet.SpendMoney(request.Price);
                }
            }

            CheckInventory(inventory);

            var requestNumber = GetRequestNumber(inventory, resources);
            var canRequest    = requestNumber < 10;

            if (canRequest)
            {
                var containsKey = _craftingRequests[inventory].ContainsKey(resources);

                if (!containsKey)
                {
                    Sprite icon        = GetIconByResource(resources);
                    var    newResource = new CraftingResourceRequest(resources, inventory, defaultResourcePrices[resources], icon);
                    _requestWallets.Add(newResource, wallet);
                    CheckExchange(newResource);
                }
                else
                {
                    CheckExchange(_craftingRequests[inventory][resources]);
                }
            }

            Refresh();
        }