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); } } }
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); }
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)); }
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); }
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); } }
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; }
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); }
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); }
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); } }
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"); }
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 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); }
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)); }
public void GenerateRewards(ThingSetMakerDef maker, FloatRange totalValue, IntRange?countRange) { ThingSetMakerParams parms = default(ThingSetMakerParams); parms.totalMarketValueRange = totalValue; parms.countRange = countRange; Rewards = maker.root.Generate(parms); }
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; }
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)); }
// 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); // } // } } } }