static Outfit MakeOutfit(OutfitDatabase database, string name) { var outfit = database.MakeNewOutfit(); outfit.label = ("Outfit" + name).Translate(); return(outfit); }
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); }
static bool Prefix(OutfitDatabase __instance) { try { GenerateStartingOutfits(__instance); } catch (Exception e) { Log.Error("Can't generate outfits: " + e); } return(false); }
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; } }
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); }
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(); }
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); } }
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); }
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; }
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); } }
public static bool Prefix(OutfitDatabase __instance) { FixStartingOutfits(__instance); return(false); }
public static bool Prefix(ref Outfit __result, OutfitDatabase __instance, ref List <Outfit> ___outfits) { FixMakeNewOutfit(__instance, ref __result, ref ___outfits); return(false); }