private void OnSelloutOrder(object sender, TicketRaisedEventArgs ticketRaisedEventArgs) { if (ticketRaisedEventArgs.Result != PostOrderResponse.Processed) { return; } OrderSelloutTradableResource orderSelloutTradableResource = ticketRaisedEventArgs.Order as OrderSelloutTradableResource; Diagnostics.Assert(orderSelloutTradableResource != null); AILayer_ResourceManager.SellInfo sellInfo = this.sellInfos.Find((AILayer_ResourceManager.SellInfo match) => match.ResourceDefinition.Name == orderSelloutTradableResource.ResourceName); Diagnostics.Assert(sellInfo != null); sellInfo.AmountToSell = 0f; sellInfo.NextTurnSoldAmount += orderSelloutTradableResource.Quantity; sellInfo.TotalSoldAmount += orderSelloutTradableResource.Quantity; }
private SynchronousJobState SynchronousJob_SellResources() { IGameService service = Services.GetService <IGameService>(); int turn = (service.Game as global::Game).Turn; ReadOnlyCollection <TradableTransaction> pastTransactions = this.tradeManagementService.GetPastTransactions(); for (int i = 0; i < this.sellInfos.Count; i++) { AILayer_ResourceManager.SellInfo sellInfo = this.sellInfos[i]; if (sellInfo.AmountToSell >= 1f && !pastTransactions.Any((TradableTransaction T) => T.ReferenceName == sellInfo.ResourceDefinition.Name && T.Type == TradableTransactionType.Buyout && T.Turn >= (uint)(turn - 5) && T.EmpireIndex == (uint)this.AIEntity.Empire.Index)) { float amountToSell = sellInfo.AmountToSell; if (this.departmentOfTheTreasury.IsTransferOfResourcePossible(base.AIEntity.Empire, sellInfo.ResourceDefinition.Name, ref amountToSell) && amountToSell >= 1f) { OrderSelloutTradableResource order = new OrderSelloutTradableResource(base.AIEntity.Empire.Index, sellInfo.ResourceDefinition.Name, amountToSell, false); Ticket ticket; base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order, out ticket, new EventHandler <TicketRaisedEventArgs>(this.OnSelloutOrder)); } } } return(SynchronousJobState.Success); }