Esempio n. 1
0
	public void UnconvertAndPacifyAllConvertedVillages()
	{
		for (int i = this.ConvertedVillages.Count - 1; i >= 0; i--)
		{
			Village village = this.ConvertedVillages[i];
			if (village != null && village.Region != null)
			{
				BarbarianCouncil agency = village.Region.MinorEmpire.GetAgency<BarbarianCouncil>();
				if (agency != null)
				{
					agency.PacifyVillage(village, null);
				}
				DepartmentOfTheInterior agency2 = base.GetAgency<DepartmentOfTheInterior>();
				Diagnostics.Assert(agency2 != null);
				if (village.Region.City != null && agency2 != null && agency2.MainCity != village.Region.City)
				{
					DepartmentOfTheInterior agency3 = village.Region.City.Empire.GetAgency<DepartmentOfTheInterior>();
					Diagnostics.Assert(agency3 != null);
					agency3.BindMinorFactionToCity(village.Region.City, village.Region.MinorEmpire);
					agency3.VerifyOverallPopulation(village.Region.City);
				}
				else
				{
					agency2.UnbindConvertedVillage(village);
				}
			}
		}
	}
Esempio n. 2
0
    public override void CleanAfterEncounter(Encounter encounter)
    {
        BarbarianCouncil agency = this.MinorEmpire.GetAgency <BarbarianCouncil>();

        agency.CleanVillageAfterEncounter(this, encounter);
        base.LeaveEncounter();
    }
Esempio n. 3
0
    private bool CanTransferTo(Army army, WorldPosition worldPosition, ref bool atLeastOneNeighbourgCityWithNotEnoughSlotsLeft, ref bool atLeastOneNeighbourgVillageWithNotEnoughSlotsLeft, IWorldPositionningService worldPositionningService, int transferringUnitSlot)
    {
        Region region = worldPositionningService.GetRegion(worldPosition);

        if (region.City != null && region.City.Empire == army.Empire)
        {
            int i = 0;
            while (i < region.City.Districts.Count)
            {
                if (region.City.Districts[i].Type != DistrictType.Exploitation && region.City.Districts[i].Type != DistrictType.Improvement && worldPosition == region.City.Districts[i].WorldPosition)
                {
                    if (transferringUnitSlot + region.City.CurrentUnitSlot > region.City.MaximumUnitSlot)
                    {
                        atLeastOneNeighbourgCityWithNotEnoughSlotsLeft = true;
                        break;
                    }
                    if (army.WorldPosition == worldPosition)
                    {
                        return(true);
                    }
                    if (region.City.BesiegingEmpireIndex < 0 || (army.Hero != null && army.Hero.CheckUnitAbility(UnitAbility.UnitAbilityAllowAssignationUnderSiege, -1)))
                    {
                        return(true);
                    }
                    break;
                }
                else
                {
                    i++;
                }
            }
        }
        if (region != null && region.MinorEmpire != null)
        {
            BarbarianCouncil agency = region.MinorEmpire.GetAgency <BarbarianCouncil>();
            if (agency != null)
            {
                Village villageAt = agency.GetVillageAt(worldPosition);
                if (villageAt != null && villageAt.HasBeenConverted && villageAt.Converter == army.Empire)
                {
                    if (transferringUnitSlot + villageAt.CurrentUnitSlot <= villageAt.MaximumUnitSlot)
                    {
                        return(true);
                    }
                    atLeastOneNeighbourgVillageWithNotEnoughSlotsLeft = true;
                }
            }
        }
        return((region != null && region.City != null && region.City.Camp != null && worldPosition == region.City.Camp.WorldPosition && region.City.Camp.Empire == army.Empire && transferringUnitSlot + region.City.Camp.CurrentUnitSlot <= region.City.Camp.MaximumUnitSlot) || (region != null && region.Kaiju != null && region.Kaiju.KaijuGarrison != null && worldPosition == region.Kaiju.KaijuGarrison.WorldPosition && region.Kaiju.Empire.Index == army.Empire.Index && DepartmentOfScience.IsTechnologyResearched(army.Empire, "TechnologyDefinitionMimics1") && transferringUnitSlot + region.Kaiju.KaijuGarrison.CurrentUnitSlot <= region.Kaiju.KaijuGarrison.MaximumUnitSlot));
    }
