示例#1
0
        public override bool Parse(XmlDbRow row, ref string error)
        {
            if (!base.Parse(row, ref error))
            {
                return(false);
            }

            if (!row.Exists("Trait"))
            {
                error = "Trait missing";
                return(false);
            }
            else
            {
                ToTraitName converter = new ToTraitName();

                List <TraitNames> traits = converter.Convert(row.GetString("Trait"));
                if ((traits == null) || (traits.Count == 0))
                {
                    error = converter.mError;
                    return(false);
                }

                if (!sPlumbotAntiEquivalents.TryGetValue(traits[0], out mAntiTrait))
                {
                    mAntiTrait = TraitNames.Unknown;
                }

                mTraits = traits.ToArray();
            }

            return(true);
        }
示例#2
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            if (!ApplyAll)
            {
                List <SimTrait.Item> allOptions = new List <SimTrait.Item>();
                foreach (Sims3.Gameplay.ActorSystems.Trait trait in TraitManager.GetDictionaryTraits)
                {
                    if (!me.TraitManager.HasElement(trait.Guid))
                    {
                        continue;
                    }

                    if (!trait.IsReward)
                    {
                        continue;
                    }

                    allOptions.Add(new SimTrait.Item(trait.Guid, 1));
                }

                mSelection = new CommonSelection <SimTrait.Item>(Name, me.FullName, allOptions).SelectMultiple();
                if ((mSelection == null) || (mSelection.Count == 0))
                {
                    return(false);
                }
            }

            foreach (SimTrait.Item item in mSelection)
            {
                if (item == null)
                {
                    continue;
                }

                TraitNames traitName = item.Value;

                if (!me.TraitManager.HasElement(traitName))
                {
                    continue;
                }

                Sims3.Gameplay.ActorSystems.Trait trait = TraitManager.GetTraitFromDictionary(traitName);
                if (trait != null)
                {
                    me.RemoveTrait(trait);

                    me.mSpendableHappiness += trait.Score;
                }
            }

            if ((me.CreatedSim != null) && (me.CreatedSim.SocialComponent != null))
            {
                me.CreatedSim.SocialComponent.UpdateTraits();
            }

            return(true);
        }
示例#3
0
        protected override bool Allow(TraitNames value)
        {
            if (Traits.IsObjectBaseReward(value))
            {
                return(false);
            }

            return(base.Allow(value));
        }
示例#4
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            List <SimTrait.Item> allOptions = new List <SimTrait.Item>();

            foreach (Sims3.Gameplay.ActorSystems.Trait trait in TraitManager.GetDictionaryTraits)
            {
                if (trait.IsReward)
                {
                    continue;
                }

                if (!trait.TraitValidForAgeSpecies(me.GetCASAGSAvailabilityFlags()))
                {
                    continue;
                }

                int count = 0;
                if (me.TraitManager.mSocialGroupTraitGuid == trait.Guid)
                {
                    count = 1;
                }
                else if (me.HasTrait(trait.Guid))
                {
                    continue;
                }

                allOptions.Add(new SimTrait.Item(trait.Guid, count));
            }

            SimTrait.Item selection = new CommonSelection <SimTrait.Item>(Name, me.FullName, allOptions, new SimTrait.AuxillaryColumn()).SelectSingle();
            if (selection == null)
            {
                return(false);
            }

            TraitNames traitName = selection.Value;

            me.RemoveSocialGroupTrait();

            if (traitName != me.TraitManager.mSocialGroupTraitGuid)
            {
                Sims3.Gameplay.ActorSystems.Trait selTrait = TraitManager.GetTraitFromDictionary(traitName);
                if (selTrait != null)
                {
                    me.TraitManager.mSocialGroupTraitEnabled = true;
                    me.AddSocialGroupTrait(selTrait);
                }
            }

            if ((me.CreatedSim != null) && (me.CreatedSim.SocialComponent != null))
            {
                me.CreatedSim.SocialComponent.UpdateTraits();
            }

            return(true);
        }
示例#5
0
        public static void ApplyTrait(SimDescription sim, OccultTypes type)
        {
            TraitNames trait = TraitFromOccult(type);

            if (trait == TraitNames.Unknown)
            {
                return;
            }

            // Apply the trait using both functions, just in case the user has a tuning mod that mod the trait visible
            sim.TraitManager.AddHiddenElement(trait);
            sim.TraitManager.AddElement(trait);
        }
