Ejemplo n.º 1
0
    private void PopulateRuinorBesiegingCityMission(PointOfInterest POI)
    {
        float armyMaxPower = this.GetArmyMaxPower();
        int   num;

        if (this.region.City == null || this.region.City.Empire.Index == base.Empire.Index || this.departmentOfForeignAffairs.IsFriend(this.region.City.Empire))
        {
            num = Mathf.CeilToInt(Intelligence.GetArmiesInRegion(this.region.Index).ToList <Army>().FindAll((Army x) => this.departmentOfForeignAffairs.CanAttack(x)).Sum((Army x) => x.GetPropertyValue(SimulationProperties.MilitaryPower)) * 2f / armyMaxPower);
            for (int i = base.Missions.Count - 1; i >= 0; i--)
            {
                AICommanderMission_BesiegeCityDefault aicommanderMission_BesiegeCityDefault = base.Missions[i] as AICommanderMission_BesiegeCityDefault;
                if (aicommanderMission_BesiegeCityDefault != null)
                {
                    this.CancelMission(aicommanderMission_BesiegeCityDefault);
                }
            }
        }
        else
        {
            num  = Mathf.CeilToInt(this.intelligenceAIHelper.EvaluateMilitaryPowerOfGarrison(base.Empire, this.region.City, 0) * 1.2f / armyMaxPower);
            num += Mathf.CeilToInt(Intelligence.GetArmiesInRegion(this.region.Index).ToList <Army>().FindAll((Army x) => this.departmentOfForeignAffairs.CanAttack(x)).Sum((Army x) => x.GetPropertyValue(SimulationProperties.MilitaryPower)) * 2f / armyMaxPower);
        }
        if (num == 0)
        {
            num = 1;
        }
        else if (num > 5)
        {
            num = 5;
        }
        int num2 = 0;
        int num3 = 0;

        for (int j = 0; j < base.Missions.Count; j++)
        {
            AICommanderMission aicommanderMission = base.Missions[j];
            if (aicommanderMission != null)
            {
                if (num2 < num)
                {
                    if (!aicommanderMission.AIDataArmyGUID.IsValid)
                    {
                        num3++;
                    }
                }
                else if (num2 >= num + 2)
                {
                    this.CancelMission(aicommanderMission);
                    goto IL_1CD;
                }
                num2++;
            }
            IL_1CD :;
        }
        Tags tags = new Tags();

        if (this.POIAccessible(POI))
        {
            tags.AddTag(base.Category.ToString());
            tags.AddTag("Ruin");
            for (int k = num2; k < num; k++)
            {
                base.PopulationFirstMissionFromCategory(tags, new object[]
                {
                    this.RegionTarget,
                    base.SubObjectiveGuid
                });
            }
            return;
        }
        if (this.region.City != null && this.region.City.Empire.Index != base.Empire.Index && this.departmentOfForeignAffairs.IsAtWarWith(this.region.City.Empire))
        {
            for (int l = base.Missions.Count - 1; l >= 0; l--)
            {
                AICommanderMission_VictoryRuin aicommanderMission_VictoryRuin = base.Missions[l] as AICommanderMission_VictoryRuin;
                if (aicommanderMission_VictoryRuin != null)
                {
                    this.CancelMission(aicommanderMission_VictoryRuin);
                }
            }
            tags.AddTag("War");
            tags.AddTag("BesiegeCity");
            for (int m = num2; m < num; m++)
            {
                base.PopulationFirstMissionFromCategory(tags, new object[]
                {
                    this.region.City
                });
            }
        }
    }
