Beispiel #1
0
        public override void Generate(Map map, GenStepParams parms)
        {
            float num = Mathf.Min(18000f, Mathf.Max(new float[]
            {
                Mathf.Exp(Rand.Gaussian(8f, 0.65f))
            }));
            ThingSetMakerParams value = default(ThingSetMakerParams);

            value.techLevel = TechLevel.Spacer;
            int count = Rand.RangeInclusive(2, 10);

            value.countRange            = new IntRange?(new IntRange(count, count));
            value.totalMarketValueRange = new FloatRange?(new FloatRange(num, num));
            value.validator             = ((ThingDef t) => t.defName != "Silver");
            if (num > 10000f)
            {
                value.countRange = new IntRange?(new IntRange(1, 1));
            }
            List <Thing> list = ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(value);

            foreach (Thing thing in list)
            {
                if (thing.stackCount > thing.def.stackLimit)
                {
                    thing.stackCount = thing.def.stackLimit;
                }
                IntVec3 intVec;
                if (CellFinderLoose.TryGetRandomCellWith((IntVec3 x) => x.Standable(map) && x.Fogged(map) && GridsUtility.GetRoom(x, map, RegionType.Set_Passable).CellCount >= 2, map, 1000, out intVec))
                {
                    // TODO: check if it works
                    GenSpawn.Spawn(thing, intVec, map, Rot4.Random, WipeMode.Vanish, false);
                }
            }
        }
Beispiel #2
0
        protected override void Generate(ThingSetMakerParams parms, List <Thing> outThings)
        {
            ThingDef thingDef = ThingSetMaker_Treasure.RandomPodContentsDef();
            float    num      = Rand.Range(MinMoney, MaxMoney);

            do
            {
                Thing thing = ThingMaker.MakeThing(thingDef, null);
                int   num2  = Rand.Range(20, 40);
                if (num2 > thing.def.stackLimit)
                {
                    num2 = thing.def.stackLimit;
                }
                if ((float)num2 * thing.def.BaseMarketValue > num)
                {
                    num2 = Mathf.FloorToInt(num / thing.def.BaseMarketValue);
                }
                if (num2 == 0)
                {
                    num2 = 1;
                }
                thing.stackCount = num2;
                outThings.Add(thing);
                num -= (float)num2 * thingDef.BaseMarketValue;
            }while (outThings.Count < MaxStacks && num > thingDef.BaseMarketValue);
        }
        public override void Resolve(ResolveParams rp)
        {
            Map map = BaseGen.globalSettings.map;

            this.CalculateFreeCells(rp.rect, 0.45f);

            ThingSetMakerParams value = default;

            value.techLevel     = new TechLevel?((rp.faction != null) ? rp.faction.def.techLevel : TechLevel.Undefined);
            value.makingFaction = rp.faction;
            value.validator     = (ThingDef x) => rp.faction == null || x.techLevel >= rp.faction.def.techLevel || !x.IsWeapon || x.GetStatValueAbstract(StatDefOf.MarketValue, GenStuff.DefaultStuffFor(x)) >= 100f;
            float marketValue = rp.stockpileMarketValue ?? Mathf.Min((float)this.cells.Count * 130f, 1800f);

            marketValue *= CGO.settlementLayoutDef.stockpileValueMultiplier;
            value.totalMarketValueRange = new FloatRange?(new FloatRange(marketValue, marketValue));

            if (value.countRange == null)
            {
                value.countRange = new IntRange?(new IntRange(this.cells.Count, this.cells.Count));
            }

            ResolveParams rp2 = rp;

            rp2.thingSetMakerDef    = ThingSetMakerDefOf.MapGen_DefaultStockpile;
            rp2.thingSetMakerParams = new ThingSetMakerParams?(value);
            BaseGen.symbolStack.Push("kcsg_thingsetonlyroofed", rp2, null);
        }
Beispiel #4
0
        public override void Notify_GeneratedByQuestGen(SitePart part, Slate slate, List <Rule> outExtraDescriptionRules, Dictionary <string, string> outExtraDescriptionConstants)
        {
            base.Notify_GeneratedByQuestGen(part, slate, outExtraDescriptionRules, outExtraDescriptionConstants);
            ThingDef thingDef = slate.Get <ThingDef>("itemStashSingleThing");
            IEnumerable <ThingDef> enumerable = slate.Get <IEnumerable <ThingDef> >("itemStashThings");
            List <Thing>           list;

            if (thingDef != null)
            {
                list = new List <Thing>();
                list.Add(ThingMaker.MakeThing(thingDef));
            }
            else if (enumerable != null)
            {
                list = new List <Thing>();
                foreach (ThingDef item in enumerable)
                {
                    list.Add(ThingMaker.MakeThing(item));
                }
            }
            else
            {
                float x = slate.Get("points", 0f);
                ThingSetMakerParams parms = default(ThingSetMakerParams);
                parms.totalMarketValueRange = new FloatRange(0.7f, 1.3f) * QuestTuning.PointsToRewardMarketValueCurve.Evaluate(x);
                list = ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(parms);
            }
            part.things = new ThingOwner <Thing>(part, oneStackOnly: false);
            part.things.TryAddRangeOrTransfer(list, canMergeWithExistingStacks: false);
            slate.Set("generatedItemStashThings", list);
            outExtraDescriptionRules.Add(new Rule_String("itemStashContents", GenLabel.ThingsLabel(list)));
            outExtraDescriptionRules.Add(new Rule_String("itemStashContentsValue", GenThing.GetMarketValue(list).ToStringMoney()));
        }
        private List <Thing> GenerateRewards(Faction alliedFaction = null)
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.techLevel = TechLevel.Medieval; //new TechLevel?(alliedFaction.def.techLevel);
            return(ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(parms));
        }
Beispiel #6
0
		protected override void Generate(ThingSetMakerParams parms, List<Thing> outThings)
		{
			List<PawnKindDef> things = new List<PawnKindDef>();
			List<PawnKindDef> allAnimalDefs = DefDatabase<PawnKindDef>.AllDefsListForReading;

			foreach (PawnKindDef def in allAnimalDefs)
			{
				bool flag = def.race.race.Animal && def.RaceProps.IsFlesh && def.race.BaseMarketValue > parms.totalMarketValueRange.Value.min && def.race.tradeTags != null && !def.race.tradeTags.Contains("AnimalMonster") && !def.race.tradeTags.Contains("AnimalGenetic") && !def.race.tradeTags.Contains("AnimalAlpha");
				if (flag)
				{
					things.Add(def);
				}
			}

			regen:
				PawnGenerationRequest request = new PawnGenerationRequest(things.RandomElement<PawnKindDef>(), Find.FactionManager.OfPlayer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 1f, false, true, true, false, false, false, false, true, 0, null, 1, null, null, null, null);
				Pawn pawn = PawnGenerator.GeneratePawn(request);


			if (pawn.MarketValue > parms.totalMarketValueRange.Value.max)
			{
				goto regen;
			}
			outThings.Add(pawn);
		
		}
Beispiel #7
0
        public override void Resolve(ResolveParams rp)
        {
            Map map = BaseGen.globalSettings.map;
            ThingSetMakerDef    obj = rp.thingSetMakerDef ?? ThingSetMakerDefOf.MapGen_DefaultStockpile;
            ThingSetMakerParams parms;

            if (rp.thingSetMakerParams.HasValue)
            {
                parms = rp.thingSetMakerParams.Value;
            }
            else
            {
                int num = rp.rect.Cells.Count((IntVec3 x) => x.Standable(map) && x.GetFirstItem(map) == null);
                parms = new ThingSetMakerParams
                {
                    countRange = new IntRange(num, num),
                    techLevel  = ((rp.faction != null) ? rp.faction.def.techLevel : TechLevel.Undefined)
                };
            }
            parms.makingFaction = rp.faction;
            List <Thing> list = obj.root.Generate(parms);

            for (int i = 0; i < list.Count; i++)
            {
                ResolveParams resolveParams = rp;
                resolveParams.singleThingToSpawn = list[i];
                BaseGen.symbolStack.Push("thing", resolveParams);
            }
        }