示例#6
0
 public static bool IsObjectBaseReward(TraitNames trait)
 {
     switch (trait)
     {
         case TraitNames.MapToTheStars:
         case TraitNames.Teleporter:
         case TraitNames.CollectionHelper:
         case TraitNames.FoodReplicator:
         case TraitNames.BodySculptor:
         case TraitNames.MoodModifier:
         case TraitNames.CloneMe:
         case TraitNames.CloneMePet:
         case TraitNames.HoverBed:
         case TraitNames.Inheritance:
         case TraitNames.MotiveMobile:
         case TraitNames.YoungAgain:
         case TraitNames.YoungAgainPet:
         case TraitNames.ChangeLifetimeWish:
         case TraitNames.ChangeOfTaste:
         case TraitNames.BottomlessPetBowlPet:
         case TraitNames.BoxStallSuperPet:
         case TraitNames.PetHygienatorPet:
         case TraitNames.PetBedSuperPet:
         case TraitNames.SelfCleaningStallPet:
         case TraitNames.GenieLamp:
         case TraitNames.Aromainator:
         case TraitNames.FlyingVacuum:
         case TraitNames.PhilosophersStone:
         case TraitNames.CleanSlate:
         case TraitNames.WitchMagicHands:
         case TraitNames.MyBestFriend:
         case TraitNames.MidLifeCrisis:
         case TraitNames.MidlifeCrisisPet:
         case TraitNames.CloudRayGun:
         case TraitNames.WeatherMachine:
         case TraitNames.RebelInfluence:
         case TraitNames.SocialiteInfluence:
         case TraitNames.NerdInfluence:
         case TraitNames.SocialGroupTrait:
         case TraitNames.HonoraryDegree:
         case TraitNames.MermadicKelp:
         case TraitNames.HiddenIslandMap:
         case TraitNames.DreamPodHiddenTrait:
             return true;
     }
     return false;
 }
示例#7
0
        public static OccultTypes OccultFromTrait(TraitNames trait)
        {
            switch (trait)
            {
            case TraitNames.VampireHiddenTrait:
                return(OccultTypes.Vampire);

            case TraitNames.MummyHiddenTrait:
                return(OccultTypes.Mummy);

            case TraitNames.FrankensteinHiddenTrait:
                return(OccultTypes.Frankenstein);

            case TraitNames.ImaginaryFriendHiddenTrait:
                return(OccultTypes.ImaginaryFriend);

            case TraitNames.UnicornHiddenTrait:
                return(OccultTypes.Unicorn);

            case TraitNames.GenieHiddenTrait:
                return(OccultTypes.Genie);

            case TraitNames.WitchHiddenTrait:
                return(OccultTypes.Witch);

            case TraitNames.LycanthropyHuman:
                return(OccultTypes.Werewolf);

            case TraitNames.FairyHiddenTrait:
                return(OccultTypes.Fairy);

            case TraitNames.PlantSim:
                return(OccultTypes.PlantSim);

            case TraitNames.MermaidHiddenTrait:
                return(OccultTypes.Mermaid);

            case TraitNames.TimeTravelerHiddenTrait:
                return(OccultTypes.TimeTraveler);

            case TraitNames.RobotHiddenTrait:
                return(OccultTypes.Robot);

            default:
                return(OccultTypes.None);
            }
        }
示例#8
0
 public static bool IsObjectBaseReward(TraitNames trait)
 {
     switch (trait)
     {
     case TraitNames.MapToTheStars:
     case TraitNames.Teleporter:
     case TraitNames.CollectionHelper:
     case TraitNames.FoodReplicator:
     case TraitNames.BodySculptor:
     case TraitNames.MoodModifier:
     case TraitNames.CloneMe:
     case TraitNames.CloneMePet:
     case TraitNames.HoverBed:
     case TraitNames.Inheritance:
     case TraitNames.MotiveMobile:
     case TraitNames.YoungAgain:
     case TraitNames.YoungAgainPet:
     case TraitNames.ChangeLifetimeWish:
     case TraitNames.ChangeOfTaste:
     case TraitNames.BottomlessPetBowlPet:
     case TraitNames.BoxStallSuperPet:
     case TraitNames.PetHygienatorPet:
     case TraitNames.PetBedSuperPet:
     case TraitNames.SelfCleaningStallPet:
     case TraitNames.GenieLamp:
     case TraitNames.Aromainator:
     case TraitNames.FlyingVacuum:
     case TraitNames.PhilosophersStone:
     case TraitNames.CleanSlate:
     case TraitNames.WitchMagicHands:
     case TraitNames.MyBestFriend:
     case TraitNames.MidLifeCrisis:
     case TraitNames.MidlifeCrisisPet:
     case TraitNames.CloudRayGun:
     case TraitNames.WeatherMachine:
     case TraitNames.RebelInfluence:
     case TraitNames.SocialiteInfluence:
     case TraitNames.NerdInfluence:
     case TraitNames.SocialGroupTrait:
     case TraitNames.HonoraryDegree:
     case TraitNames.MermadicKelp:
     case TraitNames.HiddenIslandMap:
     case TraitNames.DreamPodHiddenTrait:
         return(true);
     }
     return(false);
 }
