コード例 #1
0
            public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                SwimHere.SwimHereType type = mSwimHereType;
                try
                {
                    // Bypass some world restrictions encoded into the snorkel check
                    mSwimHereType = SwimHere.SwimHereType.None;

                    InteractionTestResult result = base.Test(ref parameters, ref greyedOutTooltipCallback);

                    //Bypass pregnancy check
                    if (result == InteractionTestResult.Tuning_Pregnant && greyedOutTooltipCallback != null)
                    {
                        result = InteractionTestResult.Pass;
                    }
                    if (result == InteractionTestResult.Pass)
                    {
                        //Stress test moved to the end
                        Sim actor = parameters.Actor as Sim;

                        if (actor.MoodManager.StressInteractionTest(ref greyedOutTooltipCallback) || actor.Motives.StressInteractionTest(ref greyedOutTooltipCallback, null))
                        {
                            result = InteractionTestResult.GenericFail;
                        }
                    }
                    return(result);
                }
                finally
                {
                    mSwimHereType = type;
                }
            }
コード例 #2
0
        public static InteractionDefinitionOptionList CreateNesting(IActor actor, GameObjectHit hit, List <InteractionObjectPair> pairs)
        {
            InteractionDefinitionOptionList primary = new InteractionDefinitionOptionList("");

            foreach (InteractionObjectPair pair in pairs)
            {
                GreyedOutTooltipCallback greyedOutTooltipCallback = null;

                InteractionInstanceParameters parameters = new InteractionInstanceParameters(pair, actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);
                parameters.mGameObjectHit = hit;

                InteractionTestResult result = pair.InteractionDefinition.Test(ref parameters, ref greyedOutTooltipCallback);
                if (!IUtil.IsPass(result))
                {
                    continue;
                }

                string[] paths = pair.InteractionDefinition.GetPath(actor.IsFemale);

                List <string> fullPath = new List <string>();

                if (paths != null)
                {
                    fullPath.AddRange(paths);
                }

                if (pair is IopWithPrependedPath)
                {
                    fullPath.Insert(0, (pair as IopWithPrependedPath).PrependPath);
                }

                InteractionDefinitionOptionList list = primary;

                foreach (string path in fullPath)
                {
                    string lookup = path;
                    if (lookup == null)
                    {
                        lookup = "";
                    }

                    InteractionDefinitionOptionList nextList = list.GetOption(lookup);
                    if (nextList == null)
                    {
                        nextList = new InteractionDefinitionOptionList(lookup);

                        list.Add(nextList);
                    }

                    list = nextList;
                }

                list.Add(new InteractionDefinitionOption(pair, actor));
            }

            return(primary);
        }
コード例 #3
0
            public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                try
                {
                    Sim actor = parameters.Actor as Sim;
                    if (actor == null)
                    {
                        return(InteractionTestResult.Root_Null_Actor);
                    }

                    if ((actor.LotCurrent == null) || (actor.LotCurrent.IsWorldLot))
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("World Lot");
                        return(InteractionTestResult.Tuning_LotAvailability);
                    }

                    WoohooLocationControl control = WoohooLocationControl.GetControl(GetLocation(parameters.Target));
                    if (control == null)
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("Control Denied");
                        return(InteractionTestResult.Def_TestFailed);
                    }

                    if (!control.AllowLocation(actor.SimDescription, false))
                    {
                        greyedOutTooltipCallback = Common.DebugTooltip("Location Denied");
                        return(InteractionTestResult.Def_TestFailed);
                    }

                    using (WoohooTuningControl tuningControl = new WoohooTuningControl(parameters.InteractionObjectPair.Tuning, Woohooer.Settings.mAllowTeenWoohoo))
                    {
                        InteractionTestResult result = base.Test(ref parameters, ref greyedOutTooltipCallback);

                        if ((greyedOutTooltipCallback == null) && (Common.kDebugging))
                        {
                            greyedOutTooltipCallback = delegate { return(result.ToString()); };
                        }

                        return(result);
                    }
                }
                catch (ResetException)
                {
                    throw;
                }
                catch (Exception e)
                {
                    Common.Exception(parameters.Actor, parameters.Target, e);
                    return(InteractionTestResult.GenericFail);
                }
            }
