Exemplo n.º 1
0
 public static void getHeaviestWeapons(out float weightMelee, out float weightRanged)
 {
     weightMelee  = float.MinValue;
     weightRanged = float.MinValue;
     foreach (ThingStuffPair weapon in ThingStuffPair.AllWith(t => t.IsWeapon))
     {
         if (!weapon.thing.PlayerAcquirable)
         {
             continue;
         }
         float mass = weapon.thing.GetStatValueAbstract(StatDefOf.Mass);
         if (weapon.thing.IsRangedWeapon)
         {
             if (mass > weightRanged)
             {
                 weightRanged = mass;
             }
         }
         else if (weapon.thing.IsMeleeWeapon)
         {
             if (mass > weightMelee)
             {
                 weightMelee = mass;
             }
         }
     }
 }
Exemplo n.º 2
0
 public static void FillPossibleObjectLists()
 {
     if (GenList.NullOrEmpty <ThingStuffPair>(MapGenUtility.weapons))
     {
         MapGenUtility.weapons = ThingStuffPair.AllWith((ThingDef td) => td.IsWeapon && !GenList.NullOrEmpty <string>(td.weaponTags));
     }
 }
        // Copied from PawnWeaponGenerator.Reset() - 1:1 COPY!!! (Plus Shields)
        public static void Reset()
        {
            // Initialize weapons
            Predicate <ThingDef> isWeapon = (ThingDef td) => td.equipmentType == EquipmentType.Primary && !td.weaponTags.NullOrEmpty <string>();

            allWeaponPairs = ThingStuffPair.AllWith(isWeapon);
            foreach (ThingDef thingDef in from td in DefDatabase <ThingDef> .AllDefs
                     where isWeapon(td)
                     select td)
            {
                float num  = allWeaponPairs.Where((ThingStuffPair pa) => pa.thing == thingDef).Sum((ThingStuffPair pa) => pa.Commonality);
                float num2 = thingDef.generateCommonality / num;
                if (num2 != 1f)
                {
                    for (int i = 0; i < allWeaponPairs.Count; i++)
                    {
                        ThingStuffPair thingStuffPair = allWeaponPairs[i];
                        if (thingStuffPair.thing == thingDef)
                        {
                            allWeaponPairs[i] = new ThingStuffPair(thingStuffPair.thing, thingStuffPair.stuff, thingStuffPair.commonalityMultiplier * num2);
                        }
                    }
                }
            }

            // Initialize shields
            allShieldPairs = ThingStuffPair.AllWith(td => td.thingClass == typeof(Apparel_Shield));
        }
        public static void Reset()
        {
            Predicate <ThingDef> isShield = (ThingDef td) => td.GetCompProperties <CompProperties_Shield>() is CompProperties_Shield shieldProps && !shieldProps.shieldTags.NullOrEmpty();

            allShieldPairs = ThingStuffPair.AllWith(isShield);
            using (IEnumerator <ThingDef> enumerator = (from td in DefDatabase <ThingDef> .AllDefs where isShield(td) select td).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ThingDef thingDef = enumerator.Current;
                    float    num      = (from pa in allShieldPairs where pa.thing == thingDef select pa).Sum((ThingStuffPair pa) => pa.Commonality);
                    float    num2     = thingDef.generateCommonality / num;
                    if (num2 != 1f)
                    {
                        for (int i = 0; i < allShieldPairs.Count; i++)
                        {
                            ThingStuffPair thingStuffPair = allShieldPairs[i];
                            if (thingStuffPair.thing == thingDef)
                            {
                                allShieldPairs[i] = new ThingStuffPair(thingStuffPair.thing, thingStuffPair.stuff, thingStuffPair.commonalityMultiplier * num2);
                            }
                        }
                    }
                }
                enumerator.Dispose();
            }
        }