Esempio n. 4
0
    private void ComputeVillageScoring()
    {
        this.villagePOI.Clear();
        DepartmentOfTheInterior agency = this.OtherEmpire.GetAgency <DepartmentOfTheInterior>();

        for (int i = 0; i < agency.Cities.Count; i++)
        {
            MinorEmpire minorEmpire = agency.Cities[i].Region.MinorEmpire;
            if (minorEmpire != null)
            {
                BarbarianCouncil council = minorEmpire.GetAgency <BarbarianCouncil>();
                if (council != null)
                {
                    bool flag = agency.IsAssimilated(minorEmpire.MinorFaction);
                    int  villageIndex2;
                    int  villageIndex;
                    Predicate <DissentTask_Empire.VillageScoring> < > 9__1;
                    for (villageIndex = 0; villageIndex < council.Villages.Count; villageIndex = villageIndex2 + 1)
                    {
                        if (council.Villages[villageIndex].HasBeenPacified && !council.Villages[villageIndex].HasBeenConverted && !council.Villages[villageIndex].HasBeenInfected)
                        {
                            List <DissentTask_Empire.VillageScoring>      list = this.villagePOI;
                            Predicate <DissentTask_Empire.VillageScoring> match2;
                            if ((match2 = < > 9__1) == null)
                            {
                                match2 = (< > 9__1 = ((DissentTask_Empire.VillageScoring match) => match.Village.GUID == council.Villages[villageIndex].GUID));
                            }
                            DissentTask_Empire.VillageScoring villageScoring = list.Find(match2);
                            if (villageScoring == null)
                            {
                                villageScoring = new DissentTask_Empire.VillageScoring(council.Villages[villageIndex]);
                                this.villagePOI.Add(villageScoring);
                            }
                            villageScoring.Reset();
                            if (flag)
                            {
                                villageScoring.Score.Boost(0.2f, "Assimilated", new object[0]);
                            }
                            if (this.visibilityService.IsWorldPositionVisibleFor(villageScoring.Village.WorldPosition, base.Owner))
                            {
                                villageScoring.Score.Boost(0.2f, "Visible", new object[0]);
                            }
                        }
                        villageIndex2 = villageIndex;
                    }
                }
            }
        }
        this.villagePOI.Sort((DissentTask_Empire.VillageScoring left, DissentTask_Empire.VillageScoring right) => - 1 * left.Score.CompareTo(right.Score));
    }
Esempio n. 5
0
 private void UpdatePacificationStatusOfRegion(global::Empire empire, Region region, AIRegionData regionData)
 {
     regionData.VillageTotalCount = 0;
     regionData.VillagePacifiedOrConvertedByMeCount = 0;
     regionData.VillageConvertedByOtherCount        = 0;
     regionData.VillageNotPacified      = 0;
     regionData.VillageDestroyed        = 0;
     regionData.VillagePacifiedAndBuilt = 0;
     if (region.MinorEmpire != null)
     {
         BarbarianCouncil agency = region.MinorEmpire.GetAgency <BarbarianCouncil>();
         if (agency != null)
         {
             regionData.VillageTotalCount = agency.Villages.Count;
             for (int i = 0; i < agency.Villages.Count; i++)
             {
                 Village village = agency.Villages[i];
                 if (village.HasBeenConverted)
                 {
                     if (village.Converter.Index != empire.Index)
                     {
                         regionData.VillageConvertedByOtherCount++;
                         regionData.VillageNotPacified++;
                     }
                     else
                     {
                         regionData.VillagePacifiedOrConvertedByMeCount++;
                         regionData.VillagePacifiedAndBuilt++;
                     }
                 }
                 else if (village.HasBeenPacified)
                 {
                     regionData.VillagePacifiedOrConvertedByMeCount++;
                     if (village.PointOfInterest.PointOfInterestImprovement == null)
                     {
                         regionData.VillageDestroyed++;
                     }
                     else
                     {
                         regionData.VillagePacifiedAndBuilt++;
                     }
                 }
                 else
                 {
                     regionData.VillageNotPacified++;
                 }
             }
         }
     }
 }