コード例 #4
0
        private static List <InteractionObjectPair> SocialsForNewConversation(SocialComponent ths, Sim actor, Sim target, bool isAutonomous)
        {
            string msg = null;

            List <InteractionObjectPair> list = new List <InteractionObjectPair>();

            string[]                 path     = new string[0x0];
            InteractionPriority      priority = new InteractionPriority(isAutonomous ? InteractionPriorityLevel.Autonomous : InteractionPriorityLevel.UserDirected);
            GreyedOutTooltipCallback greyedOutTooltipCallback = null;

            foreach (string str in CelebrityManager.CanSocialize(actor, target) ? new string[] { "Greet Friendly", "Greet Insulting" } : new string[] { "Greet Celebrity" })
            {
                InteractionObjectPair         iop        = new InteractionObjectPair(new SocialInteractionA.Definition(str, path, null, false), target);
                InteractionInstanceParameters parameters = new InteractionInstanceParameters(iop, actor, priority, isAutonomous, true);

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

                msg += Common.NewLine + "A " + str + " " + iop.InteractionDefinition.GetType().ToString() + " " + result;

                if (result == InteractionTestResult.Pass)
                {
                    list.Add(iop);
                }
            }
            foreach (SocialInteractionCandidate candidate in Conversation.GetActiveTopicInteractions(Relationship.GetLongTermRelationship(actor, target), actor, target, null, isAutonomous))
            {
                if (candidate.Topic.Data.AvailableWhenConversationStarts)
                {
                    InteractionObjectPair         pair2       = new InteractionObjectPair(new SocialInteractionA.Definition(candidate.Name, path, null, false), target);
                    InteractionInstanceParameters parameters2 = new InteractionInstanceParameters(pair2, actor, priority, isAutonomous, true);

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

                    msg += Common.NewLine + "B " + candidate.Name + " " + pair2.InteractionDefinition.GetType().ToString() + " " + result;

                    if (result == InteractionTestResult.Pass)
                    {
                        list.Add(pair2);
                    }
                }
            }

            Common.WriteLog(msg);

            return(list);
        }
コード例 #5
0
ファイル: YouShouldEx.cs プロジェクト: yakoder/NRaas
            public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                InteractionTestResult r = base.Test(ref parameters, ref greyedOutTooltipCallback);

                // EA, GENIUS!
                if (r == InteractionTestResult.Def_TestFailed && this.Test(parameters.Actor as Sim, parameters.Target as Sim, parameters.Autonomous, ref greyedOutTooltipCallback))
                {
                    r = InteractionTestResult.Pass;
                }

                if (r == InteractionTestResult.Social_TargetCannotBeSocializedWith)
                {
                    r = InteractionTestResult.Pass;
                }

                return(r);
            }
コード例 #6
0
        public static List <SocialInteractionCandidate> Get(Sim actor, Sim target, ShortTermContextTypes category, LongTermRelationshipTypes group, bool isActive, ActiveTopic topic, bool isAutonomous, ref string msg)
        {
            Dictionary <LongTermRelationshipTypes, Dictionary <bool, List <string> > > dictionary;
            List <SocialInteractionCandidate> list = new List <SocialInteractionCandidate>();

            if (ActionAvailabilityData.sStcInteractions.TryGetValue(category, out dictionary))
            {
                Dictionary <bool, List <string> > dictionary2;
                List <string> list2;
                bool          flag = dictionary.TryGetValue(group, out dictionary2);
                if (!flag)
                {
                    group = LongTermRelationshipTypes.Default;
                    flag  = dictionary.TryGetValue(group, out dictionary2);
                }
                if (!flag || !dictionary2.TryGetValue(isActive, out list2))
                {
                    msg += Common.NewLine + "Get Fail 1 " + category;
                    return(list);
                }

                msg += Common.NewLine + "Get Found " + category + " " + list2.Count;

                foreach (string str in list2)
                {
                    ActionData data = ActionData.Get(str);
                    GreyedOutTooltipCallback greyedOutTooltipCallback = null;

                    InteractionTestResult result = data.Test(actor, target, isAutonomous, topic, ref greyedOutTooltipCallback);

                    msg += Common.NewLine + " " + str + " " + result;

                    if ((IUtil.IsPass(result) || (greyedOutTooltipCallback != null)) || Sims3.Gameplay.UI.PieMenu.PieMenuShowFailureReason)
                    {
                        list.Add(new SocialInteractionCandidate(str, data.GetParentMenu(actor, target), topic));
                    }
                }
            }
            else
            {
                msg += Common.NewLine + "Get Fail 2 " + category;
            }

            return(list);
        }
