コード例 #1
0
        static Outfit MakeOutfit(OutfitDatabase database, string name)
        {
            var outfit = database.MakeNewOutfit();

            outfit.label = ("Outfit" + name).Translate();
            return(outfit);
        }
コード例 #2
0
        static ExtendedOutfit MakeOutfit(OutfitDatabase database, string name, bool autoWorkPriorities = false)
        {
            var outfit = database.MakeNewOutfit() as ExtendedOutfit;

            outfit.label = ("Outfit" + name).Translate();
            outfit.AutoWorkPriorities = autoWorkPriorities;
            return(outfit);
        }
 private static void Postfix(OutfitDatabase __instance)
 {
     if (Scribe.mode != LoadSaveMode.LoadingVars)
     {
         return;
     }
     OutfitHelper.GenerateDefaultOutfits(__instance);
 }
コード例 #4
0
        static bool Prefix(OutfitDatabase __instance)
        {
            try {
                GenerateStartingOutfits(__instance);
            } catch (Exception e) {
                Log.Error("Can't generate outfits: " + e);
            }

            return(false);
        }
コード例 #5
0
        internal static void _GenerateStartingOutfits(this OutfitDatabase outfitDatabase)
        {
            outfitDatabase.MakeNewOutfit().label = "Anything";

            Outfit outfit = outfitDatabase.MakeNewOutfit();

            outfit.label = "Nothing";
            outfit.filter.SetDisallowAll();

            Outfit outfit1 = outfitDatabase.MakeNewOutfit();

            outfit1.label = "Worker";
            outfit1.filter.SetDisallowAll();
            foreach (ThingDef allDef in DefDatabase <ThingDef> .AllDefs)
            {
                if (allDef.apparel != null && allDef.apparel.defaultOutfitTags != null && allDef.apparel.defaultOutfitTags.Contains("Worker"))
                {
                    outfit1.filter.SetAllow(allDef, true);
                }
            }

            Outfit outfit2 = outfitDatabase.MakeNewOutfit();

            outfit2.label = "Soldier";
            outfit2.filter.SetDisallowAll();
            foreach (ThingDef allDef in DefDatabase <ThingDef> .AllDefs)
            {
                if (allDef.apparel != null && allDef.apparel.defaultOutfitTags != null && allDef.apparel.defaultOutfitTags.Contains("Soldier"))
                {
                    outfit2.filter.SetAllow(allDef, true);
                }
            }

            Outfit outfit3 = outfitDatabase.MakeNewOutfit();

            outfit3.label = "Nudist";
            outfit3.filter.SetDisallowAll();
            foreach (ThingDef allDef in DefDatabase <ThingDef> .AllDefs)
            {
                if (allDef.apparel != null && !allDef.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) && !allDef.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso))
                {
                    outfit3.filter.SetAllow(allDef, true);
                }
            }

            // do my stuff here
            foreach (OutfitDef outfitDef in OutfitDefs)
            {
                Outfit newOutfit = outfitDatabase.MakeNewOutfit();
                newOutfit.label  = outfitDef.label;
                newOutfit.filter = outfitDef.filter;
            }
        }
コード例 #6
0
 private static ExtendedOutfit MakeOutfit(OutfitDatabase database, string name)
 {
     #if DEBUG
     Log.Message($"Outfit Manager: Creating outfit {name}");
     #endif
     if (!(database.MakeNewOutfit() is ExtendedOutfit outfit))
     {
         Log.Error("Outfit Manager: outfit is not of type ExtendedOutfit");
         return(null);
     }
     outfit.label = ("Outfit" + name).Translate();
     return(outfit);
 }