Esempio n. 6
0
    private Village GetVillageFromPointOfInterest(PointOfInterest pointOfInterest, IWorldPositionningService worldPositionningService = null)
    {
        if (worldPositionningService == null)
        {
            IGameService service = Services.GetService <IGameService>();
            Diagnostics.Assert(service != null);
            Diagnostics.Assert(service.Game != null);
            worldPositionningService = service.Game.Services.GetService <IWorldPositionningService>();
            Diagnostics.Assert(worldPositionningService != null);
        }
        Region region = worldPositionningService.GetRegion(pointOfInterest.WorldPosition);

        if (region != null && region.MinorEmpire != null)
        {
            BarbarianCouncil agency = region.MinorEmpire.GetAgency <BarbarianCouncil>();
            return(agency.GetVillageAt(pointOfInterest.WorldPosition));
        }
        return(null);
    }
    private List <IWorldPositionable> Execute_GetVillages(AIBehaviorTree aiBehaviorTree, Army army, IGameService gameService, List <IWorldPositionable> unfilteredTargetList)
    {
        List <IWorldPositionable> list = new List <IWorldPositionable>();

        for (int i = 0; i < unfilteredTargetList.Count; i++)
        {
            PointOfInterest pointOfInterest = unfilteredTargetList[i] as PointOfInterest;
            if (pointOfInterest != null && !(pointOfInterest.Type != "Village") && pointOfInterest.Region != null && pointOfInterest.Region.MinorEmpire != null)
            {
                BarbarianCouncil agency = pointOfInterest.Region.MinorEmpire.GetAgency <BarbarianCouncil>();
                if (agency != null)
                {
                    Village villageAt = agency.GetVillageAt(pointOfInterest.WorldPosition);
                    if (villageAt != null && !villageAt.HasBeenPacified && this.TypeOfDiplomaticRelation != "VillageConvert" && pointOfInterest.PointOfInterestImprovement != null && !villageAt.HasBeenInfected)
                    {
                        list.Add(villageAt);
                    }
                    else if (this.TypeOfDiplomaticRelation == "VillageConvert" && army.Empire is MajorEmpire && army.Empire.SimulationObject.Tags.Contains(AILayer_Village.TagConversionTrait) && villageAt.HasBeenPacified && DepartmentOfTheInterior.IsArmyAbleToConvert(army, true) && !villageAt.HasBeenConverted && !villageAt.HasBeenInfected)
                    {
                        DepartmentOfForeignAffairs agency2 = aiBehaviorTree.AICommander.Empire.GetAgency <DepartmentOfForeignAffairs>();
                        City city = villageAt.Region.City;
                        if (city != null && city.Empire != aiBehaviorTree.AICommander.Empire)
                        {
                            DiplomaticRelation diplomaticRelation = agency2.GetDiplomaticRelation(city.Empire);
                            if (diplomaticRelation == null || diplomaticRelation.State.Name != DiplomaticRelationState.Names.War || (diplomaticRelation.State.Name == DiplomaticRelationState.Names.War && pointOfInterest.PointOfInterestImprovement == null))
                            {
                                goto IL_1FB;
                            }
                        }
                        float num;
                        army.Empire.GetAgency <DepartmentOfTheTreasury>().TryGetResourceStockValue(army.Empire.SimulationObject, DepartmentOfTheTreasury.Resources.EmpirePoint, out num, false);
                        if (AILayer_Village.GetVillageConversionCost(army.Empire as MajorEmpire, villageAt) * 2f < num)
                        {
                            list.Add(villageAt);
                        }
                    }
                }
            }
            IL_1FB :;
        }
        return(list);
    }
