示例#1
0
    private void PillarOrder_TicketRaised(object sender, TicketRaisedEventArgs e)
    {
        OrderBuyoutAndActivatePillar order = e.Order as OrderBuyoutAndActivatePillar;
        IEnumerable <EvaluableMessage_PillarNeed> messages = base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_PillarNeed>(BlackboardLayerID.Empire, (EvaluableMessage_PillarNeed match) => match.EvaluationState == EvaluableMessage.EvaluableMessageState.Validate && match.WorldPosition == order.TargetPosition && match.PillarDefinition.Name == order.PillarDefinitionName);

        if (messages.Any <EvaluableMessage_PillarNeed>())
        {
            using (IEnumerator <EvaluableMessage_PillarNeed> enumerator = messages.GetEnumerator())
            {
                if (enumerator.MoveNext())
                {
                    EvaluableMessage_PillarNeed evaluableMessage_PillarNeed = enumerator.Current;
                    if (e.Result != PostOrderResponse.Processed)
                    {
                        evaluableMessage_PillarNeed.SetFailedToObtain();
                    }
                    else
                    {
                        evaluableMessage_PillarNeed.SetObtained();
                    }
                }
            }
        }
    }
示例#2
0
    private SynchronousJobState SynchronousJob_StartValidatedBoosters()
    {
        if (this.aiEntityCity.City == null || !this.aiEntityCity.City.GUID.IsValid || this.aiEntityCity.City.Empire.Index != base.AIEntity.Empire.Index || this.aiEntityCity.City.BesiegingEmpireIndex >= 0)
        {
            return(SynchronousJobState.Success);
        }
        float num = 0f;

        this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, DepartmentOfTheTreasury.Resources.EmpireMoney, out num, false);
        if (num <= this.MoneyAtTurnBegin * (this.departmentOfForeignAffairs.IsInWarWithSomeone() ? 0.5f : 0.25f))
        {
            return(SynchronousJobState.Success);
        }
        this.decisionMaker.UnregisterAllOutput();
        this.decisionMaker.ClearAIParametersOverrides();
        base.AIEntity.Context.InitializeDecisionMaker <PillarDefinition>(AICityState.ProductionParameterModifier, this.decisionMaker);
        List <PillarDefinition> elements = (from pillarDefinition in this.PillarDatabase.GetValues()
                                            where DepartmentOfTheTreasury.CheckConstructiblePrerequisites(base.AIEntity.Empire, pillarDefinition, new string[]
        {
            ConstructionFlags.Prerequisite
        })
                                            select pillarDefinition).ToList <PillarDefinition>();

        this.decisionResults.Clear();
        this.decisionMaker.EvaluateDecisions(elements, ref this.decisionResults);
        if (this.decisionResults != null && this.decisionResults.Count > 0 && this.decisionResults[0].Score > 0f)
        {
            if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools && ELCPUtilities.ELCPVerboseMode)
            {
                foreach (DecisionResult decisionResult in this.decisionResults)
                {
                    PillarDefinition pillarDefinition3 = decisionResult.Element as PillarDefinition;
                    Diagnostics.Log("ELCP {0}/{1} AILayer_Pillar evaluations {2} {3}", new object[]
                    {
                        base.AIEntity.Empire,
                        this.aiEntityCity.City.LocalizedName,
                        pillarDefinition3.Name,
                        decisionResult.Score
                    });
                }
            }
            PillarDefinition pillarDefinition2 = this.decisionResults[0].Element as PillarDefinition;
            if (pillarDefinition2.Name == AILayer_Pillar.DustPillarName && pillarDefinition2.GetPillarCount(base.AIEntity.Empire) > 2f)
            {
                if (this.decisionResults.Count <= 1 || this.decisionResults[1].Score <= 0f)
                {
                    return(SynchronousJobState.Failure);
                }
                pillarDefinition2 = (this.decisionResults[1].Element as PillarDefinition);
            }
            int           num2           = 0;
            WorldPosition targetPosition = this.ComputeMostOverlappingPositionForRange(pillarDefinition2, out num2);
            if (num2 < 5)
            {
                return(SynchronousJobState.Success);
            }
            float pillarDustCost = this.GetPillarDustCost(pillarDefinition2);
            if (!float.IsPositiveInfinity(pillarDustCost) && num >= pillarDustCost && targetPosition.IsValid)
            {
                OrderBuyoutAndActivatePillar order = new OrderBuyoutAndActivatePillar(base.AIEntity.Empire.Index, pillarDefinition2.Name, targetPosition);
                base.AIEntity.Empire.PlayerControllers.AI.PostOrder(order);
                return(SynchronousJobState.Running);
            }
        }
        return(SynchronousJobState.Success);
    }