Ejemplo n.º 1
0
    public override void ReadXml(XmlReader reader)
    {
        int num = reader.ReadVersionAttribute();

        base.ReadXml(reader);
        if (num > 0 && reader.IsStartElement("QuestBTOrders"))
        {
            int attribute = reader.GetAttribute <int>("Count");
            reader.ReadStartElement("QuestBTOrders");
            this.QuestBTOrders.Clear();
            for (int i = 0; i < attribute; i++)
            {
                AILayer_QuestBTController.QuestBTOrder questBTOrder = new AILayer_QuestBTController.QuestBTOrder("", GameEntityGUID.Zero, 1f);
                reader.ReadElementSerializable <AILayer_QuestBTController.QuestBTOrder>(ref questBTOrder);
                if (questBTOrder.IsValid())
                {
                    if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools)
                    {
                        Diagnostics.Log("ELCP {0}: Loading QuestBTOrder {1}", new object[]
                        {
                            base.AIEntity.Empire,
                            questBTOrder.ToString()
                        });
                    }
                    this.QuestBTOrders.Add(questBTOrder);
                }
            }
            reader.ReadEndElement("QuestBTOrders");
        }
    }
Ejemplo n.º 2
0
 public void AddQuestBTOrder(StaticString name, GameEntityGUID target, float strength, string resource = null, int resourceAmount = 0)
 {
     AILayer_QuestBTController.QuestBTOrder questBTOrder = new AILayer_QuestBTController.QuestBTOrder(name, target, strength);
     if (!string.IsNullOrEmpty(resource))
     {
         questBTOrder.resourceNeeded       = resource;
         questBTOrder.resourceNeededAmount = resourceAmount;
     }
     if (Amplitude.Unity.Framework.Application.Preferences.EnableModdingTools)
     {
         Diagnostics.Log("ELCP {0} AddQuestBTOrder {1}", new object[]
         {
             base.AIEntity.Empire,
             questBTOrder.ToString()
         });
     }
     this.QuestBTOrders.Add(questBTOrder);
 }
Ejemplo n.º 3
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;
        }
    }
Ejemplo n.º 4
0
 public bool TryGetQuestBTOrder(StaticString name, GameEntityGUID target, out AILayer_QuestBTController.QuestBTOrder questBTOrder)
 {
     questBTOrder = this.QuestBTOrders.Find((AILayer_QuestBTController.QuestBTOrder BTo) => BTo.questName == name && BTo.objectiveGUID == target);
     return(questBTOrder != null);
 }