Beispiel #1
0
    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;
    }
Beispiel #2
0
    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);
    }