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; } } } }
public void OpenDeal(ItemOrder io) { if (ContainsDeal(io)) { Debug.LogError(io + " is already open"); } TradeOrders.Add(io); }
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); }
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"); }
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); }