Exemplo n.º 5
0
        public static void Reset()
        {
            //Log.Message("reset called");
            hasBeenReset = true;
            Predicate <ThingDef> isWeapon = (ThingDef td) => td.equipmentType == EquipmentType.Primary && !td.weaponTags.NullOrEmpty <string>();

            allWeaponPairs = ThingStuffPair.AllWith(isWeapon);
            foreach (ThingDef thingDef in from td in DefDatabase <ThingDef> .AllDefs
                     where isWeapon(td)
                     select td)
            {
                float num  = allWeaponPairs.Where((ThingStuffPair pa) => pa.thing == thingDef).Sum((ThingStuffPair pa) => pa.Commonality);
                float num2 = thingDef.generateCommonality / num;
                if (num2 != 1f)
                {
                    for (int i = 0; i < allWeaponPairs.Count; i++)
                    {
                        ThingStuffPair thingStuffPair = allWeaponPairs[i];
                        if (thingStuffPair.thing == thingDef)
                        {
                            allWeaponPairs[i] = new ThingStuffPair(thingStuffPair.thing, thingStuffPair.stuff, thingStuffPair.commonalityMultiplier * num2);
                        }
                    }
                }
            }
        }
Exemplo n.º 6
0
 static List <ThingStuffPair> AllApparelPairs()
 {
     if (_allApparelPairs == null)
     {
         _allApparelPairs = ThingStuffPair.AllWith((ThingDef td) => td.IsApparel)
                            .Where(pair =>
         {
             var def = pair.thing;
             if (def.IsApparel == false)
             {
                 return(false);
             }
             if (def.IsZombieDef())
             {
                 return(false);
             }
             if (def == ThingDefOf.Apparel_ShieldBelt)
             {
                 return(false);
             }
             if (def == ThingDefOf.Apparel_SmokepopBelt)
             {
                 return(false);
             }
             var path = def.apparel.wornGraphicPath;
             return(path != null && path.Length > 0);
         })
                            .ToList();
     }
     return(_allApparelPairs);
 }
