Beispiel #1
0
        protected override bool Allow(GameHitParameters <GameObject> hitParameters)
        {
            InteractionInstanceParameters parameters = new InteractionInstanceParameters(mPair, hitParameters.mActor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, hitParameters.mHit);

            GreyedOutTooltipCallback greyedOutTooltipCallback = null;

            return(IUtil.IsPass(mPair.InteractionDefinition.Test(ref parameters, ref greyedOutTooltipCallback)));
        }
Beispiel #2
0
        public override bool Run()
        {
            try
            {
                List <InteractionObjectPair> allInteractions = Actor.GetAllInteractionsForActor(Actor);
                if (allInteractions == null)
                {
                    return(false);
                }

                List <Item> items = new List <Item>();

                foreach (InteractionObjectPair pair in allInteractions)
                {
                    if (pair.InteractionDefinition is ISoloInteractionDefinition)
                    {
                        try
                        {
                            InteractionInstanceParameters p = new InteractionInstanceParameters(pair, Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), Autonomous, CancellableByPlayer);

                            GreyedOutTooltipCallback callBack = null;
                            if (!IUtil.IsPass(pair.InteractionDefinition.Test(ref p, ref callBack)))
                            {
                                continue;
                            }

                            items.Add(new Item(pair.InteractionDefinition.GetInteractionName(ref p), pair));
                        }
                        catch (Exception e)
                        {
                            Common.Exception(Actor, null, pair.InteractionDefinition.GetType().ToString(), e);
                        }
                    }
                }

                Item choice = new CommonSelection <Item>(GetInteractionName(), items).SelectSingle();
                if (choice == null)
                {
                    return(false);
                }

                InteractionInstance instance = choice.Value.InteractionDefinition.CreateInstance(Actor, Actor, GetPriority(), Autonomous, CancellableByPlayer);

                Actor.InteractionQueue.Add(instance);

                return(base.Run());
            }
            catch (ResetException)
            {
                throw;
            }
            catch (Exception e)
            {
                Common.Exception(Actor, Target, e);
                return(false);
            }
        }
        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);
        }
Beispiel #4
0
        private static bool TestInteractions(Sim activeActor, GameObjectHit gameObjectHit, List <InteractionObjectPair> interactions)
        {
            bool found = false;

            for (int i = interactions.Count - 1; i >= 0; i--)
            {
                InteractionObjectPair interaction = interactions[i];

                string name = interaction.InteractionDefinition.GetType().ToString();

                bool testSuccess = false, nameSuccess = false;
                try
                {
                    InteractionInstanceParameters userDirected = new InteractionInstanceParameters(interaction, activeActor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);
                    userDirected.mGameObjectHit = gameObjectHit;

                    try
                    {
                        name        = interaction.InteractionDefinition.GetInteractionName(ref userDirected);
                        nameSuccess = true;
                    }
                    catch
                    {
                        name = interaction.InteractionDefinition.GetType().ToString();
                    }

                    GreyedOutTooltipCallback callback = null;
                    if (IUtil.IsPass(interaction.InteractionDefinition.Test(ref userDirected, ref callback)) || (callback != null))
                    {
                        found = true;
                    }

                    testSuccess = true;
                }
                catch (Exception e)
                {
                    Common.Exception(activeActor, interaction.Target, name, e);
                }

                if ((!testSuccess) || (!nameSuccess))
                {
                    interactions.RemoveAt(i);
                }
            }

            return(found);
        }
Beispiel #5
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);
        }
Beispiel #6
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);
        }
Beispiel #7
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);
        }
Beispiel #8
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++;
                            }
                        }
                    }
                }
            }
        }
