public override State CheckCondition(QuestBehaviour questBehaviour, GameEvent gameEvent, params object[] parameters)
 {
     if (this.Location != WorldPosition.Invalid)
     {
         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;
         }
         DepartmentOfDefense agency = empire.GetAgency <DepartmentOfDefense>();
         if (this.CheckAllArmies)
         {
             for (int i = 0; i < agency.Armies.Count; i++)
             {
                 WorldPosition worldPosition = agency.Armies[i].WorldPosition;
                 int           distance      = service2.GetDistance(this.Location, worldPosition);
                 int           regionIndex   = (int)service2.GetRegionIndex(worldPosition);
                 bool          flag          = service2.IsWaterTile(worldPosition) || service2.IsOceanTile(worldPosition);
                 if (distance == -1)
                 {
                     return(State.Failure);
                 }
                 if (distance <= this.Distance && (this.RegionIndex == -1 || regionIndex == this.RegionIndex) && (!this.ExcludeWaterTile || !flag))
                 {
                     return(State.Success);
                 }
             }
         }
         else
         {
             Army army = agency.GetArmy(this.ArmyGuid);
             if (army == null)
             {
                 return(State.Failure);
             }
             int  distance2    = service2.GetDistance(this.Location, army.WorldPosition);
             int  regionIndex2 = (int)service2.GetRegionIndex(army.WorldPosition);
             bool flag2        = service2.IsWaterTile(army.WorldPosition) || service2.IsOceanTile(army.WorldPosition);
             if (distance2 == -1)
             {
                 return(State.Failure);
             }
             if (distance2 <= this.Distance && (this.RegionIndex == -1 || regionIndex2 == this.RegionIndex) && (!this.ExcludeWaterTile || !flag2))
             {
                 return(State.Success);
             }
         }
     }
     return(State.Failure);
 }