public ScriptExecuteType _InitInit(bool postLoad) { if (mbInited) { return(GetScriptExecuteType()); } mbInited = true; mProduct = UserToolUtils.GetProduct(UserToolUtils.BuildBuyProductType.Object, GetResourceKey()); if (mProduct != null) { mbProductInited = true; } if (mActorsUsingMe != null) { while (mActorsUsingMe.Remove(null)) { } } if (postLoad) { if (mRoutingReferenceList != null) { int i = 0; while (i < mRoutingReferenceList.Count) { if (mRoutingReferenceList[i] == null || !Sims3.SimIFace.Objects.IsValid(mRoutingReferenceList[i].ObjectId)) { mRoutingReferenceList.RemoveAt(i); } else { i++; } } } try { OnLoad(); } catch (Exception) { if (!isAwcore) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } } else { try { OnCreation(); } catch (Exception) { if (!isAwcore) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } } try { if (AddToLot()) { LotManager.PlaceObjectOnLot(this, base.Proxy.ObjectId); } } catch (Exception) { if (!isAwcore) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } try { OnStartup(); } catch (Exception) { if (!NiecHelperSituation.__acorewIsnstalled__) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } if (mObjComponents != null) { try { int j = 0; while (j < mObjComponents.Count) { ObjectComponent objectComponent = mObjComponents[j]; if (objectComponent != null) { if (postLoad) { objectComponent.OnLoad(); } objectComponent.OnStartup(); j++; } else { mObjComponents.RemoveAt(j); } } if (mObjComponents.Count == 0) { mObjComponents = null; } } catch (Exception) { if (!NiecHelperSituation.__acorewIsnstalled__) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } } try { if (!postLoad && LotManager.sIsBuildBuyModeOn) { SetOwnerLot(LotManager.ActiveLot); } UpdateOwnerLot(LotCurrent); } catch (Exception) { mLotCurrent = LotManager.sWorldLot; if (!isAwcore) { if (AssemblyCheckByNiec.IsInstalled("NRaasErrorTrap") || SCOSR.IsScriptCore2020()) { throw; } } } if (isAwcore) { Sim obj_Sim = ((object)this) as Sim; if (obj_Sim != null) { NFinalizeDeath.AddItemToList(gcList, obj_Sim.mAutonomy); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mBuffManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mMoodManager); if (obj_Sim.mInteractionQueue != null) { NFinalizeDeath.AddItemToList(gcList, obj_Sim.mInteractionQueue); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mInteractionQueue.mInteractionList); } NFinalizeDeath.AddItemToList(gcList, obj_Sim.mLookAtManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mIdleManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mThoughtBalloonManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mSocialComponent); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mSnubManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mMapTagManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mDreamsAndPromisesManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mDreamsAndPromisesManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mDeepSnowEffectManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mFlags); NFinalizeDeath.AddItemToList(gcList, obj_Sim.SleepDreamManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mCelebrity); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mActorsUsingMe); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mClothingReactionBroadcaster); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mOpportunityManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mPosture); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mActiveSwitchOutfitHelper); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mMapTagManager); NFinalizeDeath.AddItemToList(gcList, obj_Sim.mSimCommodityInteractionMap); } } return(GetScriptExecuteType()); }
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); }