private new void StartJealousyBroadcaster() { try { if (mReactToSocialBroadcaster == null) { mReactToSocialBroadcaster = new ReactionBroadcaster(Actor, Conversation.ReactToSocialParams, SocialComponentEx.ReactToJealousEventHigh); CommonWoohoo.CheckForWitnessedCheating(Actor, Actor.SynchronizationTarget, true); } if (mIsMaster) { ElevatorWooHoo linked = LinkedInteractionInstance as ElevatorWooHoo; if (linked != null) { linked.StartJealousyBroadcaster(); } } } catch (Exception e) { Common.Exception(Actor, Target, e); } }
public override bool Run() { try { ProxyDefinition definition = InteractionDefinition as ProxyDefinition; if (mIsMaster) { Actor.SynchronizationRole = Sim.SyncRole.Initiator; Actor.SynchronizationTarget = WooHooee; } else { Actor.SynchronizationRole = Sim.SyncRole.Receiver; Actor.SynchronizationTarget = WooHooer; } bool success = false; try { if (mIsMaster && !Actor.HasExitReason()) { ElevatorWooHoo entry = definition.ProxyClone(WooHooer).CreateInstance(Target, WooHooee, new InteractionPriority(InteractionPriorityLevel.UserDirected), false, true) as ElevatorWooHoo; entry.LinkedInteractionInstance = this; entry.WooHooer = WooHooer; entry.WooHooee = WooHooee; if (!WooHooee.InteractionQueue.AddNext(entry)) { return(false); } } if (!SafeToSync()) { return(false); } Actor.LoopIdle(); Actor.SynchronizationLevel = Sim.SyncLevel.NotStarted; if (!Actor.WaitForSynchronizationLevelWithSim(Actor.SynchronizationTarget, Sim.SyncLevel.NotStarted, ElevatorDoors.kWooHooSyncTime)) { FinishLinkedInteraction(mIsMaster); return(false); } if (!Target.RouteToElevator(Actor)) { FinishLinkedInteraction(mIsMaster); return(false); } Target.InteriorObj.AddElevatorColumnToUseList(Actor); Actor.RouteTurnToFace(Target.Position); Actor.LoopIdle(); Actor.SynchronizationLevel = Sim.SyncLevel.Started; if (!Actor.WaitForSynchronizationLevelWithSim(Actor.SynchronizationTarget, Sim.SyncLevel.Started, ElevatorDoors.kWooHooSyncTime)) { FinishLinkedInteraction(mIsMaster); return(false); } if (!Target.SimLine.WaitForTurn(this, SimQueue.WaitBehavior.CutToHeadOfLine, ~(ExitReason.Replan | ExitReason.MidRoutePushRequested | ExitReason.ObjectStateChanged | ExitReason.PlayIdle | ExitReason.MaxSkillPointsReached), ElevatorDoors.kWooHooSyncTime)) { FinishLinkedInteraction(mIsMaster); return(false); } IsDoneRouting = true; CancellableByPlayer = false; Slot slotName = Slot.RoutingSlot_0; if (!mIsMaster) { slotName = Slot.RoutingSlot_1; } Actor.SimRoutingComponent.DisallowBeingPushed = true; Actor.SimRoutingComponent.ShouldIgnoreAllObstacles = true; if (!Actor.RouteToSlot(Target.InteriorObj, slotName)) { WanderOut(); FinishLinkedInteraction(mIsMaster); return(false); } Target.SimLine.RemoveFromQueue(Actor); Actor.LoopIdle(); Actor.SynchronizationLevel = Sim.SyncLevel.Routed; if (!Actor.WaitForSynchronizationLevelWithSim(Actor.SynchronizationTarget, Sim.SyncLevel.Routed, ElevatorDoors.kWooHooSyncTime)) { WanderOut(); FinishLinkedInteraction(mIsMaster); return(false); } IsInsideElevator = true; StandardEntry(false); Actor.LoopIdle(); Actor.SimDescription.Contactable = false; if (!StartSync(mIsMaster)) { WanderOut(); StandardExit(false); return(false); } success = true; } finally { if (!success) { definition.Definition.Restart(mIsMaster, WooHooer, WooHooee, Autonomous, Target); } } BeginCommodityUpdates(); try { if (mIsMaster) { AcquireStateMachine("Elevator"); SetActorAndEnter("x", Actor, "Enter"); SetActorAndEnter("y", WooHooee, "Enter"); SetActor("elevatorExterior", Target); success = true; if (Woohooer.Settings.UsingTraitScoring) { if (ScoringLookup.GetScore("ElevatorSuccess", Actor.SimDescription) < 0) { success = false; } else if (ScoringLookup.GetScore("ElevatorSuccess", WooHooee.SimDescription) < 0) { success = false; } } if (success) { isWooHooing = true; RockGemMetalBase.HandleNearbyWoohoo(Target, RockGemMetalBase.HowMuchWooHoo.MoreWoohoo); AddOneShotScriptEventHandler(0x6e, WooHooTurnOnCensorBars); AddOneShotScriptEventHandler(0x6f, WooHooTurnOffCensorBars); mJealousyAlarm = AlarmManager.Global.AddAlarm(4f, TimeUnit.Minutes, StartJealousyBroadcaster, "StartJealousyBroadcaster", AlarmType.DeleteOnReset, Target); AnimateJoinSims("WooHooAccept"); CommonWoohoo.RunPostWoohoo(Actor, WooHooee, Target, definition.GetStyle(this), definition.GetLocation(Target), true); CommonWoohoo.TestNakedOutfit(Woohooer.Settings.mNakedOutfitElevator, WooHooer, WooHooee); if (CommonPregnancy.IsSuccess(WooHooer, WooHooee, Autonomous, definition.GetStyle(this))) { CommonPregnancy.Impregnate(WooHooer, WooHooee, Autonomous, definition.GetStyle(this)); } RockGemMetalBase.HandleNearbyWoohoo(Actor, RockGemMetalBase.HowMuchWooHoo.LessWoohoo); isWooHooing = false; } else { ElevatorDoors.WooHoo linkedInteractionInstance = LinkedInteractionInstance as ElevatorDoors.WooHoo; if (linkedInteractionInstance != null) { linkedInteractionInstance.IsFail = true; } AddOneShotScriptEventHandler(0x65, new SacsEventHandler(WooHooRejectCallback)); AnimateJoinSims("WooHooReject"); SpeedTrap.Sleep((uint)SimClock.ConvertToTicks(RandomUtil.RandomFloatGaussianDistribution(ElevatorDoors.kWooHooFailWaitTime[0x0], ElevatorDoors.kWooHooFailWaitTime[0x1]), TimeUnit.Minutes)); if (WooHooer.LotHome != Target.LotCurrent) { WooHooer.BuffManager.AddElement(BuffNames.WalkOfShame, Origin.FromRejectedWooHooOffHome); } Relationship.Get(WooHooee, WooHooer, true).LTR.UpdateLiking(ElevatorDoors.kWooHooRejectRelHit); } AnimateNoYield("y", "Exit"); AnimateSim("Exit"); } Actor.SynchronizationLevel = Sim.SyncLevel.Committed; Actor.WaitForSynchronizationLevelWithSim(Actor.SynchronizationTarget, Sim.SyncLevel.Committed, ElevatorDoors.kWooHooSyncTime); if (IsFail && !mIsMaster) { Actor.SetPosition(Target.InteriorObj.GetPositionOfSlot(Slot.RoutingSlot_0)); SpeedTrap.Sleep((uint)SimClock.ConvertToTicks(RandomUtil.RandomFloatGaussianDistribution(ElevatorDoors.kWooHooFailKickerOutWaitTime[0x0], ElevatorDoors.kWooHooFailKickerOutWaitTime[0x1]), TimeUnit.Minutes)); } Target.RouteToElevator(Actor); Actor.SynchronizationLevel = Sim.SyncLevel.Completed; Actor.WaitForSynchronizationLevelWithSim(Actor.SynchronizationTarget, Sim.SyncLevel.Completed, ElevatorDoors.kWooHooSyncTime); FinishLinkedInteraction(mIsMaster); WaitForSyncComplete(); } finally { EndCommodityUpdates(true); } StandardExit(false); return(true); } catch (ResetException) { throw; } catch (Exception e) { Common.Exception(Actor, Target, e); return(false); } }