Beispiel #8
0
		public static ThingSetMakerParams returnThingSetMakerParams(int baseValue, int rangeMod)
		{
			ThingSetMakerParams parms = new ThingSetMakerParams();
			parms.techLevel = Find.FactionManager.OfPlayer.def.techLevel;
			parms.totalMarketValueRange = new FloatRange(baseValue - rangeMod, baseValue + rangeMod);
			return parms;
		}
Beispiel #9
0
        public static List <Thing> generateRaidLoot(int lootLevel, TechLevel techLevel)
        {
            List <Thing>        things        = new List <Thing>();
            ThingSetMaker       thingSetMaker = new ThingSetMaker_MarketValue();
            ThingSetMakerParams param         = new ThingSetMakerParams();

            param.totalMarketValueRange = new FloatRange(500 + (lootLevel * 200), 1000 + (lootLevel * 500));
            param.filter     = new ThingFilter();
            param.techLevel  = techLevel;
            param.countRange = new IntRange(3, 20);

            //set allow
            param.filter.SetAllow(ThingCategoryDefOf.Weapons, true);
            param.filter.SetAllow(ThingCategoryDefOf.Apparel, true);
            param.filter.SetAllow(ThingCategoryDefOf.BuildingsArt, true);
            param.filter.SetAllow(ThingCategoryDefOf.Drugs, true);
            param.filter.SetAllow(ThingCategoryDefOf.Items, true);
            param.filter.SetAllow(ThingCategoryDefOf.Medicine, true);
            param.filter.SetAllow(ThingCategoryDefOf.Techprints, true);
            param.filter.SetAllow(ThingCategoryDefOf.Buildings, true);

            //set disallow
            param.filter.SetAllow(DefDatabase <ThingDef> .GetNamedSilentFail("Teachmat"), false);

            things = thingSetMaker.Generate(param);
            return(things);
        }
Beispiel #10
0
        public override void Resolve(ResolveParams rp)
        {
            int?            ancientCryptosleepCasketGroupID = rp.ancientCryptosleepCasketGroupID;
            int             groupID         = (ancientCryptosleepCasketGroupID == null) ? Find.UniqueIDsManager.GetNextAncientCryptosleepCasketGroupID() : ancientCryptosleepCasketGroupID.Value;
            PodContentsType?podContentsType = rp.podContentsType;
            PodContentsType value           = (podContentsType == null) ? Gen.RandomEnumValue <PodContentsType>(true) : podContentsType.Value;
            Rot4?           thingRot        = rp.thingRot;
            Rot4            rot             = (thingRot == null) ? Rot4.North : thingRot.Value;
            Building_AncientCryptosleepCasket building_AncientCryptosleepCasket = (Building_AncientCryptosleepCasket)ThingMaker.MakeThing(ThingDefOf.AncientCryptosleepCasket, null);

            building_AncientCryptosleepCasket.groupID = groupID;
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.podContentsType = new PodContentsType?(value);
            List <Thing> list = ThingSetMakerDefOf.MapGen_AncientPodContents.root.Generate(parms);

            for (int i = 0; i < list.Count; i++)
            {
                if (!building_AncientCryptosleepCasket.TryAcceptThing(list[i], false))
                {
                    Pawn pawn = list[i] as Pawn;
                    if (pawn != null)
                    {
                        Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard);
                    }
                    else
                    {
                        list[i].Destroy(DestroyMode.Vanish);
                    }
                }
            }
            GenSpawn.Spawn(building_AncientCryptosleepCasket, rp.rect.RandomCell, BaseGen.globalSettings.map, rot, WipeMode.Vanish, false);
        }
