public override bool Test(Sim a, Sim target, bool isAutonomous, ref GreyedOutTooltipCallback greyedOutTooltipCallback) { try { InteractionInstance currentInteraction = a.CurrentInteraction; if (((currentInteraction != null) && (currentInteraction.Target == target)) && ((currentInteraction is CuddleSeated) || (currentInteraction is NestedCuddleInteraction))) { return(false); } IHasSeatingGroup container = a.Posture.Container as IHasSeatingGroup; if (container != null) { Seat seat = container.SeatingGroup[a]; if ((seat != null) && (seat is IHotTubSeat)) { if (target.CurrentOutfitCategory == OutfitCategories.SkinnyDippingTowel) { greyedOutTooltipCallback = new GrayedOutTooltipHelper(target.IsFemale, "ClothesStolenTooltip", null).GetTooltip; return(false); } } } string reason; if (!CommonSocials.CanGetRomantic(a, target, isAutonomous, false, true, ref greyedOutTooltipCallback, out reason)) { return(false); } if (!StartSeatedCuddleA.Definition.CanCuddle(a, target, ref greyedOutTooltipCallback, true)) { return(false); } return(true); } catch (Exception exception) { Common.Exception(a, target, exception); return(false); } }
public override bool Run() { try { if (!StartSync()) { return(false); } StandardEntry(false); BeginCommodityUpdates(); if (IsMaster) { ReturnInstance.EnsureMaster(); StartSocial("Make Out"); InitiateSocialUI(Actor, Target); (LinkedInteractionInstance as NestedCuddleInteraction).Rejected = Rejected; //Custom mReactToSocialBroadcaster = new ReactionBroadcaster(Actor, Conversation.ReactToSocialParams, SocialComponentEx.ReactToJealousEventHigh); //SocialComponent.SendCheatingEvents(Actor, Target, !Rejected); IHasSeatingGroup container = Actor.Posture.Container as IHasSeatingGroup; Seat seat = container.SeatingGroup[Actor]; ReturnInstance.mCurrentStateMachine.SetParameter("IsHottub", seat is IHotTubSeat); if (Rejected) { ReturnInstance.mCurrentStateMachine.RequestState(null, "MakeOutReject"); ReturnInstance.mCurrentStateMachine.RequestState(null, "ExitSitting"); FinishSocial("Make Out", true); FinishSocialContext(); } else { ReturnInstance.mCurrentStateMachine.RequestState(null, "MakeOut"); StartStages(); DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)); FinishSocial("Make Out", true); } } else { DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)); } FinishLinkedInteraction(IsMaster); EndCommodityUpdates(!Rejected); StandardExit(false, false); EventTracker.SendEvent(new SocialEvent(EventTypeId.kSocialInteraction, Actor, Target, "Make Out", !IsMaster, !Rejected, false, CommodityTypes.Undefined)); EventTracker.SendEvent(EventTypeId.kMadeOut, Actor, Target); if (Rejected) { InvokeDoResumeOnCleanup = false; } else { Actor.SimDescription.SetFirstKiss(Target.SimDescription); } WaitForSyncComplete(); return(!Rejected); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }
public override bool Run() { try { Actor.GreetSimOnMyLotIfPossible(Target); Seat.EnsureLivingChairPosture(Actor); IHasSeatingGroup container = Actor.Posture.Container as IHasSeatingGroup; Seat otherSeat = container.SeatingGroup[Actor]; Seat seat2 = container.SeatingGroup[Target]; if (!SafeToSync()) { return(false); } Actor.LookAtManager.SetInteractionLookAt(Target, kTargetLookAtPriority, LookAtJointFilter.TorsoBones); if ((seat2 != null) && !seat2.IsAdjacentTo(otherSeat)) { Seat emptyAdjacentSeat = seat2.GetEmptyAdjacentSeat(Actor); if (emptyAdjacentSeat != null) { InteractionInstance instance = otherSeat.CreateChangeSeatInteraction(emptyAdjacentSeat, GetPriority(), Autonomous, CancellableByPlayer); SaunaClassic.StartSaunaSeatedCuddleA ea = Singleton.CreateInstance(Target, Actor, GetPriority(), Autonomous, CancellableByPlayer) as SaunaClassic.StartSaunaSeatedCuddleA; Actor.InteractionQueue.PushAsContinuation(instance, true); Actor.InteractionQueue.PushAsContinuation(ea, true); return(true); } return(false); } SaunaClassic.StartSaunaSeatedCuddleB entry = SaunaClassic.StartSaunaSeatedCuddleB.Singleton.CreateInstance(Actor, Target, GetPriority(), false, CancellableByPlayer) as SaunaClassic.StartSaunaSeatedCuddleB; entry.SeatX = otherSeat; entry.SeatY = seat2; LinkedInteractionInstance = entry; Target.InteractionQueue.Add(entry); // Custom mReactToSocialBroadcaster = new ReactionBroadcaster(Actor, Conversation.ReactToSocialParams, SocialComponentEx.ReactToJealousEventMedium); //SocialComponent.SendCheatingEvents(Actor, Target, !Rejected); Actor.SynchronizationRole = Sim.SyncRole.Initiator; Actor.SynchronizationLevel = Sim.SyncLevel.Started; Actor.SynchronizationTarget = Target; Target.SynchronizationLevel = Sim.SyncLevel.NotStarted; if (!Actor.WaitForSynchronizationLevelWithSim(Target, Sim.SyncLevel.Started, (float)kHowLongToWaitForOtherToArrive)) { return(false); } StartSocial("Cuddle"); entry.Reject = Rejected; if (!Actor.WaitForSynchronizationLevelWithSim(Target, Sim.SyncLevel.Routed, (float)kHowLongToWaitForOtherToArrive)) { return(false); } if (Rejected) { if (Seat.SimsAreAdjacent(Actor, Target)) { Seat.EnsureLivingChairPosture(Target); bool paramValue = seat2 == otherSeat.Right; EnterStateMachine("SeatingCuddle", "EnterSitting", "x", "y"); mCurrentStateMachine.EnterState("y", "EnterSitting"); mCurrentStateMachine.EnterState("SeatX", "EnterSitting"); mCurrentStateMachine.EnterState("SeatY", "EnterSitting"); SetActor("SeatX", otherSeat.Host); SetParameter("SuffixX", otherSeat.IKSuffix); SetActor("SeatY", seat2.Host); SetParameter("SuffixY", seat2.IKSuffix); SetActor("surface", otherSeat.Host); SetParameter("IsMirrored", paramValue); bool flag2 = otherSeat is IHotTubSeat; SetParameter("IsHottub", flag2); mCurrentStateMachine.RequestState(false, "x", "CuddleReject"); mCurrentStateMachine.RequestState(false, "SeatX", "CuddleReject"); mCurrentStateMachine.RequestState(false, "SeatY", "CuddleReject"); mCurrentStateMachine.RequestState(true, "y", "CuddleReject"); mCurrentStateMachine.RequestState(null, "ExitSitting"); Target.RouteAway(kMinDistanceToMoveAwayWhenRejected, kMaxDistanceToMoveAwayWhenRejected, true, new InteractionPriority(InteractionPriorityLevel.Zero), false, true, true, RouteDistancePreference.NoPreference); } else if (Actor.TraitManager.HasElement(TraitNames.HotHeaded)) { Actor.PlayReaction(ReactionTypes.JealousIntense, ReactionSpeed.Immediate); } else if (Actor.TraitManager.HasElement(TraitNames.OverEmotional)) { Actor.PlayReaction(ReactionTypes.JealousMild, ReactionSpeed.Immediate); } else if (Actor.TraitManager.HasAnyElement(new TraitNames[] { TraitNames.Flirty, TraitNames.GreatKisser })) { Actor.PlayReaction(ReactionTypes.Shrug, ReactionSpeed.Immediate); } else { Actor.PlayReaction(ReactionTypes.Awkward, ReactionSpeed.Immediate); } return(false); } Actor.SynchronizationLevel = Sim.SyncLevel.Completed; if (!Actor.WaitForSynchronizationLevelWithSim(Target, Sim.SyncLevel.Completed, (float)kHowLongToWaitForOtherToArrive)) { return(false); } if (!Seat.SimsAreAdjacent(Actor, Target)) { Actor.Posture.CurrentStateMachine.RequestState("x", "routeFail"); return(false); } if (seat2 == null) { seat2 = container.SeatingGroup[Target]; } InteractionPriority priority = new InteractionPriority(InteractionPriorityLevel.Zero); CuddleSeated seated = CuddleSeated.Singleton.CreateInstance(Target, Actor, priority, false, CancellableByPlayer) as CuddleSeated; seated.AdoptSocialEffect(this); seated.SeatX = otherSeat; seated.SeatY = seat2; CuddleSeated seated2 = CuddleSeated.Singleton.CreateInstance(Actor, Target, priority, false, CancellableByPlayer) as CuddleSeated; seated2.SeatX = otherSeat; seated2.SeatY = seat2; seated.LinkedInteractionInstance = seated2; EventTracker.SendEvent(new SocialEvent(EventTypeId.kSocialInteraction, Actor, Target, "Cuddle", false, !Rejected, false, CommodityTypes.Undefined)); EventTracker.SendEvent(new SocialEvent(EventTypeId.kSocialInteraction, Target, Actor, "Cuddle", true, !Rejected, false, CommodityTypes.Undefined)); EventTracker.SendEvent(EventTypeId.kCuddled, Actor, Target); EventTracker.SendEvent(EventTypeId.kCuddled, Target, Actor); Actor.InteractionQueue.Add(seated); Target.InteractionQueue.Add(seated2); return(!Rejected); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }
public override bool Run() { try { ISaunaWooHooDefinition definition = InteractionDefinition as ISaunaWooHooDefinition; if (!StartSync()) { DoResume(); return(false); } StandardEntry(false); mSauna = Actor.Posture.Container as SaunaClassic; if (Actor == mSauna.GetLeftSim()) { IHasSeatingGroup container = Actor.Posture.Container as IHasSeatingGroup; Seat seat = container.SeatingGroup[Actor]; Seat seat2 = container.SeatingGroup[Target]; if ((seat == null) || (seat2 == null)) { Actor.AddExitReason(ExitReason.FailedToStart); return(false); } // Custom string socialName = CommonWoohoo.GetSocialName(definition.GetStyle(this), Actor); ReturnInstance.EnsureMaster(); mCurrentStateMachine = ReturnInstance.mCurrentStateMachine; StartSocial(socialName); InitiateSocialUI(Actor, Target); SaunaClassic.CuddleSeatedWooHooSauna linkedInteractionInstance = LinkedInteractionInstance as SaunaClassic.CuddleSeatedWooHooSauna; linkedInteractionInstance.Rejected = Rejected; if (Rejected) { mCurrentStateMachine.RequestState(null, "Woo Hoo Reject"); mCurrentStateMachine.RequestState(null, "ExitSitting"); FinishSocial(socialName, true); FinishSocialContext(); Actor.BuffManager.AddElement(BuffNames.WalkOfShame, Origin.FromRejectedWooHooOffHome); } else { mCurrentStateMachine.RequestState(null, "ExitSitting"); // Custom CommonWoohoo.TestNakedOutfit(Woohooer.Settings.mNakedOutfitSaunaWoohoo, Actor, Target); if (Stand.Singleton.CreateInstance(mSauna, Actor, Actor.InheritedPriority(), false, false).RunInteraction()) { // Custom if (CommonWoohoo.NeedPrivacy(false, Actor, Target)) { mSituation = new WooHoo.WooHooPrivacySituation(this); mPrivacyFailed = !mSituation.Start(); } else { mPrivacyFailed = false; } linkedInteractionInstance.mPrivacyFailed = mPrivacyFailed; if (!mPrivacyFailed && Actor.RouteToSlot(mSauna, Slot.RoutingSlot_14)) { EnterStateMachine("Sauna_store", "SimEnter", "x"); SetActor("saunaX", seat.Host); SetActor("saunaY", seat2.Host); AddOneShotScriptEventHandler(0x384, OnAnimationEvent); AnimateSim("PourWater"); AnimateSim("SimExit"); if (SaunaSit.WoohooSingleton.CreateInstance(mSauna, Actor, Actor.InheritedPriority(), false, false).RunInteraction()) { RockGemMetalBase.HandleNearbyWoohoo(Actor, RockGemMetalBase.HowMuchWooHoo.MoreWoohoo); EnterStateMachine("sauna_store", "SimEnter", "x", "y"); SetActor("saunaX", mSauna); mCurrentStateMachine.AddOneShotScriptEventHandler(0x6e, OnAnimationEvent); mCurrentStateMachine.AddOneShotScriptEventHandler(0x6f, OnAnimationEvent); mCurrentStateMachine.AddOneShotScriptEventHandler(0x78, OnAnimationEvent); mCurrentStateMachine.AddOneShotScriptEventHandler(0x79, OnAnimationEvent); mCurrentStateMachine.AddOneShotScriptEventHandler(0x70, OnBabyCheckEventEx); SetActor("saunaX", seat.Host); SetActor("saunaY", seat2.Host); if (Actor == mSauna.GetLeftSim()) { SetParameter("IsMirrored", true); SetParameter("SuffixX", mSauna.mSeatingGroup[Actor].IKSuffix); SetParameter("SuffixY", mSauna.mSeatingGroup[Target].IKSuffix); } else { SetParameter("IsMirrored", false); SetParameter("SuffixY", mSauna.mSeatingGroup[Actor].IKSuffix); SetParameter("SuffixX", mSauna.mSeatingGroup[Target].IKSuffix); } AnimateJoinSims("Woohoo"); AnimateJoinSims("SimExit"); RockGemMetalBase.HandleNearbyWoohoo(Actor, RockGemMetalBase.HowMuchWooHoo.LessWoohoo); // Custom CommonWoohoo.RunPostWoohoo(Actor, Target, mSauna, definition.GetStyle(this), definition.GetLocation(mSauna), true); Target.Motives.ChangeValue(CommodityKind.Fun, SaunaClassic.kWooHooFunBump); Target.Motives.ChangeValue(CommodityKind.Social, SaunaClassic.kWooHooSocialBump); Target.Motives.ChangeValue(CommodityKind.Hygiene, SaunaClassic.kWooHooHygieneBump); Actor.Motives.ChangeValue(CommodityKind.Fun, SaunaClassic.kWooHooFunBump); Actor.Motives.ChangeValue(CommodityKind.Social, SaunaClassic.kWooHooSocialBump); Actor.Motives.ChangeValue(CommodityKind.Hygiene, SaunaClassic.kWooHooHygieneBump); } } } FinishSocial(socialName, true); Actor.AddExitReason(ExitReason.StageComplete); Target.AddExitReason(ExitReason.StageComplete); } } else { DoLoop(~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached)); } FinishLinkedInteraction(IsMaster); bool succeeded = !Rejected && !mPrivacyFailed; EndCommodityUpdates(succeeded); StandardExit(false, false); InvokeDoResumeOnCleanup = false; if (!mPrivacyFailed) { Actor.SimDescription.SetFirstWooHoo(); } if ((Rejected && !IsMaster) && Stand.Singleton.CreateInstance(mSauna, Actor, Actor.InheritedPriority(), false, false).RunInteraction()) { Actor.PlayReaction(ReactionTypes.Embarrassed, ReactionSpeed.AfterInteraction); } WaitForSyncComplete(); return(!Rejected); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }