Esempio n. 1
0
    private static void GetResourceUnitMarketPrice(global::Empire empire, out float averageStrategicUnitPrice, out float averageLuxuryUnitPrice)
    {
        DepartmentOfTheTreasury agency = empire.GetAgency <DepartmentOfTheTreasury>();
        float num  = 0f;
        int   num2 = 0;
        float num3 = 0f;
        int   num4 = 0;
        IDatabase <ResourceDefinition> database = Databases.GetDatabase <ResourceDefinition>(false);

        foreach (ResourceDefinition resourceDefinition in database)
        {
            if (resourceDefinition.ResourceType == ResourceDefinition.Type.Strategic || resourceDefinition.ResourceType == ResourceDefinition.Type.Luxury)
            {
                float num5;
                agency.TryGetResourceStockValue(empire.SimulationObject, resourceDefinition.Name, out num5, true);
                float priceWithSalesTaxes = TradableResource.GetPriceWithSalesTaxes(resourceDefinition.Name, TradableTransactionType.Sellout, empire, 1f);
                if (resourceDefinition.ResourceType == ResourceDefinition.Type.Strategic)
                {
                    num += priceWithSalesTaxes;
                    num2++;
                }
                else if (resourceDefinition.ResourceType == ResourceDefinition.Type.Luxury)
                {
                    num3 += priceWithSalesTaxes;
                    num4++;
                }
            }
        }
        averageStrategicUnitPrice = ((num2 <= 0) ? 0f : (num / (float)num2));
        averageLuxuryUnitPrice    = ((num4 <= 0) ? 0f : (num3 / (float)num4));
    }
Esempio n. 2
0
    private TradableResource TryGetTradableRessource(StaticString resourceName)
    {
        List <ITradable> list;

        this.tradeManagementService.TryGetTradables("TradableResource" + resourceName, out list);
        for (int i = 0; i < list.Count; i++)
        {
            TradableResource tradableResource = list[i] as TradableResource;
            if (tradableResource.ResourceName == resourceName)
            {
                return(tradableResource);
            }
        }
        return(null);
    }
Esempio n. 3
0
    private float GetStrategicSellThreshold(AILayer_ResourceManager.SellInfo sellInfo, float stockValue)
    {
        float num;

        if (!this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, DepartmentOfTheTreasury.Resources.EmpireMoney, out num, false))
        {
            num = 0f;
        }
        bool flag = false;

        if (base.AIEntity.Empire.GetPropertyValue(SimulationProperties.NetEmpireMoney) >= 1f)
        {
            flag = true;
        }
        float averageValue        = this.resourcesAIData.GetAverageValue(string.Format("{0}Stock", sellInfo.ResourceDefinition.Name));
        float averageValue2       = this.resourcesAIData.GetAverageValue(string.Format("{0}Income", sellInfo.ResourceDefinition.Name));
        float averageValue3       = this.resourcesAIData.GetAverageValue(string.Format("{0}Expenditure", sellInfo.ResourceDefinition.Name));
        float num2                = averageValue + 8f * base.AIEntity.Empire.GetPropertyValue(SimulationProperties.GameSpeedMultiplier) * (averageValue2 - averageValue3);
        float b                   = base.AIEntity.Empire.GetPropertyValue(SimulationProperties.EmpireScaleFactor) * this.strategicResourceMinimumStockPerCity;
        float num3                = Mathf.Max(stockValue - num2, b);
        float averageValue4       = this.resourcesAIData.GetAverageValue(SimulationProperties.BankAccount);
        float averageValue5       = this.resourcesAIData.GetAverageValue(SimulationProperties.NetEmpireMoney);
        float b2                  = averageValue4 + 8f * base.AIEntity.Empire.GetPropertyValue(SimulationProperties.GameSpeedMultiplier) * averageValue5;
        float quantity            = stockValue - num3;
        float priceWithSalesTaxes = TradableResource.GetPriceWithSalesTaxes(sellInfo.ResourceDefinition.Name, TradableTransactionType.Sellout, base.AIEntity.Empire, quantity);

        if (priceWithSalesTaxes <= 1.401298E-45f)
        {
            return(float.PositiveInfinity);
        }
        float num4  = priceWithSalesTaxes / Mathf.Max(1f, b2);
        float value = 1f / num4;
        float num5  = Mathf.Clamp01(this.maxDeviationFromResourceMinimumStock);
        float num6  = num3 * Mathf.Clamp(value, 1f - num5, 1f + num5);

        if (flag)
        {
            float num7 = this.departmentOfForeignAffairs.IsInWarWithSomeone() ? 2f : 1f;
            float b3   = (20f + ((float)this.departmentOfScience.CurrentTechnologyEraNumber - 1f) * 10f) * num7;
            num6 = Mathf.Max(num6, b3);
        }
        return(num6);
    }