示例#9
0
        public static string ProperName(TraitNames value, bool isFemale)
        {
            string name = null;

            Trait trait = TraitManager.GetTraitFromDictionary(value);
            if (trait != null)
            {
                name = trait.TraitName(isFemale);

                if (trait.IsHidden)
                {
                    string result;
                    if (Common.Localize("HiddenTrait:" + value, isFemale, new object[0], out result))
                    {
                        name = result;
                    }
                }
            }

            name += (Common.kDebugging ? " (" + value + ")" : "");

            return name;
        }
示例#10
0
        public static string ProperName(TraitNames value, bool isFemale)
        {
            string name = null;

            Trait trait = TraitManager.GetTraitFromDictionary(value);

            if (trait != null)
            {
                name = trait.TraitName(isFemale);

                if (trait.IsHidden)
                {
                    string result;
                    if (Common.Localize("HiddenTrait:" + value, isFemale, new object[0], out result))
                    {
                        name = result;
                    }
                }
            }

            name += (Common.kDebugging ? " (" + value + ")" : "");

            return(name);
        }
示例#11
0
        public new static void DoAcceptReject(Sim actor, Sim target, Sim.GiveGift inst)
        {
            GameObject gift      = inst.Gift;
            string     message   = "";
            string     stingName = null;

            if (inst.RejectFromSpoiled)
            {
                if (DoesSimAlreadyOwnObject(target, gift))
                {
                    message = GiveGiftLocalizeString(target.IsFemale, "SpoiledAlreadyHave", new object[0x0]);
                }
                else
                {
                    message = GiveGiftLocalizeString(target.IsFemale, "SpoiledTooCheap", new object[0x0]);
                }
                InteractionInstance instance = Sim.GiveGiftTantrum.Singleton.CreateInstance(target, target, target.InheritedPriority(), false, true);
                target.InteractionQueue.PushAsContinuation(instance, true);
            }
            else
            {
                Relationship               relationship = actor.GetRelationship(target, false);
                float                      liking       = relationship.LTR.Liking;
                float                      num2         = 0f;
                List <TraitNames>          randomList   = new List <TraitNames>();
                TraitNames                 unknown      = TraitNames.Unknown;
                GiveGiftTraitData          data         = null;
                InformationLearnedAboutSim sim          = relationship.InformationAbout(target);
                foreach (Trait trait in target.TraitManager.List)
                {
                    if (sTraitToTraitDataMap.TryGetValue(trait.Guid, out data) && data.DoesTraitCareAboutObject(gift))
                    {
                        randomList.Add(trait.Guid);
                        num2 += data.Score;
                        if ((unknown == TraitNames.Unknown) && !sim.KnowsTrait(trait.Guid))
                        {
                            unknown = trait.Guid;
                        }
                    }
                }

                if (randomList.Count > 0x0)
                {
                    if (unknown == TraitNames.Unknown)
                    {
                        unknown = RandomUtil.GetRandomObjectFromList <TraitNames>(randomList);
                    }
                    else
                    {
                        sim.LearnTrait(unknown, actor.SimDescription, target.SimDescription);
                    }
                    message = sTraitToTraitDataMap[unknown].GetTNS(target);
                }

                float num3 = liking + num2;
                if (num3 >= Sim.GiveGiftTuning.kLTRToAcceptGift)
                {
                    stingName = "sting_give_gift_accept";
                    if (num3 >= Sim.GiveGiftTuning.kLTRToSuperAcceptGift)
                    {
                        message   = GiveGiftLocalizeString(target.IsFemale, "UberAcceptGiftTNS", new object[0x0]);
                        stingName = "sting_give_gift_accept_super";
                    }
                    else if (liking >= Sim.GiveGiftTuning.kLTRToAcceptGift)
                    {
                        message = GiveGiftLocalizeString(target.IsFemale, "AcceptGiftTNS", new object[0x0]);
                    }
                    TransferGiftFromActorToTarget(actor, target, gift);
                }
                else
                {
                    if (liking < Sim.GiveGiftTuning.kLTRToAcceptGift)
                    {
                        message = GiveGiftLocalizeString(target.IsFemale, "RejectGiftTNS", new object[0x0]);
                    }
                    EventTracker.SendEvent(new SocialEvent(EventTypeId.kSocialInteraction, actor, target, "PillowFight", false, false, false, CommodityTypes.Undefined));
                }
            }
            if (stingName != null)
            {
                actor.ShowTNSAndPlayStingIfSelectable(message, StyledNotification.NotificationStyle.kSimTalking, target.ObjectId, gift.ObjectId, stingName);
            }
            else
            {
                actor.ShowTNSIfSelectable(message, StyledNotification.NotificationStyle.kSimTalking, target.ObjectId, gift.ObjectId);
            }
        }
