private List <Kaiju> GetFilterKaijuTargets(bool includeTamedKaijus) { List <Kaiju> list = new List <Kaiju>(); IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); foreach (global::Empire empire in (service.Game as global::Game).Empires) { if (empire is KaijuEmpire) { KaijuEmpire kaijuEmpire = empire as KaijuEmpire; if (kaijuEmpire != null && kaijuEmpire.Region != null) { KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>(); if (agency != null && agency.Kaiju != null) { list.Add(agency.Kaiju); } } } else if (includeTamedKaijus && empire is MajorEmpire && empire.Index != base.AIEntity.Empire.Index) { MajorEmpire majorEmpire = empire as MajorEmpire; foreach (Kaiju item in majorEmpire.TamedKaijus) { if (!this.departmentOfForeignAffairs.IsFriend(majorEmpire)) { list.Add(item); } } } } return(list); }
public WorldPosition GetRandomValidArmyPosition(Village village) { WorldOrientation orientation = (WorldOrientation)this.random.Next(0, 6); WorldPosition result = WorldPosition.Invalid; for (int i = 0; i < 6; i++) { WorldOrientation direction = orientation.Rotate(i); WorldPosition neighbourg = this.worldPositionningService.GetNeighbourTile(village.WorldPosition, direction, 1); int regionIndex = (int)this.worldPositionningService.GetRegionIndex(neighbourg); if (regionIndex == village.Region.Index) { if (DepartmentOfDefense.CheckWhetherTargetPositionIsValidForUseAsArmySpawnLocation(neighbourg, PathfindingMovementCapacity.Ground | PathfindingMovementCapacity.Water)) { global::Empire[] empires = (this.GameService.Game as global::Game).Empires; int j = 0; while (j < empires.Length) { global::Empire empire = empires[j]; if (!(empire is KaijuEmpire)) { goto IL_106; } KaijuEmpire kaijuEmpire = empire as KaijuEmpire; if (kaijuEmpire == null) { goto IL_106; } KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>(); if (agency == null || agency.Kaiju == null || !(agency.Kaiju.WorldPosition == neighbourg)) { goto IL_106; } IL_145: j++; continue; IL_106: if (!(empire is MajorEmpire)) { goto IL_145; } MajorEmpire majorEmpire = empire as MajorEmpire; if (majorEmpire == null || majorEmpire.TamedKaijus.Any((Kaiju m) => m.WorldPosition == neighbourg)) { goto IL_145; } goto IL_145; } District district = this.worldPositionningService.GetDistrict(neighbourg); if (district == null || !District.IsACityTile(district)) { result = neighbourg; break; } } } } return(result); }
private float GetTargetPower(IWorldPositionable worldPositionable, int size, global::Empire myEmpire, IGameService service) { DepartmentOfForeignAffairs agency = myEmpire.GetAgency <DepartmentOfForeignAffairs>(); float num = 0f; if (worldPositionable is KaijuGarrison) { num += (worldPositionable as KaijuGarrison).GetPropertyValue(SimulationProperties.MilitaryPower); } else if (worldPositionable is Kaiju && (worldPositionable as Kaiju).OnGarrisonMode()) { num += (worldPositionable as Kaiju).GetActiveTroops().GetPropertyValue(SimulationProperties.MilitaryPower); } if (size > 0) { foreach (global::Empire empire in (service.Game as global::Game).Empires) { if (empire is KaijuEmpire) { KaijuEmpire kaijuEmpire = empire as KaijuEmpire; if (kaijuEmpire != null && kaijuEmpire.Region != null) { KaijuCouncil agency2 = kaijuEmpire.GetAgency <KaijuCouncil>(); if (agency2 != null && agency2.Kaiju != null && agency2.Kaiju.IsTamed() && agency2.Kaiju.OnGarrisonMode() && this.worldPositionningService.GetDistance(worldPositionable.WorldPosition, agency2.Kaiju.WorldPosition) <= size && agency.IsEnnemy(agency2.Kaiju.MajorEmpire)) { num += agency2.Kaiju.KaijuGarrison.GetPropertyValue(SimulationProperties.MilitaryPower); } } } } List <City> list = new List <City>(); foreach (WorldPosition worldPosition in new WorldCircle(worldPositionable.WorldPosition, size).GetWorldPositions(this.worldPositionningService.World.WorldParameters)) { Army armyAtPosition = this.worldPositionningService.GetArmyAtPosition(worldPosition); if (armyAtPosition != null && !armyAtPosition.IsFomorian && agency.IsEnnemy(armyAtPosition.Empire)) { num += armyAtPosition.GetPropertyValue(SimulationProperties.MilitaryPower); } District district = this.worldPositionningService.GetDistrict(worldPosition); if (district != null && district.Empire != null && district.City != null && agency.IsEnnemy(district.Empire)) { if (district.Type == DistrictType.Camp) { num += district.City.Camp.GetPropertyValue(SimulationProperties.MilitaryPower); } else if (!list.Contains(district.City)) { num += district.City.GetPropertyValue(SimulationProperties.MilitaryPower); list.Add(district.City); } } } } return(num); }
public void FillTargets(Army army, List <IGameEntity> targets, ref List <StaticString> failureFlags) { if (targets == null) { targets = new List <IGameEntity>(); } IGameService service = Services.GetService <IGameService>(); if (service == null) { return; } IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); Diagnostics.Assert(service2 != null); IPathfindingService service3 = service.Game.Services.GetService <IPathfindingService>(); Diagnostics.Assert(service2 != null); base.ListNearbyVillages(army); if (base.PointsOfInterest.Count != 0) { for (int i = base.PointsOfInterest.Count - 1; i >= 0; i--) { PointOfInterest pointOfInterest = base.PointsOfInterest[i]; if (pointOfInterest.PointOfInterestImprovement != null && (pointOfInterest.Empire == null || pointOfInterest.Empire.Index != army.Empire.Index)) { Region region = service2.GetRegion(pointOfInterest.WorldPosition); if (region != null && region.MinorEmpire != null) { Village village = region.MinorEmpire.GetAgency <BarbarianCouncil>().Villages.FirstOrDefault((Village iterator) => iterator.WorldPosition == pointOfInterest.WorldPosition); if (village != null) { targets.Add(village); } } } } } List <WorldPosition> list = new List <WorldPosition>(); for (int j = 0; j < 6; j++) { WorldPosition neighbourTile = service2.GetNeighbourTile(army.WorldPosition, (WorldOrientation)j, 1); if (neighbourTile.IsValid && service3.IsTransitionPassable(army.WorldPosition, neighbourTile, army, PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreOtherEmpireDistrict | PathfindingFlags.IgnoreDiplomacy | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreZoneOfControl | PathfindingFlags.IgnorePOI | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons, null)) { list.Add(neighbourTile); } } List <int> list2 = new List <int>(); for (int k = 0; k < list.Count; k++) { Region region2 = service2.GetRegion(list[k]); if (region2 != null && !list2.Contains(region2.Index)) { list2.Add(region2.Index); KaijuEmpire kaijuEmpire = region2.KaijuEmpire; if (kaijuEmpire != null) { KaijuCouncil agency = kaijuEmpire.GetAgency <KaijuCouncil>(); if (agency != null) { Kaiju kaiju = agency.Kaiju; if (kaiju != null && kaiju.OnGarrisonMode()) { KaijuGarrison kaijuGarrison = kaiju.KaijuGarrison; if (kaijuGarrison != null && list.Contains(kaijuGarrison.WorldPosition)) { targets.Add(kaijuGarrison); } } } } if (region2.City != null && region2.City.Empire != null && region2.City.Empire.Index != army.Empire.Index) { for (int l = 0; l < region2.City.Districts.Count; l++) { District district = region2.City.Districts[l]; if (list.Contains(district.WorldPosition) && district.Type != DistrictType.Exploitation) { targets.Add(district); } } if (region2.City.Camp != null && list.Contains(region2.City.Camp.WorldPosition)) { targets.Add(region2.City.Camp); } } } } global::Game game = service.Game as global::Game; if (game == null) { return; } for (int m = 0; m < game.Empires.Length; m++) { if (m != army.Empire.Index) { DepartmentOfDefense agency2 = game.Empires[m].GetAgency <DepartmentOfDefense>(); if (agency2 != null) { for (int n = 0; n < agency2.Armies.Count; n++) { Army army2 = agency2.Armies[n]; if (list.Contains(army2.WorldPosition)) { if (army2 is KaijuArmy) { KaijuArmy kaijuArmy = army2 as KaijuArmy; if (kaijuArmy != null && !kaijuArmy.Kaiju.OnArmyMode()) { goto IL_389; } } targets.Add(army2); } IL_389 :; } } DepartmentOfTheInterior agency3 = game.Empires[m].GetAgency <DepartmentOfTheInterior>(); if (agency3 != null) { for (int num = 0; num < agency3.TamedKaijuGarrisons.Count; num++) { KaijuGarrison kaijuGarrison2 = agency3.TamedKaijuGarrisons[num]; if (kaijuGarrison2 != null) { Kaiju kaiju2 = kaijuGarrison2.Kaiju; if (kaiju2 != null && kaiju2.OnGarrisonMode() && list.Contains(kaijuGarrison2.WorldPosition)) { targets.Add(kaijuGarrison2); } } } } } } }