public void TryDestroyStock() { if (stock == null) { Inititialize(); return; } foreach (var stockItem in stock) { for (int num2 = stockItem.Items.Count - 1; num2 >= 0; num2--) { SellableItemWithModif item = stockItem.Items[num2]; if (item.Item != null) { Thing thing = item.Item; if (!(thing is Pawn) && !thing.Destroyed) { thing.Destroy(); } } } stockItem.Items = null; } }
public void TryDestroyStock() { if (stock == null) { stock = new List <SellableItemWithModif>(); return; } for (int num = stock.Count - 1; num >= 0; num--) { SellableItemWithModif item = stock[num]; if (item.Item != null) { Thing thing = item.Item; if (!(thing is Pawn) && !thing.Destroyed) { thing.Destroy(); } } stock.Remove(item); } }
private void DrawSelectArrows(SellableItemWithModif item, Rect rect) { if (GUIUtils.DrawCustomButton(rect, "-1", Color.white)) { item.AddToTransfer(-1); } rect.x += 27; if (GUIUtils.DrawCustomButton(rect, "-5", Color.white)) { item.AddToTransfer(-5); } rect.x += 28; Rect rect2 = rect; rect2.width = 70; Widgets.TextFieldNumeric(rect2, ref item.CountToTransfer, ref item.EditBuffer, 0, item.Item.stackCount); rect.x += 77; if (GUIUtils.DrawCustomButton(rect, "+1", Color.white)) { item.AddToTransfer(1); } rect.x += 27; if (GUIUtils.DrawCustomButton(rect, "+5", Color.white)) { item.AddToTransfer(5); } }
public void DrawCustomItemCard(Rect rect, SellableItemWithModif item, Pawn speaker) { bgCardColor.a = 150; Widgets.DrawBoxSolid(rect, bgCardColor); GUI.color = GUIUtils.CommBorderColor; Widgets.DrawBox(rect); GUI.color = Color.white; Widgets.ThingIcon(new Rect(rect.x + 8, rect.y + 18, 64, 64), item.Item); Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(new Rect(rect.x + 80, rect.y + 8, rect.width - 88, 25), item.Item.Label); Text.Anchor = TextAnchor.UpperLeft; GUIUtils.DrawLineHorizontal(rect.x + 80, rect.y + 34, rect.width - 88, Color.gray); float y = rect.y + 36; Widgets.Label(new Rect(rect.x + 80, y, rect.width - 88, 25), $"DarkNetModificator_Price".Translate(item.MarketValue)); y += 25; if (item.Modificator != null) { Widgets.Label(new Rect(rect.x + 80, y, rect.width - 88, 40), item.Modificator.LabelCap); } Text.Anchor = TextAnchor.MiddleCenter; if (GUIUtils.DrawCustomButton(new Rect(rect.x, rect.y + 105, rect.width, 25), "DarkNetButtons_Buy".Translate(), Color.white)) { if (DarkNetPriceUtils.BuyAndDropItem(item, speaker.Map)) { if (stock.Contains(item)) { stock.Remove(item); } else { goodOfTheWeek = null; } Text.Anchor = TextAnchor.UpperLeft; return; } } Text.Anchor = TextAnchor.UpperLeft; if (Mouse.IsOver(rect)) { StringBuilder builder = new StringBuilder(); builder.Append("TraderWorker_RogerEdmonson_FullDesc".Translate(item.Item.Label, item.Item.DescriptionFlavor, item.MarketValue)); if (item.Modificator != null) { builder.Append("TraderWorker_RogerEdmonson_Modificator".Translate(item.Modificator.LabelCap, item.Modificator.description, item.Modificator.PriceModficator)); } TooltipHandler.TipRegion(rect, builder.ToString()); } }
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); } } } }
private void RandomBuy() { if (stock.Count == 0) { return; } int itemPos = Rand.Range(0, stock.Count); SellableItemWithModif item = stock[itemPos]; item.Item.Destroy(); stock.Remove(item); }
private void DrawItems(Rect rect, Pawn speaker) { List <SellableItemWithModif> items = stock; Rect goodsRect = new Rect(rect.x + 10, rect.y + 5, rect.width - 15, rect.height - 25); Rect goodRect = new Rect(0, 0, goodsRect.width - 25, 200); Rect scrollVertRectFact = new Rect(0, 0, rect.x, items.Count * 205); Widgets.BeginScrollView(goodsRect, ref slider, scrollVertRectFact, true); for (int i = 0; i < items.Count; i++) { SellableItemWithModif item = items[i]; GUIUtils.DrawItemCard(item, items, goodRect, speaker); goodRect.y += 205; } Widgets.EndScrollView(); }
private void DrawItems(Tab tab, Rect rect, Pawn speaker) { List <SellableItemWithModif> items = drugs.First(x => x.Tab == tab).Items; Rect goodsRect = new Rect(rect.x + 10, rect.y + 5, rect.width - 15, rect.height - 25); Rect goodRect = new Rect(0, 0, goodsRect.width - 25, 200); Rect scrollVertRectFact = new Rect(0, 0, rect.x, items.Count * 205); Widgets.BeginScrollView(goodsRect, ref slider, scrollVertRectFact, true); for (int i = 0; i < items.Count; i++) { SellableItemWithModif item = items[i]; DrawItem(item, items, goodRect, speaker); goodRect.y += 205; } Widgets.EndScrollView(); }
public void TryDestroyStock() { if (stock == null) { return; } for (int num = stock.Count - 1; num >= 0; num--) { SellableItemWithModif item = stock[num]; if (item.Item != null) { Thing thing = item.Item; if (!(thing is Pawn) && !thing.Destroyed) { thing.Destroy(); } } stock.Remove(item); } stock = null; if (goodOfTheWeek != null) { if (goodOfTheWeek.Item != null) { if (!(goodOfTheWeek.Item is Pawn) && !goodOfTheWeek.Item.Destroyed) { goodOfTheWeek.Item.Destroy(); } } goodOfTheWeek = null; } }
private void DrawItem(SellableItemWithModif item, List <SellableItemWithModif> itemsList, Rect rect, Pawn speaker) { bgCardColor.a = 150; Widgets.DrawBoxSolid(rect, bgCardColor); GUI.color = GUIUtils.CommBorderColor; Widgets.DrawBox(rect); GUI.color = Color.white; Widgets.ThingIcon(new Rect(rect.x + 8, rect.y + 18, 64, 64), item.Item); Text.Anchor = TextAnchor.MiddleCenter; Widgets.Label(new Rect(rect.x + 80, rect.y + 8, rect.width - 88, 25), "TraderWorker_Eisenberg_ItemLabel".Translate(item.Item.LabelNoCount, item.Item.stackCount, item.MarketValue)); Text.Anchor = TextAnchor.UpperLeft; GUIUtils.DrawLineHorizontal(rect.x + 80, rect.y + 34, rect.width - 88, Color.gray); float y = rect.y + 36; Widgets.Label(new Rect(rect.x + 80, y, rect.width - 88, 120), $"TraderWorker_Eisenberg_Description".Translate(item.Item.DescriptionDetailed)); Text.Anchor = TextAnchor.MiddleCenter; Rect arrowRect = new Rect(rect.x + 10, rect.y + 165, 25, 25); DrawSelectArrows(item, arrowRect); float addX = 200; if (item.CountToTransfer > 0) { Widgets.Label(new Rect(rect.x + 200, rect.y + 165, 250, 25), "TraderWorker_Eisenberg_Total".Translate(item.CountToTransfer, item.CountToTransfer * item.MarketValue)); addX = 450; } if (GUIUtils.DrawCustomButton(new Rect(rect.x + addX, rect.y + 165, 200, 25), "DarkNetButtons_Buy".Translate(), item.CountToTransfer > 0 ? Color.white : Color.gray)) { if (item.CountToTransfer == 0) { return; } if (DarkNetPriceUtils.BuyAndDropItem(item, item.CountToTransfer, speaker.Map)) { if (item.Item == null) { itemsList.Remove(item); } Reputation += (item.CountToTransfer * item.MarketValue) * reputationGainForBuy; needRecalculate = true; if (item.Item != null) { if (item.CountToTransfer > item.Item.stackCount) { item.AddToTransfer(item.Item.stackCount); } } Text.Anchor = TextAnchor.UpperLeft; return; } } addX += 205; if (GUIUtils.DrawCustomButton(new Rect(rect.x + addX, rect.y + 165, 200, 25), "DarkNetButtons_GoPriceDown".Translate(), (Reputation > minReputationToDiscount || !item.PriceReduced) ? Color.white : Color.gray, "DarkNetButtons_GoPriceDownInfo".Translate())) { if (item.PriceReduced || Reputation < minReputationToDiscount) { return; } Reputation -= minReputationToDiscount; item.PriceReduced = true; item.MarketValue = (int)(item.MarketValue * forceDiscount); } Text.Anchor = TextAnchor.UpperLeft; if (Mouse.IsOver(rect)) { TooltipHandler.TipRegion(rect, "TraderWorker_RogerEdmonson_FullDesc".Translate(item.Item.LabelNoCount, item.Item.DescriptionFlavor, item.MarketValue)); } }
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); } } }