示例#12
0
        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);
        }
示例#13
0
        protected override bool PrivateUpdate(ScenarioFrame frame)
        {
            foreach (Trait trait in new List <Trait>(Sim.TraitManager.List))
            {
                if (trait.IsReward)
                {
                    continue;
                }

                if (HasValue <ForceTraitOption, TraitNames>(Sim, trait.Guid))
                {
                    IncStat("Forced Trait Found");
                    return(false);
                }
            }

            IncStat("Necessary");

            TraitNames removedTrait = TraitNames.Unknown;

            int available = Sim.TraitManager.NumTraitsForAge() - Sim.TraitManager.CountVisibleTraits();

            if (available == 0)
            {
                foreach (Trait trait in new List <Trait>(Sim.TraitManager.List))
                {
                    if (HasValue <DisallowTraitOption, TraitNames>(Sim, trait.Guid))
                    {
                        Sim.TraitManager.RemoveElement(trait.Guid);

                        if ((trait.IsHidden) || (trait.IsReward))
                        {
                            continue;
                        }

                        removedTrait = trait.Guid;

                        IncStat("Disallowed Trait Removed");
                        available = 1;
                        break;
                    }
                }
            }

            if (available <= 0)
            {
                List <Trait> traits = new List <Trait>(Sim.TraitManager.List);
                RandomUtil.RandomizeListOfObjects(traits);

                foreach (Trait trait in traits)
                {
                    if ((trait.IsHidden) || (trait.IsReward))
                    {
                        continue;
                    }

                    Sim.TraitManager.RemoveElement(trait.Guid);

                    removedTrait = trait.Guid;

                    IncStat("Removed One");
                    break;
                }
            }

            List <TraitNames> choices = new List <TraitNames>(GetValue <ForceTraitOption, List <TraitNames> >(Sim));

            RandomUtil.RandomizeListOfObjects(choices);

            bool readdTrait = true;
            bool result     = false;

            foreach (TraitNames traitName in choices)
            {
                Trait trait = TraitManager.GetTraitFromDictionary(traitName);
                if (trait == null)
                {
                    continue;
                }

                if (!trait.TraitValidForAgeSpecies(Sim.GetCASAGSAvailabilityFlags()))
                {
                    continue;
                }

                bool success = false;

                if (trait.IsHidden)
                {
                    success = Sim.TraitManager.AddElement(traitName, true);
                }
                else
                {
                    success = Sim.AddTrait(trait);
                }

                if (success)
                {
                    IncStat("Success");

                    result = true;
                    GetData(Sim).InvalidateCache();

                    if ((!trait.IsHidden) && (!trait.IsReward))
                    {
                        readdTrait = false;
                    }
                    break;
                }
            }

            if ((readdTrait) && (removedTrait != TraitNames.Unknown))
            {
                Sim.AddTrait(TraitManager.GetTraitFromDictionary(removedTrait));

                IncStat("Trait Readded");
            }

            return(result);
        }