コード例 #7
0
ファイル: YouShouldEx.cs プロジェクト: yakoder/NRaas
            public override InteractionTestResult Test(ref InteractionInstanceParameters parameters, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                InteractionTestResult result = base.Test(ref parameters, ref greyedOutTooltipCallback);

                if (result == InteractionTestResult.Def_TestFailed)
                {
                    Sim actor  = parameters.Actor as Sim;
                    Sim target = parameters.Target as Sim;

                    if (!actor.SimDescription.IsVampire)
                    {
                        return(InteractionTestResult.Def_TestFailed);
                    }
                    else if (!actor.Posture.AllowsNormalSocials() || !target.Posture.AllowsNormalSocials())
                    {
                        return(InteractionTestResult.GenericFail);
                    }
                    else if ((actor.Posture is SwimmingInPool) || (target.Posture is SwimmingInPool))
                    {
                        return(InteractionTestResult.Social_TargetInPool);
                    }
                    else if (Relationship.AreStrangers(actor, target) || target.NeedsToBeGreeted(actor))
                    {
                        return(InteractionTestResult.Social_TargetIsUngreetedOnCurrentLot);
                    }
                    else if (!CelebrityManager.CanSocialize(actor, target))
                    {
                        return(InteractionTestResult.Social_TargetCannotBeSocializedWith);
                    }
                    else if (GetYouShouldTargets(actor, target).Count == 0x0)
                    {
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(YouShould.LocalizeString("InteractionUnavailable", new object[0x0]));
                        return(InteractionTestResult.GenericFail);
                    }

                    return(InteractionTestResult.Pass);
                }

                return(result);
            }
コード例 #8
0
        private static List <SocialInteractionCandidate> GetInternal(string name, Sim actor, Sim target, LongTermRelationshipTypes group, bool isActive, ActiveTopic topic, bool isAutonomous, Dictionary <LongTermRelationshipTypes, Dictionary <bool, List <string> > > interactionCategories)
        {
            Dictionary <bool, List <string> > dictionary;
            List <string> list2;
            bool          flag = interactionCategories.TryGetValue(group, out dictionary);

            if (!flag)
            {
                sMsg += Common.NewLine + " Try Default";

                group = LongTermRelationshipTypes.Default;
                flag  = interactionCategories.TryGetValue(group, out dictionary);
            }
            List <SocialInteractionCandidate> list = new List <SocialInteractionCandidate>();

            if (flag && dictionary.TryGetValue(isActive, out list2))
            {
                sMsg += Common.NewLine + " Choices = " + list2.Count;

                foreach (string str in list2)
                {
                    ActionData data = ActionData.Get(str);
                    GreyedOutTooltipCallback greyedOutTooltipCallback = null;

                    InteractionTestResult result = data.Test(actor, target, isAutonomous, topic, ref greyedOutTooltipCallback);

                    sMsg += Common.NewLine + "  " + str + " = " + result;

                    if ((IUtil.IsPass(result) || (greyedOutTooltipCallback != null)) || Sims3.Gameplay.UI.PieMenu.PieMenuShowFailureReason)
                    {
                        list.Add(new SocialInteractionCandidate(str, data.GetParentMenu(actor, target), topic));
                    }
                }
            }
            return(list);
        }
コード例 #9
0
        public static bool TestAllow(InteractionDefinition definition, ref InteractionInstanceParameters parameters)
        {
            try
            {
                Common.StringBuilder msg = new Common.StringBuilder();

                GreyedOutTooltipCallback greyedOutTooltipCallback = null;
                InteractionTestResult    result = definition.Test(ref parameters, ref greyedOutTooltipCallback);
                if (!IUtil.IsPass(result))
                {
                    msg += Common.NewLine + result;

                    sTracer.Reset();

                    sTracer.mActor  = parameters.Actor as Sim;
                    sTracer.mFail   = true;
                    sTracer.mIgnore = true;
                }
                else
                {
                    sTracer.mActor = parameters.Actor as Sim;
                    sTracer.Perform();

                    if ((sTracer.mActor != null) && (sTracer.mTestForActive))
                    {
                        if (sTracer.mActor.IsSelectable)
                        {
                            if (GoHere.Settings.mDisallowActiveGoHome)
                            {
                                sTracer.mFail = true;
                            }
                        }
                        else
                        {
                            if ((GoHere.Settings.mDisallowInactiveLeaveActiveLot) &&
                                (!sTracer.mActor.LotCurrent.IsBaseCampLotType) &&
                                (!sTracer.mActor.Autonomy.Motives.IsSleepy()))
                            {
                                foreach (Sim sim in Households.AllSims(Household.ActiveHousehold))
                                {
                                    if (sim.LotCurrent == sTracer.mActor.LotCurrent)
                                    {
                                        sTracer.mFail = true;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }

                if (((!sTracer.mIgnore) || (!GoHere.Settings.mIgnoreLogs)) && (Common.kDebugging))
                {
                    msg += Common.NewLine + sTracer.ToString();

                    Common.DebugException(parameters.Actor, parameters.Target, msg, new Exception());
                }

                if (sTracer.mFail)
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                Common.Exception(parameters.Actor, parameters.Target, e);
            }

            return(true);
        }
コード例 #10
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++;
                            }
                        }
                    }
                }
            }
        }
