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