示例#14
0
        public static void AddSocials(string name, SocialComponent ths, CommodityTypes commodity, Sim actor, Sim target, List<SocialInteractionCandidate> socials, bool isAutonomous, int maxNumSocials, List<InteractionObjectPair> results, string[] inlineParentMenu, TraitNames trait)
        {
            sMsg += Common.NewLine + "AddSocials " + name + " " + commodity + " " + socials.Count;

            int num = 0x0;
            InteractionPriority priority = new InteractionPriority(isAutonomous ? InteractionPriorityLevel.Autonomous : InteractionPriorityLevel.UserDirected);
            GreyedOutTooltipCallback greyedOutTooltipCallback = null;
            foreach (SocialInteractionCandidate candidate in socials)
            {
                string[] strArray = inlineParentMenu;
                bool flag = true;
                if (num >= maxNumSocials)
                {
                    break;
                }

                sMsg += Common.NewLine + " Testing " + candidate.Name;

                ActiveTopic topic = candidate.Topic;
                if (topic != null)
                {
                    ActiveTopicData data = topic.Data;
                    if (data.HasPieMenuOverride())
                    {
                        flag = false;
                        strArray = new string[] { data.GetText(actor, new object[0x0]) };
                    }
                }
                ActionData data2 = ActionData.Get(candidate.Name);
                if (data2.AppearsOnTopLevel)
                {
                    strArray = new string[0x0];
                }
                if (!ths.DoesSocialAppear(candidate.Name, results, strArray))
                {
                    InteractionObjectPair iop = null;
                    if (((data2.IntendedCommodityString == CommodityTypes.Friendly) && ((actor.Posture is ISeatedSocialPosture) || (target.Posture is ISeatedSocialPosture))) && data2.AllowCarryChild)
                    {
                        InteractionDefinition interaction = new SeatedSocialInteractionA.SeatedDefinition(candidate.Name, strArray, candidate.Topic, false, trait, false);
                        iop = new InteractionObjectPair(interaction, target);
                        InteractionInstanceParameters parameters = new InteractionInstanceParameters(iop, actor, priority, isAutonomous, true);
                        if (!IUtil.IsPass(interaction.Test(ref parameters, ref greyedOutTooltipCallback)))
                        {
                            iop = null;
                        }
                        if (((candidate.Name == "Chat") && !actor.CanBeInSameGroupTalkAsMe(target)) && (actor.Posture is ISeatedSocialPosture))
                        {
                            string[] strArray2 = new string[0x0];
                            if (!ths.DoesSocialAppear(candidate.Name, results, strArray2))
                            {
                                interaction = new SeatedSocialInteractionA.SeatedDefinition(candidate.Name, strArray2, candidate.Topic, false, trait, true);
                                InteractionObjectPair pair2 = new InteractionObjectPair(interaction, target);
                                parameters = new InteractionInstanceParameters(pair2, actor, priority, isAutonomous, true);
                                if (IUtil.IsPass(interaction.Test(ref parameters, ref greyedOutTooltipCallback)))
                                {
                                    results.Add(pair2);
                                }
                            }
                        }
                    }
                    if (iop == null)
                    {
                        iop = new InteractionObjectPair(new SocialInteractionA.Definition(candidate.Name, strArray, candidate.Topic, false, trait), target);
                    }
                    InteractionInstanceParameters parameters2 = new InteractionInstanceParameters(iop, actor, priority, isAutonomous, true);

                    InteractionTestResult result = iop.InteractionDefinition.Test(ref parameters2, ref greyedOutTooltipCallback);

                    sMsg += Common.NewLine + "  " + candidate.Name + " = " + result;

                    if ((IUtil.IsPass(result) || (greyedOutTooltipCallback != null)) || Sims3.Gameplay.UI.PieMenu.PieMenuShowFailureReason)
                    {
                        results.Add(iop);
                        if (flag)
                        {
                            num++;
                        }
                    }
                }
            }
        }
