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 }); } } }
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++; } }
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 }); } }