Esempio n. 1
0
    public override void Execute(Army army, global::PlayerController playerController, out Ticket ticket, EventHandler <TicketRaisedEventArgs> ticketRaisedEventHandler, params object[] parameters)
    {
        ticket = null;
        if (army == null || playerController == null)
        {
            return;
        }
        TerraformDevice terraformDevice = null;

        if (parameters != null && parameters.Length > 0 && parameters[0] is TerraformDevice)
        {
            terraformDevice = (parameters[0] as TerraformDevice);
        }
        List <StaticString> list = new List <StaticString>();

        if (terraformDevice == null || !this.CanToggleOverDevice(army, terraformDevice, ref list))
        {
            return;
        }
        if (terraformDevice.DismantlingArmy == null)
        {
            if (army.IsDismantlingDevice)
            {
                OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, army.DismantlingDeviceTarget, false);
                playerController.PostOrder(order, out ticket, ticketRaisedEventHandler);
            }
            OrderToggleDismantleDevice order2 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, true);
            playerController.PostOrder(order2, out ticket, ticketRaisedEventHandler);
        }
        else if (terraformDevice.DismantlingArmy == army)
        {
            OrderToggleDismantleDevice order3 = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, false);
            playerController.PostOrder(order3, out ticket, ticketRaisedEventHandler);
        }
    }
    protected override IEnumerator OnShow(params object[] parameters)
    {
        yield return(base.OnShow(parameters));

        if (this.context == null || !(this.context is TerraformDevice))
        {
            base.AgeTransform.Visible = false;
        }
        else
        {
            TerraformDevice terraformDevice = this.context as TerraformDevice;
            bool            isValid         = terraformDevice.DismantlingArmyGUID.IsValid;
            int             num             = (!isValid) ? terraformDevice.TurnsToActivate() : terraformDevice.TurnsToDeactivate();
            string          text;
            if (num == 1)
            {
                text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationSingle" : "%FeatureDeviceDismantlingDurationSingle");
            }
            else if (num % 10 == 0)
            {
                text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationTen" : "%FeatureDeviceDismantlingDurationTen");
            }
            else if (num > 1999)
            {
                text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingInfinite" : "%FeatureDeviceDismantlingDurationSingle");
            }
            else
            {
                text = AgeLocalizer.Instance.LocalizeString((!isValid) ? "%FeatureDeviceChargingDurationPlural" : "%FeatureDeviceDismantlingDurationPlural");
            }
            this.Title.Text           = text.Replace("$(Input)", num.ToString());
            base.AgeTransform.Visible = true;
        }
        yield break;
    }
Esempio n. 3
0
    private void ListNearbyDevicesFiltered(Army army)
    {
        if (army == null)
        {
            throw new ArgumentNullException("army");
        }
        this.devices.Clear();
        IGameService service = Services.GetService <IGameService>();

        Diagnostics.Assert(service != null);
        global::Game game = service.Game as global::Game;

        Diagnostics.Assert(game != null);
        ITerraformDeviceService service2 = game.Services.GetService <ITerraformDeviceService>();

        Diagnostics.Assert(service2 != null);
        List <WorldPosition> neighbours = army.WorldPosition.GetNeighbours(game.World.WorldParameters);

        for (int i = 0; i < neighbours.Count; i++)
        {
            TerraformDevice     deviceAtPosition = service2.GetDeviceAtPosition(neighbours[i]);
            List <StaticString> list             = new List <StaticString>();
            if (this.CanToggleOverDevice(army, deviceAtPosition, ref list) && !this.devices.Contains(deviceAtPosition))
            {
                this.devices.Add(deviceAtPosition);
            }
        }
    }
Esempio n. 4
0
 public void Bind(TerraformDevice device, Amplitude.Unity.Gui.IGuiService guiService)
 {
     if (this.Device != null && this.Device != device)
     {
         this.Unbind();
     }
     this.Device = device;
 }