Esempio n. 8
0
    private void UpdateEmpireInfo(global::Empire empire, ref float numberOfVillage, ref float villageUnitCountAverage, ref float numberOfArmies, ref float armyUnitCountAverage, ref float maxMilitaryPower)
    {
        if (empire == null)
        {
            return;
        }
        DepartmentOfDefense agency = empire.GetAgency <DepartmentOfDefense>();

        if (agency.Armies.Count > 0)
        {
            numberOfArmies += (float)agency.Armies.Count;
            for (int i = 0; i < agency.Armies.Count; i++)
            {
                armyUnitCountAverage += (float)agency.Armies[i].UnitsCount;
                float propertyValue = agency.Armies[i].GetPropertyValue(SimulationProperties.MilitaryPower);
                if (maxMilitaryPower < propertyValue)
                {
                    maxMilitaryPower = propertyValue;
                }
            }
        }
        BarbarianCouncil agency2 = empire.GetAgency <BarbarianCouncil>();

        if (agency2 != null)
        {
            for (int j = 0; j < agency2.Villages.Count; j++)
            {
                if (!agency2.Villages[j].HasBeenPacified || (agency2.Villages[j].HasBeenConverted && agency2.Villages[j].Converter != this.empire))
                {
                    villageUnitCountAverage += (float)agency2.Villages[j].UnitsCount;
                    numberOfVillage         += 1f;
                    float propertyValue2 = agency2.Villages[j].GetPropertyValue(SimulationProperties.MilitaryPower);
                    if (maxMilitaryPower < propertyValue2)
                    {
                        maxMilitaryPower = propertyValue2;
                    }
                }
            }
        }
    }
Esempio n. 9
0
    private bool TransferTo(Army army, WorldPosition worldPosition, List <GameEntityGUID> units, IWorldPositionningService worldPositionningService, global::PlayerController playerController, out Ticket ticket, EventHandler <TicketRaisedEventArgs> ticketRaisedEventHandler)
    {
        Region         region         = worldPositionningService.GetRegion(worldPosition);
        GameEntityGUID gameEntityGUID = GameEntityGUID.Zero;

        ticket = null;
        if (region.MinorEmpire != null)
        {
            BarbarianCouncil agency = region.MinorEmpire.GetAgency <BarbarianCouncil>();
            if (agency != null)
            {
                Village villageAt = agency.GetVillageAt(worldPosition);
                if (villageAt != null)
                {
                    gameEntityGUID = villageAt.GUID;
                }
            }
        }
        if (region.City != null && region.City.Camp != null && gameEntityGUID == GameEntityGUID.Zero && region.City.Camp.WorldPosition == worldPosition)
        {
            gameEntityGUID = region.City.Camp.GUID;
        }
        if (region.City != null && gameEntityGUID == GameEntityGUID.Zero)
        {
            gameEntityGUID = region.City.GUID;
        }
        if (region.Kaiju != null && region.Kaiju.KaijuGarrison != null && gameEntityGUID == GameEntityGUID.Zero && DepartmentOfScience.IsTechnologyResearched(army.Empire, "TechnologyDefinitionMimics1") && region.Kaiju.KaijuGarrison.WorldPosition == worldPosition)
        {
            gameEntityGUID = region.Kaiju.KaijuGarrison.GUID;
        }
        if (gameEntityGUID != GameEntityGUID.Zero)
        {
            OrderTransferUnits order = new OrderTransferUnits(army.Empire.Index, army.GUID, gameEntityGUID, units.ToArray(), false);
            playerController.PostOrder(order, out ticket, ticketRaisedEventHandler);
            return(true);
        }
        return(false);
    }
Esempio n. 10
0
	protected override IEnumerator OnLoad()
	{
		if (this.convertedVillages != null)
		{
			for (int index = 0; index < this.convertedVillages.Count; index++)
			{
				Village village = this.convertedVillages[index];
				village.Empire = null;
				Diagnostics.Assert(village.PointOfInterest != null);
				Diagnostics.Assert(village.PointOfInterest.Region != null);
				MinorEmpire minorEmpire = village.PointOfInterest.Region.MinorEmpire;
				Diagnostics.Assert(minorEmpire != null);
				BarbarianCouncil barbarianCouncil = minorEmpire.GetAgency<BarbarianCouncil>();
				Diagnostics.Assert(barbarianCouncil != null);
				barbarianCouncil.AddVillage(village);
				barbarianCouncil.AddConvertVillageOnLoad(village, this);
				DepartmentOfTheInterior.GenerateFIMSEForConvertedVillage(this, village.PointOfInterest);
			}
		}
		if (this.InfectedVillages != null)
		{
			for (int index2 = 0; index2 < this.InfectedVillages.Count; index2++)
			{
				Village village2 = this.InfectedVillages[index2];
				village2.Empire = null;
				Diagnostics.Assert(village2.PointOfInterest != null);
				Diagnostics.Assert(village2.PointOfInterest.Region != null);
				MinorEmpire minorEmpire2 = village2.PointOfInterest.Region.MinorEmpire;
				Diagnostics.Assert(minorEmpire2 != null);
				BarbarianCouncil barbarianCouncil2 = minorEmpire2.GetAgency<BarbarianCouncil>();
				Diagnostics.Assert(barbarianCouncil2 != null);
				barbarianCouncil2.AddVillage(village2);
			}
		}
		yield return base.OnLoad();
		yield break;
	}