Beispiel #11
0
        static bool Prefix(ref ThingSetMaker_RefugeePod __instance, ThingSetMakerParams parms, List <Thing> outThings)
        {
            Faction faction = DownedRefugeeQuestUtility.GetRandomFactionForRefugee();


            if (faction == FactionColonies.getPlayerColonyFaction())
            {
                List <PawnKindDef> list = new List <PawnKindDef>();
                foreach (ThingDef def in Find.World.GetComponent <FactionFC>().raceFilter.AllowedThingDefs)
                {
                    list.Add(def.race.AnyPawnKind);
                }


                Pawn pawn = PawnGenerator.GeneratePawn(new PawnGenerationRequest(PawnKindDefOf.SpaceRefugee, DownedRefugeeQuestUtility.GetRandomFactionForRefugee(), PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 20f, false, true, true, true, false, false, false, false, 0f, null, 1f, null, null, null, null, null, null, null, null, null, null, null, null));
                outThings.Add(pawn);
                HealthUtility.DamageUntilDowned(pawn, true);



                return(false);
            }
            else
            {
                return(true);
            }
        }
Beispiel #12
0
 public static void ItemCollectionGeneratorGeneratePrefix(ref ThingSetMakerParams parms)
 {
     if (ModStuff.Settings.LimitTechnology && parms.techLevel.HasValue && parms.techLevel > RemoveModernStuff.MAX_TECHLEVEL)
     {
         parms.techLevel = RemoveModernStuff.MAX_TECHLEVEL;
     }
 }
        public override void Resolve(ResolveParams rp)
        {
            int             groupID = rp.ancientCryptosleepCasketGroupID ?? Find.UniqueIDsManager.GetNextAncientCryptosleepCasketGroupID();
            PodContentsType value   = rp.podContentsType ?? Gen.RandomEnumValue <PodContentsType>(disallowFirstValue: true);
            Rot4            rot     = rp.thingRot ?? Rot4.North;
            Building_AncientCryptosleepCasket building_AncientCryptosleepCasket = (Building_AncientCryptosleepCasket)ThingMaker.MakeThing(ThingDefOf.AncientCryptosleepCasket);

            building_AncientCryptosleepCasket.groupID = groupID;
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.podContentsType = value;
            List <Thing> list = ThingSetMakerDefOf.MapGen_AncientPodContents.root.Generate(parms);

            for (int i = 0; i < list.Count; i++)
            {
                if (!building_AncientCryptosleepCasket.TryAcceptThing(list[i], allowSpecialEffects: false))
                {
                    Pawn pawn = list[i] as Pawn;
                    if (pawn != null)
                    {
                        Find.WorldPawns.PassToWorld(pawn, PawnDiscardDecideMode.Discard);
                    }
                    else
                    {
                        list[i].Destroy();
                    }
                }
            }
            GenSpawn.Spawn(building_AncientCryptosleepCasket, rp.rect.RandomCell, BaseGen.globalSettings.map, rot);
        }
        public override void Generate(Map map, GenStepParams genStepParams)
        {
            if (!MapGenerator.TryGetVar("RectOfInterest", out CellRect centralPoint))
            {
                centralPoint = CellRect.SingleCell(map.Center);
            }

            var faction = map.ParentFaction == null || map.ParentFaction == Faction.OfPlayer
                ? Find.FactionManager.RandomEnemyFaction()
                : map.ParentFaction;
            ResolveParams resolveParams = default;

            resolveParams.rect    = GetHuntersLodgeRect(centralPoint, map);
            resolveParams.faction = faction;

            ThingSetMakerParams maxFoodAndStuffForHuntersLodge = default;

            maxFoodAndStuffForHuntersLodge.totalMarketValueRange = new FloatRange(200, 500);
            maxFoodAndStuffForHuntersLodge.totalNutritionRange   = new FloatRange(20, 50);

            //maxFoodAndStuffForHuntersLodge.filter.SetAllow(ThingCategoryDefOf.PlantFoodRaw, true);

            resolveParams.thingSetMakerParams = maxFoodAndStuffForHuntersLodge;

            BaseGen.globalSettings.map          = map;
            BaseGen.globalSettings.minBuildings = 1;
            BaseGen.globalSettings.minBarracks  = 1;
            BaseGen.symbolStack.Push("huntersLodgeBase", resolveParams);
            BaseGen.Generate();
        }
        public override void Generate(Map map, GenStepParams genStepParams)
        {
            if (!MapGenerator.TryGetVar <CellRect>(name: "RectOfInterest", var: out CellRect centralPoint))
            {
                centralPoint = CellRect.SingleCell(c: map.Center);
            }

            Faction       faction       = Faction.OfMechanoids;
            ResolveParams resolveParams = new ResolveParams();

            resolveParams.rect    = this.getRect(centralPoint: centralPoint, map: map);
            resolveParams.faction = faction;

            ThingSetMakerParams thingMakerParams = new ThingSetMakerParams();

            thingMakerParams.totalMarketValueRange = new FloatRange(500, 1000);
            thingMakerParams.filter = new ThingFilter();
            thingMakerParams.filter.SetDisallowAll();
            thingMakerParams.filter.SetAllow(WTH_DefOf.WTH_MechanoidData, true);

            resolveParams.thingSetMakerParams = thingMakerParams;
            float sizeFactor = size / 20f;

            resolveParams.mechanoidsCount = Math.Max(5, Mathf.RoundToInt((genStepParams.sitePart.parms.threatPoints * sizeFactor) / 100f));

            BaseGen.globalSettings.map          = map;
            BaseGen.globalSettings.minBuildings = 1;
            BaseGen.globalSettings.minBarracks  = 1;
            BaseGen.symbolStack.Push(symbol: "mechanoidTemple", resolveParams: resolveParams);
            BaseGen.Generate();
        }
        protected override void RunInt()
        {
            Quest      quest            = QuestGen.quest;
            Slate      slate            = QuestGen.slate;
            Map        map              = QuestGen_Get.GetMap();
            Faction    faction          = slate.Get <Faction>("faction");
            FloatRange marketValueRange = slate.Get <FloatRange>("marketValueRange");
            Pawn       val              = slate.Get <Pawn>("rewardGiver");

            quest.ReservePawns(Gen.YieldSingle(val));
            quest.ReserveFaction(faction);
            int num = Rand.Range(5, 20) * 60000;

            slate.Set("rewardDelayTicks", num);
            quest.Delay(num, delegate
            {
                ThingSetMakerParams parms   = default(ThingSetMakerParams);
                parms.totalMarketValueRange = marketValueRange;
                parms.qualityGenerator      = QualityGenerator.Reward;
                parms.makingFaction         = faction;
                List <Thing> list           = ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(parms);
                slate.Set("listOfRewards", GenLabel.ThingsLabel(list));
                quest.DropPods(map.Parent, list, null, null, "[rewardLetterText]", null, true);
                QuestGen_End.End(quest, QuestEndOutcome.Unknown);
            }, null, null, null, reactivatable: false, null, null, isQuestTimeout: false, null, null, "RewardDelay");
        }