Esempio n. 5
0
    private void ReleaseKaijuArmyActions()
    {
        DepartmentOfDefense  agency = this.Empire.GetAgency <DepartmentOfDefense>();
        SimulationDescriptor value  = this.SimulationDescriptorDatabase.GetValue(DepartmentOfTheInterior.ArmyStatusBesiegerDescriptorName);

        this.KaijuArmy.RemoveDescriptor(value);
        if (this.KaijuArmy.IsEarthquaker)
        {
            this.KaijuArmy.SetEarthquakerStatus(false, false, null);
        }
        if (this.KaijuArmy.PillageTarget.IsValid)
        {
            DepartmentOfDefense.StopPillage(this.KaijuArmy);
        }
        if (this.KaijuArmy.IsAspirating)
        {
            agency.StopAspirating(this.KaijuArmy);
        }
        if (this.KaijuArmy.IsDismantlingDevice)
        {
            ITerraformDeviceRepositoryService service = this.gameService.Game.Services.GetService <ITerraformDeviceRepositoryService>();
            TerraformDevice device = service[this.KaijuArmy.DismantlingDeviceTarget] as TerraformDevice;
            agency.StopDismantelingDevice(this.KaijuArmy, device);
        }
        if (this.KaijuArmy.IsDismantlingCreepingNode)
        {
            CreepingNode creepingNode = null;
            if (this.gameEntityRepositoryService.TryGetValue <CreepingNode>(this.KaijuArmy.DismantlingCreepingNodeTarget, out creepingNode))
            {
                agency.StopDismantelingCreepingNode(this.KaijuArmy, creepingNode);
            }
        }
        IWorldPositionningService service2 = this.gameService.Game.Services.GetService <IWorldPositionningService>();
        Region region = service2.GetRegion(this.KaijuArmy.WorldPosition);

        if (region.City != null && region.City.Empire != this.Empire)
        {
            DepartmentOfTheInterior agency2 = region.City.Empire.GetAgency <DepartmentOfTheInterior>();
            if (agency2 != null)
            {
                if (region.City.BesiegingEmpire == this.Empire && agency2.NeedToStopSiege(region.City))
                {
                    agency2.StopSiege(region.City);
                }
                agency2.StopNavalSiege(region.City, this.KaijuArmy);
            }
            IVisibilityService service3 = this.gameService.Game.Services.GetService <IVisibilityService>();
            service3.NotifyVisibilityHasChanged(this.Empire);
        }
    }
    private void addQuestMarker(QuestBehaviour questBehaviour, TerraformDevice army)
    {
        QuestInstruction_UpdateQuestMarker questInstruction_UpdateQuestMarker = new QuestInstruction_UpdateQuestMarker();

        questInstruction_UpdateQuestMarker.BoundTargetGUID = army.GUID;
        questInstruction_UpdateQuestMarker.MarkerGUID      = this.EntityGUID;
        questInstruction_UpdateQuestMarker.Tags            = new Tags();
        questInstruction_UpdateQuestMarker.Tags.AddTag("Ruins");
        questInstruction_UpdateQuestMarker.MarkerTypeName          = QuestMarker.DefaultMarkerTypeName;
        questInstruction_UpdateQuestMarker.Empire                  = questBehaviour.Initiator;
        questInstruction_UpdateQuestMarker.RevealUnexploredLand    = true;
        questInstruction_UpdateQuestMarker.MarkerVisibleInFogOfWar = true;
        questInstruction_UpdateQuestMarker.IgnoreInteraction       = false;
        questBehaviour.Push(questInstruction_UpdateQuestMarker);
    }