Esempio n. 11
0
    public bool TryGetListOfTargetInRange(Army inputArmy, int targetEmpireIndex, bool addPointsOfInterest, int regionRestriction, ref List <IWorldPositionable> targetList)
    {
        if (targetList == null)
        {
            targetList = new List <IWorldPositionable>();
        }
        if (inputArmy == null || inputArmy.Empire == null)
        {
            return(false);
        }
        DepartmentOfForeignAffairs departmentOfForeignAffairs = null;
        bool flag  = inputArmy.Empire is MinorEmpire;
        bool flag2 = inputArmy.Empire is NavalEmpire;

        if (!flag && !flag2)
        {
            departmentOfForeignAffairs = inputArmy.Empire.GetAgency <DepartmentOfForeignAffairs>();
        }
        if (addPointsOfInterest)
        {
            for (int i = 0; i < this.World.Regions.Length; i++)
            {
                for (int j = 0; j < this.World.Regions[i].PointOfInterests.Length; j++)
                {
                    PointOfInterest pointOfInterest = this.World.Regions[i].PointOfInterests[j];
                    if (this.GetDistance(pointOfInterest.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == pointOfInterest.Region.Index))
                    {
                        targetList.Add(pointOfInterest);
                    }
                }
            }
        }
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        global::Game game = service.Game as global::Game;

        for (int k = 0; k < game.Empires.Length; k++)
        {
            global::Empire empire = game.Empires[k];
            if (((!flag && !flag2) || empire is MajorEmpire) && (targetEmpireIndex == -1 || targetEmpireIndex == k))
            {
                DepartmentOfDefense agency = empire.GetAgency <DepartmentOfDefense>();
                if (agency != null)
                {
                    int l = 0;
                    while (l < agency.Armies.Count)
                    {
                        Army army = agency.Armies[l];
                        if (flag || flag2)
                        {
                            if (!army.IsPrivateers)
                            {
                                bool flag3 = false;
                                for (int m = 0; m < army.StandardUnits.Count; m++)
                                {
                                    if (army.StandardUnits[m].SimulationObject.Tags.Contains(WorldPositionning.FriendlyBannerDescriptor))
                                    {
                                        flag3 = true;
                                    }
                                }
                                if ((army.Hero == null || !army.Hero.IsSkillUnlocked(WorldPositionning.FriendlyBannerSkill)) && !flag3)
                                {
                                    int   distance      = this.GetDistance(army.WorldPosition, inputArmy.WorldPosition);
                                    float propertyValue = inputArmy.GetPropertyValue(SimulationProperties.DetectionRange);
                                    if (!army.IsCamouflaged)
                                    {
                                        goto IL_240;
                                    }
                                    if ((float)distance <= propertyValue)
                                    {
                                        goto IL_240;
                                    }
                                }
                            }
                        }
                        else if (army.Empire == inputArmy.Empire || !army.IsCamouflaged || this.VisibilityService.IsWorldPositionDetectedFor(army.WorldPosition, inputArmy.Empire))
                        {
                            goto IL_240;
                        }
IL_238:
                        l++;
                        continue;
IL_240:
                        if (this.GetDistance(army.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == (int)this.GetRegionIndex(army.WorldPosition)))
                        {
                            targetList.Add(army);
                            goto IL_238;
                        }
                        goto IL_238;
                    }
                }
                if (empire is MajorEmpire)
                {
                    DepartmentOfTheInterior agency2 = empire.GetAgency <DepartmentOfTheInterior>();
                    if (agency2 != null)
                    {
                        for (int n = 0; n < agency2.Cities.Count; n++)
                        {
                            City city = agency2.Cities[n];
                            if ((city.Empire == inputArmy.Empire || flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(city)) && this.GetDistance(city.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == city.Region.Index))
                            {
                                targetList.Add(city);
                            }
                        }
                        for (int num = 0; num < agency2.Camps.Count; num++)
                        {
                            Camp camp = agency2.Camps[num];
                            if ((camp.Empire == inputArmy.Empire || flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(camp)) && this.GetDistance(camp.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == camp.City.Region.Index))
                            {
                                targetList.Add(camp);
                            }
                        }
                    }
                    MajorEmpire majorEmpire = empire as MajorEmpire;
                    for (int num2 = 0; num2 < majorEmpire.ConvertedVillages.Count; num2++)
                    {
                        Village village = majorEmpire.ConvertedVillages[num2];
                        if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(village)) && this.GetDistance(village.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == village.Region.Index))
                        {
                            targetList.Add(village);
                        }
                    }
                }
                else if (empire is MinorEmpire)
                {
                    BarbarianCouncil agency3 = empire.GetAgency <BarbarianCouncil>();
                    if (agency3 != null)
                    {
                        for (int num3 = 0; num3 < agency3.Villages.Count; num3++)
                        {
                            Village village2 = agency3.Villages[num3];
                            if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(village2)) && this.GetDistance(village2.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == village2.Region.Index))
                            {
                                targetList.Add(village2);
                            }
                        }
                    }
                }
                else if (empire is NavalEmpire)
                {
                    PirateCouncil agency4 = empire.GetAgency <PirateCouncil>();
                    if (agency4 != null)
                    {
                        for (int num4 = 0; num4 < agency4.Fortresses.Count; num4++)
                        {
                            Fortress fortress = agency4.Fortresses[num4];
                            if ((flag || flag2 || departmentOfForeignAffairs == null || departmentOfForeignAffairs.CanAttack(fortress)) && this.GetDistance(fortress.WorldPosition, inputArmy.WorldPosition) <= inputArmy.LineOfSightVisionRange && (regionRestriction == -1 || regionRestriction == fortress.Region.Index))
                            {
                                targetList.Add(fortress);
                            }
                        }
                    }
                }
            }
        }
        return(targetList.Count != 0);
    }