Beispiel #17
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));
                }
            }
        }
Beispiel #18
0
 public static void ItemCollectionGeneratorGeneratePrefix(ref ThingSetMakerParams parms)
 {
     if (!parms.techLevel.HasValue || parms.techLevel > RemoveIndustrialStuff.MAX_TECHLEVEL)
     {
         parms.techLevel = RemoveIndustrialStuff.MAX_TECHLEVEL;
     }
 }
        // Token: 0x06000073 RID: 115 RVA: 0x00004A74 File Offset: 0x00002C74
        protected virtual List <Thing> GenerateItems(Faction siteFaction, float siteThreatPoints)
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.totalMarketValueRange = new FloatRange?(SiteTuning.ItemStashQuestMarketValueRange * SiteTuning.QuestRewardMarketValueThreatPointsFactor.Evaluate(siteThreatPoints));
            return(ThingSetMakerDefOf.Gen_OldOutpost.root.Generate(parms));
        }
        protected override bool TryExecuteWorker(IncidentParms parms)
        {
            int tile;

            if (!TileFinder.TryFindNewSiteTile(out tile, minDist, maxDist, false, true, -1))
            {
                return(false);
            }
            Faction faction;

            if (!TryFindFaction(out faction))
            {
                return(false);
            }
            Site site = (Site)WorldObjectMaker.MakeWorldObject(SiteDefOf.PrisonSiteLGE);

            site.Tile = tile;
            site.core = new SiteCore(SiteDefOf.PrisonCampLGE, SiteDefOf.PrisonCampLGE.Worker.GenerateDefaultParams(site, StorytellerUtility.DefaultSiteThreatPointsNow()));
            site.SetFaction(faction);
            ThingSetMakerParams thingMakerparms = default(ThingSetMakerParams);

            thingMakerparms.totalMarketValueRange = new FloatRange?(SiteTuning.BanditCampQuestRewardMarketValueRange);
            List <Thing> list = ThingSetMakerDefOf.Reward_StandardByDropPod.root.Generate(thingMakerparms);

            site.GetComponent <PrisonerRescueQuestComp>().StartQuest(faction, 18, list);

            site.GetComponent <TimeoutComp>().StartTimeout(TimeoutDaysRange.RandomInRange * 60000);
            Find.WorldObjects.Add(site);
            Find.LetterStack.ReceiveLetter("LetterLabelPrisonCampLGE".Translate(), "LetterPrisonCampLGE".Translate(faction.Name, GenThing.GetMarketValue(list).ToStringMoney(null), GenLabel.ThingsLabel(list, string.Empty)), LetterDefOf.PositiveEvent, site, null);

            return(true);
        }
        public void GenerateThings()
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.traderDef = this.cargoKind;
            parms.tile      = this.Map.Tile;
            this.things.TryAddRangeOrTransfer(ThingSetMakerDefOf.TraderStock.root.Generate(parms), true);
        }