示例#15
0
        public static bool Remove(SimDescription sim, OccultTypes type, bool alterOutfit)
        {
            if (sim.OccultManager == null)
            {
                return(false);
            }

            if (sim.CreatedSim != null)
            {
                try
                {
                    if (sim.CreatedSim.CurrentOutfitCategory == OutfitCategories.Special)
                    {
                        sim.CreatedSim.SwitchToOutfitWithoutSpin(OutfitCategories.Everyday);
                    }
                }
                catch
                { }
            }

            OccultVampire vampire = sim.OccultManager.GetOccultType(type) as OccultVampire;

            if (vampire != null)
            {
                if ((vampire.mOwningSim == null) || (vampire.mOwningSim.MapTagManager == null))
                {
                    vampire.mPreyMapTag = null;
                }
            }

            if (sim.GetOutfitCount(OutfitCategories.Everyday) == 1)
            {
                SimOutfit outfit = sim.GetOutfit(OutfitCategories.Everyday, 0);

                using (CASParts.OutfitBuilder builder = new CASParts.OutfitBuilder(sim, new CASParts.Key(OutfitCategories.Everyday, 1), outfit))
                { }
            }

            if (type == OccultTypes.Unicorn)
            {
                OccultUnicornEx.OnRemoval(sim);
            }

            bool success = false;

            OccultManager occultManager = sim.OccultManager;

            try
            {
                if (occultManager.HasOccultType(type))
                {
                    occultManager.mCurrentOccultTypes ^= type;
                    foreach (OccultBaseClass occultClass in occultManager.mOccultList)
                    {
                        if (type == occultClass.ClassOccultType)
                        {
                            if ((occultManager.mOwnerDescription.SupernaturalData != null) && (occultManager.mOwnerDescription.SupernaturalData.OccultType == type))
                            {
                                occultManager.mOwnerDescription.RemoveSupernaturalData();
                            }

                            OccultGenie genie = occultClass as OccultGenie;
                            if (genie != null)
                            {
                                OccultGenieEx.OnRemoval(genie, occultManager.mOwnerDescription, alterOutfit);
                            }
                            else
                            {
                                OccultPlantSim plantSim = occultClass as OccultPlantSim;
                                if (plantSim != null)
                                {
                                    OccultPlantSimEx.OnRemoval(plantSim, occultManager.mOwnerDescription, alterOutfit);
                                }
                                else
                                {
                                    occultClass.OnRemoval(occultManager.mOwnerDescription);
                                }
                            }

                            occultManager.mOccultList.Remove(occultClass);
                            occultManager.mIsLifetimeReward = false;
                            if (occultManager.mOccultList.Count == 0x0)
                            {
                                occultManager.mOccultList = null;
                            }
                            break;
                        }
                    }

                    (Responder.Instance.HudModel as Sims3.Gameplay.UI.HudModel).OnSimDaysPerAgingYearChanged();

                    occultManager.UpdateOccultUI();

                    EventTracker.SendEvent(EventTypeId.kLostOccult, occultManager.mOwnerDescription.CreatedSim);
                }

                //occultManager.RemoveOccultType(type);
                success = true;
            }
            catch (Exception e)
            {
                bool showError = true;
                switch (type)
                {
                case OccultTypes.Genie:
                case OccultTypes.ImaginaryFriend:
                    if (sim.CreatedSim == null)
                    {
                        showError = false;
                    }
                    break;
                }

                if (showError)
                {
                    Common.Exception(sim, e);
                }
            }

            if (!success)
            {
                for (int i = occultManager.mOccultList.Count - 1; i >= 0; i--)
                {
                    if (type == occultManager.mOccultList[i].ClassOccultType)
                    {
                        occultManager.mOccultList.RemoveAt(i);
                    }

                    (Sims3.UI.Responder.Instance.HudModel as Sims3.Gameplay.UI.HudModel).OnSimDaysPerAgingYearChanged();
                    sim.OccultManager.UpdateOccultUI();
                }
            }

            TraitNames trait = TraitFromOccult(type);

            if (trait != TraitNames.Unknown)
            {
                sim.TraitManager.RemoveElement(trait);
            }

            return(success);
        }
示例#16
0
 public static OccultTypes OccultFromTrait(TraitNames trait)
 {
     switch (trait)
     {
         case TraitNames.VampireHiddenTrait:
             return OccultTypes.Vampire;
         case TraitNames.MummyHiddenTrait:
             return OccultTypes.Mummy;
         case TraitNames.FrankensteinHiddenTrait:
             return OccultTypes.Frankenstein;
         case TraitNames.ImaginaryFriendHiddenTrait:
             return OccultTypes.ImaginaryFriend;
         case TraitNames.UnicornHiddenTrait:
             return OccultTypes.Unicorn;
         case TraitNames.GenieHiddenTrait:
             return OccultTypes.Genie;
         case TraitNames.WitchHiddenTrait:
             return OccultTypes.Witch;
         case TraitNames.LycanthropyHuman:
             return OccultTypes.Werewolf;
         case TraitNames.FairyHiddenTrait:
             return OccultTypes.Fairy;
         case TraitNames.PlantSim:
             return OccultTypes.PlantSim;
         case TraitNames.MermaidHiddenTrait:
             return OccultTypes.Mermaid;
         case TraitNames.TimeTravelerHiddenTrait:
             return OccultTypes.TimeTraveler;
         case TraitNames.RobotHiddenTrait:
             return OccultTypes.Robot;
         default:
             return OccultTypes.None;
     }
 }
