Пример #1
0
    public void NextCaravan()
    {
        foreach (ItemOrder co in TradeOrders.Keys)
        {
            if (!TradeOrders[co])
            {
                if (co.city.attitude < 0)
                {
                    TradeOrders.Remove(co);
                    continue;
                }

                if (co.direction == TradeDirection.Export)
                {
                    SpawnExporter(co);
                }
                else
                {
                    SpawnImporter(co);
                }

                if (TradeOrders[co])
                {
                    break;
                }
            }
        }
    }
Пример #2
0
 public void OpenDeal(ItemOrder io)
 {
     if (ContainsDeal(io))
     {
         Debug.LogError(io + " is already open");
     }
     TradeOrders.Add(io);
 }
Пример #3
0
        public async Task <TradeOrders> GetOrderHistoryAsync(PrivatePairContext context)
        {
            var api        = ApiProvider.GetApi(context);
            var remotePair = context.RemotePairOrNull(this);
            var r          = await api.GetAccountHistory(remotePair).ConfigureAwait(false);

            CheckResponseErrors(r);

            var orders = new TradeOrders(Network);

            foreach (var order in r.result)
            {
                orders.Add(new TradeOrder(order.OrderUuid, Network, order.Exchange.ToAssetPair(this), GetTradeOrderType(order.Type), order.Price)
                {
                    Quantity          = order.Quantity,
                    QuantityRemaining = order.QuantityRemaining
                });
            }

            return(orders);
        }
Пример #4
0
    public void BuyGoodsAndSetDestination(TradeOracle oracle)
    {
        Log("Start BuyGoodsAndSetDestination");
        TradeOrders orders = oracle.WhatShouldIBuy(sheet.inventory, currentCity, currentCity.MarketPlace.TradeRoutes);

        Log("Current city:" + currentCity);
        destinationCity = orders.Destination.CityOne;
        if (currentCity == orders.Destination.CityOne)
        {
            destinationCity = orders.Destination.CityToo;
        }
        Log("Destination city:" + destinationCity);

        Log("Starting currency:" + sheet.inventory.currency);
        sheet.inventory.currency -= currentCity.MarketPlace.BuyThese(orders.Manifests);
        Log("After trade currency:" + sheet.inventory.currency);

        Log("Items before purchase:" + Item.ListToString(sheet.inventory.items));
        sheet.inventory.AddCollection(orders.Manifests);
        Log("Items after purchase:" + Item.ListToString(sheet.inventory.items));

        GetComponent <CharacterMovement>().destination = destinationCity.gameObject.GetComponent <NavigationWaypoint>();
        Log("End BuyGoodsAndSetDestination");
    }
Пример #5
0
    public TradeOrders WhatShouldIBuy(Inventory traderInventory, TradeCity currentCity, List <TradeRoute> avaliableTradeRoutes)
    {
        int bestProfit = 0;

        Item       bestItem            = new Item();
        int        canAffordOfBestItem = 0;
        TradeRoute bestRoute           = avaliableTradeRoutes[0];
        int        purchasedPrice      = 0;

        foreach (TradeRoute route in avaliableTradeRoutes)
        {
            TradeCity destination = route.CityOne;
            if (route.CityOne == currentCity)
            {
                destination = route.CityToo;
            }

            Log("Assesing city:" + destination);

            foreach (TradeData currentTradeData in currentCity.MarketPlace.TradeDataManifest)
            {
                if (currentTradeData.CurrentCost() < traderInventory.currency)
                {
                    Log("Can Afford " + currentTradeData.ToString());
                    foreach (TradeData destinationTradeData in destination.MarketPlace.TradeDataManifest)
                    {
                        if (currentTradeData.Item == destinationTradeData.Item)
                        {
                            if (destinationTradeData.CurrentCost() - currentTradeData.CurrentCost() > bestProfit)
                            {
                                Log("Can make a new best profit at :" + (destinationTradeData.CurrentCost() - currentTradeData.CurrentCost()) + " better then :" + bestProfit);
                                bestProfit          = destinationTradeData.CurrentCost() - currentTradeData.CurrentCost();
                                bestItem.Type       = currentTradeData.Item;
                                canAffordOfBestItem = traderInventory.currency / currentTradeData.CurrentCost();
                                bestRoute           = route;
                                purchasedPrice      = currentTradeData.CurrentCost();
                            }
                            else
                            {
                                Log("Can not make a new best profit at :" + (destinationTradeData.CurrentCost() - currentTradeData.CurrentCost()) + " worse then :" + bestProfit);
                            }
                        }
                    }
                }
                else
                {
                    Log("Can Not Afford " + currentTradeData.ToString());
                }
            }
        }

        List <Item> manifest = new List <Item>();

        bestItem.PurchasedPrice = purchasedPrice;

        manifest.Add(bestItem);

        TradeOrders tradeOrder = GameObject.FindGameObjectWithTag("GameManager").AddComponent <TradeOrders>();

        tradeOrder.Manifests   = manifest;
        tradeOrder.Destination = bestRoute;

        Log("Decided on " + canAffordOfBestItem + " of " + bestItem.Type + " at " + bestItem.PurchasedPrice + " for a gain of " + bestProfit);
        return(tradeOrder);
    }