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; } }
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); }
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); } }
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); }
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); }
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); }
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); }
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); }
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); }
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++; } } } } } }
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); }