Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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;
            }
        }
Beispiel #4
0
        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;
            }
        }
Beispiel #5
0
        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);
            }
        }
Beispiel #6
0
        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);
            }
        }