public static bool OnFailedInCurrentInteraction(Sims3.Gameplay.ActorSystems.InteractionQueue simIQ, List <InteractionInstance> simIQList, Sim sim, InteractionInstance inCurrentInteraction) { if (inCurrentInteraction.Autonomous && ShouldTimeUpdate(inCurrentInteraction)) { inCurrentInteraction.Target.UpdateBlockTime(); } RemoveQueue(false, simIQ, simIQList, sim, inCurrentInteraction); if (sim.Autonomy != null) { simIQ.PutDownCarriedObjects(inCurrentInteraction); } return(inCurrentInteraction.Target == sim); }
public static void RemoveQueue(bool ok, Sims3.Gameplay.ActorSystems.InteractionQueue simIQ, List <InteractionInstance> simIQList, Sim sim, InteractionInstance inCurrentInteraction) { simIQ.mInteractionTimerRunning = false; simIQ.mIsHeadInteractionActive = false; simIQ.mIsHeadInteractionLocked = false; bool empty = simIQList.Count == 0; DelInteraction(simIQList, simIQ, sim, 0, false, ok); if (!empty && sim.Autonomy != null && simIQList.Count == 0) { sim.Autonomy.SetTimeInteractionQueueBecameEmpty(); } }
public static bool ProcessAllInteraction(Sim actorIsCurrentTask) { if (actorIsCurrentTask == null || actorIsCurrentTask.ObjectId.mValue != ScriptCore.Simulator.Simulator_GetCurrentTaskImpl() || !Simulator.CheckYieldingContext(false)) { return(false); } bool okI = false; var sim = actorIsCurrentTask; NFinalizeDeath.CheckYieldingContext(); if (Simulator.GetProxy(sim.ObjectId) == null) { NFinalizeDeath.ThrowResetException(null); } var simIQ = sim.InteractionQueue; try { if (sim.SimDescription == null) { sim.mSimDescription = Create.NiecNullSimDescription(true, false, true); } if (simIQ == null) { sim.mInteractionQueue = simIQ = new Sims3.Gameplay.ActorSystems.InteractionQueue(sim); } else { if (simIQ.mInteractionList == null) { simIQ.mInteractionList = new List <InteractionInstance>(); } else { while (simIQ.mInteractionList != null && niec_std.list_remove(simIQ.mInteractionList, null)) { Simulator.Sleep(0); } } } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); for (int i = 0; i < 45; i++) { Simulator.Sleep(0); } } try { simIQ.mCurrentTransitionInteraction = null; if (!NiecHelperSituation.__acorewIsnstalled__ && simIQ.mRunningInteractions.Count != 0) { simIQ.OnReset(); } ShouldBabyOrToddler(simIQ); var simIQList = simIQ.mInteractionList; if (simIQList == null || simIQList.Count == 0) { return(false); } var simIQListArray = simIQList.ToArray(); for (int i = 0; i < simIQListArray.Length; i++) { InteractionInstance inCurrentInteraction = simIQListArray[i]; if (inCurrentInteraction == null || inCurrentInteraction.InteractionDefinition == null) { while (simIQList != null && niec_std.list_remove(simIQList, null)) { Simulator.Sleep(0); simIQList = simIQ.mInteractionList; } if (simIQList == null) { break; } continue; } if (simIQList.IndexOf(inCurrentInteraction) != 0) { break; } if (simIQList == null) { break; } if (sim.mPosture != null) { int num = 4; bool flag = false; int num2 = 10; sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.PlayRouteFailNextTimeOnly; List <InteractionObjectPair> list = new List <InteractionObjectPair>(); while (num > 0 && num2 > 0) { if (!inCurrentInteraction.Autonomous) { inCurrentInteraction.Target.ClearBlockTime(); if (sim.mPosture.Container != null) { sim.mPosture.Container.ClearBlockTime(); } } sim.ClearExitReasons(); if (!inCurrentInteraction.Target.PreTransition(inCurrentInteraction)) { inCurrentInteraction.PostureTransitionFailed(false); sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(OnFailedInCurrentInteraction(simIQ, simIQList, sim, inCurrentInteraction)); } InteractionInstance interactionInstance2 = null; if (inCurrentInteraction.Target is IGlass && sim.SimDescription.IsBonehilda) { inCurrentInteraction.PosturePreconditions = null; } interactionInstance2 = ((inCurrentInteraction.PosturePreconditions != null || sim.Posture is IHaveCustomTransitionForNullPosturePreconditions) ? sim.Posture.GetTransition(inCurrentInteraction) : sim.Posture.GetStandingTransition()); if (interactionInstance2 == null) { num = 0; } else { if (num == 4 && (!inCurrentInteraction.Test() || (!inCurrentInteraction.IsTargetValid()))) { sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(OnFailedInCurrentInteraction(simIQ, simIQList, sim, inCurrentInteraction)); } if (list.Contains(interactionInstance2.InteractionObjectPair)) { CleanUpOrOnFailureInteraction(sim, interactionInstance2, false, false); num--; continue; } list.Add(interactionInstance2.InteractionObjectPair); sim.ClearExitReasons(); simIQ.mCurrentTransitionInteraction = interactionInstance2; flag = false; try { if (inCurrentInteraction.Target != null && sim.LookAtManager != null && inCurrentInteraction.Target.Parent != sim) { sim.LookAtManager.SetInteractionLookAt(inCurrentInteraction.Target as GameObject, Sim.LookAtInterestingnessOfTargetWhenRunningTransition, LookAtJointFilter.HeadBones); } flag = NFinalizeDeath._RunInteractionWithoutCleanUp(interactionInstance2); } finally { sim.ClearSynchronizationData(); CleanUpOrOnFailureInteraction(sim, interactionInstance2, false, flag); simIQ.mCurrentTransitionInteraction = null; } if (inCurrentInteraction.Target == null || inCurrentInteraction.Target.HasBeenDestroyed) { simIQ.mIsHeadInteractionLocked = false; sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(false); } if (flag && simIQ.GetHeadInteraction() != inCurrentInteraction) { simIQ.mIsHeadInteractionLocked = false; sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(false); } if (flag && sim.HasExitReason(ExitReason.SuspensionRequested)) { RemoveQueue(false, simIQ, simIQList, sim, inCurrentInteraction); sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(false); } if (sim.HasExitReason(ExitReason.CancelExternal)) { if (!(sim.Posture is IDoNotGoToStandingOnTransitionFailed)) { InteractionInstance standingTransition = sim.Posture.GetStandingTransition(); if (standingTransition != null) { NFinalizeDeath.AddItemToList(simIQ.mInteractionList, standingTransition); } } inCurrentInteraction.PostureTransitionFailed(flag); sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; return(OnFailedInCurrentInteraction(simIQ, simIQList, sim, inCurrentInteraction)); } if (!flag) { if (ShouldTimeUpdate(interactionInstance2)) { interactionInstance2.Target.UpdateBlockTime(); } num = 4; } } num--; num2--; } sim.PlayRouteFailFrequency = Sim.RouteFailFrequency.AlwaysPlayRouteFail; if (sim.Posture != null && !sim.Posture.Satisfies(inCurrentInteraction.PosturePreconditions, inCurrentInteraction.Target, sim.Posture.GetRequiredCheck())) { return(OnFailedInCurrentInteraction(simIQ, simIQList, sim, inCurrentInteraction)); } } bool t = SCOSR.IsScriptCore2020() && NiecHelperSituation.isdgmods && NiecHelperSituation.__acorewIsnstalled__ && (inCurrentInteraction is Sim.GoToVirtualHome || inCurrentInteraction is Sim.GoToVirtualHome.GoToVirtualHomeInternal); if (t || !inCurrentInteraction.Test() || (!inCurrentInteraction.IsTargetValid())) { niec_std.list_remove(simIQList, inCurrentInteraction); if (inCurrentInteraction.Target != null) { if (!t) { try { inCurrentInteraction.CallCallbackOnFailure(sim); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch (Exception) { NFinalizeDeath.CheckYieldingContext(); } try { inCurrentInteraction.Cleanup(); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch (Exception) { NFinalizeDeath.CheckYieldingContext(); } } else { inCurrentInteraction.mbOnStartCalled = true; inCurrentInteraction.mbOnStopCalled = true; } } if (sim.IsSelectable) { simIQ.FireQueueChanged(); } continue; } if (inCurrentInteraction.InteractionObjectPair == null) { continue; } simIQ.mIsHeadInteractionLocked = true; var runningInList = simIQ.mRunningInteractions; if (runningInList != null) { runningInList.Push(inCurrentInteraction); } try { inCurrentInteraction.CallCallbackOnStart(sim); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); } simIQ.mIsHeadInteractionActive = true; try { if (inCurrentInteraction != null && inCurrentInteraction.Autonomous && sim.mAutonomy != null && sim.mAutonomy.IsRunningLocalAutonomy && !sim.IsActiveSim && (sim.IsSelectable || RandomUtil.GetFloat(100f) < Sim.AutonomyThoughtBalloonPercentageChance) && inCurrentInteraction.InteractionObjectPair.Tradeoff != null) { CommodityKind physicalOrTraitMotive = sim.Motives.GetPhysicalOrTraitMotive(inCurrentInteraction.InteractionObjectPair.Tradeoff); sim.ShowBalloonForMotive(ThoughtBalloonTypes.kThoughtBalloon, ThoughtBalloonPriority.Low, ThoughtBalloonDuration.Short, ThoughtBalloonCooldown.None, ThoughtBalloonAxis.kNeutral, physicalOrTraitMotive, inCurrentInteraction.Target); } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); } sim.ClearExitReasons(); try { okI = NFinalizeDeath._RunInteractionWithoutCleanUp(inCurrentInteraction); if (okI) { inCurrentInteraction.CallCallbackOnCompletion(sim); } else { inCurrentInteraction.CallCallbackOnFailure(sim); } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { NFinalizeDeath.ThrowResetException(null); throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); } sim.ClearSynchronizationData(); NFinalizeDeath.CheckYieldingContext(); if (sim.HasExitReason(ExitReason.CancelledByPosture) && !sim.Posture.HasBeenCanceled) { sim.Posture.CancelPosture(sim); } if (!inCurrentInteraction.WasInUse && sim.OnlyHasExitReason(ExitReason.ObjectInUse)) { inCurrentInteraction.WasInUse = true; } if (!okI && inCurrentInteraction.Target != null && ShouldTimeUpdate(inCurrentInteraction)) { inCurrentInteraction.Target.UpdateBlockTime(); } if (okI && inCurrentInteraction.Target != null && sim.IsSelectable) { EventTracker.SendEvent(new InteractionSuccessEvent(EventTypeId.kInteractionSuccess, sim, inCurrentInteraction.Target, inCurrentInteraction.InteractionObjectPair)); } RemoveQueue(okI, simIQ, simIQList, sim, inCurrentInteraction); if (inCurrentInteraction.ShouldReenque) { simIQ.ConsiderReenqueing(inCurrentInteraction); } if (Simulator.CheckYieldingContext(false)) { simIQ.PutDownCarriedObjects(inCurrentInteraction); } NFinalizeDeath.CheckYieldingContext(); niec_std.list_remove(simIQList, inCurrentInteraction); inCurrentInteraction.Cleanup(); NFinalizeDeath.CheckYieldingContext(); while (simIQList != null && niec_std.list_remove(simIQList, null)) { NFinalizeDeath.CheckYieldingContext(); Simulator.Sleep(0); simIQList = simIQ.mInteractionList; } if (simIQList == null) { break; } if (sim.IsSelectable) { simIQ.FireQueueChanged(); } if (okI) { break; } } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); throw; } catch (StackOverflowException) { sim.mPosture = null; throw; } if (simIQ.mInteractionList != null && simIQ.mInteractionList.Count == 0) { sim.QueueIdleLogic(); } return(okI); }
public static void DelInteraction(List <InteractionInstance> mInteractionList, Sims3.Gameplay.ActorSystems.InteractionQueue simIQ, Sim sim, int index, bool stopImmediately, bool succeeded) { if (index >= 0 && index < mInteractionList.Count) { InteractionInstance interactionInstance = mInteractionList._items[index]; if (interactionInstance == null) { niec_std.list_remove(mInteractionList, interactionInstance); goto r; } if (simIQ.mIsHeadInteractionLocked && index == 0) { throw new ArgumentException("Sim: " + interactionInstance.InstanceActor.SimDescription.FullName + " is removing head interaction: " + interactionInstance.GetInteractionName() + " while it is locked."); } interactionInstance.OnRemovedFromQueue(index == 0); niec_std.list_remove(mInteractionList, interactionInstance); if (!sim.HasExitReason(ExitReason.SuspensionRequested)) { CleanUpOrOnFailureInteraction(sim, interactionInstance, stopImmediately, succeeded); } if (succeeded || simIQ.mBabyOrToddlerTransitionTargetInteraction == interactionInstance || mInteractionList.Count == 0) { simIQ.mBabyOrToddlerTransitionTargetInteraction = null; } r : if (sim.IsSelectable) { simIQ.FireQueueChanged(); } } }
public static void ShouldBabyOrToddler(Sims3.Gameplay.ActorSystems.InteractionQueue simIQ) { if (simIQ.mBabyOrToddlerTransitionTargetInteraction != null) { return; } DaycareTransportSituation daycareTransportSituation = DaycareSituation.GetDaycareSituationForSim(simIQ.mActor) as DaycareTransportSituation; if (daycareTransportSituation != null) { return; } Sim sim = simIQ.mActor; InteractionInstance interactionInstance = simIQ.mInteractionList._items[0]; if (interactionInstance == null) { return; } Lot targetLot = interactionInstance.GetTargetLot(); LotLocation location = LotLocation.Invalid; World.GetLotLocation(GetGameObjectInForInteractionPosition(interactionInstance), ref location); int mRoom = location.mRoom; int mLevel = location.mLevel; if (interactionInstance.Target == simIQ.mActor || interactionInstance.Target == simIQ.mActor.Posture.Container) { return; } ItemComponent itemComp = interactionInstance.Target.ItemComp; if ((itemComp != null && itemComp.InventoryParent != null && itemComp.InventoryParent.Owner == sim) || simIQ.TryLocalToddlerCareRules(sim, interactionInstance, targetLot, mLevel, mRoom) || interactionInstance is Terrain.GoHereWith || (interactionInstance is Terrain.TeleportMeHere && !(interactionInstance is Terrain.TeleporterTeleportMe))) { return; } PreconditionOptions posturePreconditions = interactionInstance.PosturePreconditions; bool flag = posturePreconditions != null && posturePreconditions.ContainsPosture(CommodityKind.CarryingChild); Lot lotHome = sim.LotHome; bool flag2 = lotHome == sim.LotCurrent; if (flag2 && lotHome != null && lotHome.HasVirtualResidentialSlots) { flag2 = !sim.IsInPublicResidentialRoom; } CarryingChildPosture carryingChildPosture = sim.CarryingChildPosture; if (carryingChildPosture != null && carryingChildPosture.Child.Household == sim.Household && !flag2 && !flag) { if (simIQ.ShouldTakeBabyOrToddlerWithUsTo(interactionInstance)) { float num = (sim.Position - GetGameObjectInForInteractionPosition(interactionInstance)).LengthSqr(); float num2 = 0.99f / num; float num3 = 9.01f + num2 % num; if (!(num < num2) && !(num > num3)) { return; } Route route = sim.CreateRoute(); int[] validRooms = new int[1] { interactionInstance.Target.RoomId }; route.PlanToPointRadialRange(GetGameObjectInForInteractionPosition(interactionInstance), 1f, 3f, RouteDistancePreference.NoPreference, RouteOrientationPreference.NoPreference, targetLot.LotId, validRooms); if (route.PlanResult.Succeeded()) { float num4 = (route.GetDestPoint() - sim.Position).LengthSqr(); if (num4 >= 0.00250000018f) { Terrain.GoHere goHere = Terrain.GoHere.OtherLotWithCarriedChildSingleton.CreateInstance(Terrain.Singleton, sim, interactionInstance.GetPriority(), interactionInstance.Autonomous, true) as Terrain.GoHere; goHere.SetDestination(route.PlanResult.mDestination, false); simIQ.InsertBabyOrToddlerTransition(goHere); } } return; } if (targetLot != lotHome || (lotHome.HasVirtualResidentialSlots && sim.IsInPublicResidentialRoom && !targetLot.IsRoomPublic(mRoom))) { simIQ.InsertTakeBabyOrToddlerHome(sim, interactionInstance); return; } } if ((interactionInstance.Autonomous || CaregiverRoutingMonitor.TreatPlayerSimsLikeNPCs) && sim.SimDescription.TeenOrAbove && sim.Household != null && sim.Household.LotHome != null && sim.InheritedPriority().Level < InteractionPriorityLevel.ESRB) { bool flag3 = false; bool flag4 = false; if (targetLot == null || targetLot.IsResidentialLot) { flag4 = true; } else { MetaAutonomyTuning tuning = MetaAutonomyManager.GetTuning(interactionInstance.GetTargetLot().GetMetaAutonomyVenueType()); if (tuning != null) { flag3 = tuning.BabiesCanVisit; flag4 = tuning.ToddlersCanVisit; } } if (flag3 || flag4) { foreach (Sim sim2 in sim.Household.Sims) { if ((!sim2.SimDescription.Baby || sim2.LotCurrent != sim2.LotHome) && (!sim2.SimDescription.Baby || flag3) && (!sim2.SimDescription.Toddler || flag4) && sim2.SimDescription.ToddlerOrBelow && sim2.LotCurrent == sim.LotCurrent) { if (CaregiverRoutingMonitor.EnoughCaregiversRemain(sim.Household, sim.LotCurrent, false) || (carryingChildPosture != null && carryingChildPosture.Child.Household == sim.Household) || (!flag && flag2)) { break; } simIQ.InsertPickUpBabyOrToddler(sim, sim2, sim2.LotCurrent.IsActive || sim2.Posture.Container != sim2); return; } } } } if (carryingChildPosture != null && carryingChildPosture.Child.Household != sim.Household) { simIQ.InsertPutDownBabyOrToddler(sim); return; } if (carryingChildPosture != null) { DaycareSituation daycareSituationForChild = DaycareSituation.GetDaycareSituationForChild(carryingChildPosture.Child); if (daycareSituationForChild != null && daycareSituationForChild.Lot != interactionInstance.GetTargetLot()) { simIQ.InsertPutDownBabyOrToddler(sim); return; } } if ((interactionInstance.Autonomous || CaregiverRoutingMonitor.TreatPlayerSimsLikeNPCs) && carryingChildPosture != null && carryingChildPosture.Child.SimDescription.Baby && flag2 && targetLot != sim.LotCurrent) { simIQ.InsertPutDownBabyOrToddler(sim); } else if (sim.Household != null && sim.Household.LotHome != null) { foreach (Sim sim3 in sim.Household.Sims) { if (sim3.SimDescription.ToddlerOrBelow) { CaregiverRoutingMonitor.StartMonitoring(sim3); } } } }
internal static void r_internal(Sim Actor) { NiecHelperSituationPosture nhsp = null; if (Actor != null && !NFinalizeDeath.GameObjectIsValid(Actor.ObjectId.mValue)) //NFinalizeDeath.GetObject_internalFastO(Actor.ObjectId.mValue) == null) { nhsp = (Actor.Posture as NiecHelperSituationPosture); Actor.mPosture = null; if (nhsp != null) { nhsp._Actor = null; nhsp.PBack = null; } } if (Actor == null || Actor.ObjectId.mValue != ScriptCore.Simulator.Simulator_GetCurrentTaskImpl() || !Simulator.CheckYieldingContext(false)) { return; } var sim = Actor; bool bNeedMaxMood = false; Posture pBackUp = null; if (sim.Posture is NiecHelperSituationPosture) { nhsp = (sim.Posture as NiecHelperSituationPosture); pBackUp = nhsp.PBack; bNeedMaxMood = nhsp.NeedMaxMood; nhsp._Actor = null; if (sim.Standing is NiecHelperSituationPosture) { sim.Standing = null; sim.mPosture = null; if (sim.mSimDescription != null) { if (sim.mSimDescription.IsPet) { PetStandingPosture dr = new PetStandingPosture(sim); sim.PetSittingOnGround = new PetSittingOnGroundPosture(sim); sim.Standing = dr; sim.Posture = null; } else { Sim.StandingPosture dre = new Sim.StandingPosture(sim); sim.Standing = dre; sim.Posture = null; } } } else if (nhsp.PBack != null) { sim.mPosture = nhsp.PBack;//sim.Standing; } else { sim.mPosture = sim.Standing; } nhsp.PBack = null; } if (Disallowr_internal || (NiecHelperSituation.ExAA && sim == (NPlumbBob.DoneInitClass ? NFinalizeDeath.GetSafeSelectActor() : PlumbBob.SelectedActor))) { return; } if (!TestDEBUGMyMod && !SCOSR.IsScriptCore2020() && !IsOpenDGSInstalled && NFinalizeDeath.baCheckACoreThrowNRaasErrorTrap && NiecHelperSituation.__acorewIsnstalled__ && NFinalizeDeath.IsSTAwesomeMod02Fast <Sim>() ) { if (nhsp != null) { NiecTask.Perform(delegate { Simulator.Sleep(450); var p = sim.mPosture; if (p is NiecHelperSituationPosture) { return; } //NFinalizeDeath.Assert(nhsp != null, "r_internal(): nhsp failed!"); if (p != null && p == p.PreviousPosture) { p.PreviousPosture = null; } sim.mPosture = p = nhsp; nhsp.PBack = pBackUp; nhsp._Actor = sim; if (p != null && p == p.PreviousPosture) { p.PreviousPosture = null; } }); } NFinalizeDeath.AntiSpy_ThrowDefault(); } var lookm = Actor.LookAtManager; if (lookm != null) { lookm.DisableLookAts(); } lookm = null; // i know Saving TaskContext Failed. From OnSavingGame() nhsp = null; // pBackUp = null; // //using(SafeSimUpdate.Run(sim)) { while (true) { NFinalizeDeath.CheckYieldingContext(); if (NiecHelperSituation.__acorewIsnstalled__ && !NiecHelperSituation.___bOpenDGSIsInstalled_) { var iV = ScriptCore.Queries.Query_CountObjects(typeof(Sim)); if (iV >= 2) { NiecRunCommand.native_testcpu_debug(null, null); } else if (iV == 1) { for (int i = 0; i < 3; i++) { NiecRunCommand.native_testcpu_debug(null, null); } } } if (!IsOpenDGSInstalled && NFinalizeDeath.GetCurrentExecuteType() == ScriptExecuteType.Task) { Simulator.Sleep(20); } else { Simulator.Sleep(IsOpenDGSInstalled ? 15u:0u); } if (NiecHelperSituation.__acorewIsnstalled__ && !NiecHelperSituation.___bOpenDGSIsInstalled_) { var iV = ScriptCore.Queries.Query_CountObjects(typeof(Sim)); if (iV >= 2) { NiecRunCommand.native_testcpu_debug(null, null); } else if (iV == 1) { for (int i = 0; i < 3; i++) { NiecRunCommand.native_testcpu_debug(null, null); } } } if (!NFinalizeDeath.SimIsNiecHelperSituation(sim)) { continue; } if (Simulator.GetProxy(sim.ObjectId) == null) { break; } if (Disallowr_internal || (NiecHelperSituation.ExAA && sim == (NPlumbBob.DoneInitClass ? NFinalizeDeath.GetSafeSelectActor() : PlumbBob.SelectedActor))) { break; } var simIQ = sim.InteractionQueue; try { if (IsOpenDGSInstalled) { if (sim.SimDescription == null) { break; } if (simIQ == null) { break; } } else { if (sim.SimDescription == null) { sim.mSimDescription = Create.NiecNullSimDescription(true, false, true); } if (NFinalizeDeath.SimIsGRReaper(sim.SimDescription)) { NiecHelperSituation.ExistsOrCreateAndAddToSituationList(sim); } if (simIQ == null) { sim.mInteractionQueue = simIQ = new Sims3.Gameplay.ActorSystems.InteractionQueue(sim); } else { if (simIQ.mInteractionList == null) { simIQ.mInteractionList = new List <InteractionInstance>(); } else { while (simIQ.mInteractionList != null && niec_std.list_remove(simIQ.mInteractionList, null)) //simIQ.mInteractionList.Remove(null)) { Simulator.Sleep(0); } } } } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } else { for (int i = 0; i < 45; i++) { Simulator.Sleep(0); } continue; } } if (bNeedMaxMood) { try { NFinalizeDeath.Sim_MaxMood(sim); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { if (!IsOpenDGSInstalled) { NFinalizeDeath.ThrowResetException(null); } throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } else { for (int i = 0; i < 45; i++) { Simulator.Sleep(0); } continue; } } } try { if (!IsOpenDGSInstalled && sim.mAutonomy != null) { //var sg = sim.mAutonomy; try { AutonomyManager.Add(sim.mAutonomy); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { if (!IsOpenDGSInstalled) { NFinalizeDeath.ThrowResetException(null); } throw; } catch (ResetException) { throw; } catch { } } var simIQList = simIQ.mInteractionList; if (simIQList == null || simIQList.Count == 0) { continue; } var simIQListArray = simIQList.ToArray(); for (int i = 0; i < simIQListArray.Length; i++) { InteractionInstance inCurrentInteraction = simIQListArray[i]; if (inCurrentInteraction == null || inCurrentInteraction.InteractionDefinition == null) { while (simIQList != null && niec_std.list_remove(simIQList, null))//simIQList.Remove(null)) { Simulator.Sleep(0); simIQList = simIQ.mInteractionList; } if (simIQList == null) { break; } continue; } if (IsOpenDGSInstalled) { if (simIQList.IndexOf(inCurrentInteraction) != 0) { break; } } else if (i != 0) { break; } if (simIQList == null) { break; } if (!NFinalizeDeath.InteractionIsNiecHelperSituationPosture_internal(sim, inCurrentInteraction)) { //simIQList.Remove(inCurrentInteraction); niec_std.list_remove(simIQList, inCurrentInteraction); if (IsOpenDGSInstalled) { try { inCurrentInteraction.CallCallbackOnFailure(sim); inCurrentInteraction.Cleanup(); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch (Exception) { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } } } else { if (inCurrentInteraction.Target is Sim) { inCurrentInteraction.mInstanceActor = inCurrentInteraction.Target; } } if (sim.IsSelectable) { simIQ.FireQueueChanged(); } break; } if (!Bim.TestInteractionEx(inCurrentInteraction) || (IsOpenDGSInstalled && !inCurrentInteraction.IsTargetValid())) { // simIQList.Remove(inCurrentInteraction); niec_std.list_remove(simIQList, inCurrentInteraction); try { inCurrentInteraction.CallCallbackOnFailure(sim); inCurrentInteraction.Cleanup(); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch (Exception) { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } } //if (IsOpenDGSInstalled) // simIQ.DeQueue(false); if (sim.IsSelectable) { simIQ.FireQueueChanged(); } continue; } simIQ.mIsHeadInteractionLocked = true; var runningInList = simIQ.mRunningInteractions; if (runningInList != null) { runningInList.Push(inCurrentInteraction); } try { inCurrentInteraction.CallCallbackOnStart(sim); } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } } simIQ.mIsHeadInteractionActive = true; bool okI = false; try { okI = NFinalizeDeath._RunInteractionWithoutCleanUp(inCurrentInteraction); if (okI) { inCurrentInteraction.CallCallbackOnCompletion(sim); } else { inCurrentInteraction.CallCallbackOnFailure(sim); } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { if (!IsOpenDGSInstalled) { try { NiecTask.Perform(inCurrentInteraction.Cleanup); } catch (StackOverflowException) {} NFinalizeDeath.ThrowResetException(null); } throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } } if (IsOpenDGSInstalled && Simulator.CheckYieldingContext(false)) { simIQ.PutDownCarriedObjects(inCurrentInteraction); } simIQ = sim.InteractionQueue; if (simIQ == null) { inCurrentInteraction.Cleanup(); break; } NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { simIQ.PutDownCarriedObjects(inCurrentInteraction); } simIQ.mIsHeadInteractionActive = false; simIQ.mIsHeadInteractionLocked = false; //if (IsOpenDGSInstalled) // simIQ.DeQueue(okI); if (runningInList != null && runningInList.Count > 0) { runningInList.Pop(); } simIQList = simIQ.mInteractionList; if (simIQList == null) { inCurrentInteraction.Cleanup(); break; } NFinalizeDeath.CheckYieldingContext(); //simIQList.Remove(inCurrentInteraction); niec_std.list_remove(simIQList, inCurrentInteraction); inCurrentInteraction.Cleanup(); NFinalizeDeath.CheckYieldingContext(); while (simIQList != null && niec_std.list_remove(simIQList, null)) { Simulator.Sleep(0); simIQList = simIQ.mInteractionList; } if (simIQList == null) { break; } if (sim.IsSelectable) { simIQ.FireQueueChanged(); } } } catch (NMAntiSpyException) { NFinalizeDeath.SafeForceTerminateRuntime(); } catch (StackOverflowException) { sim.mPosture = null; throw; } catch (ResetException) { throw; } catch { NFinalizeDeath.CheckYieldingContext(); if (IsOpenDGSInstalled) { throw; } else { for (int i = 0; i < 45; i++) { Simulator.Sleep(0); } continue; } } }//} //NFinalizeDeath.M(); }