Beispiel #22
0
 protected override bool Condition(ThingSetMakerParams parms)
 {
     if (parms.totalMarketValueRange.HasValue)
     {
         return(parms.totalMarketValueRange.Value.max >= minMaxTotalMarketValue);
     }
     return(false);
 }
        private List <Thing> GenerateRewards(FloatRange totalValue)
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.countRange            = new IntRange(2, 10);
            parms.totalMarketValueRange = totalValue;
            return(ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(parms));
        }
Beispiel #24
0
        public void GenerateRewards(ThingSetMakerDef maker, FloatRange totalValue, IntRange?countRange)
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.totalMarketValueRange = totalValue;
            parms.countRange            = countRange;

            Rewards = maker.root.Generate(parms);
        }
Beispiel #25
0
        protected override IEnumerable <ThingDef> AllGeneratableThingsDebugSub(ThingSetMakerParams parms)
        {
            foreach (ThingDef def in DefDatabase <ThingDef> .AllDefs.Where(x => x.isTechHediff).Union(BionicIcons.alteredThings))
            {
                yield return(def);
            }

            yield break;
        }
Beispiel #26
0
        public List <Thing> GenerateRewards()
        {
            ThingSetMakerParams value = default(ThingSetMakerParams);

            value.techLevel             = TechLevel.Spacer;
            value.countRange            = new IntRange?(new IntRange(1, 1));
            value.totalMarketValueRange = new FloatRange?(new FloatRange(500f, 3000f));
            return(ThingSetMakerDefOf.Reward_ItemsStandard.root.Generate(value));
        }