コード例 #7
0
        public static void FixStartingOutfits(OutfitDatabase __instance)
        {
            Outfit outfit = __instance.MakeNewOutfit();

            outfit.label = "OutfitAnything".Translate();
            Outfit outfit2 = __instance.MakeNewOutfit();

            outfit2.label = "OutfitWorker".Translate();
            ThingFilterPatch.thingFilterCallerStack.Push(outfit2);
            outfit2.filter.SetDisallowAll(null, null);
            outfit2.filter.SetAllow(SpecialThingFilterDefOf.AllowDeadmansApparel, false);
            foreach (ThingDef thingDef in DefDatabase <ThingDef> .AllDefs)
            {
                if (thingDef.apparel != null && thingDef.apparel.defaultOutfitTags != null && thingDef.apparel.defaultOutfitTags.Contains("Worker"))
                {
                    outfit2.filter.SetAllow(thingDef, true);
                }
            }
            ThingFilterPatch.thingFilterCallerStack.Pop();
            Outfit outfit3 = __instance.MakeNewOutfit();

            outfit3.label = "OutfitSoldier".Translate();
            ThingFilterPatch.thingFilterCallerStack.Push(outfit3);
            outfit3.filter.SetDisallowAll(null, null);
            outfit3.filter.SetAllow(SpecialThingFilterDefOf.AllowDeadmansApparel, false);
            foreach (ThingDef thingDef2 in DefDatabase <ThingDef> .AllDefs)
            {
                if (thingDef2.apparel != null && thingDef2.apparel.defaultOutfitTags != null && thingDef2.apparel.defaultOutfitTags.Contains("Soldier"))
                {
                    outfit3.filter.SetAllow(thingDef2, true);
                }
            }
            ThingFilterPatch.thingFilterCallerStack.Pop();
            Outfit outfit4 = __instance.MakeNewOutfit();

            outfit4.label = "OutfitNudist".Translate();
            ThingFilterPatch.thingFilterCallerStack.Push(outfit4);
            outfit4.filter.SetDisallowAll(null, null);
            outfit4.filter.SetAllow(SpecialThingFilterDefOf.AllowDeadmansApparel, false);
            foreach (ThingDef thingDef3 in DefDatabase <ThingDef> .AllDefs)
            {
                if (thingDef3.apparel != null && !thingDef3.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Legs) && !thingDef3.apparel.bodyPartGroups.Contains(BodyPartGroupDefOf.Torso))
                {
                    outfit4.filter.SetAllow(thingDef3, true);
                }
            }
            ThingFilterPatch.thingFilterCallerStack.Pop();
        }
コード例 #8
0
        public static void GenerateDefaultOutfits(OutfitDatabase db)
        {
            #if DEBUG
            Log.Message("OutfitManager: Discovered outfit stats -----");
            foreach (var stat in AllAvailableStats)
            {
                Log.Message($"OutfitManager: {stat.defName} - {stat.LabelCap}");
            }
            Log.Message("OutfitManager: -----------------------------");
            Log.Message("OutfitManager: Generating starting outfits");
            #endif
            foreach (DefaultOutfits outfitName in Enum.GetValues(typeof(DefaultOutfits)))
            {
                var outfitLabel = ("Outfit" + outfitName).Translate();
                if (!(db.AllOutfits.FirstOrDefault(o => o.label.Equals(outfitLabel, StringComparison.OrdinalIgnoreCase))
                      is ExtendedOutfit outfit))
                {
                    outfit = MakeOutfit(db, outfitName.ToString());
                    switch (outfitName)
                    {
                    case DefaultOutfits.Worker:
                        outfit.AutoWorkPriorities = true;
                        ConfigureApparelFilter(outfit,
                                               d => d.apparel?.defaultOutfitTags?.Contains("Worker") ?? false);
                        break;

                    case DefaultOutfits.Anything:
                        outfit.AutoWorkPriorities = true;
                        break;

                    case DefaultOutfits.Nudist:
                        outfit.AutoWorkPriorities = true;
                        ConfigureApparelFilter(outfit,
                                               d => d.apparel?.bodyPartGroups.All(g =>
                                                                                  !new[] { BodyPartGroupDefOf.Legs, BodyPartGroupDefOf.Torso }.Contains(g)) ??
                                               false);
                        break;

                    default:
                        outfit.AutoWorkPriorities = false;
                        break;
                    }
                }
                ConfigureStatPriorities(outfitName, outfit);
            }
        }
コード例 #9
0
        static void Postfix(OutfitDatabase __instance, List <Outfit> ___outfits)
        {
            if (Scribe.mode != LoadSaveMode.LoadingVars)
            {
                return;
            }

            if (___outfits.Any(i => i is ExtendedOutfit))
            {
                return;
            }

            foreach (var outfit in ___outfits.ToList())
            {
                ___outfits.Remove(outfit);

                ___outfits.Add(ReplaceKnownVanillaOutfits(outfit));
            }

            OutfitDatabase_GenerateStartingOutfits_Patch.GenerateStartingOutfits(__instance, false);
        }
コード例 #10
0
        public static void FixMakeNewOutfit(OutfitDatabase __instance, ref Outfit __result, ref List <Outfit> ___outfits)
        {
            int num;

            if (___outfits.Any <Outfit>())
            {
                num = ___outfits.Max((Outfit o) => o.uniqueId) + 1;
            }
            else
            {
                num = 1;
            }
            int    uniqueId = num;
            Outfit outfit   = new Outfit(uniqueId, "Outfit".Translate() + " " + uniqueId.ToString());

            ThingFilterPatch.thingFilterCallerStack.Push(outfit);
            outfit.filter.SetAllow(ThingCategoryDefOf.Apparel, true, null, null);
            ThingFilterPatch.thingFilterCallerStack.Pop();
            ___outfits.Add(outfit);
            __result = outfit;
        }
