private static bool ValidateTarget(Army myArmy, IGameEntity gameEntity, DepartmentOfForeignAffairs departmentOfForeignAffairs, bool canAttack, IGameEntityRepositoryService gameEntityRepositoryService, IWorldPositionningService worldPositionningService) { if (gameEntity == null) { return(false); } if (!gameEntityRepositoryService.Contains(gameEntity.GUID)) { return(false); } if (departmentOfForeignAffairs != null) { IGarrison garrison = gameEntity as IGarrison; if (gameEntity is Kaiju) { garrison = (gameEntity as Kaiju).GetActiveTroops(); gameEntity = garrison; } IWorldPositionable worldPositionable = gameEntity as IWorldPositionable; Region region = worldPositionningService.GetRegion(worldPositionable.WorldPosition); if (garrison == null || worldPositionable == null) { return(false); } if (canAttack) { if (!departmentOfForeignAffairs.CanAttack(gameEntity) || garrison.Empire.Index == myArmy.Empire.Index) { return(false); } } else if (!departmentOfForeignAffairs.IsEnnemy(garrison.Empire)) { return(false); } if ((garrison.Empire is MinorEmpire || garrison is Village) && region != null && region.IsRegionColonized() && departmentOfForeignAffairs != null && departmentOfForeignAffairs.IsEnnemy(region.Owner)) { return(false); } } Army army = gameEntity as Army; if (army != null) { if (myArmy.Empire is LesserEmpire && !(army.Empire is MajorEmpire)) { return(false); } District district = worldPositionningService.GetDistrict(army.WorldPosition); if (district != null && district.Type != DistrictType.Exploitation && army.Empire == district.Empire) { return(false); } if (!myArmy.HasSeafaringUnits() && army.IsNaval) { return(false); } } return(true); }
public static bool GetsFortificationBonus(IWorldPositionningService worldPositionningService, IGarrison garrison, City city) { if (garrison == null || city == null) { return(false); } District district = worldPositionningService.GetDistrict((garrison as IWorldPositionable).WorldPosition); return(district != null && District.IsACityTile(district) && district.City == city && district.City.Empire == garrison.Empire); }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) > AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } if (aiBehaviorTree.AICommander.Empire == null) { aiBehaviorTree.ErrorCode = 10; return(State.Failure); } IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); Diagnostics.Assert(service2 != null); District district = service2.GetDistrict(army.WorldPosition); if (district != null && district.Empire.Index == army.Empire.Index && district.City.BesiegingEmpire != null) { if (this.Inverted) { return(State.Failure); } City city = district.City; if (aiBehaviorTree.Variables.ContainsKey(this.Output_TargetVarName)) { aiBehaviorTree.Variables[this.Output_TargetVarName] = city; } else { aiBehaviorTree.Variables.Add(this.Output_TargetVarName, city); } return(State.Success); } else { if (this.Inverted) { return(State.Success); } return(State.Failure); } }
public void DisableIfArmyisBeingBesieged() { IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); Diagnostics.Assert(service.Game != null); IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); if (service2 != null) { District district = service2.GetDistrict(this.Army.WorldPosition); if (district != null && district.City != null && district.City.BesiegingEmpire != null) { this.AgeTransform.Enable = false; this.AgeTransform.StopSearchingForTooltips = true; this.AgeTransform.AgeTooltip.Content = string.Empty; } } }
public override State CheckCondition(QuestBehaviour questBehaviour, GameEvent gameEvent, params object[] parameters) { this.Initialize(questBehaviour); this.RefreshVar(questBehaviour); if (this.CityGUID != GameEntityGUID.Zero) { IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); if (service.Game as global::Game == null) { return(State.Failure); } IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); global::Empire empire; if (gameEvent != null) { empire = (gameEvent.Empire as global::Empire); } else { empire = questBehaviour.Initiator; } Diagnostics.Assert(empire.GetAgency <DepartmentOfForeignAffairs>() != null); Army army = empire.GetAgency <DepartmentOfDefense>().GetArmy(this.ArmyGuid); if (army == null) { return(State.Failure); } District district = service2.GetDistrict(army.WorldPosition); if (district == null) { return(State.Failure); } if (district.City.GUID == this.CityGUID) { return(State.Success); } } return(State.Failure); }
public static bool IsELCPCityBattle(IWorldPositionningService worldPositionningService, List <IGarrison> MainContenders, out List <City> cities) { cities = new List <City>(); if (worldPositionningService == null) { Diagnostics.LogError("worldPositionningService"); } foreach (IGarrison garrison in MainContenders) { if (!(garrison is IWorldPositionable)) { Diagnostics.LogError("garrison {0}", new object[] { garrison.LocalizedName }); } District district = worldPositionningService.GetDistrict((garrison as IWorldPositionable).WorldPosition); if (!worldPositionningService.IsWaterTile((garrison as IWorldPositionable).WorldPosition) && district != null && district.City != null && (District.IsACityTile(district) || district.Type == DistrictType.Exploitation) && !cities.Exists((City C) => C.GUID == district.City.GUID)) { cities.Add(district.City); } } return(cities.Count > 0); }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { if (this.ticket != null) { if (!this.orderExecuted) { return(State.Running); } if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed) { this.orderExecuted = false; this.ticket = null; aiBehaviorTree.ErrorCode = 1; return(State.Failure); } this.orderExecuted = false; this.ticket = null; return(State.Success); } else { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } float propertyValue = army.GetPropertyValue(SimulationProperties.MaximumNumberOfActionPoints); float propertyValue2 = army.GetPropertyValue(SimulationProperties.ActionPointsSpent); if (propertyValue <= propertyValue2) { aiBehaviorTree.ErrorCode = 33; return(State.Failure); } if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName)) { aiBehaviorTree.LogError("${0} not set", new object[] { this.TargetVarName }); return(State.Failure); } IGameEntity target = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity; if (!(target is IWorldPositionable)) { return(State.Failure); } IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); if (!service.Game.Services.GetService <IGameEntityRepositoryService>().Contains(target.GUID)) { return(State.Success); } IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); IEnumerable <Encounter> service3 = service.Game.Services.GetService <IEncounterRepositoryService>(); if (service3 != null && service3.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(army.GUID, false) || encounter.IsGarrisonInEncounter(target.GUID, false))) { return(State.Running); } IGarrison garrison; if (target is Kaiju) { Kaiju kaiju = target as Kaiju; garrison = kaiju.GetActiveTroops(); if (kaiju.IsStunned()) { return(State.Failure); } } else { if (target is KaijuArmy) { KaijuArmy kaijuArmy = target as KaijuArmy; if (kaijuArmy != null && kaijuArmy.Kaiju.IsStunned()) { return(State.Failure); } } else if (target is KaijuGarrison) { KaijuGarrison kaijuGarrison = target as KaijuGarrison; if (kaijuGarrison != null && kaijuGarrison.Kaiju.IsStunned()) { return(State.Failure); } } garrison = (target as IGarrison); if (garrison == null) { return(State.Failure); } } if ((army.Empire is MinorEmpire || army.Empire is NavalEmpire) && garrison.Hero != null && garrison.Hero.IsSkillUnlocked("HeroSkillLeaderMap07")) { return(State.Failure); } if (garrison.Empire.Index == aiBehaviorTree.AICommander.Empire.Index) { return(State.Failure); } this.orderExecuted = false; GameEntityGUID guid = target.GUID; if (target is City) { Diagnostics.Assert(AIScheduler.Services != null); IEntityInfoAIHelper service4 = AIScheduler.Services.GetService <IEntityInfoAIHelper>(); Diagnostics.Assert(service4 != null); City city = target as City; if (city.BesiegingEmpire != null && city.BesiegingEmpire != aiBehaviorTree.AICommander.Empire) { return(State.Failure); } District districtToAttackFrom = service4.GetDistrictToAttackFrom(army, city); if (districtToAttackFrom == null) { aiBehaviorTree.ErrorCode = 12; return(State.Failure); } guid = districtToAttackFrom.GUID; } else if (target is Camp) { Camp camp = target as Camp; IWorldPositionable worldPositionable = target as IWorldPositionable; if (worldPositionable == null) { return(State.Failure); } if (service2.GetDistance(army.WorldPosition, worldPositionable.WorldPosition) != 1) { aiBehaviorTree.ErrorCode = 12; return(State.Failure); } guid = camp.GUID; } else if (target is Fortress) { guid = target.GUID; } else { Village village = target as Village; if (village != null && (village.HasBeenPacified || (village.HasBeenConverted && village.Converter == aiBehaviorTree.AICommander.Empire) || village.HasBeenInfected)) { return(State.Failure); } Diagnostics.Assert(AIScheduler.Services != null); IWorldPositionable worldPositionable2 = target as IWorldPositionable; if (worldPositionable2 == null) { return(State.Failure); } District district = service2.GetDistrict(worldPositionable2.WorldPosition); if (district != null && District.IsACityTile(district) && district.City.Empire == garrison.Empire) { worldPositionable2 = district; guid = district.GUID; } if (service2.GetDistance(army.WorldPosition, worldPositionable2.WorldPosition) != 1) { aiBehaviorTree.ErrorCode = 12; return(State.Failure); } } OrderAttack order = new OrderAttack(army.Empire.Index, army.GUID, guid); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised)); return(State.Running); } }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } if (this.currentTicket != null) { if (!this.currentTicket.Raised) { return(State.Running); } bool flag = this.currentTicket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed || this.currentTicket.PostOrderResponse == PostOrderResponse.AuthenticationHasFailed; this.currentTicket = null; if (flag) { aiBehaviorTree.ErrorCode = 1; return(State.Failure); } return(State.Success); } else if (this.heroTicket != null) { if (!this.heroTicket.Raised) { return(State.Running); } if (this.heroTicket.PostOrderResponse != PostOrderResponse.Processed) { aiBehaviorTree.ErrorCode = 36; return(State.Failure); } this.heroTicket = null; return(State.Running); } else { if (!aiBehaviorTree.Variables.ContainsKey(this.DestinationVarName)) { aiBehaviorTree.LogError("{0} not set", new object[] { this.DestinationVarName }); return(State.Failure); } WorldPosition worldPosition = (WorldPosition)aiBehaviorTree.Variables[this.DestinationVarName]; if (!worldPosition.IsValid) { aiBehaviorTree.LogError("Destination is invalid.", new object[0]); aiBehaviorTree.ErrorCode = 2; return(State.Failure); } List <GameEntityGUID> list = new List <GameEntityGUID>(); foreach (Unit unit in army.StandardUnits) { list.Add(unit.GUID); } if (list.Count == 0) { return(State.Success); } bool flag2 = army.Hero != null; IGameService service = Services.GetService <IGameService>(); Diagnostics.Assert(service != null); IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>(); Diagnostics.Assert(service2 != null); IPathfindingService service3 = service.Game.Services.GetService <IPathfindingService>(); Diagnostics.Assert(service3 != null); City city = service2.GetRegion(worldPosition).City; if (city != null) { District district = service2.GetDistrict(worldPosition); if (district != null) { GameEntityGUID destinationGuid = GameEntityGUID.Zero; if (city.Camp != null && city.Camp.ContainsDistrict(district.GUID)) { destinationGuid = city.Camp.GUID; } else if (District.IsACityTile(district)) { destinationGuid = city.GUID; } if (destinationGuid.IsValid) { if (flag2) { if (!District.IsACityTile(district) || city.Hero != null) { this.UnassignHero(army); return(State.Running); } list.Add(army.Hero.GUID); } OrderTransferUnits order = new OrderTransferUnits(army.Empire.Index, army.GUID, destinationGuid, list.ToArray(), false); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.currentTicket, null); return(State.Running); } } } Army armyAtPosition = service2.GetArmyAtPosition(worldPosition); if (armyAtPosition != null) { if (flag2) { if (armyAtPosition.Hero != null) { this.UnassignHero(army); return(State.Running); } list.Add(army.Hero.GUID); } OrderTransferUnits order2 = new OrderTransferUnits(army.Empire.Index, army.GUID, armyAtPosition.GUID, list.ToArray(), false); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order2, out this.currentTicket, null); return(State.Running); } if (service3.IsTileStopable(worldPosition, army, (PathfindingFlags)0, null)) { OrderTransferGarrisonToNewArmy order3 = new OrderTransferGarrisonToNewArmy(army.Empire.Index, army.GUID, list.ToArray(), worldPosition, StaticString.Empty, false, true, true); aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order3, out this.currentTicket, null); return(State.Running); } aiBehaviorTree.LogError("No valid destination found.", new object[0]); aiBehaviorTree.ErrorCode = 2; return(State.Failure); } }