Ejemplo n.º 1
0
    private void GenerateEvaluateMessageFor(AILayer_Booster.BoosterDefinitionWrapper boosterDefinitionWrapper)
    {
        if (boosterDefinitionWrapper.LastComputedPriority == 0f)
        {
            return;
        }
        CityBoosterNeeds cityBoosterNeeds = new CityBoosterNeeds();

        cityBoosterNeeds.CityGuid              = this.aiEntityCity.City.GUID;
        cityBoosterNeeds.BoosterPriority       = boosterDefinitionWrapper.LastComputedPriority;
        cityBoosterNeeds.BoosterDefinitionName = boosterDefinitionWrapper.BoosterDefinitionName;
        cityBoosterNeeds.TimeOut = 1;
        ulong currentMessageId = base.AIEntity.AIPlayer.Blackboard.AddMessage(cityBoosterNeeds);

        boosterDefinitionWrapper.CurrentMessageId = currentMessageId;
    }
Ejemplo n.º 2
0
    private SynchronousJobState SynchronousJob_StartBooster()
    {
        SynchronousJobState result;

        if (this.boosterDefinitionWrappers == null || base.AIEntity == null || base.AIEntity.AIPlayer == null)
        {
            result = SynchronousJobState.Failure;
        }
        else
        {
            DepartmentOfScience agency = base.AIEntity.Empire.GetAgency <DepartmentOfScience>();
            bool flag = agency.GetTechnologyState("TechnologyDefinitionAllBoosterLevel1") == DepartmentOfScience.ConstructibleElement.State.Researched || agency.GetTechnologyState("TechnologyDefinitionAllBoosterLevel2") == DepartmentOfScience.ConstructibleElement.State.Researched;
            for (int i = this.boosterDefinitionWrappers.Count - 1; i >= 0; i--)
            {
                CityBoosterNeeds cityBoosterNeeds = null;
                if (this.boosterDefinitionWrappers[i] != null && base.AIEntity.AIPlayer.Blackboard.TryGetMessage <CityBoosterNeeds>(this.boosterDefinitionWrappers[i].CurrentMessageId, out cityBoosterNeeds) && cityBoosterNeeds.AvailabilityState == CityBoosterNeeds.CityBoosterState.Available)
                {
                    StaticString x = this.boosterDefinitionWrappers[i].BoosterDefinitionName;
                    if (x == "BoosterIndustry" || x == "FlamesIndustryBooster")
                    {
                        if (this.aiEntityCity.City.SimulationObject.Children.Exists((SimulationObject C) => C.Tags.Contains("BoosterDecreaseCityProduction4")))
                        {
                            goto IL_275;
                        }
                    }
                    if (agency.GetResearchPropertyValue("UnlockedTechnologyCount") <= 16f || flag || x == "BoosterFood" || x == "BoosterCadavers")
                    {
                        if (cityBoosterNeeds.BoosterGuid.IsValid && this.departmentOfEducation[cityBoosterNeeds.BoosterGuid] != null && this.departmentOfEducation[cityBoosterNeeds.BoosterGuid].Constructible != null)
                        {
                            x = this.departmentOfEducation[cityBoosterNeeds.BoosterGuid].Constructible.Name;
                        }
                        OrderBuyoutAndActivateBooster orderBuyoutAndActivateBooster = new OrderBuyoutAndActivateBooster(base.AIEntity.Empire.Index, x, cityBoosterNeeds.BoosterGuid, false);
                        orderBuyoutAndActivateBooster.TargetGUID = this.aiEntityCity.City.GUID;
                        base.AIEntity.Empire.PlayerControllers.AI.PostOrder(orderBuyoutAndActivateBooster);
                        this.boosterDefinitionWrappers[i].CurrentMessageId = 0UL;
                        cityBoosterNeeds.BoosterGuid       = 0UL;
                        cityBoosterNeeds.AvailabilityState = CityBoosterNeeds.CityBoosterState.Success;
                        base.AIEntity.AIPlayer.Blackboard.CancelMessage(cityBoosterNeeds);
                    }
                }
                IL_275 :;
            }
            result = SynchronousJobState.Success;
        }
        return(result);
    }
    protected internal override void Evaluate()
    {
        base.Evaluate();
        AILayer_ResourceManager layer = base.AIEntity.GetLayer <AILayer_ResourceManager>();

        layer.BoostersInUse.Clear();
        if (!base.AIEntity.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitReplicants1))
        {
            for (int i = 0; i < this.departmentOfEducation.VaultCount; i++)
            {
                BoosterDefinition boosterDefinition = this.departmentOfEducation.VaultItems[i].Constructible as BoosterDefinition;
                if (boosterDefinition != null && boosterDefinition.Name == "BoosterScience")
                {
                    layer.BoostersInUse.Add(this.departmentOfEducation.VaultItems[i].GUID.ToString());
                    break;
                }
            }
        }
        this.boosterNeedsMessages.Clear();
        this.boosterNeedsMessages.AddRange(base.AIEntity.AIPlayer.Blackboard.GetMessages <CityBoosterNeeds>(BlackboardLayerID.Empire));
        for (int j = 0; j < this.boosterNeedsMessages.Count; j++)
        {
            if (this.boosterNeedsMessages[j].BoosterGuid.IsValid)
            {
                VaultItem vaultItem = this.departmentOfEducation[this.boosterNeedsMessages[j].BoosterGuid];
                if (vaultItem != null)
                {
                    StaticString staticString = vaultItem.Constructible.Name;
                    if (staticString == AIBoosterManager_CityResources.boosterCadavers)
                    {
                        staticString = AIBoosterManager_CityResources.boosterFood;
                    }
                    if (staticString == "FlamesIndustryBooster")
                    {
                        staticString = "BoosterIndustry";
                    }
                    if (this.availableBoosterByDefinitionName.ContainsKey(staticString))
                    {
                        this.availableBoosterByDefinitionName[staticString].Remove(vaultItem.GUID);
                        if (this.availableBoosterByDefinitionName[staticString].Count == 0)
                        {
                            this.availableBoosterByDefinitionName.Remove(staticString);
                        }
                    }
                    this.boosterNeedsMessages[j].AvailabilityState = CityBoosterNeeds.CityBoosterState.Available;
                }
            }
        }
        this.boosterNeedsMessages.RemoveAll((CityBoosterNeeds match) => match.AvailabilityState > CityBoosterNeeds.CityBoosterState.Pending);
        this.boosterNeedsMessages.Sort((CityBoosterNeeds left, CityBoosterNeeds right) => - 1 * left.BoosterPriority.CompareTo(right.BoosterPriority));
        for (int k = 0; k < this.boosterNeedsMessages.Count; k++)
        {
            CityBoosterNeeds cityBoosterNeeds      = this.boosterNeedsMessages[k];
            StaticString     boosterDefinitionName = cityBoosterNeeds.BoosterDefinitionName;
            if (this.availableBoosterByDefinitionName.ContainsKey(cityBoosterNeeds.BoosterDefinitionName))
            {
                int            num         = this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName].Count - 1;
                GameEntityGUID boosterGuid = this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName][num];
                this.availableBoosterByDefinitionName[cityBoosterNeeds.BoosterDefinitionName].RemoveAt(num);
                if (num == 0)
                {
                    this.availableBoosterByDefinitionName.Remove(cityBoosterNeeds.BoosterDefinitionName);
                }
                cityBoosterNeeds.BoosterGuid       = boosterGuid;
                cityBoosterNeeds.AvailabilityState = CityBoosterNeeds.CityBoosterState.Available;
                layer.BoostersInUse.Add(boosterGuid.ToString());
                this.boosterNeedsMessages.RemoveAt(k);
                k--;
            }
        }
        this.evaluableMessages.Clear();
        this.evaluableMessages.AddRange(base.AIEntity.AIPlayer.Blackboard.GetMessages <EvaluableMessage_CityBooster>(BlackboardLayerID.Empire));
        this.evaluableMessages.RemoveAll((EvaluableMessage_CityBooster match) => match.State != BlackboardMessage.StateValue.Message_InProgress || match.EvaluationState != EvaluableMessage.EvaluableMessageState.Pending || match.EvaluationState != EvaluableMessage.EvaluableMessageState.Obtaining);
        this.evaluableMessages.Sort((EvaluableMessage_CityBooster left, EvaluableMessage_CityBooster right) => - 1 * left.Interest.CompareTo(right.Interest));
        for (int l = 0; l < this.evaluableMessages.Count; l++)
        {
            EvaluableMessage_CityBooster cityBoosterEvaluableMessage = this.evaluableMessages[l];
            int num2 = this.boosterNeedsMessages.FindIndex((CityBoosterNeeds match) => match.BoosterDefinitionName == cityBoosterEvaluableMessage.BoosterDefinitionName);
            if (num2 >= 0)
            {
                CityBoosterNeeds cityBoosterNeeds2 = this.boosterNeedsMessages[num2];
                cityBoosterEvaluableMessage.Refresh(this.globalPriority, cityBoosterNeeds2.BoosterPriority, cityBoosterNeeds2.CityGuid);
                this.boosterNeedsMessages.RemoveAt(num2);
            }
            else if (cityBoosterEvaluableMessage.EvaluationState == EvaluableMessage.EvaluableMessageState.Obtaining)
            {
                cityBoosterEvaluableMessage.Refresh(0f, 0f, cityBoosterEvaluableMessage.CityGuid);
            }
            else
            {
                base.AIEntity.AIPlayer.Blackboard.CancelMessage(this.evaluableMessages[l]);
                this.evaluableMessages.RemoveAt(l);
                l--;
            }
        }
        for (int m = 0; m < this.boosterNeedsMessages.Count; m++)
        {
            CityBoosterNeeds           cityBoosterNeeds3 = this.boosterNeedsMessages[m];
            BoosterGeneratorDefinition boosterGenerator  = this.constructibleElementHelper.GetBoosterGenerator(base.AIEntity.Empire, cityBoosterNeeds3.BoosterDefinitionName);
            if (boosterGenerator != null)
            {
                EvaluableMessage_CityBooster evaluableMessage_CityBooster = new EvaluableMessage_CityBooster(cityBoosterNeeds3.CityGuid, cityBoosterNeeds3.BoosterDefinitionName, boosterGenerator.Name, 1, AILayer_AccountManager.EconomyAccountName);
                evaluableMessage_CityBooster.SetInterest(this.globalPriority, cityBoosterNeeds3.BoosterPriority);
                base.AIEntity.AIPlayer.Blackboard.AddMessage(evaluableMessage_CityBooster);
            }
        }
    }