Exemplo n.º 7
0
        /// <summary>
        /// Resets the shield generator.
        /// </summary>
        public static void Reset()
        {
            Predicate <ThingDef> isShield = (ThingDef td) => td.equipmentType != EquipmentType.Primary && td.canBeSpawningInventory && td.HasComp(typeof(CompShield));

            allShieldPairs = ThingStuffPair.AllWith(isShield);

            using (IEnumerator <ThingDef> enumerator = (from td in DefDatabase <ThingDef> .AllDefs
                                                        where isShield(td)
                                                        select td).GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    ThingDef thingDef = enumerator.Current;
                    float    num      = (from pa in allShieldPairs
                                         where pa.thing == thingDef
                                         select pa).Sum((ThingStuffPair pa) => pa.Commonality);
                    float num2 = thingDef.generateCommonality / num;
                    if (num2 != 1f)
                    {
                        for (int i = 0; i < allShieldPairs.Count; i++)
                        {
                            ThingStuffPair thingStuffPair = allShieldPairs[i];
                            if (thingStuffPair.thing == thingDef)
                            {
                                allShieldPairs[i] = new ThingStuffPair(thingStuffPair.thing, thingStuffPair.stuff, thingStuffPair.commonalityMultiplier * num2);
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 8
0
 public static IEnumerable <ThingStuffPair> getValidWeapons()
 {
     if (pregenedValidWeapons == null)
     {
         pregenedValidWeapons = ThingStuffPair.AllWith(t => t.IsWeapon && t.weaponTags != null && t.PlayerAcquirable);
     }
     return(pregenedValidWeapons);
 }
Exemplo n.º 9
0
        // Token: 0x06000004 RID: 4 RVA: 0x00002084 File Offset: 0x00000284
        public static float GetMinWeaponValue(PawnKindDef PKD)
        {
            var min = PKD.weaponMoney.min;
            var num = PKD.weaponMoney.max;

            if (PKD.weaponTags == null || PKD.weaponTags.Count == 0)
            {
                return(min);
            }

            var list = allWeaponPairs.Count > 0 ? allWeaponPairs : ThingStuffPair.AllWith(t => t.IsWeapon);

            if (list.Count > 0)
            {
                allWeaponPairs = list;
            }

            if (PKD.defaultFactionType == null)
            {
                return(min);
            }

            var minCompareTechLevel = GetMinCompareTechLevel(PKD.defaultFactionType.techLevel);

            if (GetAdjVal(minCompareTechLevel, out _, out var num4, out _) && num4 != 0f)
            {
                num = Math.Max(num * ((num4 + 100f) / 100f), 0f);
            }

            if (!(num > 0f))
            {
                return(min);
            }

            var num2 = num;

            foreach (var thingStuffPair in allWeaponPairs)
            {
                if (thingStuffPair.thing.techLevel == minCompareTechLevel && num2 > thingStuffPair.Price)
                {
                    num2 = thingStuffPair.Price;
                }
            }

            if (num2 <= num && num2 > min)
            {
                return(num2);
            }

            return(min);
        }
Exemplo n.º 10
0
            private static void Prefix(Pawn pawn, float money, List <ThingStuffPair> apparelCandidates)
            {
                // Short-circuit
                if (pawn == null || pawn.Faction == null || pawn.kindDef.apparelRequired == null)
                {
                    return;
                }

                // [Reflection prep] PawnApparelGenerator.CanUseStuff(pawn, pa);
                MethodInfo CanUseStuffMethod = AccessTools.Method(typeof(PawnApparelGenerator), "CanUseStuff");

                List <ThingStuffPair> allApparelPairs = ThingStuffPair.AllWith(td => td.IsApparel);

                List <ThingDef> reqApparel = pawn.kindDef.apparelRequired;

                for (int i = 0; i < reqApparel.Count; i++)
                {
                    IEnumerable <ThingStuffPair> pairs = allApparelPairs.Where(
                        pa => pa.thing == reqApparel[i]
                        );

                    // The original method is going to have a bad time, so auto-add an appropriate filter to fix it
                    if (!pairs.Any(pa => (bool)CanUseStuffMethod.Invoke(null, new object[] { pawn, pa })))
                    {
                        string logMsg =
                            "Found an apparelStuffFilter/stuffCategories conflict for required apparel " +
                            reqApparel[i] + " while generating apparel for " + pawn.kindDef.defName + "; "
                        ;

                        ThingFilter factionFilter = pawn.Faction.def.apparelStuffFilter;
                        string      factionName   = pawn.Faction.def.defName;
                        if (factionFilter != null)
                        {
                            List <StuffCategoryDef> stuffCategories = reqApparel[i].stuffCategories;
                            ThingStuffPair          examplePair     = pairs.RandomElementByWeight(pa => pa.Commonality);

                            if (stuffCategories == null && examplePair != null && examplePair.stuff != null)
                            {
                                stuffCategories = examplePair.stuff.stuffProps.categories;
                            }

                            if (stuffCategories != null)
                            {
                                logMsg = logMsg + "adding extra stuffCategories to " + factionName + "'s apparelStuffFilter: " + string.Join(", ", stuffCategories);

                                foreach (StuffCategoryDef sc in stuffCategories)
                                {
                                    factionFilter.SetAllow(sc, true);
                                }
                            }
                            else if (examplePair.stuff != null)
                            {
                                logMsg = logMsg + "adding " + examplePair.stuff + " to " + factionName + "'s apparelStuffFilter";
                                factionFilter.SetAllow(examplePair.stuff, true);
                            }
                            else if (examplePair != null)
                            {
                                logMsg = logMsg + "adding " + examplePair.thing + " to " + factionName + "'s apparelStuffFilter";
                                factionFilter.SetAllow(examplePair.thing, true);
                            }
                            else    // probably pendatic, but ¯\_(ツ)_/¯
                            {
                                logMsg = logMsg + "adding " + reqApparel[i] + " to " + factionName + "'s apparelStuffFilter";
                                factionFilter.SetAllow(reqApparel[i], true);
                            }
                        }
                        else
                        {
                            logMsg = logMsg + "cannot fix since there is no apparelStuffFilter for " + factionName;
                        }

                        Base.Instance.ModLogger.Warning(logMsg);
                    }
                }

                return;
            }
Exemplo n.º 11
0
        // Token: 0x06000029 RID: 41 RVA: 0x00002B84 File Offset: 0x00000D84
        private void EjectContents()
        {
            var random = new Random();
            var num    = random.Next(1, 101);

            if (num > 10)
            {
                var list = new List <ThingCategoryDef>
                {
                    ThingCategoryDefOf.BodyParts,
                    ThingCategoryDefOf.Apparel,
                    ThingCategoryDefOf.Drugs,
                    ThingCategoryDefOf.FoodMeals,
                    ThingCategoryDefOf.Foods,
                    ThingCategoryDefOf.MeatRaw,
                    ThingCategoryDefOf.Items,
                    ThingCategoryDefOf.Leathers,
                    ThingCategoryDefOf.Manufactured,
                    ThingCategoryDefOf.Medicine,
                    ThingCategoryDefOf.ResourcesRaw,
                    ThingCategoryDefOf.Weapons
                };
                var thingCategoryDef = list.RandomElement();
                var categoryDef      = thingCategoryDef;
                IEnumerable <ThingStuffPair> source = ThingStuffPair.AllWith(td =>
                                                                             td.thingCategories != null && td.thingCategories.Contains(categoryDef));
                while (!source.Any())
                {
                    thingCategoryDef = list.RandomElement();
                    var def1 = thingCategoryDef;
                    source = ThingStuffPair.AllWith(td =>
                                                    td.thingCategories != null && td.thingCategories.Contains(def1));
                }

                var thingStuffPair = source.RandomElement();
                var thing          = ThingMaker.MakeThing(thingStuffPair.thing, thingStuffPair.stuff);
                CellFinder.TryRandomClosewalkCellNear(Position, Map, 1, out var intVec);
                if (thing.def.thingCategories.Contains(ThingCategoryDefOf.Apparel) ||
                    thing.def.thingCategories.Contains(ThingCategoryDefOf.Weapons))
                {
                    if (random.Next(0, 101) < 20)
                    {
                        thing.TryGetComp <CompQuality>().SetQuality(QualityCategory.Poor, ArtGenerationContext.Outsider);
                    }

                    if (random.Next(0, 101) is > 20 and < 60)
                    {
                        thing.TryGetComp <CompQuality>()
                        .SetQuality(QualityCategory.Normal, ArtGenerationContext.Outsider);
                    }

                    if (random.Next(0, 101) > 60 && random.Next(0, 101) < 80)
                    {
                        thing.TryGetComp <CompQuality>().SetQuality(QualityCategory.Good, ArtGenerationContext.Outsider);
                    }

                    if (random.Next(0, 101) > 80 && random.Next(0, 101) < 90)
                    {
                        thing.TryGetComp <CompQuality>()
                        .SetQuality(QualityCategory.Excellent, ArtGenerationContext.Outsider);
                    }

                    if (random.Next(0, 101) > 90 && random.Next(0, 101) < 95)
                    {
                        thing.TryGetComp <CompQuality>()
                        .SetQuality(QualityCategory.Legendary, ArtGenerationContext.Outsider);
                    }

                    if (random.Next(0, 101) > 95 && random.Next(0, 101) < 101)
                    {
                        thing.TryGetComp <CompQuality>()
                        .SetQuality(QualityCategory.Masterwork, ArtGenerationContext.Outsider);
                    }
                }

                thing.stackCount++;
                var num3 = 0;
                while (num3 < thing.def.stackLimit * 0.02)
                {
                    thing.stackCount++;
                    num3++;
                }

                GenPlace.TryPlaceThing(thing, intVec, Map, ThingPlaceMode.Direct);
                DeSpawn();
            }
            else
            {
                var allDefs = DefDatabase <IncidentDef> .AllDefs;
                var list2   = new List <IncidentDef>();
                foreach (var incidentDef in allDefs)
                {
                    var parms = StorytellerUtility.DefaultParmsNow(incidentDef.category, Map);
                    if (incidentDef.Worker.CanFireNow(parms) && incidentDef.defName != "StrangerInBlackJoin" &&
                        incidentDef.defName != "PresentDrop" && incidentDef.defName != "ShortCircuit" &&
                        incidentDef.letterDef != null && incidentDef.letterDef.defName != "PurpleEvent" &&
                        !incidentDef.targetTags.Contains(IncidentTargetTagDefOf.World) &&
                        !incidentDef.targetTags.Contains(IncidentTargetTagDefOf.Caravan))
                    {
                        list2.Add(incidentDef);
                    }
                }

                var incidentDef2 = list2.RandomElement();
                if (incidentDef2 == null)
                {
                    EjectContents();
                }

                var incidentParms   = StorytellerUtility.DefaultParmsNow(incidentDef2?.category, Map);
                var pointsScaleable = incidentDef2 is { pointsScaleable : true };
                if (pointsScaleable)
                {
                    var storytellerComp = Find.Storyteller.storytellerComps.First(x =>
                                                                                  x is StorytellerComp_OnOffCycle || x is StorytellerComp_RandomMain);
                    incidentParms = storytellerComp.GenerateParms(incidentDef2.category, incidentParms.target);
                }

                incidentDef2?.Worker.TryExecute(incidentParms);
                DeSpawn();
            }
        }
    }