private void GenerateLoot(Verse.Map map) { int itemsCount = Rand.Range(minSupply, maxSupply); for (int i = 0; i < itemsCount; i++) { Building_Container thingContainer = (Building_Container)ThingMaker.MakeThing(ThingDefOfLocal.OpenableContainer); IntVec3 pos = map.AllCells.Where(vec => !vec.Fogged(map)).RandomElement(); if (pos == null) { continue; } GenerateApparels(map, thingContainer); GenerateWeapons(map, thingContainer); if (thingContainer.items.Count == 0) { if (Rand.Chance(0.20f)) { GenerateWeapons(map, thingContainer); } } GenSpawn.Spawn(thingContainer, pos, map); } }
private void GenerateItems(Verse.Map map) { List <ThingDef> items = new List <ThingDef>(); foreach (var thing in DefDatabase <ThingDef> .AllDefs) { if (thing.category == ThingCategory.Item) { if (thing.thingCategories != null) { if (thing.thingCategories.Contains(ThingCategoryDefOf.ResourcesRaw)) { items.Add(thing); } } } } if (items.Count == 0) { return; } int itemsCount = Rand.Range(minSupply, maxSupply); for (int i = 0; i < itemsCount; i++) { IntVec3 pos = map.AllCells.Where(vec => !vec.Fogged(map)).RandomElement(); if (pos == null) { continue; } int count = Rand.Range(1, 4); Building_Container thingContainer = (Building_Container)ThingMaker.MakeThing(ThingDefOfLocal.OpenableContainer); for (int i2 = 0; i2 < count; i2++) { ThingDef item = items.RandomElement(); int maxCount = 30; if (item.BaseMarketValue >= 5) { maxCount = 10; } if (item.BaseMarketValue > 8) { maxCount = 15; } int itemCount = Rand.Range(6, maxCount); thingContainer.AddItem(item, itemCount); dangerousLevel += (item.BaseMarketValue * itemCount) * 0.5f; } GenSpawn.Spawn(thingContainer, pos, map); } }
private void GenerateApparels(Verse.Map map, Building_Container thingContainer) { List <ThingDef> items = new List <ThingDef>(); foreach (var thing in DefDatabase <ThingDef> .AllDefs) { if (thing.category == ThingCategory.Item) { if (thing.thingCategories != null) { if (thing.thingCategories.Contains(ThingCategoryDefOf.Apparel)) { items.Add(thing); } } } } if (items.Count == 0) { return; } int count = Rand.Range(0, 3); if (count == 0) { return; } for (int i2 = 0; i2 < count; i2++) { ThingDef item = items.RandomElement(); Thing item2 = ThingMaker.MakeThing(item, GenStuff.RandomStuffFor(item)); if (Rand.Chance(0.08f)) { item2.TryGetComp <CompQuality>()?.SetQuality(QualityCategory.Legendary, ArtGenerationContext.Colony); } else { int val = Rand.Range(0, 5); item2.TryGetComp <CompQuality>()?.SetQuality((QualityCategory)val, ArtGenerationContext.Colony); } thingContainer.AddItem(item2); dangerousLevel += item2.MarketValue; } }
private void GenerateItems(Building_Container container, List <ThingDef> items) { int count = Rand.Range(1, 3); for (int i2 = 0; i2 < count; i2++) { ThingDef item = items.RandomElement(); int maxCount = 25; if (item.FirstThingCategory == ThingCategoryDefOf.Medicine) { maxCount = 15; } int itemCount = Rand.Range(1, maxCount); container.AddItem(item, itemCount); dangerousLevel += (item.BaseMarketValue * itemCount) * 0.14f; } }
private void GenerateLoot(Verse.Map map, Faction owner) { List <ThingDef> items = new List <ThingDef>(); foreach (var thing in DefDatabase <ThingDef> .AllDefs) { if (thing.category == ThingCategory.Item) { if (thing.thingCategories != null) { if (thing.thingCategories.Contains(ThingCategoryDefOf.Foods) || thing.thingCategories.Contains(ThingCategoryDefOf.Medicine)) { items.Add(thing); } } } } if (items.Count == 0) { return; } int itemsCount = Rand.Range(minSupply, maxSupply); for (int i = 0; i < itemsCount; i++) { IntVec3 pos = map.AllCells.Where(vec => !vec.Fogged(map)).RandomElement(); if (pos == null) { continue; } Building_Container thingContainer = (Building_Container)ThingMaker.MakeThing(ThingDefOfLocal.OpenableContainer); GenerateItems(thingContainer, items); GeneratePawns(thingContainer, owner); GenSpawn.Spawn(thingContainer, pos, map); } }
private void GeneratePawns(Building_Container container, Faction owner) { int pawnsCount = Rand.Range(1, 4); for (int i = 0; i < pawnsCount; i++) { Pawn p = PawnGenerator.GeneratePawn(new PawnGenerationRequest(PawnKindDefOf.Colonist, owner)); if (Rand.Chance(0.2f)) { HealthUtility.DamageUntilDead(p); } else { HealthUtility.DamageUntilDowned(p, false); } container.AddItem(p); dangerousLevel += p.MarketValue * Rand.Range(1f, 1.7f); } }