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)); }
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); }
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); }
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); }