コード例 #11
0
        internal static void GenerateStartingOutfits(OutfitDatabase db, bool vanilla = true)
        {
            if (vanilla)
            {
                ConfigureWorkerOutfit(MakeOutfit(db, "Anything"), new Dictionary <StatDef, float> {
                    { StatDefOf.MoveSpeed, Priority.Desired },
                    { StatDefOf.WorkSpeedGlobal, Priority.Wanted },
                    { StatDefOf.ArmorRating_Blunt, Priority.Desired },
                    { StatDefOf.ArmorRating_Sharp, Priority.Desired },
                });

                ConfigureWorkerOutfit(MakeOutfit(db, "Worker"), new Dictionary <StatDef, float> {
                    { StatDefOf.MoveSpeed, Priority.Neutral },
                    { StatDefOf.WorkSpeedGlobal, Priority.Desired },
                });
            }

            ConfigureWorkerOutfit(MakeOutfit(db, "Doctor"), new Dictionary <StatDef, float> {
                { StatDefOf.MedicalSurgerySuccessChance, Priority.Wanted },
                { StatDef.Named("MedicalOperationSpeed"), Priority.Wanted },
                { StatDefOf.MedicalTendQuality, Priority.Wanted },
                { StatDefOf.MedicalTendSpeed, Priority.Desired },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Warden"), new Dictionary <StatDef, float> {
                { StatDefOf.NegotiationAbility, Priority.Wanted },
                { StatDefOf.SocialImpact, Priority.Desired },
                { StatDefOf.TradePriceImprovement, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Handler"), new Dictionary <StatDef, float> {
                { StatDefOf.TrainAnimalChance, Priority.Wanted },
                { StatDefOf.TameAnimalChance, Priority.Wanted },
                { StatDefOf.ArmorRating_Sharp, Priority.Neutral },
                { StatDefOf.MeleeDodgeChance, Priority.Desired },
                { StatDefOf.MeleeHitChance, Priority.Neutral },
                { StatDefOf.MoveSpeed, Priority.Neutral },
                { StatDefOf.MeleeDPS, Priority.Neutral },
                { StatDefOf.AccuracyTouch, Priority.Neutral },
                { StatDefOf.MeleeWeapon_CooldownMultiplier, Priority.Unwanted },
                { StatDefOf.MeleeWeapon_DamageMultiplier, Priority.Neutral },
                { StatDefOf.PainShockThreshold, Priority.Wanted },
                { StatDefOf.AnimalGatherYield, Priority.Wanted },
                { StatDefOf.AnimalGatherSpeed, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Cook"), new Dictionary <StatDef, float> {
                { StatDef.Named("DrugCookingSpeed"), Priority.Wanted },
                { StatDef.Named("ButcheryFleshSpeed"), Priority.Wanted },
                { StatDef.Named("ButcheryFleshEfficiency"), Priority.Wanted },
                { StatDef.Named("CookSpeed"), Priority.Wanted },
                { StatDefOf.FoodPoisonChance, Priority.Unwanted },
                { StatDefOf.MoveSpeed, Priority.Desired },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureSoldierOutfit(MakeOutfit(db, "Hunter"), new Dictionary <StatDef, float> {
                { StatDefOf.ShootingAccuracyPawn, Priority.Wanted },
                { StatDefOf.MoveSpeed, Priority.Desired },
                { StatDefOf.AccuracyShort, Priority.Desired },
                { StatDefOf.AccuracyMedium, Priority.Desired },
                { StatDefOf.AccuracyLong, Priority.Desired },
                { StatDefOf.MeleeDPS, Priority.Neutral },
                { StatDefOf.MeleeHitChance, Priority.Neutral },
                { StatDefOf.ArmorRating_Blunt, Priority.Neutral },
                { StatDefOf.ArmorRating_Sharp, Priority.Neutral },
                { StatDefOf.RangedWeapon_Cooldown, Priority.Unwanted },
                { StatDefOf.AimingDelayFactor, Priority.Unwanted },
                { StatDefOf.PainShockThreshold, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Builder"), new Dictionary <StatDef, float> {
                { StatDefOf.FixBrokenDownBuildingSuccessChance, Priority.Wanted },
                { StatDefOf.ConstructionSpeed, Priority.Wanted },
                { StatDefOf.ConstructSuccessChance, Priority.Wanted },
                { StatDefOf.SmoothingSpeed, Priority.Wanted },
                { StatDefOf.MoveSpeed, Priority.Neutral },
                { StatDefOf.WorkSpeedGlobal, Priority.Neutral },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Grower"), new Dictionary <StatDef, float> {
                { StatDefOf.PlantHarvestYield, Priority.Wanted },
                { StatDefOf.PlantWorkSpeed, Priority.Wanted },
                { StatDefOf.MoveSpeed, Priority.Neutral },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Miner"), new Dictionary <StatDef, float> {
                { StatDefOf.MiningYield, Priority.Wanted },
                { StatDefOf.MiningSpeed, Priority.Wanted },
                { StatDefOf.MoveSpeed, Priority.Neutral },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Smith"), new Dictionary <StatDef, float> {
                { StatDef.Named("SmithingSpeed"), Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Tailor"), new Dictionary <StatDef, float> {
                { StatDef.Named("TailoringSpeed"), Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Artist"), new Dictionary <StatDef, float> {
                { StatDef.Named("SculptingSpeed"), Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Crafter"), new Dictionary <StatDef, float> {
                { StatDef.Named("SmeltingSpeed"), Priority.Wanted },
                { StatDef.Named("ButcheryMechanoidSpeed"), Priority.Wanted },
                { StatDef.Named("ButcheryMechanoidEfficiency"), Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Hauler"), new Dictionary <StatDef, float> {
                { StatDefOf.MoveSpeed, Priority.Wanted },
                { StatDefOf.CarryingCapacity, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Cleaner"), new Dictionary <StatDef, float> {
                { StatDefOf.MoveSpeed, Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Wanted },
            });

            ConfigureWorkerOutfit(MakeOutfit(db, "Researcher"), new Dictionary <StatDef, float> {
                { StatDefOf.ResearchSpeed, Priority.Wanted },
                { StatDefOf.WorkSpeedGlobal, Priority.Desired },
            });

            ConfigureSoldierOutfit(MakeOutfit(db, "Brawler"), new Dictionary <StatDef, float> {
                { StatDefOf.MoveSpeed, Priority.Wanted },
                { StatDefOf.AimingDelayFactor, Priority.Unwanted },
                { StatDefOf.MeleeDPS, Priority.Wanted },
                { StatDefOf.MeleeHitChance, Priority.Wanted },
                { StatDefOf.MeleeDodgeChance, Priority.Wanted },
                { StatDefOf.ArmorRating_Blunt, Priority.Neutral },
                { StatDefOf.ArmorRating_Sharp, Priority.Desired },
                { StatDefOf.AccuracyTouch, Priority.Wanted },
                { StatDefOf.MeleeWeapon_DamageMultiplier, Priority.Wanted },
                { StatDefOf.MeleeWeapon_CooldownMultiplier, Priority.Unwanted },
                { StatDefOf.PainShockThreshold, Priority.Wanted },
            });

            if (vanilla)
            {
                ConfigureSoldierOutfit(MakeOutfit(db, "Soldier"), new Dictionary <StatDef, float> {
                    { StatDefOf.ShootingAccuracyPawn, Priority.Wanted },
                    { StatDefOf.AccuracyShort, Priority.Desired },
                    { StatDefOf.AccuracyMedium, Priority.Desired },
                    { StatDefOf.AccuracyLong, Priority.Desired },
                    { StatDefOf.MoveSpeed, Priority.Desired },
                    { StatDefOf.ArmorRating_Blunt, Priority.Neutral },
                    { StatDefOf.ArmorRating_Sharp, Priority.Desired },
                    { StatDefOf.MeleeDodgeChance, Priority.Neutral },
                    { StatDefOf.AimingDelayFactor, Priority.Unwanted },
                    { StatDefOf.RangedWeapon_Cooldown, Priority.Unwanted },
                    { StatDefOf.PainShockThreshold, Priority.Wanted },
                });
                ConfigureNudistOutfit(MakeOutfit(db, "Nudist"), new Dictionary <StatDef, float> {
                    { StatDefOf.MoveSpeed, Priority.Desired },
                    { StatDefOf.WorkSpeedGlobal, Priority.Wanted },
                });
            }
        }
 private static void Postfix(OutfitDatabase __instance)
 {
     try { OutfitHelper.GenerateDefaultOutfits(__instance); }
     catch (Exception e) { Log.Error("OutfitManager: Could not generate outfits - " + e); }
 }
コード例 #13
0
 public static bool Prefix(OutfitDatabase __instance)
 {
     FixStartingOutfits(__instance);
     return(false);
 }
コード例 #14
0
 public static bool Prefix(ref Outfit __result, OutfitDatabase __instance, ref List <Outfit> ___outfits)
 {
     FixMakeNewOutfit(__instance, ref __result, ref ___outfits);
     return(false);
 }