public void RegenerateStock() { TryDestroyStock(); int itemsCount = Comp.Props.CountRange.RandomInRange; float valueRange = Comp.Props.ValueRange.RandomInRange; ThingSetMaker_MarketValue maker = new ThingSetMaker_MarketValue(); ThingSetMakerParams parms = default; parms.totalMarketValueRange = new FloatRange(valueRange, valueRange); parms.countRange = new IntRange(itemsCount, itemsCount); parms.filter = DarkNetPriceUtils.GetThingFilter(def.AvaliableGoods); maker.fixedParams = parms; var items = maker.Generate(); stock = new List <SellableItemWithModif>(); foreach (var item in items) { int itemValue = (int)((item.MarketValue * Character.Greed) * GetPriceModificatorByTechLevel(item.def.techLevel)); if (!DarkNetPriceUtils.TryMerge(item, stock)) { stock.Add(new SellableItemWithModif(item, itemValue, null)); } } }
public void RegenerateStock() { TryDestroyStock(); ThingSetMaker_MarketValue maker = new ThingSetMaker_MarketValue(); ThingSetMakerParams parms = default; foreach (var cat in stock) { CategoryItemSetting <Tab> settings = Comp.Props.CategoryItemSettings.First(x => x.Tab == cat.Tab); if (cat.Items == null) { cat.Items = new List <SellableItemWithModif>(); } int itemsCount = settings.CountRange.RandomInRange; float valueRange = settings.ValueRange.RandomInRange * itemsCount; parms.totalMarketValueRange = new FloatRange(valueRange, valueRange); parms.countRange = new IntRange(itemsCount, itemsCount); ThingFilter filter = DarkNetPriceUtils.GetThingFilter(settings.Goods); if (filter.AllowedDefCount == 0) { continue; } parms.filter = filter; maker.fixedParams = parms; var items = maker.Generate(); foreach (var item in items) { if (!DarkNetPriceUtils.TryMerge(item, cat.Items)) { int marketValue = (int)((item.MarketValue * Character.Greed) * settings.PriceMultiplier); var quality = item.TryGetComp <CompQuality>(); if (quality != null) { quality.SetQuality(QualityUtility.GenerateQualityRandomEqualChance(), ArtGenerationContext.Colony); marketValue = (int)(marketValue * GetPriceMultiplierForQuality(quality.Quality)); } SellableItemWithModif newItem = new SellableItemWithModif(item, marketValue, null); cat.Items.Add(newItem); } } } }
public void RegenerateStock() { TryDestroyStock(); ThingSetMaker_MarketValue maker = new ThingSetMaker_MarketValue(); ThingSetMakerParams parms = default; float tmpDiscount = discount; foreach (var cat in drugs) { DrugSettings settings = Comp.Props.DrugStockSettings.First(x => x.Tab == cat.Tab); if (cat.Items == null) { cat.Items = new List <SellableItemWithModif>(); } int itemsCount = settings.CountRange.RandomInRange; float valueRange = settings.ValueRange.RandomInRange * itemsCount; parms.totalMarketValueRange = new FloatRange(valueRange, valueRange); parms.countRange = new IntRange(itemsCount, itemsCount); ThingFilter filter = DarkNetPriceUtils.GetThingFilter(settings.Goods); if (filter.AllowedDefCount == 0) { continue; } parms.filter = filter; maker.fixedParams = parms; var items = maker.Generate(); foreach (var item in items) { if (!TryMerge(item, cat.Items)) { int marketValue = (int)((item.MarketValue * Character.Greed) * GetPriceModificatorByTechLevel(item.def.techLevel)); marketValue -= (int)(marketValue * tmpDiscount / 100); SellableItemWithModif newItem = new SellableItemWithModif(item, marketValue, null); cat.Items.Add(newItem); } } } }
public virtual void RegenerateStock() { TryDestroyStock(); int raidsCount = Find.StoryWatcher.statsRecord.numRaidsEnemy - lastRaidsEnemy; lastRaidsEnemy = raidsCount; int itemsCount = (int)itemsCountPerRaidCurve.Evaluate(raidsCount); float valueRange = startMarketValue + (marketValueMultiplierPerMapEvent * raidsCount); ThingSetMaker_MarketValue maker = new ThingSetMaker_MarketValue(); ThingSetMakerParams parms = default; parms.totalMarketValueRange = new FloatRange(valueRange, valueRange); parms.countRange = new IntRange(itemsCount, itemsCount); parms.filter = DarkNetPriceUtils.GetThingFilter(def.AvaliableGoods); maker.fixedParams = parms; var items = maker.Generate(); stock = new List <SellableItemWithModif>(); foreach (var item in items) { int itemValue = (int)(item.MarketValue * Character.Greed); if (PriceModificatorUtils.TryGetPriceModificator(item, def, out PriceModificatorDef modificator)) { itemValue = (int)(itemValue * modificator.PriceModficator); DarkNetPriceUtils.FinalizeItem(item, modificator); } MinifiedThing minifiedThing = item as MinifiedThing; if (minifiedThing != null) { var quality = minifiedThing.InnerThing.TryGetComp <CompQuality>(); if (quality != null) { quality.SetQuality(QualityUtility.GenerateQualityRandomEqualChance(), ArtGenerationContext.Colony); itemValue = (int)(itemValue * GetPriceMultiplierForQuality(quality.Quality)); } } else { var quality = item.TryGetComp <CompQuality>(); if (quality != null) { quality.SetQuality(QualityUtility.GenerateQualityRandomEqualChance(), ArtGenerationContext.Colony); itemValue = (int)(itemValue * GetPriceMultiplierForQuality(quality.Quality)); } } stock.Add(new SellableItemWithModif(item, itemValue, modificator)); } if (raidsCount >= minRaidsCountToGeneralGood && Rand.Chance(generalGoodsChance)) { parms.totalMarketValueRange = new FloatRange(specialGoodMarketValue, specialGoodMarketValue); parms.countRange = new IntRange(1, 1); parms.filter = specialGoodsFilter; maker.fixedParams = parms; Thing generalGood = maker.Generate().FirstOrDefault(); if (generalGood != null) { goodOfTheWeek = new SellableItemWithModif(generalGood, (int)(generalGood.MarketValue * Character.Greed), null); } } }