public static SimDescription MakeAlien(CASAgeGenderFlags age, CASAgeGenderFlags gender, WorldName homeworld, float alienDNAPercentage, bool assignRandomTraits) { ResourceKey skinTone = kAlienSkinTones[RandomUtil.GetInt(0, kAlienSkinTones.Length - 1)]; float skinToneIndex = GetSkinToneIndex(skinTone); SimBuilder sb = new SimBuilder(); sb.Age = age; sb.Gender = gender; sb.Species = CASAgeGenderFlags.Human; sb.SkinTone = skinTone; sb.SkinToneIndex = skinToneIndex; sb.TextureSize = 1024u; sb.UseCompression = true; bool flag = (gender == CASAgeGenderFlags.Female); SetFacialBlends(sb); SimDescription alienDescription = Genetics.MakeSim(sb, age, gender, skinTone, skinToneIndex, kAlienHairColors, homeworld, 4294967295u, true); if (alienDescription != null) { alienDescription.FirstName = SimUtils.GetRandomAlienGivenName(alienDescription.IsMale); alienDescription.LastName = SimUtils.GetRandomAlienFamilyName(); alienDescription.SetAlienDNAPercentage(alienDNAPercentage); alienDescription.VoicePitchModifier = RandomUtil.GetFloat(1.2f, 1.6f); alienDescription.VoiceVariation = (VoiceVariationType)RandomUtil.GetInt(2); if (assignRandomTraits) { Genetics.AssignRandomTraits(alienDescription); } if (alienDescription.TeenOrAbove) { string s = "a"; if (age != CASAgeGenderFlags.Teen) { if (age == CASAgeGenderFlags.Elder) { s = "e"; } } else { s = "t"; } string s2 = alienDescription.IsFemale ? "f" : "m"; string name = s + s2 + "_alienOutfit"; ResourceKey key33 = ResourceKey.CreateOutfitKeyFromProductVersion(name, ProductVersion.EP8); SimOutfit outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Everyday, OutfitCategories.Everyday, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Everyday, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Formalwear, OutfitCategories.Formalwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Formalwear, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Outerwear, OutfitCategories.Outerwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Outerwear, true); } } } return(alienDescription); }
public static void MakeupManagement(Sim sim, bool addRemove) { try { SimBuilder builder = new SimBuilder(); SimDescription simDescription = sim.SimDescription; OutfitCategories currentOutfitCategory = sim.CurrentOutfitCategory; int currentOutfitIndex = sim.CurrentOutfitIndex; builder.Clear(false); SimOutfit currentOutfit = sim.CurrentOutfit; OutfitUtils.SetOutfit(builder, currentOutfit, simDescription); if (addRemove) { sendDebugMsg(sim.FullName + "\nAdding eyes."); string designPreset = CASUtils.PartDataGetPreset(VTThirstMaskPart, uint.Parse(kMaskPresetIndex)); builder.AddPart(ThirstMask); if (sim.SimDescription.YoungAdultOrAbove) { sim.BuffManager.AddElement(0xB110CC43B0C44B1C, (Origin)ResourceUtils.HashString64("ByAppearanceOfRedEyes")); } CASUtils.ApplyPresetToPart(builder, ThirstMask, designPreset); builder.SetPartPreset(VTThirstMaskPart, uint.Parse(kMaskPresetIndex), designPreset); } else { builder.RemovePart(ThirstMask); sim.BuffManager.RemoveElement(0xB110CC43B0C44B1C); } SimOutfit outfit = new SimOutfit(builder.CacheOutfit(simDescription.FullName + currentOutfitCategory.ToString() + currentOutfitIndex.ToString())); if (simDescription.GetOutfitCount(currentOutfitCategory) > currentOutfitIndex) { simDescription.RemoveOutfit(currentOutfitCategory, currentOutfitIndex, true); } simDescription.AddOutfit(outfit, currentOutfitCategory, currentOutfitIndex); if (simDescription.CreatedSim != null) { sendDebugMsg("Updated: " + currentOutfitCategory.ToString() + "-" + currentOutfitIndex.ToString()); simDescription.CreatedSim.RefreshCurrentOutfit(false); } foreach (OutfitCategories categories2 in Enum.GetValues(typeof(OutfitCategories))) { if (categories2 != OutfitCategories.Special) { ArrayList list = simDescription.GetCurrentOutfits()[categories2] as ArrayList; if (list != null) { int count = list.Count; for (int i = 0; i < count; i++) { if ((categories2 != currentOutfitCategory) || (i != currentOutfitIndex)) { builder.Clear(false); SimOutfit outfit3 = list[i] as SimOutfit; OutfitUtils.SetOutfit(builder, outfit3, simDescription); if (addRemove) { string str2 = CASUtils.PartDataGetPreset(VTThirstMaskPart, uint.Parse(kMaskPresetIndex)); builder.AddPart(ThirstMask); sim.BuffManager.AddElement(0xB110CC43B0C44B1C, (Origin)ResourceUtils.HashString64("ByAppearanceOfRedEyes")); CASUtils.ApplyPresetToPart(builder, ThirstMask, str2); builder.SetPartPreset(VTThirstMaskPart, uint.Parse(kMaskPresetIndex), str2); } else { builder.RemovePart(ThirstMask); sim.BuffManager.RemoveElement(0xB110CC43B0C44B1C); } SimOutfit outfit4 = new SimOutfit(builder.CacheOutfit(simDescription.FullName + categories2.ToString() + i.ToString())); if (simDescription.GetOutfitCount(categories2) > i) { simDescription.RemoveOutfit(categories2, i, true); } simDescription.AddOutfit(outfit4, categories2, i); sendDebugMsg("Updated: " + categories2.ToString() + "-" + i.ToString()); Sleep(0); } } } } } SimOutfit outfit5 = simDescription.GetOutfit(OutfitCategories.Everyday, 0); if (outfit5 != null) { ThumbnailManager.GenerateHouseholdSimThumbnail(outfit5.Key, outfit5.Key.InstanceId, 0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, simDescription.AgeGenderSpecies); } } catch (Exception exception) { SimpleMessageDialog.Show("Vampire Tweaker - Thirst Effect", sim.Name + "\nApply makeup failed!\n" + exception); } }
public static SimDescription DGSMakeSSimDescription(SimBuilder builder, CASAgeGenderFlags age, CASAgeGenderFlags gender, ResourceKey skinTone, float skinToneIndex, Color[] hairColors, WorldName homeWorld, uint outfitCategoriesToBuild, bool isAlien) { if (age == CASAgeGenderFlags.None) { return(null); } if (builder == null) { builder = new SimBuilder(); builder.Age = age; builder.Gender = gender; builder.Species = CASAgeGenderFlags.Human; builder.SkinTone = skinTone; builder.SkinToneIndex = skinToneIndex; builder.TextureSize = 1024u; builder.UseCompression = true; } if (hairColors.Length == 9) { Color[] array = new Color[10]; hairColors.CopyTo(array, 0); array[9] = hairColors[0]; hairColors = array; } if (hairColors.Length != 10) { hairColors = Genetics.Black1; } Color[] array2 = new Color[4]; Array.Copy(hairColors, 5, array2, 0, 4); Color activeEyebrowColor = hairColors[4]; SimDescriptionCore simDescriptionCore = new SimDescriptionCore(); simDescriptionCore.HomeWorld = homeWorld; bool useDyeColor = age == CASAgeGenderFlags.Elder; GeneticColor[] hairColors2 = simDescriptionCore.HairColors; for (int i = 0; i < 4; i++) { hairColors2[i].UseDyeColor = useDyeColor; } simDescriptionCore.HairColors = hairColors2; simDescriptionCore.ActiveHairColors = hairColors; simDescriptionCore.EyebrowColor.UseDyeColor = useDyeColor; simDescriptionCore.ActiveEyebrowColor = activeEyebrowColor; simDescriptionCore.BodyHairColor.UseDyeColor = useDyeColor; simDescriptionCore.ActiveBodyHairColor = hairColors[9]; GeneticColor[] facialHairColors = simDescriptionCore.FacialHairColors; for (int j = 0; j < 4; j++) { facialHairColors[j].UseDyeColor = useDyeColor; } simDescriptionCore.FacialHairColors = facialHairColors; simDescriptionCore.ActiveFacialHairColors = array2; Dictionary <ResourceKey, float> dictionary = new Dictionary <ResourceKey, float>(); if (LocaleConstraints.GetFacialShape(ref dictionary, homeWorld)) { foreach (KeyValuePair <ResourceKey, float> keyValuePair in dictionary) { builder.SetFacialBlend(keyValuePair.Key, keyValuePair.Value); } } OutfitUtils.AddMissingParts(builder, (OutfitCategories)2097154u, true, simDescriptionCore, isAlien); Genetics.SleepIfPossible(); OutfitUtils.AddMissingParts(builder, OutfitCategories.Everyday, true, simDescriptionCore, isAlien); Genetics.SleepIfPossible(); ResourceKey key = default(ResourceKey); if (LocaleConstraints.GetUniform(ref key, homeWorld, age, gender, OutfitCategories.Everyday)) { OutfitUtils.SetOutfit(builder, new SimOutfit(key), simDescriptionCore); } OutfitUtils.SetAutomaticModifiers(builder); ResourceKey key2 = builder.CacheOutfit(string.Format("Genetics.MakeSim_{0}_{1}_{2}", builder.Age, Simulator.TicksElapsed(), OutfitCategories.Everyday)); if (key2.InstanceId == 0UL) { return(null); } OutfitCategories[] array3 = new OutfitCategories[] { OutfitCategories.Naked, OutfitCategories.Athletic, OutfitCategories.Formalwear, OutfitCategories.Sleepwear, OutfitCategories.Swimwear }; SimOutfit simOutfit = new SimOutfit(key2); SimDescription simDescription = new SimDescription(simOutfit); simDescription.HairColors = simDescriptionCore.HairColors; simDescription.FacialHairColors = simDescriptionCore.FacialHairColors; simDescription.EyebrowColor = simDescriptionCore.EyebrowColor; simDescription.BodyHairColor = simDescriptionCore.BodyHairColor; simDescription.AddOutfit(simOutfit, OutfitCategories.Everyday, true); foreach (OutfitCategories outfitCategories in array3) { if ((outfitCategoriesToBuild & (uint)outfitCategories) != 0u) { OutfitUtils.MakeCategoryAppropriate(builder, outfitCategories, simDescription); if (LocaleConstraints.GetUniform(ref key, homeWorld, age, gender, outfitCategories)) { OutfitUtils.SetOutfit(builder, new SimOutfit(key), simDescriptionCore); } ResourceKey key3 = builder.CacheOutfit(string.Format("Genetics.MakeSim_{0}_{1}_{2}", builder.Age, Simulator.TicksElapsed(), outfitCategories)); simDescription.AddOutfit(new SimOutfit(key3), outfitCategories); Genetics.SleepIfPossible(); } } simDescription.RandomizePreferences(); TraitNames cultureSpecificTrait = Genetics.GetCultureSpecificTrait(homeWorld); if (cultureSpecificTrait == TraitNames.FutureSim) { simDescription.TraitManager.AddHiddenElement(cultureSpecificTrait); Skill skill = simDescription.SkillManager.AddElement(SkillNames.Future); if ((skill.AvailableAgeSpecies & simDescription.GetCASAGSAvailabilityFlags()) != CASAGSAvailabilityFlags.None) { while (simDescription.SkillManager.GetSkillLevel(SkillNames.Future) < skill.MaxSkillLevel) { simDescription.SkillManager.ForceGainPointsForLevelUp(SkillNames.Future); } } } else if (cultureSpecificTrait != TraitNames.Unknown) { simDescription.TraitManager.AddHiddenElement(cultureSpecificTrait); } builder.Dispose(); builder = null; simDescription.HomeWorld = GameUtils.GetCurrentWorld(); return(simDescription); }
public static void SetFeet(Sim sim, bool addRemove) { try { SimBuilder builder = new SimBuilder(); SimDescription simDescription = sim.SimDescription; OutfitCategories currentOutfitCategory = sim.CurrentOutfitCategory; int currentOutfitIndex = sim.CurrentOutfitIndex; builder.Clear(false); SimOutfit currentOutfit = sim.CurrentOutfit; OutfitUtils.SetOutfit(builder, currentOutfit, simDescription); if (addRemove) { sendDebugMsg(sim.FullName + "\nAdding feets."); simDescription.AddOutfit(currentOutfit, OutfitCategories.Naked); if (simDescription.Child) { builder.AddPart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskTeenFemale); } if (simDescription.Teen && simDescription.IsMale) { builder.AddPart(WolfFeetMaskTeenMale); } if (simDescription.Adult && simDescription.YoungAdult && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskAdultFemale); } if (simDescription.Adult && simDescription.YoungAdult && simDescription.IsMale) { builder.AddPart(WolfFeetMaskAdultMale); } if (simDescription.Elder && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskElderFemale); } if (simDescription.Elder && simDescription.IsMale) { builder.AddPart(WolfFeetMaskElderMale); } } else { if (simDescription.Child) { builder.RemovePart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskTeenMale); } if (simDescription.YoungAdult && simDescription.Adult && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskAdultMale); } if (simDescription.YoungAdult && simDescription.Adult && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskAdultFemale); } if (simDescription.Elder && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskElderFemale); } if (simDescription.Elder && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskElderMale); } } SimOutfit outfit = new SimOutfit(builder.CacheOutfit(simDescription.FullName + currentOutfitCategory.ToString() + currentOutfitIndex.ToString())); if (simDescription.GetOutfitCount(currentOutfitCategory) > currentOutfitIndex) { simDescription.RemoveOutfit(currentOutfitCategory, currentOutfitIndex, true); } simDescription.AddOutfit(outfit, currentOutfitCategory, currentOutfitIndex); if (simDescription.CreatedSim != null) { sendDebugMsg("Updated: " + currentOutfitCategory.ToString() + "-" + currentOutfitIndex.ToString()); simDescription.CreatedSim.RefreshCurrentOutfit(false); } foreach (OutfitCategories categories2 in Enum.GetValues(typeof(OutfitCategories))) { if (categories2 != OutfitCategories.Special) { ArrayList list = simDescription.GetCurrentOutfits()[categories2] as ArrayList; if (list != null) { int count = list.Count; for (int i = 0; i < count; i++) { if ((categories2 != currentOutfitCategory) || (i != currentOutfitIndex)) { builder.Clear(false); SimOutfit outfit3 = list[i] as SimOutfit; OutfitUtils.SetOutfit(builder, outfit3, simDescription); if (addRemove) { simDescription.AddOutfit(currentOutfit, OutfitCategories.Naked); if (simDescription.Child) { builder.AddPart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskTeenFemale); } if (simDescription.Teen && simDescription.IsMale) { builder.AddPart(WolfFeetMaskTeenMale); } if (simDescription.Adult && simDescription.YoungAdult && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskAdultFemale); } if (simDescription.Adult && simDescription.YoungAdult && simDescription.IsMale) { builder.AddPart(WolfFeetMaskAdultMale); } if (simDescription.Elder && simDescription.IsFemale) { builder.AddPart(WolfFeetMaskElderFemale); } if (simDescription.Elder && simDescription.IsMale) { builder.AddPart(WolfFeetMaskElderMale); } } else { if (simDescription.Child) { builder.RemovePart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskChildUnisex); } if (simDescription.Teen && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskTeenMale); } if (simDescription.YoungAdult && simDescription.Adult && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskAdultMale); } if (simDescription.YoungAdult && simDescription.Adult && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskAdultFemale); } if (simDescription.Elder && simDescription.IsFemale) { builder.RemovePart(WolfFeetMaskElderFemale); } if (simDescription.Elder && simDescription.IsMale) { builder.RemovePart(WolfFeetMaskElderMale); } } SimOutfit outfit4 = new SimOutfit(builder.CacheOutfit(simDescription.FullName + categories2.ToString() + i.ToString())); if (simDescription.GetOutfitCount(categories2) > i) { simDescription.RemoveOutfit(categories2, i, true); } simDescription.AddOutfit(outfit4, categories2, i); sendDebugMsg("Updated: " + categories2.ToString() + "-" + i.ToString()); Sleep(0); } } } } } SimOutfit outfit5 = simDescription.GetOutfit(OutfitCategories.Everyday, 0); if (outfit5 != null) { ThumbnailManager.GenerateHouseholdSimThumbnail(outfit5.Key, outfit5.Key.InstanceId, 0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, simDescription.AgeGenderSpecies); } } catch (Exception exception) { SimpleMessageDialog.Show("Werewolf Tweaker - Wolf Feet", sim.Name + "\nApply feet failed!\n" + exception); } }
private static SimDescription MakeAlien(CASAgeGenderFlags age, CASAgeGenderFlags gender, WorldName homeworld, float alienDNAPercentage, bool assignRandomTraits) { ResourceKey skinTone = new ResourceKey(0xb93c88cd44494517, 55867754u, 0u); float skinToneIndex = RandomUtil.GetFloat(1f); SimBuilder sb = new SimBuilder(); sb.Age = age; sb.Gender = gender; sb.Species = CASAgeGenderFlags.Human; sb.SkinTone = skinTone; sb.SkinToneIndex = skinToneIndex; sb.TextureSize = 1024u; sb.UseCompression = true; ApplyAlienFaceBlend(gender, ref sb); float hue = (skinToneIndex + 0.5f) % 1f; float saturation = age == CASAgeGenderFlags.Elder ? 0.25f : 0.75f; Color[] colors = new Color[] { HSLToRGB(hue, saturation, 0.5f) }; SimDescription alienDescription = Genetics.MakeSim(sb, age, gender, skinTone, skinToneIndex, colors, homeworld, 4294967295u, true); if (alienDescription != null) { alienDescription.FirstName = SimUtils.GetRandomAlienGivenName(alienDescription.IsMale); alienDescription.LastName = SimUtils.GetRandomAlienFamilyName(); alienDescription.SetAlienDNAPercentage(alienDNAPercentage); alienDescription.VoicePitchModifier = RandomUtil.GetFloat(1.2f, 1.6f); alienDescription.VoiceVariation = (VoiceVariationType)RandomUtil.GetInt(2); if (assignRandomTraits) { Genetics.AssignRandomTraits(alienDescription); } if (alienDescription.TeenOrAbove) { string s = "a"; if (age != CASAgeGenderFlags.Teen) { if (age == CASAgeGenderFlags.Elder) { s = "e"; } } else { s = "t"; } string s2 = alienDescription.IsFemale ? "f" : "m"; string name = s + s2 + "_alienOutfit"; ResourceKey key33 = ResourceKey.CreateOutfitKeyFromProductVersion(name, ProductVersion.EP8); SimOutfit outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Everyday, OutfitCategories.Everyday, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Everyday, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Formalwear, OutfitCategories.Formalwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Formalwear, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Outerwear, OutfitCategories.Outerwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Outerwear, true); } } } return(alienDescription); }
public static void FixInvisibleSim(SimDescription sim, bool force = false, bool reset = false) { try{ OutfitCategories[] categoriesArray = null; switch (sim.Species) { case CASAgeGenderFlags.Human: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked, OutfitCategories.Athletic, OutfitCategories.Formalwear, OutfitCategories.Sleepwear, OutfitCategories.Swimwear }; break; case CASAgeGenderFlags.Horse: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked, OutfitCategories.Racing, OutfitCategories.Bridle, OutfitCategories.Jumping }; break; default: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked }; break; } bool necessary = force; if (!necessary) { foreach (OutfitCategories category in categoriesArray) { if (sim.IsHuman) { if (category == OutfitCategories.Naked) { continue; } } SimOutfit outfit2 = sim.GetOutfit(category, 0); if ((outfit2 == null) || (!outfit2.IsValid)) { necessary = true; } } } if (!necessary) { return; } SimOutfit sourceOutfit = null; for (int i = 0; i < 2; i++) { OutfitCategoryMap map = null; if (i == 0) { map = sim.mOutfits; } else { map = sim.mMaternityOutfits; } if (map == null) { continue; } foreach (OutfitCategories category in Enum.GetValues(typeof(OutfitCategories))) { if (category == OutfitCategories.Supernatural) { continue; } ArrayList outfits = map[category] as ArrayList; if (outfits == null) { continue; } foreach (SimOutfit anyOutfit in outfits) { if ((anyOutfit != null) && (anyOutfit.IsValid)) { sourceOutfit = anyOutfit; break; } } } } SimBuilder builder = new SimBuilder(); builder.UseCompression = true; var simTone = sim.SkinToneKey; List <ResourceKey> choiceTones = new List <ResourceKey>(); KeySearch tones = new KeySearch(0x0354796a); foreach (ResourceKey tone in tones) { choiceTones.Add(tone); } tones.Reset(); if ((simTone.InstanceId == 0) || (!choiceTones.Contains(simTone))) { simTone = RandomUtil.GetRandomObjectFromList(choiceTones); } ResourceKey newTone = simTone; builder.Age = sim.Age; builder.Gender = sim.Gender; builder.Species = sim.Species; builder.SkinTone = newTone; builder.SkinToneIndex = sim.SkinToneIndex; builder.MorphFat = sim.mCurrentShape.Fat; builder.MorphFit = sim.mCurrentShape.Fit; builder.MorphThin = sim.mCurrentShape.Thin; GeneticsPet.SpeciesSpecificData speciesData = OutfitUtils.GetSpeciesSpecificData(sim); try{ if (sourceOutfit != null) { foreach (SimOutfit.BlendInfo blend in sourceOutfit.Blends) { builder.SetFacialBlend(blend.key, blend.amount); } CASParts.OutfitBuilder.CopyGeneticParts(builder, sourceOutfit); } else { if (sim.Genealogy != null) { List <SimDescription> parents = new List <SimDescription>(); List <SimDescription> grandParents = new List <SimDescription>(); if (sim.Genealogy.Parents != null) { foreach (Genealogy gene in sim.Genealogy.Parents) { SimDescription relative = gene.SimDescription; if (relative == null) { continue; } parents.Add(relative); if (relative.Genealogy != null) { if (relative.Genealogy.Parents != null) { foreach (Genealogy grandGene in relative.Genealogy.Parents) { var grandRelative = grandGene.SimDescription; if (grandRelative == null) { continue; } grandParents.Add(grandRelative); } } } } } if (parents.Count > 0) { if (sim.IsHuman) { Genetics.InheritFacialBlends(builder, parents.ToArray(), new Random()); } else { GeneticsPet.InheritBodyShape(builder, parents, grandParents, new Random()); GeneticsPet.InheritBasePeltLayer(builder, parents, grandParents, new Random()); GeneticsPet.InheritPeltLayers(builder, parents, grandParents, new Random()); } } } } }catch (Exception exception) { Alive.WriteLog(exception.Message + "\n\n" + exception.StackTrace + "\n\n" + exception.Source); } if (sim.IsRobot) { OutfitUtils.AddMissingPartsBots(builder, (OutfitCategories)0x200002, true, sim); Sleep(); OutfitUtils.AddMissingPartsBots(builder, OutfitCategories.Everyday, true, sim); Sleep(); } else if (sim.IsHuman) { OutfitUtils.AddMissingParts(builder, (OutfitCategories)0x200002, true, sim, sim.IsAlien); Sleep(); OutfitUtils.AddMissingParts(builder, OutfitCategories.Everyday, true, sim, sim.IsAlien); Sleep(); } else { OutfitUtils.AddMissingPartsPet(builder, OutfitCategories.Everyday | (OutfitCategories)0x200000, true, sim, speciesData); Sleep(); OutfitUtils.AddMissingPartsPet(builder, OutfitCategories.Everyday, true, sim, speciesData); Sleep(); } ResourceKey uniformKey = new ResourceKey(); if (sim.IsHuman) { if (LocaleConstraints.GetUniform(ref uniformKey, sim.HomeWorld, builder.Age, builder.Gender, OutfitCategories.Everyday)) { OutfitUtils.SetOutfit(builder, new SimOutfit(uniformKey), sim); } } OutfitUtils.SetAutomaticModifiers(builder); sim.ClearOutfits(OutfitCategories.Career, false); sim.ClearOutfits(OutfitCategories.MartialArts, false); sim.ClearOutfits(OutfitCategories.Special, false); foreach (OutfitCategories category in categoriesArray) { ArrayList outfits = null; if (!force) { outfits = sim.Outfits[category] as ArrayList; if (outfits != null) { int index = 0; while (index < outfits.Count) { SimOutfit anyOutfit = outfits[index] as SimOutfit; if (anyOutfit == null) { outfits.RemoveAt(index); } else if (!anyOutfit.IsValid) { outfits.RemoveAt(index); } else { index++; } } } } if ((outfits == null) || (outfits.Count == 0)) { OutfitUtils.MakeCategoryAppropriate(builder, category, sim); if (sim.IsHuman) { if (LocaleConstraints.GetUniform(ref uniformKey, sim.HomeWorld, builder.Age, builder.Gender, category)) { OutfitUtils.SetOutfit(builder, new SimOutfit(uniformKey), sim); } } sim.RemoveOutfits(category, false); CASParts.AddOutfit(sim, category, builder, true); } if (sim.IsUsingMaternityOutfits) { sim.BuildPregnantOutfit(category); } } if (sim.IsMummy) { OccultMummy .OnMerge(sim); } else if (sim.IsFrankenstein) { OccultFrankenstein .OnMerge(sim, sim.OccultManager.mIsLifetimeReward); } else if (sim.IsGenie) { OccultGenie .OverlayUniform(sim, OccultGenie.CreateUniformName(sim.Age, sim.Gender), ProductVersion.EP6, OutfitCategories.Everyday, CASSkinTones.BlueSkinTone, 0.68f); } else if (sim.IsImaginaryFriend) { OccultImaginaryFriend friend = sim.OccultManager.GetOccultType(Sims3.UI.Hud.OccultTypes.ImaginaryFriend) as OccultImaginaryFriend; OccultBaseClass .OverlayUniform(sim, OccultImaginaryFriend.CreateUniformName(sim.Age, friend.Pattern), ProductVersion.EP4, OutfitCategories.Special, CASSkinTones.NoSkinTone, 0f); } if (sim.IsMermaid) { OccultMermaid .AddOutfits(sim, null); } if (sim.IsWerewolf) { if (sim.ChildOrAbove) { SimOutfit newWerewolfOutfit = OccultWerewolf .GetNewWerewolfOutfit(sim.Age, sim.Gender); if (newWerewolfOutfit != null) { sim.AddOutfit(newWerewolfOutfit, OutfitCategories.Supernatural, 0x0); } } } SimOutfit currentOutfit = null; if (sim.CreatedSim != null) { if (reset) { StuckSimData stuckSim; if (!StuckSims.TryGetValue(sim.SimDescriptionId, out stuckSim)) { stuckSim = new StuckSimData(); StuckSims.Add(sim.SimDescriptionId, stuckSim); } if (!stuckSim.Resetting) { stuckSim.Detections++; Vector3 destination = Vector3.Invalid; if (sim.CreatedSim.RoutingComponent != null) { sim.CreatedSim.RoutingComponent.GetDestination(out destination); } if (stuckSim.resetTask == null) { stuckSim.resetTask = new ResetStuckSimTask(sim.CreatedSim, destination, "Invisible"); } else { stuckSim.resetTask.Renew(); } } } try{ sim.CreatedSim.SwitchToOutfitWithoutSpin(Sim.ClothesChangeReason.GoingOutside, OutfitCategories.Everyday, true); }catch (Exception exception) { Alive.WriteLog(exception.Message + "\n\n" + exception.StackTrace + "\n\n" + exception.Source); } currentOutfit = sim.CreatedSim.CurrentOutfit; } else { currentOutfit = sim.GetOutfit(OutfitCategories.Everyday, 0); } if (currentOutfit != null) { ThumbnailManager.GenerateHouseholdSimThumbnail(currentOutfit.Key, currentOutfit.Key.InstanceId, 0x0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, sim.AgeGenderSpecies); } }catch (Exception exception) { Alive.WriteLog(exception.Message + "\n\n" + exception.StackTrace + "\n\n" + exception.Source + "\n\n" + "FixInvisibleSim"); }finally{ } }
public static SimDescription MakeAlien(CASAgeGenderFlags age, CASAgeGenderFlags gender, WorldName homeworld, float alienDNAPercentage, bool assignRandomTraits) { ResourceKey skinTone = AlienSkinTones[RandomUtil.GetInt(0, AlienSkinTones.Length - 1)]; float skinToneIndex; if (skinTone == AlienSkinTones[0]) { skinToneIndex = 1f; } else if (skinTone == AlienSkinTones[1] || skinTone == AlienSkinTones[3] || skinTone == AlienSkinTones[4]) { skinToneIndex = 0.25f + (0.5f * RandomUtil.GetFloat(1f)); } else if (skinTone == AlienSkinTones[2]) { skinToneIndex = 0.5f + (0.5f * RandomUtil.GetFloat(1f)); } else { skinToneIndex = 0.25f + (0.75f * RandomUtil.GetFloat(1f)); } SimBuilder sb = new SimBuilder(); sb.Age = age; sb.Gender = gender; sb.Species = CASAgeGenderFlags.Human; sb.SkinTone = skinTone; sb.SkinToneIndex = skinToneIndex; sb.TextureSize = 1024u; sb.UseCompression = true; bool flag = (gender == CASAgeGenderFlags.Female); float num = flag ? Genetics.kAlienHeadWide[0] : Genetics.kAlienHeadWide[1]; if (num != 0f) { ResourceKey key = new ResourceKey(ResourceUtils.HashString64("HeadWide"), 56144010u, 0u); sb.SetFacialBlend(key, num); } num = flag ? Genetics.kAlienJawChinSquare[0] : Genetics.kAlienJawChinSquare[1]; if (num != 0f) { ResourceKey key2 = new ResourceKey(ResourceUtils.HashString64("JawChinSquare"), 56144010u, 0u); sb.SetFacialBlend(key2, num); } num = flag ? Genetics.kAlienNoseScaleDown[0] : Genetics.kAlienNoseScaleDown[1]; if (num != 0f) { ResourceKey key3 = new ResourceKey(ResourceUtils.HashString64("NoseScaleDown"), 56144010u, 0u); sb.SetFacialBlend(key3, num); } num = flag ? Genetics.kAlienNoseDown[0] : Genetics.kAlienNoseDown[1]; if (num != 0f) { ResourceKey key4 = new ResourceKey(ResourceUtils.HashString64("NoseDown"), 56144010u, 0u); sb.SetFacialBlend(key4, num); } num = flag ? Genetics.kAlienNoseThin[0] : Genetics.kAlienNoseThin[1]; if (num != 0f) { ResourceKey key5 = new ResourceKey(ResourceUtils.HashString64("NoseThin"), 56144010u, 0u); sb.SetFacialBlend(key5, num); } num = flag ? Genetics.kAlienNoseBridgeRotate[0] : Genetics.kAlienNoseBridgeRotate[1]; if (num != 0f) { ResourceKey key6 = new ResourceKey(ResourceUtils.HashString64("NoseBridgeRotate"), 56144010u, 0u); sb.SetFacialBlend(key6, num); } num = flag ? Genetics.kAlienNoseBridgeOut[0] : Genetics.kAlienNoseBridgeOut[1]; if (num != 0f) { ResourceKey key7 = new ResourceKey(ResourceUtils.HashString64("NoseBridgeOut"), 56144010u, 0u); sb.SetFacialBlend(key7, num); } num = flag ? Genetics.kAlienNoseBridgeScaleUp[0] : Genetics.kAlienNoseBridgeScaleUp[1]; if (num != 0f) { ResourceKey key8 = new ResourceKey(ResourceUtils.HashString64("NoseBridgeScaleUp"), 56144010u, 0u); sb.SetFacialBlend(key8, num); } num = flag ? Genetics.kAlienNoseNostrilsUp[0] : Genetics.kAlienNoseNostrilsUp[1]; if (num != 0f) { ResourceKey key9 = new ResourceKey(ResourceUtils.HashString64("NoseNostrilsUp"), 56144010u, 0u); sb.SetFacialBlend(key9, num); } num = flag ? Genetics.kAlienNoseNostrilScale[0] : Genetics.kAlienNoseNostrilScale[1]; if (num != 0f) { ResourceKey key10 = new ResourceKey(ResourceUtils.HashString64("NoseNostrilScale"), 56144010u, 0u); sb.SetFacialBlend(key10, num); } num = flag ? Genetics.kAlienNoseTipScaleDown[0] : Genetics.kAlienNoseTipScaleDown[1]; if (num != 0f) { ResourceKey key11 = new ResourceKey(ResourceUtils.HashString64("NoseTipScaleDown"), 56144010u, 0u); sb.SetFacialBlend(key11, num); } num = flag ? Genetics.kAlienEyesBrowCurve[0] : Genetics.kAlienEyesBrowCurve[1]; if (num != 0f) { ResourceKey key12 = new ResourceKey(ResourceUtils.HashString64("EyesBrowCurve"), 56144010u, 0u); sb.SetFacialBlend(key12, num); } num = flag ? Genetics.kAlienEyesBrowRotate[0] : Genetics.kAlienEyesBrowRotate[1]; if (num != 0f) { ResourceKey key13 = new ResourceKey(ResourceUtils.HashString64("EyesBrowRotate"), 56144010u, 0u); sb.SetFacialBlend(key13, num); } num = flag ? Genetics.kAlienMouthLipUpperDefinition[0] : Genetics.kAlienMouthLipUpperDefinition[1]; if (num != 0f) { ResourceKey key14 = new ResourceKey(ResourceUtils.HashString64("MouthLipUpperDefinition"), 56144010u, 0u); sb.SetFacialBlend(key14, num); } num = flag ? Genetics.kAlienMouthCurveDown[0] : Genetics.kAlienMouthCurveDown[1]; if (num != 0f) { ResourceKey key15 = new ResourceKey(ResourceUtils.HashString64("MouthCurveDown"), 56144010u, 0u); sb.SetFacialBlend(key15, num); } num = flag ? Genetics.kAlienMouthIn[0] : Genetics.kAlienMouthIn[1]; if (num != 0f) { ResourceKey key16 = new ResourceKey(ResourceUtils.HashString64("MouthIn"), 56144010u, 0u); sb.SetFacialBlend(key16, num); } num = flag ? Genetics.kAlienTranslateMouthDown[0] : Genetics.kAlienTranslateMouthDown[1]; if (num != 0f) { ResourceKey key17 = new ResourceKey(ResourceUtils.HashString64("TranslateMouthDown"), 56144010u, 0u); sb.SetFacialBlend(key17, num); } num = flag ? Genetics.kAlienMouthThin[0] : Genetics.kAlienMouthThin[1]; if (num != 0f) { ResourceKey key18 = new ResourceKey(ResourceUtils.HashString64("MouthThin"), 56144010u, 0u); sb.SetFacialBlend(key18, num); } num = flag ? Genetics.kAlienEyeAlienCorrector[0] : Genetics.kAlienEyeAlienCorrector[1]; if (num != 0f) { ResourceKey key19 = new ResourceKey(ResourceUtils.HashString64("EyeAlienCorrector"), 56144010u, 0u); sb.SetFacialBlend(key19, num); } num = flag ? Genetics.kAlienEyeAlien[0] : Genetics.kAlienEyeAlien[1]; if (num != 0f) { ResourceKey key20 = new ResourceKey(ResourceUtils.HashString64("EyeAlien"), 56144010u, 0u); sb.SetFacialBlend(key20, num); } num = flag ? Genetics.kAlienJawChinDown[0] : Genetics.kAlienJawChinDown[1]; if (num != 0f) { ResourceKey key21 = new ResourceKey(ResourceUtils.HashString64("JawChinDown"), 56144010u, 0u); sb.SetFacialBlend(key21, num); } num = flag ? Genetics.kAlienJawChinScaleDown[0] : Genetics.kAlienJawChinScaleDown[1]; if (num != 0f) { ResourceKey key22 = new ResourceKey(ResourceUtils.HashString64("JawChinScaleDown"), 56144010u, 0u); sb.SetFacialBlend(key22, num); } num = flag ? Genetics.kAlienJawThin[0] : Genetics.kAlienJawThin[1]; if (num != 0f) { ResourceKey key23 = new ResourceKey(ResourceUtils.HashString64("JawThin"), 56144010u, 0u); sb.SetFacialBlend(key23, num); } num = flag ? Genetics.kAlienJawCheeksIn[0] : Genetics.kAlienJawCheeksIn[1]; if (num != 0f) { ResourceKey key24 = new ResourceKey(ResourceUtils.HashString64("JawCheeksIn"), 56144010u, 0u); sb.SetFacialBlend(key24, num); } num = flag ? Genetics.kAlienJawCheekSharpness[0] : Genetics.kAlienJawCheekSharpness[1]; if (num != 0f) { ResourceKey key25 = new ResourceKey(ResourceUtils.HashString64("JawCheekSharpness"), 56144010u, 0u); sb.SetFacialBlend(key25, num); } num = flag ? Genetics.kAlienEarsRotateY[0] : Genetics.kAlienEarsRotateY[1]; if (num != 0f) { ResourceKey key26 = new ResourceKey(ResourceUtils.HashString64("EarsRotateY"), 56144010u, 0u); sb.SetFacialBlend(key26, num); } num = flag ? Genetics.kAlienEarPoint[0] : Genetics.kAlienEarPoint[1]; if (num != 0f) { ResourceKey key27 = new ResourceKey(ResourceUtils.HashString64("EarPoint"), 56144010u, 0u); sb.SetFacialBlend(key27, num); } num = flag ? Genetics.kAlienHeadProfileOut[0] : Genetics.kAlienHeadProfileOut[1]; if (num != 0f) { ResourceKey key28 = new ResourceKey(ResourceUtils.HashString64("HeadProfileOut"), 56144010u, 0u); sb.SetFacialBlend(key28, num); } num = flag ? Genetics.kAlienEyesLashesThin[0] : Genetics.kAlienEyesLashesThin[1]; if (num != 0f) { ResourceKey key29 = new ResourceKey(ResourceUtils.HashString64("EyesLashesThin"), 56144010u, 0u); sb.SetFacialBlend(key29, num); } num = flag ? Genetics.kAlienJawCheeksBoneDown[0] : Genetics.kAlienJawCheeksBoneDown[1]; if (num != 0f) { ResourceKey key30 = new ResourceKey(ResourceUtils.HashString64("JawCheeksBoneDown"), 56144010u, 0u); sb.SetFacialBlend(key30, num); } num = flag ? Genetics.kAlienJawChinRound[0] : Genetics.kAlienJawChinRound[1]; if (num != 0f) { ResourceKey key31 = new ResourceKey(ResourceUtils.HashString64("JawChinRound"), 56144010u, 0u); sb.SetFacialBlend(key31, num); } num = flag ? Genetics.kAlienNoseTipDepthIn[0] : Genetics.kAlienNoseTipDepthIn[1]; if (num != 0f) { ResourceKey key32 = new ResourceKey(ResourceUtils.HashString64("NoseTipDepthIn"), 56144010u, 0u); sb.SetFacialBlend(key32, num); } SimDescription alienDescription = Genetics.MakeSim(sb, age, gender, skinTone, skinToneIndex, AlienHairColors, homeworld, 4294967295u, true); if (alienDescription != null) { alienDescription.FirstName = SimUtils.GetRandomAlienGivenName(alienDescription.IsMale); alienDescription.LastName = SimUtils.GetRandomAlienFamilyName(); alienDescription.SetAlienDNAPercentage(alienDNAPercentage); alienDescription.VoicePitchModifier = RandomUtil.GetFloat(1.2f, 1.6f); alienDescription.VoiceVariation = (VoiceVariationType)RandomUtil.GetInt(2); if (assignRandomTraits) { Genetics.AssignRandomTraits(alienDescription); } if (alienDescription.TeenOrAbove) { string s = "a"; if (age != CASAgeGenderFlags.Teen) { if (age == CASAgeGenderFlags.Elder) { s = "e"; } } else { s = "t"; } string s2 = alienDescription.IsFemale ? "f" : "m"; string name = s + s2 + "_alienOutfit"; ResourceKey key33 = ResourceKey.CreateOutfitKeyFromProductVersion(name, ProductVersion.EP8); SimOutfit outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Everyday, OutfitCategories.Everyday, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Everyday, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Formalwear, OutfitCategories.Formalwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Formalwear, true); } outfit = OutfitUtils.CreateOutfitForSim(alienDescription, key33, OutfitCategories.Outerwear, OutfitCategories.Outerwear, false); if (outfit != null) { alienDescription.AddOutfit(outfit, OutfitCategories.Outerwear, true); } } } return(alienDescription); }
public static Approach Perform(SimDescription sim, bool force, bool reset) { try { OutfitCategories[] categoriesArray = null; switch (sim.Species) { case CASAgeGenderFlags.Human: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked, OutfitCategories.Athletic, OutfitCategories.Formalwear, OutfitCategories.Sleepwear, OutfitCategories.Swimwear }; break; case CASAgeGenderFlags.Horse: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked, OutfitCategories.Racing, OutfitCategories.Bridle, OutfitCategories.Jumping }; break; default: categoriesArray = new OutfitCategories[] { OutfitCategories.Everyday, OutfitCategories.Naked }; break; } bool necessary = force; if (!necessary) { foreach (OutfitCategories category in categoriesArray) { if (sim.IsHuman) { if (category == OutfitCategories.Naked) { continue; } } SimOutfit outfit2 = sim.GetOutfit(category, 0); if ((outfit2 == null) || (!outfit2.IsValid)) { necessary = true; } } } if (!necessary) { return(Approach.None); } SimOutfit sourceOutfit = null; for (int i = 0; i < 2; i++) { OutfitCategoryMap map = null; if (i == 0) { map = sim.mOutfits; } else { map = sim.mMaternityOutfits; } if (map == null) { continue; } foreach (OutfitCategories category in Enum.GetValues(typeof(OutfitCategories))) { if (category == OutfitCategories.Supernatural) { continue; } ArrayList outfits = map[category] as ArrayList; if (outfits == null) { continue; } foreach (SimOutfit anyOutfit in outfits) { if ((anyOutfit != null) && (anyOutfit.IsValid)) { sourceOutfit = anyOutfit; break; } } } } SimBuilder builder = new SimBuilder(); builder.UseCompression = true; ResourceKey newTone = ValidateSkinTone(sim.SkinToneKey); builder.Age = sim.Age; builder.Gender = sim.Gender; builder.Species = sim.Species; builder.SkinTone = newTone; builder.SkinToneIndex = sim.SkinToneIndex; builder.MorphFat = sim.mCurrentShape.Fat; builder.MorphFit = sim.mCurrentShape.Fit; builder.MorphThin = sim.mCurrentShape.Thin; Approach approach = Approach.Rerolled; GeneticsPet.SpeciesSpecificData speciesData = OutfitUtils.GetSpeciesSpecificData(sim); try { if (sourceOutfit != null) { foreach (SimOutfit.BlendInfo blend in sourceOutfit.Blends) { builder.SetFacialBlend(blend.key, blend.amount); } CASParts.OutfitBuilder.CopyGeneticParts(builder, sourceOutfit); approach = Approach.Recovered; } else { if (sim.Genealogy != null) { List <SimDescription> parents = new List <SimDescription>(); List <SimDescription> grandParents = new List <SimDescription>(); foreach (SimDescription parent in Relationships.GetParents(sim)) { parents.Add(parent); foreach (SimDescription grandParent in Relationships.GetParents(parent)) { grandParents.Add(grandParent); } } if (parents.Count > 0) { if (sim.IsHuman) { Genetics.InheritFacialBlends(builder, parents.ToArray(), new Random()); } else { GeneticsPet.InheritBodyShape(builder, parents, grandParents, new Random()); GeneticsPet.InheritBasePeltLayer(builder, parents, grandParents, new Random()); GeneticsPet.InheritPeltLayers(builder, parents, grandParents, new Random()); } approach = Approach.Reinherited; } } } } catch (Exception e) { Common.Exception(sim, null, "Primary Outfit Creation", e); return(Approach.None); } if (sim.IsRobot) { OutfitUtils.AddMissingPartsBots(builder, (OutfitCategories)0x200002, true, sim); Common.Sleep(); OutfitUtils.AddMissingPartsBots(builder, OutfitCategories.Everyday, true, sim); Common.Sleep(); } else if (sim.IsHuman) { OutfitUtils.AddMissingParts(builder, (OutfitCategories)0x200002, true, sim, sim.IsAlien); Common.Sleep(); OutfitUtils.AddMissingParts(builder, OutfitCategories.Everyday, true, sim, sim.IsAlien); Common.Sleep(); } else { OutfitUtils.AddMissingPartsPet(builder, OutfitCategories.Everyday | (OutfitCategories)0x200000, true, sim, speciesData); Common.Sleep(); OutfitUtils.AddMissingPartsPet(builder, OutfitCategories.Everyday, true, sim, speciesData); Common.Sleep(); } ResourceKey uniformKey = new ResourceKey(); if (sim.IsHuman) { if (LocaleConstraints.GetUniform(ref uniformKey, sim.HomeWorld, builder.Age, builder.Gender, OutfitCategories.Everyday)) { OutfitUtils.SetOutfit(builder, new SimOutfit(uniformKey), sim); } } OutfitUtils.SetAutomaticModifiers(builder); sim.ClearOutfits(OutfitCategories.Career, false); sim.ClearOutfits(OutfitCategories.MartialArts, false); sim.ClearOutfits(OutfitCategories.Special, false); foreach (OutfitCategories category in categoriesArray) { ArrayList outfits = null; if (!force) { outfits = sim.Outfits[category] as ArrayList; if (outfits != null) { int index = 0; while (index < outfits.Count) { SimOutfit anyOutfit = outfits[index] as SimOutfit; if (anyOutfit == null) { outfits.RemoveAt(index); } else if (!anyOutfit.IsValid) { outfits.RemoveAt(index); } else { index++; } } } } if ((outfits == null) || (outfits.Count == 0)) { OutfitUtils.MakeCategoryAppropriate(builder, category, sim); if (sim.IsHuman) { if (LocaleConstraints.GetUniform(ref uniformKey, sim.HomeWorld, builder.Age, builder.Gender, category)) { OutfitUtils.SetOutfit(builder, new SimOutfit(uniformKey), sim); } } sim.RemoveOutfits(category, false); CASParts.AddOutfit(sim, category, builder, true); } if (sim.IsUsingMaternityOutfits) { sim.BuildPregnantOutfit(category); } } if (sim.IsMummy) { OccultMummy.OnMerge(sim); } else if (sim.IsFrankenstein) { OccultFrankenstein.OnMerge(sim, sim.OccultManager.mIsLifetimeReward); } else if (sim.IsGenie) { OccultGenie.OverlayUniform(sim, OccultGenie.CreateUniformName(sim.Age, sim.Gender), ProductVersion.EP6, OutfitCategories.Everyday, CASSkinTones.BlueSkinTone, 0.68f); } else if (sim.IsImaginaryFriend) { OccultImaginaryFriend friend = sim.OccultManager.GetOccultType(Sims3.UI.Hud.OccultTypes.ImaginaryFriend) as OccultImaginaryFriend; OccultBaseClass.OverlayUniform(sim, OccultImaginaryFriend.CreateUniformName(sim.Age, friend.Pattern), ProductVersion.EP4, OutfitCategories.Special, CASSkinTones.NoSkinTone, 0f); } if (sim.IsMermaid) { OccultMermaid.AddOutfits(sim, null); } if (sim.IsWerewolf) { if (sim.ChildOrAbove) { SimOutfit newWerewolfOutfit = OccultWerewolf.GetNewWerewolfOutfit(sim.Age, sim.Gender); if (newWerewolfOutfit != null) { sim.AddOutfit(newWerewolfOutfit, OutfitCategories.Supernatural, 0x0); } } } SimOutfit currentOutfit = null; if (sim.CreatedSim != null) { if (reset) { ResetSimTask.Perform(sim.CreatedSim, false); } try { sim.CreatedSim.SwitchToOutfitWithoutSpin(Sim.ClothesChangeReason.GoingOutside, OutfitCategories.Everyday, true); } catch (Exception e) { Common.DebugException(sim, e); } currentOutfit = sim.CreatedSim.CurrentOutfit; } else { currentOutfit = sim.GetOutfit(OutfitCategories.Everyday, 0); } if (currentOutfit != null) { ThumbnailManager.GenerateHouseholdSimThumbnail(currentOutfit.Key, currentOutfit.Key.InstanceId, 0x0, ThumbnailSizeMask.Large | ThumbnailSizeMask.ExtraLarge | ThumbnailSizeMask.Medium | ThumbnailSizeMask.Small, ThumbnailTechnique.Default, true, false, sim.AgeGenderSpecies); } return(approach); } catch (Exception e) { Common.Exception(sim, e); return(Approach.None); } }
protected static OptionResult ApplyOutfit(SimDescription sim, OutfitCategories category) { ResourceKey newOutfitKey = ResourceKey.kInvalidResourceKey; if (sim.IsMummy) { newOutfitKey = OccultMummy.CreateMummyUniform(sim.Age, sim.Gender).Key; } else if (sim.IsFrankenstein) { newOutfitKey = OccultBaseClass.CreateUniform(OccultFrankenstein.CreateUniformName(sim, sim.OccultManager.mIsLifetimeReward), sim.Age, ProductVersion.EP2, CASSkinTones.NoSkinTone, 0f).Key; } else if (sim.IsImaginaryFriend) { OccultImaginaryFriend friend = sim.OccultManager.GetOccultType(OccultTypes.ImaginaryFriend) as OccultImaginaryFriend; string name; newOutfitKey = OccultImaginaryFriend.CreateImaginaryFriendUniform(sim.Age, friend.Pattern, out name).Key; } else { SimOutfit source = null; if (sim.GetOutfitCount(OutfitCategories.Naked) > 0) { source = sim.GetOutfit(OutfitCategories.Naked, 0); } else if (sim.GetOutfitCount(category) > 0) { source = sim.GetOutfit(category, 0); } if (source != null) { using (SimBuilder builder = new SimBuilder()) { OutfitUtils.SetOutfit(builder, source, sim); OutfitUtils.MakeCategoryAppropriate(builder, category, sim); newOutfitKey = builder.CacheOutfit(CASParts.GetOutfitName(sim, category, sim.IsUsingMaternityOutfits)); } } } if (newOutfitKey == ResourceKey.kInvalidResourceKey) { return(OptionResult.Failure); } sim.AddOutfit(new SimOutfit(newOutfitKey), category, false); int index = sim.GetOutfitCount(category) - 1; ArrayList list = sim.GetCurrentOutfits()[category] as ArrayList; object a = list[0]; object b = list[index]; list[0] = b; list[index] = a; return(OptionResult.SuccessClose); }