Ejemplo n.º 2
0
    private void PopulateFinalRuinOrBesiegingCityMission(PointOfInterest POI)
    {
        float armyMaxPower = this.GetArmyMaxPower();
        int   num;

        if (this.region.City == null || this.region.City.Empire.Index == base.Empire.Index || this.departmentOfForeignAffairs.IsFriend(this.region.City.Empire))
        {
            num = Mathf.CeilToInt(Intelligence.GetArmiesInRegion(this.region.Index).ToList <Army>().FindAll((Army x) => this.departmentOfForeignAffairs.CanAttack(x)).Sum((Army x) => x.GetPropertyValue(SimulationProperties.MilitaryPower)) * 2f / armyMaxPower);
            for (int i = base.Missions.Count - 1; i >= 0; i--)
            {
                AICommanderMission_BesiegeCityDefault aicommanderMission_BesiegeCityDefault = base.Missions[i] as AICommanderMission_BesiegeCityDefault;
                if (aicommanderMission_BesiegeCityDefault != null)
                {
                    this.CancelMission(aicommanderMission_BesiegeCityDefault);
                }
            }
        }
        else
        {
            num  = Mathf.CeilToInt(this.intelligenceAIHelper.EvaluateMilitaryPowerOfGarrison(base.Empire, this.region.City, 0) * 1.2f / armyMaxPower);
            num += Mathf.CeilToInt(Intelligence.GetArmiesInRegion(this.region.Index).ToList <Army>().FindAll((Army x) => this.departmentOfForeignAffairs.CanAttack(x)).Sum((Army x) => x.GetPropertyValue(SimulationProperties.MilitaryPower)) * 2f / armyMaxPower);
        }
        if (num == 0)
        {
            num = 1;
        }
        else if (num > 5)
        {
            num = 5;
        }
        int num2 = 0;
        int num3 = 0;

        for (int j = 0; j < base.Missions.Count; j++)
        {
            AICommanderMission aicommanderMission = base.Missions[j];
            if (aicommanderMission != null && !(aicommanderMission is AICommanderMission_VictoryRuinFinal))
            {
                if (num2 < num)
                {
                    if (!aicommanderMission.AIDataArmyGUID.IsValid)
                    {
                        num3++;
                    }
                }
                else if (num2 >= num + 2)
                {
                    this.CancelMission(aicommanderMission);
                    goto IL_1D6;
                }
                num2++;
            }
            IL_1D6 :;
        }
        Tags tags = new Tags();

        if (this.region.City != null && this.region.City.Empire.Index != base.Empire.Index && this.departmentOfForeignAffairs.IsAtWarWith(this.region.City.Empire))
        {
            for (int k = base.Missions.Count - 1; k >= 0; k--)
            {
                AICommanderMission_DefenseRoaming aicommanderMission_DefenseRoaming = base.Missions[k] as AICommanderMission_DefenseRoaming;
                if (aicommanderMission_DefenseRoaming != null)
                {
                    this.CancelMission(aicommanderMission_DefenseRoaming);
                }
            }
            tags.AddTag("War");
            tags.AddTag("BesiegeCity");
            for (int l = num2; l < num; l++)
            {
                base.PopulationFirstMissionFromCategory(tags, new object[]
                {
                    this.region.City
                });
            }
        }
        else
        {
            tags.AddTag("WarPatrol");
            for (int m = num2; m < num; m++)
            {
                base.PopulationFirstMissionFromCategory(tags, new object[]
                {
                    this.RegionTarget,
                    true
                });
            }
        }
        if (!this.POIAccessible(POI))
        {
            for (int n = base.Missions.Count - 1; n >= 0; n--)
            {
                AICommanderMission_VictoryRuinFinal aicommanderMission_VictoryRuinFinal = base.Missions[n] as AICommanderMission_VictoryRuinFinal;
                if (aicommanderMission_VictoryRuinFinal != null)
                {
                    this.CancelMission(aicommanderMission_VictoryRuinFinal);
                }
            }
            return;
        }
        List <AICommanderMission> list = base.Missions.FindAll((AICommanderMission x) => x is AICommanderMission_VictoryRuinFinal);
        int num4 = 0;
        int num5 = -1;

        for (int num6 = list.Count - 1; num6 >= 0; num6--)
        {
            num4++;
            if (list[num6].AIDataArmyGUID.IsValid)
            {
                AIData_Army aidata = this.aiDataRepository.GetAIData <AIData_Army>(list[num6].AIDataArmyGUID);
                if (aidata != null && aidata.Army != null)
                {
                    int num7 = aidata.Army.StandardUnits.Count((Unit x) => x.UnitDesign.Name.ToString().Contains(this.VictoryDesign));
                    if (num7 > 5)
                    {
                        num5 = num6;
                        break;
                    }
                    if (num7 == 0)
                    {
                        this.CancelMission(list[num6]);
                    }
                }
            }
        }
        if (num5 > -1)
        {
            for (int num8 = list.Count - 1; num8 >= 0; num8--)
            {
                if (num8 != num5)
                {
                    this.CancelMission(list[num8]);
                }
            }
            return;
        }
        tags.Clear();
        tags.AddTag("Final");
        tags.AddTag("Ruin");
        if (this.VictoryDesign == "Preacher")
        {
            tags.AddTag("Cult");
        }
        else if (this.VictoryDesign == "MimicsUnit2")
        {
            tags.AddTag("Mykara");
        }
        else
        {
            tags.AddTag("Settler");
        }
        while (num4 < 6)
        {
            base.PopulationFirstMissionFromCategory(tags, new object[]
            {
                this.RegionTarget,
                base.SubObjectiveGuid
            });
            num4++;
        }
    }
Ejemplo n.º 3
0
    private void PopulateBesiegingCityMission(Tags tags, Region region)
    {
        float armyMaxPower = this.GetArmyMaxPower();
        int   num          = Mathf.CeilToInt(this.intelligenceAIHelper.EvaluateMilitaryPowerOfGarrison(base.Empire, region.City, 0) * this.cityMilitaryPowerFactor / armyMaxPower);

        if (num == 0)
        {
            num = 1;
        }
        else if (num > 5)
        {
            num = 5;
        }
        int num2 = 0;
        int num3 = 0;

        for (int i = 0; i < base.Missions.Count; i++)
        {
            AICommanderMission_BesiegeCityDefault aicommanderMission_BesiegeCityDefault = base.Missions[i] as AICommanderMission_BesiegeCityDefault;
            if (aicommanderMission_BesiegeCityDefault != null)
            {
                if (num2 < num)
                {
                    aicommanderMission_BesiegeCityDefault.IsReinforcement = false;
                    if (!aicommanderMission_BesiegeCityDefault.AIDataArmyGUID.IsValid)
                    {
                        num3++;
                    }
                }
                else
                {
                    if (num2 >= num + 2)
                    {
                        this.CancelMission(aicommanderMission_BesiegeCityDefault);
                        goto IL_9C;
                    }
                    aicommanderMission_BesiegeCityDefault.IsReinforcement = true;
                }
                num2++;
            }
            IL_9C :;
        }
        GlobalObjectiveMessage globalObjectiveMessage2;

        if (num2 - num3 >= num)
        {
            GlobalObjectiveMessage globalObjectiveMessage;
            if (base.AIPlayer.Blackboard.TryGetMessage <GlobalObjectiveMessage>(base.GlobalObjectiveID, out globalObjectiveMessage))
            {
                globalObjectiveMessage.ObjectiveState = "Attacking";
            }
        }
        else if (base.AIPlayer.Blackboard.TryGetMessage <GlobalObjectiveMessage>(base.GlobalObjectiveID, out globalObjectiveMessage2))
        {
            globalObjectiveMessage2.ObjectiveState = "Preparing";
        }
        for (int j = num2; j < num; j++)
        {
            tags.AddTag("BesiegeCity");
            base.PopulationFirstMissionFromCategory(tags, new object[]
            {
                region.City
            });
        }
    }