Esempio n. 12
0
    public override bool CanExecute(Army army, ref List <StaticString> failureFlags, params object[] parameters)
    {
        this.lastConvertCostDescription = string.Empty;
        if (!base.CanExecute(army, ref failureFlags, parameters))
        {
            return(false);
        }
        if (army.IsNaval)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
            return(false);
        }
        IGameService service = Services.GetService <IGameService>();

        if (service == null)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileSystemError);
            return(false);
        }
        global::Game x = service.Game as global::Game;

        if (x == null)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileSystemError);
            return(false);
        }
        IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>();

        if (service2 == null)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileSystemError);
            return(false);
        }
        if (parameters == null)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
            return(false);
        }
        if (parameters.Length == 0)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
            return(false);
        }
        List <Village> list = new List <Village>();

        for (int i = 0; i < parameters.Length; i++)
        {
            if (parameters[i] is Village)
            {
                list.Add(parameters[i] as Village);
            }
            else if (parameters[i] is List <IGameEntity> )
            {
                List <IGameEntity> list2 = parameters[i] as List <IGameEntity>;
                for (int j = 0; j < list2.Count; j++)
                {
                    if (list2[j] is Village)
                    {
                        list.Add(parameters[i] as Village);
                    }
                    else if (list2[j] is PointOfInterest)
                    {
                        PointOfInterest pointOfInterest = list2[j] as PointOfInterest;
                        Region          region          = service2.GetRegion(pointOfInterest.WorldPosition);
                        if (region != null && region.MinorEmpire != null)
                        {
                            BarbarianCouncil agency    = region.MinorEmpire.GetAgency <BarbarianCouncil>();
                            Village          villageAt = agency.GetVillageAt(pointOfInterest.WorldPosition);
                            if (villageAt != null)
                            {
                                list.Add(villageAt);
                            }
                        }
                    }
                }
            }
        }
        if (list.Count == 0)
        {
            failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
            return(false);
        }
        if (!this.ArmyCanConvert(army, failureFlags))
        {
            return(false);
        }
        DepartmentOfTheTreasury agency2 = army.Empire.GetAgency <DepartmentOfTheTreasury>();

        for (int k = list.Count - 1; k >= 0; k--)
        {
            if (!this.CanConvertVillage(army, list[k], agency2, failureFlags))
            {
                list.RemoveAt(k);
            }
        }
        if (list.Count == 0)
        {
            return(false);
        }
        ArmyAction.FailureFlags.Clear();
        return(true);
    }