Esempio n. 4
0
    private float GetLuxurySellThreshold(AILayer_ResourceManager.SellInfo sellInfo, float stockValue)
    {
        float propertyValue = base.AIEntity.Empire.GetPropertyValue(SimulationProperties.EmpireScaleFactor);
        float num           = 5f * (propertyValue + 1f);
        float num2          = 0f;

        if (this.aILayer_Research.ResourcesNeededForKaijus.TryGetValue(sellInfo.ResourceDefinition.Name, out num2))
        {
            return(1.5f * num + num2);
        }
        if (this.aILayer_QuestBTController.ResourcesNeededForQuest.TryGetValue(sellInfo.ResourceDefinition.Name, out num2))
        {
            return(1.5f * num + num2);
        }
        float num3;

        this.departmentOfTheTreasury.TryGetNetResourceValue(base.AIEntity.Empire, sellInfo.ResourceDefinition.Name, out num3, true);
        if (num3 < 0.5f && stockValue < num)
        {
            if (this.departmentOfScience.CanTradeResourcesAndBoosters(false))
            {
                List <string> list = new List <string>
                {
                    "Luxury5",
                    "Luxury11",
                    "Luxury12",
                    "Luxury7",
                    "Luxury3",
                    "Luxury13",
                    "Luxury6",
                    "Luxury2",
                    "Luxury10",
                    "Luxury4",
                    "Luxury8",
                    "Luxury1",
                    "Luxury9",
                    "Luxury15",
                    "Luxury14"
                };
                float num4 = 0f;
                foreach (City city in this.departmentOfTheInterior.Cities)
                {
                    num4 += city.GetPropertyValue(SimulationProperties.OverrallTradeRoutesCityDustIncome);
                }
                if (num4 < 50f)
                {
                    list.Remove("Luxury7");
                }
                if (this.departmentOfEducation.Heroes.Count < 5)
                {
                    list.Remove("Luxury13");
                }
                if (base.AIEntity.Empire.GetPropertyValue(SimulationProperties.NetEmpireApproval) > 90f)
                {
                    list.Remove("Luxury14");
                    list.Remove("Luxury5");
                }
                if (!this.departmentOfForeignAffairs.IsInWarWithSomeone())
                {
                    list.Remove("Luxury6");
                    list.Remove("Luxury2");
                }
                if (base.AIEntity.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitReplicants1))
                {
                    list.Remove("Luxury8");
                }
                if (base.AIEntity.Empire.SimulationObject.Tags.Contains(FactionTrait.FactionTraitBrokenLords2))
                {
                    list.Remove("Luxury4");
                }
                float num5;
                if (!this.departmentOfTheTreasury.TryGetResourceStockValue(base.AIEntity.Empire.SimulationObject, DepartmentOfTheTreasury.Resources.EmpireMoney, out num5, false))
                {
                    num5 = 0f;
                }
                if (num5 < 600f || (float)this.departmentOfEducation.Heroes.Count < (float)this.departmentOfTheInterior.Cities.Count * 1.5f || base.AIEntity.Empire.GetPropertyValue(SimulationProperties.NetEmpireMoney) < 10f)
                {
                    list.Remove("Luxury14");
                    list.Remove("Luxury15");
                    list.Remove("Luxury9");
                }
                if (list.Contains(sellInfo.ResourceDefinition.Name))
                {
                    float            num6             = Mathf.Ceil(num - stockValue);
                    TradableResource tradableResource = this.TryGetTradableRessource(sellInfo.ResourceDefinition.Name);
                    if (tradableResource != null && tradableResource.Quantity >= num6)
                    {
                        float priceWithSalesTaxes = TradableResource.GetPriceWithSalesTaxes(sellInfo.ResourceDefinition.Name, TradableTransactionType.Buyout, base.AIEntity.Empire, num6);
                        float num7 = (num6 <= 10f) ? 2.5f : (2.5f + (num6 - 10f) / 20f);
                        if (num5 >= priceWithSalesTaxes * num7)
                        {
                            return(1.5f * num);
                        }
                    }
                }
            }
            return(0f);
        }
        return(1.5f * num);
    }