Beispiel #9
0
            public override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback)
            {
                if (((a == target) || !target.SimDescription.TeenOrAbove) || target.IsSleeping)
                {
                    return(false);
                }
                if ((target.Posture is SwimmingInPool) || (a.Posture is SwimmingInPool))
                {
                    return(false);
                }
                PerformanceCareer occupationAsPerformanceCareer = a.CareerManager.OccupationAsPerformanceCareer;

                if (occupationAsPerformanceCareer == null)
                {
                    return(false);
                }
                if (!occupationAsPerformanceCareer.CanSolicitGig() || !target.LotCurrent.CanScheduleAnotherGigOnLot())
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("FullyBooked", new object[0]));
                    return(false);
                }
                if (occupationAsPerformanceCareer.HasGigScheduledAtVenue(target.LotCurrent) || (occupationAsPerformanceCareer.TryToGetSteadyGigOwnedBySim(target) != null))
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("AlreadyHaveGig", new object[0]));
                    return(false);
                }
                if (!occupationAsPerformanceCareer.DoesClientAcceptSolicitation(target))
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("SolicitedTooRecently", new object[0]));
                    return(false);
                }
                if (target.SimDescription.HasActiveRole)
                {
                    Proprietor assignedRole = target.SimDescription.AssignedRole as Proprietor;
                    if ((assignedRole != null) && !assignedRole.HasArrivedAtTargetLot())
                    {
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("ProprietorHasNotArrived", new object[0]));
                        return(false);
                    }
                }
                if (!occupationAsPerformanceCareer.CanSimBeSolicited(target))
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("LevelTooLowToSolicit", new object[0]));
                    return(false);
                }

                /*
                 * if (a.SimDescription.IsVisuallyPregnant)
                 * {
                 *  greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("CantDoGigsWhilePregnant", new object[0]));
                 *  return false;
                 * }
                 */
                if (target.SimDescription.HasActiveRole)
                {
                    Proprietor proprietor2 = target.SimDescription.AssignedRole as Proprietor;
                    if ((proprietor2 != null) && proprietor2.IsInSimFest())
                    {
                        greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("ProprietorBusy", new object[0]));
                        return(false);
                    }
                }
                if (!IUtil.IsPass(SocialInteractionA.Definition.CanSocializeWith("Solicit Gig", a, target, isAutonomous, ref greyedOutTooltipCallback)))
                {
                    greyedOutTooltipCallback = InteractionInstance.CreateTooltipCallback(Sim.LocalizeString("LTRTooLowToSolicit", new object[0]));
                    return(false);
                }
                return(true);
            }
Beispiel #10
0
            public PushWooHooOrTryForBaby(HotTubBase obj, Sim actor, Sim target, bool autonomous, bool pushGetIn, InteractionDefinition definition)
            {
                mObject     = obj;
                mActor      = actor;
                mTarget     = target;
                mDefinition = definition;
                mAutonomous = autonomous;

                if (pushGetIn)
                {
                    InteractionDefinition getInDefinition = HotTubGetIn.Singleton;
                    if (Woohooer.Settings.mNakedOutfitHotTub)
                    {
                        InteractionInstanceParameters parameters = new InteractionInstanceParameters(new InteractionObjectPair(HotTubGetIn.SkinnyDipSingleton, mObject), actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);

                        bool success = true;

                        GreyedOutTooltipCallback greyedOutTooltipCallback = null;
                        if (!IUtil.IsPass(HotTubGetIn.SkinnyDipSingleton.Test(ref parameters, ref greyedOutTooltipCallback)))
                        {
                            success = false;
                        }

                        if (success)
                        {
                            parameters = new InteractionInstanceParameters(new InteractionObjectPair(HotTubGetIn.SkinnyDipSingleton, mObject), target, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true);

                            if (!IUtil.IsPass(HotTubGetIn.SkinnyDipSingleton.Test(ref parameters, ref greyedOutTooltipCallback)))
                            {
                                success = false;
                            }
                        }

                        if (success)
                        {
                            getInDefinition = HotTubGetIn.SkinnyDipSingleton;
                        }
                    }

                    mActor.GreetSimOnMyLotIfPossible(mTarget);
                    HotTubGetIn entry = getInDefinition.CreateInstanceWithCallbacks(mObject, mActor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, OnActorCompleted, null) as HotTubGetIn;
                    entry.mIsMaster = true;
                    if (mActor.InteractionQueue.Add(entry))
                    {
                        InteractionInstance instance = getInDefinition.CreateInstanceWithCallbacks(mObject, mTarget, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true, null, OnCompleted, null);

                        if (mTarget.InteractionQueue.Add(instance))
                        {
                            instance.LinkedInteractionInstance = entry;
                        }
                        else
                        {
                            mTargetFail = true;
                        }
                    }
                }
                else
                {
                    OnCompleted(mActor, 1);
                }
            }
Beispiel #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);
        }