Esempio n. 7
0
 private bool CanToggleOverDevice(Army army, TerraformDevice device, ref List <StaticString> failureFlags)
 {
     if (army == null || device == null || device.Empire == army.Empire)
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (device.DismantlingArmy != null)
     {
         if (device.DismantlingArmy == army)
         {
             return(true);
         }
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     else
     {
         IGameService service = Services.GetService <IGameService>();
         Diagnostics.Assert(service != null);
         IWorldPositionningService service2 = service.Game.Services.GetService <IWorldPositionningService>();
         Diagnostics.Assert(service2 != null);
         Army armyAtPosition = service2.GetArmyAtPosition(device.WorldPosition);
         if (device != null && device.DismantlingArmy == null && armyAtPosition != null && device.Empire.Index != army.Empire.Index)
         {
             failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
             return(false);
         }
         if (device.Empire != army.Empire && army.Empire is MajorEmpire && !(device.Empire is LesserEmpire))
         {
             DiplomaticRelation diplomaticRelation = army.Empire.GetAgency <DepartmentOfForeignAffairs>().DiplomaticRelations[device.Empire.Index];
             if (diplomaticRelation != null && diplomaticRelation.State != null && (diplomaticRelation.State.Name == DiplomaticRelationState.Names.Alliance || diplomaticRelation.State.Name == DiplomaticRelationState.Names.Peace))
             {
                 failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
                 return(false);
             }
         }
         IPathfindingService service3 = service.Game.Services.GetService <IPathfindingService>();
         Diagnostics.Assert(service3 != null);
         PathfindingFlags flags = PathfindingFlags.IgnoreArmies | PathfindingFlags.IgnoreOtherEmpireDistrict | PathfindingFlags.IgnoreDiplomacy | PathfindingFlags.IgnoreFogOfWar | PathfindingFlags.IgnoreSieges | PathfindingFlags.IgnoreKaijuGarrisons;
         if (!service3.IsTransitionPassable(army.WorldPosition, device.WorldPosition, army, flags, null))
         {
             failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
             return(false);
         }
         return(true);
     }
 }
Esempio n. 8
0
    private void SelectTarget()
    {
        this.battleTarget = null;
        if (this.LastHighlightedWorldPosition == WorldPosition.Invalid)
        {
            return;
        }
        if (!base.VisibilityService.IsWorldPositionVisibleFor(this.LastHighlightedWorldPosition, this.Army.Empire))
        {
            return;
        }
        Region region = base.WorldPositionningService.GetRegion(this.LastHighlightedWorldPosition);

        if (region == null || this.battleTarget != null)
        {
            return;
        }
        PointOfInterest pointOfInterest = region.PointOfInterests.FirstOrDefault((PointOfInterest match) => match.WorldPosition == this.LastHighlightedWorldPosition);

        if (pointOfInterest != null && (pointOfInterest.Type == Fortress.Citadel || pointOfInterest.Type == Fortress.Facility))
        {
            Fortress fortressAt = region.NavalEmpire.GetAgency <PirateCouncil>().GetFortressAt(pointOfInterest.WorldPosition);
            this.battleTarget = fortressAt;
        }
        if (region != null)
        {
            District district = null;
            if (region.City != null && region.City.Empire != this.Army.Empire)
            {
                district = region.City.Districts.FirstOrDefault((District match) => match.WorldPosition == this.LastHighlightedWorldPosition);
            }
            if (district != null && district.Type != DistrictType.Exploitation)
            {
                this.battleTarget = district;
            }
        }
        if (this.battleTarget == null && region != null && region.City != null && region.City.Camp != null && region.City.Camp.WorldPosition == this.LastHighlightedWorldPosition && region.City.Empire != this.Army.Empire)
        {
            this.battleTarget = region.City.Camp;
        }
        if (this.battleTarget == null)
        {
            Army armyAtPosition = base.WorldPositionningService.GetArmyAtPosition(this.LastHighlightedWorldPosition);
            if (armyAtPosition != null && (!armyAtPosition.IsCamouflaged || base.VisibilityService.IsWorldPositionDetectedFor(this.LastHighlightedWorldPosition, this.Army.Empire)))
            {
                this.battleTarget = armyAtPosition;
            }
        }
        if (region != null && this.battleTarget == null)
        {
            pointOfInterest = region.PointOfInterests.FirstOrDefault((PointOfInterest match) => match.WorldPosition == this.LastHighlightedWorldPosition);
            if (pointOfInterest != null)
            {
                if (pointOfInterest.CreepingNodeGUID != GameEntityGUID.Zero)
                {
                    CreepingNode creepingNode = null;
                    base.GameEntityRepositoryService.TryGetValue <CreepingNode>(pointOfInterest.CreepingNodeGUID, out creepingNode);
                    if (creepingNode != null)
                    {
                        if (creepingNode.Empire.Index != this.Army.Empire.Index)
                        {
                            if (ELCPUtilities.UseELCPPeacefulCreepingNodes)
                            {
                                DepartmentOfForeignAffairs agency = this.Army.Empire.GetAgency <DepartmentOfForeignAffairs>();
                                if (agency != null && agency.IsFriend(creepingNode.Empire))
                                {
                                    if (pointOfInterest.Type == "QuestLocation")
                                    {
                                        this.battleTarget = pointOfInterest;
                                    }
                                    else if (pointOfInterest.Type == "Village")
                                    {
                                        IQuestManagementService   service  = base.GameService.Game.Services.GetService <IQuestManagementService>();
                                        IQuestRepositoryService   service2 = base.GameService.Game.Services.GetService <IQuestRepositoryService>();
                                        IEnumerable <QuestMarker> markersByBoundTargetGUID = service.GetMarkersByBoundTargetGUID(pointOfInterest.GUID);
                                        bool flag = false;
                                        foreach (QuestMarker questMarker in markersByBoundTargetGUID)
                                        {
                                            Quest quest;
                                            if (service2.TryGetValue(questMarker.QuestGUID, out quest) && quest.EmpireBits == this.Army.Empire.Bits)
                                            {
                                                Village villageAt = region.MinorEmpire.GetAgency <BarbarianCouncil>().GetVillageAt(pointOfInterest.WorldPosition);
                                                this.battleTarget = villageAt;
                                                flag = true;
                                                break;
                                            }
                                        }
                                        if (!flag)
                                        {
                                            this.battleTarget = creepingNode;
                                        }
                                    }
                                    else
                                    {
                                        this.battleTarget = creepingNode;
                                    }
                                }
                            }
                            else
                            {
                                this.battleTarget = creepingNode;
                            }
                        }
                        else if (pointOfInterest.Type == "QuestLocation" || pointOfInterest.Type == "NavalQuestLocation")
                        {
                            this.battleTarget = pointOfInterest;
                        }
                    }
                }
                else if (pointOfInterest.Type == "Village")
                {
                    Village villageAt2 = region.MinorEmpire.GetAgency <BarbarianCouncil>().GetVillageAt(pointOfInterest.WorldPosition);
                    this.battleTarget = villageAt2;
                }
                else if (pointOfInterest.Type == "QuestLocation" || pointOfInterest.Type == "NavalQuestLocation")
                {
                    this.battleTarget = pointOfInterest;
                }
            }
        }
        if (region != null && this.battleTarget == null && region.KaijuEmpire != null && region.Kaiju != null)
        {
            KaijuGarrison kaijuGarrison = region.Kaiju.KaijuGarrison;
            if (kaijuGarrison.WorldPosition == this.LastHighlightedWorldPosition)
            {
                this.battleTarget = kaijuGarrison;
            }
        }
        if (this.battleTarget == null)
        {
            TerraformDevice deviceAtPosition = (base.GameService.Game as global::Game).GetService <ITerraformDeviceService>().GetDeviceAtPosition(this.LastHighlightedWorldPosition);
            if (deviceAtPosition != null)
            {
                this.battleTarget = deviceAtPosition;
            }
        }
    }
Esempio n. 9
0
 protected override State Execute(AIBehaviorTree aiBehaviorTree, params object[] parameters)
 {
     if (this.ticket != null)
     {
         if (!this.orderExecuted)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Running);
         }
         if (this.ticket.PostOrderResponse == PostOrderResponse.PreprocessHasFailed)
         {
             this.orderExecuted       = false;
             this.ticket              = null;
             aiBehaviorTree.ErrorCode = 1;
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         this.orderExecuted = false;
         this.ticket        = null;
         return(Amplitude.Unity.AI.BehaviourTree.State.Success);
     }
     else
     {
         Army army;
         if (base.GetArmyUnlessLocked(aiBehaviorTree, "$Army", out army) != AIArmyMission.AIArmyMissionErrorCode.None)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         if (!aiBehaviorTree.Variables.ContainsKey(this.TargetVarName))
         {
             aiBehaviorTree.LogError("${0} not set", new object[]
             {
                 this.TargetVarName
             });
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         IGameEntity gameEntity = aiBehaviorTree.Variables[this.TargetVarName] as IGameEntity;
         if (!(gameEntity is TerraformDevice))
         {
             aiBehaviorTree.LogError("${0} is not a device", new object[]
             {
                 this.TargetVarName
             });
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         TerraformDevice terraformDevice = gameEntity as TerraformDevice;
         IGameService    service         = Services.GetService <IGameService>();
         Diagnostics.Assert(service != null);
         service.Game.Services.GetService <IGameEntityRepositoryService>();
         AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType state = this.State;
         if (state != AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start)
         {
             if (state == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Stop && (!terraformDevice.DismantlingArmyGUID.IsValid || army.GUID != terraformDevice.DismantlingArmyGUID))
             {
                 return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
             }
         }
         else if (terraformDevice.DismantlingArmyGUID.IsValid)
         {
             return(Amplitude.Unity.AI.BehaviourTree.State.Failure);
         }
         this.orderExecuted = false;
         OrderToggleDismantleDevice order = new OrderToggleDismantleDevice(army.Empire.Index, army.GUID, terraformDevice.GUID, this.State == AIBehaviorTreeNode_Action_ToggleDismantleCreepingNode.StateType.Start);
         aiBehaviorTree.AICommander.Empire.PlayerControllers.AI.PostOrder(order, out this.ticket, new EventHandler <TicketRaisedEventArgs>(this.Order_TicketRaised));
         return(Amplitude.Unity.AI.BehaviourTree.State.Running);
     }
 }
Esempio n. 10
0
 public override bool CanExecute(Army army, ref List <StaticString> failureFlags, params object[] parameters)
 {
     if (!base.CanExecute(army, ref failureFlags, parameters))
     {
         return(false);
     }
     if (army.IsNaval || army.IsPillaging || army.IsDismantlingCreepingNode)
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
         return(false);
     }
     if (army.IsAspirating)
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileAspirating);
         return(false);
     }
     if (army.IsEarthquaker)
     {
         failureFlags.Add(ArmyAction.NoCanDoWhileEarthquaking);
         return(false);
     }
     if (parameters != null && parameters.Length > 0)
     {
         for (int i = 0; i < parameters.Length; i++)
         {
             if (parameters[i] is TerraformDevice)
             {
                 TerraformDevice terraformDevice = parameters[i] as TerraformDevice;
                 if (terraformDevice != null && this.CanToggleOverDevice(army, terraformDevice, ref failureFlags))
                 {
                     if (army.IsInEncounter)
                     {
                         failureFlags.Add(ArmyAction.NoCanDoWhileLockedInBattle);
                         return(false);
                     }
                     return(true);
                 }
             }
             else if (parameters[i] is List <IGameEntity> )
             {
                 List <IGameEntity> list = parameters[i] as List <IGameEntity>;
                 for (int j = 0; j < list.Count; j++)
                 {
                     if (list[j] is TerraformDevice)
                     {
                         TerraformDevice terraformDevice2 = list[j] as TerraformDevice;
                         if (terraformDevice2 != null && this.CanToggleOverDevice(army, terraformDevice2, ref failureFlags))
                         {
                             if (army.IsInEncounter)
                             {
                                 failureFlags.Add(ArmyAction.NoCanDoWhileLockedInBattle);
                                 return(false);
                             }
                             return(true);
                         }
                     }
                 }
             }
         }
     }
     failureFlags.Add(ArmyAction.NoCanDoWhileHidden);
     return(false);
 }
