public override bool Run() { if (this.CheckForCancelAndCleanup()) { return(false); } Microwave microwave = GlobalFunctions.GetClosestObject <Microwave>(Actor, false, true, null, null); if (microwave == null) { return(false); } if (Target.Parent == Actor) { if (microwave.RouteToMicrowave(this)) { string actorNameForMicrowave = (Target as IMicrowavable).ActorNameForMicrowave; microwave.AddToUseList(Actor); try { microwave.SimStateMachineClient.SetActor(actorNameForMicrowave, Target); microwave.SimStateMachineClient.SetActor("x", Actor); microwave.SimStateMachineClient.AddOneShotScriptEventHandler(1001u, new SacsEventHandler(microwave.StartLoopSoundCallback)); microwave.SimStateMachineClient.EnterState("x", "Enter - Holding " + actorNameForMicrowave); microwave.SimStateMachineClient.RequestState("x", "Start Microwave"); microwave.MicrowaveSelfStateMachineClient.EnterState("Microwave", "Enter"); microwave.MicrowaveSelfStateMachineClient.RequestState("Microwave", "Loop - Cook"); microwave.On = true; microwave.AddCookingAlarm((Target as IPartOfCookingProcess).CookingProcess.CookTimeLeftMinutes / microwave.CookTimeSpeedMultiplier); microwave.SimStateMachineClient.RequestState("x", "Exit - Hands Empty"); } finally { microwave.RemoveFromUseList(Actor); } if (Actor.HasExitReason(ExitReason.Canceled)) { return(false); } Actor.InteractionQueue.PushAsContinuation(TakeBloodFromMicrowave.Singleton, microwave, true); } else { return(false); } } else { return(false); } return(true); }