protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) > AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } global::Empire empire = aiBehaviorTree.AICommander.Empire; if (empire == null || !(empire is MajorEmpire)) { aiBehaviorTree.ErrorCode = 10; return(State.Failure); } if (!army.Empire.SimulationObject.Tags.Contains("FactionTraitAffinityStrategic") || !army.Empire.SimulationObject.Tags.Contains("BoosterTeleport") || army.HasSeafaringUnits() || army.GetPropertyValue(SimulationProperties.Movement) < 0.1f || army.IsSolitary || !ELCPUtilities.CheckCooldownPrerequisites(army)) { return(State.Failure); } if (string.IsNullOrEmpty(this.TargetVarName)) { return(State.Failure); } IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity; if (!(gameEntity is City)) { return(State.Failure); } if (ELCPUtilities.CanTeleportToCity(gameEntity as City, army, this.worldPositionningService.GetRegion(army.WorldPosition), this.worldPositionningService, null)) { return(State.Success); } return(State.Failure); }
protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters) { Army army; if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) > AIArmyMission.AIArmyMissionErrorCode.None) { return(State.Failure); } global::Empire empire = aiBehaviorTree.AICommander.Empire; if (empire == null) { aiBehaviorTree.ErrorCode = 10; return(State.Failure); } if (this.Teleport) { if (army.Empire.SimulationObject.Tags.Contains("FactionTraitAffinityStrategic") && army.Empire.SimulationObject.Tags.Contains("BoosterTeleport") && !army.IsNaval && ELCPUtilities.CheckCooldownPrerequisites(army)) { if (!army.StandardUnits.Any((Unit unit) => unit.SimulationObject.Tags.Contains(Unit.ReadOnlyColossus))) { goto IL_B7; } } return(State.Failure); } IL_B7: City city = null; District district = this.worldPositionningService.GetDistrict(army.WorldPosition); if (district != null && district.Empire.Index == army.Empire.Index) { if (this.Inverted && district.City.BesiegingEmpire == null) { 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); } if (district.City.BesiegingEmpire != null) { if (this.Teleport || this.Inverted) { return(State.Failure); } 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); } } DepartmentOfTheInterior agency = empire.GetAgency <DepartmentOfTheInterior>(); if (agency == null) { aiBehaviorTree.ErrorCode = 10; return(State.Failure); } int num = int.MaxValue; List <City> list = new List <City>(); using (IEnumerator <City> enumerator = agency.Cities.GetEnumerator()) { while (enumerator.MoveNext()) { City city2 = enumerator.Current; if (city2.BesiegingEmpire != null) { if (!this.Inverted && this.worldPositionningService.GetDistance(army.WorldPosition, city2.WorldPosition) < num && (!this.Teleport || ELCPUtilities.CanTeleportToCity(city2, army, this.worldPositionningService.GetRegion(army.WorldPosition), this.worldPositionningService, null))) { if (this.Teleport && this.encounterRepositoryService.Any((Encounter encounter) => encounter.IsGarrisonInEncounter(city2.GUID, false))) { list.Add(city2); } else { num = this.worldPositionningService.GetDistance(army.WorldPosition, city2.WorldPosition); city = city2; } } } else if (this.Inverted && this.worldPositionningService.GetDistance(army.WorldPosition, city2.WorldPosition) < num) { num = this.worldPositionningService.GetDistance(army.WorldPosition, city2.WorldPosition); city = city2; } } } if (city == null && list.Count > 0) { city = list[0]; } if (city != null) { if (aiBehaviorTree.Variables.ContainsKey(this.Output_TargetVarName)) { aiBehaviorTree.Variables[this.Output_TargetVarName] = city; } else { aiBehaviorTree.Variables.Add(this.Output_TargetVarName, city); } return(State.Success); } return(State.Failure); }