示例#1
0
        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));
                }
            }
        }
示例#2
0
        protected void GenerateAndSendHelp(int price, Map map, Dictionary <ThingDef, int> items)
        {
            if (!DarkNetPriceUtils.TakeSilverFromPlayer(price, map))
            {
                return;
            }

            List <Thing> toDrop = new List <Thing>();

            foreach (var item in items)
            {
                Thing newItem = ThingMaker.MakeThing(item.Key);
                newItem.stackCount = item.Value;

                toDrop.Add(newItem);
            }

            DropItems(toDrop, map);

            totalUses++;
            alreadyUsed = true;

            if (totalUses >= 3)
            {
                lastHelpTicks = Find.TickManager.TicksGame;
            }
        }
示例#3
0
        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 bool AcceptOrder()
        {
            if (DarkNetPriceUtils.BuyAndDropItem(Order.OrderedItem, (int)Order.Price, Find.AnyPlayerHomeMap, true))
            {
                Order = null;
                return(true);
            }

            return(false);
        }
        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 override Thing GenerateItem(DarkNetTrader trader)
        {
            TraderWorker_RogerEdmonson roger = (TraderWorker_RogerEdmonson)trader;

            if (roger.OrderBodyparts.First(x => x.BodypartGroup == Group).Items.TryRandomElementByWeight(x2 => x2.Commonality, out OrderThing result))
            {
                Thing thing = ThingMaker.MakeThing(result.ThingDef);
                if (PriceModificatorUtils.TryGetPriceModificator(thing, roger.def, out PriceModificatorDef modificator))
                {
                    DarkNetPriceUtils.FinalizeItem(thing, modificator);
                }

                return(thing);
            }

            return(null);
        }
示例#8
0
        private void GenerateAndSendPawns(int price, Map map, float points, Dictionary <SkillDef, int> skillsData, List <TraitDef> forceTraits, Faction generateFaction)
        {
            if (!DarkNetPriceUtils.TakeSilverFromPlayer(price, map))
            {
                return;
            }

            CommunicationComponent_SlyHelp slyHelp = new CommunicationComponent_SlyHelp(2 * 60000);

            slyHelp.id = QuestsManager.Communications.UniqueIdManager.GetNextComponentID();

            slyHelp.GeneratePawns(points, skillsData, forceTraits, generateFaction);

            slyHelp.SendPawns(map);

            QuestsManager.Communications.RegisterComponent(slyHelp);

            alreadyUsed = true;

            Find.LetterStack.ReceiveLetter("SlyService_RaidHelp_HelpSendedTitle".Translate(), "SlyService_RaidHelp_HelpSendedDesc".Translate(), LetterDefOf.PositiveEvent);
        }
示例#9
0
        protected void GenerateAndSendHelp(int price, Map map, FloatRange priceRange, IntRange countRange, List <ThingDef> items)
        {
            if (!DarkNetPriceUtils.TakeSilverFromPlayer(price, map))
            {
                return;
            }

            List <Thing> toDrop             = new List <Thing>();
            ThingSetMaker_MarketValue maker = new ThingSetMaker_MarketValue();

            ThingSetMakerParams parms = default;

            parms.totalMarketValueRange = priceRange;
            parms.countRange            = countRange;

            ThingFilter filter = new ThingFilter();

            foreach (var item in items)
            {
                filter.SetAllow(item, true);
            }

            parms.filter = filter;

            maker.fixedParams = parms;

            toDrop = maker.Generate();

            DropItems(toDrop, map);

            totalUses++;
            alreadyUsed = true;

            if (totalUses >= 3)
            {
                lastHelpTicks = Find.TickManager.TicksGame;
            }
        }
示例#10
0
 private bool TakePrePayment(int prepayment)
 {
     return(DarkNetPriceUtils.TakeSilverFromPlayer(prepayment, Find.AnyPlayerHomeMap));
 }
示例#11
0
        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));
            }
        }
示例#12
0
        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);
                }
            }
        }