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