public override List <Sim> GetYouShouldTargets(Sim thisActor, Sim pushedSocialActor) { InteractionPriority priority = new InteractionPriority(InteractionPriorityLevel.UserDirected); SocialInteractionA.Definition pushedSocialDefinition = new SocialInteractionA.Definition(mPushedSocialActionKey, new string[0x0], null, false); pushedSocialDefinition.ChecksToSkip = mChecksToSkip; List <Sim> list = new List <Sim>(); foreach (Sim sim in pushedSocialActor.LotCurrent.GetAllActors()) { if (sim == thisActor) { continue; } if (sim == pushedSocialActor) { continue; } GreyedOutTooltipCallback tooltipCallback = null; if (!PushedSocialTest(pushedSocialActor, sim, pushedSocialDefinition, priority, tooltipCallback)) { continue; } list.Add(sim); } return(list); }
public bool SharedNearDistanceBehavior(float routingDistance, float loopTime) { EWWait.Definition waitDefinition = new EWWait.Definition(); EWWait waitInstance = waitDefinition.CreateInstance(mMedicineCat, mMedicineCat, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, CancellableByPlayer) as EWWait; waitInstance.SetInteractionName("Treat " + Actor.Name); mMedicineCat.InteractionQueue.AddNext(waitInstance); if (!Actor.RouteToObjectRadius(Target, routingDistance)) { waitInstance.waitComplete = true; return(false); } EnterStateMachine("eatofffloor", "Enter", "x"); SetParameter("isFish", false); BeginCommodityUpdates(); AnimateSim("EatOffFloorLoop"); bool flag = DoTimedLoop(loopTime, ExitReason.Default); EndCommodityUpdates(flag); mDestroyPrey = true; AnimateSim("Exit"); waitInstance.waitComplete = true; if (mSuccess) { Actor.ShowTNSIfSelectable("EWLocalize - Successful treatment", NotificationStyle.kGameMessagePositive); Actor.BuffManager.RemoveElement(mBuffID); if (Actor.GetDistanceToObjectSquared(mMedicineCat) <= kMaxDistanceForSimToReact * kMaxDistanceForSimToReact) { // Say thank you SocialInteractionA.Definition definition2 = new SocialInteractionA.Definition("Nuzzle Auto Accept", new string[0], null, initialGreet: false); InteractionInstance nuzzleInteraction = definition2.CreateInstance(mMedicineCat, Actor, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true); Actor.InteractionQueue.TryPushAsContinuation(this, nuzzleInteraction); } DoLtrAdjustment(goodReaction: true); } else { Actor.ShowTNSIfSelectable("EWLocalize - Failed treatment", NotificationStyle.kGameMessagePositive); DoLtrAdjustment(goodReaction: false); } treatmentComplete = true; return(flag); }
public override void Perform(Sim sim, DiseaseVector vector) { if (SimTypes.IsDead(sim.SimDescription)) { return; } List <Sim> sims = new List <Sim>(); foreach (Sim other in sim.LotCurrent.GetSims()) { if (other == sim) { continue; } if (mRoomOnly) { if (other.RoomId != sim.RoomId) { continue; } } sims.Add(other); } if (sims.Count == 0) { return; } Sim choice = RandomUtil.GetRandomObjectFromList(sims); try { if (sim.SimDescription.IsZombie) { InteractionInstance entry = new Sim.ZombifiedSocials.Definition(Sim.ZombifiedSocials.Definition.eInteractionType.Braaaiiins).CreateInstance(choice, sim, new InteractionPriority(InteractionPriorityLevel.High), true, true); sim.InteractionQueue.AddNext(entry); } else if (mSocial != "Braaaiiins") { InteractionInstance entry = new SocialInteractionA.Definition(mSocial, null, null, false).CreateInstance(choice, sim, new InteractionPriority(InteractionPriorityLevel.High), true, true); sim.InteractionQueue.AddNext(entry); } } catch (Exception e) { Common.DebugException(sim, choice, e); } }
public override List <Sim> GetYouShouldTargets(Sim thisActor, Sim pushedSocialActor) { InteractionPriority priority = new InteractionPriority(InteractionPriorityLevel.UserDirected); SocialInteractionA.Definition pushedSocialDefinition = new SocialInteractionA.Definition(mPushedSocialActionKey, new string[0x0], null, false); pushedSocialDefinition.ChecksToSkip = mChecksToSkip; List <Sim> list = new List <Sim>(); foreach (Sim sim in pushedSocialActor.LotCurrent.GetAllActors()) { if (sim == thisActor) { continue; } if (sim == pushedSocialActor) { continue; } if (sim.SimDescription.HasActiveRole) { continue; } GreyedOutTooltipCallback tooltipCallback = null; if (!PushedSocialTest(pushedSocialActor, sim, pushedSocialDefinition, priority, tooltipCallback)) { continue; } ActionData data = ActionData.Get(mPushedSocialActionKey); if ((data != null) && ((data.IntendedCommodityString == CommodityTypes.Amorous) || (data.IntendedCommodityString == AmorousCommodity.sAmorous2))) { // Custom Function string reason; if (!CommonSocials.CanGetRomantic(sim.SimDescription, pushedSocialActor.SimDescription, false, true, true, ref tooltipCallback, out reason)) { continue; } } list.Add(sim); } return(list); }
private bool FinishAdoption(Sim pet) { if (pet != null) { pet.InteractionQueue.CancelAllInteractions(); pet.SetObjectToReset(); SpeedTrap.Sleep(); pet.UpdateBlockTime(); Actor.ShowTNSAndPlayStingIfSelectable("sting_pet_adopt", TNSNames.AdoptLitterTNS, Target, pet, null, null, pet.IsFemale, false, new object[] { pet }); if (pet == Sim.ActiveActor) { LotManager.SelectNextSim(); } if (pet.Household != null) { pet.Household.Remove(pet.SimDescription); } Actor.Household.Add(pet.SimDescription); Relationships.CheckAddHumanParentFlagOnAdoption(Actor.SimDescription, pet.SimDescription); if (Actor.Partner != null) { Relationships.CheckAddHumanParentFlagOnAdoption(Actor.Partner, pet.SimDescription); } InteractionInstance entry = new SocialInteractionA.Definition("Talk To Pet", new string[0x0], null, false).CreateInstance(pet, Actor, GetPriority(), false, false); List <Sim> list = new List <Sim>(); list.Add(pet); GoHome home = GoHome.Singleton.CreateInstance(Actor.LotHome, Actor, GetPriority(), false, false) as GoHome; home.SimFollowers = list; Actor.InteractionQueue.AddNext(home); return(Actor.InteractionQueue.AddNext(entry)); } return(false); }
public override bool Run() { Hospital hospital = RabbitHole.GetClosestRabbitHoleOfType(RabbitHoleType.Hospital, Target.Position) as Hospital; if (hospital != null) { Actor.RouteTurnToFace(Target.Position); EWGoToVet interactionInstance = EWGoToVet.Singleton.CreateInstance(hospital, Actor, new InteractionPriority(InteractionPriorityLevel.High), isAutonomous: false, cancellableByPlayer: true) as EWGoToVet; interactionInstance.mPet = Target; if ((Target.IsCat || Target.IsLittleDog)) { ChildUtils.SetPosturePrecondition(interactionInstance, CommodityKind.CarryingPet, new CommodityKind[0]); PickUpPet pickUp = PickUpPet.Singleton.CreateInstance(Target, Actor, new InteractionPriority(InteractionPriorityLevel.High), false, true) as PickUpPet; Actor.InteractionQueue.TryPushAsContinuation(this, pickUp); Actor.InteractionQueue.TryPushAsContinuation(pickUp, interactionInstance); } else { SocialInteractionA greetPet = new SocialInteractionA.Definition("Let Sniff Hand", new string[0], null, false).CreateInstance(Target, Actor, new InteractionPriority(InteractionPriorityLevel.High), false, true) as SocialInteractionA; Actor.InteractionQueue.TryPushAsContinuation(this, greetPet); Actor.InteractionQueue.TryPushAsContinuation(greetPet, interactionInstance); } return(true); } else { return(false); } }
public override bool Run() { Sim targetsim = GetSelectedObject() as Sim; if (targetsim != null) { foreach (InteractionInstance interactionInstance in Target.InteractionQueue.InteractionList) // Cant Cancel Fix { interactionInstance.MustRun = false; interactionInstance.Hidden = false; } foreach (InteractionInstance interactionInstance in targetsim.InteractionQueue.InteractionList) // Cant Cancel Fix { interactionInstance.MustRun = false; interactionInstance.Hidden = false; } SpeedTrap.Sleep(0u); Target.InteractionQueue.CancelAllInteractions(); targetsim.InteractionQueue.CancelAllInteractions(); SpeedTrap.Sleep(0u); targetsim.EnableInteractions(); SpeedTrap.Sleep(0u); InteractionPriority priority = new InteractionPriority(InteractionPriorityLevel.ESRB); if (AcceptCancelDialog.Show("Do you want Run Divorce? (Yes Run or No Next)", true)) { InteractionInstance helloChatESRBi; helloChatESRBi = new SocialInteractionA.Definition("Divorce", null, null, false).CreateInstance(Target, targetsim, priority, false, false); //helloChatESRBi = new SituationSocial.Definition("Fight!", null, null, false).CreateInstance(Target, targetsim, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); helloChatESRBi.MustRun = true; helloChatESRBi.Hidden = false; targetsim.InteractionQueue.AddNext(helloChatESRBi); } // targetsim.SocialComponent.AddRelationshipUpdate(Target, CommodityTypes.Insulting, -100f, -100f); InteractionInstance helloChatESRBi2; helloChatESRBi2 = new SocialInteractionA.Definition("Argue", null, null, false).CreateInstance(Target, targetsim, priority, false, false); //helloChatESRBi = new SituationSocial.Definition("Fight!", null, null, false).CreateInstance(Target, targetsim, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); helloChatESRBi2.MustRun = true; //helloChatESRBi2.Hidden = false; targetsim.InteractionQueue.Add(helloChatESRBi2); targetsim.InteractionQueue.Add(helloChatESRBi2); targetsim.InteractionQueue.Add(helloChatESRBi2); targetsim.InteractionQueue.Add(helloChatESRBi2); targetsim.InteractionQueue.Add(helloChatESRBi2); targetsim.InteractionQueue.Add(helloChatESRBi2); // InteractionInstance helloChatESRBi3; helloChatESRBi3 = new SocialInteractionA.Definition("Declare Nemesis", null, null, false).CreateInstance(Target, targetsim, priority, false, false); //helloChatESRBi = new SituationSocial.Definition("Fight!", null, null, false).CreateInstance(Target, targetsim, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); helloChatESRBi3.MustRun = true; //helloChatESRBi3.Hidden = false; targetsim.InteractionQueue.Add(helloChatESRBi3); Sim.ForceSocial(targetsim, Target, "Declare Nemesis", (InteractionPriorityLevel)12, false); // InteractionInstance helloChatESRBi4; helloChatESRBi4 = new SocialInteractionA.Definition("Fight!", null, null, false).CreateInstance(Target, targetsim, priority, false, false); //helloChatESRBi = new SituationSocial.Definition("Fight!", null, null, false).CreateInstance(Target, targetsim, new InteractionPriority(InteractionPriorityLevel.ESRB), false, false); helloChatESRBi4.MustRun = true; //helloChatESRBi4.Hidden = false; targetsim.InteractionQueue.Add(helloChatESRBi4); Sim.ForceSocial(targetsim, Target, "Fight!", (InteractionPriorityLevel)12, false); } return(true); }
public static List <InteractionObjectPair> GetAllInteractionsForActor(Sim ths, IActor actor) { List <InteractionObjectPair> allInteractionsForActor; InteractionInstance currentInteraction = ths.CurrentInteraction; Sim sim = actor as Sim; if (ths.DisablePieMenuOnSim) { sMsg += Common.NewLine + "Disabled"; return(new List <InteractionObjectPair>()); } if (ths.BuffManager.HasElement(BuffNames.BabyIsComing)) { sMsg += Common.NewLine + "Pregnant"; allInteractionsForActor = new List <InteractionObjectPair>(); allInteractionsForActor.Add(new InteractionObjectPair(Pregnancy.TakeToHospital.Singleton, ths)); return(allInteractionsForActor); } allInteractionsForActor = new List <InteractionObjectPair>(); //base.GetAllInteractionsForActor(actor); if (actor != ths) { List <InteractionObjectPair> list2; DaycareSituation daycareSituationForSim = DaycareSituation.GetDaycareSituationForSim(ths); if ((daycareSituationForSim != null) && daycareSituationForSim.OverrideActorInteractions) { sMsg += Common.NewLine + "Daycare"; return(daycareSituationForSim.GetAllInteractionsForActor(sim, ths)); } if (FirefighterEmergencySituation.FindFirefighterEmergencySituationInvolvingSim(ths) != null) { sMsg += Common.NewLine + "Firefighter"; allInteractionsForActor.Clear(); } else { if (actor.Posture.GetType() != ths.Posture.GetType()) { sMsg += Common.NewLine + "Posture Socials " + actor.Posture.GetType().ToString() + " " + ths.Posture.GetType().ToString(); actor.Posture.AddSocialInteractions(ths, allInteractionsForActor); } if (actor.Posture.AllowsNormalSocials() && ths.Posture.AllowsNormalSocials()) { int count = 0; foreach (InteractionObjectPair pair in GetAllInteractionsForSim(ths.SocialComponent, sim, false)) { pair.AddInteractions(actor, allInteractionsForActor); count++; } sMsg += Common.NewLine + "Socials " + count; } if (currentInteraction != null) { InteractionTuning tuning = currentInteraction.InteractionObjectPair.Tuning; if (((tuning != null) && tuning.mTradeoff.JoinableInteraction) && (!(currentInteraction.InteractionDefinition is IDoNotAddJoinInteraction) && !Sim.HaveSameCurrentInteraction(sim, ths))) { Sim.Join.Definition interaction = new Sim.Join.Definition(); new InteractionObjectPair(interaction, ths).AddInteractions(actor, allInteractionsForActor); } } if ((sim.CurrentInteraction != null) && (sim.CurrentInteraction != currentInteraction)) { InteractionObjectPair interactionObjectPair = sim.CurrentInteraction.InteractionObjectPair; if (((interactionObjectPair.Tuning != null) && interactionObjectPair.Tuning.mTradeoff.JoinableInteraction) && !Sim.HaveSameCurrentInteraction(sim, ths)) { Sim.AskToJoin.Definition definition2 = new Sim.AskToJoin.Definition(); new InteractionObjectPair(definition2, ths).AddInteractions(actor, allInteractionsForActor); } } } if (ths.mSituationSpecificInteractions.TryGetValue(sim, out list2) && (list2.Count > 0x0)) { foreach (InteractionObjectPair pair5 in list2) { bool flag = false; foreach (InteractionObjectPair pair6 in allInteractionsForActor) { SocialInteractionA.Definition interactionDefinition = pair6.InteractionDefinition as SocialInteractionA.Definition; SocialInteractionA.Definition definition4 = pair5.InteractionDefinition as SocialInteractionA.Definition; if (((definition4 != null) && (interactionDefinition != null)) && (interactionDefinition.ActionKey == definition4.ActionKey)) { string[] path = interactionDefinition.GetPath(actor.IsFemale); string[] strArray2 = definition4.GetPath(actor.IsFemale); if (strArray2.Length == path.Length) { bool flag2 = true; for (int i = 0x0; i < strArray2.Length; i++) { if (strArray2[i] != path[i]) { flag2 = false; break; } } if (flag2) { flag = true; break; } } } } if (!flag) { allInteractionsForActor.Add(pair5); } } } } else { foreach (InteractionObjectPair pair7 in ths.SoloInteractions) { pair7.AddInteractions(actor, allInteractionsForActor); } } foreach (Sim.IAddsSimInteractions interactions in Inventories.QuickDuoFind <Sim.IAddsSimInteractions, GameObject>(actor.Inventory)) { interactions.GetAllInteractions(actor as Sim, ths, allInteractionsForActor); } allInteractionsForActor.Sort(); return(allInteractionsForActor); }
public override bool Run() { if (!Actor.IsInActiveHousehold && base.Autonomous) { //Vector3 maotia = Vector3.Invalid; Actor.LoopIdle(); try { Simulator.Sleep(500); } catch { } List <Sim> sims = new List <Sim>(); foreach (Sim targetsim in Actor.LotCurrent.GetAllActors()) //foreach (Sim targetsim in LotManager.Actors) { if (targetsim != Actor) { sims.Add(targetsim); } } if (sims.Count == 0) { if (Household.ActiveHousehold != null) { foreach (Sim targetsim in Household.ActiveHousehold.Sims) { if (targetsim != Actor) { sims.Add(targetsim); } } } if (sims.Count == 0) { return(false); } } bool flag = false; Sim randomObjectFromList = RandomUtil.GetRandomObjectFromList(sims); InteractionInstance interactionInstance = Terrain.GoHere.GetSingleton(Actor, randomObjectFromList.Position).CreateInstance(Terrain.Singleton, Actor, new InteractionPriority((InteractionPriorityLevel)10), false, false); if (interactionInstance != null) { (interactionInstance as Terrain.GoHere).SetDestination(randomObjectFromList.Position, false); flag = interactionInstance.RunInteraction(); } InteractionInstance helloChatESRBi3; helloChatESRBi3 = new SocialInteractionA.Definition("Chat", new string[0], null, false).CreateInstance(randomObjectFromList, Actor, base.GetPriority(), base.Autonomous, base.CancellableByPlayer); if (randomObjectFromList != null && randomObjectFromList.HasBeenDestroyed) { randomObjectFromList = RandomUtil.GetRandomObjectFromList(sims); helloChatESRBi3 = new SocialInteractionA.Definition("Chat", new string[0], null, false).CreateInstance(randomObjectFromList, Actor, base.GetPriority(), base.Autonomous, base.CancellableByPlayer); } if (randomObjectFromList != null && randomObjectFromList.HasBeenDestroyed) { return(false); } Actor.InteractionQueue.Add(helloChatESRBi3); return(flag); } if (Actor.Posture.Satisfies(CommodityKind.Relaxing, null) || (!Actor.Motives.HasMotive(CommodityKind.BeSuspicious) && RandomUtil.RandomChance(Sim.ChanceOfReadingBookRatherThanNewsaperWhenReadingOutdoors))) { return(__DoReadBook()); } return(__DoReadNewspaper()); }
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); }