Beispiel #27
0
        // from IncidentWorker_QuestItemStash
        protected List <Thing> GenerateItems(Faction siteFaction, float siteThreatPoints)
        {
            ThingSetMakerParams parms = default(ThingSetMakerParams);

            parms.totalMarketValueRange = new FloatRange(0.7f, 1.3f);

            ThingSetMakerDef thingSetMakerDef = DefDatabase <ThingSetMakerDef> .GetNamedSilentFail("Reward_Incidents_ItemStashQuestContents");

            return(thingSetMakerDef.root.Generate(parms));
        }
        protected override void Generate(ThingSetMakerParams parms, List <Thing> outThings)
        {
            PawnKindDef eyeling = PawnKindDef.Named("AA_Eyeling");

            PawnGenerationRequest request = new PawnGenerationRequest(eyeling, Faction.OfPlayer, PawnGenerationContext.NonPlayer, -1, false, false, false, false, true, false, 1f, false, true, true, true, false, false, false, false, 0f, 0f, null, 1f, null, null, null, null, null, null, null, null, null, null, null, null);
            Pawn pawn  = PawnGenerator.GeneratePawn(request);
            Pawn pawn2 = PawnGenerator.GeneratePawn(request);

            outThings.Add(pawn);
            outThings.Add(pawn2);
        }
        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 override void GenerateRect(Stencil s)
        {
            s.FillTerrain(GenCity.RandomFloor(s.map));
            var pawn = (Pawn)null;

            if (!s.map.ParentFaction.HostileTo(Faction.OfPlayer))
            {
                pawn = GenCity.SpawnInhabitant(s.Coords(s.RandX / 2, s.RandZ / 2), s.map);
                var traderKind = DefDatabase <TraderKindDef> .AllDefs.RandomElement();

                pawn.mindState.wantsToTradeWithColony = true;
                PawnComponentsUtility.AddAndRemoveDynamicComponents(pawn, true);
                pawn.trader.traderKind = traderKind;
                pawn.inventory.DestroyAll();
                var parms = new ThingSetMakerParams {
                    traderDef     = traderKind,
                    tile          = s.map.Tile,
                    makingFaction = s.map.ParentFaction,
                };
                foreach (var item in ThingSetMakerDefOf.TraderStock.root.Generate(parms))
                {
                    if (!(item is Pawn) && !pawn.inventory.innerContainer.TryAdd(item))
                    {
                        item.Destroy();
                    }
                }

                PawnInventoryGenerator.GiveRandomFood(pawn);
            }

            for (var dir = 0; dir < 4; dir++)
            {
                if (s.Chance(standChance))
                {
                    var sStand = s.Rotate(dir).Move(Mathf.RoundToInt(s.RandX / 2F), s.MaxZ - s.RandInclusive(0, 2)).Bound(-1, 0, 1, 0);
                    sStand.FillTerrain(GenCity.RandomFloor(s.map, true));
                    var wallStuff = GenCity.RandomWallStuff(s.map);
                    sStand.Spawn(sStand.MinX - 1, 0, ThingDefOf.Wall, wallStuff);
                    sStand.Spawn(sStand.MaxX + 1, 0, ThingDefOf.Wall, wallStuff);
                    sStand.Expand(1).FillRoof(RoofDefOf.RoofConstructed);
                    // if (pawn != null) {
                    //     var itemPos = sStand.Coords(sStand.RandX, sStand.RandZ);
                    //     var item = pawn.inventory.innerContainer.FirstOrDefault();
                    //     if (item != null) {
                    //         pawn.inventory.innerContainer.TryDrop(item, itemPos, s.map, ThingPlaceMode.Direct, out var result);
                    //         item.SetOwnedByCity(true, s.map);
                    //     }
                    // }
                }
            }
        }