示例#17
0
        public static void AddSocials(SocialComponent ths, Sim actor, Sim target, List <SocialInteractionCandidate> socials, bool isAutonomous, int maxNumSocials, List <InteractionObjectPair> results, string[] inlineParentMenu, TraitNames trait, ref string msg)
        {
            int num = 0x0;
            InteractionPriority      priority = new InteractionPriority(isAutonomous ? InteractionPriorityLevel.Autonomous : InteractionPriorityLevel.UserDirected);
            GreyedOutTooltipCallback greyedOutTooltipCallback = null;

            foreach (SocialInteractionCandidate candidate in socials)
            {
                using (Common.TestSpan span = new Common.TestSpan(TimeSpanLogger.Bin, candidate.Name, Common.DebugLevel.Stats))
                {
                    string[] strArray = inlineParentMenu;
                    bool     flag     = true;
                    if (num >= maxNumSocials)
                    {
                        break;
                    }
                    ActiveTopic topic = candidate.Topic;
                    if (topic != null)
                    {
                        ActiveTopicData data = topic.Data;
                        if (data.HasPieMenuOverride())
                        {
                            flag     = false;
                            strArray = new string[] { data.GetText(actor, new object[0x0]) };
                        }
                    }
                    ActionData data2 = ActionData.Get(candidate.Name);
                    if (data2.AppearsOnTopLevel)
                    {
                        strArray = new string[0x0];
                    }
                    if (!ths.DoesSocialAppear(candidate.Name, results, strArray))
                    {
                        InteractionObjectPair iop = null;
                        if (((data2.IntendedCommodityString == CommodityTypes.Friendly) && ((actor.Posture is ISeatedSocialPosture) || (target.Posture is ISeatedSocialPosture))) && data2.AllowCarryChild)
                        {
                            InteractionDefinition interaction = new SeatedSocialInteractionA.SeatedDefinition(candidate.Name, strArray, candidate.Topic, false, trait, false);
                            iop = new InteractionObjectPair(interaction, target);
                            InteractionInstanceParameters parameters = new InteractionInstanceParameters(iop, actor, priority, isAutonomous, true);
                            if (!IUtil.IsPass(interaction.Test(ref parameters, ref greyedOutTooltipCallback)))
                            {
                                iop = null;
                            }
                            if (((candidate.Name == "Chat") && !actor.CanBeInSameGroupTalkAsMe(target)) && (actor.Posture is ISeatedSocialPosture))
                            {
                                string[] strArray2 = new string[0x0];
                                if (!ths.DoesSocialAppear(candidate.Name, results, strArray2))
                                {
                                    interaction = new SeatedSocialInteractionA.SeatedDefinition(candidate.Name, strArray2, candidate.Topic, false, trait, true);
                                    InteractionObjectPair pair2 = new InteractionObjectPair(interaction, target);
                                    parameters = new InteractionInstanceParameters(pair2, actor, priority, isAutonomous, true);
                                    if (IUtil.IsPass(interaction.Test(ref parameters, ref greyedOutTooltipCallback)))
                                    {
                                        results.Add(pair2);
                                    }
                                }
                            }
                        }
                        if (iop == null)
                        {
                            iop = new InteractionObjectPair(new SocialInteractionA.Definition(candidate.Name, strArray, candidate.Topic, false, trait), target);
                        }
                        InteractionInstanceParameters parameters2 = new InteractionInstanceParameters(iop, actor, priority, isAutonomous, true);

                        InteractionTestResult result = iop.InteractionDefinition.Test(ref parameters2, ref greyedOutTooltipCallback);

                        msg += Common.NewLine + parameters2.InteractionDefinition.GetInteractionName(ref parameters2) + ": " + result;

                        if ((IUtil.IsPass(result) || (greyedOutTooltipCallback != null)) || Sims3.Gameplay.UI.PieMenu.PieMenuShowFailureReason)
                        {
                            results.Add(iop);
                            if (flag)
                            {
                                num++;
                            }
                        }
                    }
                }
            }
        }
