コード例 #1
0
 protected override void ExecuteNeeds(StaticString context, StaticString pass)
 {
     base.ExecuteNeeds(context, pass);
     using (IEnumerator <EvaluableMessage_Assimilation> enumerator = base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_Assimilation>(BlackboardLayerID.Empire, (EvaluableMessage_Assimilation match) => match.EvaluationState == EvaluableMessage.EvaluableMessageState.Validate && match.ChosenBuyEvaluation != null).GetEnumerator())
     {
         if (enumerator.MoveNext())
         {
             EvaluableMessage_Assimilation evaluableMessage_Assimilation = enumerator.Current;
             this.validatedAssimilationMessage = evaluableMessage_Assimilation;
             AIScheduler.Services.GetService <ISynchronousJobRepositoryAIHelper>().RegisterSynchronousJob(new SynchronousJob(this.SynchronousJob_Assimilate));
         }
     }
 }
コード例 #2
0
    protected override void CreateLocalNeeds(StaticString context, StaticString pass)
    {
        base.CreateLocalNeeds(context, pass);
        float propertyValue = this.Empire.GetPropertyValue(SimulationProperties.MinorFactionSlotCount);
        int   count         = this.departmentOfTheInterior.AssimilatedFactions.Count;
        bool  flag          = false;

        if (propertyValue <= (float)count)
        {
            flag = true;
            if (this.game.Turn - 14 <= this.lastAssimilationTurn)
            {
                return;
            }
        }
        List <MinorFaction> list = new List <MinorFaction>();

        this.departmentOfTheInterior.GetAssimilableMinorFactions(ref list);
        if (list.Count == 0)
        {
            return;
        }
        this.UpdateUnitCategories();
        this.FactionToDeassimilate = string.Empty;
        int   num  = -1;
        float num2 = 0f;

        UnitBodyDefinition[] values = this.unitBodyDefinitionDatabase.GetValues();
        int   index = -1;
        float num3  = float.MaxValue;

        for (int i = 0; i < list.Count; i++)
        {
            Faction faction = list[i];
            bool    flag2   = this.departmentOfTheInterior.IsAssimilated(faction);
            float   num4;
            if (this.MinorfactionScores.TryGetValue(faction.Name, out num4))
            {
                float num5 = (float)this.departmentOfTheInterior.GetNumberOfOwnedMinorFactionVillages(list[i], true);
                float num6 = (float)this.departmentOfTheInterior.GetNumberOfOwnedMinorFactionVillages(list[i], false) - num5;
                float num7 = num4 * (num5 + num6 * 0.5f);
                if (flag2)
                {
                    num7 *= 1.7f;
                }
                float num8 = 0f;
                using (IEnumerator <UnitBodyDefinition> enumerator = (from match in values
                                                                      where match.Affinity != null && match.Affinity.Name == faction.Affinity.Name
                                                                      select match).GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        UnitBodyDefinition unitBodyDefinition = enumerator.Current;
                        if (flag2)
                        {
                            int num9 = 0;
                            Func <Construction, bool> < > 9__2;
                            foreach (City gameEntity in this.departmentOfTheInterior.Cities)
                            {
                                ConstructionQueue constructionQueue = this.departmentOfIndustry.GetConstructionQueue(gameEntity);
                                if (constructionQueue != null)
                                {
                                    IEnumerable <Construction> pendingConstructions = constructionQueue.PendingConstructions;
                                    Func <Construction, bool>  selector;
                                    if ((selector = < > 9__2) == null)
                                    {
                                        selector = (< > 9__2 = ((Construction c) => c.ConstructibleElement is UnitDesign && (c.ConstructibleElement as UnitDesign).UnitBodyDefinition == unitBodyDefinition && (c.GetSpecificConstructionStock(DepartmentOfTheTreasury.Resources.Production) > 0f || c.IsBuyout)));
                                    }
                                    int num10 = pendingConstructions.Count(selector);
                                    num9 += num10;
                                }
                            }
                            if (this.departmentOfTheInterior.Cities.Count < num9 * 4)
                            {
                                goto IL_2E5;
                            }
                        }
                        float num11 = this.intelligenceAIHelper.GetAIStrengthBelief(base.AIEntity.Empire.Index, unitBodyDefinition.Name);
                        if (this.UnitTypes[unitBodyDefinition.SubCategory] == 0 || (flag2 && this.UnitTypes[unitBodyDefinition.SubCategory] == 1))
                        {
                            num11 = AILayer.Boost(num11, 0.8f);
                        }
                        num8 = Mathf.Max(num8, num11);
                    }
                }
                float num12 = num7 * num8;
                if (!flag2 && (num < 0 || num12 > num2))
                {
                    num  = i;
                    num2 = num12;
                }
                if (flag2 && num12 < num3)
                {
                    index = i;
                    num3  = num12;
                }
            }
            IL_2E5 :;
        }
        if (num < 0 || num2 < 0.7f)
        {
            return;
        }
        if (flag)
        {
            if (num2 <= num3)
            {
                return;
            }
            this.FactionToDeassimilate = list[index].Name;
        }
        Faction faction2 = list[num];
        EvaluableMessage_Assimilation evaluableMessage_Assimilation = base.AIEntity.AIPlayer.Blackboard.FindFirst <EvaluableMessage_Assimilation>(BlackboardLayerID.Empire, (EvaluableMessage_Assimilation match) => match.EvaluationState == EvaluableMessage.EvaluableMessageState.Pending || match.EvaluationState == EvaluableMessage.EvaluableMessageState.Validate);

        if (evaluableMessage_Assimilation == null)
        {
            evaluableMessage_Assimilation = new EvaluableMessage_Assimilation(AILayer_AccountManager.AssimilationAccountName);
            base.AIEntity.AIPlayer.Blackboard.AddMessage(evaluableMessage_Assimilation);
        }
        evaluableMessage_Assimilation.Refresh(1f, 1f, faction2.Name);
    }