Esempio n. 13
0
    protected override IEnumerator OnShow(params object[] parameters)
    {
        this.Description.AgeTransform.Height = 0f;
        this.Description.Text = string.Empty;
        if (this.content.StartsWith("%"))
        {
            this.Description.Text = this.content;
        }
        else if (this.technologyOnly && this.context is MultipleConstructibleTooltipData)
        {
            GuiElement guiElement;
            if (base.GuiService.GuiPanelHelper.TryGetGuiElement((this.context as MultipleConstructibleTooltipData).TechnologyDefinition.Name, out guiElement))
            {
                this.Description.Text = guiElement.Description;
            }
        }
        else if (this.context is IDescriptionFeatureProvider)
        {
            this.Description.Text = (this.context as IDescriptionFeatureProvider).Description;
        }
        else
        {
            IGuiEntity guiEntity = this.context as IGuiEntity;
            GuiElement guiElement2;
            if (this.context != null && guiEntity != null && guiEntity.Gui != null)
            {
                this.Description.Text = guiEntity.Gui.Description;
            }
            else if (base.GuiService.GuiPanelHelper.TryGetGuiElement(this.content, out guiElement2))
            {
                this.Description.Text = guiElement2.Description;
            }
            else
            {
                this.Description.Text = this.content;
            }
        }
        if (this.context is CreepingNode || this.context is PointOfInterest || this.context is Village)
        {
            WorldPosition worldPosition;
            if (this.context is PointOfInterest)
            {
                worldPosition = (this.context as PointOfInterest).WorldPosition;
            }
            else if (this.context is CreepingNode)
            {
                worldPosition = (this.context as CreepingNode).WorldPosition;
            }
            else
            {
                worldPosition = (this.context as Village).WorldPosition;
            }
            Region region = Services.GetService <IGameService>().Game.Services.GetService <IWorldPositionningService>().GetRegion(worldPosition);
            if (region.IsLand && !region.IsWasteland && region.MinorEmpire != null)
            {
                BarbarianCouncil agency = region.MinorEmpire.GetAgency <BarbarianCouncil>();
                if (agency != null && agency.GetVillageAt(worldPosition) != null)
                {
                    global::IGuiService      service      = Services.GetService <global::IGuiService>();
                    List <EffectDescription> list         = new List <EffectDescription>();
                    MinorFaction             minorFaction = region.MinorEmpire.MinorFaction;
                    if (minorFaction != null)
                    {
                        service.GuiSimulationParser.ParseSimulationDescriptor(minorFaction, list, null, false, false);
                        this.Description.Text = AgeLocalizer.Instance.LocalizeString(this.Description.Text);
                        foreach (EffectDescription effectDescription in list)
                        {
                            if (effectDescription == list[0])
                            {
                                AgePrimitiveLabel description = this.Description;
                                description.Text = description.Text + "\n \n#FFB43F#" + AgeLocalizer.Instance.LocalizeString("%EffectsOnEmpireTitle") + "#REVERT#";
                            }
                            AgePrimitiveLabel description2 = this.Description;
                            description2.Text = description2.Text + "\n" + effectDescription.ToString();
                        }
                    }
                }
            }
        }
        if (!string.IsNullOrEmpty(this.Description.Text))
        {
            this.Description.AgeTransform.Width = this.DefaultWidth - this.Description.AgeTransform.PixelMarginLeft - this.Description.AgeTransform.PixelMarginRight;
            this.Description.ComputeText();
            base.AgeTransform.Height = this.Description.Font.LineHeight * (float)this.Description.TextLines.Count + this.Description.AgeTransform.PixelMarginTop + this.Description.AgeTransform.PixelMarginBottom;
            if (this.Description.TextLines.Count == 1)
            {
                base.AgeTransform.Width = this.Description.AgeTransform.PixelMarginLeft + this.Description.Font.ComputeTextWidth(this.Description.TextLines[0], false, true) + this.Description.AgeTransform.PixelMarginRight;
            }
            else
            {
                base.AgeTransform.Width = this.DefaultWidth;
            }
        }
        yield return(base.OnShow(parameters));

        yield break;
    }