Esempio n. 11
0
    protected override void RefreshObjectives(StaticString context, StaticString pass)
    {
        base.RefreshObjectives(context, pass);
        base.GatherObjectives(base.ObjectiveType, true, ref this.globalObjectiveMessages);
        base.ValidateMessages(ref this.globalObjectiveMessages);
        this.messagePriorityOverrides.Clear();
        this.resourcesNeededForQuest.Clear();
        if (this.departmentOfTheInterior.Cities.Count == 0)
        {
            return;
        }
        List <StaticString> list = new List <StaticString>();

        using (List <AILayer_QuestBTController.QuestBTOrder> .Enumerator enumerator = this.QuestBTOrders.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                AILayer_QuestBTController.QuestBTOrder order = enumerator.Current;
                if (!list.Contains(order.questName))
                {
                    List <AILayer_QuestBTController.QuestBTOrder> list2 = this.QuestBTOrders.FindAll((AILayer_QuestBTController.QuestBTOrder q) => q.questName == order.questName);
                    if (list2.Count > 1)
                    {
                        list.Add(order.questName);
                        int num  = int.MaxValue;
                        int num2 = 0;
                        int num3 = -1;
                        for (int k = 0; k < list2.Count; k++)
                        {
                            IGameEntity gameEntity;
                            if (this.gameEntityRepositoryService.TryGetValue <IGameEntity>(list2[k].objectiveGUID, out gameEntity))
                            {
                                int distance = this.worldPositionningService.GetDistance(this.departmentOfTheInterior.Cities[0].WorldPosition, (gameEntity as IWorldPositionable).WorldPosition);
                                if (distance < num)
                                {
                                    num  = distance;
                                    num3 = k;
                                }
                                if (distance > num2)
                                {
                                    num2 = distance;
                                }
                            }
                        }
                        num2 -= num;
                        for (int j = 0; j < list2.Count; j++)
                        {
                            IGameEntity gameEntity2;
                            if (j != num3 && this.gameEntityRepositoryService.TryGetValue <IGameEntity>(list2[j].objectiveGUID, out gameEntity2))
                            {
                                int num4 = this.worldPositionningService.GetDistance(this.departmentOfTheInterior.Cities[0].WorldPosition, (gameEntity2 as IWorldPositionable).WorldPosition);
                                num4 -= num;
                                float num5 = 1f - (float)(num4 / num2);
                                num5 = Math.Max(num5, 0.3f);
                                this.messagePriorityOverrides.Add(list2[j].objectiveGUID, num5 / 1.25f);
                            }
                        }
                    }
                }
            }
        }
        int i;

        Predicate <GlobalObjectiveMessage> < > 9__1;
        int i2;

        for (i = this.QuestBTOrders.Count - 1; i >= 0; i = i2 - 1)
        {
            bool flag = this.QuestBTOrders[i].resourceNeeded == StaticString.Empty;
            if (!flag)
            {
                float num6;
                this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, this.QuestBTOrders[i].resourceNeeded, out num6, false);
                flag = (num6 >= (float)this.QuestBTOrders[i].resourceNeededAmount);
                if (this.resourcesNeededForQuest.ContainsKey(this.QuestBTOrders[i].resourceNeeded))
                {
                    Dictionary <StaticString, float> dictionary = this.resourcesNeededForQuest;
                    StaticString resourceNeeded = this.QuestBTOrders[i].resourceNeeded;
                    dictionary[resourceNeeded] += (float)this.QuestBTOrders[i].resourceNeededAmount;
                }
                else
                {
                    this.resourcesNeededForQuest.Add(this.QuestBTOrders[i].resourceNeeded, (float)this.QuestBTOrders[i].resourceNeededAmount);
                }
            }
            if (!this.questManagementService.IsQuestRunningForEmpire(this.QuestBTOrders[i].questName, base.AIEntity.Empire))
            {
                this.QuestBTOrders.RemoveAt(i);
            }
            else if (flag)
            {
                List <GlobalObjectiveMessage>      globalObjectiveMessages = this.globalObjectiveMessages;
                Predicate <GlobalObjectiveMessage> match;
                if ((match = < > 9__1) == null)
                {
                    match = (< > 9__1 = ((GlobalObjectiveMessage m) => m.ObjectiveState == this.QuestBTOrders[i].questName && m.SubObjectifGUID == this.QuestBTOrders[i].objectiveGUID));
                }
                GlobalObjectiveMessage globalObjectiveMessage = globalObjectiveMessages.Find(match);
                if (globalObjectiveMessage == null && this.TargetIsReachable(this.QuestBTOrders[i].objectiveGUID))
                {
                    IGameEntity gameEntity3;
                    this.gameEntityRepositoryService.TryGetValue <IGameEntity>(this.QuestBTOrders[i].objectiveGUID, out gameEntity3);
                    PointOfInterest pointOfInterest = gameEntity3 as PointOfInterest;
                    TerraformDevice terraformDevice = gameEntity3 as TerraformDevice;
                    if ((pointOfInterest != null && pointOfInterest.Type != "Village") || this.departmentOfScience.CanParley() || terraformDevice != null)
                    {
                        Region region = this.worldPositionningService.GetRegion((gameEntity3 as IWorldPositionable).WorldPosition);
                        globalObjectiveMessage = this.CreateObjectiveFor(region.Index, gameEntity3, this.QuestBTOrders[i].questName);
                    }
                }
                if (globalObjectiveMessage != null)
                {
                    this.RefreshMessagePriority(globalObjectiveMessage);
                }
            }
            i2 = i;
        }
    }