示例#18
0
        protected override bool Run(SimDescription me, bool singleSelection)
        {
            List <SimTrait.Item> allOptions = new List <SimTrait.Item>();

            foreach (Sims3.Gameplay.ActorSystems.Trait trait in TraitManager.GetDictionaryTraits)
            {
                if (trait.IsReward)
                {
                    continue;
                }

                if (trait.Guid == TraitNames.DescendantHiddenTrait)
                {
                    continue;
                }

                if (!trait.TraitValidForAgeSpecies(me.GetCASAGSAvailabilityFlags()))
                {
                    continue;
                }

                if (trait.RobotOnly)
                {
                    continue;
                }

                int count = 0;
                if (me.TraitManager.HasElement(trait.Guid))
                {
                    count = 1;
                }

                allOptions.Add(new SimTrait.Item(trait.Guid, count));
            }

            CommonSelection <SimTrait.Item> .Results selection = new CommonSelection <SimTrait.Item>(Name, me.FullName, allOptions, new SimTrait.AuxillaryColumn()).SelectMultiple();
            if (selection.Count == 0)
            {
                return(false);
            }

            foreach (SimTrait.Item item in selection)
            {
                if (item == null)
                {
                    continue;
                }

                TraitNames traitName = item.Value;

                Sims3.Gameplay.ActorSystems.Trait trait = TraitManager.GetTraitFromDictionary(traitName);
                if (trait != null)
                {
                    if (me.TraitManager.HasElement(traitName))
                    {
                        if (me.TraitManager.mSocialGroupTraitGuid == traitName)
                        {
                            me.RemoveSocialGroupTrait();
                        }
                        else if (me.TraitManager.mUniversityGraduateTraitGuid == traitName)
                        {
                            me.RemoveUniversityGraduateTrait();
                        }
                        else
                        {
                            me.RemoveTrait(trait);
                        }
                    }
                    else
                    {
                        int iTraitsForBabiesAndToddlers  = TraitManager.kTraitsForBabiesAndToddlers;
                        int iTraitsForChildren           = TraitManager.kTraitsForChildren;
                        int iTraitsForTeens              = TraitManager.kTraitsForTeens;
                        int iTraitsForYoungAdultAndOlder = TraitManager.kTraitsForYoungAdultAndOlder;

                        try
                        {
                            // Don't use MaxValue as EA adds to this number for [[University]] purposes
                            TraitManager.kTraitsForBabiesAndToddlers  = 10000000;
                            TraitManager.kTraitsForChildren           = 10000000;
                            TraitManager.kTraitsForTeens              = 10000000;
                            TraitManager.kTraitsForYoungAdultAndOlder = 10000000;

                            if (trait.IsHidden)
                            {
                                me.TraitManager.AddHiddenElement(traitName);
                            }
                            else
                            {
                                me.AddTrait(trait);
                            }
                        }
                        finally
                        {
                            TraitManager.kTraitsForBabiesAndToddlers  = iTraitsForBabiesAndToddlers;
                            TraitManager.kTraitsForChildren           = iTraitsForChildren;
                            TraitManager.kTraitsForTeens              = iTraitsForTeens;
                            TraitManager.kTraitsForYoungAdultAndOlder = iTraitsForYoungAdultAndOlder;
                        }
                    }
                }
            }

            if ((me.CreatedSim != null) && (me.CreatedSim.SocialComponent != null))
            {
                me.CreatedSim.SocialComponent.UpdateTraits();
            }

            if (me.TraitManager.CountVisibleTraits() > me.TraitManager.NumTraitsForAge())
            {
                Common.Notify(Common.Localize("ChangeTraits:MaxExceeded", me.IsFemale, new object[] { me, me.TraitManager.CountVisibleTraits(), me.TraitManager.NumTraitsForAge() }));
            }

            return(true);
        }
示例#19
0
文件: SimTrait.cs 项目: yakoder/NRaas
 public Item(TraitNames guid, int count)
     : base(guid, count)
 {
 }
示例#20
0
 public Definition(TraitNames trait, int level)
 {
     mTrait = trait;
     mLevel = level;
 }