コード例 #11
0
        public override bool Run()
        {
            bool pieMenuShowFailureReason = PieMenu.PieMenuShowFailureReason;

            try
            {
                PieMenu.PieMenuShowFailureReason = true;

                Common.StringBuilder msg = new Common.StringBuilder();

                Common.StringBuilder unused = new Common.StringBuilder();
                Common.ExceptionLogger.Convert(Actor, unused, msg);
                Common.ExceptionLogger.Convert(Target, unused, msg);

                msg += Common.NewLine + Common.NewLine + "Injected Interactions" + Common.NewLine;

                foreach (InteractionObjectPair interaction in Target.mInteractions)
                {
                    Common.TestSpan span = Common.TestSpan.CreateSimple();
                    try
                    {
                        msg += Common.NewLine + interaction.InteractionDefinition.GetType();
                        msg += Common.NewLine + " " + interaction.InteractionDefinition.GetType().Assembly.FullName;

                        InteractionInstanceParameters parameters = new InteractionInstanceParameters(interaction, Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), true, true);

                        try
                        {
                            msg += Common.NewLine + " " + interaction.InteractionDefinition.GetInteractionName(ref parameters);
                        }
                        catch
                        {
                            msg += Common.NewLine + " (Exception)";
                        }
                    }
                    finally
                    {
                        long duration = span.Duration;
                        if (duration > 1)
                        {
                            msg += Common.NewLine + " Duration: " + duration;
                        }
                    }
                }

                msg += Common.NewLine + Common.NewLine + "All Interactions" + Common.NewLine;

                List <InteractionObjectPair> interactions = null;

                Common.TestSpan interactionSpan = Common.TestSpan.CreateSimple();
                try
                {
                    interactions = Target.GetAllInteractionsForActor(Actor);
                    interactions.AddRange(Target.GetAllInventoryInteractionsForActor(Actor));
                }
                finally
                {
                    long duration = interactionSpan.Duration;
                    if (duration > 1)
                    {
                        msg += Common.NewLine + "All Interactions Duration: " + duration;
                    }
                }

                foreach (InteractionObjectPair interaction in interactions)
                {
                    Common.TestSpan span = Common.TestSpan.CreateSimple();
                    try
                    {
                        msg += Common.NewLine + interaction.InteractionDefinition.GetType();
                        msg += Common.NewLine + " " + interaction.InteractionDefinition.GetType().Assembly.FullName;

                        GreyedOutTooltipCallback callback = null;

                        InteractionInstanceParameters userDirected = new InteractionInstanceParameters(interaction, Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);

                        InteractionTestResult result = InteractionTestResult.GenericUnknown;

                        try
                        {
                            result = interaction.InteractionDefinition.Test(ref userDirected, ref callback);
                        }
                        catch (Exception e)
                        {
                            msg += Common.NewLine + e.ToString();
                        }

                        try
                        {
                            msg += Common.NewLine + " " + interaction.InteractionDefinition.GetInteractionName(ref userDirected);

                            SocialInteractionA.Definition socialInteractionA = interaction.InteractionDefinition as SocialInteractionA.Definition;
                            if (socialInteractionA != null)
                            {
                                msg += Common.NewLine + "  ActionKey=" + socialInteractionA.ActionKey;
                                msg += Common.NewLine + "  ChecksToSkip=" + socialInteractionA.ChecksToSkip;
                                msg += Common.NewLine + "  mIsInitialGreeting=" + socialInteractionA.mIsInitialGreeting;
                                msg += Common.NewLine + "  mTrait=" + socialInteractionA.mTrait;
                            }
                        }
                        catch (Exception e)
                        {
                            // Only dispaly GetInteractionName() errors if that call is actually used by EA
                            if (IUtil.IsPass(result))
                            {
                                msg += Common.NewLine + e.ToString();
                            }
                            else
                            {
                                msg += Common.NewLine + " (Exception)";
                            }
                        }

                        msg += Common.NewLine + " User Directed = " + result;

                        if (callback != null)
                        {
                            msg += Common.NewLine + "  Tooltip: " + callback();
                        }

                        callback = null;

                        InteractionInstanceParameters autonomous = new InteractionInstanceParameters(interaction, Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), true, true);

                        result = InteractionTestResult.GenericUnknown;
                        try
                        {
                            result = interaction.InteractionDefinition.Test(ref autonomous, ref callback);
                        }
                        catch (Exception e)
                        {
                            msg += Common.NewLine + e.ToString();
                        }

                        msg += Common.NewLine + " Autonomous = " + result;
                        if (callback != null)
                        {
                            msg += Common.NewLine + "  Tooltip: " + callback();
                        }
                    }
                    finally
                    {
                        long duration = span.Duration;
                        if (duration > 1)
                        {
                            msg += Common.NewLine + " Duration: " + duration;
                        }
                    }
                }

                Common.WriteLog(msg);

                SimpleMessageDialog.Show(Common.Localize("TestInteractions:MenuName"), Common.Localize("TestInteractions:Success"));
            }
            finally
            {
                PieMenu.PieMenuShowFailureReason = pieMenuShowFailureReason;
            }

            return(true);
        }